{ "cells": [ { "cell_type": "markdown", "id": "9a9ada08-c9f0-466f-91a0-265fa539f9f5", "metadata": {}, "source": [ "# [Predict the strength of concrete](https://app.datacamp.com/workspace/w/6062fa1f-85aa-48e2-a156-66a5fba7ff2a)\n", "\n", "## 📖 Background\n", "\n", "Concrete is the most widely used building material in the world. It is a mix of cement and water with gravel and sand. It can also include other materials like fly ash, blast furnace slag, and additives. \n", "\n", "The compressive strength of concrete is a function of components and age, the team is testing different combinations of ingredients at different time intervals. \n", "\n", "Find a simple way to estimate strength to predict how a particular sample is expected to perform.\n", "\n", "The objective is to answer:\n", "1. The average strength of the concrete samples at 1, 7, 14, and 28 days of age.\n", "2. The coefficients of regression model using the formula that provided us:\n", "![Strength Equation](str_eq.png)" ] }, { "cell_type": "markdown", "id": "10dcc269-3659-4851-99cd-f1ffb7f818aa", "metadata": {}, "source": [ "## 💾 The data\n", "The team has already tested more than a thousand samples ([source](https://archive.ics.uci.edu/ml/datasets/concrete+compressive+strength)):\n", "\n", "### Compressive strength data:\n", "- \"cement\" - Portland cement in kg/m3\n", "- \"slag\" - Blast furnace slag in kg/m3\n", "- \"fly_ash\" - Fly ash in kg/m3\n", "- \"water\" - Water in liters/m3\n", "- \"superplasticizer\" - Superplasticizer additive in kg/m3\n", "- \"coarse_aggregate\" - Coarse aggregate (gravel) in kg/m3\n", "- \"fine_aggregate\" - Fine aggregate (sand) in kg/m3\n", "- \"age\" - Age of the sample in days\n", "- \"strength\" - Concrete compressive strength in megapascals (MPa)\n", "\n", "***Acknowledgments**: I-Cheng Yeh, \"Modeling of strength of high-performance concrete using artificial neural networks,\" Cement and Concrete Research, Vol. 28, No. 12, pp. 1797-1808 (1998)*." ] }, { "cell_type": "markdown", "id": "0864ae32-db01-4bad-b6f3-3b506daf0ba4", "metadata": {}, "source": [ "## Import Libraries" ] }, { "cell_type": "code", "execution_count": 1, "id": "7f0964c3-2705-41df-af08-d8a8efe2378c", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.preprocessing import StandardScaler, OrdinalEncoder\n", "from sklearn.model_selection import train_test_split, cross_val_score, KFold\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.linear_model import LinearRegression, LogisticRegression\n", "from sklearn.neighbors import KNeighborsRegressor\n", "from sklearn.tree import DecisionTreeRegressor\n", "from sklearn.ensemble import AdaBoostRegressor, RandomForestRegressor, BaggingRegressor, GradientBoostingRegressor\n", "from sklearn.svm import SVR\n", "from sklearn.model_selection import GridSearchCV\n", "import tensorflow as tf\n", "from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "markdown", "id": "30988536-8315-4f6c-b131-7bbe2183e440", "metadata": {}, "source": [ "## Load Data" ] }, { "cell_type": "code", "execution_count": 2, "id": "40251159-3eea-47f8-bfb4-09e38d5ced65", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cementslagfly_ashwatersuperplasticizercoarse_aggregatefine_aggregateagestrength
0540.00.00.0162.02.51040.0676.02879.986111
1540.00.00.0162.02.51055.0676.02861.887366
2332.5142.50.0228.00.0932.0594.027040.269535
3332.5142.50.0228.00.0932.0594.036541.052780
4198.6132.40.0192.00.0978.4825.536044.296075
\n", "
" ], "text/plain": [ " cement slag fly_ash water superplasticizer coarse_aggregate \\\n", "0 540.0 0.0 0.0 162.0 2.5 1040.0 \n", "1 540.0 0.0 0.0 162.0 2.5 1055.0 \n", "2 332.5 142.5 0.0 228.0 0.0 932.0 \n", "3 332.5 142.5 0.0 228.0 0.0 932.0 \n", "4 198.6 132.4 0.0 192.0 0.0 978.4 \n", "\n", " fine_aggregate age strength \n", "0 676.0 28 79.986111 \n", "1 676.0 28 61.887366 \n", "2 594.0 270 40.269535 \n", "3 594.0 365 41.052780 \n", "4 825.5 360 44.296075 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv('data/concrete_data.csv')\n", "df.head()" ] }, { "cell_type": "markdown", "id": "90a8a67f-1b24-4d00-af31-bf179f76b885", "metadata": {}, "source": [ "## Data Preprocessing\n", "\n", "### Data Size and Structure\n", "\n", "- Dataset comprises of 1030 observations.\n", "- 8 features and 1 target variable `strength`.\n", "- All columns are numerical\n", "- No null values" ] }, { "cell_type": "code", "execution_count": 3, "id": "643e657c-22b6-4505-b453-6e4e8f29677f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape: (1030, 9) \n", "\n", "\n", "RangeIndex: 1030 entries, 0 to 1029\n", "Data columns (total 9 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 cement 1030 non-null float64\n", " 1 slag 1030 non-null float64\n", " 2 fly_ash 1030 non-null float64\n", " 3 water 1030 non-null float64\n", " 4 superplasticizer 1030 non-null float64\n", " 5 coarse_aggregate 1030 non-null float64\n", " 6 fine_aggregate 1030 non-null float64\n", " 7 age 1030 non-null int64 \n", " 8 strength 1030 non-null float64\n", "dtypes: float64(8), int64(1)\n", "memory usage: 72.5 KB\n" ] } ], "source": [ "print(f'Shape: {df.shape} \\n')\n", "df.info()" ] }, { "cell_type": "markdown", "id": "0d90e6c3-eb12-4ae7-8a5d-6e20afc4c163", "metadata": {}, "source": [ "### Duplicated Data\n", "A small 2.43% of the dataset are duplicated. I decided to drop these, so now the dataset has 1005 observations." ] }, { "cell_type": "code", "execution_count": 4, "id": "bbb3bde7-0e78-4bd1-87b7-f26932d0fd52", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Duplicated percentage: 2.43%\n", "df shape after removing duplicates: (1005, 9)\n" ] } ], "source": [ "dup_perc = df.duplicated().sum() / len(df) * 100\n", "print(f'Duplicated percentage: {np.round(dup_perc, 2)}%')\n", "df.drop_duplicates(inplace=True)\n", "print(f'df shape after removing duplicates: {df.shape}')" ] }, { "cell_type": "markdown", "id": "aaec1f84-fbe9-44e4-9393-9435bf2a4016", "metadata": {}, "source": [ "### Outliers\n", "\n", "Boxplots show that there are outliers in our data, but not many.\n", "We will be replacing these outliers with their median." ] }, { "cell_type": "code", "execution_count": 5, "id": "d7f08425-08c3-48a8-87be-013d3be2786d", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "sns.boxplot(data=df, orient=\"h\", palette=\"Set3\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "id": "464b6a04-691a-4a12-9e6c-c53a26f890fb", "metadata": {}, "outputs": [], "source": [ "for col_name in df.columns[:-1]:\n", " q1 = df[col_name].quantile(0.25)\n", " q3 = df[col_name].quantile(0.75)\n", " iqr = q3 - q1\n", " low = q1 - 1.5 * iqr\n", " high = q3 + 1.5 * iqr\n", " df.loc[(df[col_name] < low) | (df[col_name] > high), col_name] = df[col_name].median()" ] }, { "cell_type": "markdown", "id": "d2ceaa14-7e2f-4597-86ed-10f3f34458e4", "metadata": {}, "source": [ "### Summary Statistics\n", "\n", "Variance, skew, and kurtosis is also included.
\n", "We can see that all variables have skew are in asymmetric form." ] }, { "cell_type": "code", "execution_count": 7, "id": "61d09a65-7a7f-43de-951b-decb042f5bd0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countmeanstdmin25%50%75%maxvarskewkurtosis
cement1005.0278.629055104.345003102.000000190.680000265.000000349.00000540.00000010887.8796010.564997-0.432463
slag1005.071.36771185.2397400.0000000.00000020.000000141.30000342.1000007265.8133430.830465-0.524116
fly_ash1005.055.53507564.2074480.0000000.0000000.000000118.27000200.1000004122.5964360.497324-1.366457
water1005.0182.52129420.114500127.300000168.000000185.700000192.00000228.000000404.5930970.126521-0.076357
superplasticizer1005.05.7918465.3968510.0000000.0000006.1000009.9000023.40000029.1260010.514240-0.312220
coarse_aggregate1005.0974.37646877.579534801.000000932.000000968.0000001031.000001145.0000006018.584052-0.065242-0.583034
fine_aggregate1005.0771.62890578.821267594.000000724.300000780.000000822.00000945.0000006212.792066-0.335220-0.198316
age1005.032.11741327.6653331.0000007.00000028.00000028.00000120.000000765.3706631.3120080.876534
strength1005.035.25027316.2848082.33180823.52354233.79811444.8683482.599225265.1949600.395653-0.305402
\n", "
" ], "text/plain": [ " count mean std min 25% \\\n", "cement 1005.0 278.629055 104.345003 102.000000 190.680000 \n", "slag 1005.0 71.367711 85.239740 0.000000 0.000000 \n", "fly_ash 1005.0 55.535075 64.207448 0.000000 0.000000 \n", "water 1005.0 182.521294 20.114500 127.300000 168.000000 \n", "superplasticizer 1005.0 5.791846 5.396851 0.000000 0.000000 \n", "coarse_aggregate 1005.0 974.376468 77.579534 801.000000 932.000000 \n", "fine_aggregate 1005.0 771.628905 78.821267 594.000000 724.300000 \n", "age 1005.0 32.117413 27.665333 1.000000 7.000000 \n", "strength 1005.0 35.250273 16.284808 2.331808 23.523542 \n", "\n", " 50% 75% max var skew \\\n", "cement 265.000000 349.00000 540.000000 10887.879601 0.564997 \n", "slag 20.000000 141.30000 342.100000 7265.813343 0.830465 \n", "fly_ash 0.000000 118.27000 200.100000 4122.596436 0.497324 \n", "water 185.700000 192.00000 228.000000 404.593097 0.126521 \n", "superplasticizer 6.100000 9.90000 23.400000 29.126001 0.514240 \n", "coarse_aggregate 968.000000 1031.00000 1145.000000 6018.584052 -0.065242 \n", "fine_aggregate 780.000000 822.00000 945.000000 6212.792066 -0.335220 \n", "age 28.000000 28.00000 120.000000 765.370663 1.312008 \n", "strength 33.798114 44.86834 82.599225 265.194960 0.395653 \n", "\n", " kurtosis \n", "cement -0.432463 \n", "slag -0.524116 \n", "fly_ash -1.366457 \n", "water -0.076357 \n", "superplasticizer -0.312220 \n", "coarse_aggregate -0.583034 \n", "fine_aggregate -0.198316 \n", "age 0.876534 \n", "strength -0.305402 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc = df.describe().T\n", "desc['var'] = df.var(axis=0)\n", "desc['skew'] = df.skew(axis=0)\n", "desc['kurtosis'] = df.kurtosis(axis=0)\n", "desc" ] }, { "cell_type": "markdown", "id": "dcb2e04a-85c8-49aa-99c4-529100618704", "metadata": { "tags": [] }, "source": [ "## Exploratory Data Analysis" ] }, { "cell_type": "markdown", "id": "a326a037-17a1-4f82-b7c5-c490d58140aa", "metadata": {}, "source": [ "### Correlation matrix\n", "\n", "Let's look at the relationship between all the variables and their correlation.
\n", "From the heatmap, we observe target variable `strength` has a high positive correlation `cement` 0.49, `superplasticizer` 0.32, and `age` 0.5.
\n", "There is a strong negative correlation (-0.61) between `superplasticizer` and `water`." ] }, { "cell_type": "code", "execution_count": 8, "id": "cf29bd8a-2619-4d3c-a601-249bbf5011aa", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAHFCAYAAAA5eNVQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAADLI0lEQVR4nOzdd3gU1dfA8e/ZVNIgCSWE3uyUQEBUEEIHRfGHDZWiKIICioAioCDFjgpiw0IRRV/FgnSkCNJLIICI9JYESEiA9JC97x+7pFOT7IZwPs+TB3bmzsw5O7uzZ+/cmRVjDEoppZRSSqmCszg7AKWUUkoppUoKLa6VUkoppZQqJFpcK6WUUkopVUi0uFZKKaWUUqqQaHGtlFJKKaVUIdHiWimllFJKqUKixbVS6rokIv1E5LiIJIhIoLPjOU9ERovIzAIsv1NEWhZeRIW7fRFZISJPF9K2MtclIr1E5O+LtH1ARI7Y93dIYWxfKaXyo8W1UtcRETkoIm1yTbtoUXKF6zciUrsw1lWURMQN+ABoZ4zxMcbEOjumqyEi00RkXPZpxphbjTErnBRSju0X9ItCIXsf6G/f3+EFWdG18jpXSjmHFtdKqetRBcAT2FmUGxER13ymuRTlNtUFVaOI9/fl0teAUiWbFtdKqRxEJFhEZovISRE5ICIDs81rIiJrRSReRKJEZLKIuNvnrbQ322Y/9f6IiLQUkaMi8rKInLAv00VEOonIfyJySkSGX8767fONiAwUkf0iEiMi74lIvscxEfEQkY9EJNL+95F92g3AbnuzeBFZdoHlm4nIGnssR0Skl316aRGZYX9+DonIyPMx2M8CrBaRD0UkFhht713+TETmi0giEHax5zifOH4SkWgROS0iK0XkVvv0PsDjwMv25/sP+/TMsxMXeg7s887vm8HZ9s2TF4ghTES2Z3u8REQ2Znu8SkS6ZN++iHQAhgOP2OPblm2V1ezP01kRWSwiZS+wXX8RmWt/nuLs/698oefqAuvwEJEEwAXba3OffXphvs7znP2RbL3bV/oasG9/k4icEdvQpQ+uJGellHNpca2UymQvEv8AtgGVgNbAiyLS3t4kAxgElAXusM9/DsAYc7e9TX37qfcf7Y+DsPUSVwJeB74EngAaAc2B10SkxqXWn80DQCjQELgfeOoC6YwAmgINgPpAE2CkMeY/4FZ7mzLGmFb5PA/VgAXAx0A5+zq22md/DJQGagItgB5A9qL0dmA/tt7x8fZpj9n/7wus4eLPcW4LgDpAeWAL8B2AMWaK/f/v2p/vzpf7HGSbH2TPpRLQG/hERPzzWc86oI6IlBXbkJp6QLCI+IpIKWz7Y1X2BYwxC4E3gR/t8dXPNvsxbM9ZecAdGHKB3C3AVGy9zlWBZGDyBdrmyxiTaozxsT+sb4ypVUSv80u5ktfARGCiMcYPqAX835XkrJRyLi2ulbr+/GbvkYsXkXjg02zzGgPljDFjjDFpxpj92IrhRwGMMZuNMeuMMeeMMQeBL7AVmBeTDow3xqQDP2ArWCYaY84aY3YC/2Ar/C53/e8YY04ZYw4DHwHdLrDdx4ExxpgTxpiTwBtA90vEet5jwJ/GmFnGmHRjTKwxZqvYTuc/Crxqj/8gMCHXeiONMR/bc0i2T/vdGLPaGGMF6nKR5zg3Y8w39m2lAqOB+iJS+jLzuNRzkG6fn26MmQ8kADfmE0MysBG4G9uXom3AauAubMX7nisctz7VGPOffb3/h634z8P+vM82xiQZY85iK04v9Xq7HEXxOr+UK3kNpAO1RaSsMSbBGLOugNtWSjlQnvGASqkSr4sx5s/zD+zDHc7fvaEath7J+GztXbD3SoptSMUH2HoqvbAdQzZfYnuxxpgM+//PF5vHs81PBnyuYP1Hsv3/EBB8ge0G2+dfTtvcqgD78pleFnDLZ72VLhBfftMu+hxnZy/mxwMPYetBt2aL4/RFM7C51HMQa4w5l+1xEvZ9kY+/gJbAUfv/47AVnKn2x1ci+nK2KSJewIdAB+B8j7qviLhke01djaJ4nV/KlbwGegNjgH9F5ADwhjFmbgG3r5RyEO25VkpldwQ4YIwpk+3P1xjTyT7/M+BfoI79lPVwQApx+5ez/irZ/l8ViLzAuiKxFTGX0za3I9hOx+cWg61XMfd6j2V7bPJZLvu0Sz3H2T2GbehLG2zDN6rbp59/TvLbVnYFeQ5yO19c323//1/YiusWXLi4vlR8lzIYW0/67fbXw/khGQV9zRX26zwRWxFuC04kKJ82l/0aMMbsMcZ0wzZs5h3gZxHxvtpklVKOpcW1Uiq7DcBZEXlFREqJiIuI3CYije3zfYEzQIKI3AT0y7X8cWxjka/WpdYPMNR+oVsV4AXgQmNeZwEjRaSc/YK514HLvS3cd0AbEXlYRFxFJFBEGth7S/8PGG8fb1wNeOkK1guXfo6z88XWMxyLrXh7M9f8Sz3fBXkOcluDrdBtAmywD+mphm2M+coLLHMcqC4XuOj0MvhiO7MRLyIBwKirXE9uhf063wbcKiINRMQT2/Cdq96+iDwhIuXsQ0ji7ctYL7QypVTxosW1UiqTvXi8F9sY2APYemq/wtZrCrYLzx4DzmIbI5q7sB0NTLeP5374KkK41PoBfsd2in4rMA/4+gLrGgdsAiKA7dguBhx3gbY52Mdzd8LWc3rKvq3zF+QNwNZTuR/4G/ge+OZy1mtf96We4+xmYBvKcQzb2PTcY2+/Bm6xP9+/5bP8VT8H+cSdaF9+pzEmzT55LXDIGHPiAov9ZP83VkS2XMVmPwJKYXuO1gELr2IdeRT269x+kewY4E9gD7bXRUG23wHYab/LyUTg0Wzj95VSxZwYU9Czdkop5RgiYrCdqt/r7FiUUkqp/GjPtVJKKaWUUoVEi2ullFJKKVXiiMg3YvuRrB0XmC8iMklE9opIhIg0LIztanGtlLpmGGNEh4QopZS6TNOwXcNwIR2x/UhXHaAPtjsFFZgW10oppZRSqsQxxqzEdlH6hdwPzDA264AyIlKxoNvV4loppZRSSl2PKpHzB56OkvNHwa6K/kJjMZces/+6uZ3LfSHPOzsEh4rJSHR2CA7zkFtVZ4fgUB7XzbsWTst1lCwQwVlnh+Awdxg/Z4fgUH06xTg7BIfx/XxhYf7411UraI3jXq7Ws9iGc5w3xRgzpWBRFZwW10oppZRSyvGsGQVa3F5IF6SYPkbOX/2tTM5f3L0qOixEKaWUUkpdj+YAPex3DWkKnDbGRBV0pdpzrZRSSimlHM9Yi3T1IjILaAmUFZGjwCjADcAY8zkwH9uv8e4FkoAnC2O7WlwrpZRSSinHsxZtcW2M6XaJ+QYo9Au+tLhWSimllFIOZ4q459pZdMy1UkoppZRShUR7rpVSSimllOMV8bAQZ9HiWimllFJKOV4JHRaixbVSSimllHK8At7nurjS4loppZRSSjleCe251gsalVJKKaWUKiTac62UUkoppRxPL2hUhUVEGgDBxpj5zo4lu5FvfsDK1RsI8C/DbzM/d3Y4RaLvG31p3KoxqcmpTHhpAvt27MvTZuy3YwkoH4CLiws7Nuzg05GfYr1GDgCDxw7krlZNSUlO5Y1Bb7F7+3952kz67j0Cywfi6upC+PoI3h3+IVarlTq31GLY24Px8vYi6mgUrz0/lsSEJCdkcXGtR3enZlgD0pNTWTBkCsd3HMzTpsJt1ek04VlcPd3Zv3wrS0d/C8BdL/6Pet1akhR7FoBV7/0f+5dvI6h+Tdq/1RsAEVj90a/sWbTJYTldSIs3ulM9rAHnklNZPHgKJ/PJtXzd6rS153pw+Vb+GmXLtdnwbtRoE4I1/Rzxh06wZMgU0s7Y9mfZm6rQ6q2ncPcthbEafuj8Ohmp6Y5MLV/tR/egTlh90pPT+H3IF0Tnk2/F26pz34S+uHm6sWf5NhaNngFAhVuqcc/4p3D1cMOakcH8kVOJ3LYfgGpNb6b9692xuLmQfOos0x8Z58i0Lump0c8QEhZKWnIqk4d8xIEd+3PMd/d0Z/BnrxBUtSJWq5VNf27gu3dmZM6/4567eHhQNzBwcNcBJg6c4OgULinsje7UsL+WFw6ewokLvJY72F/LB5ZvZbn9tXzn4Aep3a4hxmpIij3DwsFfkHg8HnffUnSa2A/f4EAsri5s+mI+O39a6eDMLszllkZ4PtwPLBbSVy8kbdH/5dvONeQuSj37GolvDsB6eA+4uOL5+EAs1eqAMaT+3+dk/Bfh4Ogdo6Te51qLa+doAIRi+9nNYqNLp7Y81vU+ho9939mhFInGYY0JrhFM7+a9uSnkJvq/2Z9B9w3K0+6tfm+RZC8qR3wxgub3NuevOX85OtwrdmerplStUZn/3fUYtzW8hWFvvcST9/bN0+7VZ0dlFs3vfDmW1p1bsuT3ZYx8/2UmjvmULeu20fnRTnTv143P3/va0WlcVM2w+vjXCOLLFoOpGFKLtuN6MbPL6Dzt2o1/koXDviIqfB8PTh9KjZb1OLDC9uG06euFbJyS860Xs/soMzq/hsmw4l2+DL0WjGfvn1swGc478FcPq0+Z6kFMv3swQSG1aDW+Fz/ePzpPu7DxT7L0la+IDt/H/dOHUq1lPQ6tiODwqu2sfudHTIaVu159hMbPd2b1Wz8iLhbaT+zHohc/J2bXYTzL+GBNP+f4BHOpHVafwBpBTG4xmEohtbln3JN83WVUnnadxj/F3GFfcSx8L49Nf5naLeuzd8U22rzajZUTf2Hvim3UDqtPm1e7MePR8Xj4edFp3JN81+MdzkTG4hXo54TsLiwkrBEVawQzoMWz1Am5kT7j+vFql6F52s2Z8hs7127H1c2VUd+PJaRlQ8JXbCGoekX+9/xDjPzfKySeScQvsLQTsri4GmH18a8exDd32963bcb34vt8Xsttxj/Jklds79v/TR9K9Zb1OLgigk1fzGPNhJ8BCHmyHXe88AB/Dp9Kgx5tid1zjN+e+oBSAb48ueI9dv22Gmt6MbhITix4dnuepInDMXExeL06iXMR67BGHc7ZzqMUbq26kLF/V+Ykt2YdAUga2w/xLU2p/uNIensgGOPIDBzjGum4ulLX5ZhrEekhIhEisk1EvhWRciIyW0Q22v/usrcbLSLTRWSViBwSkf+JyLsisl1EFoqIm71dIxH5S0Q2i8giEalon75CRN4RkQ0i8p+INBcRd2AM8IiIbBWRR5z3TOQU2qAupf18nR1GkWnarilLZy8F4N/wf/Hx88G/vH+educLaxdXF9zc3DDXyAGtRftmzPt5EQA7tvyDb2kfAssH5mmXmD0/d1ewp1e1ZhW2rNsGwIaVmwi7p4VjAr8Ctds2YufsvwGICt+Hp5833uXL5GjjXb4M7j6liAq3nZXYOftv6rQLveh6z6WkZRbSrh5umc+JM9Vs14hd9lyjw/fh4eeNV65cvey5Rttz3TX7b2q1t+V6eNWOzJyit+zDJygAgGp31yVm1xFidtk+5FPiEzBW5yd8Y9tGbJu9CoBj4Xvx8PPCJ1e+PuXL4OFTimPhewHYNnsVN7ZrZJtpDO4+pQDw8PXi7Il4AOrefyf/LtzImchYAJJizxR9MlegcdvbWTF7OQB7wnfj5edNmVzHpbSUNHau3Q7AufRz7N+xj8CgsgC06daehTPmkXgmEYAzsacdGP3lqdWuEf9ke996XOB965HtffvP7L+pbX8tpyUkZ7Zz8/LIdkw2uHvb9rmbtycp8YlYzxWPYs1S/UasJ6IwMdGQcY5zG//Ctd4dedp53NeDtEU/Yc5lnTmyVKzKud22Y7E5exqTnGDrxS6JjLVgf8XUdVdci8itwEiglTGmPvACMBH40BjTGOgKfJVtkVpAK+A+YCaw3BhTF0gG7rEX2B8DDxpjGgHfAOOzLe9qjGkCvAiMMsakAa8DPxpjGhhjfiy6bFV2gUGBxETGZD6OiYqhrP0DKrdxM8cxK3wWSYlJ/D3vb0eFWCDlgspyPPJE5uMTkScpf4H8Jn3/Posj5pCYkMTSuSsA2P/fQVp0aAZA63tbUiG4fJHHfKV8g/wziySAs9Gn8K2QsxDxreDP2ehTWW2iTuEblNWmYY+29Fr4Jh3eewYPP6/M6RUb1OKpJW/z5KK3WDxiqlN7rQF8gvxJiMrKNSH6FD5B/nnbZMs1vzYAtzxyNwftPfdlagZhMHT59mW6zRtHo773FFEGV8Y3KOCy9u2ZPPvW9qVh0ZhvaTu8Gy+snUTbEY+x7B3boTWgRhCepb3p8cMInp47jnr/a+aAbC5fYFAgsZEnMx+fio4lsELeL8Xnefl5E9qmCRGrbcVXcI1gKtaoxLjZ7/Dmr+/RoEXDIo/5SvkE+XM2Kue+ze+1nON9m6vNXUMfos+6idzc5U7WTJgNQPi0JQTUDubZTZPpufgtlo/+ttj07lr8A7HGZe1Xa3wM4p9zv1qq1Eb8y5GxY0OO6daj+3Gt1xQsFiSwAi5V62DxL+eQuFXhuO6Ka2yF8k/GmBgAY8wpoA0wWUS2AnMAPxHxsbdfYIxJB7YDLsBC+/TtQHXgRuA2YIl9+ZFA5Wzb+8X+72Z7e3UNGPnESB4PfRw3dzfq31Xf2eEUuoGPDaFjyAO4u7sT2sz2YTzmpbd5sOcDzFj4JV4+XqSnOX8MbmELn/knU+5+iWkdR5B4Ip6w1x7PnBe1dR/ftB3GjPtep+lznXHxcHNipIWncf/7sJ6zsvvX1QBYXFwIDr2BhQM/5aeuY6jVPpQqd93q5CgLrtETbVg0diYT7xjI4jEz6fzuMwBYXF2oeFsNZj35Pt91f5vmAx8goEaQk6O9OhYXC4M+HsL8qXM5ceQ4YDsDVbF6RUY9MpyPBr5P37efx8vP28mRFr7V7/3ElKYvsOu3NYT0agtA9RZ1OfnPIb4I7c+3HUbQekyPzLMXxZ4IHg/1IXX2l3lmpa9ZhIk/iderH+PxcF8y9v9TYodPYM0o2F8xpWOubSxAU2NMSvaJIgKQCmCMsYpIusk6H2XF9vwJsNMYk/d8j02q/d8MLvP5FpE+QB+ATyeM4+ke3a4gFZXdvT3vpUO3DgD8t+0/ygZn9eSWrViWmOiYCy1Kemo66xavo2m7poSvCi/yWK/GQ70eoMvj9wLwz9Z/c/Q2lw8ux4mL5JeWmsZfi/6mRftmbFi5iUN7DzOg22AAqtasTLPWF3pJO1ZIjzbUezQMgOiI/fgFB3LMPs83KICzx+NytD97PC6zNxPAt2IAZ6NtbZJisoYEbJu1nK7fDM6zvVN7I0lLSqHcDZWJ3n6gkLO5uHo92nBbN1uuxyP241Mxq6fLJyiAhOicuSZEx2UO98ivzc0PNqdG6xB+6fZW1jJRpzi2YTcpcQkAHFy+jXK3VefI6p1FktPFhPZoS0P7vo2079vzLrRv/fLsW1tvZ/2uzTMvbvxn3no6v2Mrrs9GnWJfXALpyamkJ6dyeMO/VLi5KqcORBdpbhfToUcnWj/aDoB9EXsIDC4H2MbcBgQFEns8Nt/l+r7dn6gDkcz7Zk7mtNioGPZs/Y+McxmcOHKcqAORVKxekX0Re4s8j4tp0KMNdbtlvW99K+bct/m9lnO8b/NpA7Dr1zX8b/oQ1nzwC7c91IINn/0BQPyh45w+cpKAWhWJ3rY/z3KOZo2LxS1bb7OlTFlMXLb96lEKS3A1vF56FwDx86fUc6NJ/nQ01sN7SP1pSmZTr6EfYD1xjBKpGA/tKIjrsed6GfCQiAQCiEgAsBgYcL6B/W4el2s3UE5E7rAv62YfenIxZ4ELDm42xkwxxoQaY0K1sC6YudPn0r9Df/p36M/aRWtp3bU1ADeF3ETi2UTiTuQ8eHt6eWaOw7a4WGjcujFH9x51eNyX66dpv/J429483rY3Kxau4p4H2wNwW8NbSDiTSOyJnB/SpbxKZY7DdnFxoVmbOzi41zb21j+wDGD7UvnUCz2Y/e3vjkvkIsJn/Mn0TiOY3mkEexZv5tauttP6FUNqkXo2iUT72NrzEk/Ek5aQTMWQWgDc2rUZe5dsBsgxzvOG9qHE7Lbt29JVyiEutsOhX6VAAmsFc/roSRwtYsaffN9xBN93HMG+RZu52Z5rkD3XpFy5JtlzDbLnenPXZuxfbMu1Wot6NOp3L3/0/oBzKWmZyxxaGUHZG6vg6umOuFio1PQmTu1xzgf3phlLmNJpOFM6DWf34k3U79ocgEohtUk9m0xCrnwTTsSTmpBMpZDagK2g3m3ft2dPxFGt6c0A1LjrVmIP2orn3Us2U7XxDYiLBVdPdyo1qEXM3kgHZZi/hTPmM7TTiwzt9CIbFq+nZVdbEVon5EaSziYRfyJvUfnokMfx8vVi6htf5Zi+YfF6bm1aFwBff18q1gjm+OHjRZ/EJWyd8SffdhzBtx1HsHfRZm65jPdtarb37S1dm7HP/louU71CZrva7Rpyal8UAGciY6hqP+viVdYP/1oVOX34BMWB9dBuLOWDkcAK4OKKa+MWnItYl9UgJYnEIY+QOKIniSN6knHg38zCGjcPcPcAwOXmEIw1I++FkCWF1Vqwv2Lquuu5NsbsFJHxwF8ikgGEAwOBT0QkAttzshLIe5uF/NeXJiIPApNEpLR9+Y+Ai3UDLQeG2YeRvFVcxl0PHfU2G8MjiI8/Q+suT/Bc7+507dze2WEVmo3LNtK4VWO++fsbUpJT+HDwh5nzJi+cTP8O/fH08mT0N6Nxc3dDLELEmgjmzZznxKgv3+ql67ir9R38umYWKcmpjBmU1Vv53ZKvebxtb0p5efLBtDdxc3fHYhE2rQnnlxm2Irp9lzY82OsBAFYsWMkfPxSrm9kAsH/ZVmqG1eeZlRM4l5zGgiFZvTs9549neqcRACwZOY2OE/rYbum1Yhv7l9vGp7Z89VHK31INYwxnjsawaPg3AFQKvYGuz3UmIz0DjGHxyGkk23t2neXgsq1UD6tPz1W2XJdky/WxBeP5vqMt1+Ujp9HWnuuh5ds4eD7XsT1xcXflge+GARAdvpdlw6eSejqJLV8t4NG5YzDGcHD5Ng4u2+rw/HLbs2wrtcMa0H/lB6QnpzFnyBeZ8/rMf5MpnYYDMH/kVO63365t74pt7LXnO/eVr2g/ugcWFwsZqenMG2YrQmP2RrL3rwj6LnobY7US/sMKTv5XfL4wb1m2iYZhjZi88gtSk1P5dMikzHnvzf+IoZ1eJCAokAcHPMLRvUd4d57tuLVwxjyW/rCErX9tof7dDfjwz8lYM6x8++Y0EuLPOiudfB2wv297r5pAenIai7K9lrsvGM+39tfy0pHT6HD+fbt8Gwfs+7b5sEcIqFURYzWcORbDn69OBWDdpN/oMOFZeix+CxFY9daPTn/fZrJaSfnxU7wGjrfdim/NYqxRh3Dv3J2MQ3vIyF5o5yJ+ZfAaMB5jrJj4WFKmvufAwFVhkGvlTgjXq/SY/dfNDrov5Hlnh+BQMRmJzg7BYR5yq+rsEBzK47p518JpuY6SBSIoXoVrUbrDFK/bFha1Pp0uPIyupPH9fKE4OwaA1B1LCnQA8bitbbHII7frrudaKaWUUkoVA8V4aEdBaHGtlFJKKaUczpjie8ePgtDiWimllFJKOZ7eLUQppZRSSil1MdpzrZRSSimlHE/HXCullFJKKVVISuiwEC2ulVJKKaWU4xXjnzAvCC2ulVJKKaWU45XQnmu9oFEppZRSSqlCoj3XSimllFLK8fSCRqWUUkoppQpJCR0WosW1UkoppZRyvBLac61jrpVSSimllCok2nOtlFJKKaUcr4T2XGtxXczdF/K8s0NwmDnhnzg7BIe69zrat41S0p0dgkMdc3VzdggOs8zltLNDcKgMjLNDcJjr7dT2yl/9nR2Cw9zzubMjsDGmZN7n+np77yillFJKqeLAai3Y32UQkQ4isltE9orIsHzmVxWR5SISLiIRItKpoGlpz7VSSimllHK8Ir5biIi4AJ8AbYGjwEYRmWOM+Sdbs5HA/xljPhORW4D5QPWCbFd7rpVSSimlVEnUBNhrjNlvjEkDfgDuz9XGAH72/5cGIgu6Ue25VkoppZRSjlf0FzRWAo5ke3wUuD1Xm9HAYhEZAHgDbQq6Ue25VkoppZRSjmesBfoTkT4isinbX5+riKIbMM0YUxnoBHwrIgWqj7XnWimllFJKOV4Be66NMVOAKRdpcgyoku1xZfu07HoDHezrWysinkBZ4MTVxqU910oppZRSyvEK2HN9GTYCdUSkhoi4A48Cc3K1OQy0BhCRmwFP4GRB0tLiWimllFJKlTjGmHNAf2ARsAvbXUF2isgYEbnP3mww8IyIbANmAb2MMQW6ob0OC1FKKaWUUo7ngF9oNMbMx3Z7vezTXs/2/3+Auwpzm1pcK6WUUkopx9OfP1dKKaWUUqqQFPGPyDiLjrlWSimllFKqkGjPtVJKKaWUcjwdFqIuRkRWAEOMMZucHcuV6PtGXxq3akxqcioTXprAvh378rQZ++1YAsoH4OLiwo4NO/h05KdYS8AbYuSbH7By9QYC/Mvw28zPnR1Ooej3Rl+atGpMin1/7s1nf47PtT8n2/dn83ua0X3QE1SpU4WBnV9kT8QeJ2Rw+QLC6nPDuF6Ii4XI75Zx6OPfc8wv0/Rm6oztic8tVdn57EROzF0PgGflstSdOgSxCOLqwtGvF3Jsxp/OSOGiglvWo/GY7ojFwt5ZK9jxyR855lvcXWk2sS8BdWuQGneWlf0mk3g0hsAGNbnj3d62RgLbJvzKkYW2w9L/1n1IekIKxmrFei6D+Z1ez73ZYuOZN/rQKCyU1ORUJg7+iP25Xsvunh688tkwgqoFYbVa2fjnBma8PR2AssHlePGDQXj7eWNxsTDj7elsXl58D8193niWUHuuHw3+MM9x2MPTg2GfvZqZ64Y/NzD97WkAlKtUjhfffxG/gNIkxJ/l/RfeJzY61glZXFzLN7pTI6wB6cmpLB48hRM7DuZpU75uddpPeBZXT3cOLN/KilHfAnDH4Aep1a4hxmpIjj3DosFfkHg8nspNb+a+rwZx+ojtrml7F25k/cTfHJjVxZULq88t43ogLhaOfLecfR/nvANcQNObuGVsD3xvqUr4s5OInrshc17jWcPwb1SbUxt2s+mJ9xwduuOU0GEhWlxfxxqHNSa4RjC9m/fmppCb6P9mfwbdNyhPu7f6vUVSQhIAI74YQfN7m/PXnL8cHW6h69KpLY91vY/hY993diiFonFYYyrVCOZJ+/4c8GZ/Xshnf47Ptj9fy7Y/D+4+xJg+Yxn49kBHh37lLMKNbz9F+MPjSY2MpfGit4hZtInE/7J+GyDlWAy7XviUqv0651g09Xgcm+4ZiUk7h4uXB7f/9T4nF20m7Xico7O4ILEIt4/vyZJub5MUdYpO88dwZPFmTu+JzGxTp1tLUk8n8luzwVS/rymNRjzKyn6Tif/3KPM6vobJsFKqfBnuXTKeo0u2YDJsH2KLHxpPalyCs1K7LI3CQqlYPZi+d/fhhpAb6Tf+OYbePzhPu9+m/ML2tdtxdXNlzKzxNGzZiC0rNvPwwEf4e+4qFs5cQJU6VXht2mj63NXbCZlcWmhYKMHVg+lz9zPcGHIjz41/nsH3v5Sn3S9TfmH72ghc3VwZP2s8jVo2YvOKzfQe+TRLZy9j2c9LqXdnPXoO68UHL05wQiYXVj2sPmWqBzH17sEEhdSi1fhe/HD/6DztWo9/kiWvfEV0+D66TB9K9Zb1OLgigs1fzGPthJ8BaPBkO5q+8ABLh08F4NjG3fz+ZPHKFwCLcOvbT7L+4TdJiYyl2aLxHF+0mYRsx6jkYzFse+Fzava7J8/i+z/9A5dSHlTt0dqRUTteCeioy4+Oub4KIuItIvNEZJuI7BCRR3LN/8z+M5w7ReSNbNM7ici/IrJZRCaJyFzHR5+labumLJ29FIB/w//Fx88H//L+edqdL8RcXF1wc3OjgLd/LDZCG9SltJ+vs8MoNHe0a8qf2fant58PAZfYn65ubmDfn0f2HuHo/tw/XFU8+TWsTfKB46QcOoFJz+D4b2so26FxjjYpR06S8M9hTK6Dt0nPwKSdA0A83BBL8TsMBobU4uzB4yQcPok1PYODv6+jSvtGOdpUadeQfT+tAuDQvA0ENbsVgIyUtMxC2sXDDa7Bt2uTdrezfPYyAP4L3423n3eeY1NaSirb124H4Fz6Ofbv2EdgxbIAGGPw8vUCwMvXm7jjpxwY/ZW5vV1Tltlz3X2BXFNTUtm+NgKw5bpvxz7K2nOtUqcKEau3ARCxJoKmbZs6MPrLU6tdI3bN/huA6PB9ePh5412+TI423uXL4O5TiuhwW6/9rtl/U6t9KABpCcmZ7dy8PK6Jz6AyDWuTdCCaZPsxKvK3tVToEJqjTfKRGM7+cxhjzZtP7KqdnMuWd4lV9D8i4xTF71Pl2tABiDTG1DfG3AYszDV/hDEmFKgHtBCRevaf0/wC6GiMaQSUc2zIeQUGBRITGZP5OCYqhrJBZfNtO27mOGaFzyIpMYm/5/3tqBDVFSgbFMjJXPsz8AL7c/zMcfwYPovkxCRWXYP70zMogJTIrFPfqZGxeATl/SJxIR7BgTRZ/i7NtnzKocm/F6teawCvIH8SI7MKwqSoU3jlyq9UkD9J9jYmw0r6mSQ8/H0AKBtSi/uWvU3npW+xbtjUzGLbGEObWcO4Z8FY6jwe5qBsrlxgUCAxUdley9GxBAYFXrC9t583jds0IWL1VgB++PB7WjwQxtfrp/H69NFMGVV8h33Zcs36MbjY6JhL5tqkze1stRfUB/45wJ0d7wTgjg534uXrhW+Z4tVp4BPkz9morPdrQvQpfHK9nn2C/EmIPnXBNncOfYin103kpi53snbC7MzpFRvW5omF4+kyfSiBN1QqwiyujGeQP8nZjlEpkbF4XsExSl3btLi+OtuBtiLyjog0N8aczjX/YRHZAoQDtwK3ADcB+40xB+xtZl1o5SLSx97zvelIwpGiiP+KjXxiJI+HPo6buxv176rv7HBUAY14YiTd7PuzwXW4P1MjY9kQ9jJrmr5A0CMtcC9X2tkhFaqY8H3MaTWM+Z1ep27/zlg83ABY+MBY5nUYydIn3uPGXm0of/uNTo604CwuFgZ/PJS5U+dw/PBxAJrf14JlPy2l9+29GNNzNIM+GoyIODnSgrO4WBj68cvMmTqH44ejAfhm/NfcdntdJs6fRN2mtxETFVMironJbc17P/FV0xf497c1NOjVFoATOw7y9R0vMrPDCLZOW0znL/MOg1PFnNVasL9iSsdcXwVjzH8i0hDoBIwTkaXn54lIDWAI0NgYEyci07D9Tv2VrH8KMAWgY5WOhXr+696e99KhWwcA/tv2H2WDs3o2y1YsS0x0zIUWJT01nXWL19G0XVPCV4UXZljqKnXueS8ds+3Pcrn2Z+wl9ufaxeu4o11Ttlxj+zMl+hSewVm9ex7BgaRGX3nvc9rxOBL/PUKZ22/KvOCxOEiKjsM7OCDzsVfFAJJy5ZccHYdXcABJUacQFwtufl55xlKf3htJelIK/jdWJjbiAMn2daTEnuHIgs2UbVCLE+t3F31Cl6FTj3to2609AHsj9mQOewDbWZkLXaT3/NsDiDoYyR9fZ10s1vbRtrzRfRQAu7f8i5uHO34BfpyOzd0P4hz39LiH9vb37Z6I/yhbMetEZmBQ2QvmOuDtAUQejGTO11kX7546foo3nx0PgKeXJ3d2vIvEM4lFGP3lqd+jDbd1s50dOR6xH9+KWe9Xn6AAEnK9nhOi4/AJCrhoG4B/f11Dl+lDWPvBLzmGixxcvg3LuF54+vuQUgyuKUiJjqNUtmOUZ3AgKVdxjCrxinGBXBDac30VRCQYSDLGzATeAxpmm+0HJAKnRaQC0NE+fTdQU0Sq2x/nGKftKHOnz6V/h/7079CftYvW0rqr7WKJm0JuIvFsInEncr75Pb08M8f/WVwsNG7dmKN7jzo8bpW/P6bP5bkO/XmuQ3/WLFpLm2z7M+lsIqfy2Z8B2fZnk9aNOXIN7s+z4fvwqhmEZ9VyiJsLFbrcScyiy7sbhEfFACyetp5c19LelGlyI4n7Ii+xlGPFbt2Pb40gfKqUw+LmQvX7m3Jk8ZYcbY4s3kKth5oDUO2eJkSv/gcAnyrlEBfbod27UiClawWTcOQkrqU8cPW2fc93LeVBxRa3Eb+7+Oz7+TPmMajjQAZ1HMi6RWsJ69oKgBtCbiTxbFKeYxPA40OewMvXi69Gf5lj+sljJ6lnPyNTuXZl3D3cik1hDTBvxjwGdhzAwI4DWLtoHa3sud4YciNJ+RyHAZ4Y0h0vX2++HD0lx3Q/f7/MXvmHnn+YJT8uKfoELsO2GX/yXccRfNdxBPsWbebmrs0ACAqpRdrZJBJPxOdon3ginrSEZIJCagFwc9dm7Fu8GYAy1StktqvVriFx+6IA8Mp2xqlC/ZqIRYpFYQ1wOnwf3jWDKGU/RgV3uYPjizY7O6zix5iC/RVT2nN9deoC74mIFUgH+gHvAxhjtolIOPAvcARYbZ+eLCLPAQtFJBHY6JTIs9m4bCONWzXmm7+/ISU5hQ8Hf5g5b/LCyfTv0B9PL09GfzMaN3c3xCJErIlg3sx5Toy68Awd9TYbwyOIjz9D6y5P8Fzv7nTt3N7ZYV21Dfb9OfXvb0hNTmFCtv356cLJPJdrf1oswrY1Ecy17887O9zJc2P6UTqgNGOnvcG+f/Yz4omRzkrnokyGld2vfkPID8PBxULUrBUk7j5KzZcf4sy2/cQs2oxvg1rUmzoYtzLelGvXiBpDH2J9iyF416lE7Te62y70Ezj02VwSdxWP4VfnmQwrG0ZOp833L9tuxffjX5z+7xj1h3QldtsBji7Zwp4f/qLZpL50+XsCafEJrHxuMgDlm9zAbc93xnouA2M1rB8+jdS4BHyqlqPl1y8CYHFx4cBva4hcEeHELC9s87JNhIaF8vmqL0lNTuXjIR9lzvtwwSQGdRxIYFAgDw98lCN7jvDB/IkAzJ8+lyU/LGbquK95/p0B3Pd0F4wxTHzpo/w3VAxsWraR0LBQvlz1le1WfEOy3reTFnzMwI4DCAwK5FF7rhPnTwJg7vQ/WPzDYureUZeer/TEGNixfgefvfaps1K5oAPLtlI9rD5PrprAueQ0Fg/J+oLw+ILxfNdxBADLRk6j3YQ+uHq6c3D5Ng4ut40rbzbsEfxrVcRYDWePxfDnq7Y7hdTp1IT63VtjPZfBuZR05vf/xPHJXYDJsLLj1Wk0+eFVxMXC0VkrSNh9lBtefpD4bQc4sWgzpRvUpNHUl3Ar402Fdg25YehDrGwxFIA7fh+Fd+1gXL09aRU+mYhBU4gppu/XAimhPddyLVx1W1KIiI8xJkFs3QyfAHuMMR9ebJnCHhZSnM0JLz4HRke4N+R5Z4fgMC+n+Tk7BIc65urm7BAcZrZLvLNDcKiMa/H2K1epNdfXBXg3pGY4OwSHuef4rGJxEULyrFEFekOV6vZGscgjN+25dqxnRKQn4I7tYscvnByPUkoppZRzlNCeay2uHcjeS33RnmqllFJKqetCMb5XdUFoca2UUkoppRyvhPZc691ClFJKKaWUKiTac62UUkoppRyvhN5UQ4trpZRSSinleCV0WIgW10oppZRSyvG0uFZKKaWUUqqQlNC7hegFjUoppZRSShUS7blWSimllFIOZ6x6QaNSSimllFKFQ8dcK6WUUkopVUhK6JhrLa6VUkoppZTjldBhIXpBo1JKKaWUUoVEe66LuZiMRGeH4DD3hjzv7BAcam74J84OwWHub9jf2SE41I/3lszemPzEzQ10dggOVTs1w9khOEyS5fp5HQNs8bx++hvvcXYA5+mYa6WUUkoppQqJFtdKKaWUUkoVElMyz45cP+dAlFJKKaWUKmJaXCullFJKKcezWgv2dxlEpIOI7BaRvSIy7AJtHhaRf0Rkp4h8X9C0dFiIUkoppZRyvCK+FZ+IuACfAG2Bo8BGEZljjPknW5s6wKvAXcaYOBEpX9DtanGtlFJKKaUcr+h/RKYJsNcYsx9ARH4A7gf+ydbmGeATY0wcgDHmREE3qsNClFJKKaWU41lNwf4urRJwJNvjo/Zp2d0A3CAiq0VknYh0KGha2nOtlFJKKaWuOSLSB+iTbdIUY8yUK1yNK1AHaAlUBlaKSF1jTPzVxqXFtVJKKaWUcjhTwPtc2wvpixXTx4Aq2R5Xtk/L7iiw3hiTDhwQkf+wFdsbrzYuHRailFJKKaUcr+iHhWwE6ohIDRFxBx4F5uRq8xu2XmtEpCy2YSL7C5KW9lwrpZRSSinHK+ILGo0x50SkP7AIcAG+McbsFJExwCZjzBz7vHYi8g+QAQw1xsQWZLtaXCullFJKqRLJGDMfmJ9r2uvZ/m+Al+x/heK6Lq5FZCDQD/ADfjXG9C/CbfUCQotyG5dr8NiB3NWqKSnJqbwx6C12b/8vT5tJ371HYPlAXF1dCF8fwbvDP8RqtVLnlloMe3swXt5eRB2N4rXnx5KYkOSELC5fvzf60qRVY1KSU5nw0gT27tiXp834b8cSUD4AFxcXdmzYweSRn2K1Wml+TzO6D3qCKnWqMLDzi+yJ2OOEDApu5JsfsHL1BgL8y/DbzM+dHU6RePaNZ2kc1pjU5FQ+GPwB+/LZz2NmjLHtZ1cXdm7Yyaf2/VzcudzSCM+H+oJYSF+zkLTFP+XbzrXBXZTqM5LEtwdiPbwHXFzxfGwAlqp1wBhSf/qcjD3bHRz95WnxRneqhzXgXHIqiwdP4eSOg3nalK9bnbYTnsXV052Dy7fy16hvAWg2vBs12oRgTT9H/KETLBkyhbQztuNS2Zuq0Oqtp3D3LYWxGn7o/DoZqemOTO2ylQurzy3jeiAuFo58t5x9H+c8ex3Q9CZuGdsD31uqEv7sJKLnbnBSpFemQlg9QsZ0R1ws7P9+Bbsn/5FjvsXdlSaT+uFfrzqpcQmse/Zjko7GAFD65io0erc3rr6lwGr4s+NrWLPtv7umvYR3tfIsDsv3t0Gcov3oHtQOq096chpzhnxBdD6v5aDbqnP/hL64erqxd/k2Fo2eAUCFW6rRafxTuHq4Yc3IYMHIqURu209grYrc9/6zBN1aneXv/x/rpszPs85rUhHf59pZrvcx189hu7H4CGcH4ih3tmpK1RqV+d9dj/Hmy+8x7K38v6i9+uwoHm/7FI+E9cQ/sAytO7cEYOT7L/PJm1/QrXUvli9YRfd+3RwY/ZVrHNaYSjWCebJ5bya+MokBb+b/3WZ8v7fo1/55+rTpS+nA0jS/tzkAB3cfYkyfsWxfv8ORYRe6Lp3a8vkH45wdRpEJDQulUvVKPH3300waNon+4/Pfz2899xb9O/SnX5t+lA4oTbN7mjk40qsgFjwfeZ6kya+ROPZZXENbYgmqmredRyncwu4n48C/mZPc7rLdUSpp/HMkTxqOR9dnQMRRkV+26mH1KVM9iOl3D2bpsK9pNb5Xvu3Cxj/J0le+YvrdgylTPYhqLesBcHjVdma2HcZ37YcTfyCKxs93BkBcLLSf2I9lw6cys80wZj88Hmv6OUeldWUswq1vP8mGx97hr+ZDCH7gTnxuyHnHsORjMWx74XMif1ntpCCvgkVo+GYvVj3+LgtbvEzVLnfgmyuvGt1aknY6kQV3DmbPlAXUG2n7XBEXC00mP8fmV75hcctXWNF1XI79V6lTKOcSUx2azqXUDqtPQI0gPmkxmHmvfk2ncU/m267T+KeYO+wrPmkxmIAaQdRqWR+A1q92Y+XEX/iy03D++uBnWr9qey6S4xNZOGoG676c57BcHMIBv9DoDNdtcS0inwM1gQWAv32ar4gcEBE3+2O/7I/zWcczIrJRRLaJyGwR8bJPf0hEdtinr8y2SLCILBSRPSLybtFmmL8W7Zsx7+dFAOzY8g++pX0ILB+Yp9353mgXVxfc3F3B/uWyas0qbFm3DYANKzcRdk8LxwR+le5o15Q/Zy8F4N/wf/H28yGgvH+edknZ8nV1cwNjS/jI3iMc3Z/7wuJrT2iDupT283V2GEWmabumLLXv593hu/H288Y/n/2cnJAM2Pez+7Vx4s5S/QasJyMxsdGQcY5zm//CtX7TPO08OvcgbclPmPS0rGUrVuXcbtv71SScxiQl2nqxi5ma7Rqxa/bfAESH78PDzxuv8mVytPEqXwZ3n1JEh9vOSOya/Te12ocCcHjVDkyG7YM2ess+fIICAKh2d11idh0hZtdhAFLiEzDFtKesTMPaJB2IJvnQCUx6BpG/raVCh9AcbZKPxHD2n8PFNof8BITUIuHgcRIPn8SkZ3Dk93VUat8oR5vgDo04+H+2j8qjczdQvvmtAFRoUZfTuw5z+h/b/kuLS8js6XTx8uCGZzvxz8TfHJfMZbihbSMiZq8C4Fj4Xjz9vPDJ9Vr2KV8GD59SHAvfC0DE7FXc2M7+nBiDh08pADx8vUg4EQ9AUuwZoiL2k5Ge4ZA8HKboL2h0iuu2uDbG9AUigTDg/K/ynAVWAPfYmz0K/GK/PUt+fjHGNDbG1Ad2Ab3t018H2tun35etfQPgEaAu8IiIZL89jEOUCyrL8cisHx86EXmS8kFl82076fv3WRwxh8SEJJbOXQHA/v8O0qKDrbev9b0tqRBc4F8JLVJlgwI5GRmT+TgmKobAC+Q7fuY4fgyfRXJiEqvm/e2oEFUhKBtUlpNRJzMfx0THUPYC+3nst2P5Pvx7khOS+fsa2M+WMmWxxmXlZo2LQUrn/EJsqVIL8S9Lxo6cd46yHj2Aa72mYLEggRVwqVobi385h8R9JXyC/EmIyrp+KCH6FD5B/nnbRJ+6aBuAWx65m4MrIgAoUzMIg6HLty/Tbd44GvW9J0/74sIzyJ/kyKznICUyFs988rvWlAoKIOlYVl5JUacolSuvUkH+JEfa9q3JsJJ+Jgn3AB98a1UEA81nvUKbxeO48bl7M5e57ZWH2P35fDKSilfPtW9QAGey7ccz0afwrZAzX98K/pzJ9lo+E3UKX/sXwsVjvqXN8G4MXDuJNiMeY9k7PzomcGcx1oL9FVPXbXF9EV8B58/jPAlMvUjb20RklYhsBx4HbrVPXw1ME5FnsF2det5SY8xpY0wKtp/erFa4oReugY8NoWPIA7i7uxParCEAY156mwd7PsCMhV/i5eNFelrxHLt4NUY8MZJuoY/j5u5Gg7vqOzscVURe6/4aT4Q+gZu7G/VLwn4WwaNrH1Jnf5lnVvraRZi4GLxemYTHg8+SsX9Xsf5AKqjG/e/Des7K7l9twyYsLi4Eh97AwoGf8lPXMdRqH0qVu269xFpUcSEuFso2uYH1z3/C8vvHUKljKOWb3UrpW6vhU608kQs2OTvEQtfoiTYsHjuTSXcMZMmYmdz77jPODkldhWvjvKgDGWNWi0h1EWkJuBhjLjbYdhrQxRizzX7BYkv7OvqKyO3YesA3i8j5c2DZv2JncIHnP/svDlUrXZtyXhWvOh+Ah3o9QJfHbd/4/9n6b47e5vLB5TgRHXOhRUlLTeOvRX/Ton0zNqzcxKG9hxnQbTAAVWtWplnrOwoUW1Ho3PNeOnazjTX9b9t/lAvO6sEsW7EssRfJNz01nbWL13FHu6ZsWRVe5LGqq3dvj3tp3609AHsi9lCuYlaPbNmgssRcaj8vWUvTtk0JL+b72Rofg1u23maLf1nM6Wx3ifIohSW4Gl6DbCPNxM+fUn1Hkfz5G1gP7yF1dtbvK3gNmYD1ePEY5lSvRxtu6xYGwPGI/fhUzOqN9wkKICE6Lkf7hOi4zOEe+bW5+cHm1Ggdwi/d3spaJuoUxzbsJiUuAYCDy7dR7rbqHFm9s0hyKoiU6DhKBWc9B57BgaTkeg6uRcnRp/CqlJWXV8UAknPllRwdR6ngAJKjTiEuFtz8vEg7lUBy1ClOrvuXtFO2/Re1bCtl6lbnXGIK/vVr0mnDR4iLC55l/WgxewR/dR3v0NzOC+3RlpBHba/lyIj9+GXbj35BAZw9njPfs8fj8Mv2WvarGMBZe092va7NMy9u/Gfeeu59p4QX18V4aEdBaM91/mYA33PxXmsAXyDKPib78fMTRaSWMWa9/VYvJ8n560CXZIyZYowJNcaEFrSwBvhp2q883rY3j7ftzYqFq7jnQVtBclvDW0g4k0jsiZy3cyzlVSpzHLaLiwvN2tzBwb22MW/+gWUAEBGeeqEHs7/9vcDxFbY/ps/luQ79ea5Df9YsWkubrq0BuCnkJpLOJnLqRM4DnaeXZ+Y4bIuLhSatG3Nk71GHx62uzNwZcxnQcQADOg5g7aK1tLbv5xtDbiTxbCJx+exn/+z7uVUTjuw74vC4r5T10H9YygcjgRXAxRXXRi04F7Euq0FKEokvP0ria71IfK0XGQf+zSyscfMAdw8AXG4KwWRkYI0+7KRMcoqY8SffdxzB9x1HsG/RZm7uahtuFhRSi9SzSSTZx5qel3QinrSEZIJCagFwc9dm7F+8GYBqLerRqN+9/NH7A86lZI05P7QygrI3VsHV0x1xsVCp6U2c2lM8vlzkdjp8H941gyhVtRzi5kJwlzs4vmizs8MqsLit+/GpEYRXFVteVe5vSmSuvCIXbaH6w3cDUPneJpz42/blJ3pFBKVvroJLKdv+K9f0Zs78d4z9M5YyN6Q/85u8yPL73+Ds/iinFdYAm2Ys4ctOw/my03B2L95Eva62C+IrhdQm5Wxy5rjp8xJOxJOakEylkNqAraD+b8lm+7w4qjW9GYDqd93KqYPRjkvECYzVWqC/4kp7rvP3HTAOmHWJdq8B67EV0OuxFdsA74lIHUCApcA2bOOtnW710nXc1foOfl0zi5TkVMYMyurl+W7J1zzetjelvDz5YNqbuLm7Y7EIm9aE88sMWxHdvksbHuz1AAArFqzkjx+K9+2ANizbSONWjZn69zekJqcwYfCHmfM+XTiZ5zr0x9PLk9HfjMbN3Q2LRdi2JoK5M21XZN/Z4U6eG2O7s8TYaW+w75/9jHhipLPSuWpDR73NxvAI4uPP0LrLEzzXuztdO7d3dliFZuOyjTQOa8zXq74mNTmVD4dk7eePF3zMgI4D8PTyZNTXo3Bzd0MsQsSaCObPLN6vXwCsVlJ+/Ayv/uPA4kL62sVYow7jfm93Mg79R8b29RdcVHxL4zVgPMZYMfGxpEx/34GBX76Dy7ZSPaw+PVdN4FxyGkuGZPW2P7ZgPN93tN3QafnIabSd0AdXT3cOLd/GweW2izVbju2Ji7srD3xnux1bdPhelg2fSurpJLZ8tYBH547BGMPB5ds4uGyrw/O7HCbDyo5Xp9Hkh1cRFwtHZ60gYfdRbnj5QeK3HeDEos2UblCTRlNfwq2MNxXaNeSGoQ+xssVQZ4d+USbDSvjwadw96xXExcKBH/7izH/HuHVoV05tO0DU4i0cmLWCJh/3o+OaCaTFJ7Ku78cApJ9O4r8vFtB6wVgwhqil24heutW5CV3C3mVbqR3WgOdXfsA5+634zntm/pt82Wk4AAtGTuU++20l963Yxl77a3nuK1/RfnQPLC4WzqWmM3fYVwB4lyvN03+Mw8OnFMZq5fanOvJZm5dJs1+kfc0qoT3XYkzJTKwgRORB4H5jTHdnx9I4+O7rZgcFuHg7OwSHmhv+ibNDcJj7Gzr99u4O9eO9183blm/m5r3bUElWO7WE3a3hIpIs19fJ7X/dnR2B47x26LticU/OhKEPFOhg6fPer8Uij9y05zoXEfkY6Ah0cnYsSimllFLq2qLFdS7GmAG5p4nIJ8BduSZPNMZcaky2UkoppZTKTwm9e5EW15fBGPO8s2NQSimllCpRSuiYay2ulVJKKaWUw11LvzZ6Ja6vqxWUUkoppZQqQtpzrZRSSimlHK+E9lxrca2UUkoppRyvGP8QTEFoca2UUkoppRxPe66VUkoppZQqJCW0uNYLGpVSSimllCok2nOtlFJKKaUczpiS2XOtxbVSSimllHK8EjosRItrpZRSSinleFpcK6WUUkopVThK6i80anFdzD3kVtXZIThMo5R0Z4fgUPc37O/sEBzm9y2TnR2CQ5UKbu7sEByme3BTZ4fgUF9yzNkhOExvt9rODsGhNpl4Z4egSggtrpVSSimllONpz7VSSimllFKFpGT+QKMW10oppZRSyvFK6phr/REZpZRSSimlCon2XCullFJKKccroT3XWlwrpZRSSinH0zHXSimllFJKFY6SOuZai2ullFJKKeV4JbTnWi9oVEoppZRSJZKIdBCR3SKyV0SGXaRdVxExIhJa0G1qz7VSSimllHK4oh4WIiIuwCdAW+AosFFE5hhj/snVzhd4AVhfGNvVnmullFJKKeV41gL+XVoTYK8xZr8xJg34Abg/n3ZjgXeAlKtPJosW10oppZRSyuGMtWB/l6EScCTb46P2aZlEpCFQxRgzr7Dy0mEhhUhEXgSmGGOSnB1Lbq1Hd6dmWAPSk1NZMGQKx3cczNOmwm3V6TThWVw93dm/fCtLR38LwF0v/o963VqSFHsWgFXv/R/7l28jqH5N2r/VGwARWP3Rr+xZtMlhOV2OgLD63DCuF+JiIfK7ZRz6+Pcc88s0vZk6Y3vic0tVdj47kRNzbWeEPCuXpe7UIYhFEFcXjn69kGMz/nRGClft2TeepXFYY1KTU/lg8Afs27EvT5sxM8YQUD4AF1cXdm7YyacjP8VqvfavMBn55gesXL2BAP8y/Dbzc2eHUyg+/GAMHTu0Iik5md69BxG+dUeeNm5ubkyaOI4WLe7EarXy2uvv8Ouv82ne7HYmTHiDenVv5rEnnuOXXwrtM6TIPDbqKeqFNSQtOY2vh3zMoZ0Hcsx393TnuU+HUL5aENYMK1uXbuLnd2YCcEOTW3js9SepfFM1Ph/wAZsWrHNGCpft1fEv0bz1HaQkpzJi4Fh2bd99wbYfz3iPytWCeaDF4wD0f6UPrTrcjdVq5VRMHCMGjuXk8RhHhX7ZWr7RnRr2z6DFg6dwIp/PoPJ1q9Pe/hl0YPlWVoyyfQbdMfhBarVriLEakmPPsGjwFyQej6dy05u576tBnD5yEoC9CzeyfuJvDszq0p55ow+NwkJJTU5l4uCP2J/rOOzu6cErnw0jqFoQVquVjX9uYMbb0wEoG1yOFz8YhLefNxYXCzPens7m5cXrM7bACvhxIyJ9gD7ZJk0xxky5guUtwAdAr4JFkpMW14XrRWAmcNnFtYi4GGMyiiwioGZYffxrBPFli8FUDKlF23G9mNlldJ527cY/ycJhXxEVvo8Hpw+lRst6HFgRAcCmrxeyccr8HO1jdh9lRufXMBlWvMuXodeC8ez9cwsmo5gUZxbhxrefIvzh8aRGxtJ40VvELNpE4n/HMpukHIth1wufUrVf5xyLph6PY9M9IzFp53Dx8uD2v97n5KLNpB2Pc3QWVyU0LJRK1Svx9N1Pc2PIjfQf359B9w/K0+6t594iOSEZgBGfj6DZPc1Y+cdKR4db6Lp0astjXe9j+Nj3nR1KoejYoRV1atfgpluacXuThnwy+S3ubNY5T7vhrw7k5MlYbrm1OSJCQEAZAA4fOUbvpwfx0qC+Do786tRr2ZAKNSoyrGV/aobUofv4Pozr8mqedgu/nMO/a3fg4ubKy9+Nom7LELavCCc28iRfDZlMh2fuc0L0V6Z56zuoWqMKnZo+RL1Gt/Lauy/zWMfe+bZt06klSYk5P16mfjKTye/YaonHn36YfoOfYszL7xZ53Feielh9ylQPYurdgwkKqUWr8b344f7Redq1Hv8kS175iujwfXSZPpTqLetxcEUEm7+Yx9oJPwPQ4Ml2NH3hAZYOnwrAsY27+f3JCY5M57I1CgulYvVg+t7dhxtCbqTf+OcYev/gPO1+m/IL29dux9XNlTGzxtOwZSO2rNjMwwMf4e+5q1g4cwFV6lThtWmj6XNX/q+N65W9kL5YMX0MqJLtcWX7tPN8gduAFSICEATMEZH7jDFX/U1Gh4XkQ0SGishA+/8/FJFl9v+3EpHvROQzEdkkIjtF5A37vIFAMLBcRJbbp7UTkbUiskVEfhIRH/v0gyLyjohsAR4q6nxqt23Eztl/AxAVvg9PP2+8y5fJ0ca7fBncfUoRFW77Vr1z9t/UaXfxC2bPpaRlFtKuHm5QzG5X6dewNskHjpNy6AQmPYPjv62hbIfGOdqkHDlJwj+HMbl6a016BibtHADi4YZYrq23StN2TVk6eykAu8N34+3njX95/zztzhfWLq4uuLqXnO/aoQ3qUtrP19lhFJrOndvz7Xe24mL9hi2ULlOaoKDyedr16vkob7/zMQDGGGJjbV8GDx06yvbtu66ZsxIh7Rqz5pe/ANgfvgcvX29KlyuTo01aShr/rrX13mekn+PQzgP4BwUCEHv0JEf/PYQxxeyglI+wDncz5ydbx0XE5p34+vlQtnxgnnalvErRo283vvhwao7piQlJ2dp4UhxTrtWuEbvsn0HR4fvwuMhnULT9M2jX7L+p1d72GZRmP04BuHl5XBP7FaBJu9tZPnsZAP9d4DiclpLK9rXbATiXfo79O/YRWLEsYHsPe/l6AeDl603c8VMOjN4xHDAsZCNQR0RqiIg78CgwJ3P7xpw2xpQ1xlQ3xlQH1gEFKqxBi+sLWQU0t/8/FPARETf7tJXACGNMKFAPaCEi9Ywxk4BIIMwYEyYiZYGRQBtjTENgE/BStm3EGmMaGmN+KOpkfIP8ORMZm/n4bPQpfCvkfIP7VvDnbHTWG/ds1Cl8g7LaNOzRll4L36TDe8/g4eeVOb1ig1o8teRtnlz0FotHTC0+vdaAZ1AAKdnyTo2MxSMob4F5IR7BgTRZ/i7NtnzKocm/XzO91gBlg8pyMupk5uOY6BjKBpXNt+3Yb8fyffj3JCck8/e8vx0VoroClYKDOHokMvPxsaNRVAoOytGmdGk/AMaMfpkN6xfyw6wvKF8+/31e3JWpEMCpyKyhDXHRsZmFc35K+XlRv3Uou1Zvd0R4hapCxXJEHzuR+fh41AkqVCyXp92AYX2Y/tn3pCSn5pk38NW+/Lnld+7p2p7J7172GXGH8Qny52xU1rE4IfoUPrmOxT5B/iRk+wzK3ebOoQ/x9LqJ3NTlTtZOmJ05vWLD2jyxcDxdpg8l8IYcQ2mdLjAokJiorNdxTHQsgRd5HXv7edO4TRMiVm8F4IcPv6fFA2F8vX4ar08fzZRRJWOIWw5FfEGjMeYc0B9YBOwC/s8Ys1NExohIkZ3a0uI6f5uBRiLiB6QCa7EV2c2xFd4P23udw4FbgVvyWUdT+/TVIrIV6AlUyzb/xyKLvpCFz/yTKXe/xLSOI0g8EU/Ya49nzovauo9v2g5jxn2v0/S5zrh4uDkx0sKVGhnLhrCXWdP0BYIeaYF7udLODqlIvNb9NZ4IfQI3dzfq31Xf2eGoq+Tq6kKVKsGsWbeJJrd3YN26zbz7zuvODqvIWVws9J00iD+nzePkkePODqdI3HhrHapUr8zSBX/lO3/SW5/TpuH9zJu9iMeeetDB0TnGmvd+4qumL/Dvb2to0KstACd2HOTrO15kZocRbJ22mM5f5h36dq2wuFgY/PFQ5k6dw/HDttdx8/tasOynpfS+vRdjeo5m0EeDsQ9dKDEc0HONMWa+MeYGY0wtY8x4+7TXjTFz8mnbsqC91qDFdb6MMenAAWwD3NdgK6jDgNpAMjAEaG2MqQfMAzzzWY0AS4wxDex/txhjsg+WSrzQ9kWkj33Yyab1CXuuKoeQHm3oOX88PeePJ+FEPH7BWd+WfYMCOJurF/bs8Th8gwKy2lQM4Gy0rU1SzBnbvSiNYdus5VSsXzPP9k7tjSQtKYVyN1S+qniLQkr0KTyz5e0RHEhq9JX3PqcdjyPx3yOUuf2mwgyv0N3b414+XvAxHy/4mFMnTlEuW+9X2aCyxERf+CKn9NR01i5ZS9O2TR0RqroM/fr2ZNPGxWzauJio6ONUrhKcOa9S5Yoci4zO0T42No7ExCR+/dU2xODn2XMJCbnNoTEXRKvuHXhj/vu8Mf99Tp+IIyA4q9fdPyiQuOjYfJfr9VZfjh+IYsk3xf8izfMefbIrPy+dwc9LZ3DyeCxBlbKG+FSoWJ7j2c46ATQIrcut9W9i0cZfmTHnC6rXrMrUXz7Ns965sxfR5t6wIo//ctTv0YbHF4zn8QXjSTwRj2/FrGOxT1AACbmOxQnRcfhk+wzKrw3Av7+uoXZH2/C+tIRk0pNsPfkHl2/D4uqCp79PUaRz2Tr1uIcPF0ziwwWTiDsRR9mKWa/jskGBxF7gdfz82wOIOhjJH19n1XttH23L6rmrANi95V/cPNzxC/Ar2gRUodDi+sJWYSuiV9r/3xdbT7UftsL4tIhUADpmW+YstsHxYBu3c5eI1AYQEW8RueFyNmyMmWKMCTXGhN7uU+eqgg+f8SfTO41geqcR7Fm8mVu7NgOgYkgtUs8mkXgiPkf7xBPxpCUkUzGkFgC3dm3G3iWbAXKMjbuhfSgxu48CULpKOcTF9hLyqxRIYK1gTh/N+aHgTGfD9+FVMwjPquUQNxcqdLmTmMu8m4lHxQAsnrZeeNfS3pRpciOJ+yIvsZRzzZ0xlwEdBzCg4wDWLlpL666tAbgx5EYSzyYSdyLnB5Wnl2fm+D+Li4UmrZpwZN+RPOtVzvHZ59MJbdyO0MbtmDNnEd0ft/VI3t6kIWdOnyE6+kSeZebOW0LLFncC0CqsGbt2Xd2Xc2dY9u1CRnUawqhOQ9iyeAN3/q8FADVD6pB8NonTJ+PzLPO/wd0o5evNrDFT88wrzn6YOpsHW/fgwdY9WLbgL+57qBMA9RrdSsLZBGJO5CzAfpz+C63qd6Z94wfocd+zHNx/mCf/9xwAVWtkXavVqsPdHNhzyHGJXMS2GX/yXccRfNdxBPsWbeZm+2dQUEgt0i7yGRRk/wy6uWsz9i22fQaVqV4hs12tdg2J2xcFgFe2s4kV6tdELEJKXEJRpnVJ82fMY1DHgQzqOJB1i9YS1rUVADeE3Eji2aQ8x2GAx4c8gZevF1+N/jLH9JPHTlLPfjaxcu3KuHu4cTr2dNEn4UCO6Ll2hpJzBVPhWwWMANYaYxJFJAVYZYzZJiLhwL/Y7p24OtsyU4CFIhJpH3fdC5glIh72+SOB/xyXgs3+ZVupGVafZ1ZO4FxyGguGZI3J6zl/PNM7jQBgychpdJzQx3YbpBXb2L98GwAtX32U8rdUwxjDmaMxLBr+DQCVQm+g63OdyUjPAGNYPHIayU4+sGVnMqzsfvUbQn4YDi4WomatIHH3UWq+/BBntu0nZtFmfBvUot7UwbiV8aZcu0bUGPoQ61sMwbtOJWq/0d12kabAoc/mkrjr2ik8Ny7bSOOwxny96mtSk1P5cMiHmfM+XvAxAzoOwNPLk1Ffj8LN3Q2xCBFrIpg/c/5F1nrtGDrqbTaGRxAff4bWXZ7gud7d6dq5vbPDumrzFyylQ4dW7N61mqTkZJ5+OuvyjU0bFxPauB0Arw4fz/Spk5gwYTQxJ0/R+xnbafLQRvX5+aev8fcvzb33tGXU64Op36CVU3K5HBHLt1AvrCHv/PUJacmpfD30k8x5b8x/n1GdhuAfFEDnAQ8Sufcoo+e9B8DS6QtY+eNSatSrRf8vXsG7tDcNWofSZdCjjGz3opOyubiVf66hees7WbD+Z5KTU3jthXGZ835eOoMHW/e46PKDRj5H9dpVMVZD5NFoxgx9p6hDvmIHlm2lelh9nlxl+wxanO0z6PEF4/muo+0zaNnIabSzfwYdXL6Ng/bPoGbDHsG/VkWM1XD2WAx/vmr7MlWnUxPqd2+N9VwG51LSmd//k7wbd6LNyzYRGhbK56u+JDU5lY+HfJQ578MFkxjUcSCBQYE8PPBRjuw5wgfzJwIwf/pclvywmKnjvub5dwZw39NdMMYw8aWP8t/QNaw4F8gFIdfKVbfXq3erPXHd7KBGKenODsGhJnicdXYIDvP7lsnODsGhSgU3v3SjEqJ78PU1lGhj8rFLNyohenvUdnYIDrWCeGeH4DC/H55bLAZvH2/ZskA1ToUVK4pFHrlpz7VSSimllHK4ktpzrWOulVJKKaWUKiTac62UUkoppRzOWIvlqI4C0+JaKaWUUko5XEkdFqLFtVJKKaWUcjhjtOdaKaWUUkqpQlFSe671gkallFJKKaUKifZcK6WUUkoph9MLGpVSSimllCokJfV3DLW4VkoppZRSDldSe651zLVSSimllFKFRHuulVJKKaWUw5XUnmstrpVSSimllMPpmGullFJKKaUKifZcK6fwKKHf6vJzzNXN2SE41I/3Xj87t1Rwc2eH4FDJkaucHYLD9At92dkhONREqjk7BIeJSb9+jlEAkysnOzuE605J/YVGvaBRKaWUUkqpQqI910oppZRSyuFK6s+fa3GtlFJKKaUczlpCh4Voca2UUkoppRyupI651uJaKaWUUko5XEm9W4he0KiUUkoppVQh0Z5rpZRSSinlcPojMkoppZRSShWSkjosRItrpZRSSinlcCX1biE65loppZRSSqlCoj3XSimllFLK4fRWfEoppZRSShUSvaDxGiEi04C5xpifr3C5lkCaMWaN/XFfIMkYM+MC7YOBScaYBwsUsIO0eKM71cMacC45lcWDp3Byx8E8bcrXrU7bCc/i6unOweVb+WvUtwA0G96NGm1CsKafI/7QCZYMmULamSQAyt5UhVZvPYW7bymM1fBD59fJSE13ZGo5BLesR+Mx3RGLhb2zVrDjkz9yzLe4u9JsYl8C6tYgNe4sK/tNJvFoDIENanLHu71tjQS2TfiVIws3AfC/dR+SnpCCsVqxnstgfqfXHZ3WZXG5pRGeD/UFsZC+ZiFpi3/Kt51rg7so1WckiW8PxHp4D7i44vnYACxV64AxpP70ORl7tjs4+qvz4Qdj6NihFUnJyfTuPYjwrTvytHFzc2PSxHG0aHEnVquV115/h19/nU/zZrczYcIb1Kt7M4898Ry//DLPCRkU3Mg3P2Dl6g0E+Jfht5mfOzucItFt1FPUDQshLTmNb4ZM5vDOAznmu3u60/fTwZSrFoQ1w0rE0k3Mfuc7J0V7ZQLC6nPDuF6Ii4XI75Zx6OPfc8wv0/Rm6oztic8tVdn57EROzF2fY76LTymarprAyQUb+W/4VEeGflmCwuoRMqY74mJh//cr+Hdy3mPy7ZP64V+vOmlxCax59mOSjsbgVbksHVe+x9l9UQDEbtnL5le+wdXbk1a/ZR2DvYIDODT7b8Jfn+nQvC6H5x2NKTP4ebBYSPx9Pmen/5Bjvvf/7sXnofvBasUkJXPqzQ85d+AQHk0aUab/0+DmCunniJ/0BambtjoniSLmiDHXItIBmAi4AF8ZY97ONf8l4GngHHASeMoYc6gg27zmimsREUCMKfRfpG8JJABrAIwxF/2UMsZEAgUqrIswlxyqh9WnTPUgpt89mKCQWrQa34sf7x+dp13Y+CdZ+spXRIfv4/7pQ6nWsh6HVkRweNV2Vr/zIybDyl2vPkLj5zuz+q0fERcL7Sf2Y9GLnxOz6zCeZXywpp8rylQuSizC7eN7sqTb2yRFnaLT/DEcWbyZ03siM9vU6daS1NOJ/NZsMNXva0qjEY+yst9k4v89yryOr2EyrJQqX4Z7l4zn6JItmAzbrln80HhS4xKcldqliQXPR54nadJwTHwMXq9M5FzEeqzRh3O28yiFW9j9ZBz4N3OS210dAEga/xziU5pS/ceS9M4Lxb5LoWOHVtSpXYObbmnG7U0a8snkt7izWec87Ya/OpCTJ2O55dbmiAgBAWUAOHzkGL2fHsRLg/o6OPLC1aVTWx7reh/Dx77v7FCKRN2WIZSvUZHhLQdQM6QOT4zvw5tdXs3TbtGXc9i9dicubq4M/m4Ut7UMYceKcCdEfAUswo1vP0X4w+NJjYyl8aK3iFm0icT/jmU2STkWw64XPqVqv7yvbYBawx4mft0uR0V8RcQiNHqzFyseeYvkqFO0XTCWyMVbOJMtv5rdWpJ2OpH5dw6myv1NqT+yG2v7fgxA4qHjLG47PMc6zyWm5JjWdtE4js7f5JiEroTFgv/LAznR/2Uyjp+kwvRPSV65lnMHsmq2pEXLSPxlLgCed99BmUF9iRn4Ktb405x8aSTWmFjcalWn7KR3iLrnEWdlUqSKeliIiLgAnwBtgaPARhGZY4z5J1uzcCDUGJMkIv2Ad4ECPeGFdkGjiHiLyDwR2SYiO0TkERE5KCJl7fNDRWSF/f+jReRbEVkrIntE5Jls6xkqIhtFJEJE3rBPqy4iu0VkBrADqCIiCSLyoYjsFJGlIlIun5het69rh4hMsReziMhAEfnHvo0fRKQ60BcYJCJbRaS5PcYh9va1ReRPe25bRKSWPaYd9vlf2ZfbKiInRWTUleRSWPvgQmq2a8Su2X8DEB2+Dw8/b7zKl8nRxqt8Gdx9ShEdvg+AXbP/plb7UAAOr9qRWWRGb9mHT1AAANXurkvMriPE7LIVcCnxCRir8wqywJBanD14nITDJ7GmZ3Dw93VUad8oR5sq7Rqy76dVAByat4GgZrcCkJGSlpmji4cbFO+6Mg9L9RuwnozExEZDxjnObf4L1/pN87Tz6NyDtCU/YdLTspatWJVzu7cBYBJOY5ISbb3YxVznzu359jvbCar1G7ZQukxpgoLK52nXq+ejvP2O7cPaGENsbBwAhw4dZfv2XVitRfrdtsiFNqhLaT9fZ4dRZBq0a8zaX1YAsD98D16+XpQuVyZHm7SUNHav3QlARvo5Du/cj39QoIMjvXJ+DWuTfOA4KYdOYNIzOP7bGsp2aJyjTcqRkyT8cxiTz+vUt14N3MuV4dSKCEeFfEUC7MfkRPsx+fDv66iU65gc3KERB/9vJQBH526gQvNbL3v9PjWD8Az04+S6fy/d2MHcb72J9CPHyDgWBefOkbRkOaVa3JmjjUlMyvy/xdMz83Mn/b+9WGNibf/fdxDxcAc3N4fFXsI0AfYaY/YbY9KAH4D7szcwxiw3xpzfGeuAygXdaGHeLaQDEGmMqW+MuQ1YeIn29YBWwB3A6yISLCLtgDrYnowGQCMRudvevg7wqTHmVnt3vTewyRhzK/AXMCqfbUw2xjS2x1MKuNc+fRgQYoypB/Q1xhwEPgc+NMY0MMasyrWe74BPjDH1gTuBqOwzjTFPG2MaYNthMcC0K8ylSPkE+ZMQFZv5OCH6FD5B/nnbRJ+6aBuAWx65m4P2A3mZmkEYDF2+fZlu88bRqO89RZTB5fEK8icxMiuHpKhTeOXKoVSQP0n2NibDSvqZJDz8fQAoG1KL+5a9Teelb7Fu2NTMYtsYQ5tZw7hnwVjqPB7moGyujKVMWaxxJzMfW+NikNI5iwtLlVqIf1kydmzMMd169ACu9ZqCxYIEVsClam0s/nm+qxY7lYKDOHok66zEsaNRVAoOytGmdGk/AMaMfpkN6xfyw6wvKF++rEPjVAVTpkIgpyKzjl9x0acoc5HCuZSfF/Vbh7JrdfEsOLPzDAogJVtuqZGxeORz3M2XCHVGd2fP6G+LKLqCKxUUQPKxrPySok5RKld+Xvkck90DbMdk76rlaLd4PGG/jKTs7TfmWX/V++/g8Jx1RZjB1XMpV5aM41nH5IzjJ3Epl/fY4/PQ/VT89VtKD+xD/PuT88wv1epu0nfvgXTnDbcsSsYU7O8yVAKOZHt81D7tQnoDC64+I5vCLK63A21F5B0RaW6MOX2J9r8bY5KNMTHAcmxFaDv7XziwBbgJWyEKcMgYk/1dZAV+tP9/JtAsn22Eich6EdmOrZA//5U4AvhORJ7ANsbmgkTEF6hkjPkVwBiTku0bTvZ2nsBPwAB7wXwluVwTGve/D+s5K7t/XQ2AxcWF4NAbWDjwU37qOoZa7UOpctfl9zoUNzHh+5jTahjzO71O3f6dsXjYegoWPjCWeR1GsvSJ97ixVxvK53OQL/ZE8Ojah9TZX+aZlb52ESYuBq9XJuHx4LNk7N8FRTtSyWFcXV2oUiWYNes20eT2Dqxbt5l33ymeY+ZVwVlcLPSZNIil0+YTc+SEs8MpUpWfbEfM0q2kRp26dONrUMqJeP4IfYHF7UawdfRM7vjkeVx9SuVoU7XLHRz+bY2TIiwcCT/9TtQD3Tn98Zf4PfVEjnmuNatRZsAznHrzQydFV/SsRgr0JyJ9RGRTtr8+VxuLvSYMBd4raF6FNubaGPOfiDQEOgHjRGQptsL1fAHvmXuRfB4L8JYx5ovsM+zDNhIvFUKuZTyBT7GNozkiIqOzxXAPcDfQGRghInUvse7L8TnwizHmz/MhcJW52F8cfQAe9m/CnT5Xfoq+Xo823NbN1st6PGI/PhWzenp8ggJIiI7L0T4hOi5zuEd+bW5+sDk1WofwS7e3spaJOsWxDbtJsY9FPrh8G+Vuq86R1TuvON7CkBQdh3dwVg5eFQNIypVncnQcXsEBJEWdQlwsuPl55RlLfXpvJOlJKfjfWJnYiAMk29eREnuGIws2U7ZBLU6s3130CV0Ba3wMbtl6my3+ZTGns3qM8CiFJbgaXoPeBUD8/CnVdxTJn7+B9fAeUmdPyWzqNWQC1uNZYyKLk359e9K79+MAbNq0lcpVgjPnVapckWOR0Tnax8bGkZiYxK+/zgfg59lzefLJRx0XsLoqYd070LxbawAObttHQHDW8cs/KID46Nh8l+vxVl9OHIjiz2+ujYtTU6JP4ZktN4/gQFJzHbMupHToDZS5/SYq92qLi7cnFndXMpJS2DduVlGFe8WSo09RqlJWfl4VAzKPp+cl2Y/JydmOyWmnbMfktDTbv3ERB0k4dBzfWkHEbbNdzFrmlqpYXCzERRx0TDJXKONkDC4Vso7JLhXKkXEy5oLtkxYvx3/YC/CGvX35spR9dwyxo962DS0poQo65toYMwWYcpEmx8g5/LayfVoOItIGGAG0MMakFigoCnfMdTC2u2vMxFb1NwQOAucHWHXNtcj9IuIpIoHYLibcCCwCnhIRH/s6K4lI3kGUWbGfv6DwMeDvXPPPF9Ix9vU9aF+nBahijFkOvAKUBnyAs0CegYvGmLPAURHpYl/eQ0S8cuX+POCb6wrUK8kl9zanGGNCjTGhV1NYA0TM+JPvO47g+44j2LdoMzd3tXXsB4XUIvVsEkkn4nO0TzoRT1pCMkEhtQC4uWsz9i/eDEC1FvVo1O9e/uj9AedSssbqHloZQdkbq+Dq6Y64WKjU9CZO7XFeURa7dT++NYLwqVIOi5sL1e9vypHFW3K0ObJ4C7Ueag5AtXuaEL3adk2DT5VyiIvt7eBdKZDStYJJOHIS11IeuHrbXkqupTyo2OI24ncfdWBWl8d66D8s5YORwArg4oproxaci8h2ciQlicSXHyXxtV4kvtaLjAP/ZhbWuHmAuwcALjeFYDIy8l4IWUx89vl0Qhu3I7RxO+bMWUT3x22HgNubNOTM6TNER+ftrZw7bwkt7WMdW4U1Y9euPQ6NWV255d8uZEynoYzpNJTwxRu4438tAagZUofks0mcPhmfZ5kugx+llK8XP4wpfnfMuJCz4fvwqhmEZ9VyiJsLFbrcScyiy7s4b+dzH7O60fOsaTyAvW/MJOr/VharwhrglP2Y7G0/Jle9vynHFm3O0SZy0RaqP2wbMVn53iYc/9vWOeMR6ItYbIWXd9Vy+NQIIvFQ1vu7apc7OPTbWgdlcuXS/vkXt6qVcAkOAldXvNqGkbwyZy+7a5Ws0QmezZpy7rDt81N8vCn74Zuc/uRL0iKc01nlKAXtub4MG4E6IlJDRNyBR4E52RuISAjwBXCfMaZQTnkV5t1C6gLviYgVSAf6YRvn/LWIjAVW5GofgW04SFlgrP3uG5EicjOw1n7tYQLwBJCRz/YSgSYiMhI4Qa4rO40x8SLyJbaLBqOxPcFguxXLTBEpja13eZK97R/AzyJyPzAg17a6A1+IyBh7bg9hG5Zy3hAgXUS22h9/boz5/ApyKVIHl22lelh9eq6awLnkNJYMyfqS99iC8XzfcQQAy0dOo+2EPrh6unNo+TYOLrdd5NZybE9c3F154LthAESH72XZ8Kmknk5iy1cLeHTuGIwxHFy+jYPLtjo6vUwmw8qGkdNp8/3Ltlvx/fgXp/87Rv0hXYnddoCjS7aw54e/aDapL13+nkBafAIrn7ONcSvf5AZue74z1nMZGKth/fBppMYl4FO1HC2/fhGwDYM58NsaIovjxUNWKyk/foZX/3FgcSF97WKsUYdxv7c7GYf+I2P7+gsuKr6l8RowHmOsmPhYUqZfG3edmL9gKR06tGL3rtUkJSfz9NMvZc7btHExoY3bAfDq8PFMnzqJCRNGE3PyFL2fGQRAaKP6/PzT1/j7l+bee9oy6vXB1G/Qyim5FMTQUW+zMTyC+PgztO7yBM/17k7Xzu2dHVah2b58C3XDGvLmX5NJS05l6tBPM+e9Pv89xnQain9QAPcOeJCovUd5bZ7t7Mzy6QtZ9eNSZ4V9WUyGld2vfkPID8PBxULUrBUk7j5KzZcf4sy2/cQs2oxvg1rUmzoYtzLelGvXiBpDH2J9iyHODv2ymAwrW4ZPo8WsV2y34vvhL878d4zbhnbl1LYDRC7ewv5ZK2j6cT86rZlAWnxi5p1CyjW9iduGPog1PQOMlc2vfENafNZJ3yr3NWXlE+86K7VLy7AS9+7HlJv0DuJiIWHOAs7tP4Tfs71I27WblJVr8Xm4C55NGmLOncN6JoHYN94BwPfhLrhWCcbv6e74Pd0dgJP9X8EaF+/EhK5NxphzItIfW4enC/CNMWanvZ7bZIyZg61D2Af4yV6vHTbG3FeQ7Ypxwu227EM0EowxV/0pLiIJxhifwouqeJpY9Ylr7L4VV8/f4V87nOuB+/M/tV0S+X9VDL+QFKHkyNzXRJdc/UJfdnYIDtUt2cXZIThMjOWau1tvgdxZOfrSjUqIKhuXFoufRlwX/L8C1ThNI38pFnnkdn29c5RSSimlVLHgiB+RcQanFNfGmNGFsI4S32utlFJKKVVSFfWPyDhLYd6KTymllFJKqeuaDgtRSimllFIOVzJ+USEvLa6VUkoppZTDGUrmsBAtrpVSSimllMNZS+j90LS4VkoppZRSDmctoT3XekGjUkoppZRShUR7rpVSSimllMPpmGullFJKKaUKid4tRCmllFJKqUJSUnuudcy1UkoppZRShUR7rpVSSimllMPpsBCllFJKKaUKiRbXyilOSwm9w3o+lrmcdnYIDhU3N9DZIThM9+Cmzg7BofqFvuzsEBzms03vOjsEh3oldLizQ3CYuuklczzshXx4spyzQ3CYD5wdgF1JHXOtxbVSSimllHI4a8msrfWCRqWUUkoppQqL9lwrpZRSSimHK6k/f67FtVJKKaWUcriSelWZFtdKKaWUUsrh9G4hSimllFJKFRKrlMxhIXpBo1JKKaWUUoVEe66VUkoppZTD6ZhrpZRSSimlComOuVZKKaWUUqqQ6I/IKKWUUkoppS5Ke66VUkoppZTDldQfkdGe6yIkIl1E5BZnx6GUUkopVdyYAv4VVw7vuRYRV2PMOUdv93KIiABijCmsMfZdgLnAP4W0vqvWfnQP6oTVJz05jd+HfEH0joN52lS8rTr3TeiLm6cbe5ZvY9HoGQBUuKUa94x/ClcPN6wZGcwfOZXIbfsBqNb0Ztq/3h2LmwvJp84y/ZFxjkzrsjzzRh8ahYWSmpzKxMEfsX/Hvhzz3T09eOWzYQRVC8JqtbLxzw3MeHs6AGWDy/HiB4Pw9vPG4mJhxtvT2bx8kzPSuKAWb3SnelgDziWnsnjwFE7ms2/L161O2wnP4urpzsHlW/lr1LcANBvejRptQrCmnyP+0AmWDJlC2pkkAMreVIVWbz2Fu28pjNXwQ+fXyUhNd2Rql/TYqKeoF9aQtOQ0vh7yMYd2Hsgx393Tnec+HUL5akFYM6xsXbqJn9+ZCcANTW7hsdefpPJN1fh8wAdsWrDOGSlclW6jnqJuWAhpyWl8M2Qyh/PJu++ngylnzzti6SZmv/Odk6ItXCPf/ICVqzcQ4F+G32Z+7uxwCsUDo3pyc1gIacmpzBryGcd2HszTpuOQRwj93914lfbm1Vt75Zlfr0MTen3+Eh90Hs7R7fuLPugrUKllPW4f0x2xWPhv1gq2f/JHjvkWd1funtiXwLo1SI07y4p+k0k4GkNw89toNPwRXNxcyUg/x6Zxs4habfs4bTvzZbwqlEZcXDi+YTfrhk/DWItfuVXS921BXddjrkWkh4hEiMg2EflWRKqLyDL7tKUiUtXerrOIrBeRcBH5U0Qq2KePti+3GvhWRG4VkQ0istW+jjr2dk9km/6FiLhcJKbPRGSTiOwUkTeyTe8kIv+KyGYRmSQic+3Ty4nIEnv7r0TkkIiUteeyW0RmADuAKiIyVEQ22mPLvu7X7G3/FpFZIjLEPv0Ze/ttIjJbRLxE5E7gPuA9ez617H8L7bGtEpGbrnB/XZXaYfUJrBHE5BaDmfvq19wz7sl823Ua/xRzh33F5BaDCawRRO2W9QFo82o3Vk78hSmdhrPig59p82o3ADz8vOg07kl+eHoCn7d9hZ+em+SIdK5Io7BQKlYPpu/dffhk2GT6jX8u33a/TfmF51v1Y1DHF7gp9BYatmwEwMMDH+HvuasY1OkF3u//Ls+O6+fI8C+pelh9ylQPYvrdg1k67Gtaje+Vb7uw8U+y9JWvmH73YMpUD6Jay3oAHF61nZlth/Fd++HEH4ii8fOdARAXC+0n9mPZ8KnMbDOM2Q+Px5pevL4T12vZkAo1KjKsZX+mDf+M7uP75Ntu4ZdzGN56IKPuGUKdRjdSt2UIALGRJ/lqyGTW/b7KkWEXWN2WIZSvUZHhLQcwY/jnPHGBvBd9OYfXWr/AmHuGUqvRTdxmz/ta16VTWz7/oPh9ib9aN7dsQNkaFXmz5Yv8NPxLHhz/dL7t/lm6mY/uH5HvPA9vT5o/2ZFD4XuKMtSrIhah6fieLH7iXX4Ne5maXZpSuk5wjjY3dGtJ6ulEZjcbzM4vFxI64lEAUk6d5c9eE/itzausevELmk/sm7nMir4f83vbEfzWahieAb5Uv/d2h+Z1OUr6vi0M1gL+FVeXLK5F5FZgJNDKGFMfeAH4GJhujKkHfAecr6r+BpoaY0KAH4CXs63qFqCNMaYb0BeYaIxpAIQCR0XkZuAR4C779Azg8YuENsIYEwrUA1qISD0R8QS+ADoaYxoB5bK1HwUsM8bcCvwMVM02rw7wqX3ejfbHTYAGQCMRuVtEGgNdgfpAR3vc5/1ijGlsf352Ab2NMWuAOcBQY0wDY8w+YAowwB7bEODTi+RXaG5s24hts20FxLHwvXj4eeFTvkyONj7ly+DhU4pj4XsB2DZ7FTe2sxWYGIO7TykAPHy9OHsiHoC699/Jvws3ciYyFoCk2DNFn8wVatLudpbPXgbAf+G78fbzxr+8f442aSmpbF+7HYBz6efYv2MfgRXLAmCMwcvXCwAvX2/ijp9yYPSXVrNdI3bN/huA6PB9ePh545Vr33qVL4O7Tymiw2099rtm/02t9raX7+FVOzAZtkNU9JZ9+AQFAFDt7rrE7DpCzK7DAKTEJxS7XqGQdo1Z88tfAOwP34OXrzely5XJ0SYtJY1/1+4AICP9HId2HsA/KBCA2KMnOfrvIYwpXnldSoN2jVn7ywrgfN5e+ea9e+1OwJb34Z37M/O+1oU2qEtpP19nh1FobmsXyqZfVgJwKHwvpXy98M21P8/PO3syPt91dBz8MMs+n0N6MTuzBFA2pBZnDx4n4fBJrOkZ7P99HVXbN8rRpmq7huz9yfYZdXDeBio2uxWAUzsPkXw8HoD43Udx9XTH4m474Z6ekAyAuLrYpxW/93FJ37fqwi6n57oV8JMxJgbAGHMKuAP43j7/W6CZ/f+VgUUish0YCtyabT1zjDHJ9v+vBYaLyCtANfv01kAjYKOIbLU/rnmRuB4WkS1AuH07twA3AfuNMefPkc7K1r4ZtoIfY8xCIC7bvEPGmPPnhNvZ/8KBLfZ11gHuAn43xqQYY84C2c9r3Wbvid6O7QtB9rwBEBEf4E7gJ3t+XwAVL5JfofENCsgsgAHORp/Ct0LOAtO3gj9norMKx7NRp/C1F1qLxnxL2+HdeGHtJNqOeIxl7/wIQECNIDxLe9PjhxE8PXcc9f7XjOImMCiQmKiYzMcx0bEEXqTI8PbzpnGbJkSs3grADx9+T4sHwvh6/TRenz6aKaOK12lonyB/EqKy9m1C9Cl8gvzztsm2b/NrA3DLI3dzcEUEAGVqBmEwdPn2ZbrNG0ejvvcUUQZXr0yFAE5FZu3buOjYixaQpfy8qN86lF2rtzsivCJTpkIgp7K9n+OiT1HmsvKOcER46gr5VQggPtv+jI8+RWn7sfdyVLq1OmUqBrJreXhRhFdgXkH+JEZmHX+Sok7hnev4k72NybCSdiYJD3+fHG2q3dOY2B0HsaZlnUFr993LdNv2KekJKRycu6EIs7g6JX3fFoaSOua6sC9o/BiYbIypCzwLeGabl3j+P8aY77ENmUgG5otIK0Cw9YY3sP/daIwZnd9GRKQGtp7f1vbe83m5tnWlErP9X4C3ssVR2xjz9SWWnwb0t+f9xgVisQDx2dbbwBhzc34rE5E+9iEvmzYl7L2KdApXoyfasGjsTCbeMZDFY2bS+d1nALC4ulDxthrMevJ9vuv+Ns0HPkBAjSAnR3v1LC4WBn88lLlT53D88HEAmt/XgmU/LaX37b0Y03M0gz4ajG1ofsnSuP99WM9Z2f3ragAsLi4Eh97AwoGf8lPXMdRqH0qVu/J8Z7xmWFws9J00iD+nzePkkePODsdhLC4W+kwaxNJp84k5csLZ4ahCJiLc/1oPfh8/09mhFKkyN1QidPijrHnlmxzTFz/+Lj827I+LuysVr+HjU36ul31rlYL9XQ4R6WAf0rtXRIblM99DRH60z18vItULmtflXNC4DPhVRD4wxsSKSACwBngUW6/148D5QYulgWP2//e80ApFpCa2HuZJ9vHa9YDFwO8i8qEx5oR9O77GmEP5rMIPW0F82j6uuyOwAtgN1BSR6saYg9iGmZy3GngYeEdE2gF5u+5sFgFjReQ7Y0yCiFQC0u3LfyEib2F73u7FNswDwBeIEhE3+/Nx/jk4a5+HMeaMiBwQkYeMMT/ZL56sZ4zZljsAY8yU8+seU+3xq/pyFtqjLQ0fDQMgMmI/fsFZPVu+QQGcPR6Xo/3Z43H4ZftG7VsxgLP23s76XZtnXtz4z7z1dH7HVlyfjTrFvrgE0pNTSU9O5fCGf6lwc1VOHYi+mpALTace99C2W3sA9kbsoax9iAdA2aBAYqNj813u+bcHEHUwkj++npM5re2jbXmj+ygAdm/5FzcPd/wC/Dgde7oIM7i4ej3acFs32749HrEfn4pZ+9YnKICE6Jz7NiE6LnO4R35tbn6wOTVah/BLt7eylok6xbENu0mJSwDg4PJtlLutOkdW7yySnC5Xq+4daNGtDQAHtu0lIDhr3/oHBRJ3gX3b662+HD8QxZJv5jkkzsIW1r0Dzbu1BuDgtn0EZHs/+wcFEH+BvHu81ZcTB6L48xrNu6S6q3s7mnZrBcCRbfsok21/lgkK4HT05Q0/8/DxJOiGyjz/w+sA+JYrTe+vhvD10+8XmwvfkqLj8A7OOv54VQwgMdcx6nybpKhTiIsFdz8vUu3HHq+KAbT6+kVWvfA5Zw/l/YKYkZrO4cVbqNq+IZGrdhRtMpfhetq3haGox03br937BGgLHMU2OmKOMSb7jSZ6A3HGmNoi8ijwDjnrxyt2yeLaGLNTRMYDf4lIBrbhEgOAqSIyFDgJnL9CbjS2YQ9x2IryGhdY7cNAdxFJB6KBN40xp0RkJLBYRCzYCtrngTzFtTFmm4iEA/8CR7AVvhhjkkXkOWChiCQCG7Mt9gYwS0S6YxuWEo2t+PXJte7F9vHfa+09lAnAE8aYjSIyB4gAjgPbgfMV1mvAevtzsR57QY1tGMqXIjIQeBBb4f2ZPU83+/w8xXVh2DRjCZtmLAGgTqsGNO7Zjp1z1lIppDapZ5NJsI+bPi/hRDypCclUCqnNsfC91O/anA3TFgFw9kQc1ZrezKF1u6hx163EHrQVz7uXbKbjmJ6IiwUXN1cqNajFuq8WFEU6V2T+jHnMn2ErJhq1CuWenveyas5Kbgi5kcSzScSdiMuzzONDnsDL14vJL+e8KPPksZPUu6s+y35eSuXalXH3cHNqYQ0QMeNPImb8CUD1Vg2o37Mt/81ZS1BILVLPJpGUa98mnYgnLSGZoJBaRIfv4+auzdg2bTEA1VrUo1G/e5n90DjOpaRlLnNoZQSN+t6Lq6c7GennqNT0JsK/WuiwHC9k2bcLWfatLY56YQ1p3bMj6+f8Tc2QOiSfTeJ0PuMW/ze4G6V8vZn6ymcOjrbwLP92IcvtedcNa0irnh3ZMGf1RfPuMvhRSvl6Mf0azrukWv3tYlZ/a3sP3hwWQrOe7Qmfs4ZqIbVJOZt0wfG3uaWcTeb1hlkXtD73w+vMGT+zWBVfMVv341cjCJ8q5UiKPkXN+5vy1/M5Lzc6vHgLtR9qzsnNe6l+T5PMO4K4+3nRdsZgNr/5Iyc2ZV3Q5+rlgZtPKZJPxCMuFqq0bsDx9bsdmteFXE/7tjA44KLEJsBeY8x+ABH5AbifnHdxux9b/Qq2a/Imi4iYAlyQI9faxTyXIiI+9h5nwfZtZY8x5kMR8QAyjDHnROQO4DP7hZNXs24vYCXQxxizpdCTyOZqe65z6zi2F7Va1CM9OY05Q74garttWHqf+W8ypdNwACrWrcH99tu17V2xjYWv225HVyX0BtqP7oHFxUJGajrzR04lyn67tzuevYcGD7XAWK2E/7CC9d9cfQG22RRN0frs2L6EtGxEanIqHw/5iL0RtqE2Hy6YxKCOAwkMCuSbDdM5sucI6Wm2i0bmT5/Lkh8WU6VOFZ5/ZwCeXqUwxjD9zalsXVU4499aUaZQ1tNybE+qtazHueQ0lgyZwokI2759bMF4vu9ouwK9fL0atJ3QB1dPdw4t38aK121nInqunICLu2tmD3V0+F6WDZ8KwI0P3EXj5ztjjOHg8m2sfvOHq45xqyX50o2uwhNjnqZuC9ttrr4e+gkHt9su2nxj/vuM6jQE/6AAPlj3JZF7j3LOvm+XTl/Ayh+XUqNeLfp/8Qrepb1JT03n9Ml4RrZ7sVDiciniH0Z4bMzT3NaiAWnJqUwd+imH7Hm/Pv89xnQain9QAO+tm0LU3qOZr+nl0xey6selhR7LZ5veLfR1XszQUW+zMTyC+PgzBAaU4bne3enaub3Dtv9K6PBCX+f/xjzJTS0akJ6cyqyhn2cWUIPnv82ETraz2PcOe4yG99+FXwV/zhyPY/2Py1n00c851lPYBVjd9MK5W2/lVvVp8sYTiMXCnh//ImLSHEKGdCVm2wGOLNmCi4cbzSf1JfDW6qTGJ7DiuckkHD5J/Rfup27/zpw5kDWUa3G3d0CgzfQhuLi7IhYhas0uNoyemXlx9tXa7lb4d0Qqrvv2g4M/FIvxjV9UfqJANc6zR2deNA8ReRDoYIx52v64O3C7MaZ/tjY77G2O2h/vs7eJyW+dl6MkFteDsA1JccfWy/6MMSZJbLf7+z9sY5/TgOeMMRsvvKZ81/09tgsnPbGND3/rEosUWGEV19eCoiqui6vCKq6vBUVVXBdXRV1cFyeOLq6drSiK6+KqsIrra0VRFNfFVXEprj+vUrDiut/R754Fst+PdIp9aC3gvOK62L9zRGQ94JFrcndjTL6X/BtjPgQ+zGf6HqBAN3o1xjxWkOWVUkoppZRNQYeFZL9G7QKOAVWyPa5M1nVxudscFRFXbNcP5n8hy2Uq9sW1Mab43RleKaWUUkoViAPGXG8E6tjvMncM2804cneUzsE24mEttuvjlhVkvDVcA8W1UkoppZRSV8p+nV1/bHeCcwG+sd+oYwywyRgzB/ga26+H7wVOYSvAC0SLa6WUUkop5XCOuKjMGDMfmJ9r2uvZ/p8CPFSY29TiWimllFJKOdzl/hDMtUaLa6WUUkop5XAOGHPtFFpcK6WUUkophyupxbXF2QEopZRSSilVUmjPtVJKKaWUcriS+it5WlwrpZRSSimH0wsalVJKKaWUKiQldcy1FtdKKaWUUsrhSuqwEL2gUSmllFJKqUKiPddKKaWUUsrhrCW071qL62IugrPODsFhMkrom+xCaqdmODsEh/mSY84OwaEmUs3ZITjMK6HDnR2CQ72z6U1nh+AwP9d7zdkhOFQ855wdwnVHx1wrpZRSSilVSEpql5qOuVZKKaWUUqqQaM+1UkoppZRyOB0WopRSSimlVCHRH5FRSimllFKqkOjdQpRSSimllCokJbO01gsalVJKKaWUKjTac62UUkoppRxOL2hUSimllFKqkOiYa6WUUkoppQpJySyttbhWSimllFJOUFKHhegFjUoppZRSShWSIu25FpGBQD8gCHjHGPN2UW6vuBGRXsBiY0yks2PJ7qnRzxASFkpaciqTh3zEgR37c8x393Rn8GevEFS1IlarlU1/buC7d2Zkzr/jnrt4eFA3MHBw1wEmDpzg6BSuSJ83niU0LJTU5FQ+Gvwh+3bsyzHfw9ODYZ+9SlC1IKxWKxv+3MD0t6cBUK5SOV58/0X8AkqTEH+W9194n9joWCdkcWXKhdXnlnE9EBcLR75bzr6P5+SYH9D0Jm4Z2wPfW6oS/uwkouducFKkBfPq+Jdo3voOUpJTGTFwLLu2775g249nvEflasE80OJxAPq/0odWHe7GarVyKiaOEQPHcvJ4jKNCvyIBYfW5YVwvxMVC5HfLOPTx7znml2l6M3XG9sTnlqrsfHYiJ+auzzHfxacUTVdN4OSCjfw3fKojQ79qD4zqyc1hIaQlpzJryGcc23kwT5uOQx4h9H9341Xam1dv7ZVnfr0OTej1+Ut80Hk4R7fvzzP/WjDyzQ9YuXoDAf5l+G3m584O54pVbFmPhmO7IxYL+2atYNfkP3LMt7i70nRSPwLqVic1LoE1fT8m8WgM3pXL0umv9zi7PwqAmM172TTsGwDqvfIQ1R9qjntpb36u09vhOV2tx0Y9Rd2wENKS0/h6yGQO7zyQY767pzv9Ph1M+WpBWDOsbFu6iZ/f+c5J0TpGSR1zXdQ9188BbY0x/tdCYS0ihf1lo9f/t3fncVHV+x/HXx9ARRAU1ARLc2vP3UxbNdPSFiu18pa2m2ZqXbNMW2yxa3WtTNu0Mqtfu23XzCVzKc3M3bLMfccNURAUhM/vj3PQAVFMZubA8Hn6mAfMOWeG99cDM9/5nu8CVPfzcxZJ49ZNSaxdnT6X3subj75Gj2d7FXjct6O/pl+b+xjQ4QHObHYWjVs1ASChViI39O7CYzc8woNt72fsU28HM/4/1qx1M6rXqk6PS+5h1MCR3De0d4HHfTn6S3pd1pN+7ftydrOzaNqqKQB3PXY308b/SJ8r7ufjER9z28Dbg5j+BIUJ5wy7g3n/ep6ZFz9E9esvoMLpJ+c5JGPzTpb0e5MtX872KGTRXdymJTVr16BDiy4Meeg/PP7Cw0c99vIOrUjfl55n29jXPuSG1rfSuU13Zk6dTa/+dwY68okJE84YdieL//Uf5l78b6pdfyHR+c7n/s07+bPf62w7yvmsO/BGUub+GYy0fnFWq0ZUqZ3Ic60e4PNBY+g89O4Cj1s+bQGvdBxc4L5y0ZFcfEd71i9aGcioAXddh7a8+dKzXsc4IRImNH3udmbc8gITWz3MqR1bEnta3t/dOl1bkZmyjwkX9mfFmO9p+FjXQ/vS1m9jUttBTGo76FDFGmDz1EVM6fBE0MrhD/VbNaZa7UQebdWHcYPepPvQHgUeN3nMtwxu048hVw2gXtMzqd+qcZCTBpcW8VZcBaxyLSJvAnWA70XkQREZ5W5/T0ReFZE5IrJGRDr7PGaAiPwmIktF5KlCnv9rEVkgIn+ISA+f7XeJyN8iMk9Exvj83LoiMldElonIsyKS5m5vJSI/ici3wHIRCReRF31y3OseFyYir4vIXyIyVUQm5mYXkSfc438XkdHi6Aw0A/5PRBaLSHkRaSoiM93ck0Uk0a//6cfhvLbnM2P8dABWLlpBVGw0lU6Ky3NM5v5M/vhlGQAHsw6y5vfVVE6oAsDlXa9g0vvfsW/vPgD27toTxPT/3PntWvDj+B8BWLFoBdGx0cTlK++B/QdY9stSwCnv6t9XUyXRKW+N02qwdPYSAJbOWUqLti2CmP7EVGpSj/S1SWSs345mZbPl61+odmWzPMdkbNxJ6vINaE5xfnk6ttZXXsK3n08EYOmCP4iJrUCVkyofcVz5qPJ079mVt17O22K7Ly3d55hItJj+V8Q2qUfG2m3sd8/ntq/nUOXK8/Ics3/jDtKWb0BzjuzBGNOgNmWrViJ5xtJgRS6yc9s1Y/6XswBYv2gV5WOiiKla6Yjj1i9aReqOlAKfo33/G/nxzW/JOpAVwKSB16xRfSrGxngd44TEN65L2rpt7Nuwg5ysbDZ8M5dTrmia55hTrmjK2s+dc71xwjwSLjqn0OfdtXAV+7enBCJywDRudx5zvpwBwJpFK4mKiaJivt/pzP2Z/PXLHwBkZx1k/R9riEs48jUtlOQU8VZcBaxyrao9gS1Aa2B3vt2JwEXA1cAwABFpB5wGNAcaAU1F5JJj/Ig7VbUpTgW2r4hUFpHqwONAC+BC4Eyf40cAI1S1PrAp33M1Afqp6unAXcAeVT0POA+4R0RqAzcAtYCzgW5AS5/Hj1LV81T1XKA8cLWqfgHMB25R1UbAQWAk0NnN/S4w9BjlC4jKCZXZtWXHofvJSbuoXO3of7xRsdE0u7z5oQpm9drVSax9Ms+Of57nvnqRRpc2CXjmoqicUJmdWw+Xd1fSTiof48UqOjaa5pefz2K3vGuXr+WC9hcA0PLKC4iKiSKmUvF+o4tMiCNjy+GuK/u37CIyIe4YjyiZqiVWJWnz9kP3t23dTrXEqkcc12dgD8a98RH7Mw4csa/voz35YeE3XNXpCka9MDqgeU9UZEI8+33O54Etuyh3vOdThNOGdGPlkA8ClC4wYqvFk+JT5pSkZComxB/3408+pxaVEivz5/RFgYhnjlNUQjzpPucxfWsy5RPz/u6WT4gjfUsyAJqdQ+bedMrGVwCgQs2qXDllKG3GP0bV5mcEL3gAxFWrTLLP/0VyUvIxK87lY6No1KYZf84uOR+KzWFeDWj8WlVzVHU5UM3d1s69LQIW4lSMTzvGc/QVkSXAXKAGhyvmM1U1WVWzgM99jm/pc/+jfM81T1VzOz+1A7qLyGLgV6Cy+9wXAZ+7uZOA6T6Pby0iv4rIMuAyoKCP3mcA5wJT3ed+DDjlGOXzXFh4GA+OfIiJYyewfeM2AMIjwkmslciTNw3ilb7/peew3kTFRnuc1D/CwsMYMPJhvh37Lds2JAHw7tB3OPf8+oyY+Cr1W5zLzq07ySmgddAUT2eccxo1ap3CtO9nFrj/1f+8yeVNOvLd+Mn8687OBR5Tkp1yRzt2TlvMga3JXkcJGhGh4+Pd+Wboh15HMUWQsT2Fb87rx6R2g1k45ENavt6biArlvY4VFGHhYfR89UF+eG8iOzZuL/wBJZgW8V9x5dVUfL5NSOLz9T+q+lZhDxaRVsDlQEtVTReRGUBkEfLsy5enj6pOzvczOxwlSyTwOtBMVTeKyJCjZBHgD1VtWcC+/M/ZA+gB0Di+AXUqnHpchTiaK7t3oM3N7QBYvXQllatXBZz+l/EJldm1reABej2H3c/WtVv47t3Dg+F2bd3JysV/k30wm+0bt7F17RYSayWyeumqImX0p6u6X8UVXa8EYOXSv6ni05pZOaHKUQck9hnWhy3rtvDtO4cHiyVvS+a5e50LDJFRkVzQ/sJDXWKKq/1Juylf/XCLSGT1yuxPyn/xqGS6+Y5OdL61IwC/L/6ThJNPOrSvWuJJbPO5SgHQqFl9zml4JpN/+4rwiHAqV4lj7Jevc8cN9+U5bsL4ybzx0Uu89mLxG0OwPymZSJ/zWa56ZQ4c5/ms2Ox0Kp1/Jqfc3pbw6EjCykaQnb6f1c9+HKi4J+zCbu1o0fUyADYuWU0lnzJXSohnT9LxfUAoVyGShNNPofcnTp/cmKoVuevth3jn7v+W2EGNJVV6UjJRPucxKjGejK15f3czknYTVT2ejK3JSHgYZWOjyExOAyAz0/m6e9k60tZtI7ZOAslL8w4CLM4u63Yll3RtA8DaJauJ9/m/iE+IZ/dR3otu+09Ptq3dytR3vwtKTi+FalNVcZqKbzJwp4hUABCRk0XkpKMcWxHY7Vasz8TpBgLwG3CpiMS5gxM7+Txmrs/9mwvJ0UtEyrg5TheRaGA20Mnte10NaOUen1uR3ulm923+SgVy+xCsAKqKSEv3ecuISIGdy1R1tKo2U9VmRa1YA0x6fyIDOjzAgA4PMG/Kr7Tq1BqA0xqfQXpqOinbj3yjvvmhW4iKiTpiwOK8Kb9yTov6AMTExZBYuzrbNmwrckZ/+u797+jbvg992/fhl8lzuayT84Z9RuMzSE/dx+4CynvrQ92IiolmzJC8XQNi42IRcT7/del9I1M/nRr4AhTRnkWria6TQPmaVZEy4VS/riXbJi/wOpZffDJ2PJ3bdKdzm+78+P1Mru3ifOZt0PQc0lLT2Lk975vVp+O+5LKG13DFedfT/dp7Wbdmw6GKdc3aNQ4dd9mVl7B25frgFeQfSF20mqg6CUS657PadRewc/L843rsH/eNZHbT3sw5rw+rnvqQrZ/NKpYVa4DZH0xheIeBDO8wkGVT5tPsBqdX4KmN67E/Nf2ofavz25+awRNNevDsRX149qI+rF+0yirWHklevIaY2glE16hKWJlwanZswaYpeV+LNk9ZSO0uzrmucXVztv3s9DkuFx+DhDmvvdE1qxJTO4G0DSWrFffHDyYxpMMAhnQYwKIp87jghlYA1Gl8Gump6ewp4Hf6+v43Uz4mio+fLhmz+hRVDlqkW3FVbBaRUdUpInIW8ItbmUkDbgUK+muaBPQUkT9xKq1z3efYLCLPAfOAZOAvIHfE3QPAhyIy2H380UbivY3Tt3qhOEF2ANcB44E2wHJgI07XlT2qmiIiY4DfgSScCn6u94A3RSQDp1tKZ+BVEamI83//CvDH8fz/+MvCH+fTpHVTRs16iwMZB3j9oVcP7Xtx4isM6PAA8QmV6dznJjat2sgL370MwKT3v2PaJ1NZPHMhDS9pxMs/jCInO4cPnnuPtJTUYBbhH5n/4280a92MMT+97UzF99DLh/a9+v1I+rbvQ+WEytzc92Y2rtzIiInO/8eEcf9jyidTqN+yPrc9chuq8Puvv/PG4697VZTjptk5/P7oezT/5FEkPIxNH88gbcUmTn+4MylL1rJ98gIqNqpD07H/pkylaKq1a8LpA7ow69IBXkf/R2b9MIeL21zA979+QUbGfh7vd3hGhS+mvU/nNt2P+fgHH7uPWvVqojnKlk1JPD3g+UBHPiGancOKR9+l8SeDIDyMrR/PYN+KTdR5uAt7l6xh5+QFxDSqS4Ox/SlTKZqq7ZpSe0AXfr30Ia+jn7A/py/irNaNGDRzBFkZB/h4wOEp6PpPHMbwDgMBuHrgv2jS8ULKlC/LE7+8xq+fTmfyK194FTsgBjw5jN8WLSUlZS9trruV++7qRqdrrvA61nHR7BzmD36PVh89goSHseaTmez9ezP1B3QieclaNk9ZyOqPZ9Dy1V5cPXs4mSn7mN1rJABVW5xJgwGdyTmYjebk8NvAd8lMca4aNnqsK6dedwER5cvScf5IVn88nd+Hf+llUQu1dPpCGrRuwrCZo8jMOMC7Aw6/lwyZ+CJDOgwgLiGea/p0ZsuqTTz53QsATBs3iZ8+neZV7IArvtXjohEtrkPkT5CIVFDVNLfl+ivgXVX9SkSigAxVVRG5Geiqqh1P8Lkr41TgL3T7XwdM51OvDa0TdAz7NdvrCEHV60Cs1xGC5hFKzqVcfxhB0a84lRTflZfCDwohz89/zusIQfNFg8e9jhBUU8seOeg5VL277oti8Yfbq9aNRarjvLHusxMuh4jEA5/iNKiuA25U1d35jmkEvAHEAtnAUFX9tLDnLk7dQvxliDtg8HdgLfC1u70psFhEluLMv93/BJ57gvvcPwHPBLpibYwxxhgTqjzuFjIQmKaqpwHT3Pv5pQPdVfUc4ErgFRGpVNgTF5tuIQVxW4gLuh7SRlULHAmgqgVeC1XVn4CGRcmjqq2K8nhjjDHGGOPweEBjRw6PnxsHzAAe8T1AVf/2+X6LiGwHqgIpx3riYl25divQjbzOYYwxxhhj/Mvj6fSqqepW9/skDk8NXSARaQ6UBVYX9sTFunJtjDHGGGNCU1Fbrn2nLnaNVtXRPvt/ABIKeOhg3zvueLyj1vTdFbU/AG5T1UJjW+XaGGOMMcaUOG5F+qjL66rq5UfbJyLbRCRRVbe6lecC53oUkVjgO2Cwqs49nlyhOKDRGGOMMcYUcx6v0PgtcJv7/W3AN/kPEJGyODPPva+qxz3Pp1WujTHGGGNM0OUU8VZEw4C2IrISZ9XvYQAi0kxEclfQuxG4BLhdRBa7t0aFPbF1CzHGGGOMMUGX4+FaK+6kGW0K2D4fuNv9/kPgw3/63NZybYwxxhhjjJ9Yy7UxxhhjjAm6UF2C2irXxhhjjDEm6PywymKxZJVrY4wxxhgTdB4vIhMwVrk2xhhjjDFB5/Hy5wFjAxqNMcYYY4zxE2u5LuZaaqzXEYKmtH3SSw8LzcthBbmrTD2vIwTVzqzSc27rZ4nXEYLqiwaPex0haDovfcbrCEF19ZD7vY5Q6lifa2OMMcYYY/zE+lwbY4wxxhjjJ9bn2hhjjDHGGHNM1nJtjDHGGGOCTj1c/jyQrHJtjDHGGGOCzgY0GmOMMcYY4yeh2ufaKtfGGGOMMSboQnW2EBvQaIwxxhhjjJ9Yy7UxxhhjjAk663NtjDHGGGOMn9hsIcYYY4wxxviJDWg0xhhjjDHGT0J1QKNVrkuJ1k91o3brRhzMOMCk/qPZ/vu6I445qX4trhx+LxGRZVk7fTHTn/wAgAv6d6ZeuyZojpK+ay+T+r/Fvm0plI0pT4cRvYipXpmwiHDmvzWRPz6fFeSSHamVW9asjANMOUZZr/Ap6wy3rC37d6auW9aMXXuZ7Jb1lBZnce3bD7Jn4w4AVk36jV9HfB3EUhWsWusGNH66GxIexpqPZrBi1P/y7A8rG0HzV3sR16AWB3anMffekaRv2glAxbNq0PSFu4iIKQ85yg/tHyfnQNahx1743r+JPvUkprQeGNQyFaa0nN+EfOf2rwLO7fnuuc3cncYc99xGnVKF9rNeJHX1VgB2LVzFgkfeJSI6ksu+fuLQ46Oqx7N+/M8seuLDoJarICe3asD5T3dDwsL4++MZLHvtyLJeMqInlevX5sDuVGb0GkXapp1Uv/hcmg66ifAyEWRnHWT+sx+zdfZyANp++DBR1Soi4eFsm7eCuYPeQ3OKxxt5YqsGNHnGKe/qj2fwZwHntsWrvYiv7/zdzuk5kn2bdhJ9ShU6zHyR1DXOud25YBXzB74LQINHulCry8WUrRjNF6fdFfQy+cNjz73ErNnziI+rxNcfvul1HL8KP6spkZ3vhbAwsuZMJnPq53n2R5x/OeWuuwvd47w+Z82cQNYvk72IavzAKtelQO3WDYmrlcC7l/QnsXFdLh96Ox91HHLEcZcPvYOpj7zN1kWruWHcAGq1asC6GUuZ/9Z3zBn+BQCN72hHy37X88OgsTTq3pZdKzfz9Z0vUT4+hjtmvMifX88mJys7yCU8rFbrhlSqlcDYS/qT0Lgulw29nU8KKGsbt6xJi1ZznU9ZF7z1Hb+4ZW10Rzta9LueaYPGArD5txV8c8fwYBbn2MKEJs/dzqyb/kP61mQu//4ZtkxZSOrfmw8dUrtrKzL37OP7C/pTo2MLGjzWlbk9RyLhYTQfdR/z+rzBnuUbKBtXgZysg4ced3KHZhzcd8CLUh1TaTm/EiY0fe52Ztz0HzK2JtPWPbd7fc5tHffcTnTPbcPHuvJLz5EA7Fu/jSltB+V5zoP79ufZ1nbys2yaOD84BToGCRNaDL2NyV2Hkb41mWsmPs2GKQvYs3LLoWNO79qKA3v2Mf6i/tS+tgXNBt/MjF6j2J+cyg+3DydjWwqVzjiFdv/3MJ816wvAjJ4jyUrLAKD16L7Uuvp81n4715My+so9t9Nvds5tu4nPsHnyQvauzHduU/Yx4cL+1HTP7Rz33Kat38akfOcWYPPURfw9dipXzy4ev8Mn4roObflXp2sZ9Mx/vY7iXxJG5I33kT5qMJqyk6gBr3Bw2VxykjbmOezgwlkc+PwNj0J6I1QHNNpUfEUkIl+LyAIR+UNEerjb7hKRv0VknoiMEZFR7vaqIjJeRH5zbxcGI2Pddk1ZPv5nALYuWk252GiiT6qU55jokypRrkJ5ti5aDcDy8T9T74pmAGS6b1AAZaLK+QxAUMpGl3e2R0eyP2UfOQe97UFVt11T/nTLmnSMspatUJ4kt6x/jv+ZuoWWtfiJb1yXtHXb2LdhB5qVzcZv5nLyFU3zHFP9yqas+8y5mrBpwjxOuvgcAKpdWp89f25gz/INAGTuTgO3VS88qhyn39uB5cWgZT6/0nJ+4xvXJdU9tzlZ2Ww4jnNbzT23x6NCnQQiK8eyY+5ffs19Iqq4ZU1zy7rmm7nUzFfWmu2asOrznwBY9908Ei9yypr8x3oytqUAkLJiExGRZQkr67QZ5VasJSLc3VY8zrXv323uuT0lX3lPuaIpa92rgBsnzCPhosLP7a6Fq9i/PSUQkYOmWaP6VIyN8TqG34XVOp2cnVvQXUmQfZCDC2cR0aCl17GKBVUt0q24spbrortTVZNFpDzwm4h8BzwONAFSgR+BJe6xI4CXVfVnEakJTAbOCnTACglxpG7ddeh+alIyFRLi2OfzQlwhIY7UpOQjjsl14YAunNPpIg6kpvPZTc8BsOi9qVz3zr+5d/4oykZHMqH3KPD4lz1/WdOOUtY0n7Km5SvrBQO6cLZb1i/csgIkNqnHrZOGkrYthZ+GfsQun1ZEL5RPiCd98+Gypm9NpnLjuvmOiSNji1NWzc4ha286ZeMrEFM3ERQu/vgRylWOYePXc1nx+gQAzn2kCyvenEh2evFruS4t57d8QjwZhZzbqIQ40gs4twDRNavSbspQstIyWPb85+z8dUWex9bs2JINxaAVF5xy7Nty+Hylb02magFl3edT1sy96ZSLq8CB3WmHjjn1qvPY9fs6cjIPX4Fp938PU6VRXTZNX8K6CfMCXJLjE5UQT/qWfOe2yZF/t+n5ypt7bivUrMqVU4aSlZrB0uc/Z8e8vOfWFD9hFSuTs3vnofs5u3cSXuuMI46LaHQh4fXOJWf7Zg6MH42m7DzimFBjLdfmaPqKyBJgLlAD6AbMVNVkVc0CfDtWXQ6MEpHFwLdArIhUCHbgEzH7xc8Z3aIff349h8a3twWg1qX12bF8PW81u58PrhxMm6e7U7ZCeY+TFt2cFz/n7Rb9+OvrOTRyy7r993W80/IBPrxyMIvfm8I1Yx70OGXRSHgYVZqfzq+9X2N6x6c5uX0zTrroHCqecyoVTj2JLd97310gUEL9/O7fnsL/mvVjSrvBLB7yIS1f601Evr/Lmte1ZMPXczxK6H+VTj+ZZoNuZs4j7+bZPuWWF/i0yf2El40g8cLjb9kvrjK2p/DNef2Y1G4wC4d8SMvXjzy3pmQ6+Puv7HvydtL/05vsvxYR2a2/15FMEVjlughEpBVOhbmlqjYEFgHHus4aBrRQ1Ubu7WRVTct/kIj0EJH5IjJ/btrKE8rWqPvldPt+KN2+H8q+7SnEJFY+tC8mIZ60pN15jk9L2k1MQvwxjwH486s5nNb+PADO7XIpKyc5lbCU9dvYs3EH8XUTTyhvUTTsfjm3fD+UWwooa4WjlLWCT1kLOgbgr6/mUM8ta2ZaBlluS+666UsIiwgnMs7bz0UZSclEnXy4rFGJ8WTkK0dG0m7KV3fKKuFhlImNIjM5jYytyeyY+xeZyWlkZ2Sy9cfFVKpfi8pN6xHXsA4d5r1C62+eJKZOIpeOHxzUcuVXGs9vRlIy5Qs5t+lJu4kq4NzmZB50uvkAu5euI239NmLqJhx6XKWzaxIWHsbupesCX5DjkJ60m+jqh89XVGI8+wooa7RPWcvGRh1qtY5KjOeydx7gp35vkrp++xHPn30giw1TFlLziiYBLMXxS09KJqp6vnO79ci/26h85T3i3C5bR9q6bcTWScAUbzl7dhEWV+XQ/bC4KuieXXkP2pcKB52rLllzJhNes14wI3pGi/ivuLLKddFUBHararqInAm0AKKBS0UkTkQigE4+x08B+uTeEZFGBT2pqo5W1Waq2qxFhdNOKNji93/gg/aD+aD9YFZNXsDZnS4CILFxXQ6kpue5jA6wb3sKB9IySHQvx57d6SJWT1kAQKVa1Q4dV69dE5LdWQj2btlJTbc1KKpKLHF1E9mz4cg3t0Bb8v4P/F/7wfxf+8GsnryAs9yyJjSuS+ZRypqZlkGCW9azjlLWuu2asNsta1TVioe2V2tYBwkT9u8+4nNRUO1evIYKtROIqlEVKRNOjY4t2DJ5QZ5jtkxeSK0bLwHglKubs/3nPwBImrGUimfVILx8WSQ8jKotzmLv35tZ8/40JjS+n4nNH2B6x6dIXbOVmZ2GBr1svkrj+U1evIaY2glE16hKWJlwanZsweZCzu0299yWqxyDhAngdA+pUDuBfT6VzprXtWT9178EqSSF27l4DbG1E6jglrVOxxZsnLIwzzEbpiykXpeLAah1VfNDM4KUjY2i7fv9WfDcp2yff7ghIiKqHOXdvvgSHkaNNo3Ys2prcApUiILO7aYpec/t5ikLqd3FObc1fM9tfN5zG1M7gTQPXnPNP5Oz/m/CqlZHKleD8AgimlzCwaV5u2VJ7OGuaxH1zz9isGOoylEt0q24sj7XRTMJ6CkifwIrcLqGbAaeA+YByTgt2Xvc4/sCr4nIUpz/+1lAz0CHXPvjYuq0bshdPw0nKyOTyQ+NPrSv2/dD+aC90zI57bH3uHJ4D3f6siWsne50Fb944E3E101Ec5S9m3fyw6PO7ApzX/2aK4ffS/cp/0EEfvrPp2R4XOFc++NiarVuyB0/DedgRiZTfMp6y/dD+T+3rD8+9h7t3LKum76EdW5ZLxp4E3FuWVN9ynpah+Y07NaGnIPZHNyfxcT7Xwt+4fLR7BwWDXqPSz5+BAkPY+0nM9n792bOGdCJ5CVr2TplIWs/nkHzkb1oP2c4mSn7mOvOOJC1J52/3/qeNt8/A6psnbaEpGmLvS3QcSgt51ezc1g46D0udc/tGvfcnuue2y1TFrLm4xm0GNmLDu65zZ0ppGqLMzl3QGdn1h7NYcEj75KZsu/Qc9e4tgWzbn3Bq6IdQbNzmPvYONp99DASFsbKT2eS8vdmGj/UiZ1L1rJx6kJWfjKTi1/tSaefh3MgJY0Z940C4Kw72hJTqxoNH7yehg9eD8CUrs+DQJux/ya8bAQSJmyd8yd/fTDNy2Ieotk5zB/8Hq0+yntu67vndvOUhaz+eAYtX+3F1bOdczu71+Fz22BAZ3IOZqM5Ofw28PC5bfRYV0697gIiypel4/yRrP54Or8P/9LLov5jA54cxm+LlpKSspc2193KfXd1o9M1V3gdq+hyctj/2RtE9X4WJIysuVPISdpA2atuJXvDSrKX/UqZVh2JqH8+ZGej6ans//Alr1MHRfGtHheNFOfRliWViFRQ1TS35for4F1V/epEnmt4zVtLzQkqbZdRTskqNaeWTWXE6whBVb0Undv0sNJ1biNL0Xtm56XPeB0hqPYPud/rCEETM2pisfjDvfDky4r0BzV784/Fohz5lbb6TLAMcQct/g6sBb72NI0xxhhjjAkK6xYSAKr6kNcZjDHGGGOKs1Cdis8q18YYY4wxJuhCtWuyVa6NMcYYY0zQhWrLtfW5NsYYY4wxQeflPNciEi8iU0Vkpfs17hjHxorIJhEZdTzPbZVrY4wxxhhT2gwEpqnqacA09/7RPIMzffJxscq1McYYY4wJOlUt0q2IOgLj3O/HAdcVdJCINAWq4SwEeFysz7UxxhhjjAk6j/tcV1PV3KVbk3Aq0HmISBgwHLgVuPx4n9gq18YYY4wxJuiK2vosIj2AHj6bRqvqaJ/9PwAJBTx0cL4cKiIFhbkPmKiqm0SOf70aq1wbY4wxxpgSx61Ijz7G/qO2NovINhFJVNWtIpIIbC/gsJbAxSJyH1ABKCsiaap6rP7ZVrk2xhhjjDHB53G3kG+B24Bh7tdv8h+gqrfkfi8itwPNCqtYgw1oNMYYY4wxHvByKj6cSnVbEVmJ0596GICINBORt4vyxNZybYwxxhhjgi7HwxUaVXUX0KaA7fOBuwvY/h7w3vE8t1WujTHGGGNM0Pmh9blYssp1Mdejw06vIwTNrK+OujhSSFoYWXp6Zc3XFK8jBNWoUzK8jhA0L++o6nWEoErhoNcRgubqIfd7HSGoIocc1+J7xhTKKtfGGGOMMSbovOwWEkhWuTbGGGOMMUFn3UKMMcYYY4zxE2u5NsYYY4wxxk9CteW69IyoMsYYY4wxJsCs5doYY4wxxgSddQsxxhhjjDHGT0K1W4hVro0xxhhjTNCp5ngdISCsz7UxxhhjjDF+Yi3XxhhjjDEm6HKsW4gxxhhjjDH+oTag0RhjjDHGGP+wlusQISIPAKNVNT3AP6cWcIGqfuTevx1opqr3B/LnFib87KZE3tgLwsLImj2JzMmfFXhcROMLKX/v4+x7rg85G1ZCeASRt/Ql7NTTQJUDn71J9t9Lg5z+n6nauiFnP9sdCQ9j4/9NZ/XIb/Psj29xJmc/052Ys2uy6N5XSZow79C+8z4eSFzTeiTPW8H8W18MdvR/5Ioh3anXuiFZGZl8+9BbJP2+7ohjEs6tRcfhPYmILMOq6UuYPOR9AKqdfSodht5JRLky5GRn8/1jY9myZA2V6yZy7X/vJeGcWkz/72fMHT0xyKU6Pvc81YOmrZtxIOMAI/q/wprfV+fZXzayHI+8MZCEUxPIycnhtx/m8f6wcQBUqV6VB156kOjYaMLCw3h/2DgWTJ/vRTEKFdnyPCr17w1hYez7ZiKp4z7Jsz/6hqup0KUj5OSg6RkkP/cyB9eup1zzplS6/24oEwFZB0l59S0OzF/sTSH+oeufvI2zWjcmM+MAHz/0Bpv/WHfEMe0fuolmN1xCVMVoHj3n9iP2N7iyObe/+W9eumYQm5atCXxoP/jXk3dSv3VjMjMyeeehUWz4Y22e/WUjy9Lr9f6cdGoCOdk5LJk2ny+e/z+P0hZN+FlNiex8r/N+NGcymVM/z7M/4vzLKXfdXeienQBkzZxA1i+TvYgaEI899xKzZs8jPq4SX3/4ptdxPBGqLdelcUDjA0BUQTtEJNyPP6cW8C8/Pl/RSRiRXXuTPuox9j3Vg4jzWhGWWPPI48qVp8xl15G95s9Dm8pc1B6A9Gd6kTHiUcp1ugdEgpX8nwsTzhl2B/P+9TwzL36I6tdfQIXTT85zSMbmnSzp9yZbvpx9xMPXvP4/Ft//erDSnrB6rRsSXzuB1y7tz3ePvkOHZ+8o8LgOQ+9kwsC3ee3S/sTXTqBuq4YAtHm0K7NGfMmYDoOY+dIXtHm0KwAZKfuY9OT7zB3zXdDK8k81bd2MxFrV6XlJD14bOIpeQ+8r8LivR39J78t68WD7fpzZ7GyatGoKwI19b+LnCT/xYId+/Pf+F7j32V7BjH/8wsKIe7gvO/o9StKNdxLV7jIiap+a55D0yT+yres9bLvlXvZ+8CmVHuwJQE7KHnb8+zG2db2H5KeeJ/6pR70owT92VqtGVKmdyHOtHuDzQWPoPPTuAo9bPm0Br3QcXOC+ctGRXHxHe9YvWhnIqH5Vv1VjqtVO5NFWfRg36E26D+1R4HGTx3zL4Db9GHLVAOo1PZP6rRoHOakfSBiRN95H+utPsO/ZnkQ0vZSwhBpHHHZw4SzSh/UhfVifkKpYA1zXoS1vvvSs1zFMAIR05VpEokXkOxFZIiK/i8iTQHVguohMd49JE5HhIrIEaCkit4rIPBFZLCJv5Va43eOGus81V0SqudvruveXicizIpLm/vhhwMXu8zzobqsuIpNEZKWIvBDc/w0Iq3UGOdu3ojuTIPsgB3+bSUSDlkccV+7a7mRO/hw9mHX4sYk1ObhiCQCaugfNSHNasYupSk3qkb42iYz129GsbLZ8/QvVrmyW55iMjTtJXb4BzTnyk/Oun/7gYFpGsOKesNPbNmXp+J8A2LxoFZGxUVQ4qVKeYyqcVIlyFcqzedEqAJaO/4kz2jkVTFQpV6E8AOViokjbngJA+q69bF26huys7KCU40Q0b3c+08f/CMDfi1YQHRtN3ElxeY7J3H+AZb8sA+Bg1kHW/L6ayolVAKfFJCrG+ZwdFRPN7m3JQUx//MqecyZZGzeTvXkrHDxI+tTplL/0gjzH6L7DF+LCIiPJvdKa9fcqcnbucr5fvQ4pVxbKlAla9hN1brtmzP9yFgDrF62ifEwUMVUrHXHc+kWrSN2RUuBztO9/Iz+++S1ZB7IK3F8cNW53HnO+nAHAmkUriYqJomK+cmfuz+SvX/4AIDvrIOv/WENcQuUgJy26sFqnk7NzC7rLfT9aOKvA96NQ1qxRfSrGxngdw1M5qkW6FVchXbkGrgS2qGpDVT0XeAXYArRW1dbuMdHAr6raENgF3ARcqKqNgGzgFp/j5rrHzQLucbePAEaoan1gk8/PHgj8pKqNVPVld1sj9/nrAzeJyJEf0wMoLK4yObt3HLqfk7ITicv7ohxWox4SV5Xs3+fl2Z6zaQ0RDVpAWBhSuRrhNU8jLK5qUHKfiMiEODK27Dp0f/+WXUQmxB3jESVTTEI8e33KuTcpmZhqecsZUy2OvUmHK457tyYTkxAPwJSnP+DyQV3p+8urXD74X/z4/KfBCe4HlRMqs3PrzkP3dybtovIxKhnRsdGcd3lzls5eDMAnL3/Epde35p1f3+OJcUMY/WTxvCwbXrUK2dsO/91mb9tBeNUqRxxXoUtHEr/6gIp9e5Dy31FH7C9/2SVkrVgJWcW/shlbLZ4Un9/rlKRkKrq/s8fj5HNqUSmxMn9OXxSIeAETV60yyT7lTk5KPmbFuXxsFI3aNOPP2cW7i15BwipWJmf34b/fnN07kYpHljWi0YVEPfoakXcNQiod+XtvSjYt4r/iKtQr18uAtiLyvIhcrKp7CjgmGxjvft8GaAr8JiKL3ft13H2ZwAT3+wU43T4AWgK5HcU+KiTPNFXdo6r7geXAqYUcH1wilOvSgwPjxxyxK2vOZDRlB1GPjqTcjT3JXrMcckJz8vfSpOmtlzPlmQ95tWVfpj79IVe/cE/hDyqBwsLD6D9yABPGfsu2DdsAuPjaS/nx82ncdf7tPH3bEB58pT9SnLs6FSLt82/Yen039owcQ+ydt+bZF1HnVCr1uYfk514+yqNDh4jQ8fHufDP0Q6+jBFRYeBg9X32QH96byI6N272OExAHf/+VfU/eTvp/epP91yIiu/X3OpLxM1Ut0q24CukBjar6t4g0AToAz4rItAIO26+qude+BRinqgV1TMzSw2cymxP7vzvg8/1Rn0NEegA9AEZcfDZ3nO2fBu6c3bso49PaHFapCrr7cCsJ5coTVv1Uov7t9FiR2DjK3zeEjNeHkLNhJQc+H33o0KgBL5GzfbNfcgXC/qTdlK9+uBUksnpl9ift9jCR/zTr3pbGNzsXXrYsXUOsTzljE+JJ3Za3nKnbdhPr0+oXmxhPqtuS3aDTxYcGNy7/7leufr54V647dL+Ktl2vAGDV0pVUSTzcklUloTK7knYV+Ljew/qwdd0W/vfO4UGtbW9uy1PdngRgxcK/KFOuLLHxsezZVdBncO9k79hJeLXDf7fh1aqSvWPnUY9PnzKduIH94Cn3+JOqUOWFp9n15DCna0kxdWG3drToehkAG5esppLP73WlhHj2JB1ft51yFSJJOP0Uen/yBAAxVSty19sP8c7d/y2Wgxov63Yll3RtA8DaJauJ9yl3fEI8u4/yO33bf3qybe1Wpr5bfMdFHEvOnl2UiTv89xsWVwXdk6+s+1IPfZs1ZzLlrrszWPFMkITqbCEh3XItItWBdFX9EHgRaAKkAkfr5DQN6CwiJ7mPjxeRwlqX5wKd3O9v9tl+rJ9zTKo6WlWbqWozf1WsAXLWryDspOpI5WoQHkHEeZdycOncwwfsT2ffQzexb/Bt7Bt8G9lr/zpUsaZMOShbDoDwsxqjOdnkbN3gt2z+tmfRaqLrJFC+ZlWkTDjVr2vJtskLvI7lF/Pfn8qYDoMY02EQK6bMp0GniwE4uXE99qdmHOo3nSttewoH0jI4uXE9wKlQ/z11gbtvN6e2OAuAWheeQ/K6pOAV5ARMfP87Hmzflwfb92Xu5F9o3cmpjJ3e+Az2paaze/uRH6BueehWomKieHtI3isyOzbvoMGFzsDOU+qdQtlyZYpdxRogc/lflKl5MuHVEyAigqi2rcmYNSfPMRE1Dg/WjbyoBQc3OB98pUI0VV5+jj2vjSFz6R9Bzf1Pzf5gCsM7DGR4h4EsmzKfZjdcAsCpjeuxPzX9qH2r89ufmsETTXrw7EV9ePaiPqxftKrYVqwBfvxgEkM6DGBIhwEsmjKPC25oBUCdxqeRnprOngLKfX3/mykfE8XHT48Nblg/yln/N2FVfd6PmlyS9/0Ip4EnV0T988lJ2hjsmMackJBuucbp2/yiiOQAWUAvnG4ck0Rki0+/awBUdbmIPAZMEZEw9zG9gfXH+BkPAB+KyGBgEpD77rwUyHYHSr4HeN9smpPD/k9fJ6rvUHfqoynkbF1P2Wu6kb1+Jdn5Xth8SWwlovoMRTUHTdnF/rHFe3o6zc7h90ffo/knjyLhYWz6eAZpKzZx+sOdSVmylu2TF1CxUR2ajv03ZSpFU61dE04f0IVZlw4AoOU3TxJdrzoR0ZFctmgUSx8czc4Zxa9f46ofF1OvdSN6z3qJg+5UfLnumfgcYzoMAuD7x8Zy7fB7iYgsy+oZS1g13RmcOuGRt7liSHfCwsM4eCCLCQPfBiC6akXu/t+zlKtQHs3J4fw72/PG5Q+TWYwGeS74cT7NWjfjzZ/GcCDjACMfeuXQvpe/f5UH2/elckJlbux7MxtXbuSliSMAmDhuAlM/mcLYZ9+h9/N9uPbu61BVRvz7lYJ/kNeyc9j9wkiqvvo8Eh5G2rffc3DNemLvvZ3MP1ewf9YvVLjxOiKbN0EPHiRnbxq7nnoegJgbryOiRnVi7+5G7N3dANhx/yPk7E7xsECF+3P6Is5q3YhBM0eQlXGAjwcc7g/ff+IwhncYCMDVA/9Fk44XUqZ8WZ745TV+/XQ6k1/5wqvYRbZ0+kIatG7CsJmjyMw4wLsDDs9YNGTiiwzpMIC4hHiu6dOZLas28eR3zlXGaeMm8dOnBV2YLcZyctj/2RtE9X4WJIysuVPISdpA2atuJXvDSrKX/UqZVh2JqH8+ZGej6ans//Alr1P71YAnh/HboqWkpOylzXW3ct9d3eh0zRVexwqq4ty1oygkVAsWLCISBWSoqorIzUBXVe3or+dP7XllqTlBs74KvQGHx7IwMqQvHOUxv8DhDqFrVLXi8yEk0F7eUXwHNgdCCge9jhA0I64O6HIQxU7kkCMHAoeqMlXqFIsBJvExpxWpjpOcurJYlCO/UG+5DoamwChxRkKlANYpzBhjjDGmEKHawGuV6yJS1Z+Ahl7nMMYYY4wx3rPKtTHGGGOMCbpQnS3EKtfGGGOMMSborFuIMcYYY4wxflKclzAvCqtcG2OMMcaYoCvOS5gXRemZC8wYY4wxxpgAs5ZrY4wxxhgTdKHaLcRaro0xxhhjTNCpapFuRSEi8SIyVURWul8LXMlORGqKyBQR+VNElotIrcKe2yrXxhhjjDEm6LSI/4poIDBNVU8Dprn3C/I+8KKqngU0B7YX9sRWuTbGGGOMMUHnZcs10BEY534/Drgu/wEicjYQoapT3bxpqppe2BNb5doYY4wxxpQ21VR1q/t9ElCtgGNOB1JE5EsRWSQiL4pIeGFPbAMajTHGGGNM0Pmh33QPoIfPptGqOtpn/w9AQgEPHZwvh4pIQWEigIuBxsAG4FPgduCdY+WyyrUxxhhjjAm6onbscCvSo4+x//Kj7RORbSKSqKpbRSSRgvtSbwIWq+oa9zFfAy0opHItobr0pDlxItLD95NfqLPyhq7SVFYoXeUtTWWF0lXe0lRWKH3lLS5E5EVgl6oOE5GBQLyqPpzvmHBgIXC5qu4QkbHAfFV97VjPbX2uTUF6FH5ISLHyhq7SVFYoXeUtTWWF0lXe0lRWKH3lLS6GAW1FZCVwuXsfEWkmIm8DqGo28BAwTUSWAQKMKeyJrVuIMcYYY4wpVVR1F9CmgO3zgbt97k8FGvyT57aWa2OMMcYYY/zEKtemIKWt75eVN3SVprJC6SpvaSorlK7ylqayQukrb8izAY3GGGOMMcb4ibVcG2OMMcYY4ydWuTbGGGOMMcZPrHJtjDElkDhqeJ3DGGNMXtbn2gAgIl1U9fPCtpmSSUROBk7FZ/pNVZ3lXSL/E5EwoLOqfuZ1lmARkWWqWt/rHMb4i4hEqWq61zkCrTS8JpdmVrk2AIjIQlVtUti2UCEi/+PIlVf3APOBt1R1f/BTBYaIPA/cBCwHst3NqqrXepcqMERkvqo28zpHsIjIOGCUqv7mdZZAE5HTgTeAaqp6rog0AK5V1Wc9jhYQIlINeA6orqrtReRsoKWqHnPZ5ZJKRC4A3gYqqGpNEWkI3Kuq93kcze9K02tyaWWV61JORNoDHYAbgU99dsUCZ6tqc0+CBZiIjACqAh+7m24C9uJUuGNVtZtX2fxNRFYADVT1gNdZAk1EhgE7cX6X9+VuV9Vkz0IFkIj8BdQD1uOUV3DepP/RggclgYjMBAbgfPht7G77XVXP9TZZYIjI98BYYLCqNhSRCGBRqF6pEJFfgc7At6F+fkvTa3JpZSs0mi04rbXXAgt8tqcCD3qSKDguUNXzfO7/T0R+U9XzROQPz1IFxhqgDFAaXshvcr/29tmmQB0PsgTDFV4HCKIoVZ0nIr7bDnoVJgiqqOpnIvIogKoeFJHswh5UkqnqxnznN1TLW5pek0slq1yXcqq6BFgiIh+papbXeYKogojUVNUNACJSE6jg7sv0Lpb/iMhInIplOrBYRKbh82Kuqn29yhYoqlrb6wzBpKrrReQi4DRVHSsiVTn8exxqdopIXdzuXCLSGdjqbaSA2icilTlc3hY4XddC1Ua3a4iKSBmgH/Cnx5n8qjS+JpdWVrk2uZqLyBAOD7DIvbwcqi1+/YGfRWQ1TllrA/eJSDQwztNk/jPf/boA+NbLIMEiIlHAv4GaqtpDRE4DzlDVCR5HCwgReRJoBpyB04WgDPAhcKGXuQKkN85KdmeKyGZgLXCLt5EC6t84f7d1RWQ2Tje2Lt5GCqiewAjgZGAzMIW8V6BCwbFek62PbgixPtcGONR380GcP/pDl+JUdZdnoQJMRMoBZ7p3V4TSIMajEZE4oIaqLvU6SyCIyKc4v8Pd3UFvUcAcVW3kbbLAEJHFQGNgoU8/1aUh2ue6tqqudT8Ah6lqau42r7MFgvv6lI3zwUmAFTjltq4EJZyI9FPVEYVtMyWXtVybXHtU9XuvQwTZaThvXJFAQxFBVd/3OJPficgMnD71ETgVz+0iMltV/+1psMCoq6o3iUhXAFVNl3ydOENMpqqqiOR2HYj2OlAAjQeaqOo+n21fAE09yhNov7izNR0aAyIiC4FQncHp1QI27wHmq+o3wc4TYLfhtNL7ur2AbaaEssq1yTVdRF4EviRvH7CF3kUKHPdyeivgbGAi0B74GQi5yjVQUVX3isjdwPuq+qSIhGTLNZApIuU53E+1LqE9aOgzEXkLqCQi9wB34kxnFjJE5EzgHKCiiNzgsysW54NxSBGRBJyuEeVFpDFOqzU45Y3yLFjgReJcScxdW6ETTtefhiLSWlUf8CqYv7gf+v8F1BYR324hMUBIzmhUWlnl2uQ63/3qO0ewApd5kCUYOgMNcaa2usOdU/ZDjzMFSoSIJOJMtzjY6zABNgSYBNQQkf/D6Xt8h6eJAkhV/ysibXGmkTwDeEJVp3ocy9/OAK4GKgHX+GxPBe7xIlCAXYHTinkK8JLP9lRgkBeBgqQBcKGqZgOIyBvAT8BFwDIvg/nRHJxBuFWA4T7bU4FQbfAolazPtSmVRGSeqjYXkQVAa5wXtz9V9cxCHlriiEgX4HHgZ1W9T0TqAC+qaiePowWEO8NCC5wWv7mqutPjSAEjIo8D76nqRp9tPVR1tIexAkJEWqrqL17nCBYR6aSq473OESzu3M/NVXWPe78iME9VzxCRRbljCowpCaxybYBSuRrY6zitQDfjzBySBixW1ZBt5SwNRGSaqrYpbFuoEJHtwA7gflWd7m4LyZVVRSQSuAuni8ih7iCqeqdnoQJMRK7iyPI+7V2iwBGRu4DHgBk4H4wvwXlP+hgYoqoDvEvnXyKSytFXCO6vqmuCn8r4k1WuDVD6VgPzJSK1cFZlDMnLcqWhUuKWMQqYjtOX3ref6qRQvCIBICKLgI44/VS/UNUXQ7WVT0Q+B/7C6bP6NM40fH+qaj9PgwWIiLyJ8zvdGqcffWeclty7PA0WQCJSHeiGM791BWCTqs7yNpX/icgzwCbgI5zXqpuBusBCoJeqtvIunfEHq1wbAHxWJzz0xiwii0NtCjMROWaLXigO4CwNlRIR6Qc8AFTHmSM3t3K9FxijqqM8ihZQuX+v7oeLN3AqJPVD8cOET1mXqmoDd6GRn1S1hdfZAsGnnLlfKwDfq+rFXmcLBHfAdT+cvuaLcbp2/aKqITfuR0SWqGrDfNsWq2qjgvaZkscGNJpcpWU1sOEFbPP9hBlyL+RAPVXtIiIdVXWciHyEM1AoZLjzw44QkT6qOtLrPEE0H8Cdo/0OEelN6E5Nl7uCbIqInAskASd5mCfQMtyv6W6L7i4g0cM8gdYPOA9nnERrd5aY5zzOFCjpInIjzlSS4FyVyF1nwVo8Q4BVrk2uglYD6+xtJP9T1dYA7gvbJHeKusdx5o59xtNwgVNqKiWqOtIt49nk7QITilMsoqr35Lv/GvCaR3ECbbS7CNLjOK9VFYAnvI0UUBNEpBLwIk53ASXEplnMZ7+q7hcRRKScqv4lImd4HSpAbsGZ0/p1nPM6F7jVnUb0fi+DGf+wbiHmELef9aHVwFQ1q5CHlFg+l1ovwqlU/xdnGrPzC3loieNebh0P1Afew6mUPK6qb3mZKxCONn+5qobUB0UR+UxVbxSRZRTQ0hWKKzSWZu5qjZG5M2mEIhH5CmfazAdwriDuBsqoagcvcxlzIqxybQAQkXDgKqAWPlc0VPWloz2mJPPpv/kfYJmqfhSqA8EKIyK3qeo4r3P4g1vZzJ2/vGHu/OWq2tbjaH4lIomqulVETi1ov6quD3amQBORglYU3QMsUNXFQY4TcPkWzMm1B+f1anuw8wSTiFwKVMS5upjpdR5/E5GqOHO01yLv+23IDDIv7axbiMn1P5w+X8uAHI+zBMNmd2W7tsDzbstQmMeZvNIPCInKNc6l5RwROSgiscB2oIbXofxNVbe634YBW90+17iXlat5Fiywmrm3/7n3r8ZZeKOniHyuqi94liww7gJa4syAA84VmQU4q/s9raofeBUs0FR1ptcZAuwbnHEvPwDZHmcxAWCVa5PrlFJ2KflG4Ergv6qa4q5gGDLzqP5DUvghJcZvbj/VMTgVkTQglBce+Ry4wOd+trvtPG/iBNQpQBNVTYNDXYC+w5kPeQEQapXrCOAsVd0Gh9YieB9nNd1ZQMhWrkuBKFV9xOsQJnCscm1yfS8i7VR1itdBgkFV04Evfe5vxVmWtjQKpb5hsUAXnIUoJhHC85e7Inwvm6tqpoiU9TJQAJ0EHPC5nwVUU9UMETlwlMeUZDVyK9au7e62ZBEJ2fEwpcQEEemgqhO9DmICwyrXJtdc4CsRCcN50xJAVTXW21gmCEKp5fod4GJgJM6iDItEZJY7VV8o2iEi16rqtwAi0hEI1eXe/w/4VUS+ce9fA3wkItHAcu9iBcwMEZmAcyUCnNmbZrjlTfEslfGHfsAgEckEMrH325BjAxoNACKyFmelt2VqvxQhRUTCVfWo/fpEZJSqhsz0T+7g3PNwVrbrCWSE4qIqACJSF6fSWR3nDXoj0F1VV3kaLEBEpBlwoXt3tqrO9zJPIImIADcAF7mbZgPj7fXZmOLPKtcGABGZBbRS1dIwmLFUEZE1OFPxjVXVUGzhO0REpgHROP2sf8KZhi+kZ1YAcFfvI7c/cqhyp848TVXHujMuVFDVtV7nChR3NpjTVPUHEYkCwlU11etcpmjcD063ALVV9RkRqQEkquo8j6MZP7HKtQFARN4D6gDf49OvMVSn4itNRCQGuBlnDtkw4F3gE1Xd62mwABCRl3FWKDyA09I3C2cJ5YxjPrCEEZFbVfXDo0xPF5J/t+4AxmbAGap6urtq4eeqemEhDy2RROQeoAcQr6p1ReQ04E1VbeNxNFNEIvIGzqxcl6nqWe7iSFNUNRQHIpdKpXXqMXOktcA0oCwQ43MzJZyqpqrqGFW9AHgEeBLYKiLjRKSex/H8SlUfVNVLcC6n7wLGEpr9U6PdrzEF3Cp4FSrArgeuBfYBqOoWQvs1qjdOF5i9AKq6khBdWbUUOl9Ve+Muea6qu3Hee02IsAGNBgBVfQpARKLcmTRMiPBZIOgOnEULhuP0070YZxXD0z0L52cicj9OuZoC63Ba6X/yMlMg+Kyu+YOqzvbdJyIh2ZILZKqqiogCuAP7QtkBd/YX4NAKunapOTRkua/Lub/LVSkd60uUGla5NgCISEucmRYqADVFpCFwr6re520y4wcrcRaieFFV5/hs/0JELvEoU6BEAi/hrNp30OswQTASaHIc20LBZ+7CT5XcLhN34sxnHqpmisggoLyItAXu4/ACOqZkexX4CjhJRIbizATzmLeRjD9Zn2sDgIj8ivMH/m3uEuAi8ruqnuttMlNUIlIh1Ae6lTbuh+ELgAeAl312xQLXq2pDL3IFijsA7BTgTKAdzswok1V1qqfBAsgt8934lBd422YLKdnc6W5bAMlAG5xzO01V//Q0mPEra7k2h6jqxtxLkC5blrUEE5FXfb4/Yr+q9g1qIONPZXGuMkWQt9/xXpwPySHF7Q4yUVXrAyFboc7ldhn4w51CMpRb50sdVc0RkdfcRqy/vM5jAsMq1ybXRhG5AFARKYMzyb19ki7ZbgAGA3HAbo+zGD9S1Zk43QbeU9X1cKhFrEIozgLjWigi56nqb14HCTRVzRaRFSJSU1U3eJ3H+N00EekEfGlXIkKTdQsxAIhIFWAEcDnOZaopQF9VTfY0mDlhIrIc53x+D7Qi30qMdm5LPhH5CGehnGzgN5xuISNU9UVPgwWAiPwF1APW48wYkruqXQNPgwWIu/ZAY2Ae7gwpAKp6rWehjF+ISCrOjD8HcWYMsRUaQ4xVrg0AIjIOeMCdEgh33s3hqnqnt8nMiRKRvkAvnPnLN/vuwnkhr+NJMOM3IrJYVRuJyC04gxgH4gzmDLkKp7ugyhFyW+5DjYhcWtB296qFMaYYs24hJleD3Io1OPNuikhjLwOZolHVV4FXReQNVe3ldR4TEGXcblzXAaNUNSt3qroQVNDKhCG7WqFVokOXiEzLvxhQQdtMyWWVa5MrTETifFqu47Hfj5BgFeuQ9hbOfN5LgFlu627I9rkGauCMHxCgEpAkItuAe1R1gYfZ/M7tOpD/g9IeYD7QX1XXBD+VKQoRiQSigCru1eHcrnqxwMmeBTN+Z91CDAAi0h0YBHzubuoCDFXVD7xLZYz5p0QkIhTn+BaRMcAXqjrZvd8O6ISzCucIVT3fy3z+JiLPAJuAj3AqYTcDdXE+ZPRS1VbepTMnQkT64UyfWR2nq57gfIBKBUar6mvepTP+ZJVrc4iInA1c5t79UVWXe5nHGFM4EbkKOAdnAR0AVPVp7xIFhogsc6fi8922VFUb5PY99yhaQIjIkvzzlfv0sT9inyk5ROQJ4BVV3Ssij+OMl3hGVRd6HM34SZjXAUzxoarLVXWUe7OKtTHFnIi8CdwE9MFpBesCFDjwLwRsFZFHRORU9/YwsM2dEzoUl45OF5EbRSTMvd2IM7ME2DLoJV1nt2J9EU6D1tvAGx5nMn5klWtjjCm5LlDV7sBuVX0KaAmc7nGmQPkXziqNX7u3mu62cOBGz1IFzi1AN2A7sM39/lYRKQ/c72UwU2S5C7RdBYxR1e9wFoYyIcK6hRhjTAklIr+q6vkiMhdn0aBdOCv71fM4mjHmKERkAk6f67Y4XUIygHnW1Sd02GwQxhhTck0QkUrAizgD3RTnEnPIEZH/cfTZM95S1f1HPqrkEpFXC9i8B5ivqt8EO4/xqxuBK4H/qmqKiCQCAzzOZPzIWq6NMSYEiEg5IFJV93idJRBEZARQFfjY3XQTzrSDCsSqajevsgWCiIwGzuTwDE6dgLVAZWCNqj7gUTRjTCGscm2MMSWMiNxwrP2q+mWwsgSLiPymqucVtE1E/lDVc7zKFghuV58LVTXbvR8B/ARcBCxT1bO9zGeMOTrrFmKMMSXPNcfYp0DIVa6BCiJSU1U3AIhITaCCuy/Tu1gBE4dTvtwrEdFAvKpmi8gB72IZYwpjlWtjjClhVPUOrzN4oD/ws4isxpl2sDZwn4hEA+M8TRYYLwCLRWQGTnkvAZ5zy/uDl8GMMcdm3UKMMaaEEpHKwJM4XQUU+Bl4WlV3eRosQNx+5We6d1eE2iDG/NyBbs3du7+p6hYv8xhjjo9Vro0xpoQSkanALOBDd9MtQCtVvdy7VIEjIucCZ5N3Ncr3vUsUWCISB5xG3vLO8i6RMeZ4WOXaGGNKKBH5XVXPzbftiGXCQ4GIPAm0wqlcTwTaAz+ramcvcwWKiNwN9MNZOGcx0AL4RVUv8zKXMaZwtkKjMcaUXFNE5OZ8S2RP9jpUgHQG2gBJbp/zhkBFbyMFVD/gPGC9qrYGGgMpniYyxhwXq1wbY0zJdQ/wEXDAvX0C3CsiqSKy19Nk/pehqjnAQRGJxVkWvIbHmQJpf26fchEpp6p/AWd4nMkYcxxsthBjjCmBRESAc3KnpisF5rurUY4BFgBpwC+eJgqsTW55vwamishuYL2niYwxx8X6XBtjTAkVqv2rCyMitXBWZVzqs+0cVf3Du1SBIyKX4nSBmaSqme62OFXd7W0yY0xBrHJtjDEllIiMA0ap6m9eZ/GaiCxU1SZe5wiW0lZeY0oS6xZijDEl1/nALSKyHtiHs9iIqmoDb2N5QrwOEGSlrbzGlBhWuTbGmJLrCq8DFCOl7TJsaSuvMSWGzRZijDEllKqux5kx4zL3+3Tsdd0YYzxlL8LGGFNCuQurPAI86m4qw+HVGkubTK8DBJl1CzGmmLLKtTHGlFzXA9fi9LdGVbcAMZ4mChBx3CoiT7j3a4pI89z9qtrCu3SBISIXicgd7vdVRaS2z+42HsUyxhTCKtfGGFNyZaoz5ZMCiEi0x3kC6XWgJdDVvZ8KvOZdnMAq7KqEqiZ7kcsYUzirXBtjTMn1mYi8BVQSkXuAH3AWWQlF56tqb2A/gDvHc1lvIwVUqbkqYUyosdlCjDGmhFLV/4pIW2AvcDrwhKpO9ThWoGSJSDiHW+mrAjneRgqoTFVVESkNVyWMCSlWuTbGmJJtGVAep9K5zOMsgfQq8BVwkogMBToDj3kbKaDyX5W4k9C9KmFMSLEVGo0xpoQSkbuBJ4AfcWaPuBR4WlXf9TRYgIjImTgD+QSYpqp/ehwpoNyrEu1wyjs5hK9KGBNSrHJtjDEllIisAC5Q1V3u/crAHFU9w9tk/icidYFNqnpARFoBDYD3VTXFy1zGGJOfDWg0xpiSaxfOrBm5Ut1toWg8kC0i9YC3cBbP+cjbSIEjIjeIyEoR2SMie0UkVUT2ep3LGFM4a7k2xpgSSkTeB+oD3+D0ue4ILHVvqOpL3qXzLxFZqKpNRORhIENVR4rIIlVt7HW2QBCRVcA1od71xZhQZAMajTGm5Frt3nJ9434NxSnbskSkK9AduMbdVsbDPIG2zSrWxpRM1nJtjDGm2BORs4GewC+q+rG7WuGNqvq8x9ECQkRGAAnA18CB3O2q+qVXmYwxx8cq18YYU0KJyHTceZ99qeplHsQJGHd+6/dV9RavswSLiIwtYLOq6p1BD2OM+UesW4gxxpRcD/l8Hwl0Ag56lCVgVDVbRE4VkbKqmul1nmBQ1Tu8zmCMOTHWcm2MMSFEROapanOvc/ibO3jzLOBb3CXBIbQGbQKIyMOq+oKIjKTgqxJ9PYhljPkHrOXaGGNKKBGJ97kbBjQDKnoUJ9ByB2+GEZoDNnM9AryAU9bdHmcxxpwAq1wbY0zJtQCndVOALGAdcJeXgQJFVZ/yOkOQbBOR6sAdQCucc2uMKUGscm2MMSXXI8AkVd0rIo8DTYB0jzMFhIhUBR4GzsHpXw6E3uBN4A1gGlAH58NTLsH5IFXHi1DGmONnKzQaY0zJ9Zhbsb4IuAx4G6dyFor+D/gLqA08hdNK/5uXgQJBVUeq6lnAu6pax+dWW1WtYm1MCWCVa2OMKbmy3a9XAWNU9TugrId5Aqmyqr4DZKnqTHdKulBrtT5EVXt5ncEYc2Kscm2MMSXXZhF5C7gJmCgi5Qjd1/Us9+tWEblKRBoD8cd6gDHGeMGm4jPGmBJKRKKAK4FlqrpSRBKB+qo6xeNoficiVwM/ATWAkUAs8JSqfutpMGOMyccq18YYY4wxxvhJqF4+NMYYE0JE5BQR+UpEdojIdhEZLyKneJ3LGGPys8q1McaYkmAszuqMiUB14H/uNmOMKVasW4gxxphiT0QWq2qjwrYZY4zXrOXaGGNMSbBLRG4VkXD3diuwy+tQxhiTn7VcG2OMKfZE5FScWUJa4qxUOAfoo6obPQ1mjDH5WOXaGGNMsSci44AHVHW3ez8e+K+7mIwxxhQb1i3EGGNMSdAgt2INoKrJQGMP8xhjTIGscm2MMaYkCBORuNw7bst1hId5jDGmQPbCZIwxpiQYDvwiIp+797sAQz3MY4wxBbI+18YYY0oEETkbuMy9+6OqLvcyjzHGFMQq18YYY4wxxviJ9bk2xhhjjDHGT6xybYwxxhhjjJ9Y5doYY4wxxhg/scq1McYYY4wxfmKVa2OMMcYYY/zk/wFzP/w94hp+DAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "sns.heatmap(df.corr(), annot=True)\n", "plt.title('Heatmap of correlation with all features')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "3e9f2d12-a822-42a5-87e3-94d391412429", "metadata": {}, "source": [ "### Age\n", "\n", "Age is a very important characteristic that affects concrete strength." ] }, { "cell_type": "code", "execution_count": 9, "id": "08fdc396-cfbe-4914-985b-b56c5fc74339", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "sns.countplot(x='age', data=df)\n", "plt.title(label=\"Count of ages of concrete\")\n", "plt.xlabel(\"Age (Days)\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "0cb1203b-5e5c-4012-afcc-9e8ab70b3ebd", "metadata": {}, "source": [ "This bar plot shows that age is a categorical variable with a high number of observations at 28 days.
\n", "The 28 days time frame is significant because this is the period for concrete to reach 99% of it's strength. While the concrete continuous to gain strength after that period, the rate of gain is much less compared to that in 28 days." ] }, { "cell_type": "code", "execution_count": 10, "id": "f9337430-04ba-4e21-9711-7c7487817a18", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average concrete strength: 35.25027287623584 \n", "\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", "
Average concrete strength at different ages (Days):
 agemeancount
019.4527162
1318.378023129
2725.181843122
31428.75103862
42837.383788478
55650.71515286
69040.48080954
79168.67464917
810047.66878052
912039.6471683
\n" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "avg_str_by_day = df.groupby('age').agg(['mean', 'count'])['strength']\n", "avg_str_by_day.reset_index(inplace=True)\n", "avg_str_by_day.age = avg_str_by_day.age.astype(int)\n", "avg_str_by_day = avg_str_by_day.style.set_caption(\"Average concrete strength at different ages (Days):\")\n", "print(f'Average concrete strength: {df.strength.mean()} \\n')\n", "avg_str_by_day" ] }, { "cell_type": "markdown", "id": "707706ff-5622-481a-a043-1dd841f59fb1", "metadata": {}, "source": [ "From the table we can see that average concrete strength at 28 days is similar to the average strength of the entire dataset." ] }, { "cell_type": "code", "execution_count": 11, "id": "1cf18be3-7283-43af-93c7-13a3866238de", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "sns.boxplot(x='age', y='strength', data=df);\n", "plt.title(label=\"Boxplot of concrete strength at different ages\") \n", "plt.xlabel(\"Age (Days)\")\n", "plt.ylabel(\"Strength\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "8d15b593-4f66-463b-ac70-425c266650b4", "metadata": {}, "source": [ "In this boxplot, concrete strength is the highest at 91 days. They have the highest median strenght with a narrow variation. We can also see that strength has the largest variation at 28 days." ] }, { "cell_type": "markdown", "id": "81da4f90-bd9f-4f6b-b876-652c8c8d1970", "metadata": { "tags": [] }, "source": [ "## 1. Average strength of the concrete samples at 1, 7, 14, and 28 days of age.\n", "\n", "Average strength of concrete is the lowest after 1 day and increases significantly after 7 days. Strength continues to increase in MPa after 14 and 28 days." ] }, { "cell_type": "code", "execution_count": 12, "id": "cfc23420-047f-49a4-8456-c26186edab7a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average strength of the concrete sample is 9.45 MPa at 1 day.\n", "Average strength of the concrete sample is 25.18 MPa at 7 days.\n", "Average strength of the concrete sample is 28.75 MPa at 14 days.\n", "Average strength of the concrete sample is 37.38 MPa at 28 days.\n" ] } ], "source": [ "ages = [1, 7, 14, 28]\n", "\n", "for age in ages:\n", " cond = df.age == age\n", " avg_str = df[cond].strength.mean().round(2)\n", " if age == 1:\n", " print(f'Average strength of the concrete sample is {avg_str} MPa at {age} day.')\n", " else:\n", " print(f'Average strength of the concrete sample is {avg_str} MPa at {age} days.')" ] }, { "cell_type": "markdown", "id": "dc886cef-86b2-4288-b124-c35d2a47f512", "metadata": {}, "source": [ "## 2. Creating predictive model\n", "\n", "Now let's help our colleages in the engineering department find out the coefficients $\\beta_{0}$, $\\beta_{1}$ ... $\\beta_{8}$, to use in the following formula:\n", "\n", "![Strength Equation](str_eq.png)" ] }, { "cell_type": "markdown", "id": "3dede16c-0c6f-4de4-b653-79adf29002cb", "metadata": {}, "source": [ "## Train Test Split\n", "\n", "Split the data to train (80%) and test (20%) to estimate the performance of machine learning algorithms when they are used to make predictions on data not used to train the model." ] }, { "cell_type": "code", "execution_count": 13, "id": "20ac4305-ba34-4a3a-92f2-d6d430b68a09", "metadata": {}, "outputs": [], "source": [ "features = ['cement', 'slag', 'fly_ash', 'water', 'superplasticizer', 'coarse_aggregate', 'fine_aggregate', 'age']\n", "X = df[features] # Features\n", "y = df['strength'] # Target" ] }, { "cell_type": "code", "execution_count": 14, "id": "8df4a9f2-2a5e-4a0c-89bd-a957b6988345", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X train data (804, 8)\n", "y train data (804,)\n", "X test data (201, 8)\n", "y test data (201,)\n" ] } ], "source": [ "# Train Test Split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2022)\n", "\n", "print('X train data {}'.format(X_train.shape))\n", "print('y train data {}'.format(y_train.shape))\n", "print('X test data {}'.format(X_test.shape))\n", "print('y test data {}'.format(y_test.shape))" ] }, { "cell_type": "markdown", "id": "779d6366-9986-43f0-9c2c-65bbb934ea8f", "metadata": { "tags": [] }, "source": [ "### Encoding age\n", "\n", "We observed that `age` is a variabel comprised of a finite set of discrete values with a ranked ordering between values." ] }, { "cell_type": "code", "execution_count": 15, "id": "11ada35a-1bbd-4b29-8fec-671437863513", "metadata": {}, "outputs": [], "source": [ "def ordinal_encoding_feature(data, feature): \n", " '''Transform selected column with ordinal encoder\n", " \n", " INPUTS:\n", " data: dataframe\n", " feature: column name\n", " \n", " OUTPUT:\n", " d: dataframe with feature ordinally encoded\n", " ''' \n", " d = data.copy()\n", " encoder = OrdinalEncoder()\n", " # Reshape because only one column is transformed\n", " encoder.fit(data[feature].values.reshape(-1,1))\n", " d[feature]= encoder.transform(data.age.values.reshape(-1,1))\n", " return d\n", "X_train = X_train.pipe(ordinal_encoding_feature, 'age')\n", "X_test = X_test.pipe(ordinal_encoding_feature, 'age')" ] }, { "cell_type": "markdown", "id": "f4dbd66c-9dfa-48b2-8cb5-49016047e32a", "metadata": {}, "source": [ "## Model Selection\n", "\n", "We will be using a supervised regression model since the target variable `strength` is labeled and continuous.
\n", "Using k-folds cross validation to estimate and compare the performance of models on out-of-sample data using r2 score. This enables us to identify which model is worth improving upon.
\n", "GradientBoostRegressor gives the best results out of models, with the highest r2score of 0.89." ] }, { "cell_type": "code", "execution_count": 16, "id": "d5761d7b-94ca-4492-b3ce-335903f65209", "metadata": {}, "outputs": [], "source": [ "pipelines = []\n", "pipelines.append(('Linear Regression', Pipeline([('scaler', StandardScaler()), ('LR', LinearRegression())])))\n", "pipelines.append(('KNN Regressor', Pipeline([('scaler', StandardScaler()), ('KNNR', KNeighborsRegressor())])))\n", "pipelines.append(('SupportVectorRegressor', Pipeline([('scaler', StandardScaler()), ('SVR', SVR())])))\n", "pipelines.append(('DecisionTreeRegressor', Pipeline([('scaler', StandardScaler()), ('DTR', DecisionTreeRegressor())])))\n", "pipelines.append(('AdaboostRegressor', Pipeline([('scaler', StandardScaler()), ('ABR', AdaBoostRegressor())])))\n", "pipelines.append(('RandomForestRegressor', Pipeline([('scaler', StandardScaler()), ('RBR', RandomForestRegressor())])))\n", "pipelines.append(('BaggingRegressor', Pipeline([('scaler', StandardScaler()), ('BGR', BaggingRegressor())])))\n", "pipelines.append(('GradientBoostRegressor', Pipeline([('scaler', StandardScaler()), ('GBR', GradientBoostingRegressor())])))" ] }, { "cell_type": "code", "execution_count": 17, "id": "9ccd3c02-eb69-41b2-9c85-56e990b643c0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RegressorR2Std
0Linear Regression0.7665780.026529
1KNN Regressor0.7888510.022900
2SupportVectorRegressor0.7025930.018576
3DecisionTreeRegressor0.8044050.012659
4AdaboostRegressor0.7713210.011322
5RandomForestRegressor0.8821860.013177
6BaggingRegressor0.8659530.009271
7GradientBoostRegressor0.8854450.011429
\n", "
" ], "text/plain": [ " Regressor R2 Std\n", "0 Linear Regression 0.766578 0.026529\n", "1 KNN Regressor 0.788851 0.022900\n", "2 SupportVectorRegressor 0.702593 0.018576\n", "3 DecisionTreeRegressor 0.804405 0.012659\n", "4 AdaboostRegressor 0.771321 0.011322\n", "5 RandomForestRegressor 0.882186 0.013177\n", "6 BaggingRegressor 0.865953 0.009271\n", "7 GradientBoostRegressor 0.885445 0.011429" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create empty dataframe to store the results\n", "cv_scores = pd.DataFrame({'Regressor':[], 'R2':[], 'Std':[]})\n", "\n", "# Cross-validation score for each pipeline for training data\n", "for ind, val in enumerate(pipelines):\n", " name, pipeline = val\n", " kfold = KFold(n_splits=5) \n", " score = cross_val_score(pipeline, X_train, y_train, cv=kfold, scoring=\"r2\")\n", " cv_scores.loc[ind] = [name, score.mean(), score.std()]\n", "cv_scores" ] }, { "cell_type": "markdown", "id": "08b10e60-ac8e-45a7-8f24-1f86358c14e4", "metadata": { "tags": [] }, "source": [ "## Model Tuning\n", "\n", "Using Grid Search to tune hyperparameters of Gradient Boosting Regressor." ] }, { "cell_type": "code", "execution_count": 18, "id": "ab9a6bb0-b7b2-471d-a3fe-cddcca4c9c44", "metadata": {}, "outputs": [], "source": [ "steps = [('scaler', StandardScaler()), ('GBR', GradientBoostingRegressor())]\n", "pipeline = Pipeline(steps)\n", "\n", "param_grid=[{'GBR__n_estimators':[100,500,1000], \n", " 'GBR__learning_rate': [0.1,0.05,0.02,0.01], \n", " 'GBR__max_depth':[4,6], \n", " 'GBR__min_samples_leaf':[3,5,9,17], \n", " 'GBR__max_features':[1.0,0.3,0.1] }]\n", "\n", "#search = GridSearchCV(pipeline, param_grid, cv = 5, scoring = 'r2', n_jobs=-1, verbose=1)\n", "#search.fit(X_train, y_train)\n", "#print(search.best_estimator_) \n", "#print(\"R Squared:\", search.best_score_)" ] }, { "cell_type": "markdown", "id": "42a7a747-75ea-4678-9f20-dbf29b41ecd8", "metadata": {}, "source": [ "Now that we have identified the best model, let's use it to predict on our unseen data `X_test`." ] }, { "cell_type": "code", "execution_count": 19, "id": "8898c103-918d-41d4-96a5-fc7588505237", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(steps=[('GBR',\n",
       "                 GradientBoostingRegressor(learning_rate=0.05, max_depth=6,\n",
       "                                           max_features=0.3,\n",
       "                                           min_samples_leaf=17,\n",
       "                                           n_estimators=1000))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "Pipeline(steps=[('GBR',\n", " GradientBoostingRegressor(learning_rate=0.05, max_depth=6,\n", " max_features=0.3,\n", " min_samples_leaf=17,\n", " n_estimators=1000))])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#best_model = search.best_estimator_\n", "\n", "# Let's hardcode the parameters to save time\n", "best_model = Pipeline(steps=[('GBR',\n", " GradientBoostingRegressor(learning_rate=0.05, max_depth=6,\n", " max_features=0.3,\n", " min_samples_leaf=17,\n", " n_estimators=1000))])\n", "\n", "es = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss', mode='min',patience=5, verbose=1)\n", "best_model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 20, "id": "04799719-2b10-475b-be66-900fc872e01d", "metadata": {}, "outputs": [], "source": [ "y_pred = best_model.predict(X_test)" ] }, { "cell_type": "markdown", "id": "9adb02e1-2434-4c64-a9b7-0e860202e791", "metadata": { "tags": [] }, "source": [ "## Model Evaluation\n", "\n", "Let's evaluate the model's performance on the testing data to assess the likely future performance of a model.\n" ] }, { "cell_type": "code", "execution_count": 21, "id": "c31aba09-98ec-463b-979c-bfcb668b5b56", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean Absolute Error (MAE): 6.366971463051054\n", "Mean Squared Error (MSE): 68.3596957408342\n", "RMSE: 8.267992243636552\n", "R2 Score: 0.7333563920523734\n" ] } ], "source": [ "print(f'Mean Absolute Error (MAE): {mean_absolute_error(y_test, y_pred)}')\n", "print(f'Mean Squared Error (MSE): {mean_squared_error(y_test, y_pred)}')\n", "print(f'RMSE: {mean_squared_error(y_test, y_pred)**0.5}')\n", "print(f'R2 Score: {r2_score(y_test, y_pred)}')" ] }, { "cell_type": "markdown", "id": "2694da9c-dbc2-40e1-867c-1da7f956b178", "metadata": {}, "source": [ "## Feature Importance\n", "\n", "Using the feature importance of the model, we get the coefficients $\\beta_{0}$, $\\beta_{1}$ ... $\\beta_{8}$, to use in the following formula:\n", "![Strength Equation](str_eq.png)" ] }, { "cell_type": "code", "execution_count": 22, "id": "a4d579af-d464-4f43-b4d2-e93bfae07be3", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "betas = best_model[0].feature_importances_\n", "plt.figure(figsize=(12,6))\n", "plt.barh(features, betas)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 23, "id": "543a8dd6-ad13-4662-816f-d241ab4a5033", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Concrete Strength = -169.86276182969183 +\n", "0.22443683977322534 * cement +\n", "0.053931814571658084 * slag +\n", "0.04824340477622348 * fly_ash +\n", "0.12338099419069883 * water +\n", "0.07416135005702751 * superplasticizer +\n", "0.04618145961914725 * coarse_aggregate +\n", "0.07343117951771443 * fine_aggregate +\n", "0.356232957494305 * age\n" ] } ], "source": [ "betas_dict = dict(zip(features, betas))\n", "beta_0 = np.mean(y - np.sum(X*betas, axis=1))\n", "print(f\"Concrete Strength = {beta_0} +\")\n", "for key in betas_dict.keys():\n", " if key == \"age\":\n", " print(f\"{betas_dict[key]} * {key}\")\n", " else:\n", " print(f\"{betas_dict[key]} * {key} +\")" ] }, { "cell_type": "code", "execution_count": null, "id": "f93094a5-fde0-43a6-9036-b9e73edf99bb", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }