From 4453b250009c23b37fd7800e59f59e2ca9b458d4 Mon Sep 17 00:00:00 2001 From: wassname Date: Sun, 18 Oct 2020 15:18:11 +0800 Subject: [PATCH] misc --- .gitignore | 3 + notebooks/RNN_Timeseries_Seq2Seq.ipynb | 2459 +++++++++++++++--------- notebooks/RNN_Timeseries_Seq2Seq.py | 213 +- seq2seq_time/data/dataset.py | 18 +- 4 files changed, 1683 insertions(+), 1010 deletions(-) diff --git a/.gitignore b/.gitignore index d7c9832..0d85ae0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +lightning_logs/ +logs/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/notebooks/RNN_Timeseries_Seq2Seq.ipynb b/notebooks/RNN_Timeseries_Seq2Seq.ipynb index c663e2c..c80270c 100644 --- a/notebooks/RNN_Timeseries_Seq2Seq.ipynb +++ b/notebooks/RNN_Timeseries_Seq2Seq.ipynb @@ -37,8 +37,8 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T05:54:18.887427Z", - "start_time": "2020-10-18T05:54:18.458609Z" + "end_time": "2020-10-18T06:50:26.768622Z", + "start_time": "2020-10-18T06:50:26.349179Z" } }, "outputs": [], @@ -60,8 +60,8 @@ "execution_count": 2, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T05:54:19.908725Z", - "start_time": "2020-10-18T05:54:18.889783Z" + "end_time": "2020-10-18T06:50:27.825680Z", + "start_time": "2020-10-18T06:50:26.772253Z" } }, "outputs": [], @@ -86,32 +86,32 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 125, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T05:55:10.980981Z", - "start_time": "2020-10-18T05:55:10.892778Z" + "end_time": "2020-10-18T07:15:26.676538Z", + "start_time": "2020-10-18T07:15:26.624694Z" } }, "outputs": [], "source": [ - "from seq2seq_time.data.dataset import Seq2SeqDataSet\n", + "from seq2seq_time.data.dataset import Seq2SeqDataSet, Seq2SeqDataSets\n", "from seq2seq_time.predict import predict" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T05:55:11.511921Z", - "start_time": "2020-10-18T05:55:11.469331Z" + "end_time": "2020-10-18T06:50:27.942914Z", + "start_time": "2020-10-18T06:50:27.916544Z" } }, "outputs": [], "source": [ "import logging, sys\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)" + "# logging.basicConfig(stream=sys.stdout, level=logging.INFO)" ] }, { @@ -128,11 +128,11 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T05:55:11.910208Z", - "start_time": "2020-10-18T05:55:11.830517Z" + "end_time": "2020-10-18T06:50:27.994550Z", + "start_time": "2020-10-18T06:50:27.945293Z" } }, "outputs": [ @@ -166,11 +166,11 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 6, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:09:38.090802Z", - "start_time": "2020-10-18T06:09:38.044605Z" + "end_time": "2020-10-18T06:50:28.039589Z", + "start_time": "2020-10-18T06:50:27.996675Z" }, "lines_to_next_cell": 0 }, @@ -243,11 +243,11 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 142, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:09:42.586813Z", - "start_time": "2020-10-18T06:09:38.985189Z" + "end_time": "2020-10-18T07:17:34.310763Z", + "start_time": "2020-10-18T07:17:29.216045Z" }, "scrolled": true }, @@ -258,377 +258,52 @@ "text": [ "/home/wassname/anaconda/envs/seq2seq-time/lib/python3.7/site-packages/ipykernel_launcher.py:27: FutureWarning: Series.dt.weekofyear and Series.dt.week have been deprecated. Please use Series.dt.isocalendar().week instead.\n" ] - }, - { - "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", - " \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", - " \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", - " \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", - "
LCLidenergy(kWh/hh)stdorToUAcorn_groupedmonthdayweekhourminutedayofweekvisibilitywindBearingtemperaturedewPointpressureapparentTemperaturewindSpeedhumidityholiday
2012-10-12 11:30:00MAC0000020.143StdAffluent1012411130413.52267.012.594.481007.2512.596.960.580
2012-10-12 12:00:00MAC0000020.663StdAffluent101241120413.52260.013.864.321007.3713.866.920.530
2012-10-12 12:30:00MAC0000020.256StdAffluent1012411230413.52260.013.864.321007.3713.866.920.530
2012-10-12 13:00:00MAC0000020.155StdAffluent101241130413.52253.013.994.481007.5413.997.000.530
2012-10-12 13:30:00MAC0000020.199StdAffluent1012411330413.52253.013.994.481007.5413.997.000.530
............................................................
2014-02-27 22:00:00MAC0000020.416StdAffluent2279220314.00216.04.101.641005.671.413.020.840
2014-02-27 22:30:00MAC0000021.350StdAffluent22792230314.00216.04.101.641005.671.413.020.840
2014-02-27 23:00:00MAC0000021.247StdAffluent2279230314.03200.03.931.611004.621.422.750.850
2014-02-27 23:30:00MAC0000021.218StdAffluent22792330314.03200.03.931.611004.621.422.750.850
2014-02-28 00:00:00MAC0000021.387StdAffluent228900412.63190.03.811.531003.571.472.530.850
\n", - "

24119 rows × 19 columns

\n", - "
" - ], - "text/plain": [ - " LCLid energy(kWh/hh) stdorToU Acorn_grouped month \\\n", - "2012-10-12 11:30:00 MAC000002 0.143 Std Affluent 10 \n", - "2012-10-12 12:00:00 MAC000002 0.663 Std Affluent 10 \n", - "2012-10-12 12:30:00 MAC000002 0.256 Std Affluent 10 \n", - "2012-10-12 13:00:00 MAC000002 0.155 Std Affluent 10 \n", - "2012-10-12 13:30:00 MAC000002 0.199 Std Affluent 10 \n", - "... ... ... ... ... ... \n", - "2014-02-27 22:00:00 MAC000002 0.416 Std Affluent 2 \n", - "2014-02-27 22:30:00 MAC000002 1.350 Std Affluent 2 \n", - "2014-02-27 23:00:00 MAC000002 1.247 Std Affluent 2 \n", - "2014-02-27 23:30:00 MAC000002 1.218 Std Affluent 2 \n", - "2014-02-28 00:00:00 MAC000002 1.387 Std Affluent 2 \n", - "\n", - " day week hour minute dayofweek visibility \\\n", - "2012-10-12 11:30:00 12 41 11 30 4 13.52 \n", - "2012-10-12 12:00:00 12 41 12 0 4 13.52 \n", - "2012-10-12 12:30:00 12 41 12 30 4 13.52 \n", - "2012-10-12 13:00:00 12 41 13 0 4 13.52 \n", - "2012-10-12 13:30:00 12 41 13 30 4 13.52 \n", - "... ... ... ... ... ... ... \n", - "2014-02-27 22:00:00 27 9 22 0 3 14.00 \n", - "2014-02-27 22:30:00 27 9 22 30 3 14.00 \n", - "2014-02-27 23:00:00 27 9 23 0 3 14.03 \n", - "2014-02-27 23:30:00 27 9 23 30 3 14.03 \n", - "2014-02-28 00:00:00 28 9 0 0 4 12.63 \n", - "\n", - " windBearing temperature dewPoint pressure \\\n", - "2012-10-12 11:30:00 267.0 12.59 4.48 1007.25 \n", - "2012-10-12 12:00:00 260.0 13.86 4.32 1007.37 \n", - "2012-10-12 12:30:00 260.0 13.86 4.32 1007.37 \n", - "2012-10-12 13:00:00 253.0 13.99 4.48 1007.54 \n", - "2012-10-12 13:30:00 253.0 13.99 4.48 1007.54 \n", - "... ... ... ... ... \n", - "2014-02-27 22:00:00 216.0 4.10 1.64 1005.67 \n", - "2014-02-27 22:30:00 216.0 4.10 1.64 1005.67 \n", - "2014-02-27 23:00:00 200.0 3.93 1.61 1004.62 \n", - "2014-02-27 23:30:00 200.0 3.93 1.61 1004.62 \n", - "2014-02-28 00:00:00 190.0 3.81 1.53 1003.57 \n", - "\n", - " apparentTemperature windSpeed humidity holiday \n", - "2012-10-12 11:30:00 12.59 6.96 0.58 0 \n", - "2012-10-12 12:00:00 13.86 6.92 0.53 0 \n", - "2012-10-12 12:30:00 13.86 6.92 0.53 0 \n", - "2012-10-12 13:00:00 13.99 7.00 0.53 0 \n", - "2012-10-12 13:30:00 13.99 7.00 0.53 0 \n", - "... ... ... ... ... \n", - "2014-02-27 22:00:00 1.41 3.02 0.84 0 \n", - "2014-02-27 22:30:00 1.41 3.02 0.84 0 \n", - "2014-02-27 23:00:00 1.42 2.75 0.85 0 \n", - "2014-02-27 23:30:00 1.42 2.75 0.85 0 \n", - "2014-02-28 00:00:00 1.47 2.53 0.85 0 \n", - "\n", - "[24119 rows x 19 columns]" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "dfs = get_smartmeter_df()\n", "\n", "# Just get the first one for now\n", - "df = next(iter(dfs))\n", + "dfs = list(dfs)\n", "\n", "# df = df.resample(freq).first().dropna() # Where empty we will backfill, this will respect causality, and mostly maintain the mean\n", "\n", - "df = df.tail(int(max_rows)).copy() # Just use last X rows\n", - "df" + "# df = df.tail(int(max_rows)).copy() # Just use last X rows\n", + "# df = pd.concat(dfs, 0)\n", + "df = dfs[0]" ] }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:07.809434Z", - "start_time": "2020-10-18T06:10:07.675919Z" + "end_time": "2020-10-18T07:16:47.239423Z", + "start_time": "2020-10-18T07:16:46.591063Z" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T07:15:20.702022Z", + "start_time": "2020-10-18T07:15:20.646916Z" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T07:17:34.425234Z", + "start_time": "2020-10-18T07:17:34.313442Z" } }, "outputs": [ @@ -870,7 +545,7 @@ "max 1.000000 1.000000 " ] }, - "execution_count": 73, + "execution_count": 143, "metadata": {}, "output_type": "execute_result" } @@ -881,11 +556,11 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 144, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:08.215379Z", - "start_time": "2020-10-18T06:10:08.056587Z" + "end_time": "2020-10-18T07:17:34.566532Z", + "start_time": "2020-10-18T07:17:34.428092Z" } }, "outputs": [ @@ -926,9 +601,9 @@ " windSpeed\n", " humidity\n", " holiday\n", - " Acorn_grouped\n", " LCLid\n", " stdorToU\n", + " Acorn_grouped\n", " \n", " \n", " \n", @@ -1219,36 +894,36 @@ "2014-02-27 23:30:00 -1.004399 -0.858377 -0.689197 -0.979256 \n", "2014-02-28 00:00:00 -1.024600 -0.873777 -0.781141 -0.972288 \n", "\n", - " windSpeed humidity holiday Acorn_grouped LCLid \\\n", - "2012-10-12 11:30:00 1.406991 -1.492695 -0.149604 0.0 0.0 \n", - "2012-10-12 12:00:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 12:30:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 13:00:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 13:30:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", - "... ... ... ... ... ... \n", - "2014-02-27 22:00:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", - "2014-02-27 22:30:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", - "2014-02-27 23:00:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", - "2014-02-27 23:30:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", - "2014-02-28 00:00:00 -0.698792 0.458810 -0.149604 0.0 0.0 \n", + " windSpeed humidity holiday LCLid stdorToU \\\n", + "2012-10-12 11:30:00 1.406991 -1.492695 -0.149604 0.0 0.0 \n", + "2012-10-12 12:00:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 12:30:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 13:00:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 13:30:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", + "2014-02-27 22:30:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", + "2014-02-27 23:00:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", + "2014-02-27 23:30:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", + "2014-02-28 00:00:00 -0.698792 0.458810 -0.149604 0.0 0.0 \n", "\n", - " stdorToU \n", - "2012-10-12 11:30:00 0.0 \n", - "2012-10-12 12:00:00 0.0 \n", - "2012-10-12 12:30:00 0.0 \n", - "2012-10-12 13:00:00 0.0 \n", - "2012-10-12 13:30:00 0.0 \n", - "... ... \n", - "2014-02-27 22:00:00 0.0 \n", - "2014-02-27 22:30:00 0.0 \n", - "2014-02-27 23:00:00 0.0 \n", - "2014-02-27 23:30:00 0.0 \n", - "2014-02-28 00:00:00 0.0 \n", + " Acorn_grouped \n", + "2012-10-12 11:30:00 0.0 \n", + "2012-10-12 12:00:00 0.0 \n", + "2012-10-12 12:30:00 0.0 \n", + "2012-10-12 13:00:00 0.0 \n", + "2012-10-12 13:30:00 0.0 \n", + "... ... \n", + "2014-02-27 22:00:00 0.0 \n", + "2014-02-27 22:30:00 0.0 \n", + "2014-02-27 23:00:00 0.0 \n", + "2014-02-27 23:30:00 0.0 \n", + "2014-02-28 00:00:00 0.0 \n", "\n", "[24119 rows x 19 columns]" ] }, - "execution_count": 74, + "execution_count": 144, "metadata": {}, "output_type": "execute_result" } @@ -1272,11 +947,11 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 145, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:08.302640Z", - "start_time": "2020-10-18T06:10:08.249960Z" + "end_time": "2020-10-18T07:17:34.619990Z", + "start_time": "2020-10-18T07:17:34.569878Z" } }, "outputs": [ @@ -1286,7 +961,7 @@ "StandardScaler()" ] }, - "execution_count": 75, + "execution_count": 145, "metadata": {}, "output_type": "execute_result" } @@ -1298,11 +973,11 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 146, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:08.476523Z", - "start_time": "2020-10-18T06:10:08.413755Z" + "end_time": "2020-10-18T07:17:34.678037Z", + "start_time": "2020-10-18T07:17:34.622358Z" } }, "outputs": [], @@ -1313,11 +988,11 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 147, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:11.469433Z", - "start_time": "2020-10-18T06:10:08.562215Z" + "end_time": "2020-10-18T07:17:37.886746Z", + "start_time": "2020-10-18T07:17:34.679999Z" }, "lines_to_next_cell": 0 }, @@ -1325,10 +1000,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 77, + "execution_count": 147, "metadata": {}, "output_type": "execute_result" }, @@ -1360,11 +1035,11 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 148, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:11.534932Z", - "start_time": "2020-10-18T06:10:11.471576Z" + "end_time": "2020-10-18T07:17:37.951025Z", + "start_time": "2020-10-18T07:17:37.888800Z" }, "lines_to_next_cell": 2 }, @@ -1406,9 +1081,9 @@ " windSpeed\n", " humidity\n", " holiday\n", - " Acorn_grouped\n", " LCLid\n", " stdorToU\n", + " Acorn_grouped\n", " \n", " \n", " \n", @@ -1699,36 +1374,36 @@ "2014-02-27 23:30:00 -1.004399 -0.858377 -0.689197 -0.979256 \n", "2014-02-28 00:00:00 -1.024600 -0.873777 -0.781141 -0.972288 \n", "\n", - " windSpeed humidity holiday Acorn_grouped LCLid \\\n", - "2012-10-12 11:30:00 1.406991 -1.492695 -0.149604 0.0 0.0 \n", - "2012-10-12 12:00:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 12:30:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 13:00:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", - "2012-10-12 13:30:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", - "... ... ... ... ... ... \n", - "2014-02-27 22:00:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", - "2014-02-27 22:30:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", - "2014-02-27 23:00:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", - "2014-02-27 23:30:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", - "2014-02-28 00:00:00 -0.698792 0.458810 -0.149604 0.0 0.0 \n", + " windSpeed humidity holiday LCLid stdorToU \\\n", + "2012-10-12 11:30:00 1.406991 -1.492695 -0.149604 0.0 0.0 \n", + "2012-10-12 12:00:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 12:30:00 1.387977 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 13:00:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", + "2012-10-12 13:30:00 1.426005 -1.854084 -0.149604 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", + "2014-02-27 22:30:00 -0.465873 0.386532 -0.149604 0.0 0.0 \n", + "2014-02-27 23:00:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", + "2014-02-27 23:30:00 -0.594216 0.458810 -0.149604 0.0 0.0 \n", + "2014-02-28 00:00:00 -0.698792 0.458810 -0.149604 0.0 0.0 \n", "\n", - " stdorToU \n", - "2012-10-12 11:30:00 0.0 \n", - "2012-10-12 12:00:00 0.0 \n", - "2012-10-12 12:30:00 0.0 \n", - "2012-10-12 13:00:00 0.0 \n", - "2012-10-12 13:30:00 0.0 \n", - "... ... \n", - "2014-02-27 22:00:00 0.0 \n", - "2014-02-27 22:30:00 0.0 \n", - "2014-02-27 23:00:00 0.0 \n", - "2014-02-27 23:30:00 0.0 \n", - "2014-02-28 00:00:00 0.0 \n", + " Acorn_grouped \n", + "2012-10-12 11:30:00 0.0 \n", + "2012-10-12 12:00:00 0.0 \n", + "2012-10-12 12:30:00 0.0 \n", + "2012-10-12 13:00:00 0.0 \n", + "2012-10-12 13:30:00 0.0 \n", + "... ... \n", + "2014-02-27 22:00:00 0.0 \n", + "2014-02-27 22:30:00 0.0 \n", + "2014-02-27 23:00:00 0.0 \n", + "2014-02-27 23:30:00 0.0 \n", + "2014-02-28 00:00:00 0.0 \n", "\n", "[24170 rows x 19 columns]" ] }, - "execution_count": 78, + "execution_count": 148, "metadata": {}, "output_type": "execute_result" } @@ -1746,11 +1421,11 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 149, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:11.581192Z", - "start_time": "2020-10-18T06:10:11.537081Z" + "end_time": "2020-10-18T07:17:37.988816Z", + "start_time": "2020-10-18T07:17:37.953983Z" } }, "outputs": [], @@ -1764,11 +1439,11 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 150, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:15.218869Z", - "start_time": "2020-10-18T06:10:15.136626Z" + "end_time": "2020-10-18T07:17:38.065288Z", + "start_time": "2020-10-18T07:17:37.991192Z" } }, "outputs": [ @@ -1796,25 +1471,430 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 16, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:15.417257Z", - "start_time": "2020-10-18T06:10:15.365151Z" + "end_time": "2020-10-18T06:50:35.927144Z", + "start_time": "2020-10-18T06:50:35.880239Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([ 0.85721916, 0.4689078 , 0.88187414, -0.21736582, 1.0000415 ,\n", - " 0.9990746 , 0. , 0. , 0. , 0. ,\n", - " 0. , 0. , 0. , 0. , -0.1496042 ,\n", - " 0. , 0. , 0. , 3.9583333 , 0. ],\n", - " dtype=float32)" + "[array([[ 0.85721916, -0.44595006, 0.8227485 , ..., 0. ,\n", + " -4. , 1. ],\n", + " [ 0.85721916, -0.44595006, 0.8227485 , ..., 0. ,\n", + " -3.9791667 , 1. ],\n", + " [ 0.85721916, -0.44595006, 0.8227485 , ..., 0. ,\n", + " -3.9583333 , 1. ],\n", + " ...,\n", + " [ 0.85721916, 0.01147887, 0.88187414, ..., 0. ,\n", + " -0.0625 , 1. ],\n", + " [ 0.85721916, 0.01147887, 0.88187414, ..., 0. ,\n", + " -0.04166667, 1. ],\n", + " [ 0.85721916, 0.01147887, 0.88187414, ..., 0. ,\n", + " -0.02083333, 1. ]], dtype=float32),\n", + " array([[-0.44413036],\n", + " [ 1.6604997 ],\n", + " [ 0.01322194],\n", + " [-0.395562 ],\n", + " [-0.2174779 ],\n", + " [-0.516983 ],\n", + " [-0.35508832],\n", + " [-0.45627245],\n", + " [-0.42389354],\n", + " [-0.39960936],\n", + " [-0.46841457],\n", + " [ 0.9724476 ],\n", + " [ 0.40986377],\n", + " [-0.10010429],\n", + " [-0.23366736],\n", + " [ 1.1100581 ],\n", + " [ 2.5630622 ],\n", + " [-0.22152527],\n", + " [-0.03939381],\n", + " [-0.24176209],\n", + " [ 0.36129537],\n", + " [ 0.06988506],\n", + " [ 0.29249015],\n", + " [ 0.0658377 ],\n", + " [ 0.15083237],\n", + " [ 0.0415535 ],\n", + " [ 0.0658377 ],\n", + " [ 0.09012189],\n", + " [ 0.01322194],\n", + " [-0.1689095 ],\n", + " [-0.47246194],\n", + " [-0.37127778],\n", + " [-0.54126716],\n", + " [-0.3469936 ],\n", + " [-0.5817408 ],\n", + " [-0.34294623],\n", + " [-0.5898355 ],\n", + " [-0.35104096],\n", + " [-0.5493619 ],\n", + " [-0.38746724],\n", + " [-0.5129356 ],\n", + " [-0.43198827],\n", + " [-0.5938829 ],\n", + " [-0.4765093 ],\n", + " [-0.24985681],\n", + " [ 2.680436 ],\n", + " [ 2.7532885 ],\n", + " [-0.52912503],\n", + " [-0.4643672 ],\n", + " [-0.71530384],\n", + " [-0.48460403],\n", + " [-0.71530384],\n", + " [-0.48460403],\n", + " [-0.6788776 ],\n", + " [ 0.0415535 ],\n", + " [-0.48055667],\n", + " [-0.07177273],\n", + " [-0.5210303 ],\n", + " [-0.27818838],\n", + " [-0.09200956],\n", + " [-0.3105673 ],\n", + " [ 0.5474742 ],\n", + " [ 0.02941141],\n", + " [ 2.6925778 ],\n", + " [ 0.10226399],\n", + " [ 0.05774296],\n", + " [-0.05558327],\n", + " [-0.09200956],\n", + " [-0.07986747],\n", + " [-0.07177273],\n", + " [-0.26199892],\n", + " [ 0.02536404],\n", + " [-0.01106225],\n", + " [ 0.03750614],\n", + " [-0.35104096],\n", + " [-0.10819902],\n", + " [-0.6667355 ],\n", + " [-0.5129356 ],\n", + " [-0.69101965],\n", + " [-0.5250777 ],\n", + " [-0.6869723 ],\n", + " [-0.53721976],\n", + " [-0.7031618 ],\n", + " [-0.5331724 ],\n", + " [-0.71935123],\n", + " [-0.5210303 ],\n", + " [-0.72744596],\n", + " [-0.516983 ],\n", + " [-0.7395881 ],\n", + " [-0.49674612],\n", + " [-0.5857882 ],\n", + " [-0.22962 ],\n", + " [ 0.37748486],\n", + " [ 1.0979159 ],\n", + " [-0.71530384],\n", + " [-0.50079346],\n", + " [ 1.6766891 ],\n", + " [-0.09200956],\n", + " [-0.13248321],\n", + " [-0.36318305],\n", + " [-0.65459335],\n", + " [-0.3348515 ],\n", + " [-0.5776934 ],\n", + " [-0.5776934 ],\n", + " [-0.5331724 ],\n", + " [-0.62221444],\n", + " [-0.38746724],\n", + " [-0.6464986 ],\n", + " [ 0.478669 ],\n", + " [ 0.5393795 ],\n", + " [ 3.368488 ],\n", + " [ 3.3280144 ],\n", + " [ 2.8463778 ],\n", + " [ 2.2999835 ],\n", + " [ 1.9923837 ],\n", + " [ 1.8588207 ],\n", + " [ 1.0453001 ],\n", + " [-0.0879622 ],\n", + " [-0.17295687],\n", + " [ 0.10226399],\n", + " [-0.3793725 ],\n", + " [-0.24580945],\n", + " [-0.63030916],\n", + " [-0.4522251 ],\n", + " [-0.6869723 ],\n", + " [-0.4886514 ],\n", + " [-0.7395881 ],\n", + " [-0.49674612],\n", + " [-0.72339857],\n", + " [-0.5210303 ],\n", + " [-0.7072091 ],\n", + " [-0.5453145 ],\n", + " [-0.69101965],\n", + " [-0.5695987 ],\n", + " [-0.67078286],\n", + " [-0.5938829 ],\n", + " [-0.45627245],\n", + " [-0.53721976],\n", + " [ 3.3280144 ],\n", + " [-0.43198827],\n", + " [-0.5250777 ],\n", + " [-0.69101965],\n", + " [-0.50888824],\n", + " [-0.7112565 ],\n", + " [ 1.2071948 ],\n", + " [-0.41984618],\n", + " [-0.50079346],\n", + " [-0.71935123],\n", + " [-0.49674612],\n", + " [-0.71935123],\n", + " [-0.50079346],\n", + " [-0.71935123],\n", + " [-0.50484085],\n", + " [-0.35104096],\n", + " [-0.23771472],\n", + " [ 1.7900155 ],\n", + " [ 0.02941141],\n", + " [-0.10415166],\n", + " [ 0.00917458],\n", + " [ 3.6882298 ],\n", + " [-0.01510962],\n", + " [-0.11224639],\n", + " [ 0.02131667],\n", + " [ 0.02941141],\n", + " [ 0.32891646],\n", + " [ 0.18725866],\n", + " [-0.06772537],\n", + " [-0.04748854],\n", + " [-0.063678 ],\n", + " [-0.063678 ],\n", + " [-0.063678 ],\n", + " [-0.24176209],\n", + " [-0.5453145 ],\n", + " [-0.62626183],\n", + " [-0.5898355 ],\n", + " [-0.6424513 ],\n", + " [-0.5817408 ],\n", + " [-0.65459335],\n", + " [-0.59793025],\n", + " [-0.65459335],\n", + " [-0.60197765],\n", + " [-0.650546 ],\n", + " [-0.606025 ],\n", + " [-0.6464986 ],\n", + " [-0.6141197 ],\n", + " [-0.440083 ],\n", + " [-0.6181671 ],\n", + " [ 0.6284215 ],\n", + " [-0.6100724 ],\n", + " [-0.6181671 ],\n", + " [-0.5534092 ],\n", + " [ 0.40986377]], dtype=float32),\n", + " array([[0.85721916, 0.01147887, 0.88187414, ..., 0. , 0. ,\n", + " 0. ],\n", + " [0.85721916, 0.01147887, 0.88187414, ..., 0. , 0.02083333,\n", + " 0. ],\n", + " [0.85721916, 0.01147887, 0.88187414, ..., 0. , 0.04166667,\n", + " 0. ],\n", + " ...,\n", + " [0.85721916, 0.4689078 , 0.88187414, ..., 0. , 3.9375 ,\n", + " 0. ],\n", + " [0.85721916, 0.4689078 , 0.88187414, ..., 0. , 3.9583333 ,\n", + " 0. ],\n", + " [0.85721916, 0.4689078 , 0.88187414, ..., 0. , 3.9791667 ,\n", + " 0. ]], dtype=float32),\n", + " array([[-0.43198827],\n", + " [-0.2539042 ],\n", + " [ 2.9880357 ],\n", + " [ 0.23177968],\n", + " [-0.5331724 ],\n", + " [-0.56555134],\n", + " [-0.6424513 ],\n", + " [-0.54126716],\n", + " [-0.67078286],\n", + " [-0.49674612],\n", + " [-0.05963064],\n", + " [-0.19724107],\n", + " [ 0.12654819],\n", + " [ 0.7862688 ],\n", + " [ 0.0536956 ],\n", + " [ 2.8868515 ],\n", + " [-0.32675678],\n", + " [-0.24580945],\n", + " [-0.10010429],\n", + " [-0.20128843],\n", + " [-0.1689095 ],\n", + " [-0.26199892],\n", + " [-0.16081478],\n", + " [-0.38746724],\n", + " [-0.2053358 ],\n", + " [-0.38746724],\n", + " [-0.1689095 ],\n", + " [-0.395562 ],\n", + " [-0.33889887],\n", + " [-0.6141197 ],\n", + " [-0.5493619 ],\n", + " [-0.6829249 ],\n", + " [-0.5453145 ],\n", + " [-0.6991144 ],\n", + " [-0.54126716],\n", + " [-0.71935123],\n", + " [-0.5250777 ],\n", + " [-0.7355407 ],\n", + " [-0.5129356 ],\n", + " [-0.75173014],\n", + " [-0.5210303 ],\n", + " [-0.5453145 ],\n", + " [-0.4886514 ],\n", + " [ 0.42605323],\n", + " [ 1.518842 ],\n", + " [ 2.150231 ],\n", + " [ 1.7333523 ],\n", + " [ 2.008573 ],\n", + " [ 1.3771842 ],\n", + " [ 1.0088738 ],\n", + " [-0.5574566 ],\n", + " [-0.56555134],\n", + " [-0.650546 ],\n", + " [-0.5210303 ],\n", + " [-0.6829249 ],\n", + " [-0.516983 ],\n", + " [-0.7072091 ],\n", + " [-0.47246194],\n", + " [-0.10415166],\n", + " [-0.18509898],\n", + " [-0.4522251 ],\n", + " [ 0.02131667],\n", + " [-0.14462532],\n", + " [-0.12034112],\n", + " [-0.71935123],\n", + " [-0.09200956],\n", + " [-0.18105161],\n", + " [ 0.04964823],\n", + " [ 0.5029532 ],\n", + " [ 0.3005849 ],\n", + " [ 0.09821662],\n", + " [ 0.14273764],\n", + " [ 0.01322194],\n", + " [ 0.14273764],\n", + " [ 0.02536404],\n", + " [ 0.15487973],\n", + " [-0.05963064],\n", + " [-0.3348515 ],\n", + " [-0.5534092 ],\n", + " [-0.35508832],\n", + " [-0.5695987 ],\n", + " [-0.35104096],\n", + " [-0.5817408 ],\n", + " [-0.35104096],\n", + " [-0.5938829 ],\n", + " [-0.35508832],\n", + " [-0.6100724 ],\n", + " [-0.3591357 ],\n", + " [-0.606025 ],\n", + " [-0.3227094 ],\n", + " [-0.43603563],\n", + " [ 0.45843217],\n", + " [-0.2660463 ],\n", + " [-0.23771472],\n", + " [-0.2539042 ],\n", + " [-0.24580945],\n", + " [ 0.24392179],\n", + " [-0.516983 ],\n", + " [-0.46031982],\n", + " [-0.50888824],\n", + " [-0.440083 ],\n", + " [-0.52912503],\n", + " [-0.41984618],\n", + " [-0.54126716],\n", + " [-0.41175145],\n", + " [-0.56555134],\n", + " [-0.39960936],\n", + " [-0.41175145],\n", + " [-0.10010429],\n", + " [-0.5695987 ],\n", + " [-0.274141 ],\n", + " [ 2.6075833 ],\n", + " [ 0.32082173],\n", + " [ 2.1138046 ],\n", + " [ 1.8750101 ],\n", + " [ 1.4621788 ],\n", + " [-0.13653058],\n", + " [-0.30247256],\n", + " [-0.24176209],\n", + " [-0.35104096],\n", + " [-0.36723042],\n", + " [-0.35508832],\n", + " [-0.39960936],\n", + " [-0.3227094 ],\n", + " [-0.56150395],\n", + " [-0.50484085],\n", + " [-0.69101965],\n", + " [-0.48460403],\n", + " [-0.72339857],\n", + " [-0.48460403],\n", + " [-0.73149335],\n", + " [-0.49269876],\n", + " [-0.7031618 ],\n", + " [-0.516983 ],\n", + " [-0.6748302 ],\n", + " [-0.56150395],\n", + " [-0.63030916],\n", + " [-0.395562 ],\n", + " [-0.07177273],\n", + " [-0.22962 ],\n", + " [-0.24985681],\n", + " [-0.6869723 ],\n", + " [-0.54126716],\n", + " [-0.6384039 ],\n", + " [-0.59793025],\n", + " [-0.5857882 ],\n", + " [-0.65864074],\n", + " [-0.52912503],\n", + " [-0.71530384],\n", + " [-0.3591357 ],\n", + " [-0.3469936 ],\n", + " [-0.4765093 ],\n", + " [-0.7112565 ],\n", + " [ 0.02941141],\n", + " [-0.49674612],\n", + " [ 0.62032676],\n", + " [-0.5817408 ],\n", + " [-0.30651993],\n", + " [ 0.0415535 ],\n", + " [ 0.2520165 ],\n", + " [-0.14867269],\n", + " [ 2.304031 ],\n", + " [ 0.28034806],\n", + " [-0.16081478],\n", + " [ 0.17511657],\n", + " [-0.10819902],\n", + " [ 0.0658377 ],\n", + " [-0.2539042 ],\n", + " [-0.05558327],\n", + " [-0.21343052],\n", + " [-0.09605693],\n", + " [-0.24580945],\n", + " [-0.14462532],\n", + " [-0.29437783],\n", + " [-0.46031982],\n", + " [-0.63030916],\n", + " [-0.53721976],\n", + " [-0.63030916],\n", + " [-0.5453145 ],\n", + " [-0.6384039 ],\n", + " [-0.54126716],\n", + " [-0.66268814],\n", + " [-0.5210303 ],\n", + " [-0.6788776 ],\n", + " [-0.50484085],\n", + " [-0.7112565 ],\n", + " [-0.48460403],\n", + " [-0.67078286],\n", + " [-0.3105673 ],\n", + " [-0.72744596],\n", + " [ 0.04560087],\n", + " [ 1.021016 ]], dtype=float32)]" ] }, - "execution_count": 81, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1823,16 +1903,16 @@ "# we can treat it like an array\n", "ds_train[0]\n", "len(ds_train)\n", - "ds_train[0][2][-2]" + "ds_train[0]" ] }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 17, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:15.976507Z", - "start_time": "2020-10-18T06:10:15.607052Z" + "end_time": "2020-10-18T06:50:36.307909Z", + "start_time": "2020-10-18T06:50:35.929008Z" } }, "outputs": [ @@ -1872,9 +1952,9 @@ " windSpeed\n", " humidity\n", " holiday\n", - " Acorn_grouped\n", " LCLid\n", " stdorToU\n", + " Acorn_grouped\n", " tsp_days\n", " is_past\n", " \n", @@ -2021,12 +2101,12 @@ "2012-10-16 15:30:00 -0.261644 -0.818795 0.863042 1.753994 \n", "2012-10-16 16:00:00 -0.232770 -0.805660 0.727866 0.741507 \n", "\n", - " humidity holiday Acorn_grouped LCLid stdorToU \\\n", - "2012-10-16 14:00:00 -2.070918 -0.149604 0.0 0.0 0.0 \n", - "2012-10-16 14:30:00 -2.070918 -0.149604 0.0 0.0 0.0 \n", - "2012-10-16 15:00:00 -1.998640 -0.149604 0.0 0.0 0.0 \n", - "2012-10-16 15:30:00 -1.998640 -0.149604 0.0 0.0 0.0 \n", - "2012-10-16 16:00:00 -1.709528 -0.149604 0.0 0.0 0.0 \n", + " humidity holiday LCLid stdorToU Acorn_grouped \\\n", + "2012-10-16 14:00:00 -2.070918 -0.149604 0.0 0.0 0.0 \n", + "2012-10-16 14:30:00 -2.070918 -0.149604 0.0 0.0 0.0 \n", + "2012-10-16 15:00:00 -1.998640 -0.149604 0.0 0.0 0.0 \n", + "2012-10-16 15:30:00 -1.998640 -0.149604 0.0 0.0 0.0 \n", + "2012-10-16 16:00:00 -1.709528 -0.149604 0.0 0.0 0.0 \n", "\n", " tsp_days is_past \n", "2012-10-16 14:00:00 -0.104167 1.0 \n", @@ -2036,7 +2116,7 @@ "2012-10-16 16:00:00 -0.020833 1.0 " ] }, - "execution_count": 82, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, @@ -2069,11 +2149,11 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 18, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:16.052080Z", - "start_time": "2020-10-18T06:10:15.978378Z" + "end_time": "2020-10-18T06:50:36.368746Z", + "start_time": "2020-10-18T06:50:36.309745Z" } }, "outputs": [ @@ -2113,9 +2193,9 @@ " windSpeed\n", " humidity\n", " holiday\n", - " Acorn_grouped\n", " LCLid\n", " stdorToU\n", + " Acorn_grouped\n", " tsp_days\n", " is_past\n", " \n", @@ -2262,12 +2342,12 @@ "2012-10-20 15:30:00 0.0 0.0 0.0 0.0 \n", "2012-10-20 16:00:00 0.0 0.0 0.0 0.0 \n", "\n", - " humidity holiday Acorn_grouped LCLid stdorToU \\\n", - "2012-10-20 14:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", - "2012-10-20 14:30:00 0.0 -0.149604 0.0 0.0 0.0 \n", - "2012-10-20 15:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", - "2012-10-20 15:30:00 0.0 -0.149604 0.0 0.0 0.0 \n", - "2012-10-20 16:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", + " humidity holiday LCLid stdorToU Acorn_grouped \\\n", + "2012-10-20 14:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", + "2012-10-20 14:30:00 0.0 -0.149604 0.0 0.0 0.0 \n", + "2012-10-20 15:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", + "2012-10-20 15:30:00 0.0 -0.149604 0.0 0.0 0.0 \n", + "2012-10-20 16:00:00 0.0 -0.149604 0.0 0.0 0.0 \n", "\n", " tsp_days is_past \n", "2012-10-20 14:00:00 3.895833 0.0 \n", @@ -2277,7 +2357,7 @@ "2012-10-20 16:00:00 3.979167 0.0 " ] }, - "execution_count": 83, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -2296,11 +2376,11 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 19, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:16.199517Z", - "start_time": "2020-10-18T06:10:16.159602Z" + "end_time": "2020-10-18T06:50:36.412045Z", + "start_time": "2020-10-18T06:50:36.370476Z" }, "lines_to_end_of_cell_marker": 2, "lines_to_next_cell": 0 @@ -2308,7 +2388,7 @@ "outputs": [], "source": [ "\n", - "class Seq2SeqNet(nn.Module):\n", + "class Seq2SeqLSTMDecoder(nn.Module):\n", " def __init__(self, input_size, input_size_decoder, output_size, hidden_size=32, lstm_layers=2, lstm_dropout=0, _min_std = 0.05):\n", " super().__init__()\n", " self._min_std = _min_std\n", @@ -2334,13 +2414,9 @@ " x = torch.cat([context_x, context_y], -1)\n", " _, (h_out, cell) = self.encoder(x)\n", " \n", - " ## Shape\n", - " # hidden = [batch size, n layers * n directions, hid dim]\n", - " # cell = [batch size, n layers * n directions, hid dim]\n", " # output = [batch size, seq len, hid dim * n directions]\n", " outputs, (_, _) = self.decoder(target_x, (h_out, cell))\n", " \n", - " \n", " # outputs: [B, T, num_direction * H]\n", " mean = self.mean(outputs)\n", " log_sigma = self.std(outputs)\n", @@ -2351,101 +2427,194 @@ " return y_dist" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lightning" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "ExecuteTime": { - "end_time": "2020-10-11T10:56:42.836934Z", - "start_time": "2020-10-11T10:56:42.832646Z" + "end_time": "2020-10-18T06:50:36.456344Z", + "start_time": "2020-10-18T06:50:36.414657Z" + } + }, + "outputs": [], + "source": [ + "import pytorch_lightning as pl\n", + "\n", + "class PL_Seq2Seq(pl.LightningModule):\n", + " def __init__(self, **hparams):\n", + " super().__init__()\n", + " self._model = Seq2SeqLSTMDecoder(**hparams)\n", + "\n", + " def forward(self, x_past, y_past, x_future, y_future=None):\n", + " \"\"\"Eval/Predict\"\"\"\n", + " y_dist = self._model(x_past, y_past, x_future)\n", + " return y_dist\n", + "\n", + " def training_step(self, batch, batch_idx):\n", + " x_past, y_past, x_future, y_future = batch\n", + " y_dist = self.forward(*batch)\n", + " loss = -y_dist.log_prob(y_future).mean()\n", + " self.log_dict({'loss/train':loss})\n", + " return loss\n", + "\n", + " def validation_step(self, batch, batch_idx):\n", + " x_past, y_past, x_future, y_future = batch\n", + " y_dist = self.forward(*batch)\n", + " loss = -y_dist.log_prob(y_future).mean()\n", + " self.log_dict({'loss/val':loss})\n", + " return loss\n", + "\n", + " def configure_optimizers(self):\n", + " return torch.optim.Adam(self.parameters(), lr=1e-4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T07:06:30.808491Z", + "start_time": "2020-10-18T07:06:30.636543Z" }, "lines_to_next_cell": 2 }, "outputs": [], - "source": [] + "source": [ + "from torch.utils.data import DataLoader, random_split\n", + "from pytorch_lightning.loggers import CSVLogger\n", + "from pl_bolts.callbacks import PrintTableMetricsCallback\n" + ] }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 116, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:19.573015Z", - "start_time": "2020-10-18T06:10:16.472649Z" + "end_time": "2020-10-18T07:14:54.474098Z", + "start_time": "2020-10-18T07:13:40.188426Z" }, "lines_to_next_cell": 0 }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wassname/anaconda/envs/seq2seq-time/lib/python3.7/site-packages/torch/nn/modules/rnn.py:60: UserWarning: dropout option adds dropout after all but last recurrent layer, so non-zero dropout expects num_layers greater than 1, but got dropout=0.5 and num_layers=1\n", + " \"num_layers={}\".format(dropout, num_layers))\n", + "GPU available: True, used: True\n", + "TPU available: False, using: 0 TPU cores\n", + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", + "\n", + " | Name | Type | Params\n", + "----------------------------------------------\n", + "0 | _model | Seq2SeqLSTMDecoder | 4 K \n" + ] + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "Seq2SeqNet(\n", - " (encoder): LSTM(21, 32, num_layers=2, batch_first=True)\n", - " (decoder): LSTM(20, 32, num_layers=2, batch_first=True)\n", - " (mean): Linear(in_features=32, out_features=1, bias=True)\n", - " (std): Linear(in_features=32, out_features=1, bias=True)\n", - ")" + "HBox(children=(HTML(value='Validation sanity check'), FloatProgress(value=1.0, bar_style='info', layout=Layout…" ] }, - "execution_count": 85, "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "input_size = x_past.shape[-1]\n", - "output_size = y_future.shape[-1]\n", - "\n", - "model = Seq2SeqNet(input_size, input_size, output_size,\n", - " hidden_size=32, \n", - " lstm_layers=2, \n", - " lstm_dropout=0).to(device)\n", - "model" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-18T06:10:19.607637Z", - "start_time": "2020-10-18T06:10:19.575213Z" - } - }, - "outputs": [], - "source": [ - "# Init the optimiser\n", - "optimizer = optim.Adam(model.parameters(), lr=1e-3)" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-18T06:10:19.726636Z", - "start_time": "2020-10-18T06:10:19.610734Z" - } - }, - "outputs": [ + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7ee82f23201942e6863d636f05f3efc5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='Training'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), max…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "name": "stdout", "output_type": "stream", "text": [ - "Normal(loc: torch.Size([64, 192, 1]), scale: torch.Size([64, 192, 1]))\n", - "========================================================\n", - " Kernel Shape Output Shape Params Mult-Adds\n", - "Layer \n", - "0_encoder - [64, 192, 32] 15488 14976\n", - "1_decoder - [64, 192, 32] 15360 14848\n", - "2_mean [32, 1] [64, 192, 1] 33 32\n", - "3_std [32, 1] [64, 192, 1] 33 32\n", - "--------------------------------------------------------\n", - " Totals\n", - "Total params 30914\n", - "Trainable params 30914\n", - "Non-trainable params 0\n", - "Mult-Adds 29888\n", - "========================================================\n" + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wassname/anaconda/envs/seq2seq-time/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py:45: UserWarning: Detected KeyboardInterrupt, attempting graceful shutdown...\n", + " warnings.warn(*args, **kwargs)\n" ] }, { @@ -2454,323 +2623,143 @@ "1" ] }, - "execution_count": 87, + "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "input_size = x_past.shape[-1]\n", + "output_size = y_future.shape[-1]\n", "\n", - "past_x = torch.rand((batch_size, window_past, input_size)).to(device)\n", - "future_x = torch.rand((batch_size, window_future, input_size)).to(device)\n", - "past_y = torch.rand((batch_size, window_past, output_size)).to(device)\n", - "future_y = torch.rand((batch_size, window_future, output_size)).to(device)\n", - "output = model(past_x, past_y, future_x, future_y) \n", - "print(output)\n", + "model = PL_Seq2Seq(input_size=input_size,\n", + " input_size_decoder=input_size,\n", + " output_size=output_size,\n", + " hidden_size=16,\n", + " lstm_layers=1,\n", + " lstm_dropout=0.5).to(device)\n", "\n", - "from torchsummaryX import summary\n", - "summary(model, past_x, past_y, future_x, future_y )\n", - "1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training" + "logger = CSVLogger(\"logs\", name=\"seq2seq\")\n", + "trainer = pl.Trainer(gpus=1,\n", + " logger=logger)\n", + "dl_train = DataLoader(ds_train,\n", + " batch_size=batch_size,\n", + " shuffle=True,\n", + " num_workers=4)\n", + "dl_test = DataLoader(ds_test, batch_size=batch_size, num_workers=4)\n", + "trainer.fit(model, dl_train, dl_test)" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 117, "metadata": { "ExecuteTime": { - "end_time": "2020-10-18T06:10:19.773990Z", - "start_time": "2020-10-18T06:10:19.729611Z" - } - }, - "outputs": [], - "source": [ - "def train_epoch(ds, model, bs=128):\n", - " model.train()\n", - "\n", - " training_loss = []\n", - "\n", - " # Put data into a torch loader\n", - " load_train = torch.utils.data.dataloader.DataLoader(\n", - " ds,\n", - " batch_size=bs,\n", - " pin_memory=False,\n", - " num_workers=num_workers,\n", - " shuffle=True,\n", - " )\n", - "\n", - " for batch in tqdm(load_train, leave=False, desc='train'):\n", - " # Send data to gpu\n", - " x_past, y_past, x_future, y_future = [d.to(device) for d in batch]\n", - "\n", - " # Discard previous gradients\n", - " optimizer.zero_grad()\n", - " \n", - " # Run model\n", - " y_dist = model(x_past, y_past, x_future, y_future)\n", - " \n", - " # Get loss, it's Negative Log Likelihood\n", - " loss = -y_dist.log_prob(y_future).mean()\n", - "\n", - " # Backprop\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " # Record stats\n", - " training_loss.append(loss.item())\n", - "\n", - " return np.mean(training_loss)\n", - "\n", - "\n", - "def test_epoch(ds, model, bs=512):\n", - " model.eval()\n", - "\n", - " test_loss = []\n", - " load_test = torch.utils.data.dataloader.DataLoader(ds,\n", - " batch_size=bs,\n", - " pin_memory=False,\n", - " num_workers=num_workers)\n", - " for batch in tqdm(load_test, leave=False, desc='test'):\n", - " # Send data to gpu\n", - " x_past, y_past, x_future, y_future = [d.to(device) for d in batch]\n", - " with torch.no_grad():\n", - " # Run model\n", - " y_dist = model(x_past, y_past, x_future, y_future)\n", - " # Get loss, it's Negative Log Likelihood\n", - " loss = -y_dist.log_prob(y_future).mean()\n", - "\n", - " test_loss.append(loss.item())\n", - "\n", - " return np.mean(test_loss)\n", - "\n", - "\n", - "def training_loop(ds_train, ds_test, model, epochs=1, bs=128):\n", - " all_losses = []\n", - " try:\n", - " test_loss = test_epoch(ds_test, model)\n", - " print(f\"Start: Test Loss = {test_loss:.2f}\")\n", - " for epoch in tqdm(range(epochs), desc='epochs'):\n", - " loss = train_epoch(ds_train, model, bs=bs)\n", - " print(f\"Epoch {epoch+1}/{epochs}: Training Loss = {loss:.2f}\")\n", - "\n", - " test_loss = test_epoch(ds_test, model)\n", - " print(f\"Epoch {epoch+1}/{epochs}: Test Loss = {test_loss:.2f}\")\n", - " print(\"-\" * 50)\n", - "\n", - " all_losses.append([loss, test_loss])\n", - "\n", - " except KeyboardInterrupt:\n", - " # This lets you stop manually. and still get the results\n", - " pass\n", - "\n", - " # Visualising the results\n", - " all_losses = np.array(all_losses)\n", - " plt.plot(all_losses[:, 0], label=\"Training\")\n", - " plt.plot(all_losses[:, 1], label=\"Test\")\n", - " plt.title(\"Loss\")\n", - " plt.legend()\n", - "\n", - " return all_losses" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "start_time": "2020-10-18T06:10:18.300Z" + "end_time": "2020-10-18T07:14:54.912034Z", + "start_time": "2020-10-18T07:14:54.476393Z" } }, "outputs": [ { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, + "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", + "
loss/trainsteploss/val
epoch
0.01.017363173.5000001.072045
1.00.852601448.1428571.047129
2.00.862261747.7142861.061411
3.00.8028631047.2857141.078880
4.00.7660911299.000000NaN
\n", + "
" + ], "text/plain": [ - "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" + " loss/train step loss/val\n", + "epoch \n", + "0.0 1.017363 173.500000 1.072045\n", + "1.0 0.852601 448.142857 1.047129\n", + "2.0 0.862261 747.714286 1.061411\n", + "3.0 0.802863 1047.285714 1.078880\n", + "4.0 0.766091 1299.000000 NaN" ] }, + "execution_count": 117, "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Start: Test Loss = 1.54\n" - ] + "output_type": "execute_result" }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "26bb06680b314849914fe0a9db508456", - "version_major": 2, - "version_minor": 0 - }, + "image/png": "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\n", "text/plain": [ - "HBox(children=(HTML(value='epochs'), FloatProgress(value=0.0, max=8.0), HTML(value='')))" + "
" ] }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" - ] + "metadata": { + "needs_background": "light" }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/8: Training Loss = 1.00\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/8: Test Loss = 1.07\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 2/8: Training Loss = 0.80\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 2/8: Test Loss = 1.13\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 3/8: Training Loss = 0.66\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 3/8: Test Loss = 1.40\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9a315823bb234fafaf1f2a92fd3360f5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" - ] - }, - "metadata": {}, "output_type": "display_data" } ], "source": [ - "# this might take 1 minute per epoch on a gpu\n", - "training_loop(ds_train, ds_test, model, epochs=8, bs=batch_size)\n", - "1" + "df_hist = pd.read_csv(trainer.logger.experiment.metrics_file_path)\n", + "df_hist['epoch'] = df_hist['epoch'].ffill()\n", + "df_histe = df_hist.set_index('epoch').groupby('epoch').mean()\n", + "df_histe[['loss/train', 'loss/val']].plot()\n", + "df_histe" ] }, { @@ -2782,24 +2771,660 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 118, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:18.900Z" + "end_time": "2020-10-18T07:14:56.985869Z", + "start_time": "2020-10-18T07:14:54.915773Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "67bb6304e30f4fe692fcbb46fe21c55c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value='predict'), FloatProgress(value=0.0, max=70.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:        (t_ahead: 192, t_behind: 192, t_source: 4439)\n",
+       "Coordinates:\n",
+       "  * t_source       (t_source) datetime64[ns] 2013-11-19T13:00:00 ... 2013-11-...\n",
+       "  * t_ahead        (t_ahead) timedelta64[ns] 00:00:00 ... 3 days 23:30:00\n",
+       "  * t_behind       (t_behind) timedelta64[ns] -4 days +00:00:00 ... -1 days +...\n",
+       "    t_target       (t_source, t_ahead) datetime64[ns] 2013-11-19T13:00:00 ......\n",
+       "    t_past         (t_source, t_behind) datetime64[ns] 2013-11-15T13:00:00 .....\n",
+       "    t_ahead_hours  (t_ahead) float64 0.0 0.0 1.0 1.0 2.0 ... 94.0 94.0 95.0 95.0\n",
+       "Data variables:\n",
+       "    y_past         (t_source, t_behind) float32 0.44799998 0.318 ... 0.454 0.505\n",
+       "    nll            (t_source, t_ahead) float32 1.4400969 1.3171842 ... 3.8363848\n",
+       "    y_pred         (t_source, t_ahead) float32 0.3194818 ... 0.39490056\n",
+       "    y_pred_std     (t_source, t_ahead) float64 0.2927 0.2852 ... 0.4196 0.3664\n",
+       "    y_true         (t_source, t_ahead) float32 0.074000016 0.118 ... 1.2180002
" + ], + "text/plain": [ + "\n", + "Dimensions: (t_ahead: 192, t_behind: 192, t_source: 4439)\n", + "Coordinates:\n", + " * t_source (t_source) datetime64[ns] 2013-11-19T13:00:00 ... 2013-11-...\n", + " * t_ahead (t_ahead) timedelta64[ns] 00:00:00 ... 3 days 23:30:00\n", + " * t_behind (t_behind) timedelta64[ns] -4 days +00:00:00 ... -1 days +...\n", + " t_target (t_source, t_ahead) datetime64[ns] 2013-11-19T13:00:00 ......\n", + " t_past (t_source, t_behind) datetime64[ns] 2013-11-15T13:00:00 .....\n", + " t_ahead_hours (t_ahead) float64 0.0 0.0 1.0 1.0 2.0 ... 94.0 94.0 95.0 95.0\n", + "Data variables:\n", + " y_past (t_source, t_behind) float32 0.44799998 0.318 ... 0.454 0.505\n", + " nll (t_source, t_ahead) float32 1.4400969 1.3171842 ... 3.8363848\n", + " y_pred (t_source, t_ahead) float32 0.3194818 ... 0.39490056\n", + " y_pred_std (t_source, t_ahead) float64 0.2927 0.2852 ... 0.4196 0.3664\n", + " y_true (t_source, t_ahead) float32 0.074000016 0.118 ... 1.2180002" + ] + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "ds_preds = predict(model, ds_test, batch_size, device=device, scaler=output_scaler)\n", + "ds_preds = predict(model.to(device), ds_test, batch_size, device=device, scaler=output_scaler)\n", "ds_preds" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 119, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:19.000Z" + "end_time": "2020-10-18T07:14:57.046775Z", + "start_time": "2020-10-18T07:14:56.988468Z" } }, "outputs": [], @@ -2809,13 +3434,39 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 120, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:19.200Z" + "end_time": "2020-10-18T07:14:57.891184Z", + "start_time": "2020-10-18T07:14:57.050445Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAE9CAYAAAAiZVVdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACJWUlEQVR4nO2deXxU1fn/3w8hJATCjhGFACqIC4qIolVwqVur1S7axWoXpVa/ttrF2lbtZrW2Vm21Wq2lVq1Wu9nWtirWWn+gVlwAxYVFBAMCYUkISSaT9fz+OHOTm8lsd+beWZ/36zWvzHLn3jPPnMn9nOd+znPEGIOiKIqiKIqiKKkxKNcNUBRFURRFUZRCQgW0oiiKoiiKonhABbSiKIqiKIqieEAFtKIoiqIoiqJ4QAW0oiiKoiiKonhABbSiKIqiKIqieEAFtKIois+IyL0icl3k/jwRWZ3mfu4Ske/42zpFURQlU1RAK4pSkojIBhFpE5EWEakXkd+KyHC/j2OMWWKM2T+F9nxORJ6Neu/Fxpgf+t0mEfm+iBgROcf13ODIc1Mij3sHATHeb0RkvwzbcK6IvCsirSLyNxEZk2T7y0VkfWT7t0Rkuuu18SLyexHZJSKNIvJgJm1TFEVJhgpoRVFKmQ8ZY4YDs4EjgGuiNxCRwVlvVXZoAK4VkbJsH1hEDgJ+BZwP1AAh4JcJtl8AXAicDgwHzgB2uDZ5BNgKTAb2AG4KpOGKoigRVEArilLyGGPeAx4HDobeDOulIrIWWBt57gwRWRHJcj4vIoc47xeRw0RkmYg0i8gfgErXa8eLyCbX40ki8oiIbBeRnSJyu4gcANwFHB3JiO+KbNsvCywiXxCRt0WkQUQeFZG9XK8ZEblYRNZGsrB3iIgk+NhPAB3AeZnELk0+DfzDGLPYGNMCfAf4qIhUR28oIoOA7wFfNca8aSzrjDENkddPASYB3zDGNBljOo0xy7P4WRRFKUFUQCuKUvKIyCTgg4BbeH0YmAscKCKzgXuALwJjsdnTR0WkQkSGAH8DfgeMAf4EfCzOccqAfwLvAlOAvYGHjTFvARcD/zPGDDfGjIrx3hOBG4CPAxMi+3g4arMzsJn0QyPbnZrgYxuscP2eiJQn2C5lROTYyAAj3u3YyKYHAa/2NsSYdVgxPz3GbidGbgeLyMaIjeMHEWENcBSwGrgvMiB5SUSO8+PzKIqixEMFtKIopczfItneZ4H/B/zI9doNxpgGY0wb8AXgV8aYpcaYbmPMfUA7VrwdBZQDP49kP/8MvBTneEcCe2Gzpa3GmLAx5tk420bzaeAeY8wyY0w78G1sxnqKa5sfG2N2GWPqgP8CsxLt0BjzKLAdWJBiGxJijHnWGDMqwc35rMOBpqi3NwEDMtBY8QxwCjATOAH4FNbS4bx+Cvbz7gncDPxdRMb58ZkURVFioQJaUZRS5sMRYTfZGPN/EbHssNF1fzLwdXc2FWsb2Ctye88YY1zbvxvneJOAd40xXWm0dS/3fiPWh53YLLbDVtf9EFaoJuMa4GpctpMs0AKMiHpuBNAcY1vnO7kxMjjYgL0C8EHX6xuMMb+JDGAexn53x/jfbEVRFIsKaEVRlNi4BfFG4PqobGqVMeYhYAuwd5TfuDbOPjcCtXEmJpoYz7nZjBXyAIjIMKyd5L1kHyQRxph/A28D/5fJfiJtmhfxcMe7zYts+gbWZuK8bx+gAlgTY7ersfaOePF5LcFriqIogaACWlEUJTm/Bi4WkbliGSYip0cmvf0P6AIui5SC+yjWqhGLF7GC+8eRfVSKiJMprQcmRjzVsfg98HkRmSUiFVi7ydJIRjZTrgaujPF8WaSNzs3dtiFRr5VFSvYNT3BbEnnvg8CHIoJ7GHAt8IgxZkAG2hgTAv4AXCki1SIyEWup+Wdkk78Co0XksyJSJiJnY7Pyz/kQF0VRlJiogFYURUmCMeZlrGi7HWjEZmw/F3mtA/ho5HEj8AlsWbVY++kGPgTsB9QBmyLbAzyNzcxuFZEdMd77H+ykv79gRfi+wCd9+HgYY57DivtovoW1SDi3p12vvRH12uc9HO8N7KTJB4FtWO9zbwZc7AIyd7ne8iWs7WMzdsDye+ykTiLVOM4ErsD6qL8FnGWMGRBDRVEUv5D+tj1FURRFURRFURKhGWhFURRFURRF8YAKaEVRFEVRFEXxgApoRVEURVEURfGACmhFURRFURRF8YAKaEVRFEVRFEXxQKxi/r4gIvcAZwDbjDEHx3j908A3Iw9bgEuMMa8m2++4cePMlClT/GyqoiiKoiiKogzglVde2WGMGR/9fGACGrgXWzP1/jivrweOM8Y0isgHgLuBucl2OmXKFF5++WXfGqkoiqIoiqIosRCRd2M9H5iANsYsFpEpCV5/3vXwBWBiUG1RFEVRFEVRFL/IFw/0hcDjuW6EoiiKoiiKoiQjSAtHSojICVgBfWyCbS4CLgKora3NUssURVEURVEUZSA5FdAicgiwEPiAMWZnvO2MMXdjPdLMmTNnwNrjnZ2dbNq0iXA4HFhb84nKykomTpxIeXl5rpuiKIqiKIpScuRMQItILfAIcL4xZk0m+9q0aRPV1dVMmTIFEfGngXmKMYadO3eyadMmpk6dmuvmKIqiKIqilByBeaBF5CHgf8D+IrJJRC4UkYtF5OLIJt8FxgK/FJEVIpJ2aY1wOMzYsWOLXjwDiAhjx44tmWy7UryEQiGWLVtGKBTKdVMURVEyoqMj1y1Qsk2QVTg+leT1BcACv45XCuLZoZQ+q1KchEIhZs6cSX19PTU1NaxcuZKqqqpcNyuvCYVCrFq1ihkzZmisFCUPcP8moYqyMigry3WrlGyRL1U4FBfPPPMMZ5xxRq6boSiBsWrVKurr62ltbaW+vp5Vq1blukl5jTPgmD9/PjNnztSsvaLkmOjf5O7dIbq7c92qwsIMmNFWWKiAziLd+utSFABmzJhBTU0Nw4YNo6amJpLBUeKhAw4l2xS6uAma6N/kW2+t7SegNX7JKXQnqgpon9iwYQMzZszgs5/9LIcccghnn302oVCIKVOmcO2113Lsscfypz/9iSeffJKjjz6a2bNnc84559DS0gLAE088wYwZMzj22GN55JFHcvxpFCVYqqqqWLlyJYsXL1b7RgrogMM76rH3Tk9P3/3Ozty1oxCI/k3us880urr6Xtf4Jae9PdctyAwV0D6yevVqLrroIl577TVGjBjBL3/5S8CWnXv22Wc56aSTuO6663jqqadYtmwZc+bM4ZZbbiEcDvOFL3yBf/zjHyxZsoStW7fm+JMoSvBUVVUxe/ZsFc8poAMOb6jlJT3cE+EKXdwETfRvcsiQqn4ZaI1fcgo9A53zhVT85itfgRUr/N3nrFnw858n327SpEkcc8wxAJx33nncdtttAHziE58A4IUXXuDNN9/s3aajo4Ojjz6aVatWMXXqVKZNm9b73rvvvtvfD6EoSkHjDDiU5MSyvGjsktPeDpWV9r5bTHd2gi47MBD3b3LnTnoFdHc3/bLRykC6uws/S190AjqXRFfHcB4PGzYMsDWcTz75ZB566KF+261YsUIrayiKoviEc3ndqfKilpfUcGdN3QK6o0MFdDK6uvpEc1cXOqEwCcUQo6IT0KlkioOirq6O//3vfxx99NE89NBDHHvssSxfvrz39aOOOopLL72Ut99+m/32249QKMSmTZuYMWMG69evZ926dey7774DBLaiKIqSOs7ldS375w23gI4W05E8kBKH7u4+QdjV1d9PrgykGAS0eqB95IADDuC+++7jkEMOoaGhgUsuuaTf6+PHj+fee+/lU5/6FIcccghHHXUUq1atorKykrvvvpvTTz+dY489lsmTJ+foEyiKohQH6rH3TnTW2X1fq0okxi0I3WJaiY07Yw+F2b+KLgOdSwYNGsRdd93V77kNGzb0e3ziiSfy0ksvDXjvaaedpqWpFEVRlJwRz8LR3W0zqmVlVugYA4M0/dYPtXAkx73wTGfnwEmXjv++UFABrSiKoihKPwHt2BAGDerLqJaV2b8qoAfiFs0qoAcSvfrsv/+9ku7uvqtDhSig9SfgE1OmTOH111/PdTMURVEUJS3cAtpdSULtCcmJ9kDroir9ia6Ms3r1un4xKsSSdiqgFUVRFKXEMaa/bSOeaFYBHZtEGWh3XEuV6IVnpkzZr58HuhDrZquFQ1EURVFKHMeyYQyIxBfNXV32daU/bg909CCjvR0qKnLTrnwhujLOe+8NLfgMtApoRVEURSlRurpg8OD+Ytl5HC8DrQJ6IIksHIWYXQ2CqqoqDjlkNoMHF0eM1MKhFCWhUIhly5bpEr6KoigJaGuzf91+Z2PiC0K1cAykp8fe4tWBVguHxRhoabH3ozP2hbhyowpoH9i1axe//OUvc90MJYIz23f+/PnMnDlTRbSiKEocHAEdL9sc/ZxWmBiIe/Dh/HViZExhZleDoLu7r791dvZZhjo7C7NPqYD2gXgCursQe0QRED3bNxv1tTXjrShKIeJ4T+NV3HD+agY6Pu5MqvNY4zUQt4COzj4XYoxUQPvAt771LdatW8esWbM44ogjOOGEEzj33HOZOXMmGzZs4OCDD+7d9qabbuL73/8+AOvWreO0007j8MMPZ968ebqQik9Ez/adMWNGoMfTjLeiKIWK1wy0CsKBaMY+Nbq6wDk9JhLQhWJ5KdlJhO4VcTJd6vXHP/4xr7/+OitWrOCZZ57h9NNP5/XXX2fq1KkDViJ0c9FFF3HXXXcxbdo0li5dyv/93//x9NNPZ9QWZeBs36CX8o2V8Z49e3agx1QURfGDWAI6UUa1q8suqKL04cTL8UI7PnLnNRXQllgZaMcLHV3SbsiQ7LfPKyUpoKNXxFm5cqWvIuvII49k6tSpCbdpaWnh+eef55xzzul9rl2NUr5RVVWVNRHrZLyd/hR0xltRFMUPurv7sn1uQTN4cN/rzl9nUpyKwT7CYbt6nlv8RU+IUwHdhyOgo/uT2w8tYuNaXZ3btqZCSQrooDOGw4YN670/ePBgelzTccMRw1lPTw+jRo1ixYoVvh1XyQ3ZzngriqL4gVtAx7NrGDOwwoSWsbO0tvZlnB2iBbNaXvpwqpO0tvY9F33FY/DgwqkJXZIeaL89stXV1TQ3N8d8raamhm3btrFz507a29v55z//CcCIESOYOnUqf/rTnwAwxvDqq69m1A4ldzgZbxXPiqIUCs6lc2NilxRL5ocudbq6oLFxoH/XmL6Bh2ag+3DisHt333PR5eygcAR0SWag/c4Yjh07lmOOOYaDDz6YoUOHUlNT0/taeXk53/3ud5k7dy5Tp07tJ9YffPBBLrnkEq677jo6Ozv55Cc/yaGHHppRWxRFURQlFRzB0tHRP8PstnBEi5vubhhUkqm3gXR3Q0NDf7uB24mpAro/sQR0rD5WKG7WkhTQ4L9H9ve//33c1y677DIuu+yyAc9PnTqVJ554wrc2KIqiKEqqOMKlszN+1jk6A93VpQLaobsbdu2yPmgHt/gr5BJtQeDEwX3B3vFAu18vlAy0/gwURVEUpQSJl4FWC0dqOLFoaOh7zi3+VED3x+lXTiUO6J+Bdv4WSgZaBbSiKIqilCDpZKBVQPfhxMEtCGNloN3LepcysfpN9ICtkFYmVAGtKIqiKCWII1LcgiVaNCeqCV3quKtvOMQS0MZozCB2DKL7WHR/y2dUQCuKoihKCeKIlY4OaGkJs2bNGlpawpqBTpFYcYgW0NHxK2ViDTiiPdDRfuh8JrBJhCJyD3AGsM0Yc3CM1wW4FfggEAI+Z4xZFlR7FEVRlMLEz5VjlT76qiK0cd55n6WhoZkxY4byl788CAyNa+dQS4IllshzL0NdaBnVoEnFwhHth85ngsxA3wucluD1DwDTIreLgDsDbIuiKIpSgDgrx86fP5+ZM2cSCoVy3aSiwRE0q1evp6FhN+FwGw0Nu1m3bkPv627RrGKwP8nioAK6P/EGHM6y54WWgQ5MQBtjFgMNCTY5C7jfWF4ARonIhKDaEyQbN27khBNO4IADDuCggw7i1ltvTfm9K1as4LHHHov7+pQpU9ixY4cfzVQURSk4Yq0cq/iDI+722msfRo8eQ2XlUEaPHkdt7VTACht3RtW57yy7XOqogPZGrBjEqloSb9t8I5d1oPcGNroeb4o8tyV6QxG5CJulpra2NumOn3nGl/b1cvzxiV8fPHgwN998M7Nnz6a5uZnDDz+ck08+mQMPPDDpvlesWMHLL7/MBz/4QX8aqyiKEgvnH5nf/yADxlk5tr6+3peVY5U+HJFiTCX33HMPdXV11NbWUlZW2a/EnUO0v3dwya4kYUkm8jRr359Ytgx3/4q1KmE+k8tJhBLjuZhjWmPM3caYOcaYOePHjw+4Wd6ZMGFC76Is1dXVHHDAAbz33nsDtvvTn/7EwQcfzKGHHsr8+fPp6Ojgu9/9Ln/4wx+YNWsWf/jDH9i5cyennHIKhx12GF/84hcxOsxXFKWEcVaOXbx4MStXrlQPtI84YqWnByorK5k+fTqVlZW9l9EhdgYaCkPgBE0yn25nZ59fXOOVWsbe6XuF4IHO5fhxEzDJ9XgisDlHbfGNDRs2sHz5cubOnTvgtWuvvZZFixax9957s2vXLoYMGcK1117Lyy+/zO233w7YVQuPPfZYvvvd7/Kvf/2Lu+++O9sfQVEUJa/we+VYxRJP0LjzNu6sswro/iSLQXTGvtQpNstLLjPQjwKfEctRQJMxZoB9o5BoaWnhYx/7GD//+c8ZMWLEgNePOeYYPve5z/HrX/+a7ji9Y/HixZx33nkAnH766YwePTrQNiuKoiilSSpZvkQWjlInWQx0wNGHs0hKsm0KaRJhkGXsHgKOB8aJyCbge0A5gDHmLuAxbAm7t7Fl7D4fVFuyQWdnJx/72Mf49Kc/zUc/+tGY29x1110sXbqUf/3rX8yaNYsVK1bE3M5W+Ms+WipKURSldEhFpLi3cQvCUi9ll0rsdMDRR6p9rZDK2AUmoI0xn0ryugEuDer42cQYw4UXXsgBBxzA1772tbjbrVu3jrlz5zJ37lz+8Y9/sHHjRqqrq2lubu7dZv78+Tz44INcc801PP744zQ2NmbjI/SWinIm6qjXUFEUpbjxKuo0o9qHVwGtA47UtimkDLSuROgDzz33HL/73e94+umnmTVrFrNmzYpZmu4b3/gGM2fO5OCDD2b+/PkceuihnHDCCbz55pu9kwi/973vsXjxYmbPns2TTz6ZUtURP9BSUYqiKKVDOstLq4DuI5UMqVs0a7ySb1NoHuiiLEKTrOyc3xx77LEpVct45JFHBjw3ZswYXnrppX7PPfnkk733f/azn2XewBTQUlGKopQixkCOXHM5JR2BogK6D6+fX+OVfJuurj6fdElbOJTCwikVpR5oRVGKHbdoDoVg2LDcticXpCNQ3HkiFYTBbl9spGrhKKSyf2rhUHpxSkVFi+dQKMSyZcsKbgndQm23oij+4xZ/LS19911TUEqKTAVKIQicIFEB7Y1UP797We98RwW0khBncuH8+fOZOXNmrxjNd3Ear92KopQmbtG8e3f/50txvapML5EXgsAJEhXQ3vDa3wohXiqglYTEmlxYCOJUJ0UqiuKugtDU1HffLaDb2/t7e0sFzUBnRjEKwiDx+vkLwQOtAlpJiDO5cNiwYb2TCwtBnMZqt6IopYMxsGtX3+N4ArqjozQFtDsjnw5ali3Y7YuNYoyXTiJUYuJeVCV6cmEhVOzQSZGKUtq0t9sJgmAFsnPfGAiHbb3Z8vLSzUC7BxTpUAgCJ0iKURAGideMck9P/lfIUQGtDCDWoiqzZ8/ufb1QxKkzKVJRlNKgo8OeeCsroa3NCmWwfx07R0eHPTG3t1sBXaoZaHcWPh0K4RJ7kBSjJSFInAVSvNDVZX+j+YpaOJQBpGLRiFexQ1EUJV0ynZwcCkFrq73f1mZvYMVyV5e9uYV0V5cV3G6vdCkQCqUnaNyUekZVM9DeSKe/5XvMVED7xIYNGzjggAP4whe+wEEHHcQpp5xCW1sbK1as4KijjuKQQw7hIx/5CI2NjWzbto3DDz8cgFdffRURoa6uDoB9990355Py1D+sKEq28WNysltAh8N9AtrJRLe394ll9/1Sy0Bnmn2G/Bc3QeM1o2xMaWehVUArCVm7di2XXnopb7zxBqNGjeIvf/kLn/nMZ/jJT37Ca6+9xsyZM/nBD37AHnvsQTgcZvfu3SxZsoQ5c+awZMkS3n33XfbYY4+cZ3Udi8bixYtZuXJlztujKErx48fk5La2vslxbW32pN3dHdvK4fY+l5qAztT/DPkvboImnc+vAtob+R6v4vRA+72W9zPPpLTZ1KlTmTVrFgCHH34469atY9euXRx33HEAfPazn+Wcc84B4H3vex/PPfccixcv5qqrruKJJ57AGMO8efP8bXuaxPIPuycWqqhWFMVP/JicHAr1F8tghXSsrLNmoDNDBbT39+S7IAwSFdBKQioqKnrvl5WVsctdQymKefPm9WadzzrrLH7yk58gIpxxxhlZaKl3Yk0sVBGtKIpf+DE52RHQxvS3byTLQJeaB9qPAYMKaO/vyXdBGBQ9PcUZr+IU0ClmjINm5MiRjB49miVLljBv3jx+97vf9Waj58+fzzXXXMP8+fMZNGgQY8aM4bHHHuOGG27IcatjE+vyqla4UBTFT9KpnNPTA4MG2b+OeG5q6jv5uqtxaAba4ocwKXUBXYwZ1aBId8JqvserOAV0HnHfffdx8cUXEwqF2Gefffjtb38LwJQpUwArpAGOPfZYNm3axOjRo3PV1IQ4l1e3bt3KqFGjqK2tzXWTFEVRaGiAigorop0luXfs6Hu9paXvRBxdzs4Rzsb01YUudrq7/Vm63Ji+wUspks6gK98FYVCk+7nzPV4qoH1iypQpvP76672Pr7jiit77L7zwQsz3OJU3AK666iquuuqq4BqYIVVVVSxdupRZs2bR2NjI3Llz1cahKErOaWmBbdtgjz36ntu5s+++20nnLKAC9q9j8wAriEpBQPspSrq7S1NAO+UP03lfKVKsGegS7PpKutTV1bFr1y5CoVDeLuGtKEpp0dIC27fbTLSDWxi7/c3t7f2Fj1PyLnq7YsZP60Wp2jjStfzkuyAMChXQSsmj9aEVRck3WlutnWDLFu/vdVsZ3GK6mPE7A12KpDvYKtV4FauAVguHkjKFsoS3oiilQXd3X7Y5U19vc3Pm7SkEVEBnjmagvaECOs8xxiAiuW5GVjB+zABJk3RmySuKogSBn1ljP2ojFwIqoDOnWAR0OAyVlcEfp1gFdFFYOCorK9m5c2dOhWW2MMawc+dOKrPR6xVFUfIYZ9VBPwiHS6OcXbEKaGOgsTE7xyoWAb1tW3aOk66Azqf+FYuiyEBPnDiRTZs2sX379lw3JStUVlYyceLEXDdDURQlp/gpoMFmoceN83ef+UaxTiJsa7PVV7JRCTZdD3Q+CuhsVKQt1gx0UQjo8vJypk6dmutmKIqiKFnEb99yc3PxC+hizUC3tNgFdLJBMWSgu7ttzNrbbR31ICnWOtBFYeFQFEVRSotQyH8BXQo+6GIV0M3N/RfNCZJiENDO5NtsTJ5NNwPd05Neve1skVRAi8jRInKHiLwmIttFpE5EHhORS0VkZDYaqSiKoihu6uv936fflpB8pFgFdEtL3zLuQVMMAjoUsn+z0efTFdCQXzGLJqGAFpHHgQXAIuA0YAJwIHANUAn8XUTODLqRiqIoiuImCAHd1eXPMtf5TLF6oB0hGLSA7ulJX9QZkz8xy1YG2pjMRHA+C+hkHujzjTE7op5rAZZFbjeLSFzHmIicBtwKlAELjTE/jnp9JPAAUBtpy03GmN96+wiKoihKKbFrl62a4TfOyb6Yl/Quxgy0e4n2+npb3nDChGD87JmuWNnVBWVl/rQlE7IloDPJPkN+C+iEGegY4jnlbUSkDLgD+AA2a/0pETkwarNLgTeNMYcCx2MF+ZAU2q34SCgUYtmyZYScazqKoih5zI6kZ6b0yfSEn+8Uo4B22xDa2201jl27gjlWpqUO80UQOqf7jg54553gvMYlK6AdROSjIrJWRJpEZLeINItIsukWRwJvG2PeMcZ0AA8DZ0VtY4BqsSugDAcagDwOV/ERCoWYOXMm8+fPZ+bMmSqiFUXJexoagtu3Cujc7CsTYvl4g1qavVgEtJOBBqirgzVrgjlOpp83X+IVi1SrcNwInGmMGWmMGWGMqTbGjEjynr2Bja7HmyLPubkdOADYDKwELjfG5PGcy+Jj1apV1NfX09raSn19PatWrer3umanFUXJJ8LhvuxZEBT7YirFnoF2UAGduA3RA8Wg4lXyGWig3hjzlsd9x1pXO3p6xqnACmAvYBZwu4gMEOYicpGIvCwiL5fKYinZYsaMGdTU1DBs2DBqamqYMWNG72uanVYUJd8IerW5Ys9AF+MkwlgCuqMjmO+yGAShO/vsEMScAiiOeMUjWRWOj4rIR4GXReQPIvIp57nI84nYBExyPZ6IzTS7+TzwiLG8DawHZkRtgzHmbmPMHGPMnPHjxyf9UErqVFVVsXLlShYvXszKlSupqqrqfS1ZdlpRFCXbBGnfgOIW0N3d/lYZyQcB3dUVX/wFkVUtBkEYayJkZ2cw32cxxCseyapwfMh1PwSc4npsgEcSvPclYJqITAXeAz4JnBu1TR3wfmCJiNQA+wPvpNBuxUeqqqqYPXv2gOed7HR9ff2A7LSiKEq2MUYz0JngtxjJBwGdqI5xSwuMGuXv8YrBwhFvwBEOw7Bh/h6rZAW0Mebz6e7YGNMlIl/C1pAuA+4xxrwhIhdHXr8L+CFwr4isxFo+vplK5Q8lOzjZ6VWrVjFjxox+2WlFURQvdHdnXr4rFAr+hKoCOnXyXUDnYwY6H2IWrxRfEAK6mCcRJstAAyAi44EvAFPc7zHGXJDofcaYx4DHop67y3V/M/2z2kqeES87rSiK4oWmJhgzJvN9BE0xC2i/xVs+iMFCE9D5IAgTCWi/KYYBRzxSEtDA34ElwFNAHn8cRVEUJR9pbMxcQO9OVjzVB4pZQPst3oyx9YMHpVqOIAASieTWVttGiVXSIE2KQRAmsnD4TTEMOOKRqoCuMsZ8M9CWKJ4IhUJqrVAUpWBoa7Mn6MrK9PehGejMCEKMdHfnTkAbk1hAd3fbPuOnD7oYBHQhZaDzWUCn2u3/KSIfDLQlSspoeTlFUQqNjo7MLql3dsYuv+U3KqC9kUtB2NWVfAW9nTv9PV6mVUxyLQiNiT8RMggBXcwe6GRl7JwVBy/Hiug2DysRKgGh5eUURSk0MhXQ2cg+gxWEQS1rnGuKUUAnw8+yh34MrnKdgW5vjz8IyMcMdK7jlYhkFo4xxpgiHo8XJlpeTlGUQiNTAZ3NNbQ6OjKzmuQr+ZhhDPrYra1WNFZUZH48PwR0rjOq8ewb0FcLOtNqOQ5+Zez99rH7RTILx/9E5G8icrGITMlGg5TkJFr8RFEUJd9wsrqJKiYk4p13oL7e3zYlolhtHEFYYPJdQIN/No5iyEAnG0T5Ocjy63eU65jFI6GANsbMwdo3AH4uIi+JyM9E5BQR8WE8p6SLU15OxbOiKPmO47l06ji//Xbq7921C+rqAmlWXFRAp04uBXSq35Nf1VsyXUQFci8GE2Wgwd/Sf371jVzHLB5JJxEaY941xtxljPkw8D7gH8BJ2NUD/xVw+xRFUZQCxxEexsArr8CmTclP5A7ZtG44FKOANib1mHuhEDLQ6V75iMavDLSfy6l7JVmGubnZv2P59TvKte0lHqmWsQMg4od+OnJDRPYOolGKoihK8eDO3DlZ0KYm2GOP5O/dkYO1aYtRQIfDwQi3QhDQoZA/Plo/LQmDPakv/0g2iFIBnToplbETkWNE5N8iskZE3nFuxpj3gm6goiiKUtjEOpGmUlWjqSmYrGkysi2gu7uDmeDnJqgSgIUgoHt6/LEmFIMgTHbs5mb/BlrFEK9EpDoG+g3wVeAVdCVCRVEUxQOxvKOpCOhc2Dcguyfsnh5YudKK6MMOC25RkmIU0F4EWksLDB+eveMlIp9L/3V3277ix/SqYohXIlIV0E3GmMcDbYmiKIpSlMQS0K2t9mQe61L29u2wYYO/E5q8kE1RuG6dnSgJdnLl9OnBHKcYBbSXY+dTBjqXgjCVY+/e7Y+A9qtvFGQGWkRmR+7+V0R+CjwC9F5QM8YsC7BtiqIoShEQS3gYA1u3wrBhdqllx5/a2gpvvZXbxUyydcJub4ctW/oeb94MY8bAuHH+Hysoi0ihCGg/JhIWgyUhFQHd3Ax77pn5sYohXolIloG+OerxHNd9A5zob3MURVGUYiNe+S+nnN1ee9nMa1sbvP567lcCzNYJu65u4GddvRpGjIAhQ/w9VqlnoPNJQOezhQP8q1riR9k/KFALhzHmhGw1RFEURSlOkp1IN2+2QnL79vw4WWZDFHZ19c8+O3R22kVjJk3y93jFKKC9CNrOzsxWJOzqKvy6xj09qU0Q9Ms65Vefy9cMdMLpCiKyU0T+JSJXi8jxIqKrdiiKoiieSCUTtXVrfohnyM4Ju7k5fqbdr5XzHDo6gsvqF0oGGjJbUMWvrCzkLmapHrerK/Nse0+PfxnoghTQwFTgVqAcuArYGFmN8FYR+XjgrVMURVEKmu7u/BHGqZKNE3YiQdbU5G/M/BIyscjVd2tM4QroXMXMy3FDocyO5Wfd8Xz9/5FsKe/dxpgnjTHfN8acAtQC9wGnAw9lo4GKoihK4ZKLOs6Zko3V4hIJMmOgsdG/YwUpoHt6ciNw0jlmvgjoXGVUvcQsU/uFn5NWCzIDLSJ7icjZInKLiCwBngD2A64B9slGAxUlVUKhEMuWLSOU6dBZUQKgVPtnIQpoCP6knUyQ+WnjCPo7yIXAScdi0NKS/sDIzxX6cpVR9fI9ZSqg/fTc56uATlaFYxOwDPgZ8C1jTIDjWEVJn1AoxMyZM6mvr6empoaVK1dS5UchS0XxgVLun0FmP4OkqwvKy4PZd09P8kvkO3f6s/w0BP8ddHWlPzkvk2N6pbvbTpDzuqBKKt+X13bkgmxaOPwU0AVp4QCOAX4PfAT4n4j8RUSuiCztneWfi6LEZ9WqVdTX19Pa2kp9fT2rVq3KdZOKnlLNqKZDKfdPzUAPJBRKngnt6ICGBn+Olw0BnW3SPWY6No5MMtexyPdJhKAWjlRI5oH+nzHmFmPM2caYw4GvYxdSuQ9IYSFWRckOM2bMoKamhmHDhlFTU8OMGTNy3aSixsmozp8/n5kzZ6qITkIp908V0ANJ1U8bq8xdOqiA7iNdAe0nhZCBVgtHcpIu5S0iM4D3RW7HAKOB/wF3Bds0RUmdqqoqVq5cyapVq5gxY0bJXB7PFbEyqrNnz07+xhKllPunCuiBpCrIdu604jfTRVXUA91HUxqpv1IU0N3dmdXN9jMDbYxtT1mZf/v0g2RLee8AtgDPA0uAHxtj3s5GwxTFK1VVVSrisoSTUXU8vaWUUU2XUu2fKqAHkqogMwa2bYOJEzM7nmag+2hrs+Lbi7/d7wtshWDhABurdAR0R4f/g4SCE9DAvsaYJhEZY4zp58YSkanGmPUBtk1RlDyllDOqijdUQA/Ey0pvjY0qoP0+ZlMTjBuX+vZ+r+JYCBlosAOHUaO8H8fP7LNDV5f/y9tnSjIPtHOx4x8iMsJ5XkQOBP4RZMMURclvnIyqimclHsZkvqJZrghKFHZ0eItJOpYDN11dwa1C6D5GtsnkmF580I6VwU/yPQMdDodZs2YN9fXpjRyCmBKTjz7opB7oCD/CiujTgf2B+4FPB9YqRfFAKBTSTKii5CHt7cEvSBIUQZ2wvWSfnXa0tHgvveaQjSsAhSagvQxKghCDPT3+lSj0QioZ6HA4zAUXXEBjYyNjxlSydu2Dns+rXvt4KuRjKbtkZewAMMb8C1sL+kngXuDDxpgVyd4nIqeJyGoReVtEvhVnm+NFZIWIvCEi/y/1piuKVoNQlHymUO0bENwJOx1xkUkWOht1uHMhoDP5fpqbUx/Y+W3fcMjX1Rvr6upobGwkHG6joSHM6697L7np96RLKMAMtIj8AnB3sxHAO8CXRQRjzGUJ3lsG3AGcjF2Q5SURedQY86Zrm1HAL4HTjDF1IrJH2p9EKUm0GoSi5C9+COhwOExdXR21tbVUVlZmvsMUyZcMNFgBvffe6R2vWAV0Jsfs6bEiesSI5NsGlZPp7ITBqXoAfCKVmNXW1jJ69GgaG2H06NHstZf3CeJBZKCDtiGlQ7Kv7+Wox6942PeRwNvGmHcARORh4CzgTdc25wKPGGPqAIwx2zzsX1G0GoSi5DGZijf35eTRo0dzzz33ZE1E55OA3rUr/eMVq4DONIPb0JCagA4qA52vMausrOSee+7pHbR2dXn7vXV2Fu7qo15JKKCNMfdlsO+9gY2ux5uAuVHbTAfKReQZoBq41RhzfwbHVEoMrQahKPlLphlo9+Xkxkb7ePr06f40Lgn5JKA7OtL3QWfDRpOLiaJdXZldndi+HaZMSb5dkBnobJNqn66srOz9nXldeCaI7HO+kszC8Q/gbuAJY0xn1Gv7AJ8DNhhj7on19hjPRbuOBgOHA+8HhmKXC3/BGLMm6lgXAReBvbygKG5Ktb6uouQ7mYqE6MvJ2fz/H4SADofTz5xu25aegA6ipFg0uRCDra2ZXZ1obbXiOFnOJagMdC5ilk7fUwEdn2QWji8AXwN+LiINwHagEpgKvA3cboz5e5z3bgImuR5PBDbH2GaHMaYVaBWRxcChQD8BbYy5GyvkmTNnToHO6VYURSktMvUtRl9OLnQPdCbZzPp62Gcfb+/p6bF1pIOmu9sea1BKZQn84Z13Mr86sX07TJ4c//WOjuCuROSrhSOarq7UBhoOQUwgzFeSWTi2AlcCV4rIFGAC0AasMcYk+1fwEjBNRKYC7wGfxHqe3fwduF1EBgNDsBaPn3n9EIqiKEr+4UelAffl5GzS1eV/qbFMssHt7dYL7WVhi8bG7FV76OxMf9lnr/T0wKRJmV+dSCagt2zJoJFJyHYGurs7/ZKSu3enLqA1Ax2FiHwJeMAYsyHVHRtjuiLvWwSUAfcYY94QkYsjr99ljHlLRJ4AXgN6gIXGmNe9fghFURQl/8jH2q1e6O72t1JCpn7kbdu8CegdOzI7nheyKaC7uvy5OtHSYi0aQ4cOfK25GTZsyLyt8ciFgE6X3bthzz2Tb+fULC8VUv3XsCfwsogsA+4BFhmTfCxjjHkMeCzqubuiHv8U+GmK7VAURVEKhHwsPeUFv0uNZSqgd+yAVJPxxsDOnZkdzwvZFISOGPTj6sSOHTBp0sDn16wJdhGgbFs4srFy47Zthf+b90KqC6lcA0wDfoOdOLhWRH4kIvsG2DZFURSlgCn0DLTf5bgyFdAdHamLmebm7JYTy6aA9lN8bt8+8Ln2dhu/ICmkDHRra2rvD9Lyko+kbPmPZJy3Rm5dwGjgzyJyY0BtUxRFUQqY6GxUOBxmzZo1hFMwA3vZNij8Fjl+lJRL1ZYRtACMJhcZaD/YvXvg95KNzH22M9CZxMyY5P2ptTX7fS7XpOqBvgz4LLADWAh8wxjTKSKDgLXYiYaKoiiK0ov7pO1lUZSmpiYWLFhAc3MzY8aMyeoCKm78FoV+jAV27kytGkcxC2i/xeeGDTB6NIwdC2Vl2RHQ2c5AZxqz3bsT+++3bs1s/4VIqhnoccBHjTGnGmP+5NSENsb0AGcE1jolcEKhEMuWLSMUVLV4pejQPqOkijsD3X9RlEbq6upiviccDrNgwQJ27NhOe3uYhoaGuNsGjZ8WiM5Of/yhra2p1SbO9mSufM5AJ7uasWULvPkmvPWW3Xc2Sv8VkoUDbBnFRJ7wWFaYYifV6RE/BxCRMa7nmo0xncaYt3xvlZIVQqEQM2fO7F0Ge+XKlbqSn5IQ7TOKF9wn7VQXRamrq6PZlT6trq7O2QJafoocP1cE3LIlcRa6pyf75cTyVUB7ufKxYwe8/np2JsIFUSYxEZkK6NZW2LwZ9t574GstLdlZsCffSDUDvQy7iMoarGVjO7BeRJaJyOFBNU4JllWrVlFfX09rayv19fWsWrUq101S8hztM0qq9PT0z1g5ZcduvfXWhCKmtraWMWPGUFFRybhx41m4cGFO7BuQ3wI6kchrbQ22gkQs8tXCkeqVD4dsZJ8dsumD9sM3vmFD7DaXYvYZUs9APwH81RizCEBETgFOA/4I/BK7AIpSYMyYMYOamprebOKMGTNy3SQlz9E+o6RKLIGXStmxXK4+GI2fFg4/BXRnpxUtNTWxX89FLd58zUD7vRx8OBz2rW92dkJ5eUa7SBk/BHRnp81CR4dQBXRi5hhjLnYeGGOeFJEfGWO+JiJZKp2u+E1VVRUrV65k1apVzJgxQy/FK0nRPqOkSiYn7FytPhiNn6LQ70vcmzbBHnvEtgAUu4D2krn1c0DmxQ6SCtnMQPt1rM2bbd1sEairs6tjlup0mFQtHA0i8k0RmRy5XQk0ikgZdgVBpUCpqqpi9uzZRSOEdIJb8BRbn1GCoRgWVMhXCwfYKhvr1g18vqsLmpr8PVYq5GsGGvoGZJlmjL3aQZKRzzGLRzgMDQ3w3nvwzjv2fqmSagb6XOB7wN8ij5+NPFcGfNz/ZimKd3SCm6LkD4W+iArkt4AGm4UePrxvmeUNG2xWMBeDl54e+52XlQV/rGzXUHbw2w5SaB5oh/XrSzfr7CapgI5kmX9ujDkvziZv+9skRUmPWBPcZs+enetmKUpJUgwZ6J4eK3L8WM47CAENsHYtjBxp2/nuu9mfPOimszM7AjpXgzO//fmFmIGG3FiE8pGk/xaMMd0iMl5EhhhjsrgwqKJ4Qye4KUr+UAwZaLAiJ1MBbUxwZb66u2394uiqJ7mgsxOyMeczVxlo8NefX6gCWrGk+m9hA/CciDwK9FaXNMbcEkSjFCUddIJbYRAKhfQ7KgGK5YTd0QFDh2a2j3A4WHG7e3dw+/ZCtgRhsfStQrVwKJZUBfTmyG0QUB1ccxQlM5wJbkp+oj710qEYLBzgjyhMZeXAYsDPsn+JyGUG2k80A13YpCSgjTE/ABCRYcaYLK9vpChKsaA+9dKhWE7YKqBTJ1ur0RVL38rm6n3FMujIJ1IqYyciR4vIm8BbkceHisgvA22ZoihFh+NTHzZsmPrUi5xiyUD7kVUtFQGdjcoMxqiATodiiVk+kWod6J8DpwI7AYwxrwLzA2qToihFiuNTX7x4sdo3ipxiOWHnUwY6HA6zZs0awtlUXh7IhoAuln4FdnCWrYFmMcUtX0h5brExZqP0X/JIvw5FUTyjPvXcYEzsVeuCIghh4OcyyqniRwbaD73r9yp4QZCNTHuxCcFwGILOIxRbzPKFVAX0RhF5H2BEZAhwGRE7h6IoipL/ZFtA+33SzpWAzBcLR/9V8OzjfFju3E13t613XVER3DGKzcurArpwSdXCcTFwKbA3sAmYFXmsKIqiFADZrhHs90k70TLKQVobMt1le7s/2XhnFbzKyqG+rIIXFEFnoYtNDGbDjZMoZvluC8pnUq3CsQP4dMBtUZKg9XOVQkb7b24xRLLQWTqe3xaOeMsoNzU1sWDBApqbmxkzZozvmen29syy934JSr9XwQuKUAhGjQpu/8WYgQ6aeDErBFtQPpOSgBaR8cAXgCnu9xhjLgimWUo0Wj9XKWTi9V8V1dklmwLa70xhLAEZDodZsGABO3ZsB6ChocF3a4Mx1saRri3Bz4ysn6vgBUXQEwmLTUBn0zcePYegEGxB+UyqHui/A0uAp9DJgzlB6+cqhUys/jtjxgwdFGaZHpO6by/jYwUwiTBaQNbV1dHc3Nz7uLq6OhBrQya+3lK7Mh60ICw2AZ0tC0esbHO8qzpKaqQqoKuMMd8MtCVKQpz6uY7Y0Pq5SiERq//qoDD7ZNMHnQ2vam1tLWPGjKGhoYHq6moWLlwYyCXo9vb031tqArpYM9BBVYDJloCOl20uBFtQvpKqgP6niHzQGPNYoK1R4uLUz9XL3UohEqv/6qAw+2RTQGejvm22fMGZiJxUxHcuyvMFRTgcbMWXXAjoIL3CnZ1W4JaV+bK7mHR3x59DUAi2oHwlVQF9OfBtEekAOrE2OmOMGRFYy0qYeL5QrZ+rFDLR/VcHhdmn2DLQkB0BEGQGutgmchljReGQIcHsPxdVOIL2CofDMGyYb7sbQHd34UxCLSRStcONBD4H3BARzQcBJwfVqFLGmWw1f/58Zs6cSSgbSzspSo5wRLWK5/6EQiGWLVvm++/fZHF57WIqN5ZuBtqY5OI7UXm+QsWP2tnxyEUGOugSgkHbOJyYOYPNWOJZy9l5J9UM9B1AD3AicC3QDPwFOCLRm0TkNOBWoAxYaIz5cZztjgBeAD5hjPlzim0qStQXqiilTZAVd4rNwpEt0s1Ad3Qkj3muJnIFaRspNgEddPY2yHhB7MGs+/sHiuoqSLZIVUDPNcbMFpHlAMaYxsiKhHERkTKs8D4Zu/jKSyLyqDHmzRjb/QRY5Ln1RYj6QpVCR0vTZUaQg+hitHBkg3QFdCrJvFxcWg/aNlJsAhqCtQplW0BHf//f/va3A7aoFI/H302qArozInQN9NaFTpZfOBJ42xjzTuQ9DwNnAW9GbfdlUshmlwrqC1UKGa1Xnjm1tbWMGjUKY4zvg+ieEslA+33C7uiwn2eQxxqAqQrvbE/kCtrTm4lnPBnFVsYOsi+go79/ILCrIMXm8XeTqoC+DfgrsIeIXA+cDVyT5D17AxtdjzcBc90biMjewEew1hAV0BF0sqCSDfzMFDv7amtrUwtSBoRCIebOndt7slm6dKmvA5BsZaB7eoI/VjyRHNQJu70dhg712saMDxsIQdtGghSExXRlwyHIAQcMjFn09z9t2rTAroIU82ItqS7l/aCIvAK8H1uB48PGmLeSvC1WEZvof6k/B75pjOmWBDVvROQi4CJAC30rig/4mSl272v8+PGMHz8eQC1IaeDYN0KhECLC6tWrqaur8+1qVDYFdJAkEslBnbDb2rwL6KCFUboUsqc33Qx0Nm0ES5dCXR2cc479LTQ3w8iR8bfPdgY63vcfhLCNN1h76y343//g85+H+nr4/e/hkku8/8ZySaoZaIwxq4BVHva9CZjkejwR2By1zRzg4Yh4Hgd8UES6jDF/izr23cDdAHPmzMniRUhFKU789Nm69wWwaNEihg4dWtQWpKB83u45EOPHj+e8885j+/btvtlhsiWgg84SJhLJQWVXGxthzBhv78nXDDQUrqc3nb6VDRvBv/9txd/RR8Ott8LWrTBvHjz9NNx/vxWI8fpPLiYRZss2FE+s33MPvPwyHHigjd3TT8O0aXDGGfDCC3D44cGVQvSLlAV0GrwETBORqcB7wCeBc90bGGOmOvdF5F7gn9HiWVEU//Fzsmr0vg477LCiFc4QrM/bPQeira2NU089ldbWVjZv3szy5cs55phjMtp/sQjoRCI5qOzqzp2w777e3pOvGWiHVLOyjY1QVWWXM29stP0o0WAiqM/d1ZVeHw7aRtDRAT//ub1/6aWwZYu9/5e/WHHY3g5PPQUf/3j89wdJLn3jsfrY9u3wyiv29TvugPfes/f/+U/bx264AS6+GD7xiRw1OkUCE9DGmC4R+RK2ukYZcI8x5g0RuTjy+l1BHVtRskkhVp3wc7JqqU18DbrUpDMHIhQKMX78eEKhEO3t7Zx33nm88cYbmcXXBL/qGQRv4UgmkoPIroVCNqPsRY/ncwY6Vla2p6eSqipobYVvfAMuvBAOOcT+Pfpo+9xVV1nBt3Bh/NUGgxKE6QrBoD3fL77Yt4T5zTfD2LF2sPXnSFHeMWPgiSespSNWzHp67OIz5eW+NquXXPnG42X+n3zSDoTOPddm5isr7eDi/vvhttvse594wj4X1IqWfuBxTrE3jDGPGWOmG2P2NcZcH3nurlji2RjzuVKvAR2LoBZUUPyhkBe+8XMRk1JaEMXJuA8bNizt7H0qv+uqqioeeOABKisrMcawfft2Vq3y4qKLTWdnxrvIi2MkWhQiKHbuTH3bzs78rhjhzso2NDTw4IMr+dCHDCtXwuLF1qP68MPWz9vYaC+xv/46rFoF77wDa9bE33dPTzCfPV0h6Ay4br31Vl/sG9GLjjzzDIwYAWefbT/7GWfARz5itz34YPjsZ2H9eli7Nv4+89E3nimxFgnq6oJFi+zA7POfhxkz4NOftrEbMsQO3j74QdiwIXEfyweCtHAoGaIlwfIfXfim9Mg04+7ld33YYYcxYcIEX+vCZ+Nkmg0BnQt27oS9905t26amYNuSKU5WtqHB0NnZye9/v4ueHuGhh7ppb7eXKF55xWZWhwyx2fTrr7dXLwYNsiJo//3j77+jAwb7rDAy6bt+XZWIzqreeec9PP98JSeeCBdcYH3QH/uYtbyceSacdhpMmgS3327tHPGa0NERzHLexuQuAx2d+e/unsxFF8HGjXZQMXgw3Hln3/bnn2//d5xzjrW8PPFE4j6WawLNQCuZEUucKfmFH9lIpfDIJOPu5XftiPXFixf7NoAulgy0XzQ1pe6r9SKKd+9Orz3ZorKykoUL7+GLX/w2gwdX0dNzNBDmhRcGsXw5nHqq3e7NN+FDH4LaWjsx7uij4Zhj4D//Sfw9B+GDzoeMfnRW9Y9/bKKtDY4/3ornCy6A6mo70PjqV+GAA2D4cJuJfv31+PsNyjeey99idOb/17+uoLERrrsO3v/+gdufd57NSg8fDscea696ZHPxJ6+ogM5jVJzlP0EIHKW48fq79tseUyoZaHfmbft2+OMfbbvWr4cvfhFWrLD3P/5x+NnPUttnd7ctZ5cK+Z6BBnjssUpuv30+ZWVXAMMZOfJeBg2ysTvvPFsJAeDkk20mFaywPvVUO0B4+eX4+w7CkpAPAtrJqlZWDmXo0JN5+OE9mDULDjss8fumT4d16+J/hnzzjfuFk/kfPLiSt96ywjmVudCzZ9s+tmlT8G1MF7Vw5DHxLhX7MWmtECe+5Su68I3ihVxPuizmDPSuXWE2bdrIvvtO4vbbK1m6FH78Yzuxy/Hurl1r//7wh3ayV0cH/OMf8L73wVFHJT9GS0vyWrXG2Nq/+c5zz0FPj9DWdhzV1V08+ODn+PWvhfp6mDgRFiywGdTp02HKFBg3zsapo8NO7lq71makY1GsAtrJqq5bt5ErrtiP6dOl19qSiGnT7O/i3XdjV3MpVgHtsG6dtQEdeGBq2zvbvfWWtcDkIyqg85yqqipmzJjRe7IFMvZF+72IhgpxBbQveCGXg65slFZLJqCDWNRi164w55xTT1fXWKqqFhMKnUJ5uc029/TA3LnWtwtw0UVw773Q0ADf/radLPfTn9ratIkWvAArjCNrBSXcJpdLmadCW5u1FHzoQ7BtGxx22GCGDRvMV77St83++/d5UCsqbCYabNWECRPsRK94BFGBJBde3lh9tbKykp6eaYTDdgJcKv/upk2zf9esiS2gi9HC4ebNN+3fgw5Kbfs99ghTUTGE11/v4ZRT8lOq5merlF6ixe7999+f8aQ1vya+Fcokx6CEnQrGPgqlLyjB15yFxFmvgZOw7qS+vj5tMe1UfLj55jBdXZOBTYRCp3Dwwa187WvD+OY37WXjL3zB1pwdNQo+9SmYPNlaOE4+GfbZx66C9rOfwfe+l7h0VktL8jblu/8ZrIWlqwuOO67PquGFyZMTC+ggMvDZzqYmWoDF8TMffHBq+5o40V65WLsWPvCBga8Xewb69dftFYw99ki+bTgc5gtfuIDOzm/yxBPD+b//2xvIXrWdVFEBnedEi10g4wUw/FpEoxAqUAQl7FQw9qcQ+oJiyYaATpT16l8+zbBgwQJaWlrSWiGutRW+/GUrhGEUw4Y9SlfXQiorT+P737+AsWNtdnlQZLbPl7/c9973vc/eAPbbDz73OVvb+L//hRNPjH/MVAR0IfifX3rJZpVnzkzv/VOm2H3Eqyve0mIHN4N8nGnlhxj0cvUj0QIsK1faiZWjRqV23EGDbD+LV5otqJrh+ZSBPuig1Oo6O3Hv6XmDnp5zWLduA4cdNi34RnpEJxHmOdETjg477LCMJ635NfGtECY5BlXJRCuk9CdZX9B65n3kOha5FtDuSVjV1dU0Nzf3qxPrhTvvtJ7S88+3FQ8efvgUbrvtJh5++ALGjrXiKFUB98lPWlH4yCOJt+voSB7DQshAv/wyzJqV/nLJkydbQeusIhdNT4//WehMBbSTUb788su54IILeus4x8PdV90LsPT02Iyq18HHtGnWCxzLitLeXry+8Z07bQWXVP3PTtzLy9cB5XR0+LvwjV9oBjrPiTfhKNPsnh8ezFxPhkoFP5eszsZ+C5VEfUGz9X3kQyxy7YF2ryJYU1PDJZdc0nuJ3MsKcUuWwL/+ZYXvBRf07j3tWr9lZbY6wEMP2ezp8OHxt21uthMQYxEO5/8S3itW2Fq8H/1o+vuYMsX+3bDBZmJjsXt3ck+5FzIVg16X9I634uW779o+kKp9w2HaNNs/Nm2yA5BoEvWrdMmHDLRXu4sT91df3cy3vgXr1lUE17gM0Ax0AZDPq7zlc9sguDJzWr5uIPH6gmbr+8iHWHR2Bltbtacn+WQvp7TVyJEj01oh7t//hh/8wFaH+PznfWh0hDlzbPtXrEi83dat8WOY79nnnh6bud9jj9he3FRxRHMiH7TfVpZMJxHGyygnItaKlytX2r9eM9BTp9q/8S60FINvPBbLl1v/t5exbWVlJXPn7sOoUYn7WC7RDLRS9ARV8UDL16VGJtn6YpuomQ9XLoyxIjrdS/fJSDXj5faieskaP/ss3HCDtR/88If+fo4DD7QVJl55xS7kEI/t22H1arsMcTT57n9++mnrw/32t60HOl2GDk1eicPvwUSmFod4GWWvvPyynRC3117e3udsv3lz7NeDEND5kIFevtwu3Z3OypQTJ+ZvLWgV0IqiBEq6Vp98sDv4Tb7Ynjo6ciugE1U3SMT69fCjH9lM1g03ZCYAYzFkCBx6aOIFQhy2brUCMtqikO8Z6Mcft3V1Tzop831NmWLtDPHo6LCWBZ8qFcYV0F4mBma6pHc4DC++aBeWSWVCnJvqanvLpoDOdQZ6xw6bcT/99PTeP3Ginayaj6iFQ1GUtEl1QpwXq4+zz+XLl+fc7hAE7ljkakJhkBMJUxHQ0cshpzJ5cPt2+Na3bObzhz/MXDyHw2HWrFkzYCLZnDk247V1a/J9RG/T3Z1alY5c0dFh/ahHHulPdYzJk62XOpG1wq+u3dUV+zjOYOyyy77Peef9KOnEwEx56SXrcZ8/P73377VXfAHtDDj8JJ6A3rgRvvvd/n043m8iHZx9vfii/WeTbKXGeEyaZCch5uPvSjPQiuKBYrMUZEIqGWIv8QqFQixfvpzzzjuP7du3M378eMZHVqwoxomafmTY3fEFYt6Ptc8gJ7nFEtAtLXZFwAsvtD5Qx4va2EivFzVRFnHrViueW1rg5z9PvpBJMhJlwGfNstu8/jrsuWfi/WzfbieGiVhBsmtXsP7yTHnrLSvSnM+YKVOm2O/7vffiTyRMdenzZMQb9NXV1dHQ0EZ7+89pb5/EAw9sZ8GC4GoGL14MI0bYKxXJcPdpp601Nfuybl38ZQubm/3L2EP8Ae1dd8Hzz0Njo/1NdXamd1UoFu7fl8iVDB9+PPvu6zFdH6GmpgMYwhtvtLHvvkmWAM0yKqDzFBVq+UcmgqcYv89ktZ+9xMvZdvPmzbS3t2MiKmTRokUMHTq0qOLmkGntbHd8nYGGM/Bw7seLe7Yz0M8+a5eNbm2FW24Z6EUFYp68Ozrgj3+EBx6wIvWGG/pWdMuERNUYpkyxVo7Vq5PbHLq67CXqHTvsan75zooVNo5exV88IZVKJQ6/MtDx+mxtbS2DBn0VmER5+ToefHAaq1fbGt8f/rB3m0UiOjvhf/+z2ed4S3c7cXNXmBkZ8fk0NTVRVnYx4fCZdHdLzH20tmY+QHQTKwP9+utWPM+aZfvEz34GRx+9xVOFkkS4f19wILNmtTBoUHW/bVLpX+FwmLvu+i5wIxdccD11dVfl1XlABXQeUozez2LAq+BxRHNtbS1z584tuu8z2YQ4L/Fytg2Hw4gIQ4cO7a17XgyxikU6EwrdAzF3fLu7uxER2tra+t2PF/dsC+jnn7dCZsUK+Mtf7CXZ44+vZP/97Ql6zZo1/U7e775bx86d07njDnu5e948+NKXUlvFLBFucePOgNfU1LBmzZrek/m0afEXvIhm9ercLDGdDsuX28U8qqsTb5eqR91diSOepSHoDPQf/lBJW9t8zjhjJxddNImHH7aDtdtusxVHPvYxf44PsGyZFbjz5sV+3R234cOH09zcTHt7uPc32dHRzuDB79DdLWzbZj300fjp5urqGnhFxBj49a9h9Gg7n+Duu+Fvf4N//Wsqo0efDPzbc0lJh+jf186dU+joqOH44zsHbJdK/6qrq6O5eTXQw+7d4/JugS4V0HlIoa3qVozZ1Vh4ETzuQdCoUaNobGwkFAoVxPeZKskmxNXW1jJq1CiMMUnj5d52jz324IEHHhggnoutn3mdUBg9sF66dGlvf0yUgY4V92wK6PZ26xs9/XR49VW7nDbA//t/8JvfWC/uhAm1kRPuQQwadCq/+MV+vPGG9dj+9KfWl5wp8ZYQj65Ffc899zB9eiWPPx5/lT03hSKe29vtanAf+UjybaMz9GvXru19bdq0aVRWVhIOh9m4sY6amv3YsCG+odovAR3LdvTnP8O999oJfV/96lgGDbJLti9YAFdfDb/6lc2y7ruvP21YsgSqqmIvfR4Oh1myZAkNDQ20t4cxxlBdXY2I9MtAV1W10tBgB4bZENDRLF4Mr70GX/mKnU9w+eW2lvo3vgEVFV/hiivOYPJk7xVKYv2+7rmnk3/8wzBvXnm/beNdAYrOStfW1jJmzDC2bNlOefmMvLPxqYDOQ/Kh1FWqRF9GjiV8igUvgsc9CDLGMHr0aEQk779Pr8Qr5RcKhZg7d27vP9OlS5cmtG+4t33ppZcYN25c7wQ7J17RV2Ugsc83G2Qq6r2UQoweWNfV1fXrj842ufZAR5+0ly2zE6Pmz4ezzrJZ6JoaO4Hpmmvg7bdh2LBK3v/++3joocGUlUFbm3DJJXahj3RKX8Ui+qRdX1/P9OnTB2S/6+rq2H//6fz1r7Z6gFO7t9B57jk7uIkl/qJxe9RHjhzJddddx7aIR6WmpoZf/epXvYMOY65n/fpZxKtJEA77s6R39KDPGPjDH2D2bLjiiv77F4Err7Se+x/+0ArpTCeddndbK9JRRw2sYOOIx4aGBjo7O6moqGTMmDG9gzS3B7qyspbPfhaWL6/noINGDhCqfg04YOBgtqPDxmLqVDjjjL7na2rgnHPgllsG0dY2PS0Pdqzf15o10zngABgzpv+20XMgnP/p119/PU1NTf2y0vfccw9f+1o3gwefTFVVktFsllEBnYfkS6mrVHCf1EOhECeffDITJkwoGptCNKkKnuhB0NKlS6mrq+sVN44wLMYYQV+/CIVCiAh1dXWMGzcu5W2rqqr6Ceb777+/n3hcvnw5n/nMZ9i6dSujR49mxYoVcfcfFNm2WsUaWEf3x3j3o8lmBvq552DYMJsJLC+3FgKw/tS//c36cXfuhAceKOeQQ+D66xOvApgusSYuxnveEVuLF29lwoRRaU+mSoXubuuhrqz0d9U+Nz09cP/9NqOfioB2e9Tb29v5+te/DlgvQGNjIy+++GKvWCorW8emTbPiZuuNsSI6059GdJ/dvNnG7bzzYh931Cg78fTKK+3CMV/5SmbHX7nS1viOZVVxxGN7e5iKikq+/vWvM2/ePCorK3uzz2D72urVa4EDePjh/8dTTz3C1Vdf3ZvVB9sf2tv9KdEYPZh9/HHYsgVuumlgzE45Be65x845SGeSafTvaNiwWlatslcDoom1GumOHTvo7OwETL+sdGVlJfvvD//5j+1LfnraM0UFdJ5SKIt0OCd1Z/JXIt9lKRFrEORkVUvB3+7lKkqsbaOzrUC/bQC2bt1KKBQiFAoxa9Ys1qxZk9VYZttq5efAuqMjuJORW+i0tsJ//2uXyC7vfxWXSy+1l96nT7fveeEFm93zu7azQ7xFNGI9P25cGBHD7373IosWPZxRRYJ4tLTYyZF//av9/IMHw/vfbzOBflkOHJ55xtZr/s53kltSHJx6yeFwmDFjxvT+DkeNGsWYMWN6hWFFxQ6amgbx3HPrOfLICTHjFAr5L6Cd1SITTYg84gj4+MetKDziCNsP02XxYpt5PvLIga9Fi0dHPLtxstQ7duwAFtLdvQf19fVcccUVjB07tl8fa2vz53cQPZhdudJOUIw1iKqosPae3/7WXjXy+q8s+nf0+OP2s7zvffG3d18B6uzsAIQhQyoGeLAnTrTVSbZts9nyfEHrQCsZ4ZzUn3rqKSZPnkxVVRWjRo1KawJCsRGr9nE+LOWcCV7qPqe61HmsbR1RPWzYsN7JhO5tDjvsMEaPHt27j8bGxqzHMrqNmVpzUomte2CdyvcQCoV47rnneO655+jp7nE9H+Z//1seSP1p9yXoRYuseProRwduN3gw7L+/FfEVFXDcccGJZ6cmLdBbWcBd7zZ6ueb33qsD3qa7e7+U61R7YetWuOgia0GYPx++9jX40IesL3zBArjqKn+9sA89ZLPPxx3n7X2OJ/VXv/oVt912GzfddBMiwjXXXAPAjTfeyHe+cz4A1133ABdccEHMGsJ+2BKibUevvmqzzJMnJ37fhRfaqx433mgz1umwZQs89pidPDg0RiU1Rzw6S9IDA+opO1lqKxQ3A5MA6OhoH9DH/Kyd7Wbt2sRVbD7xCVun+pZb0rN5Ob+j8vJK/vxnOzh2KrXEo6amhuHDh1NRUUlNTQ033XTTgAHr7Nlw7bXBLf6ULpqBVjKmqqqKY445hpdeeolZs2bR2NjIEUccUdR+6HQpJH97NF6z516uokRvGy/b6t5mxYoVvf1tzz33zHos/cwIp1PyL9m2oVCIgw46iHcjS8U9P2QI06cf2ZsJa2p6lj33LPf1KkhHR9+kup4em1098MDYS15ni1iTm9yTBt0+VeekXVtbS1XVU7S2nsKoUeN8TQhs3WonbrW1wS9+AQcf3Pfa5z8Pf/+7zQJefbWtnZ3poGL9eusz//KXU88+Q+xKCXV1dTQ1NUXKk0FFRQXGbAGm0dk5kcbG52OWP/NDQEdnoF97zS4PnewqypAhNvN+0UU2njfe6M2PbYytkzxoEHzxi/G3c2fs401WdbLUZWWbCYXmMm7cZJqb6wdkXIMQ0G1ttlb5CSfE376iwg7mrrgCHn4YPvvZ9I77zDPWYnPttYm/n3A4zCWXXEJzczPV1dX86le/YuTIkb0DXuc3OXUqfPCDtnJIPqECWvGNuro6du3aRSgU4t133y16P3QsUplUdv/99wP0Di4KpbpELiwL8SYoOvFas2ZNTmPnh9UqFArx17/+tdeSkmrJP7cf3KmV7bzu2GC2bt3aW1O7o6OTtrYWV6UA4/v36D7xL19uV/SLJCtzRvTkJrd/t6HBsGDBAlpaWgaI6S996RR+8pMhXHPNQior/UmNG2MFXGurFWWOH9yhutp6evfc05YY+9a34Pvfz8wb/dRTVvydcIK3Ja9jVUqI5yMfPPhdenpmM3r0v2MONjJdRa6np78Y3LoV6uutPSMVamttGcSbb4Y//clmWlPluefs0t1f+lJq9ZndcYvXv7Zvn8I11wiXX34348dvGPB9+DWR0H0x4J13bP+L7nPRHH44HHusrXByzjnerTc9PfD739srA/EsM04/bG9v7/WOiwj19fVUVFQMGLgBvPbaGo45Zr+8OkeqgFZ8o9T90PEyg4nqQTvvyeVkuFTJh+x5rBgXct9yf/8dHR1UVVV58oyPHz++38qN0Fe+bunSpey55569Gejy8nI2bKjjpptuoquri8rKcdTUDPH1e3Sf+Nets3/nzvVt92kRLfqOPPLI3sfuWr3RYue6634LwPr1FRx0kD9teeIJO7D46lcTC5mTTrJi56c/hf/7Pyv8kq2KGIueHjv56ogjYOjQ1GrvxquV7Yi8WD7yD394b/7611ruuCP2PnfvtmIuXRt5tJ3gtdfs31QWhHE4/XQrhBcutMtKp7JGiDF28uXee9tJr6ng7m/u/uWu/DJxoh3UrF49hGOOGdgQvzLQ7v04lQinTUs+kDr3XFtx5NFHbYk7Lzz6qBXr11wTO9PvztCPHDmy10vv9LFYJRRvuOEGmppeYM89Ja8SciqgFd9wLmm7l2MuNJtCJsTK0M6YMSNhPWjI/WS4VMlldRhnEOIMygqlRjokvirhrkBSVVXF3XffzUc+8pGUPONOPE499dQBi6k4Ze7eeOMNli9fTktLO9d8oIEjzNN08CZDhlRw9dXX87WvHe/r9+gW0Js324xqEBU1vPLtb38b6KthHF0BIHrhix07umlpWcPw4TNZvbp/ya90aW62yycfckhq+zv5ZCvcrrzSeqJvu83G0ksW+dlnbab2wgsTr77oEM9+ED3pMvp9Rx89mD//Gd56qzLupLFt2+KvVpiMaPvGW29ZL3Iyf60bEfj6163H/Npre/jmN9cxbdqkhDF86SUrPK+4IvnKg06M4vUvd8a+qsoOoJyBwMB9plaDPBnRAnrECBgxIvlA6oADrO/4T3+ypSdj+b5jsWOHHaDMng0nnhh7m/6rFFoffUVFRb/az+6BGxDZvpX6+ta8+p+vAjpFCuUye65x/NBvvPFGycUrOjPY1tbG8uXL49aDtiWNVjNy5MjeyVzOZLh8+QcRTS6qw0TXGncyrYUwOEvmV47O6icTzw7O9xAKhWIupuIuc3fMMcewbNkyXjf7IfQAbzJixAiOOupEqqr8rSzhFtBbtsReKMIPUhWRsXy80F8EusXOF7/4Rerr6+ns7ORHP7qeadMeZPVqf2rPPvigFdGXX566B/fAA+EHP4BvftPWzf7Od8JcemnyLDLYy+i/+Y29lH7ssSAS237hJl6t7GQcfLDNLr/4YvyqC/X1/gnoVatsBtmrwBw5Eq64ooNvfWswX/3qO4wf/z1++9vYMXzrLVszefx4W+ItFvFW1IvVv6L76iGH2GxtR8fAyXHG2NKOmay82dXVP27OBMKNG5MPpAA+9znbV2++2frxk3nNN260Nbc7O62POt720QLZXcIPBlbzALtdU9MwamqG59X/fBXQKVAqpcf8pFDK8PlJdAb+1FNPHSD4nHrQbjvH2LFj2Wuvvdi1a1dOJsPlO+7MPsCiRYt6Pb/5/jtM5hvPNKsf/X7nmNH7mjFjBvsPepq1PbMYN248CxcuZPDgSt/qzTpEC+h99vFv3w6pLgMMqWVd3WLn6quv5oorrqCjo52mpiYOO6yJ114bE1PkeGHrVnjkETj1VO8xOfxwK6B//GP4+tcNDQ3dtLcnFj9vvGGXaz7uOPtem0GMbb9wE8/jnIwhQ6wt4qWX4m/T2mpvw4al+MFduDOpHR3w9tuGE09sJByu8lxecPToDZSVLaO7+5Ns2zaUNWs2csgh/UtTPPCAHXwMG2ZX6IsuwejgtX+5OeQQ6zNes6b/RFKH+vrMBLQ7Zl1ddrn1j3409e945ky44AIbh4MOSryC5erVts72kCHwve/ZKyfxiGcDit7GHbN77rmHsrIS80CLyGnArUAZsNAY8+Oo1z8NfDPysAW4xBjzapBtSodCW1pbGUi2riBUVVUxdOhQtm/fHlfwjRs3jmXLlhWsKMw20VnaQqrskopvPNPBZqLFVNzbHL/XNq7b9EEe+fXvGDnSnrRaW4MR0N3dVjQee6x/+3ZIRbQ4eBWE06ZNY+zYsb3ifM6c4TzxBPz3v3Ucd9weadeCvu8+m5G74IK03s7JJ9sM77XXVtLTcyfl5TcyenRdzM9jjBXPo0e7xbMlnphzv55M3MTjiCPgf/+zFT/i+bu3b09PQDc19d1/6612uroq+O9/72Tlyjc81+iura1l/Pjvs2NHK11dn+f2222WtbPTCs3mZrs8+HHHWftMon816Q44wAroQYNs1j6WgG5osG2KJ96T4RbQGzfafe27r7fv+Nxz4fXXrfVozhyYNGngNm1tcN111q51xx2pTbRM1g9jbX/AAYdkXEvcbwIT0CJSBtwBnAxsAl4SkUeNMW+6NlsPHGeMaRSRDwB3AzmecjKQfJg8paRPrleMiyX4ClkUZptCWpkzmnxq+2HVb2MYxHvvVTJqlH0uFBq4zG66uEvY7dhhT9hBWDi8iBavgjB6++3bbe3sm256kvvuezqtBVW2boUnn7QZvFTERTzmzYNf/lK49tpRvPfeDZx1VhcVFeW9Xtldu2z5u1DI1ki+7LLUvatuvIgbt5XmpJMq+fWvbc3p73wn9vY7d3rzLTvs3t13/4UXdgE1dHa+SmNjc8IBVCwqKyv57W/td7xlSxfXXz+ECy+0bTPGCsHqajvRc9CgMGvWJM6UpjvgGDnSrvj39NO2fGG05cEYO+DYa6+Ud9kPt4B+5x3717n6kep3PGiQ9X9//vN29cJvfhPGjrWD7g0brE3o3XfhvffsICST/l2IBJmBPhJ42xjzDoCIPAycBfQKaGPM867tXwAmBtietMmnk6DinXxcMU77lDcK2RKUL22fNdxOw1+zht6qEs3N/u0/2r4B6Z/8E5GOKPYqsJzt29rWINJDV9f7aWj4i2exBlZQlpV5K50Wj2nT4O67B3HddXDXXeUsXGiF1znn2JUcN2604mafffyZ+JiIWFaaM8+s5E9/spn2WJfxm5tje34TEQr1L2G3ffs4Bg3aRXl5s+esr4PzHU+fbtty5502hkOG2Koll1wCFRWpWYW89i8373+/rbSyenXsWul+CuiysvQ86OPG2VVDf/IT+PSnrfD/ylfgl7+0x9hzT/v6YYel185CJkgBvTew0fV4E4mzyxcCjwfYnozIl5Og4p1cXEFIpb9on1KyycQh2xlbtou33x7V+9x774VpbX2TAw/MfBAXcSMBtgIHBDeJMBPR4oXa2lpGjLifpqaLGD78CM9ibedOePxx6332Kzs3dKhdoOLvf7f737LFZgKHDIEbboi9THMQxLLSnH32dB55xC6d/dWvxn7fzp3e+oU7+wywdm0ZRxxRzQUX3Oo56xuLo4+2NwfHZrNmTepWoXSZP9/WA//Pf2IL6F270rdxuAX0hg12Oex07SCnnmqX0N661Q4If/ADayn6xS+S15UuZoIU0LHmYJqYG4qcgBXQMR1zInIRcBGgS0QrntFsr6LYTOUhQ9eydu0RQF8G0a8VCXfu7Lu/ZYu9/JvJJKh8wGa7P8O55/Zw+OHfpbLS2ynz73+32VOvtXSTUVZmJ4Q5FooPfWgy1dUVKYkZL2XwEhHLSlNZaa0mzzxjLSSxqmR4FdBu/7Ozmt6JJ5YFPoDKxN+cKsOHw1FHWRvHxRcPjJcx1g7ldSBqzMBFVA44IP12ivRlmOfNs6Xq5s2LL5796mP5TpACehPOYu+WidgF4PshIocAC4EPGGN2Rr8OYIy5G+uPZs6cOTFFuKIkwu9sr5Y1zC+C+j6K7Xs+ZOhalqw/gs5Odwaxivr6TRlZm7q6oLGx7/HmzTZjNbgI6jyNGVPJSSfBU08N4tOfTv0yeEcH/OMfNruZqCpBusQu0ZdYrHipYJKMeFaa+fOtIHzttdiX9RsarBBO1Z/tzkDX1VlxOHVqWk32RCb+Zi8cfzwsWQJvvmkrX0STjoDevdsuogM2E711q10K2w+GD7cWjnj42cfyHQ8rwnvmJWCaiEwVkSHAJ4FH3RuISC3wCHC+MWZNgG3xhVAoxLJly3pr9iqliTMpcf78+cycOVP7Q44J6vsoxu95dtUqurpsHV0nw1ZZOYk99sjM2tTQ0HfChmBrQOeCj388THl5F9dc05PyKnH/+Y+9BH/22cG0qb+FopG6urpA3pMIx0rjFkhHHmntJEuWxH5PT4+tsWxSSIU1Nva3BkVPhguaWJ/Pb+bOtdaKxYtjv97Y2N8DngrOHASw9g3IzqAD/O9j+UxgAtoY0wV8CVgEvAX80RjzhohcLCIXRzb7LjAW+KWIrBCRl4NqT6YU48lUSY9YkxKV3BHU91GM3/Nx1csYNMhOOHMybLfeegf//W9m9o3t2/vu9/TYWfnFIqDD4TDf+tYFtLdfzcaNhttuS65m2trswin77GMrLQRB3wBoaMoWg3Te45WhQ21Ju2efjS+Sd+/uW+o9Hu3tNivr5p137CTJYulbYMv6HX54/Hj19NhKF6nS1dX/97h6dScAe+/dHucd/pKNPpYvBHqBzRjzGPBY1HN3ue4vABYE2Qa/yNda0MV2ibkQKPSyhsXWZ4L6Pgr9e47FyLIWZs60AvoLX+jLsO3caVesS4f2dpuBdli1ygqkQw/1p825xsmodXZupqzs7zz55Ef4xCcSZ/R+/Ws7iLjlluQruKVLOhaDbNkS5s2D556DZcviT2rctMmKw2nTBsaosxNWrrR/3axfb/tppktc5xvz5tnf5Ntv23hEs3EjjBplS8glY9u2vnKS4XCYhQufAY7jqqsW8Nvf/iZwO0W2+lg+EKSFo6hwTqbDhg3Lm5OpZsVzgzMpcfHixQW3KmUx9pmgvo9C/p4TcdRRNpO3bVvfc7t395+slSrG2Cyhc8IGK5wGDbLHAXsSX7NmDWH3rKYCwp1RGzfuCYYOtZOo4vHKK/DXv8LHPhZ8aa90LAbZsCXMm2fLr11/ff9+Fs3mzTZeO3dar+9779ntV6yAlpaB269fnz37RjY55hj7m3nyyfjbvPWWjVEiduzon62uq6ujrW1v4B127WrImp0iG30sH1ABnSL5eDItxkvMhYIzKTEf+oEXirXPBPV9uCefFsv8B0fYvvBC/+fXr7eXft31nOMRClmxs3r1QOH93HPWtlBd3Teh6PLLL+eCCy4oSBHdZ3W5lXvvvY1zzxWefx4uvBAWLeq/bUsL3HijXbHtC1/ITXvzgaoquzpde7stuZfI79zSYrPNr78Oa9faAZnb9+zQ1GSvdGTLy5tNRo6Ek06yy73H+5fc1WVjtGZNX2beiWtnp33t9ddtzB323rsWmEZZ2TrPdopCH/hmgyKYI5098q1ur5MV37p1K6NGjSpqr5HiD+naEorN9uGFbK9kGTSTJ1sP6fPPw5ln9j2/a5e9lZXBgQfay+rvvmsFS3m5FTYjR1ph/Pbb/bPODnV19j1nneU8Dr6WbjZw153+5CetQHz8cfjxj62wqa7uE4A7dsDtt/u7RHohMnUqXHSRrXP8xhuxl6v2gjOBsBgFNMCXvwzLl8OPfmSvcMRbbGbzZpulLy/vq2bS3W2rvkSzbVslxsD55x/BJz5xSsoZ4VKqpJEJmoEuYKqqqli6dGmkVmUjc+fOLYoMmRIc6VxJKUbbhxeKLWsvYkuNvfyyzepFZ5q6u60YfO01+/qrr9rL7K2t9uS9enVs8Qw2+wz2kjQU54SisjK7LPftt1t/7003wfe+Z2s+r1plRWMmNXcLlVgZy1NOsYONRx9N8MYUWbPGmQxXXBlRJ26DB4f5+tet3/nf/078nq6uvitFbW2xxTPY3yrAccdN8CSA06mkUYoZa81A5xHpZPnq6urYtWsXoVAoryY3KvmL1ysp+TqBNlsU42TCk06CP/wB/v3vTh55ZGCmyX3J3ZjUSo4ZYz2cBx3Ut4BKMU8oGjIEfvhDuO8++5nf977cTW7L9cIV8TKWQ4faVez++U+73PPIkenv/957XwX25etfv4zf/rY4MqLRcfvNb+5hn30qeeQRW7c50wmoa9bYDPWkScm3deN1EZlSzVhrBjpPSDfLl4+TG5XiotT7mJO1X7RoEffff39R1IPfd19r5Vi0qNO3mq1r1tias6ee2v/5Yp5QNHSoXUFu3rz0xXOmmbt88Jknylieeab16N52W/xMaTLWrdtIOHwI8By7dhVPbWF33BoaGnj22SWceWYn77xjr/xkyqpVtqqH177p9v2nIoZLqfazGxXQeUK6l4nzcXJjItzioxiESClQKH0s6P70mc98hlNOOYUJEyYwb968graziNgs9NtvV1FdvX+vxaKmpiZtMbdokc3KnnBCAA0uUjIRv47wXrt2bT/xsnbt2qxfSk9k1ZkyxU64fPpp+OY30xPRO3dOBoZSXv6ir1agXNsOnLhVVFTS2dnJzTffzMMPL6C62rBwYexKJKnS1WXnKuy/f3rv9zLwLUarViqohSNN/J5Ulcll4uhL8u62ATmf/OW0p7a2lrlz51JfX8/48eMB2L59e+/ELHdb49336zPk86S46LblQ1vzbQJtNNET/ZYuXUpdXZ1vMXMGuI5g7urqKng7yymn2MU+qqtv4eqr32HKlPFccsklUUtDk5I1oKUFnnrKcOihzQwePIRkS0oXA27bBCSOUzyLRbqTLN2XzEeOHMnIiDdi5MiRXH/99TQ1NTF69GjuvPNO6uvrA7d2JLPqnH12mO7uRu69dwJ3393FKae846lNL744hKoqw09/+ln22cefz5IPtgMnbkuWLOHmm2+mvT3Mrl3bOOecTTz44EQuvtjw058OYsKE+P3Nfd/d/lWrbObfzwuG8fpxMVu1EqECOg1SmZWfSARBf3G4fPlyAF9O+u62RYtUv0WF1/aMGjWKxsZGQqEQ3d3diAhtbW3U19ezfPlyPvOZzwxodxCfIZ2qCtkSsTt27GDWrFk0Njay5557snTp0t5BRyafP177U+2n+TbIiMZ9BWfr1q3MmjWLXbt2xRycxfosyT63u+JNR0cHQ4YMGTDQLbTY7bEH/OAHcNVVg7j//v1YsGBNPzG3du1abrjhhrgCwzmZjhtXyzXXDKG5uYdXX/0eF1xQnzXhliuiBSzQK1pjxckt1NyxieU1TcXP7BbeADfeeCMVFRW0t7dz5ZVXRiwBhgULFtDS0pIVgehkLJ2srtN+9+cfOvSr/OUvJ/Hoow8ybtzapG0Kh8OsX1/H889P46ijhAMP9K+CizuGO3Z0s3btWmbOnJl1P3llZSXz5s3jt7/9bW9/evLJbzB48EQ2b/4+V11VxS23dHDppQP7W7y+190Nd9xhF1+ZM8efdibqx5WVlf0q1ZQKKqDTINmkqljZsFiZ1/Hjx9PT08PGjRsBmDx5Mm+88UZGJ1x329wi1REVTudfsWIF48aNyywQHttjjGH06NGIyABhDMRsd6zP4AijdMVk9Pe3fPlyhg4dmlBcZaOMWSgUYtasWbz33nsAbN26lUWLFsUVhsk+f6zMv7v9qfbTQijd5r6C4x6oRQ/OYn2WRINOZ1vHxuLEMzruqewjHznySLjiCvjJT+Cpp/Zh5MgJ9PT0MHp0B8bAzp3ldHSEaWjYxRNP7OB975vIqFHw17928vvf/562tlUYcyk9PbWUl99AR8dyGhoqsyrccoFbfDn/ozo62vtlkR0h1t7e7vK5DhS17swdEDMrGi3qooX3tGnTerdznh8+fDjNzc20t4ezVkIwVlbXHavBg3+ByP50dv6A+vql/PnP9cya1cF++03qFX6dnWFWrdpEU9MEbr/9WhoaPkZPjzBvXgcQp7ZbjHYkE8G1tbWMHDmScDhMZ2cn119/Pb/61a8GXIXJloh2YuUMgjo6tlJe/iPeffd6vvOdbnburKKjY3O//ua+39BQxfr1dey773TuvbeLVasG861vdTBiRGoxi0eq/bjYfuOpoAI6DWLZLUKhUG8mGegn0NwiKFocGmMwkSnuflwSdrfNfSIfNWoUDQ0NtLW19Qq1NWvWBH5ij46VW/RB/0x8rHZHfwZHGMXKMqb6WaJjdN555yXMcC9fvpwtW7b0ZsuDumy/atUqGhsbex+PHj2aU089NaYwTPb542X+3e2PHkjE66eFYFWIFrjuAQP0/z06fc79N5XP7baxRA8+U91HPnLaaXYC4COPDKas7Dd0dwvTp3ezcKHQ0XEfIqswxnDrrRO5/fYeRozoorFxCHBBZA87ufjiDfz972/R2Dg0rnDLdaUIP3A+Q01NTa9Qjc4COr9Hx0rhtljEi40jbNes6X8VwIlXLFEd65K5+/mampp+YjAbvtT+k+IMS5Ys4cgjj3TFahg9Pd+lsfEEurs/ym9+MwLopLx8AyNG7EdjI4g00d09GSgHfgJ0M3jwbey112mAN3tLInFXWVnJ1VdfzRVXXEFHRztNTU28+OKLOatb7s7g98XrHebP38xf/7oXXV0LEVnH4MHrKS9/m56eMgYNOoRBg3YxaNAw2tuP5rLLBjF4cDfh8GAGDXqWe+/9Jccdl764jWcVysXgLB9RAZ0G7pO1I/4OOugg3o2soTlp0qRe4VdTU9NPBCXKQPtR4SBW2xxR4c5uNjY2Zu3Efv/99wNw2GGHUVVV1U98uI8fq93Rn8ERRvFEYSq4Y9TW1sapp546IMM7fvx4HnjgAfbff3/OO+88wuFwb+Y8qCoUM2bMYM8992Tr1q39rhLEEoaxsqxDhw7tzY464i068+/uY9GDm3j9tFAqb7gFbnRfcn/OcePGMX369H42mUw/d7yBa6HE7pJL7N+hQ23drD/9qYzKSjj77C6efHI/urrKqKi4h+bmPWhsnMLIkY9SVrab3bv3YuzYlZx11i8466z4wi0f/KaZ4nyGhoYGqquruf3222lqaurnQ3U++44dO+js7ARscsSxWCQTtdGZ5ZqaGpYsWUJDQ8MAsRLvkrn7+Wz7Up32NzSY3klxY8aM6Xe5H+xnCIXe5corf09n56F0dR1MTc1WZs8u4z//WQVspbz8VSoq9qKj423Gjt1Gbe1FQPzscqxMaTJxN23aNMaOHdv7fbjFfq4mwzmDoLVr13L99dfz6KMXMmLERE4++WesXLkndXX7sHv3SQCMG9dDU5MwdGgP739/F//5zyJCocHAM/T0vMyuXRUZDWDjWYVyMTjLR8SkUuAzj5gzZ455+eWXc92MfixbtoxjjjmmdyZvZWUld9xxB/vvv3+vaEzFA+1sGxTR/tqgLy0HYX1IZktIt41bt25l2LBhtLa2EgqFEBEqKiqorq7ufa6yspKnnnqKY5xVIgIgmdc60YTMbdu29fpz94gU4k3mHS8WD3QynCtE4XCY888/ny1btgBWdC9ZsqRfRhrS+9z5HruuecfT0gwrfv5M0m137LAr6VVXQ1NTmP/3//7H7bffQGenLaEwZEgFN910ExUVFTFPyNEn6zVr1nD55ZcTDrdRWTmUW2+9teAyVmvWrOGyyy6jvd3+nx83bjy/+93v+n129+cEYciQIYwdO7bfgMGdxY7lE3deHzlyJF/60pfYvXs3XV1dlJeXM2bMmLQGH9nM/ofD4X6T4uJ93+4BSWdnJ4MHD2b48OGUl5fHnQQZbyDmfn7EiBF0d3fT0tKSUryiY5MvV0ri9bchQyp57z37+9xjj74a7a+/vrI3mx7d9yC2NSgZiQa+2Y7TAQdA5IJi1hGRV4wxA9zkmoHOkFAoRFtbG3vssQcbN27EGENXVxdf/vKXe0UqDKxi4L4fpCBzM27cONasWZO1E3sQC3DEyzKm+1mc1RxnzZrV+4/c+Sfq3MrKyqiqqmLPPffksMMOy6j9qbQnUYxiff7GxkY+9KEP0RZZmqqrq4utW7fyz3/+k9GjR/fGJ5bnPfp40Y/dwjJfhGC6fOYzn2Hz5s39SlaNHDmyN27xfp+pEus37pTWK7T4OV0lHA5zySVW5HR3dwM2Qz1q1CiAuCfP6Oyo14UZ8pHa2lqqq6t7BU1zc/OA7GZNTQ3Dhw/HGMOoUaO4+uqre/3JDo6HOZ4wcV4///zz2bFjO2AHLF//+teZN29eWuI5m9l/96S4hoYGhg8f3mulit7OqUBx0003RXy87YwZM5Ybb7yxN24jXauvxKta4n4+HA5TXl7OyJEjufPOO5N+1ui+msvJcG5Rmqi/uRdGEbHvu/766+no6ACEPfbYg2uuuab3iqSXrLybRNU14k0aLSW0DnQGONnLU089lUGDBvHvf/+b3/zmNwwZMqSftSCfcE7y2TiZRy/AUVtb61udXj+qYjjiZvXq1ezatYu2tjaGDBnCHXfcwYQJE3q3GzJkCHfffXfeTQarqqpixowZLFiwoFcUlpWVISK0t7ezYMECX6qVFMMS3s5gzrHiVFZWMmHCBIYMGcKpp54ayOcr5PhF1xhub7ei5Bvf+AY33XQTIsKVV16Zcu1irwsz5COVlZUsXLiQcePGU1FRyZgxY/oNBOxg4xKam5uprq7mV7/6FTNnzgQYUGs42cITdXV1NDc39z4eMWJEWuI5lWMFQWVlJXfeeSfV1dU0NzdzySWX9Pv8Tv8CmDdvHiNGjOh9rbW1lYqKipifNV69Yef58nI7Ya6zs4OWlhbq6uoKZnnp6JrgwID+Fl2n3f07bWpqAgzl5eVcc801TJs2jUsuuYTLL7+c66+/npEjR6ZVp9k9oIiOZT4s4pNLNAOdBo54c/tMwWZWjj76aK6//vpea4EjGrNd2zjoY6VCooldiSYTxmu3H/aNeBYIt2f9k5/8JGeeeWY/u8tHPvKRrIvnVL7PVatWsX37dowxVFZW8rOf/Yyvfe1rtLW1sX379qQVRhId192/C2EynEOsuNXW1vbzKD/wwAMAvf73VKqxpHI89/sKbQl0t7XA8Te6Jw6NHj2aE088kbq6OpqamvqVu4tl5Yi+xFsMZa5GjhzJ7373u5iX/J0sX3u7HaTV19dTUVERs/SXexKiW9C4v4MxY8b0+q0XLlyY9qAjV9n/+vp6WlpaIt7txt5+Eu2fveeee1i4cCELFiygubm5n1CMZatINHnS8Q07kzfdNbG9WjmyTbzsutPfouN25513xv2dTps2La5/OZ3PF6+EXbqZ7WJBBbRHostVuYWXcwKNJRoT1Tb2yxscq4xWrktqORnvZcuWxSzHFq+tseo/ZzqBMF5lCoBFixb1E09VVVVZtbskamuyuLgnyJ199tn89Kc/jVlhJFE95FQGFoUwGc5LHfRQKOSpGkuy40XH2C3a8z1+7hOke4Y9DDzxugVZvIU7YomkQsw6x8I9EIhXpcARqtFVKdylv5L5e9OppR1vsY1cLHIRr5/Eq+CQilB0+lK8yZMzZ87k3nvv7VcOLhVx50fsMyXeQMfpb9EVWtwVQyDx79Rd6jAd4vXjWH2+lFAB7RF3VgkGCi+ILRrj1Tb2KzMVr4xWvpTUilenN15bo9vtLrEWr6pEMuLVpK6pqYk5gTOXq++l+n3W1dUN8ILHqjCSqB6yl4FFvpOonFxdXd0Av3eyaizJBp2xaoq7Y5yLxYvSwX2CNMZQXV2NiMQ88caqWRt9Yi2VMlfJsnxuERMdk/r6+n4xic5ARr+ejGSLu2Q7/vH6SXT/8iIUU+lLscrBJRN3iQY6uagFHUu4Rwvi6IohiX6nmQ4E4vVjyCyzXeiogPZIdOmvRJUz4pW2CqLMVTaPlQ5eM/PR7XaXWEtXmCSqSZ1v4sbL9xlvIqA7wxqvHnJ0PehUBhb5jNdycrFi5eUKR3Sfgv4xjhbt+Ur0yTlWBq6yEtrb7az/kSMr2X//6bS1xV64I55IKjaSZfm81GXO1GqRyuIu2SaemE2U4U0mFFONixcBmWigk4ta0PFei/48yT6fX7apRP04k8x2oaNl7NLAywS2bPqS880DnYhU2uq+H11iLZOJcfkWi3j48X1G7yNWWcFYKxLm68AiFdItJ5euxz6VGOcDicrYVVTYcnU7dmxg7tzJhEJDGT4cJk2yJe2Mgb32sgK6udlW6Whuhrfegl27wrz7buxL79m+DJ4LvHhnk22biQ/Xy/LiuSCTOGXDnxxrDkC+xC7fyIVfPB/L2KmAVpQSIt4AopAGFtkgk3jkayxjCeiyMntiGjcOQiEYOtSWxfKCMbB+PdTV5X4iVqkTzwNdKN9FWRl0d+e6Ffndjysr7YB31Cj7u+3psb/BwYNh9Wo7sC1GVED7gApoRVEU70QL6AkTYPJke0L2gzVrYPNmf/alFD/DhsGYMTB8uBV/I0ZAebkdyDU2wpYt0NKS61bmB4MGwZ572t9sdXX87bq64NVXi1NE56OAVg+0oihKiVFdDfvv7+8+99sPGhqgxErBKh4QsSJo4kQrnGNRVWVv48bBiy/mR0Y6l+y5J+yzDwwZknzbwYNh+nR45ZXg26XoQiqKoiglx9ix/u9z0CDYd1//96sUB+XlMGcOzJgRXzy7qaiAqVODb1c+M2OGvaUinh2qq+0S30rwqIBWFEUpMcaMCWa/48enJo6U0mLQIJg509o2vLD33v5ZjAqNiRNt9jkdSn3gkS1UQCuKopQQ5eWJfZSZEuS+lcJk8mTrcfaKY/koNaqqMruaM3So/g6zgQpoRVGUEmLMGO+VNrwwdGhw+1YKj/Jym01Nl3SzsIXM5MmZ/0aDsGkp/VEBrSiKUkIEZd9wyKPKfUoeMGmSLU+XLkOHppe9LlSqqvzxMKuADp6CK2MnItuBd7N0uHHAjiwdq1jQmHlD4+UNjZd3NGbe0Hh5Q+PlDY2Xd3Ids8nGmPHRTxacgM4mIvJyrNp/Snw0Zt7QeHlD4+UdjZk3NF7e0Hh5Q+PlnXyNmVo4FEVRFEVRFMUDKqAVRVEURVEUxQMqoBNzd64bUIBozLyh8fKGxss7GjNvaLy8ofHyhsbLO3kZM/VAK4qiKIqiKIoHNAOtKIqiKIqiKB5QAR0gIuJhBXtFRGpEpDzX7VCKH5EglxIpPjReSpBo/1KCJog+pgI6IETkLOA2EanWfw7JEZEPAI8CIyKPNWYJEJE5IvIpEdlfRPR3nAIiso+IHAxg1LuWFBHZV0Rmg8YrFURkeK7bUEiIyBQRmQnav1Il8v/+aBGpzHVbCgEReZ+IfAxsH/NbV+iJNwBE5P3Aj4B/GGOa9Z9DYkTkFOCHwHhs3PQfagJE5EPA74CzgF9hi8wrCRCRM4F/At8TkftF5GwRqc51u/IVEfkI8CRwg4g8KiKfEJGA1zAsXETkdOBvInJcrttSCETi9U/gFhH5j4jURJ7XxEkcIkmmvwLfBp51Bmwas4GIpQr4PfAlEfk89Ipo33SvCuhgmAXcYoz5l4jsKSLvF5ED9QQ0EBE5AbgD+AJwCDDMyRLqP4aBiMgE4KvAJ40xnwQ2AkeJyCgRqcht6/KTSMwuAz5hjDkHeBX4HnC+iIzKZdvyEREZCnwS+LQx5lSs0DkK+LT+DxuIiBwK3AO8DXxVRXRiROR9wM3AhcaYk7H/w24FTZzEQ0TmY2O0wBhzJrAZqzM0ZnEwxoSAPwL/BQ4UkYsiz/f4dQwV0D7iEnxjgD0jI50/AxcD3wWuFhEfVrkvDkRkMDASON8YsxyoAoYC7wf9xxCHJqAFmBERfycDnwPuAy7Sy8gxaQLaiWTqjTE3A5uA6cBs0MFaFF3AKPpO0HcDS4CpwHGg8YpiPfBN4DvA48A3VETHJtJvhgA/MMYsjTz9bUD/1ydmN3bA8byI7A0cg82sPiwiH1QbX39c2mED9n/ZMqyIvk5Ero5kqDOOmQbdR1xf2r3APOAh4DeRrNfPsWJxak4al4cYY7qAfxpjXhCRMmPMNuwo+3LHe6kMoB34AzZj/wTwC2PMR4EHsH1ufA7blq90A88AHxSR80Xkh8BWYAvwf6CDNTfGmE7gFuDQSLYQY8wjwDvAgshjjRdWEBpjdgO/M8Zsx2a8HgWuFJHjI9vsHUkWlDzG8gzwlOvpQcABIjIaQK8KDcQYs8IYsyTSj87FXuH+JLAUe3VtWE4bmL+8AjQYYx7CJlKuAEZH+mHGmWgV0D4gIoeIyEGupzZgM4IHEBHMxpgXsCPv/bLewDwjEi9nMldX5G935GS0GCsQD41sW5a7luYH7v5ljOnGnqQ/BvwPeDPy/J+ACmyfK3miYtYOPAasAo7H/gP9vDHmJ0CXWl9ARE4SkdsjGZqjsQOOzcDpLhF9OzBYRGbksKl5gRMv4Icickzkd4kxphF4BPg7cLGI/BL4Bfa3WbJE9a+jIoMNxFZdCgMdxphGETkf+In+JgfEzPkNdgG3GmOujzz+GTZBMDmHTc0LYsULWA1MEJFPA+cDtwPVIvIZP46pAjpDIsb+FcAl0jdjvRP4D9bbe4yIfE1EzsV6fJ/PVVvzAVe8Lo7OMruyWquAb4pIhXNiKlWi+tfhYPuXMaYJ28fmisgpYqu+TAVez1lj84Q4MXvDGPMbY8yFxpgvRbb7PDAJKOnsYGRC1y3Y310TdiLvKOAvQAi4QEQui5yEpgI7c9TUvCBGvK4TkX2d140xOyK2FwE+ClxrjGnNSWPzgBjxusGJV+R/2U7gDRH5NvBl4I7IoLdkiRGz610x63Bt93FgArAtF+3MF+LEa3/s/y8BrgcuNcZcAfw7csuYkj5xZEpkss0RwFVYe8bHRQRjzDJjzDYRuQ+bybkU2Av4jDFmfc4anGMSxSvy+iBjTI8x5j4ROQb7j2FDzhqcY2LE6xybpLfxwnovZwFfA8qB84wxdbloa74QJ2YYY16J2u4C7ETC00tc3OyB9dBfZox5RmxlkmnA3saYZSLSBOwDXA40Yydibs9Zg3NMnHjth+1r7u1OAd4HnGSMKdlBbbJ4uXyop2DnvpxkjFmTi7bmC6n0MbEVJs4BrgQ+HrE/liQJ4jXMGNMhIg8B97k893/1KzGnS3lniIhMMcZsiHyJ38WeZB4xxrzk2qYM6FHfYNx4/cUY83LUdqLxSi1eIjIMGBK5fFzypBizicBQY8zaXLUzH4gImJOBZ52BhIj8GnjHGHODa7ty6L26VrIkiNc6Y8yPXduNxlqF3slNS/MDD/G6DHjSGLMqNy3NH1KJWcTi8iFgpTFmdc4amwckiNd6Y8yPXNv5rsPUwpEhxpgNkb/bsLWMq4GPicgEsROWjjDGdKsYtMSJ19nueEVe13iRMF57ReI11xjTquK5jxT62FxjzCYVzyKRKz6LjDGtIr2VNd4FOiPbnCkiB0cutZe6eE4Ur67INmeKyCHGmEYVzynHaz9jzG0qnlOPGTDFGPNnFc8J49UR2eZMETkwCB2mAtonxFaRqMeesLuwBbxvwXpwlCg0Xt6IEa8HsfFqyWnD8pgEfUxjRsxBqnM+2AjUi8gZwPexk7xKHg/x0v9hpByvH2S3VfmNh5iV9NwgBw+/yQ4CQD3QGeLy7TqzsOtFJAQcBBxnjHkzty3MLzRe3tB4eUdj5o3oeAFl2AnQb2FrtL+du9blHxovbySJ13kar4FozLyRq9+kZqBTRERmiMjUqOfEGNMjIieIyI2R56qB4cCppXyi1nh5Q+PlHY2ZN1KI108jT+/ELjRzrjHmjaw3NE/QeHlD4+UdjZk38i5exhi9JbkBZwA92FIoM6JeOwh4ETjb9dzgXLdZ41U4N42Xxiyf4oW9Mjkx123WeBXOTeOlMSvFeGkVjiSIXRr5B1gf4DBgB/AnEzHvi8g8bBH4pc5lhNy1NvdovLyh8fKOxswbHuNVbnSyoMbLAxov72jMvJGv8VIBnQSxJVL2NcasFbsC15XAOmwtwTdd2w02kVX1ShmNlzc0Xt7RmHlD4+UNjZc3NF7e0Zh5I1/jpR7o5BjgbQBjy+z8FNgX+KiIjBCRj4lIrXbyXjRe3tB4eUdj5g2Nlzc0Xt7QeHlHY+aNvIyXCugYiMiHReTP0FsmpSzyvBhj3sJ+eWOBPwB3A1W5ams+oPHyhsbLOxozb2i8vKHx8obGyzsaM28UQrxUQEchIrOxX8xhIvL/AIwxXZFLA8b15YWBw4D5poQLwGu8vKHx8o7GzBsaL29ovLyh8fKOxswbhRIvFdADGQJcZYzZF2gRkWdhwJc3AhgPfMCUcEmZCBovb2i8vKMx84bGyxsaL29ovLyjMfNGQcRLJxHGQERGm8jSyCLyT2CUMebYyONJxpiNojNje9F4eUPj5R2NmTc0Xt7QeHlD4+UdjZk3CiFeKqDjIK7yV5Evrxy7FPDxwJeMMa05bF7eofHyhsbLOxozb2i8vKHx8obGyzsaM2/ke7xUQNNrSh8QCPfzIvIudjWzE4wxr2W7jfmExssbGi/vaMy8ofHyhsbLGxov72jMvFGI8SppD7SITBWRccBI13ODIn+nAKMj948D2rFG9Zx/ablC4+UNjZd3NGbe0Hh5Q+PlDY2XdzRm3ijkeJWsgBaR04GHgLuAr4jIuMhIp0dEjo88v2dk8w7g1FI29mu8vKHx8o7GzBsaL29ovLyh8fKOxswbBR8vkwdrnGf7BpwCLAeOAA4F/gbsZfrWUP8fkTXV9abx0nhpzPLtpvHSeGm88uumMSu9eJWkB1pEvgy8bYx5XETGA88CL2G/zP8AK40x3SIi0FvEu2TReHlD4+UdjZk3NF7e0Hh5Q+PlHY2ZN4ohXiUpoB1EpBK7is3zwNPA0cABwFVAk4nM/lQsGi9vaLy8ozHzhsbLGxovb2i8vKMx80Yhx2twrhuQLURkGrDbGFMf8dgYY0xYRL5ojNka2SYEnAh05fOXlg00Xt7QeHlHY+YNjZc3NF7e0Hh5R2PmjWKLV0lMIhSRs7CXBL4rIrXGGCORWZ5AvWvT/YER2FqDJYvGyxsaL+9ozLyh8fKGxssbGi/vaMy8UYzxKnoLh4iMBB4EVgHbgBrgVmNMnTMCinhsvgKcB3zWGPN6zhqcYzRe3tB4eUdj5g2Nlzc0Xt7QeHlHY+aNYo1X0QtosHUGgZ3ADOAsYChwmzFmQ+T1YcA3gD8XwpcWNBovb2i8vKMx84bGyxsaL29ovLyjMfNGMcaraAW0iNRiLwsMNq7lHkVkLvbLqwSuAGZjZ4LuykU78wWNlzc0Xt7RmHlD4+UNjZc3NF7e0Zh5o9jjVZQeaLHFuR8DfgH8VkT2d14zxiwF/g5swZZN+Q/Wb1OyaLy8ofHyjsbMGxovb2i8vKHx8o7GzBslES+TB8Wo/boBAkwCVgLHY302Xwc2AwdFbftzYD1wcK7brfEqjJvGS2Om8cqvm8ZL46Uxy69bKcUr5w0I4MsrA+4G9qbPonIZ8B4wPfJ4NPAqcFiu25vrm8ZL46Uxy6+bxkvjpfHKr5vGTOMV61Y0HmgR2Q/7hbwD/BJ4xRhzo+v1K4EDgf8zxoREpNIYE85Na3OPxssbGi/vaMy8ofHyhsbLGxov72jMvFFq8SqKhVRE5AzgR0Aj9rLBg8BtIlJmjLkhstkfgW8DbZHH7VlvaJ6g8fKGxss7GjNvaLy8ofHyhsbLOxozb5RivApeQIvI+4CbgE8ZY5aLyN3AkcD7gBdEpAx4GDgWOBwYBTSaYkm9e0Tj5Q2Nl3c0Zt7QeHlD4+UNjZd3NGbeKNV4FbyFI/LFTTfG3Bt5PB641xhzuojsA1wDhLFf5ueNMStz1tg8QOPlDY2XdzRm3tB4eUPj5Q2Nl3c0Zt4o1XgVg4AuA4YZY3ZH7k8A/gF80BizRUQmY43rw4wxTblsaz6g8fKGxss7GjNvaLy8ofHyhsbLOxozb5RqvAq+DrQxptsYszvyUIBdQEPkSzsPuAooL6YvLRM0Xt7QeHlHY+YNjZc3NF7e0Hh5R2PmjVKNV8FnoGMhIvdiC3SfAnyuWC4XBIXGyxsaL+9ozLyh8fKGxssbGi/vaMy8UQrxKioBLSIClANvRf6+3xizNretyl80Xt7QeHlHY+YNjZc3NF7e0Hh5R2PmjVKKV1EJaAcR+RzwkjHmjVy3pRDQeHlD4+UdjZk3NF7e0Hh5Q+PlHY2ZN0ohXsUqoKXQy6NkE42XNzRe3tGYeUPj5Q2Nlzc0Xt7RmHmjFOJVlAJaURRFURRFUYKi4KtwKIqiKIqiKEo2UQGtKIqiKIqiKB5QAa0oiqIoiqIoHlABrSiKoiiKoigeUAGtKIqSA0Rkkoj8V0TeEpE3ROTyyPNjROTfIrI28nd05Pmxke1bROT2qH09ISKvRvZzV2Q53VjHvF5ENopIS9Tz80VkmYh0icjZCdr8NRF5U0ReE5H/RJbodV77bKTNa0Xks5nERlEUJd9RAa0oipIbuoCvG2MOAI4CLhWRA4FvAf8xxkwD/hN5DBAGvgNcEWNfHzfGHAocDIwHzolzzH8AR8Z4vg74HPD7JG1eDswxxhwC/Bm4EazoB74HzI3s/3uO8FcURSlGVEAriqLkAGPMFmPMssj9ZuzKXXsDZwH3RTa7D/hwZJtWY8yzWCEdva/dkbuDgSFAzPqkxpgXjDFbYjy/wRjzGtCTpM3/NcaEIg9fACZG7p8K/NsY02CMaQT+DZyWaF+KoiiFjApoRVGUHCMiU4DDgKVAjSNyI3/3SHEfi4BtQDM2Oxw0FwKPR+7vDWx0vbYp8pyiKEpRogJaURQlh4jIcOAvwFdcmWTPGGNOBSYAFcCJPjUvJiJyHjAH+KnzVKwmBdkGRVGUXKICWlEUJUeISDlWPD9ojHkk8nS9iEyIvD4Bm1VOCWNMGHgUOEtEykRkReR2bZrtu97Zh+u5k4CrgTONMe2RpzcBk1xvnQhsTueYiqIohYAKaEVRlBwgIgL8BnjLGHOL66VHAaeKxWeBvyfZz3CX4B4MfBBYZYzpNsbMity+m04bjTFXO/uI7P8w4FdY8ewW9ouAU0RkdGTy4CmR5xRFUYoSMUavsimKomQbETkWWAKspG/y3lVYH/QfgVpsdYxzjDENkfdsAEZgJwruwgrVncA/sdaNMuBp4KvGmK4Yx7wROBfYC5shXmiM+b6IHAH8FRiNnaS41RhzUIz3PwXMBJyJiHXGmDMjr10QaT/A9caY36YTF0VRlEJABbSiKIqiKIqieEAtHIqiKIqiKIriARXQiqIoiqIoiuIBFdCKoiiKoiiK4gEV0IqiKIqiKIriARXQiqIoiqIoiuIBFdCKoiiKoiiK4gEV0IqiKIqiKIriARXQiqIoiqIoiuKB/w8UxTml9mt0PgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "def plot_prediction(ds_preds, i):\n", " \"\"\"Plot a prediction into the future, at a single point in time.\"\"\"\n", @@ -2827,6 +3478,12 @@ " s = d.y_pred_std\n", " yt = d.y_true\n", " now = d.t_source.squeeze()\n", + " \n", + " \n", + " plt.figure(figsize=(12, 4))\n", + " \n", + " plt.scatter(xf, yt, label='true', c='k', s=6)\n", + " ylim = plt.ylim()\n", "\n", " # plot prediction\n", " plt.fill_between(xf, yp-2*s, yp+2*s, alpha=0.25,\n", @@ -2842,10 +3499,10 @@ " c='k',\n", " s=6\n", " )\n", - " plt.scatter(xf, yt, label='true', c='k', s=6)\n", " \n", " # plot a red line for now\n", " plt.vlines(x=now, ymin=0, ymax=1, label='now', color='r')\n", + " plt.ylim(*ylim)\n", "\n", " now=pd.Timestamp(now.values)\n", " plt.title(f'Prediction NLL={d.nll.mean().item():2.2g}')\n", @@ -2887,13 +3544,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 121, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:19.600Z" + "end_time": "2020-10-18T07:14:58.192879Z", + "start_time": "2020-10-18T07:14:57.893583Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'NLL vs time (no. samples=4439)')" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "ds_preds.mean('t_source').plot.scatter('t_ahead_hours', 'nll') # Mean over all predictions\n", "\n", @@ -2918,13 +3599,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 122, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:20.000Z" + "end_time": "2020-10-18T07:14:59.037853Z", + "start_time": "2020-10-18T07:14:58.195017Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Make a plot of the NLL over time. Does this solution get worse with time?\n", "d = ds_preds.mean('t_ahead').groupby('t_source').mean().plot.scatter('t_source', 'nll')\n", @@ -2935,13 +3640,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 123, "metadata": { "ExecuteTime": { - "start_time": "2020-10-18T06:10:20.100Z" + "end_time": "2020-10-18T07:14:59.695795Z", + "start_time": "2020-10-18T07:14:59.040612Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# A scatter plot is easy with xarray\n", "ds_preds.plot.scatter('y_true', 'y_pred', s=.01)" diff --git a/notebooks/RNN_Timeseries_Seq2Seq.py b/notebooks/RNN_Timeseries_Seq2Seq.py index 5bb7d6b..b3aacd1 100644 --- a/notebooks/RNN_Timeseries_Seq2Seq.py +++ b/notebooks/RNN_Timeseries_Seq2Seq.py @@ -62,11 +62,11 @@ from tqdm.auto import tqdm import pytorch_lightning as pl # - -from seq2seq_time.data.dataset import Seq2SeqDataSet +from seq2seq_time.data.dataset import Seq2SeqDataSet, Seq2SeqDataSets from seq2seq_time.predict import predict import logging, sys -logging.basicConfig(stream=sys.stdout, level=logging.INFO) +# logging.basicConfig(stream=sys.stdout, level=logging.INFO) # ## Parameters @@ -153,14 +153,19 @@ def get_smartmeter_df(indir=Path('../data/raw/smart-meters-in-london'), max_file dfs = get_smartmeter_df() # Just get the first one for now -df = next(iter(dfs)) +dfs = list(dfs) # df = df.resample(freq).first().dropna() # Where empty we will backfill, this will respect causality, and mostly maintain the mean -df = df.tail(int(max_rows)).copy() # Just use last X rows -df +# df = df.tail(int(max_rows)).copy() # Just use last X rows +# df = pd.concat(dfs, 0) +df = dfs[0] # - + + + + df.describe() # + @@ -223,7 +228,7 @@ print(ds_test) # we can treat it like an array ds_train[0] len(ds_train) -ds_train[0][2][-2] +ds_train[0] # + # We can get rows @@ -247,7 +252,7 @@ x_future.tail() # + -class Seq2SeqNet(nn.Module): +class Seq2SeqLSTMDecoder(nn.Module): def __init__(self, input_size, input_size_decoder, output_size, hidden_size=32, lstm_layers=2, lstm_dropout=0, _min_std = 0.05): super().__init__() self._min_std = _min_std @@ -273,13 +278,9 @@ class Seq2SeqNet(nn.Module): x = torch.cat([context_x, context_y], -1) _, (h_out, cell) = self.encoder(x) - ## Shape - # hidden = [batch size, n layers * n directions, hid dim] - # cell = [batch size, n layers * n directions, hid dim] # output = [batch size, seq len, hid dim * n directions] outputs, (_, _) = self.decoder(target_x, (h_out, cell)) - # outputs: [B, T, num_direction * H] mean = self.mean(outputs) log_sigma = self.std(outputs) @@ -291,6 +292,45 @@ class Seq2SeqNet(nn.Module): # - +# ## Lightning + +# + +import pytorch_lightning as pl + +class PL_Seq2Seq(pl.LightningModule): + def __init__(self, **hparams): + super().__init__() + self._model = Seq2SeqLSTMDecoder(**hparams) + + def forward(self, x_past, y_past, x_future, y_future=None): + """Eval/Predict""" + y_dist = self._model(x_past, y_past, x_future) + return y_dist + + def training_step(self, batch, batch_idx): + x_past, y_past, x_future, y_future = batch + y_dist = self.forward(*batch) + loss = -y_dist.log_prob(y_future).mean() + self.log_dict({'loss/train':loss}) + return loss + + def validation_step(self, batch, batch_idx): + x_past, y_past, x_future, y_future = batch + y_dist = self.forward(*batch) + loss = -y_dist.log_prob(y_future).mean() + self.log_dict({'loss/val':loss}) + return loss + + def configure_optimizers(self): + return torch.optim.Adam(self.parameters(), lr=1e-4) + + + +# - + +from torch.utils.data import DataLoader, random_split +from pytorch_lightning.loggers import CSVLogger +from pl_bolts.callbacks import PrintTableMetricsCallback @@ -298,132 +338,33 @@ class Seq2SeqNet(nn.Module): input_size = x_past.shape[-1] output_size = y_future.shape[-1] -model = Seq2SeqNet(input_size, input_size, output_size, - hidden_size=32, - lstm_layers=2, - lstm_dropout=0).to(device) -model +model = PL_Seq2Seq(input_size=input_size, + input_size_decoder=input_size, + output_size=output_size, + hidden_size=16, + lstm_layers=1, + lstm_dropout=0.5).to(device) + +logger = CSVLogger("logs", name="seq2seq") +trainer = pl.Trainer(gpus=1, + logger=logger) +dl_train = DataLoader(ds_train, + batch_size=batch_size, + shuffle=True, + num_workers=4) +dl_test = DataLoader(ds_test, batch_size=batch_size, num_workers=4) +trainer.fit(model, dl_train, dl_test) # - -# Init the optimiser -optimizer = optim.Adam(model.parameters(), lr=1e-3) - -# + - -past_x = torch.rand((batch_size, window_past, input_size)).to(device) -future_x = torch.rand((batch_size, window_future, input_size)).to(device) -past_y = torch.rand((batch_size, window_past, output_size)).to(device) -future_y = torch.rand((batch_size, window_future, output_size)).to(device) -output = model(past_x, past_y, future_x, future_y) -print(output) - -from torchsummaryX import summary -summary(model, past_x, past_y, future_x, future_y ) -1 - - -# - - -# ## Training - -# + -def train_epoch(ds, model, bs=128): - model.train() - - training_loss = [] - - # Put data into a torch loader - load_train = torch.utils.data.dataloader.DataLoader( - ds, - batch_size=bs, - pin_memory=False, - num_workers=num_workers, - shuffle=True, - ) - - for batch in tqdm(load_train, leave=False, desc='train'): - # Send data to gpu - x_past, y_past, x_future, y_future = [d.to(device) for d in batch] - - # Discard previous gradients - optimizer.zero_grad() - - # Run model - y_dist = model(x_past, y_past, x_future, y_future) - - # Get loss, it's Negative Log Likelihood - loss = -y_dist.log_prob(y_future).mean() - - # Backprop - loss.backward() - optimizer.step() - - # Record stats - training_loss.append(loss.item()) - - return np.mean(training_loss) - - -def test_epoch(ds, model, bs=512): - model.eval() - - test_loss = [] - load_test = torch.utils.data.dataloader.DataLoader(ds, - batch_size=bs, - pin_memory=False, - num_workers=num_workers) - for batch in tqdm(load_test, leave=False, desc='test'): - # Send data to gpu - x_past, y_past, x_future, y_future = [d.to(device) for d in batch] - with torch.no_grad(): - # Run model - y_dist = model(x_past, y_past, x_future, y_future) - # Get loss, it's Negative Log Likelihood - loss = -y_dist.log_prob(y_future).mean() - - test_loss.append(loss.item()) - - return np.mean(test_loss) - - -def training_loop(ds_train, ds_test, model, epochs=1, bs=128): - all_losses = [] - try: - test_loss = test_epoch(ds_test, model) - print(f"Start: Test Loss = {test_loss:.2f}") - for epoch in tqdm(range(epochs), desc='epochs'): - loss = train_epoch(ds_train, model, bs=bs) - print(f"Epoch {epoch+1}/{epochs}: Training Loss = {loss:.2f}") - - test_loss = test_epoch(ds_test, model) - print(f"Epoch {epoch+1}/{epochs}: Test Loss = {test_loss:.2f}") - print("-" * 50) - - all_losses.append([loss, test_loss]) - - except KeyboardInterrupt: - # This lets you stop manually. and still get the results - pass - - # Visualising the results - all_losses = np.array(all_losses) - plt.plot(all_losses[:, 0], label="Training") - plt.plot(all_losses[:, 1], label="Test") - plt.title("Loss") - plt.legend() - - return all_losses - - -# - - -# this might take 1 minute per epoch on a gpu -training_loop(ds_train, ds_test, model, epochs=8, bs=batch_size) -1 +df_hist = pd.read_csv(trainer.logger.experiment.metrics_file_path) +df_hist['epoch'] = df_hist['epoch'].ffill() +df_histe = df_hist.set_index('epoch').groupby('epoch').mean() +df_histe[['loss/train', 'loss/val']].plot() +df_histe # ## Predict # -ds_preds = predict(model, ds_test, batch_size, device=device, scaler=output_scaler) +ds_preds = predict(model.to(device), ds_test, batch_size, device=device, scaler=output_scaler) ds_preds @@ -441,6 +382,12 @@ def plot_prediction(ds_preds, i): s = d.y_pred_std yt = d.y_true now = d.t_source.squeeze() + + + plt.figure(figsize=(12, 4)) + + plt.scatter(xf, yt, label='true', c='k', s=6) + ylim = plt.ylim() # plot prediction plt.fill_between(xf, yp-2*s, yp+2*s, alpha=0.25, @@ -456,10 +403,10 @@ def plot_prediction(ds_preds, i): c='k', s=6 ) - plt.scatter(xf, yt, label='true', c='k', s=6) # plot a red line for now plt.vlines(x=now, ymin=0, ymax=1, label='now', color='r') + plt.ylim(*ylim) now=pd.Timestamp(now.values) plt.title(f'Prediction NLL={d.nll.mean().item():2.2g}') diff --git a/seq2seq_time/data/dataset.py b/seq2seq_time/data/dataset.py index 69d786a..e574fcf 100644 --- a/seq2seq_time/data/dataset.py +++ b/seq2seq_time/data/dataset.py @@ -119,18 +119,12 @@ class Seq2SeqDataSets(torch.utils.data.Dataset): raise IndexError def get_rows(self, i): - """ - Output pandas dataframes for display purposes. - """ - x_cols = list(self.df.drop(columns=self.columns_target).columns) + ['tsp_days', 'is_past'] - x_past, y_past, x_future, y_future = self.get_components(i) - t_past = self.df.index[i:i+self.window_past] - t_future = self.df.index[i+self.window_past:i+self.window_past + self.window_future] - x_past = pd.DataFrame(x_past, columns=x_cols, index=t_past) - x_future = pd.DataFrame(x_future, columns=x_cols, index=t_future) - y_past = pd.DataFrame(y_past, columns=self.columns_target, index=t_past) - y_future = pd.DataFrame(y_future, columns=self.columns_target, index=t_future) - return x_past, y_past, x_future, y_future + l = 0 + for d in self.datasets: + l += len(d) + if i < l: + return d.get_rows(i) + raise IndexError def __len__(self): l = 0