{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "The First Tour of the IPython Notebook" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Why IPython Notebook?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I still remember that the first time I'd seen [IPython Notebook](http://ipython.org/notebook.html) was at [Taipei.py](http://www.meetup.com/Taipei-py/). At that time, I wasn't sure why it's a good idea to write Python programs on a restricted environment in a browser. I mean, I couldn't even use my favorite Vim commands! I tried installing it and wrote a few short programs, but ended up not being interested to continue using the Notebook. On the other hand, I found the [IPython interactive shell](http://ipython.org/index.html) to be more convenient than the original Python shell, so I started using it more and more often when I needed to issue short Python commands.\n", "\n", "My second experience with IPython Notebook was from the course materials of [CS231n](http://cs231n.stanford.edu). In that course, each assignment was a IPython Notebook. You could complete the code on either the Notebook itself or independent Python scripts. The results could be evaluated immediately on the Notebook. I realized this was a fantastic way to share and communicate! There was also the [nbviewer](http://nbviewer.ipython.org/), which made it so easy to view all those Notebooks without having to actually set up the Python environment.\n", "\n", "As I gained more experience with machine learning tasks using Python, I started to understand why IPython Notebook was so popular among the scientific computing community. I believed one of the reasons must be that it provided a very simple way to record everything you did.\n", "\n", "
\u6700\u8fd1\u5728\u8cc7\u6599\u79d1\u5b78\u9818\u57df\u5b78\u7fd2\uff0c\u6700\u8b93\u6211\u611f\u89ba\u9707\u9a5a\u7684\u4e0d\u662f\u6280\u8853\uff0c\u53cd\u800c\u662f science != engineering \u7684\u611f\u89ba\uff0c\u8ddf\u5beb code \u505a\u7522\u54c1\u5b8c\u5168\u4e0d\u4e00\u6a23\u7684\u601d\u7dad\u548c\u5de5\u4f5c\u6a21\u5f0f\u3002\u6253\u958b ipython \u6216 rstudio \u5c31\u50cf\u6253\u958b\u5be6\u9a57\u8a18\u9304\u7c3f\uff0c\u4e0d\u65b7\u5047\u8a2d\u3001\u9a57\u8b49\u3001\u9810\u6e2c\u3002\u9019\u8ddf\u505a\u8edf\u9ad4\u5de5\u7a0b\uff0c\u5dee\u5225\u771f\u7684\u883b\u5927\u7684\u3002
— i\u035bho\u034c\u036f\u0366\u0309\u0351we\u030d\u0303\u030f\u0363r\u0306\u033d\u0313 (@ihower) August 31, 2015
\n",
"\n",
"\n",
"For example, when doing data science, there is a need to manage not just the source code but also the data. Tasks such as data preprocessing, data cleaning and feature extraction all requires some transformations of the data. Oftentimes, it seems that some of the transformations would be done for only once, and it is very tempting to just issue the command without even recording what has been done. This could be a disaster when you want to rerun the experiments under different settings for the early stages of the pipeline. Even if you do put down the commands on Python scripts, it is still difficult to figure out the order and parameters for these scripts later. On the other hand, if you put much effort to write a single script for all the data transformation and analysis straight from the original data every time runs, the running time may become unacceptable when dealing with big data. That's where IPython Notebook shines. It is a perfect notebook to record everything.\n"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Data Analysis with IPython Notebook"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So let's get started with our tour of IPython Notebook. Some simple tasks will be demonstrated using several libraries including:\n",
"\n",
"1. [MPLD3](http://mpld3.github.io/)\n",
"2. [matplotlib](http://matplotlib.org/)\n",
"3. [Numpy](http://www.numpy.org/)\n",
"4. [pandas](http://pandas.pydata.org/)\n",
"5. [scikit-learn](http://scikit-learn.org/stable/index.html)\n",
"6. [wordcloud](https://github.com/amueller/word_cloud)\n",
" \n",
"In particular, matplotlib is a powerful graphing package for data visualization, and the close integration with IPython Notebook makes it even more useful."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Firstly, we use [`%matplotlib inline`](http://ipython.readthedocs.org/en/stable/interactive/magics.html?highlight=matplotlib#magic-matplotlib) magic command to make matplotlib display plots directly inside the Notebook."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Showing the Most Important Features"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get intuition on a model, finding the features that have the largest weights are often helpful. We will use the polarity dataset for the demonstration:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"! wget http://www.cs.cornell.edu/people/pabo/movie-review-data/review_polarity.tar.gz\n",
"! tar xzf review_polarity.tar.gz"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"--2015-12-26 16:14:15-- http://www.cs.cornell.edu/people/pabo/movie-review-data/review_polarity.tar.gz\r\n",
"Resolving www.cs.cornell.edu (www.cs.cornell.edu)... 128.84.154.137\r\n",
"Connecting to www.cs.cornell.edu (www.cs.cornell.edu)|128.84.154.137|:80... "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"connected.\r\n",
"HTTP request sent, awaiting response... "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"200 OK\r\n",
"Length: 3127238 (3.0M) [application/x-gzip]\r\n",
"Saving to: \u2018review_polarity.tar.gz\u2019\r\n",
"\r\n",
"\r",
" 0% [ ] 0 --.-K/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 0% [ ] 8,123 33.8KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 0% [ ] 16,811 35.1KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 1% [ ] 38,531 53.7KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 2% [ ] 76,179 79.6KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 4% [> ] 136,995 115KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
" 6% [=> ] 214,371 150KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"10% [==> ] 315,571 188KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"13% [====> ] 436,131 228KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"18% [======> ] 579,163 269KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"23% [========> ] 743,003 311KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"29% [==========> ] 932,691 355KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"36% [=============> ] 1,153,755 403KB/s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"45% [================> ] 1,421,635 458KB/s eta 4s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"49% [==================> ] 1,554,851 463KB/s eta 4s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"54% [====================> ] 1,702,547 473KB/s eta 4s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"59% [======================> ] 1,853,139 483KB/s eta 4s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"64% [========================> ] 2,005,179 491KB/s eta 4s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"69% [=========================> ] 2,158,667 500KB/s eta 2s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"74% [===========================> ] 2,317,947 509KB/s eta 2s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"79% [=============================> ] 2,473,163 516KB/s eta 2s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"83% [===============================> ] 2,623,755 572KB/s eta 2s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"88% [=================================> ] 2,777,059 601KB/s eta 2s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"93% [===================================> ] 2,931,995 628KB/s eta 0s "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"98% [=====================================> ] 3,092,723 649KB/s eta 0s \r",
"100%[======================================>] 3,127,238 655KB/s in 5.6s \r\n",
"\r\n",
"2015-12-26 16:14:21 (543 KB/s) - \u2018review_polarity.tar.gz\u2019 saved [3127238/3127238]\r\n",
"\r\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Firstly load the required modules:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.datasets import load_files\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.svm import LinearSVC"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use [`TfidfVectorizer`](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html) to get the TF-IDF feature vector for each sentence:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sent_data = load_files('txt_sentoken')\n",
"\n",
"tfidf_vec = TfidfVectorizer()\n",
"\n",
"sent_X = tfidf_vec.fit_transform(sent_data.data)\n",
"sent_y = sent_data.target"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[`LinearSVC`](http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html) is used to train a classifier for positive and negative sentiments."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"lsvc = LinearSVC()\n",
"lsvc.fit(sent_X, sent_y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
" intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
" multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
" verbose=0)"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we show the most important features learned by the classifier."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def display_top_features(weights, names, top_n):\n",
" top_features = sorted(zip(weights, names), key=lambda x: abs(x[0]), reverse=True)[:top_n]\n",
" top_weights = [x[0] for x in top_features]\n",
" top_names = [x[1] for x in top_features]\n",
" \n",
" fig, ax = plt.subplots(figsize=(16,8))\n",
" ind = np.arange(top_n)\n",
" bars = ax.bar(ind, top_weights, color='blue', edgecolor='black')\n",
" for bar, w in zip(bars, top_weights):\n",
" if w < 0:\n",
" bar.set_facecolor('red')\n",
" \n",
" width = 0.30\n",
" ax.set_xticks(ind + width)\n",
" ax.set_xticklabels(top_names, rotation=45, fontsize=12)\n",
" \n",
" plt.show(fig)\n",
"\n",
"display_top_features(lsvc.coef_[0], tfidf_vec.get_feature_names(), 20)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAA50AAAIYCAYAAADuJoiVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYVeW5N+Bng35ERcUKeiSggl1EDaKCigUsCPYSVFSw\nRE8U9YgaS8JJLOEodj0mGnvyWWOJMZaoGPUYE2NALBRFRUEQEGMBBWae7w++2Yex68yaPXu87+ua\n65q9Z81ez373ar/1vmvtUmZmAAAAQAFaVboAAAAAWi6hEwAAgMIInQAAABRG6AQAAKAwQicAAACF\nEToBAAAoTIND51tvvRU77LBDbLjhhrHxxhvHpZde2hh1AQAA0AKUGvo9ndOnT4/p06dH9+7d48MP\nP4zNN9887rnnnlhvvfUaq0YAAACqVIN7Ojt06BDdu3ePiIi2bdvG+uuvH1OnTm1wYQAAAFS/Rr2m\n8/XXX48xY8ZEz549G/NlAQAAqFJLNNYLffjhh7HvvvvGJZdcEm3btv3M30ulUmPNCgAAgGbo867e\nbJSezoULF8a+++4bhxxySOyxxx5fWsA3+fnZz372jf+n0j9qVq+a1dtSa662etWsXjWrV83N66fa\n6lXzN//5Io0SOocMGRIbbLBBDBs2rDFeDgAAgBaiwaHzqaeeit/+9rfx6KOPxqabbhqbbbZZPPDA\nA41RGwAAAFWuwdd09urVK2pqahqjls/o06dPIa9bJDUXr9rqjVBzU6i2eiOqr+ZqqzdCzU2h2uqN\nUHNTqLZ6I9TcFKqt3gg1N5YGf0/n155RqfSl43wBAACoXl+U+Rr1K1Namg4dOkepVGoWPx06dK50\ncwAAAHxjejq/xKKveWkuNVdf+wEAAN8dejoBAABockInAAAAhRE6AQAAKIzQCQAAQGGETgAAAAoj\ndAIAAFAYoRMAAIDCCJ0AAAAURugEAACgMEInAAAAhRE6AQAAKIzQCQAAQGGETgAAAAojdAIAAFAY\noRMAAIDCCJ0AAAAURugEAACgMEInAAAAhRE6AQAAKIzQCQAAQGGETgAAAAojdAIAAFAYoRMAAIDC\nCJ0AAAAURugEAACgMEInAAAAhRE6AQAAKIzQCQAAQGGETgAAAAojdAIAAFAYoRMAAIDCCJ0AAAAU\nRugEAACgMEInAAAAhRE6AQAAKIzQCQAAQGGETgAAAAojdAIAAFAYoRMAAIDCCJ0ADdShQ+colUrN\n5qdDh86VbhIAgLJSZmaTzKhUiiaaVaMplUoR0Vxqrr72g++K5rWtiLC9AAAq4Ysyn55OAAAACiN0\nAgAAUBihEwAAgMIInQBUheZ0wyY3awKAr8+NhL5E87o5SPW1H3xXNK9tRURL3V40r3ZumW0MAA3h\nRkIAAAA0OaETAACAwgidAAAAFEboBAAAoDBCJwAAAIUROgEAACiM0AkAVC3f3wrQ/Pmezi/hO+GA\nr6N5bSsiWur2onm1c8ts42pkuQBoPnxPJwAAAE1O6AQAAKAwQicAAACFEToBAAAojNAJAABAYYRO\nAAAACiN0AgAAUBihEwAAgMIInQAAUEEdOnSOUqnUbH46dOhc6SahhSllZjbJjEqlaKJZNZpSqRQR\nzaXm6ms/+K5oXtuKiJa6vWhe7dwy27gaWS5oCZrXchxhWebb+qLMp6cTAACAwgidAAAAFEboBAAA\noDBCJwAAAIUROgEAACiM0AkAAEBhhE4AAAAKI3QCAABQGKETAACAwgidAAAAFEboBAAAoDBCJwAA\nAIUROgEAAChMo4TOoUOHRvv27aNbt26N8XIAAAC0EI0SOg8//PB48MEHG+OlAAAAaEEaJXT27t07\nVlhhhcZ4KQAAAFoQ13QCAABQGKETAACAwizRlDMbMWJE+fc+ffpEnz59mnL2AAAANJLRo0fH6NGj\nv3K6UmZmY8zw9ddfjwEDBsS4ceM+f0alUjTSrJpMqVSKiOZSc/W1H3xXNK9tRURL3V40r3ZumW1c\njSwXtATNazmOsCzzbX1R5muU4bWDBg2KrbfeOiZOnBjf//7347rrrmuMlwUAAKDKNVpP51fOSE9n\nA1Vf+8F3RfPaVkS01O1F82rnltnG1chyQUvQvJbjCMsy31ahPZ0AAADweYROAAAACiN0AgAAUBih\nEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMII\nnQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG\n6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAw\nQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACF\nEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAo\njNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABA\nYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAA\nCiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAA\nUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYRoldD7wwAOx3nrrxTrrrBMj\nR45sjJcEAACgBShlZjbkBWpra2OdddaJRx55JFZfffXo0aNH3HLLLbHeeuvVn1GpFA2cVZMrlUoR\n0Vxqrr72g++K5rWtiGip24vm1c4ts42rkeWClqB5LccRlmW+rS/KfA3u6fzb3/4WXbt2jU6dOsWS\nSy4ZBx54YNxzzz0NfVkAAABagAaHzqlTp0bHjh3Lj9dYY42YOnVqQ18WAACAFmCJppzZoqEDzUOn\n9u3j9enTv3Sa9u07xYwZzaPm9u07feU0nTt0iDdmzGiCar6er9PGam6Yaqs3omXW3Jy2FREtd3vR\nnNq5pbZxNdZsuWiYlrpcNKeaq205jmiZy3K11RtRHTWPHj06Ro8e/ZX/2+BrOv/617/GiBEj4oEH\nHoiIiF/+8pdRKpXi1FNPrT+jUqmZjVSPFjdWvRrbWM0NU231RrTcmquNNi5eNbZxNdZcbaqxjdXc\nMC1xOY5oXm0c8dXtXG31RlRxzUVc09mjR4945ZVX4o033oj58+fHLbfcEgMHDmzoywIAANACNHh4\nbevWrePyyy+Pfv36RW1tbQwdOjTWX3/9xqgNAACAKtfg4bVfe0ZV2D1cbaqxjdXcMNVWb0TLrbna\naOPiVWMbV2PN1aYa21jNDdMSl+OI5tXGEYbXNoWKDq8FAACALyJ0AgAAUBihEwAAgMIInQAAABRG\n6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAw\nQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACF\nEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAo\njNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABA\nYYROAAAACiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAA\nCiN0AgAAUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAA\nUBihEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAA\ngMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAAgMIInQAA\nABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYRoUOu+4447YaKONonXr1vHcc881Vk0AAAC0EA0K\nnRtvvHHcddddsd122zVWPQAAALQgSzTkn9ddd92IiMjMRikGAACAlsU1nQAAABTmK3s6+/btGzNm\nzCg/zswolUpxzjnnxIABA77RzEYs9nuf//8DAABA9Rk9enSMHj36K6crZSOMjd1+++1j1KhRsdlm\nm33xjEqlaE6DcEvR8oYFV2Mbq7lhqq3eiJZbc7XRxsWrxjauxpqrTTW2sZobpiUuxxHNq40jvrqd\nq63eiCqu+XOmabThtS1xZQIAAKBhGhQ677777ujYsWP89a9/jd133z123XXXxqoLAACAFqBRhtd+\nrRlVYfdwtanGNlZzw1RbvREtt+Zqo42LV41tXI01V5tqbGM1N0xLXI4jmlcbRxhe2xSaxfBaAAAA\n+DShEwAAgMIInQAAABRG6AQAAKAwQicAAACFEToBAAAojNAJAABAYYROAAAACiN0AgAAUBihEwAA\ngMIInQAAABRG6AQAAKAwQicAAEAz06l9+yhFNJufTu3bf+v3ssS3/k8AAIAq0Kl9+yjNmFHpMsq+\nToB7ffr0JqikaQidAABAi9aSAlw1MrwWAAD4RlrS0E+Kp6cTAIAWpTkNpWypYUjPId+E0AkAQIsi\nEEHzYngtAABfyDBKoKH0dAIA8IX0GgINpacTAACAwgidAAAAFEboBAAAoDBCJwAAAIUROgEAACiM\n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\nKFizD53Tpk2LSy+9NCKqY6cwd+7cOPvss+OUU06JCRMmVLqcr7R4ey4e1Jp7O3/ahx9+GEsuuWQ5\neLZq1XwX7ZYYiKttefk2WuLn9l1Q7Z9bTU3NZ37/LqxvTWHevHmx5557xqGHHhoR1XGM8U28+eab\ncfTRR8eJJ54YEc3n/TWHGmg+Pvrooxg+fHiMGjUqXn755UqX87V8ehm2TH89zffIPBZ9iPfee2/c\nddddccEFF0RE89lofpGll146+vXrFyussEKce+65zX4FKpVKMX/+/Bg/fny0atUqXnvttZgwYUJV\nfa/qZZddFgceeGC899570aVLlxg1alSlS/pSrVq1ismTJ3/hd9pWk7p1cd68eRWupHitWrWKt956\nK/7yl79ERDE7mXnz5sUtt9wSEYt6KO68885Gn0eR6gLewoULK1zJIgsXLiz38IwfPz4++eST8ufW\nnPcji2vdunV89NFHMWbMmGjdunVMmDAh7r333mbTxtVqwYIFsdRSS8WIESNizJgx8eMf/zgimv8x\nxjexwgorxLHHHhsvvPBCnHrqqRFR2ff35ptvxosvvtjsjy+qbRvxaZ9Xd3N+L8sss0z0798/3nvv\nvbjmmmvipZdeqnRJX2rhwoXlZfjDDz+MuXPnNvtlOqL+CcxKaT1ixIgRlS7ii5RKpVhzzTWjpqYm\nRo8eHZMnT45tttmmvNFsbh9yXU3rrrtuLLXUUvHaa6/Fo48+Gt27d48VVlih0uV9rpqamjjttNPi\nmWeeiblz58a+++4bPXv2jPXWW6/SpX0ttbW1sWDBgvj73/8ep556amyzzTZx4YUXVrqsr3TffffF\nTTfdFAMGDIilllqq0uV8K7W1tdGqVauYM2dOHHDAAdG+fftYe+21K11WoU4//fT47W9/G0OGDClk\n+3P77bfHueeeG9OnT4+hQ4fGD37wg9hyyy0bfT5FyMxo1apVTJs2LW666abo0KFDLL/88hWtp3Xr\n1lFTUxO9e/eOa6+9Nu69995o06ZNdO3aNZZccslmuR/5PBdeeGHsv//+0aVLl9h5551j1113bdZf\nUVZTU/O5o01qa2ubRXtPmzYtzj///Fh11VVj6623jvXWWy+uuOKKePnll2O33XZrtscY30RmRps2\nbaJbt26x5JJLxv333x9vvPFGbLfddhV5fwsWLIhzzz03xo4dG3379v3CZaSSMjNmz54ds2bNinbt\n2lXl51/Xru+8807MnDkz3n777VhllVWa7XupWw433HDDaNOmTYwePTpee+216NixY6yyyiqVLu8z\namtro3Xr1lFbWxt9+/aNu+++O84+++xYbrnlYtlll40VV1yx0iV+roULF8YSSywRtbW18dRTT8Wq\nq64aSyyxRJPX0axD5/z582PZZZeNrl27xpQpU+LBBx+Mjz/+OHr06NEsdwqL13POOefEtGnT4t57\n741Zs2bF+uuvHyuvvHKFK/ysVq1aRevWreOee+6Jiy66KI466qg47rjjIiKaXft+Wk1NTbRu3TrW\nWGON+M1vfhNTpkyJDTbYIAYMGBCtWrUq93JEVP69ZGa9Gmpra+OWW26JzTffPDp16lTx+r6pusA5\nfvz4uOyyy+KRRx6JZ599NtZcc81Ya621Kl1eo/i8A+SePXvGDTfcEO3atYsNN9yw0efZuXPnmDFj\nRpx33nmxzz77lEd4NMcDtMXV1Td16tQ499xz49JLL41lllkmunbtGssuu2yT11O3fEZEjBgxIlq3\nbh233nprvPTSS/H3v/895syZUz4Yr4Z1r3fv3vHqq6/G2WefHccff3wMHz680iV9obrtcm1tbVx0\n0UUxduzYGD9+fHTr1q3Z7LefeeaZuO2222LatGnRsWPH2GKLLWLDDTeMK664Il566aXo379/s6n1\n26qrfeLEifGrX/0q3nnnnfjTn/4U77//fuywww5N/v5at24dkyZNirvvvjuGDh0arVu3blbtW1tb\nG7vsskvcdtttcemll8YLL7wQW2+9dSy99NKVLu1rqzvxN3bs2BgwYEA88sgj8bvf/S7Gjh0b/fv3\nr3R5n2vxbfW6664b3/ve95p18Kxbb3baaadYZZVV4tZbb42VVlopfvKTn0Tnzp1j8803r3SJn1EX\nlGtqaqJnz54xderU2GabbWKZZZaJiGjSdbBZh87WrVvHggULYq+99or58+fHmDFjYvLkyTFnzpzo\n1atXs9sp1NWx7bbbxvLLLx+XX355/Nu//VtMnjw5nn766dhwww1jpZVWqnCV/6uu7dZaa6247bbb\nolWrVrHRRhvFKqusEu3bt29WbftpdWdtampq4s0334zdd9899ttvv/jLX/4Sd955Z/Tr16/ezqIS\n7+ONN96Idu3aldvxgw8+iDZt2kRExGqrrRZvvPFGXHvttbH33ntXXW9nqVSKSZMmRe/evWPAgAGx\nxRZbxMKFC+OOO+6Ijh07RpcuXSpd4rc2adKkWGmllcrLzLx588q9ZhERr732WkyfPj369u3b6OtI\nmzZtYsyYMbHUUkvF7NmzY+7cudGjR49mc/Lki7Rq1SrGjRsX22yzTfTp0yfatm0bd911Vyy55JKx\n1lprxXLLLVeRugYMGBBz586Nk08+OdZaa63YaaedYuLEifH000/HBx98EBtuuGEsueSSFant6/rk\nk09iiSWWiD//+c/Rpk2beOCBB2L77bePNdZYo1mejGjVqlXU1tbG5ptvHrNmzYq5c+fGI488Erfd\ndlscdNBBzWL5XWuttWLVVVeNxx57LCZOnBidOnWKHj16xIYbbhhXXnlliwiepVIppkyZEltvvXUc\nfvjhMXjw4Gjfvn35Pe+0005RKpUK731e/OTvFltsEb/73e9iwoQJ0bdv32bVrgMGDIj27dvHpZde\nGrvttltcfPHF8Y9//CP22WefqlkOSqVSzJw5M/bcc8/48Y9/HJdddln06tUrhg4dGj169IiuXbtW\nusTPqLv8YciQIdG7d+/YbLPNmmXwXHxb+95778Uf//jH+P3vfx+tW7eOq6++OmbOnBm/+tWv4uOP\nP45SqdSstst1y++2224b6667blx//fXRtm3bqKmpKZ8kbDLZzB1xxBHZv3//zMx8880389xzz83+\n/fvnBRdcUJ6mtra2UuV9xvvvv5877LBDvvjii+Xn/vjHP+YOO+yQhx9+eI4fP76C1f2vmpqaeo/f\ne++9/J//+Z/ca6+98rjjjsuxY8eW/zZ16tSmLu9LLVy4MDMXvYftt98+R44cme+++25mZj788MO5\n99575wEHHJCZmf/93/+dhx56aJPWV1tbm6+99lqWSqW85pprMjNzzpw5uf766+eJJ56Yjz/+eGZm\nzpgxI/fee+988skn672vanHRRRflwIEDy48nTJiQw4cPzx49euQTTzxRwcq+vfHjx+fOO++cI0eO\nzMxFn9sPf/jDPP744/P111/PzMznnnsuV1xxxRw9enSjzLPuc198O/bRRx/lpZdemj179swrr7yy\n/PzTTz/dKPNsbLW1tXnMMcfkKaecUn7u5ptvzm7duuV//ud/5ttvv90kdXx6HTrooIOyVCrlb3/7\n2/Jz8+fPz5///Oe54447ltfP5qjuvXzyySf1nv/xj3+cyy23XP71r38tP/e3v/0t582b16T1fZ66\nZXjUqFG59957l5/fb7/9slu3bvWW8Urttxff9913332599575/HHH1/eZz/22GO5wQYb5HHHHVeR\n+hrTY4/TgW7gAAAgAElEQVQ9lltvvXX58fvvv5/XX399brzxxvnLX/6y8Pm//fbbudtuu+Uf//jH\n8j76tttuy0GDBuUHH3yQmc3j+G3GjBm53XbblbfxmZmzZ8/O1VZbLc8555wKVvbFFm+3+fPnl38f\nO3ZsbrPNNpm5aBvSq1evPOiggzIz87XXXmvSGr/I533mXbp0yU033TRnz56dmZl333137rXXXjl8\n+PB8/vnnm7rEeurq/eSTT/Lhhx/OmTNn5sorr5wvvPBCHnXUUbnxxhvnxx9/nJmZI0eOzEmTJlWy\n3LLFt3Uvv/xy9unTp7xfGT58eB5wwAE5dOjQfOSRR5qspuYTxb/A9773vejXr19ERKyxxhpx7LHH\nxtprrx1XXXVVnHfeeRFRmV6sOp++M+KHH34YU6ZMqXcDod122y06deoU9913X1x88cUxf/78pi6z\nnrozNhMmTIgLL7wwhg8fHpMmTYrNN988Tj755HjrrbfimmuuiXHjxsVxxx0XZ599dkXr/bS6oVub\nbrpprLjiinHKKaeUr5ndaaedYvjw4TFnzpzo2rVrnH322XHMMcc0aX2lUik6d+4cV111Vfz7v/97\n3HjjjdGuXbu44oorYsqUKXHRRRfFrrvuGh988EH861//iuuvv778vqrJMsssU+9umuuss07svPPO\nMX78+Bg+fHg88sgjFa7wm1t55ZVj2223jWeeeSYuvfTSaNeuXfTt2zc++uij2GqrreK8886Ljz/+\nOM4666y45557YsGCBQ26QUPdWcbx48fHz372szjiiCNizJgx0aZNmxg8eHAcdNBBcd1118UFF1wQ\nQ4YMiSFDhpSHajcnmRlvv/12vRsVHHTQQTFo0KA477zz4sYbb4y333678Drqhuxdc801ERFx8803\nx1FHHRXDhg2LMWPGRETEkksuGaeeemr07ds3dt5558Jr+jbqhkONGzcuBg4cGAcccED88Ic/jLlz\n58Zll10Whx12WPTr1y8eeuih2GOPPWLkyJHlURSVqjfif/fF8+fPL/eqHHzwwTFx4sR49tln44MP\nPohHH3203rRNqW7fV7f+9O/fP4488sh4880341e/+lW89NJL0adPn7jyyivj9ttvb9bDmL+O2tra\n+Ne//hXvvvtuREQsu+yy0bdv31iwYEGMGjUqrrjiikLn/8EHH0S3bt1i2LBh8R//8R9x2WWXxY47\n7hhPPfVU/P73v4+Iyh6/1WnXrl0sscQScdttt5WfW3HFFeP444+PKVOmVLCyL1YqleLjjz+OzIwl\nl1wyJk+eHAsWLIjvfe970bZt25g8eXJsscUW8f3vfz9uvvnmiIgYOXJk+St0KmHixIkxbty4z/3M\nJ02aFEsttVTssMMO8e6778Yee+wRhx9+eDz33HNx6623Vuy4efGbBvXq1SvuvPPOWHnlleOwww6L\nAw88MB5//PF4/vnno02bNnHZZZfF9ddf32xGrtVt6yZPnhyrr756LLPMMrHddtvFgQceGH/+859j\n4MCBMXHixHj++eebrKZmNbx28WEe+f+HMtx9993x0EMPxZFHHhkRi0LosssuG/fcc08su+yy0atX\nr4qNuV+4cGE5KMyePTvatGkTyy23XMybNy9+8pOfxA477BCrr756RCxa2bp27RpnnnlmxYaa1Q1z\nadWqVbz00kux7bbbRpcuXeIf//hHPPHEE/Hcc8/FgQceGJ07d44nn3wyrr766pg6dWrccccdzSIQ\nLT5M509/+lNMnTo1br/99oiIuPTSS2P06NHx1FNPxYEHHhh77rlnrLvuunHaaafFRhtt1KR11i27\nm2++eay++uoxdOjQ6NSpU+y1116x6667xvbbbx9PPPFEPP744zFr1qx46KGHonfv3tG5c+cmrfOb\nqDtYW7hwYfm6kcyMM844I77//e+Xb2qy1lprxbhx46J79+7xyCOPRO/evaNt27YVrv7rycxYeuml\nY8MNN4xZs2bFn//85/jwww/jiCOOiIEDB8bqq68eb7/9dvziF7+IJ598Mt56660YNGhQLL300t9q\n6FVdO44bNy6222676NixY8yePTtuvvnmKJVK0b179+jevXssu+yy8X//7/+N2traeOyxx6J169YV\nP1D79LDOuuE7t912W6y33nrRqVOniFh098x//vOfMXHixFhhhRVik002adThfB9//PFnbobw8MMP\nx89+9rOYMWNGbL/99rH77rvH+PHj44wzzoh+/fpFhw4donXr1tG7d++KbYu/TN01TnWXDey4446x\nzTbbxAMPPBDXXntt7LrrrnHAAQfE7Nmz4+67747a2tq48847K7qNrvv8L7/88ujZs2c888wz8fTT\nT8eTTz4Zzz//fDz99NPxf/7P/ykPWdxuu+2afFjz4tea3nzzzfHwww/HiiuuWD4wf+CBB2LSpEnR\nuXPn8g28tt9++2Z7Y5BPq1sn582bF/PmzYs2bdrEmmuuGTfddFPcd999ccghh0TEouD57LPPxnHH\nHReHHXZYIduSupvxfP/7349+/frFNttsE8svv3ycf/758dprr8W7774bL7zwQvTv3798XVlTq62t\njWOPPTYeeuihmDNnTrnuJZZYonxDvLvvvjsWLFhQHmrd3Bx11FFxySWXxOabbx4bbLBB9OrVKzba\naKO45ppr4swzz4y+ffvGjTfeGBGLTv5MmzYtTjzxxIq8l0mTJkWPHj1is802i0022SQiIk455ZRY\nb731yjecGzp0aNx0001x7bXXxr777hvdu3ePVVZZJfr371+xm3HWXS5w8803xworrFD+doTa2tqY\nMGFCbLDBBvHBBx/EH/7whzj//PPjrrvuinXWWacitU6aNCleeeWVWGONNcrHJIcddlhMmTIldt55\n51h//fVj+eWXj3XXXTeuuOKK2GSTTeK5556LuXPnRr9+/ZpmCHmT9al+hQULFpR/nz59er7xxhuZ\nmTl37tzceOONc8899yz//ZprrsmDDjooZ82a1eR11qnrtq6pqclevXrl9ttvn926dcvJkydnZuYp\np5ySbdq0yRNOOCGPOOKIXHXVVXPixIkVqfXxxx8vDw+oG4Zx9NFH58knn1ye5o477sj9998/r7ji\niszMnDZtWk6YMKHcFV/poZ917b1w4cK877778sEHH8yllloqf/Ob3+R+++2X6623Xp5yyim55ppr\n5h133FHRWmtra+sNa7j66quzVCrlddddV2+6p59+Oq+99tpceeWVc8SIEeX/bW7qaho7dmwefPDB\nOXDgwPLQ0t/97ndZKpXypz/9ad599905ePDg3GWXXfKxxx7LtddeO//2t79VsvRvpLa2tvxeZ86c\nmeeff372798/zz///PI0CxcuzMmTJ+ewYcOyS5cuOXTo0AbNc/bs2dmnT596lwustNJKuc466+SV\nV16ZH330UWYuWm/ralt8W1kJdcv2+PHj8xe/+EVeddVV+eqrr+bHH3+cP/7xj3P33XfPW265JRcs\nWJCDBw/Os88+Oy+88MJceeWVy0PsGsPYsWPz+OOP/8zw/9mzZ+dNN92U2223XZ5xxhnl54844ogs\nlUoVH6r1ef7nf/6n3uPp06fn6aefnscff3y953feeefs2bNn+fHMmTObzXLx2GOP5bbbbpvvvPNO\nZmZ27949S6VSzp07NzMzr7zyyvKQtEqpqanJTTfdNPfcc8/cZZddct99982jjz46a2pq8v7778/9\n998/hwwZ0mwug/m66tbJsWPH5o477pg9evTII444Ih944IGcOXNmrr/++rnlllvmWWedlXvssUf2\n7NmzsH37mDFjcvXVV8+ePXvmWmutlRMmTCj/7ZNPPsnLL788Dz300GzVqlX5UpNPX+5TtNra2uzZ\ns2fuueeeud9+++XBBx+cgwYNyl133TWHDh2aO++8c55++um54oor5rhx45q0tq/yl7/8pXxJzpQp\nU3KzzTbL5ZZbLi+55JLyNNOnT8/1118/jz766Bw+fHgOGjQou3XrVj7+a+r2zsz8xS9+kXvttVdm\nLmr/Rx99NPfee+8cOHBgvW34+++/n8stt1xusskmjbq/aIjf//73WSqVcrPNNsuFCxeWt7lPPPFE\nXnHFFTlw4MAcPnx4xZeVESNGZKlUKi8fmYuO9W+++ebPnf7888/PFVZYod7lgEVrFqFz8Wv0+vXr\nlz169MhNN900f/azn2XmooObbt26ZZcuXbJfv37Zrl27ih44LB4MTj755Nx///3zn//8Z+6///65\nyiqr5D//+c/MzPztb3+bJ5xwQh533HEVq/f999/PXr165bbbblt+buHChTlo0KDydWt1fv7zn2f3\n7t0/s0GqdOBcfP69evUqX685YsSIPPTQQ/O0004r//2ggw7Ke++9t8lrrFNX6wcffJDz5s0rHwj+\n6le/ylatWuUNN9zwmf955JFHcrXVVqu3c24Oamtry+/nnXfeydVWWy1PPvnkHDJkSHbo0CGvv/76\nzMx89NFHs1+/frn77rvnbrvtVv6frbbaKu+7776K1f9N1NU8d+7c8kHyhx9+mKNGjcr+/fvnqFGj\n6k0/b968fOCBB3Lvvfdu0Mmv6dOn58iRI7OmpiY/+eST3GyzzfKYY47Jc889N1dZZZU8//zzc+bM\nmeXpK3GwsLi6bd/EiRNz5ZVXzl122SX79u2b3bt3z0mTJuWMGTPy5z//eS6zzDLZp0+f3GijjXLB\nggU5Z86c3HLLLfOtt95qlDpmzpyZHTp0yIsuuigzF31+Tz31VPm6mjlz5uRNN92U2267bf70pz8t\n/9+///u/N6v1rLa2NufMmZMdOnTIV199tfz8RRddlGuuuWZusMEG9ZavOXPmZNeuXetdz1n3Ok3t\n08vi7Nmzs0ePHuX2njlzZm666aa50047Zb9+/XKzzTbL5557rsnrXLxtzjnnnNxjjz3Kj7fYYosc\nMGBA+fF9992XhxxySE6fPr1Ja2wMr732Wnbs2DEvvPDCnDx5cg4fPjzXWWedfOmllzJz0Ynwk046\nKX/0ox8VFj7eeeedHDx4cF5wwQU5derUHDx4cK600kqf+7mfeuqp2atXr/I621Rqa2vzrrvuymOO\nOab83A033JBHHXVUHnzwwXnDDTfkiBEj8qyzzmrSg/GvUltbm7Nmzcojjzyy3IHx8ccfZ9euXbND\nhw71rqHOXHSd6mWXXZbnnXdeXn755eVjkUqdnHrwwQdz7bXXzttuuy132WWXvPXWW/Ppp5/OQw45\nJPv3718veA4bNiy33HLLcidOU/u8Y95f//rX2bp167zrrrsqUNHXd9ppp2Xbtm3LHQPHHHNM3n//\n/fWmeeutt/Liiy/Ozp07N/k2uVmEzsxFG78tt9wyDz744HzppZfy4YcfzlKplL/4xS/K09x22215\n//3319s5V9JJJ52UAwYMKF/4nJk5dOjQXGmllcrBszkYN25c7rzzztmvX7/yDvjss8/OtddeO6dM\nmVKebsqUKdm3b9987733KlXqF6qtrc0bb7zxMzcFWnynedVVV+Xqq6+er7zyShNXt8jiPYKbbLJJ\nDhw4MA899ND88MMPM3NR8GzdunXeeOON5enr6t9ll10+09tRKWPGjKm3TE+ePDlPPvnkej1+l19+\nea655pp57bXXZuZnb3Zy0UUXZceOHfPNN99smqIboO4zeP7553PPPffMbbbZJs8444z885//nLW1\ntXnBBRfkHnvskRdffPFn/rdr167f6OY+n3eQVxcqTjzxxNxvv/0yM/PFF1/MjTbaKE877bSK937X\n3fCjzqxZs/LEE0/Mq666KjMXHewOGzYsu3btmi+//HJmZr7xxhs5bdq08vsdOXJkbrjhhvWWq4aY\nOXNmDhgwIMeMGZO1tbW57bbb5lZbbZV/+MMfygex7733Xo4aNSo7depUr8ezOao70TFt2rTyc1de\neWVuu+22ed555+X777+fmYsOGH/wgx9UJLx9HQ8++GBuvPHG+fe//7383LPPPpsvvvhizpgxo4KV\nLdreDh8+vLweDx48ODfeeOOcP39+vv/++zlmzJjMzPL2uto88MADOWTIkPLjjTfeOI866qjMzM+9\nyVRjh49Zs2blwIEDc/fdd6+3nTviiCNylVVWKbdv3QH9W2+9lbvttluTj1j75z//maVSKTfddNPy\n+lZTU5PXXXddHnrooXn00Uc3i5tyfZG65fOtt97Kl156KT/66KOcOXNmbrPNNrnbbrvVm/bT++VK\ndSDU1tbm/Pnz85xzzsm2bdtmjx49yn978skn85BDDskddtghn3vuubz88stz4MCB5VE+Ta1uvait\nrc0nnngi//a3v5WPiS+88MJs1apVOXjW1NRUfP9cZ/HPdvjw4dm2bdt8/PHHc9CgQXnOOefkv/71\nr3zvvfdy4cKF+corr+Szzz5bb3/TVJpN6Lz11ltz1113LT8+8sgjs0uXLrnUUkvlmWeeWcHK/tfi\nG9LXX389hwwZkm3atMl77rmn3nQ/+tGPmtUwrpqamnzxxRezT58+ueOOO5Y3AIccckj26tUr//73\nv+e7776bhx56aO6yyy7NZiVa3B//+Mfs2LFjtm/f/jMHXK+//noee+yx2b59+/zHP/5Rkfrqlo1p\n06blD37wgzznnHPyN7/5Te6xxx659dZblw/cf/3rX2epVMo//elP5f/905/+lMsuu2zFzuot7oUX\nXshBgwbVC4vXXXddlkqleneqzcy89NJLc+211643DHTatGn5X//1X9muXbuKfRbfxquvvpprrLFG\nXnzxxfnwww/nGWeckZ06dcrXX389Z82alaNGjcqtt946b7nllvL/PPnkk7nUUkvVu+Phl6nbKYwf\nPz4vvvjiPOWUU/KFF14oh6QDDjggL7zwwszMHDJkSP7yl78sL1eVWCdra2vLIeLjjz/Ompqa/Oij\nj/LII4/M1VZbLc8999zytG+//XYed9xxuc4669QbUj1hwoQcMWJELrvsso0alGbPnp2DBw/OoUOH\n5jrrrJMHHnhgnnTSSdm/f/+89957yweNTz/9dG6++eY5cODAioeeL1J3kFNTU5NrrrlmHnzwweW/\njRw5MnfbbbccPHhw3n///XnMMcdkt27dKj76pM6wYcOyb9++OWnSpPIJhf322688CqLS6tabAw44\nIK+++uq84447cocddsgDDjgge/ToUQ77Z511Vp5yyin17gLa3H36BNZll12WvXr1yszMzTffPPff\nf//MXHSC5qqrrso5c+YUWs/EiRPz8MMPz2WWWeYzd8M8+uijs1Qq1bvE6Morr8zll1++PBy7Kf31\nr3/Njh075u9///vyvqumpiZ//etf5yGHHNIstxV1y/LChQtz3rx5edRRR+U+++xTvlP8uHHjcrvt\ntisfR++33375k5/8pGL11ll8OT3ppJNynXXWyd69e9cbkfbcc8/l4YcfnmuuuWauv/76Fbssp66N\n6zrBttxyy9xpp52yc+fO5eP5Sy65JNu0aZO33nprRWr8PItf7lfnhBNOyKWWWirXWWed3H333XP9\n9dfP9dZbL7faaqvs06dP4duDL1Kx0Pnps2wfffRR+TqKY489Nrt165Y1NTV57LHHZqlUyrPOOqsS\nZZYtXu/UqVPzvffey2nTpuWwYcM+9ysihg0bVvFhXHUHJnW1jx07Nvfaa6/ccccdM3PRgeLRRx+d\n7dq1yx133DF79+5d3ulWOnh+3kHVnXfemZtttlmed9559YbpzZ07N2+99daKt/fbb7+dZ555Zvns\nct0Zpd13371e8Lz77rs/cw1zpXpnP0/d2a9Zs2aVz/BdccUVudRSS9X76onMzHPPPTf33Xff8uNP\nPvkkx44d22xuzf5lFt9A33DDDXnIIYeUH2+wwQb5ox/9KDMXDWF677338ne/+129/3nllVe+8YmC\nF154IVddddX80Y9+lEcccURusMEGecEFF2RNTU1edNFFWSqVsk+fPrnWWmvVCyOVVDc8r66exx57\nLAcOHJj77rtvvR6tGTNm5KGHHlrurc1cNBz0iiuuKOQauQkTJuRyyy2XnTt3Lg+HPOqoo3L33Xcv\nHxDceOONefjhhzfL0RuZ/7udffbZZ8vbsHbt2uWxxx5bnubCCy/M73//+7nNNtvUu8azEsFz8WVx\n7ty5+eyzz2b//v1zl112yX322SdffPHFvOSSS3Ldddct985Wwqfb5uabb84OHTrkTTfdlIcddlgu\nv/zy5RFTl19+ebZv376i15p+U3Xv79VXX80HH3wwMxediNl5551zxRVXzCOOOKI87Q9/+MM84IAD\nCtunz5gxI8eNG5dvv/12TpkyJU844YTccsstP3NM9Mtf/rLe5/Lwww+Xez8rYfTo0dm1a9e88847\nyycfampq8l//+lfFavoyi39tR+aiE2qDBw/Oww8/vNzWL7/8cm6xxRbZpUuX/MEPfvCZns5Kqamp\n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\ndydbW1vRZ61+z4sXL2jYsGEkl8spIyODvL296c6dO3TlyhWys7OjAQMGKD3/3r17NG7cuFrdgcjK\nyiJDQ0OKj4+noqIiiouLIy0tLSENrbCwkI4ePUpr1qz5x5Ueq3YWBg0aRD179qRGjRpReHg4paWl\n0fLly6lFixZCQQVV6vhWbbulpSX16dOHDA0NaeTIkUIKlIuLC9nY2KhkcKHKFMfRvXv3KDMzk86d\nO0dOTk5CZVfFeXX37t03CiCJdYwoiv1t2LCBwsLChMcTEhJo+PDhFBwcTBMnTqTAwEDq0KGDSqxz\n+j1yuZwqKytp2rRpou/j/E/l5eVRt27dlO5/N27cIC8vL2Ht6smTJ9/Yl7umVZ0VUtX7X21QWFhI\nJiYmtHTpUqqoqKBt27bR4MGD6ZNPPqGff/6Z1q1bR7169SJvb+83BgBr2uvbCTo6OpKRkRFt376d\nMjMzadeuXWRsbEwtW7YkKysrUVNqf/vtN9LT06Pw8HCysLAQZghDQ0Ppww8/fCPlfubMmUo1Z8Sg\nGATcv38/VVRUUElJCXXv3l1pG7DHjx+Ti4tLrVmnrhJBJ5HqVg+rSxR7UiUkJIiaNvBXqwxWXSei\nyuRyOZ08eZKWLl1KmzZtUok9Fv+Ivb09WVpaUpMmTWjJkiXC4xkZGeTq6qo0elpVbQw85XI5zZkz\nR+g8v3z5krp37052dnZUv379N9Jeif7591ZYWEjGxsa0dOlSqqyspO3bt9OgQYNo0qRJlJ6eTsuW\nLSN1dXU6efLkv3pP1eHx48dkY2NDa9asoWfPntHNmzfJ2tqahg4dKjzHysrqd6tjsjdVnWU3MTGh\nzZs3040bN6hz584UGhqq1AEbPny4UM1dFQYkUlNTSV9fn2xtbYWCVzKZjLZs2UIhISHk5+dHBQUF\nKr/NhCp8ln/X623Oysqidu3aCev5FMfV8OHDae7cuUrPVYVrdG38zFVJXl4eubq6Ki0jOnz4MLVv\n356Cg4PfWFsodoD/tu0Ezc3N6csvvxTWd06bNo1MTU1FX29/+fJlatSoEbVp00Zp9lCRaquKa70V\ng4B79uyh+/fvk4eHh9BvUez/PXXqVKXlUapMZYJOVjNUaU+qv1JlUBXTVP8KVQw4FR2SvLw8atCg\nARkZGb3x/4rA09HRUYwmvhOvd3qePHlC586dI7lcTk5OTkJFN0dHR5JIJJSUlPRO/u69e/eod+/e\n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\ngMTbzVAAAAAASUVORK5CYII=\n",
"text": [
"\n", " | Id | \n", "SubmittedUserId | \n", "DateSubmitted | \n", "TeamId | \n", "PrivateScore | \n", "PublicScore | \n", "IsSelected | \n", "ScoreStatus | \n", "IsAfterDeadline | \n", "DateScored | \n", "ScoringDurationMilliseconds | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "2180 | \n", "647 | \n", "2010-04-29 22:32:08 | \n", "496 | \n", "56.2139 | \n", "55.7692 | \n", "False | \n", "1 | \n", "False | \n", "\n", " | \n", " |
1 | \n", "2181 | \n", "619 | \n", "2010-04-30 09:38:29 | \n", "497 | \n", "50 | \n", "47.1154 | \n", "False | \n", "1 | \n", "False | \n", "\n", " | \n", " |
2 | \n", "2182 | \n", "619 | \n", "2010-04-30 09:48:50 | \n", "497 | \n", "65.6069 | \n", "61.0577 | \n", "False | \n", "1 | \n", "False | \n", "\n", " | \n", " |
3 | \n", "2184 | \n", "663 | \n", "2010-05-01 11:02:52 | \n", "499 | \n", "50 | \n", "47.1154 | \n", "False | \n", "1 | \n", "False | \n", "\n", " | \n", " |
4 | \n", "2185 | \n", "673 | \n", "2010-05-02 08:04:38 | \n", "500 | \n", "62.2832 | \n", "61.0577 | \n", "False | \n", "1 | \n", "False | \n", "\n", " | \n", " |