From cf503db6510f14c47ff9e432ea591afcc8727462 Mon Sep 17 00:00:00 2001 From: Michael Kamprath Date: Sun, 27 Oct 2019 20:43:11 -0700 Subject: [PATCH] added some prime number analysis --- .../prime-numbers/prime-numbers-qfs.ipynb | 258 ++++++++++++++++-- 1 file changed, 242 insertions(+), 16 deletions(-) diff --git a/jupyter-notebooks/prime-numbers/prime-numbers-qfs.ipynb b/jupyter-notebooks/prime-numbers/prime-numbers-qfs.ipynb index 451e33a..1e23f1b 100644 --- a/jupyter-notebooks/prime-numbers/prime-numbers-qfs.ipynb +++ b/jupyter-notebooks/prime-numbers/prime-numbers-qfs.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -17,16 +17,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "MAX_VALUE = 10000000" + "MAX_VALUE = 1000000000" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -48,7 +48,7 @@ "\n", "values = spark.sparkContext.parallelize(\n", " range(1,MAX_VALUE+1), \n", - " 2000\n", + " 5000\n", " ).map(\n", " lambda x: (x, isPrime(x))\n", " ).toDF().withColumnRenamed('_1', 'value').withColumnRenamed('_2', 'is_prime').cache()\n" @@ -56,25 +56,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "1000000000" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "values.count()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "values.repartition(50).write.parquet('qfs:///test/prime-numbers', mode='overwrite')" + "values.repartition(100).write.parquet('qfs:///test/prime-numbers', mode='overwrite')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -83,31 +94,246 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "1000000000" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.count()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "50849242" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.filter(F.col('is_prime')).count()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "999999937" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.filter(F.col('is_prime')).agg(F.max('value').alias('max_prime')).collect()[0].max_prime" ] }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
bucketprime_ratebucket_value
000.0785840
110.0704631000000
220.0679062000000
330.0663463000000
440.0653814000000
............
9959950.048286995000000
9969960.048380996000000
9979970.048358997000000
9989980.048441998000000
9999990.047958999000000
\n", + "

1000 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " bucket prime_rate bucket_value\n", + "0 0 0.078584 0\n", + "1 1 0.070463 1000000\n", + "2 2 0.067906 2000000\n", + "3 3 0.066346 3000000\n", + "4 4 0.065381 4000000\n", + ".. ... ... ...\n", + "995 995 0.048286 995000000\n", + "996 996 0.048380 996000000\n", + "997 997 0.048358 997000000\n", + "998 998 0.048441 998000000\n", + "999 999 0.047958 999000000\n", + "\n", + "[1000 rows x 3 columns]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# display a graph showing the density of prime numbers for every bucket of 1 million\n", + "#\n", + "# first, get the bucket rates\n", + "\n", + "bucket_rates = (\n", + " df\n", + " .withColumn('bucket', F.floor( F.col('value')/1000000))\n", + " .groupBy('bucket')\n", + " .agg(\n", + " F.sum(F.when(F.col('is_prime'),F.lit(1)).otherwise(F.lit(0))).alias('count_primes'),\n", + " F.count('*').alias('items_in_bucket')\n", + " )\n", + " .withColumn(\n", + " 'prime_rate',\n", + " F.col('count_primes').cast(T.DoubleType())/F.col('items_in_bucket').cast(T.DoubleType())\n", + " ) \n", + ")\n", + "\n", + "data = (\n", + " bucket_rates\n", + " .select('bucket', 'prime_rate')\n", + " .withColumn('bucket_value', F.col('bucket')*1000000)\n", + " .orderBy(F.col('bucket'))\n", + " .filter(F.col('bucket') < 1000)\n", + " .toPandas()\n", + ")\n", + "\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7IAAAHkCAYAAAADyBM3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XeUldW5x/HvZkBARMEBG0WwRhQRndhrbBgLGjGKJcbE2KLGGE00iRqNNzemqfGaolHUWGJJwwQEayyxAIpERQUrIIkIIiDS9/3jOZMZcJRRhjm8c76ftWadc942+8xyLdePZ+9np5wzkiRJkiQVRatyD0CSJEmSpE/CICtJkiRJKhSDrCRJkiSpUAyykiRJkqRCMchKkiRJkgrFICtJkiRJKhSDrCRJkiSpUBoVZFNKA1JKL6WUJqaUzmvgfNuU0u2l80+mlHqVjrdJKd2YUvpXSml8Sun8xj5TkiRJkqSGLDfIppSqgKuBA4A+wOCUUp9lLvsq8G7OeRPgcuCy0vEjgLY5577AdsDJKaVejXymJEmSJEkf0roR12wPTMw5vwqQUvoDMBB4od41A4EflN7fBfxfSikBGeiQUmoNtAcWALMa+cwP6dKlS+7Vq1ejvpgkSZIkqTi6dOnCiBEjRuScByzv2sYE2W7ApHqfJwM7fNQ1OedFKaX3gGoi1A4EpgKrA9/MOc9IKTXmmR/Sq1cvRo8e3YghS5IkSZKKJqXUpTHXNSbIrojtgcXABkBn4JGU0n2f5AEppZOAkwB69uzZ5AOUJEmSJBVLY5o9TQF61PvcvXSswWtK04jXAqYDRwP35JwX5pzfBh4Dahr5TAByztfknGtyzjVdu3ZtxHAlSZIkSS1ZY4LsKGDTlFLvlNJqwFHA0GWuGQocX3o/CHgg55yBN4HPAaSUOgA7Ai828pmSJEmSJH3IcqcWl9a8ng6MAKqA63POz6eULgFG55yHAtcBv08pTQRmEMEUojPxkJTS80AChuScxwE09Mwm/m6SJEmS9IksXLiQyZMnM2/evHIPpUVr164d3bt3p02bNp/q/hSF02KoqanJNnuSJEmStLK89tprdOzYkerqamIjFjW1nDPTp09n9uzZ9O7de6lzKaUxOeea5T2jMVOLJUmSJKkizJs3zxC7kqWUqK6uXqGqt0FWkiRJkuoxxK58K/o3NshKkiRJkgrFICtJkiRJKhSDrCRJkiQV0IUXXsh9991X7mFwxRVXMHfu3Gb9nQZZSZIkSSqYxYsXc8kll7DPPvus9N+Vc2bJkiUfeb4cQXa5+8hKkiRJUkU66ywYO7Zpn7nNNnDFFR97yeuvv86AAQPYbrvtePrpp9lyyy256aab6NOnD0ceeST33nsv3/72t7nnnns46KCDGDRoEL169WLw4MEMHz6c1q1bc80113D++eczceJEzj33XE455RQAfvrTn3LHHXcwf/58DjvsMC6++OKPHMP+++/PDjvswJgxYxg2bBg//vGPGTVqFB988AGDBg3i4osv5pe//CVvvfUWe+21F126dOHBBx9k5MiRXHTRRcyfP5+NN96YIUOGsMYaazTpn9GKrCRJkiStYl566SVOO+00xo8fz5prrsmvfvUrAKqrq3n66ac56qijPnRPz549GTt2LLvtthtf/vKXueuuu3jiiSe46KKLABg5ciQTJkzgqaeeYuzYsYwZM4aHH374I8cwYcIETjvtNJ5//nk23HBD/ud//ofRo0czbtw4/vGPfzBu3DjOPPNMNthgAx588EEefPBB3nnnHS699FLuu+8+nn76aWpqavjFL37R5H8fK7KSJEmS1JDlVE5Xph49erDLLrsAcOyxx/LLX/4SgCOPPPIj7znkkEMA6Nu3L3PmzKFjx4507NiRtm3bMnPmTEaOHMnIkSPp378/AHPmzGHChAnsvvvuDT5vww03ZMcdd/zv5zvuuINrrrmGRYsWMXXqVF544QW23nrrpe554okneOGFF/479gULFrDTTjt9yr/CRzPISpIkSdIqZtl9Vms/d+jQ4SPvadu2LQCtWrX67/vaz4sWLSLnzPnnn8/JJ5/cqDHU/12vvfYaP/vZzxg1ahSdO3fmy1/+MvPmzfvQPTln9t13X2677bZG/Y5Py6nFkiRJkrSKefPNN3n88ccBuPXWW9l1111X+Jn7778/119/PXPmzAFgypQpvP322426d9asWXTo0IG11lqL//znPwwfPvy/5zp27Mjs2bMB2HHHHXnssceYOHEiAO+//z4vv/zyCo99WQZZSZIkSVrFbL755lx99dVsscUWvPvuu5x66qkr/Mz99tuPo48+mp122om+ffsyaNCg/wbQ5enXrx/9+/fnM5/5DEcfffR/pw4DnHTSSQwYMIC99tqLrl27csMNNzB48GC23nprdtppJ1588cUVHvuyUs65yR+6stT06JFHT5pU7mFIkiRJaqHGjx/PFltsUdYxvP766xx00EE899xzZR3HytbQ3zqlNCbnXLO8e4tVkS1Q6JYkSZIkrRw2e5IkSZKkVUivXr2arRo7ffp09t577w8dv//++6murm6WMXwaBllJkiRJqifn/KGuwS1VdXU1Y8eObfbfu6JLXJ1aLEmSJEkl7dq1Y/r06SsctPTRcs5Mnz6ddu3afepnWJGVJEmSpJLu3bszefJkpk2bVu6htGjt2rWje/fun/r+YgVZ/1VEkiRJ0krUpk0bevfuXe5haDmKNbVYkiRJklTxihVkrchKkiRJUsUrVpCVJEmSJFU8g6wkSZIkqVCKFWSdWixJkiRJFa9YQVaSJEmSVPGKFWStyEqSJElSxStWkJUkSZIkVbxiBVkrspIkSZJU8YoVZCVJkiRJFa9YQdaKrCRJkiRVvGIFWUmSJElSxTPISpIkSZIKpVhB1qnFkiRJklTxihVkJUmSJEkVr1hB1oqsJEmSJFW8YgVZSZIkSVLFK1aQtSIrSZIkSRWvWEFWkiRJklTxDLKSJEmSpEIpVpB1arEkSZIkVTyDrCRJkiSpUIoVZCVJkiRJFc8gK0mSJEkqlGIFWacWS5IkSVLFK1aQlSRJkiRVvGIFWSuykiRJklTxihVkJUmSJEkVr1hB1oqsJEmSJFW8YgVZSZIkSVLFM8hKkiRJkgqlWEHWqcWSJEmSVPGKFWQlSZIkSRWvWEHWiqwkSZIkVbxiBVlJkiRJUsUrVpC1IitJkiRJFa9YQVaSJEmSVPEaFWRTSgNSSi+llCamlM5r4HzblNLtpfNPppR6lY4fk1IaW+9nSUppm9K5h0rPrD23TlN+MUmSJElSy7TcIJtSqgKuBg4A+gCDU0p9lrnsq8C7OedNgMuBywByzrfknLfJOW8DHAe8lnMeW+++Y2rP55zfXu5onVosSZIkSRWvMRXZ7YGJOedXc84LgD8AA5e5ZiBwY+n9XcDeKaW0zDWDS/dKkiRJkvSpNSbIdgMm1fs8uXSswWtyzouA94DqZa45ErhtmWNDStOKL2gg+AKQUjoppTQ6pTR68aJFjRiuJEmSJKkla5ZmTymlHYC5Oefn6h0+JufcF9it9HNcQ/fmnK/JOdfknGuqqqqaYbSSJEmSpFVZY4LsFKBHvc/dS8cavCal1BpYC5he7/xRLFONzTlPKb3OBm4lpjB/PNfISpIkSVLFa0yQHQVsmlLqnVJajQilQ5e5ZihwfOn9IOCBnCN1ppRaAV+k3vrYlFLrlFKX0vs2wEHAc0iSJEmStBytl3dBznlRSul0YARQBVyfc34+pXQJMDrnPBS4Dvh9SmkiMIMIu7V2ByblnF+td6wtMKIUYquA+4BrlztaK7KSJEmSVPFSLlA4rFlttTx6wYJyD0OSJEmStBKklMbknGuWd12zNHuSJEmSJKmpFCvIFqh6LEmSJElaOYoVZCVJkiRJFa9YQdaKrCRJkiRVvGIFWUmSJElSxStWkLUiK0mSJEkVr1hBVpIkSZJU8QyykiRJkqRCKVaQdWqxJEmSJFW8YgVZSZIkSVLFK1aQtSIrSZIkSRWvWEFWkiRJklTxihdkrcpKkiRJUkUzyEqSJEmSCqV4QXbx4nKPQJIkSZJURsULskuWlHsEkiRJkqQyMshKkiRJkgrFICtJkiRJKhSDrCRJkiSpUAyykiRJkqRCKV6QtWuxJEmSJFW04gVZK7KSJEmSVNEMspIkSZKkQjHISpIkSZIKxSArSZIkSSqU4gVZmz1JkiRJUkUrXpC1IitJkiRJFc0gK0mSJEkqFIOsJEmSJKlQDLKSJEmSpEIxyEqSJEmSCqV4QdauxZIkSZJU0YoXZK3ISpIkSVJFM8hKkiRJkgrFICtJkiRJKhSDrCRJkiSpUIoXZG32JEmSJEkVrXhB1oqsJEmSJFU0g6wkSZIkqVAMspIkSZKkQjHISpIkSZIKxSArSZIkSSqU4gVZuxZLkiRJUkUrXpC1IitJkiRJFc0gK0mSJEkqFIOsJEmSJKlQDLKSJEmSpEIxyEqSJEmSCqV4QdauxZIkSZJU0YoXZK3ISpIkSVJFM8hKkiRJkgrFICtJkiRJKpTiBVnXyEqSJElSRStekF2woNwjkCRJkiSVUfGC7Pz55R6BJEmSJKmMGhVkU0oDUkovpZQmppTOa+B825TS7aXzT6aUepWOH5NSGlvvZ0lKaZvSue1SSv8q3fPLlFJq1IgNspIkSZJU0ZYbZFNKVcDVwAFAH2BwSqnPMpd9FXg357wJcDlwGUDO+Zac8zY5522A44DXcs5jS/f8GvgasGnpZ0CjRmyQlSRJkqSK1piK7PbAxJzzqznnBcAfgIHLXDMQuLH0/i5g7wYqrINL95JSWh9YM+f8RM45AzcBhzZqxAZZSZIkSapojQmy3YBJ9T5PLh1r8Jqc8yLgPaB6mWuOBG6rd/3k5TyzYQZZSZIkSapozdLsKaW0AzA35/zcp7j3pJTS6JTSaMAgK0mSJEkVrjFBdgrQo97n7qVjDV6TUmoNrAVMr3f+KOqqsbXXd1/OMwHIOV+Tc67JOdfQqpVBVpIkSZIqXGOC7Chg05RS75TSakQoHbrMNUOB40vvBwEPlNa+klJqBXyR0vpYgJzzVGBWSmnH0lraLwF/Xf5oDbKSJEmSVOlaL++CnPOilNLpwAigCrg+5/x8SukSYHTOeShwHfD7lNJEYAYRdmvtDkzKOb+6zKNPA24A2gPDSz8fLyWDrCRJkiRVuFQqnBZCTdu2efQRR8DNN5d7KJIkSZKkJpZSGpNzrlnedc3S7KnJOLVYkiRJkipesYJsSrBgQblHIUmSJEkqo+IFWSuykiRJklTRihVknVosSZIkSRWvWEHWiqwkSZIkVbxiBVkrspIkSZJU8YoVZK3ISpIkSVLFK1aQtSIrSZIkSRWvWEHWiqwkSZIkVTyDrCRJkiSpUIoVZJ1aLEmSJEkVr1hB1oqsJEmSJFW8YgXZ2opszuUeiSRJkiSpTIoVZFOKELtoUblHIkmSJEkqk+IFWXB6sSRJkiRVsGIF2Val4RpkJUmSJKliFSvIWpGVJEmSpIpnkJUkSZIkFUqxgmzt1OIFC8o7DkmSJElS2RQryFqRlSRJkqSKV6wga7MnSZIkSap4xQqytRXZefPKOw5JkiRJUtkUK8jWVmTnzi3vOCRJkiRJZVOsIFtVFa/vv1/ecUiSJEmSyqZYQba2IjtnTnnHIUmSJEkqm2IGWSuykiRJklSxihVknVosSZIkSRWvWEHWqcWSJEmSVPGKFWQB2re3IitJkiRJFax4QbZDB4OsJEmSJFWw4gXZNdZwarEkSZIkVbDiBVkrspIkSZJU0QyykiRJkqRCKV6QdWqxJEmSJFW04gVZK7KSJEmSVNGKF2TXWMMgK0mSJEkVrHhBtkMHpxZLkiRJUgUrZpC1IitJkiRJFat4QbZ2anHO5R6JJEmSJKkMihdkO3SAxYth/vxyj0SSJEmSVAbFDLLg9GJJkiRJqlDFC7JrrBGvNnySJEmSpIpUvCDbqVO8zpxZ3nFIkiRJksqieEF27bXj9d13yzsOSZIkSVJZFC/Idu4crzNmlHcckiRJkqSyKF6Qra3IGmQlSZIkqSIZZCVJkiRJhVK8ILv66rDaaq6RlSRJkqQKVbwgm1JUZa3ISpIkSVJFKl6QhWj4ZJCVJEmSpIpUzCBrRVaSJEmSKpZBVpIkSZJUKMUNsjZ7kiRJkqSKVNwga0VWkiRJkipSMYNs584wezYsXFjukUiSJEmSmlkxg+zaa8er04slSZIkqeI0KsimlAaklF5KKU1MKZ3XwPm2KaXbS+efTCn1qndu65TS4yml51NK/0optSsdf6j0zLGln3UaPeraIOv0YkmSJEmqOK2Xd0FKqQq4GtgXmAyMSikNzTm/UO+yrwLv5pw3SSkdBVwGHJlSag3cDByXc342pVQN1J8PfEzOefQnHrUVWUmSJEmqWI2pyG4PTMw5v5pzXgD8ARi4zDUDgRtL7+8C9k4pJWA/YFzO+VmAnPP0nPPiFR51587xakVWkiRJkipOY4JsN2BSvc+TS8cavCbnvAh4D6gGNgNySmlESunplNK3l7lvSGla8QWl4PshKaWTUkqjU0qjp02bFgedWixJkiRJFWtlN3tqDewKHFN6PSyltHfp3DE5577AbqWf4xp6QM75mpxzTc65pmvXrnHQICtJkiRJFasxQXYK0KPe5+6lYw1eU1oXuxYwnajePpxzfifnPBcYBmwLkHOeUnqdDdxKTGFunLXWgpQMspIkSZJUgRoTZEcBm6aUeqeUVgOOAoYuc81Q4PjS+0HAAznnDIwA+qaUVi8F3D2AF1JKrVNKXQBSSm2Ag4DnGj3qqiro1MlmT5IkSZJUgZbbtTjnvCildDoRSquA63POz6eULgFG55yHAtcBv08pTQRmEGGXnPO7KaVfEGE4A8Nyzn9PKXUARpRCbBVwH3DtJxp5585WZCVJkiSpAi03yALknIcR04LrH7uw3vt5wBEfce/NxBY89Y+9D2z3SQe7lLXXNshKkiRJUgVa2c2eVh6DrCRJkiRVJIOsJEmSJKlQihtkq6uhdl9ZSZIkSVLFKG6Q7dkTZs6EWbPKPRJJkiRJUjMqbpDt3TteX3+9rMOQJEmSJDWv4gbZXr3i9bXXyjoMSZIkSVLzKm6QtSIrSZIkSRWpuEG2uho6dLAiK0mSJEkVprhBNqWoyhpkJUmSJKmiFDfIQqyTdWqxJEmSJFWUYgfZbt3grbfKPQpJkiRJUjMqfpB95x2YP7/cI5EkSZIkNZNiB9kNNojXqVPLOw5JkiRJUrMpdpDt1i1ep0wp7zgkSZIkSc2m2EG2tiLrOllJkiRJqhjFDrJWZCVJkiSp4hQ7yK69NrRta0VWkiRJkipIsYNsSjG92IqsJEmSJFWMYgdZgF694JVXyj0KSZIkSVIzKX6Q7dMHxo+HnMs9EkmSJElSM2gZQXbWLKcXS5IkSVKFKH6Q3XLLeH3++fKOQ5IkSZLULIofZPv0iVeDrCRJkiRVhOIH2a5doUsXePHFco9EkiRJktQMih9kATbcECZNKvcoJEmSJEnNoGUE2e7dYfLkco9CkiRJktQMDLKSJEmSpEJpOUF25kyYM6fcI5EkSZIkrWQtJ8iCVVlJkiRJqgAtI8j26BGvBllJkiRJavFaRpC1IitJkiRJFaNlBNlu3aBVK/jXv8o9EkmSJEnSStYygmy7dnDooXD99TZ8kiRJkqQWrmUEWYBzzonOxXfdVe6RSJIkSZJWopYTZHfYAdZYA8aMKfdIJEmSJEkrUcsJsq1aQb9+8Oyz5R6JJEmSJGklajlBFuqCbM7lHokkSZIkaSVpWUF2m21g1ix4/fVyj0SSJEmStJK0rCDbr1+8jh1b3nFIkiRJklaalhVkt9oq1sq6TlaSJEmSWqyWFWRXXx0228yKrCRJkiS1YC0ryEKsk7UiK0mSJEktVssLsv36RbOnmTPLPRJJkiRJ0krQ8oLsNtvEq1VZSZIkSWqRDLKSJEmSpEJpeUF2vfVg3XVt+CRJkiRJLVTLC7IQVdlnnin3KCRJkiRJK0HLDLL9+8Pzz8P8+eUeiSRJkiSpibXMILvHHrBwIYwYUe6RSJIkSZKaWMsMsnvvDdXVcNtt5R6JJEmSJKmJtcwg26YNHHEEDB0K779f7tFIkiRJkppQywyyAIMHw9y5EWYlSZIkSS1Gyw2yu+4K3bo5vViSJEmSWpiWG2RbtYJBg2DkyKjMSpIkSZJahJYbZAE+//nYguehh8o9EkmSJElSE2lUkE0pDUgpvZRSmphSOq+B821TSreXzj+ZUupV79zWKaXHU0rPp5T+lVJqVzq+XenzxJTSL1NKqam+1H/tvjusvjr8/e9N/mhJkiRJUnksN8imlKqAq4EDgD7A4JRSn2Uu+yrwbs55E+By4LLSva2Bm4FTcs5bAnsCC0v3/Br4GrBp6WfAin6ZD2nXDg48EG65BWbMaPLHS5IkSZKaX2MqstsDE3POr+acFwB/AAYuc81A4MbS+7uAvUsV1v2AcTnnZwFyztNzzotTSusDa+acn8g5Z+Am4NAm+D4fdsEFMGsWXHHFSnm8JEmSJKl5NSbIdgMm1fs8uXSswWtyzouA94BqYDMgp5RGpJSeTil9u971k5fzzKbRty/ssgs88MBKebwkSZIkqXmt7GZPrYFdgWNKr4ellPb+JA9IKZ2UUhqdUho9bdq0TzeK/v3h2WdhyZJPd78kSZIkaZXRmCA7BehR73P30rEGrymti10LmE5UWh/OOb+Tc54LDAO2LV3ffTnPBCDnfE3OuSbnXNO1a9dGDLcB/frBnDnw6quf7n5JkiRJ0iqjMUF2FLBpSql3Smk14Chg6DLXDAWOL70fBDxQWvs6AuibUlq9FHD3AF7IOU8FZqWUdiytpf0S8Ncm+D4N22abeB07dqX9CkmSJElS81hukC2teT2dCKXjgTtyzs+nlC5JKR1Suuw6oDqlNBE4GzivdO+7wC+IMDwWeDrnXLsXzmnA74CJwCvA8Cb7Vsvackto3dr9ZCVJkiSpBUhROC2GmpqaPHr06E938wknwK23wosvQu/eTTswSZIkSdIKSymNyTnXLO+6ld3sadVx6aXR7Om3vy33SCRJkiRJK6Bygmy3brDHHjB02eW9kiRJkqQiqZwgCzBwIIwfD0OGuBWPJEmSJBVUZQXZQYOgZ0/4ylfgscfKPRpJkiRJ0qdQWUF2/fVh1Kh4/2mbRkmSJEmSyqqygizAOuvEetmnny73SCRJkiRJn0LlBVmA/v0NspIkSZJUUJUZZLfdNvaTnTy53CORJEmSJH1ClRlkBw2C1VeH3XaD6dPLPRpJkiRJ0idQmUG2b1+4/3546y04+eRyj0aSJEmS9AlUZpAF2H57+Pa34Y9/dIqxJEmSJBVI5QZZgC99KV7vvLO845AkSZIkNVplB9lNN43GT1deCW+8Ue7RSJIkSZIaobKDLMCvfw0zZ8JXvlLukUiSJEmSGsEgu/328J3vwAMPwEsvlXs0kiRJkqTlMMgCnHACtG4dU4wlSZIkSas0gyzAeuvB174G11wDY8eWezSSJEmSpI9hkK31wx9Cly6w774wZky5RyNJkiRJ+ggG2VrV1fDww9ChA+y5J7z2WrlHJEmSJElqgEG2vs02g5EjYc4cuPvuco9GkiRJktQAg+yyNtsMevWK6qwkSZIkaZVjkG3I7rvDH/8If/tbuUciSZIkSVqGQbYhe+8drwcfDE88Ud6xSJIkSZKWYpBtyNFHw9//Dm3awKWXlns0kiRJkqR6DLINad0aPv95OOccGD4cZs8u94gkSZIkSSUG2Y+z++6wZAmMHl3ukUiSJEmSSgyyH2eHHeL1xBPhD3+I9zmXbzySJEmSJIPsx+rcOV5ffRVOOAHuuw9694ahQ8s7LkmSJEmqYAbZ5bn4Ythjj5hivO++8MYbcNFF5R6VJEmSJFUsg+zyXHghPPRQNH066aTYkmfsWHjppXKPTJIkSZIqkkG2sT73Ofjtb+Haa2G11eCqq8o9IkmSJEmqSAbZT2rddeGYY2DIEJgxo9yjkSRJkqSKY5D9NE45BebOhWHDyj0SSZIkSao4BtlPo6YG1lkHbr8dxo8v92gkSZIkqaIYZD+NVq1g//3hb3+DLbeEm2+GnXeGc88t98gkSZIkqcVrXe4BFNapp8b+skuWwHHHxbHHH4ef/ARSKu/YJEmSJKkFsyL7ae20Ezz6KNx7Lxx0UN3x554r35gkSZIkqQIYZFdUhw5w993w5pvxecSIeH3hhfKNSZIkSZJaMINsU+nRA/r3jwZQw4bF2tkHHij3qCRJkiSpxTHINqUvfQlGj4aLLorPQ4eWdzySJEmS1AIZZJvS0UdDVVWEWYjK7JIl5R2TJEmSJLUwBtmmtM46sSVPz55w1FEwYQJsvjm89165RyZJkiRJLYZBtqkNGABvvAFDhsBVV8HEiXD11eUelSRJkiS1GAbZlaVdOzj9dDjwQPjRj2D4cJg5E+bOLffIJEmSJKnQDLIr27XXwiabwLHHRifj6uqYfixJkiRJ+lQMsivb+uvHFOMZM+Ctt2DePPjZz+Ddd8s9MkmSJEkqpNblHkBF2HVX2G03WHtt2GYbuPjieP/b38LChXDaaZBSuUcpSZIkSYWQcs7lHkOj1dTU5NG1W9sUzeLF8TphAmyxxdLnJkyI6ceSJEmSVMFSSmNyzjXLu86pxc2lqip+PvMZeOUVOO+8unNjx8Kf/gQjRpRvfJIkSZJUEE4tLoeNNoJzzonpxP/7v3DWWTBlSpwrUIVckiRJksrBimy5VFfHtjwbb1wXYgGefhr22gtuuql8Y5MkSZKkVZhBttxq185ecEG8brcdPPQQHH88PPJI2YYlSZIkSasqg2y5DRkC3/wmfOc7dceGD4f27eHOO+uOzZ8fW/dIkiRJUoVzjWy57bln/ACccAJsuCEMGBDHrroKuneHb3wDPvtZWLIEnnuujIOVJEmSpPJz+51V1VVXwZlnxvsePWDSpHg/Ywb85S+w997Qs2f5xidJkiRJTcztd4ruuONii57zz68LsQA33ghf+UoEXUmSJEmqQI0KsimlASmll1JKE1NK5zVwvm1K6faeTUgcAAAgAElEQVTS+SdTSr1Kx3ullD5IKY0t/fym3j0PlZ5Ze26dpvpSLUKnTrE1z49+BFOnwssvx7rZ2rW048aVd3ySJEmSVCbLDbIppSrgauAAoA8wOKXUZ5nLvgq8m3PeBLgcuKzeuVdyztuUfk5Z5r5j6p17+9N/jRZuvfVg001h4EBYsCCOGWQlSZIkVajGVGS3BybmnF/NOS8A/gAMXOaagcCNpfd3AXunlFLTDVMAXFbv3wf+/W8YPDiqtZdfHutlv/nN8o1NkiRJkppJY4JsN6DeIk0ml441eE3OeRHwHlBdOtc7pfRMSukfKaXdlrlvSGla8QUfFXxTSiellEanlEZPmzatEcNtwXr2hAkT4K674vMf/gAbbADf+lZ8vuIKeOyx8o1PkiRJkprBym72NBXomXPuD5wN3JpSWrN07picc19gt9LPcQ09IOd8Tc65Judc07Vr15U83ALYZBPYd1/Ydlv4whfi2N57w5gxsO66cPLJUa2VJEmSpBaqMUF2CtCj3ufupWMNXpNSag2sBUzPOc/POU8HyDmPAV4BNit9nlJ6nQ3cSkxhVmOsuWYE17vugtdeg5EjoWtXuOWW+Hz22TB5ct162rlzyzteSZIkSWpCjQmyo4BNU0q9U0qrAUcBQ5e5ZihwfOn9IOCBnHNOKXUtNYsipbQRsCnwakqpdUqpS+l4G+Ag4LkV/zoVJiXo1SteISqzRx8d+8z27h3TjgcMgI4d4Te/gXPOKetwJUmSJKkpLDfIlta8ng6MAMYDd+Scn08pXZJSOqR02XVAdUppIjGFuHaLnt2BcSmlsUQTqFNyzjOAtsCIlNI4YCxR0b22Cb9X5Tr4YPjgA1i0CNq2hREjYMmSaAT185/D/ffH+a23rltrK0mSJEkFknLO5R5Do9XU1OTRo0eXexirtrlzoVs3+PKX4Yc/jLB6wgl153fYAc4/Hw49FHbdFR55pGxDlSRJkqT6Ukpjcs41y73OINsCvf02dO4MbdrE5898Bl56KZpE3Xvv0tdOnAhrrBGNoiRJkiSpjBobZFd212KVwzrr1IVYgJrSfwe/+hVstVW833PPmHq8ySaw3nrw6qvNPkxJkiRJ+jRal3sAagZf+QqsvjpsvDE8/jg8+CB89rNwzz11046/+lXo0AF23BHGjYs1tTvtVN5xS5IkSVIDnFpc6WbNis7H775bd6xt25hufP31cOCBUFUFU6fC+PHwuc+VbaiSJEmSWjanFqtx1lxz6crrZptF1XbBAhg4EC68MELsrrvG9j63316+sUqSJEkSBlkB7LNPTD1+6y0YOxb694fXX4fDD4crrogmUf/5T2zZc/rpsHBhuUcsSZIkqYI5tVix5+z06R/uXPzKKzBgALzzDtxxR+w/O3AgDBsW2/bst180jZIkSZKkJtDYqcU2exK0bt3w9jsbbwwTJkDOkBLMnw+dOsG3vw3PPQdPPRUdka+9NtbSbrZZ849dkiRJUsVxarGWL6V4bds2OiA/91x8fughOPVUOPts6NMngu2ypk+PICxJkiRJTcQgq0/mggvidd11YfFiuPnmmG68wQZw/PEwejSMGQM/+xn85jew/vrwu9+Vd8ySJEmSWhSnFuuT6dQpuhivvjrceGN0Nz755Oh0vN9+sT9thw7w/vt195x6Kqy1VjSPuvFG+Pe/4bvfLd93kCRJklRoNntS0zn3XLj7bnjppVh3u2gRbLIJTJwY53fYAZ58Mt7PmROBV5IkSZJK3EdWze+nP4Xx4+Hii+H//i+aQI0cGcH26qtjvWytH/wARo2K97Nnw5VXuq2PJEmSpEaxIqvmNX8+tGtX9/nHP47we+ONcMQRsdXPyJFR0a31zDOw5Zaw2mrNP15JkiRJzcbtd7RqatsWvvc9+M9/Yq3seefVnbvzzngdNgzefhu23homT461tYcfDrffDlVV5Rm3JEmSpFWGFVmVz6uvQr9+UF0dn994Y+nzW20Fs2bFz8yZcNtt0R159OjY8keSJElSi+IaWa36NtooKq+vvQbnnBP71R5wQDSB2nbb2K/2zTdj+56NNoLzz4c99oBvfQteeaXco5ckSZJUJgZZlVf79hFgTzkFxo2DoUNhxoxYOwuxzc/nPw+nnQavv1533yabwK231n2eMAEOOWTphlLLyjmmM0uSJEkqNIOsVg2tW8dU4tato6nTLrvE64ABEXbPOAP+9jd4/nk48MC455hjolHUE09E8L37bjjxRDjhBPjjH+OahQvj/axZ0VCqZ094663yfU9JkiRJK8w1slp1jRwJm20GvXotfXzWrJiOvNdeMHdudEKur6oKliyBRx+N6cgPPxzb/TzwQLwfOhQOPri5voUkSZKkRnKNrIpvv/0+HGIB1lwzmkQ9+mhMOz7lFFhnHTjrrGgc9dhjUXn9whciuAL85S917//1r1ib+93vRrV28eJm+0qSJEmSVpwVWbUMOcda28WLoyJ73XUxzbh162ggdffdcd1aa8V05Rkz4N57oWNH6NwZDj0UnnwSbrgBNt88ntXQ8yVJkiStNI2tyBpk1TLNmxfV3JqaCK5nnAHbbw/rrw+PPBLb+Wy3HYwatfR9PXtGED7wwGg+teuusOmmse72hhvg+OPjurffjp+ttmrubyZJkiS1WAZZ6bXXYI01otvx9tvD5ZfD7Nlw4YVxfty4CKgbbQTDhkH37vDSSx/9vO23j6rt7NkxvRngvffq3kuSJElaIY0Nsq2bYzBSWfTuHa9dukSDp/33hwULYPLkaBjVty/U/sPI3LlRxR0yBK68EiZNijW0zz4Lf/97XNOuXbxecUXd77jpplijW1Xl1GNJkiSpmViRlZb1u9/FHrX33Rdb9fToEcc7d45AfOmlMHVqBNvp02Nd7uGHQ4cOcOqpMG0a/PrXsT534cJ4L0mSJGm5nFosNZU77oB//jMqtbVOPDHW0R522NLXnnZarL+99da6Y9OmRVVYkiRJ0sdy+x2pqXzxix/ed/azn4WBA2GXXWDbbeuO//Of0UCqbdvY/gdi/S3E9OXf/AauvRa+9KVoHnXGGW7/I0mSJH1CrpGVGmP33WNK8e9+F82jampiTeyjj8bWPD/6EbzySqyxBfjZz+Cb34xpyTfdBEcdFXve/uMfdc/8/e/jde21YaedovlUv35w9NERiDffvNm/piRJklQETi2WPokpU+DGG+G886DVMhMaJk+uW0/79NPQvz/88pfwjW9Anz7wwgvw859Htfb00+vua90aFi2K9+3bwwcfwPe/H1Xfgw+GwYNj/e111zXPd5QkSZLKxDWyUjnMnAljx8Kee8bnnOGII+CPf4RNNoGXX45K7j77wP33wz33wKBBsO660WX5vvuWft4BB8CIEbBkSbzut19MRa6qimf/+tfwzjuxNrd9+wi8S5ZEpXi33eykLEmSpEJxjaxUDp061YVYiCB5yy1Rwb3ttrpgecopcNBBEUyfeCKmHJ988oefN3x4BNNOneL8lVfG+zvvhF/8Ar7+dbjoIujaNcLse+/F2ts99ojfN2fOx4/33nvhe9+r+/zMM/EMSZIkaRVmRVZaVSxcGGtrc45w+fjjsXYWYi/bAw+M9+3bw/z5EXD33Rc6doQ//SnOrb56BN233orPa6wBDz0E220Hl1wSU5yHD4/A+tvfxtrev/4VZs+O69deG846Cy67rFm/uiRJkgROLZaKK+cIot26RdOn99+PwHrbbbG+tqYGNt0UFiyABx+MCvAtt8Cxx374Wa1axf63d94Jn/tcHEspKrgpRSfl2bPhqaciHO+2W3RifvTRZv3KkiRJEjQ+yNq1WFrVpBQhFmDnneuODx5c9/7VV+Gxx2IKMcSa2/r22iu6Hp96amwTVH/7oAsvhAED6qq9AP/6F8yaFe/HjImQvNpqn3zs//53VIg7dIhw/NnPuk5XkiRJTc41slIRdesW+9vWhsR1142uxr/4RXw+9thoBLX11vC1r0VVFyKw/uAHsMMOSz/vueegdrbDvHnw7LPwf/8X05h33z2mOUME6Ntvj0rx/Pl1xxcvjvvWXz+aW912W/yO229fqX8GSZIkVSYrslJL8ZWvxLrZtdeGI4+sO77bbvHati185jPxPiX48pejMdSmm8Ijj8R05pqa6Lq8335Rod1++9g3d5994MQT4eqrI7RCXDt6NPztb7Enbm1oHT481ukCvPFGM3xxSZIkVRrXyEot3bx5sNZasOWWsb9trUWLYNKkCKDnnx9Tie+7L0Lu9ddHIL7wwlhD27cvvPtuhN9vfCOmLs+cGc/p1KnuPUR1eM01YcIEOOOMqOjOmRP31v7eSy+FvfeuC9mSJEkSNnuSVN8ZZ8CGG8I55zR8/u67I3zWrrld1tNPRxjdfff4PHAgDB0a4XfBgjjWrRtMmfLRY5g6Fbp0iSnQp5wSxw47LLond+0az1+yJNb1HnTQ0muCJUmSVBEMspJWniuugG9+E665JqYYv/12VGmHDKkLqRtvDK+8svR9u+8O48dDjx5wwAGxprdr1+jK/OKL0cAKotvyokV1a4D/9a/o0NyrV1R8a9f4Tp8O1dXN8pUlSZK08jU2yNrsSdInd8QRsa/twIHQvz/sv39UZzfZpO6az38+Xr/61bpjDz8M06ZFAL700tgfd/31o0pbG2IhKrPt2sX5yZPh7LNjSvPAgfEzfjz84Q8Rgn/yk7jnzTcjDD/0UKz5rTVjxtJrex95pK6xlSRJkgrJZk+SPrlu3aLJ07J69657Xxsct94aDjkkpiLvvHNUcLfbLs7ttVcE2K22ijW1jzwSIfWrX40py8ceW7f+tro6wu2UKdCnT93vOf/8aGR11lmwxhqx9c9//gPf+hb86Edw0UXRgXmddWIchx0WWwRNnAhVVfDOOzHlWZIkSYVhkJXUdHr0iNdzzoHTTot1sccfDyedFNv1rLnmh/eVraqKrscvvxx72/bpU1fFrd9E6pprYmpxbQju3Rv+93/hqKNimjPEOts5c6I51c9/HsF3woQ4d/XVEV6nT4+fP/85pj9vt11Ufg84YKX9WSRJktS0XCMrqWnNnx/TjJcNrJ/ElCmx9+3hh8f2QH/+c4Tajh0j+HbtGutyIdbLPvVUXdUX4Mkn4ac/hXvuiWBbX+/eMb6ZM6Op1HXXxTTpv/4VFi6EDz6I/XPbtYNx42DzzaNqfNddcPnlUf2dNw9at4bnn4/p1B06fPR3yRmGDYvp160/4t8On3wyKtVVVZ/+byZJktQCuEZWUnm0bbtiIRZi6vJmm0WTpz/+MbYAWmutaAL14osRIGsddli8XnoprL46tGkD/frBd79bF2Kvvz7Wxd5/fzSN+tOfYO7cCLEQFdk2bSLArr12rMP961/jOYcfHlsF/frXcNVV8blz5/i9NTURbu++O/bcnTr1w9/l4YcjMA8Z0vB3HT8edtwRbrttxf5mkiRJFcSKrKRimz8fxo6Nyuy++0ZF9dFH49wTT8Ctt0bIXXPNpe/7n/+B738fDj44QnOHDlGFveqqCKSdO8feuRCV0to1v507R0X45Zfj82c/C6NGxfvDDoMjj4yfOXNiC6HJk2N8++0XoXzIENhggwjEEAH26KPhzDPhyiub9m/z7rtRBe7YsWmfK0mStJI0tiLrGllJxda2bd12PLfeGh2Pa+24Y/w05OyzI7CeddbS3ZYHDIBtt40QeOyxcPPN8Xr//RFKL788Ks7HHx/X14bY9dePKdB//nPcO2zY0g2x7r8fjjkmpj+3ahWV2p13rqsuP/NM7Nd7663w4x/HlOQ2bVbsb7PeehG6J09esedIkiStYqzISlJ9OcNnPgNbbBHTiQ84IKYmT5sG114bFdSpU2HDDevu6d4d/vKXqOY++GBsBdSmTayvfe65aFL15psRso86Cv7xj3jGaafBW2/FvR07wh57RPjt0QM6dYLHH4+gfs89Mb25ffvYX/fZZyOgvvEG3HtvBOTNN1/6e3zwQUy1hmhuteaaH71GV5IkaRXR2IqsQVaSlvXuuzHNuH37j77msMNiWvPw4REkb745jo8bB2PGxFTi6mo48UQ499wIxb/9bazVXWst+PrXo4lUp07w73/XTV1u1SrCNMSWQRDbCZ17bmw1dMghMXW6a9eYvvzBBxGUx46N5z74YATvU0+FXXaJ+2sD8Hnnwe67x3ZEt98eIbm+99//+MZVtRYvhlmzYpq1JElSEzLIStLK9vrrsYXPDTfAccd9/LVz50Z35T33jM8PPRT76EJsN3T33TBjRlRYq6qignvPPVHFvfPOCKODB8Pvfgdf/nJdo6rrrovtjY44IsJ0z55R5f3CF6Kp1YYbRjDu2TMCcLt20XX5+uvhhBOiY/K668bv22MPGDEiQjjE72nTJirR9V19dTTTmjzZ9beSJKlJGWQlqTm88gpstNEn79S8ZElUTNdeOxpAVVfDO+9EqFzW00/X7Z972GERUE84IT4PGQI/+hF873vxrBkz6u7r0iW2KUopft+ZZ0ZVuGvXmNq8665RQd5lF3jvPfjnPyMAX3hhVFtrp0+femqE3EMPjT1///a36Op8zz2xrVCtqVNjXe6Kdq2WJEkVyyArSS3JscfCLbdEiDzwwKXPLV4ca3drq8KtW0cV9tJLYzpxfe+9F9OQDz881s5CBM9l/19wwAExbbpWhw5wxhnRiKrW+efDt78dlekXX4zuyxdfDBdcEOeffz6mTe+9d+O/5+jR0Lfvh6c9L/sd1lqr8c+UJEmFYZCVpJZk/vzofHzAAR9d8Tz00KiUPvNMNH/6uDW+M2fGNkDz5kWIra6OLYlOOaXumk02gYkT432bNrBw4dLP2GKLWE/873/H51atIoA+9VSM94QTYMIEuOmmuPeDD2KP4EmTovJbXR3Hf/hD2HTTaF51wQXRhfreexuetvzSS7DVVtEVet99647PmRMB/j//ie+1oh2fJUlSWbj9jiS1JG3bwuc///HX3HILPPAAbLPN8p/XqRP85CcRPi+7LKYPn3gi9OkTa22vvz62Etpmm5hmfOmlS4fc/feP9bSdO0dQXbQI+vWDffaBrbdeusL7xS9++Pd/73tw331wzTWx5rbWrrvGWt4//Smmbd9/f1xXG8ofeCB+11//GkH2uuuii/Nf/hLNqmbPhosuiuc3xqJFcY+NqyRJKhQrspJU6ZYsiSpvbaV39uyojm61VayN3WyzCJzDh0eV9JxzYOTIWI/bpk1sP1Tr0Ufh+9+H3r3h1VcjmE6fHkG5ffuo8K6xRnR6XrQIFiyIUP3qq7Gmd+LEWHM8b140yKr1hS9E06kzz4zAvvnm0aF5gw0+/H223DK2Pbrtttji6JhjYmuk2u+3YAH85jdw0EFR/V20KMbYqlXdM156KSrSVVVN//eWJEkfqUmnFqeUBgBXAlXA73LOP17mfFvgJmA7YDpwZM759ZRSL2A88FLp0idyzqeU7tkOuAFoDwwDvpGXMxiDrCQ1s4ULI+A1daB78EH43Ofi/a23xnTknXeO7su1U6T79o2g+bvfNfyMLbaA8eOXPlY7HXqnnWLMjz4ax3feGU4+ObpDt28fTauqq+vWCb/+el1zq5Ejo+K8//7wi19Exblfv6gsV1VFtXn0aNh226X/LuecE58nTYr9gg85pMn+XJIkVYomC7IppSrgZWBfYDIwChicc36h3jWnAVvnnE9JKR0FHJZzPrIUZP+Wc96qgec+BZwJPEkE2V/mnIcve119BllJaiFyjiD68svRWblLl7pz3/tedGL+1a+ikrtwYQTRDz6IBlJnnRXTiV97LaZHDx4cDa+mTYvXfv1irSxEk6xnnon7GrLRRlEN/uEP47p+/WJK9dixcX6DDWI7I4DddotOzaeeGuH22mtjOjZEx+YePer2A95jj9hiqfa7zppV16Aq5wjIhxwSa4NrjRgR642PP36F/7ySJBVVUwbZnYAf5Jz3L30+HyDn/L/1rhlRuubxlFJr4N9AV2BDGgiyKaX1gQdzzp8pfR4M7JlzPvnjxmKQlaQWZNgwGDOmrstxrZkzY1uh00+va9qUc0wNfuwx6N8fVl+97vrtt4+g+OKLdcfWXTcC8vXXx764b7wRXZZXXz3C6G67xe/+85/rthDq0CHW2VZVRZX4jDPiGUcfHZ2XTzwxtiqqrfLus08E0W23ha99benv0KpVhNLOnaOSe889sY53zz1j7W+fPrFV0dSp8MgjceyqqyLYT58Oq6229PMmTYpwffDBjfvb7r57VKUvu6xx10uStIpoyiA7CBiQcz6x9Pk4YIec8+n1rnmudM3k0udXgB2ANYDniYruLOD7OedHUko1wI9zzvuUrt8N+E7O+aCPG4tBVpL0Ic89F+tet9227titt8ba2DffjEpprZyjkdS++0ZwbdWqbm3sT34Sa2833jjW2Z58cqwNvuOOmPJ89tlw+eXRHXnbbWM6NNRtX3TmmRFy11wzqrHHHBNV4pEjo1vztGkRUOfMqRvP5ZfDN7+59Pf52tciNG+/fd2x3XaLZ7/+OvTs+fF79U6aFNdAVJt79274upyjmdbOOy/9DwOSJJVRY4Nsq+VdsIKmAj1zzv2Bs4FbU0prfpIHpJROSimNTimNnjZt2koZpCSpwLbaaukQC1FFXbhw6RALEQAPPzzCZlXV0oFwn31iuu+WW8bnr389Ptd2iz7nnAiiAwbET62c4Y9/hCuvhFGjorPyd74TTakefjimII8bF5Xk+iEWIsT27bv0sWuvhb32imnRm24aU57ffjvO3XBDnDvttPi9EyfC44/HM2qnQ//jH3XPOvbYqHwvWRKf77kHfvvbeH/JJRHozz234b/rnXfGPxJ8EosW1W3HJEnSSrRSpxYv27wppfQQcA4wBacWS5JWBeuvH+Fr8eKlOxc35LHHotr52GOxNvfQQ6FXL/jZzz7cEGvq1OjIXLt10JIl8PTT8NnPxuebboqK77XXwg9+AH//OwwaFGuBp06Ndb3Tp0fjqH/+M6rL9W23XUyPXm+9GH+nTrF10l//GiH0N7+JewF+/nNo1y7WH7/3XjS9OvjgCMMdO8azO3WK6c+PPBIhfuON496HHoqK8Ny50XG6vuuvj7XO3/8+/PSnEY7vvTeOd+sWXatXNdOmQdeu5R6FJOkjNOXU4tbE1OC9iQA6Cjg65/x8vWu+DvSt1+zpCznnL6aUugIzcs6LU0obAY+UrpvRQLOnq3LOwz5uLAZZSVKTmzIlAuPWWzf+nsWL4cYbY/pw27aNvy9nOO44OPDACMK13nkHJk/+8B7AZ58da2cXLYrq6oQJsM46sfXRtGmxphaiaVXHjtHFuWPHCJ5//nM0xOrfP8JrrfbtIywD3P7/7d17nM11/gfw19v9GhmxbW5dxqWkC1tRSVLpHokuWrNKUei2NqWSTZS236OlZVO6WCWXEru6CpGlReVaSiVyKWkYDcZc3r8/Xufb95yZMXMmzMzh9Xw8zuOc7/1zzvk+mPf5fN7vzyQGu9Wrc4qjSZPCbdFOPZUFtrp2ZQBeoQKwaBHzcPelcmX2JjdpwnNOmsTgOSmJ0yvt3cue8dxycgr/QWH9en5vrVsDY8awfbnbMns286b79Al73qdP548P8+bxM4qWlgZ068ZCXM2aFXx9ERE5aOINZOHuhT4AXAoGs18DGBRZ91cAV0ZeVwIwBcBaAP8DcFxk/TVgjuxnAD4BcEXUOVsBWBk55zOIBNUFPVq2bOkiIiKHja++cjdzB9ynTMm7/a67uG3ECPf1690rVuTyxx+H+zz+ONddcYX7P//p/vrrXO7YkdsXLnTv3t29Rg335GT3ceO4vUYN9+++c7/lFi6ffjqfb7rJffly90sv5XLwaNLE/Ykn3EeOdO/Uyb1WLffLL3ffvNn9+uu5T+3a7osXu59wgnu9eu5t27r/7W9sx5YtXK5Vyz01lesmTHDv0cN9wQL39HT3MWPc9+xx79zZvXJlti+4fmZm7GfToAHXd+/unpbGdb17c13v3uF+e/a4790bfi6DBu37+8h9jXjk5PAhIiJxAbDE44hR45pHtrRQj6yIiBx2LruMea4rVjAfONpnn7Eq8/z57PkcN47DjAcNCvfZvRuYMYPDloPhz999x+mAataMPV9QHXrePPacnnQSkJHB46+4grm/I0fyPNnZQNOm7PW85hpg6tTYcw0cGFs1+cYbmTdctWp4fHo6t/Xvzx7bYNqkxx5jT/eAASyudcQRvMbYscDw4XykpfGzmTmTx7z6atjLnZ3N95eezveTksLhzm3b8rM6+mgWxSpblnMVN27MCtOjRrH41YIFeb+HH3/kPMXjx7NXN149erAH/d//jv8YEZHD2AEbWlyaKJAVEZHDztKlHO760kvhdEQlad06BqVJScAzz7Ag1ZgxQM+esfutXh0Wzvr4Y+YGn3QShz8PHszAev164PLLGUADnD/40UfD4c0NG7KQ1rnn5h3yXKEChycDDMhbtWKQnJbGvF53fmYffshzvPIKg/GjjuKw7EWLmMdbvz6D5dq1+SNAuXIMdqdPB4YMCadCCoZh33ADq03XqRO2ZdkyHn/MMVzevh1Ys4YBct26DKZ37GCeckEyMzlPct++4fDmpUs5PVPXrnF+QSIiie2ADi0uLQ8NLRYRESkFoofLbtzonp2d/34PPeT+3nvh8rBh7lWrcrhxYPlyDov+7395nqZNOcR32DCe251Dpc85x33ixHAo8cyZfG7UKBy6DLiXKRO+XrEi3C94PPssh2t368Yh0NHbLrqIz3Xr8vn8891Hj3YfOND9+ONj9+3YkcOSZ8xwL1eOw6V37nRfvTrc589/Dl/Pn+++bZt7+/bun3zCodJz53JYc/BZfvhheFzg6qs5jHr9evft290zMvjZbN164L5PEZFSBBpaLCIiIqVKdjaH2RZUNXjpUvao3nNP/vPl7tjBqotDeTMAABmlSURBVM5Nm3LqoZo1Ocfurbdy6PCHHwL16rEYVGYmr9m8OXt1//hH7nPssbFVoIcOZUXmHj3Ytqwsrq9bNxzunJ8XXwSefhpITeVQ5Suv5Ot587i9bFmeY9Mm9u5mZ7Oyc/fuHDo9bhz3O+IITu+UlcXtZ53F9wawx3vtWr4+7zwe26sXh2MPH85CYQ0aADt3cpqnVq34ukoVDvtu2JBFwb75hp9HSgrPlZbGKaPuvpu93bm/k+xsHpdf4atgCLqIyEGgocUiIiJyePjuOwZ8L77IYc/btzOwDObozV0Jefhw4IEHmIubnAxce2247eyzOd3RI48ADz/MYC41lbnIgwZxmO9DDzE/Nz2dQ60feIBDjfv35zkGD2Yu7bff8php0zjUOlC1KqczOukkVotevBh4++3Y99S3L3OEGzUKh15Hq1CBw6Czspgr3bkzA9cTT2Sbg2A8t23bgFq1OGXUgAF8/199xWHVdetyn507eZ7vv2f158aNmSP80ksMjEeM4JRLQUXsiROZv1y5Modvb90KvPYa234oiaeitojsNwWyIiIicvj4+WcGaPHIyWEvZNWqebcNGsRc3fffBzp0CNdnZ8fOFfzss0Dv3nw9fTp7YxcsYO9pt25Av37A888DK1cywHv3XQazX34JvPcee0w3bWJRql27OH3Q8uXsjV20KP92N2wYzvmbmpp3e8+eLGp1/PFs+7PP5t1n8GAWDnvjjdj1Dz/MXmOAQWhQOKtZMwbrJ57I3vJ9mT6d8wYnJXH5kktYpCwQzKNcqxani9qXbdsYuNeunXfbxo0Mrs88M3Z9ejpzmFNS4g80J09mL/T558e3//z5wMUXc37nY4+N7xgR+U2UIysiIiJSVGvXuvfs6b57d8H7bd0a5r9u2pR3+1dfcbqj3II83+gpgNw5tc+GDbzusGHM5Q3OP3So+/jxzKfNyHD/4AOuf/ll9wcfZN5x//7MtX3hBV7bnfs1bx6b2xv9CKZrApjne9ttbMP117sfdRTPG73/LbdweqY//CFcd8klfE5JcZ86NcwfBtxXrmTuc8uW7pdd5r9OwfTTT8wPXrqUeckDB7rfey9zpwH3Fi3Y/pwcXu/ll92zstzbtHGvVMn9m2/ce/VyHzWK+zzzDI+bN6/w7zcnh9MxVa3qftpphe8fuOMOXuPFF+M/RkR+E8SZI1viwWlRHgpkRUREpNSoUSPyp1QRZGQwAEtPL3zfTp3cy5bNf/7aDRvC14XNU3vMMWzntGl8PuMMFp8aNozL//kPA7Xy5cPgNiWFAWh0IPv88zxfELBefDGXb7zR/Ygj3M89171aNQb2VaqwUNXFF4fHX3ghn+vX53MwR3LwOOGE8PX48e6TJ4fLN92UfzA+apR7ly7+63zK0RYvZtA6dy4/9wUL3Js1iz1+y5Zw/y1b3CdNcp81y/2VV2I/3+OO4/633851P/7o/sMPfLRr5z57drj/rl35/7jxW23atO/7JSsr//vjl1/cv/zywLVBpBgpkBURERE5mH78Mez9PBhyctx37Nj/83Tp4l6vHl+PHeu+bBlfb9/O3s4gEF63zr1fPwaxq1fHVoMOqkC7831XqcLeX3f3L75gtWkz9/vu47rhw8PjLrqIFawzM3m9tm3Z+5uUxOB4wwYGwkFwnDtYrV49DHRPPJGv58xhz/App7D3GHDv3Jk93i1ahL3CSUl8vuoqBtnHHht77vHj3ZcsYaA7YADXHXccr/nEE6xaHV2J+g9/4PsLgu527fh8993h533ddVzXrZv7rbfG/ugQWL8+/B4CS5bw/a1Zw+/CnZW7a9Rw79Ej/++2fXv3Dh3y/pjxwAP8jnbuLOjOECmV4g1klSMrIiIicijbtIk5tcG8vvF65BHmzTZqBPzyCwtCBXnCO3aw2nJQvTg7m7mqRxzB5b17mXf7ySfM261XL+/5o4sn9ezJAllffw2cfjpzngHOP3zhhcxbnjgRaN8e2LOHlZpHjgTuvJP7Va3KeZbLlAGOPJL5tHv2xF6vWTNg1iy+j8xM4OqredzXX7N4V2oqC33ldtxxrPrcpQswYwb3aRWVvletGtCmDfOg09O5DLAYlxk/m/LlgSlTmN9bpw6raK9axcdnn/H9ffQRj6tenTncixaxKvaECVz/zjssOmbGAl2jRvEB8LO76ioWAatUiRWu581jIbMOHVjVGyg9Fad/+CEsLiaSi3JkRUREROS3mzaNvazLlh3YobL5+ekn90WL+Hrz5jAP+C9/cU9NZU9u7vmKf/iBw5Svuoo9p0Gv6Zw5zGFes4a5sE8+6f7ccxxmHO2ee/L2/kY/zMJ5jRs3Zo90MMdw8BgyhMOegx7v557j+lde4fW//db9kUe4rlo1Pvftm/daVar4rznEwbWbNeNQ7yuu4BBzgL3Gs2bxPQfHNmjAeZYrV+byRx/F5jeXKeP+7rvMl65YkfMVu/MzO+MM9mQPG8Z169a5n346e9kzM/k5pqWFn93q1czVdudz0HOcW9BD/MYb7E2O/u5WrOD7mzatiDdJrvN/+OG+57AuKZ9+yqHssl+gocUiIiIi8pvl5JRcnmVODoPX6BzWwvYfM4ZDo6OH2aal7TuHePly/zUfOHdgmZzsfs01zJkF3O+8k8cEAXYQMLqHw6gffpjFqM48M2+A9fe/c58g2KxQwb1JE+Ylv/EGh5B//jkDoa5dwwJWAPNvP/00zAUOinPVru0+cybbGd32886LXa5bl8FssHzvve4ff+xeqxaXa9bkc5cuDGoBFuA65xy2r107BvJLl/I8t97K6953H/c980z3xx7jDw5t2rjffLP70Ue7v/12GLyPGxd+FqNGcd0FF4TrJk1iYF1Yvnfg/fd5jokT827bsyc8T2HD8zMzw8D+t4q+R9u353uP931IvhTIioiIiIgUZPJkBiJz5rifeiqDuWrVmDOblcWgqFcvBpnu7IUMAsIgQJo+PVx3wQXsxcxt924Gpxs3uk+Z4r5wIQO/fQVZu3czv/fII8Me0B073O+/P7zWSy9x/YMP5h/EzpjBSs7LljHvd/Bg99atY4PcDz5gMNerV5invK9HUNws96NiRfYYX3pp7PpatcKe5Pr1Wbn68cdZHCzYZ+1a9++/D5c7dHD/5BP29N5/f5jju2iR+6uvMoh++eWwN71zZwaNwWe0YgWD/OHDufyvf3G/Zcv4mV57bdj77M7eeiAcDeDO/OKXX87/e3noIfaou7M9b77J40eO5LogX3vJEv6osmQJg+2MjPAcOTm8tw6mjRuZh52gFMiKiIiIiBTFDz+w57EgZ58d+RM6YtMm9mo+/viBbcvrrzMQy+3223n9777j8iuvcLlOnTCw6tkztlcweB09nHro0Nh9Fi5kj3FQcKtNm3DfYJql1q3du3cP17/5JoPOYLl/fxYB++9/wyJd/fuH25OSGNSedRaD3NatOXy7XDn25Nauzd7wBg381yHaS5bEDpXOXe06OZmVue+7jz3dAH+UcGcPKcAgu1+/8JicHAbwwXXuu4/VprdsYS90pUp5C7llZYXHz50bBuvBujFj8gb59er5r8PJ3flZBT8mDBwY332Qmurep4/7//7HIDy/3t7MTP5wEWxr3969Vav4zl8KxRvIqtiTiIiIiEi8MjJYzKp69XCde/EVUUpNZSGoSy7h8qefskBWhw7A+++zuNfvf5//sZMnA926Af/8J3DbbXm3Z2Xxec4cFtZq1gxYuxbYti0sttW0KYtfPf88i4GVL8+iVDk5wF13hQW8Zs4Exo1jsaqGDYG0NH5uADBiBDB7NgtYnXAC8OSTLL41dSoLVCUlAbt2ASefDHz+OQt4Pf44C0Q9+igwdy5w/fXAwoXA5s38TgAWvNq7lwW5tm5lYa3t27mtRg0WKQOA0aOBKlWAlBSgZk2et0IFYMWK8LM44wzg/vv5/OabfJ9B0ayTT47dt1UroLAYJSWF393s2cDOnXzfX33FbenpLAZWsyY/B4CFyWrU4Hu56y5u274dWLOGxc7KlAF69ODnsHkz0Ls3j2nblsdlZHD/fd2ny5ezONs773Dfnj2BypVZ2K1mzbzt/+ILoHHj8Ps9iFTsSURERETkUJeezt7Ne+8tfN+cHOb2xpvD+dBDHBK8v2bNYi/mtddyzuJffuEQ4muvZXGv6Pb94x8cyn3++ey5/P3vY6cwyspyf+stDvsOXHQRe6RTU9kjHOTuArFDrwcNiu0xPeYYTkmVuyc1er/cQ65zz6985pl8D8HygAHuTz+dd/qqoDc5JcX9qae4vHEje2mDaZyCdWlpeY8NHk89xeJg0T3mwesHHmD+crB+1qzwMxo7lsPm77orzOsOhkIDbG/16jx37uHxr73GfcaPj12/ebP7tm2x61atcr/ySr7PXbviuz8yM92//ppD45ct09BiEREREZHDwpw5nN/3UPLHPzJUGTKk8H23b2cA6O6+cmUYnPXpw4D3d7/j8qpVHJodFMh67DEGz3ffzTzi4LjsbBafuukmLg8bxuP+9KfYwBhgwObO/N5g2LI7c5IBVoHevJnDpwEWvlq82H/NLy5Thj9EBMO+hw4Nc3eDoc9B0azf8hg6lIW3ypYNhzoHucsAA9fGjWOPmTSJBbVGj3YfMSKspt29O9/biy9yqHZyMtevXMn1mZmc27lGDQbtnTrF/uCwY4f7hAnMV969m+uC6uPBtYcNUyArIiIiIiIJatky9rT+/HPRjsvOZuC5cGG47uab2fsa3RO9YkXe6tJXX+1+223hcmYmzxN9XJCHHDyeeILr9+6NLd41YQK333ADl9u25fKaNTzv0UczoLz7bk7TlJOTNwjNyGCv6pw57JkO1kf3pAIMHK+4IlyuXDlvYa/mzdnTGkwh9cEHzE++804G9AB/PMiv6FfLlgx2jzwytqJ28DjnHBbi6tqVy1OnhpW6q1fnjwR/+QuDXIDnqVnTvXdvBtcVK7pfdx233XZb3IFsuYM9xllERERERKRIWrQA3n236MeVKcPc1mhPP80c3eg85ubN8x47bVrscrlywFlnxa5r2ZLP7dszHzfIVS5fno9A48Z8btKEz7feyhzU5GS248svmZdboUJ4TL9+wKhRQOvWQJs23HbBBdy2cSPP8dxzwNixQKdOQLVqzN89/XRuT0oChg1ju+rUAcqWZU7u7NlA375A7drAY48Bb70FnH8+83zLlAHWrWPedP/+zElevJj5t4MHs82/+x0wZgxw++08T7RzzwXmzwc++ojLffoAnTvzPR57LPDee8wFHjGC17/3Xubybt3Ka3bsCNxxB3D55cC334Z5w3FQsScREREREZF4uAPnnAPceCMDu33Zs4eFq4YOBU45Jb5zZ2byuOgCTdEyMhiQlysH1KrFIlOLFxf9PRRk9mwWBRs5MjbITk1lca/rrgNOO40FuPbsAVat4vvr2hW45RYGtmXL5j3v4sUsFBa8tw0bgPXrgbPPDve56SZg3jzY+vVxFXtSICsiIiIiIpJImjVjr+ro0SVz/UsuAbZsYdXsL74AGjUCKlXav3MOGQIMGQJzjyuQ1dBiERERERGRRPLRRxz2W1LGjw+nPWra9MCcMzmZPd5xUiArIiIiIiKSSJKSSvb6Rx114M/ZuDFQvz6HHcfh4M9oKyIiIiIiIlKQVq2YNxsnBbIiIiIiIiKSUBTIioiIiIiISEJRICsiIiIiIiIJRYGsiIiIiIiIJBQFsiIiIiIiIpJQFMiKiIiIiIhIQlEgKyIiIiIiIglFgayIiIiIiIgkFAWyIiIiIiIiklAUyIqIiIiIiEhCUSArIiIiIiIiCUWBrIiIiIiIiCQUBbIiIiIiIiKSUBTIioiIiIiISEJRICsiIiIiIiIJRYGsiIiIiIiIJBQFsiIiIiIiIpJQFMiKiIiIiIhIQjF3L+k2xM3MdgJYU9LtENlPtQH8VNKNEDkAdC/LoUL3shwqdC9LovsJANy9Y2E7ljv4bTmg1rh7q5JuhMj+MLMluo/lUKB7WQ4VupflUKF7WQ4nGlosIiIiIiIiCUWBrIiIiIiIiCSURAtkx5Z0A0QOAN3HcqjQvSyHCt3LcqjQvSyHjYQq9iQiIiIiIiKSaD2yIiIiIiIicphTICsiIiIiIiIJpdQFsmbW0czWmNlaMxuYz/aKZjYpsv1jM2tU/K0UKVwc9/I9ZrbazJab2Qdm1rAk2ilSmMLu5aj9rjEzNzNN/SClUjz3spl1jfzbvMrMXi3uNooUJo6/LxqY2Rwz+zTyN8alJdFOkYOtVOXImllZAF8CuBDA9wAWA7je3VdH7XM7gBbu3tvMrgPQyd27lUiDRfYhznv5fAAfu/suM+sDoJ3uZSlt4rmXI/tVBzATQAUAfd19SXG3VaQgcf67nAxgMoD27p5qZnXc/ccSabBIPuK8j8cC+NTdx5jZiQDecvdGJdFekYOptPXIngFgrbt/4+57AbwG4Kpc+1wF4OXI66kALjAzK8Y2isSj0HvZ3ee4+67I4iIA9Yq5jSLxiOffZQB4FMATAPYUZ+NEiiCee7kXgH+4eyoAKIiVUiie+9gBHBF5XQPApmJsn0ixKW2B7DEANkQtfx9Zl+8+7p4FYAeApGJpnUj84rmXo90M4O2D2iKR36bQe9nMTgdQ391nFmfDRIoonn+XGwNobGYLzGyRmXUsttaJxCee+/gRAN3N7HsAbwHoVzxNEyle5Uq6ASKHOzPrDqAVgPNKui0iRWVmZQD8H4CUEm6KyIFQDkAygHbgKJl5Znayu28v0VaJFM31AF5y96fMrDWAf5lZc3fPKemGiRxIpa1HdiOA+lHL9SLr8t3HzMqBQya2FUvrROIXz70MM+sAYBCAK909o5jaJlIUhd3L1QE0BzDXzNYBOAvADBV8klIonn+Xvwcww90z3f1bMBcxuZjaJxKPeO7jm8Fcb7j7QgCVANQultaJFKPSFsguBpBsZseaWQUA1wGYkWufGQB6RF53ATDbS1PFKhEq9F42s9MAPAsGscrDktKqwHvZ3Xe4e213bxQpJrIIvKdV7ElKm3j+xngT7I2FmdUGhxp/U5yNFClEPPfxegAXAICZNQMD2a3F2kqRYlCqAtlIzmtfAO8C+BzAZHdfZWZ/NbMrI7uNA5BkZmsB3ANgn1NBiJSUOO/lJwFUAzDFzD4zs9z/EYmUuDjvZZFSL857+V0A28xsNYA5AAa4u0Z9SakR5318L4BeZrYMwEQAKer0kUNRqZp+R0RERERERKQwpapHVkRERERERKQwCmRFREREREQkoSiQFRERERERkYSiQFZEREREREQSigJZERERERER2S9m9oKZ/WhmK+PYt6GZfWBmy81srpnVK+r1FMiKiIjsg5k1iuc/5DjO80sR9q1pZrfv7zVznfOAvA8REZECvASgY5z7/g3AeHdvAeCvAIYX9WIKZEVEREqXmgAOaCArIiJysLn7PAA/R68zs+PN7B0zW2pm882saWTTiQBmR17PAXBVUa+nQFZERKRg5czsFTP73MymmlkVM1tnZrUBwMxamdncyOtqZvaima2IDJe6JvpEZlbbzBaa2WWR5QFmtjiy75DIbo8DON7MPjOzJ/NrkJm9FpwjsvySmXWJ9LzON7NPIo82+RybYmbPRC3/x8zaRV5fFGnfJ2Y2xcyq7c8HJyIih72xAPq5e0sAfwYwOrJ+GYDOkdedAFQ3s6SinLjcAWuiiIjIoakJgJvdfYGZvYCCe0sfArDD3U8GADM7MthgZnUBzADwoLu/b2YXAUgGcAYAAzDDzNoCGAigubufWsB1JgHoCmCmmVUAcAGAPpHzXOjue8wsGcBEAK3ieZORwPxBAB3cPd3M7gNwDzjkS0REpEgiP4a2ATDFzILVFSPPfwbwjJmlAJgHYCOA7KKcX4GsiIhIwTa4+4LI6wkA+hewbwcA1wUL7p4aeVkewAcA7nD3DyPrLoo8Po0sVwMD2/VxtOltAH83s4pgPtI8d99tZjXAPwxOBf8gaBzHuQJngUO9FkT+4KgAYGERjhcREYlWBsD2/H6YdfdNiPTIRgLea9x9e1FOrkBWRESkYJ7PchbC9JxKcZwjC8BSABcDCAJZAzDc3Z+N3tHMGhXaIPa4zo2crxuA1yKb7gbwA4BTIu3bs4+2RKcWBe03AO+7+/WFvhsREZFCuHuamX1rZte6+xTjr6Qt3H1ZZBTQz+6eA+B+AC8U9fzKkRURESlYAzNrHXl9A4CPAKwD0DKyLjoP9n0AdwQLUUOLHUBPAE0jQ3YB4F0APYM8VDM7xszqANgJoHoc7ZoE4E8AzgXwTmRdDQCbI38Y3ASgbD7HrQNwqpmVMbP64NBmAFgE4GwzOyHSnqpmVpQeXREROYyZ2URwJE8TM/vezG4GcCOAm81sGYBVCIs6tQOwxsy+BFAXwGNFvp577h+aRUREBPi1d/QdAEvAwHU1GCC2BDAOQBqAuQBauXu7SFD6j8j2bABD3P0NM/vF3atFhgLPADDd3Ueb2Z0Abolc7hcA3d39azN7FUALAG+7+4B9tK082Ps63d3/FFmXDOB1MHB+BxzKXC3yPv7j7s0jv4hPiLTxcwBHAnjE3eeaWXsATyDMYXrQ3Wfs14coIiJyECiQFRERERERkYSiocUiIiIiIiKSUFTsSUREpJQys5MB/CvX6gx3P7Mk2iMiIlJaaGixiIiIiIiIJBQNLRYREREREZGEokBWREREREREEooCWREREREREUkoCmRFREREREQkoSiQFRERERERkYTy/5FlCjRlOOoMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "data.plot(kind='line',x='bucket_value',y='prime_rate',color='red', figsize=(16,8))\n", + "plt.show()" + ] + }, { "cell_type": "code", "execution_count": null,