Commit be6e3673 authored by rloic's avatar rloic

Analyse replicable

parent 960c9f5d
{
"cells": [],
"cells": [
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"# Analyse reproductible : Paradoxe de Simpson\n",
"\n",
"## Description\n",
"\n",
"Dans cette analyse, nous nous intéressons à l'impact du tabagisme sur la durée de vie.\n",
"\n",
"### Description des données\n",
"\n",
"| Nom | Type | Description |\n",
"|-----|------|-------------|\n",
"| Smoker | Enum (Yes, No) | Indique si la personne est fumeuse ou non |\n",
"| Status | Enum (Alive, Dead) | Indique si la personne est en vie |\n",
"| Age | Float | Indique l'âge de la personne |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Analyse\n",
"\n",
"### Chargement des librairies"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.linear_model import LogisticRegression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Chargement du jeu de données"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Smoker</th>\n",
" <th>Status</th>\n",
" <th>Age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Yes</td>\n",
" <td>Alive</td>\n",
" <td>21.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Yes</td>\n",
" <td>Alive</td>\n",
" <td>19.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>No</td>\n",
" <td>Dead</td>\n",
" <td>57.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>No</td>\n",
" <td>Alive</td>\n",
" <td>47.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Yes</td>\n",
" <td>Alive</td>\n",
" <td>81.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1309</th>\n",
" <td>Yes</td>\n",
" <td>Alive</td>\n",
" <td>35.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1310</th>\n",
" <td>No</td>\n",
" <td>Alive</td>\n",
" <td>22.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1311</th>\n",
" <td>Yes</td>\n",
" <td>Dead</td>\n",
" <td>62.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1312</th>\n",
" <td>No</td>\n",
" <td>Dead</td>\n",
" <td>88.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1313</th>\n",
" <td>No</td>\n",
" <td>Alive</td>\n",
" <td>39.1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1314 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" Smoker Status Age\n",
"0 Yes Alive 21.0\n",
"1 Yes Alive 19.3\n",
"2 No Dead 57.5\n",
"3 No Alive 47.1\n",
"4 Yes Alive 81.4\n",
"... ... ... ...\n",
"1309 Yes Alive 35.9\n",
"1310 No Alive 22.3\n",
"1311 Yes Dead 62.1\n",
"1312 No Dead 88.6\n",
"1313 No Alive 39.1\n",
"\n",
"[1314 rows x 3 columns]"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw = pd.read_csv(\"https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/-/raw/master/module3/Practical_session/Subject6_smoking.csv\")\n",
"raw"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Transformation du dataset\n",
"\n",
"Ici je transforme le data set pandas en list d'objets. Ce qui me rend le traitement plus simple par la suite.\n",
"\n",
"#### Définition des types"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"from enum import IntEnum\n",
"class Smoker(IntEnum):\n",
" No = 0\n",
" Yes = 1\n",
"\n",
"class Status(IntEnum):\n",
" Dead = 0\n",
" Alive = 1\n",
"\n",
"class Record:\n",
" def __init__(self, smoker: Smoker, status: Status, age: float):\n",
" self.smoker = smoker\n",
" self.status = status\n",
" self.age = age\n",
"\n",
" def __repr__(self):\n",
" return \"Record(smoker={}, alive={}, age={}\".format(self.smoker, self.status, self.age)\n",
" \n",
"def parse(d) -> Record:\n",
" if d[1] == 'Alive':\n",
" status = Status.Alive\n",
" else:\n",
" status = Status.Dead\n",
" if d[0] == 'Yes':\n",
" smoker = Smoker.Yes\n",
" else:\n",
" smoker = Smoker.No\n",
" age = float(d[2])\n",
" return Record(smoker, status, age)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Convertion des données"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Record(smoker=1, alive=1, age=21.0,\n",
" Record(smoker=1, alive=1, age=19.3,\n",
" Record(smoker=0, alive=0, age=57.5,\n",
" Record(smoker=0, alive=1, age=47.1,\n",
" Record(smoker=1, alive=1, age=81.4,\n",
" Record(smoker=0, alive=1, age=36.8,\n",
" Record(smoker=0, alive=1, age=23.8,\n",
" Record(smoker=1, alive=0, age=57.5,\n",
" Record(smoker=1, alive=1, age=24.8,\n",
" Record(smoker=1, alive=1, age=49.5]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = [parse(line[1]) for line in raw.iterrows()]\n",
"df[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Definitions des features\n",
"\n",
"Ici, nous définissons comment sont convertis les différentes informations en valeur numérique."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def features(r: Record):\n",
" return [ int(r.smoker), r.age ]\n",
" \n",
"def label(r: Record) -> int:\n",
" return int(r.status)\n",
" \n",
"def smoker(r: Record) -> Smoker:\n",
" return r.smoker\n",
"\n",
"def is_smoker(r: Record) -> bool:\n",
" return r.smoker == Smoker.Yes\n",
"\n",
"def is_not_smoker(r: Record) -> bool:\n",
" return r.smoker == Smoker.No\n",
"\n",
"def status(r: Record) -> Status:\n",
" return r.status\n",
"\n",
"def is_alive(r: Record) -> bool:\n",
" return r.status == Status.Alive\n",
"\n",
"def age(r: Record) -> float:\n",
" return r.age"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Première Analyse\n",
"\n",
"#### Calcul du taux de survie des deux groupes\n",
"\n",
"Pour cela, on scinde le jeu de données en deux parties, le groupe Fumeur (Smoker.Yes) et le groupe non fumeur (Smoker.No).\n",
"Ensuite, on scinde le jeu de données en 4 parties :\n",
"1. Le groupe fumeur\n",
" - En vie\n",
" - Décédé\n",
"2. Le groupe non fumeur\n",
" - En vie\n",
" - Décédé"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<table>\n",
" <tr>\n",
" <th></th>\n",
" <th>En vie</th>\n",
" <th>Décédé</th>\n",
" <th>Ratio (Déces / Total)</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Fumeur</th>\n",
" <td>443</td>\n",
" <td>139</td>\n",
" <td>0.23883161512027493</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Non Fumeur</th>\n",
" <td>502</td>\n",
" <td>230</td>\n",
" <td>0.31420765027322406</td>\n",
" </tr>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def group_by(list, key):\n",
" groups = {}\n",
" for element in list:\n",
" current_key = key(element)\n",
" if current_key not in groups:\n",
" groups[current_key] = []\n",
" groups[current_key].append(element)\n",
" return groups\n",
"\n",
"groups = group_by(df, smoker)\n",
"sub_groups = group_by(df, lambda r: (r.smoker, r.status))\n",
"\n",
"from IPython.core.display import HTML\n",
"HTML(\"\"\"\n",
"<table>\n",
" <tr>\n",
" <th></th>\n",
" <th>En vie</th>\n",
" <th>Décédé</th>\n",
" <th>Taux de mortalité</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Fumeur</th>\n",
" <td>{smoker_alive}</td>\n",
" <td>{smoker_dead}</td>\n",
" <td>{smoker_ratio}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Non Fumeur</th>\n",
" <td>{non_smoker_alive}</td>\n",
" <td>{non_smoker_dead}</td>\n",
" <td>{non_smoker_ratio}</td>\n",
" </tr>\n",
"</table>\"\"\".format(\n",
" smoker_alive = len(sub_groups[(Smoker.Yes, Status.Alive)]),\n",
" smoker_dead = len(sub_groups[(Smoker.Yes, Status.Dead)]),\n",
" smoker_ratio = len(sub_groups[(Smoker.Yes, Status.Dead)]) / len(groups[Smoker.Yes]),\n",
" non_smoker_alive = len(sub_groups[(Smoker.No, Status.Alive)]),\n",
" non_smoker_dead = len(sub_groups[(Smoker.No, Status.Dead)]),\n",
" non_smoker_ratio = len(sub_groups[(Smoker.No, Status.Dead)]) / len(groups[Smoker.No]))\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ce premier résultat indique que le groupe de fumeur à un taux de mortalité moins élevé que le groupe de non fumeurs. Mais il faut aller plus loin dans l'analyse.\n",
"Nous commençont par représenter la distribution des deux groupes."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAHSCAYAAAAE8LamAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAdPElEQVR4nO3df8zedX3v8deb3v2BoEWgGqEcW5LGQegtlGo8lBgUgjgbLCeKLKidyuEfOpRxFFxMxjE5iTgzHe6ESKzCSTxjwgDJWHYknT1nJBvQaqezVXFSoZNBx+y92Qny43P+uC+6jhVoe11Xb9rP45E09/X93t/r+/3c3969ePK9P/f1rdZaAACgZ4fN9AAAAGCmiWIAALonigEA6J4oBgCge6IYAIDuiWIAALo3MdMDSJJjjz22LVq0aKaHAQDAIW7jxo3/2Fpb8Pz1L4soXrRoUTZs2DDTwwAA4BBXVT/d03rTJwAA6J4oBgCge6IYAIDuvSzmFAMAHKyeeuqpbNu2LU888cRMD4XdzJs3LwsXLszs2bP3antRDAAwhG3btuWVr3xlFi1alKqa6eGQpLWWxx9/PNu2bcvixYv36jmmTwAADOGJJ57IMcccI4hfRqoqxxxzzD5dvRfFAABDEsQvP/v6d2L6BADAQW7WrFlZunTpruU77rgjboy2b0QxAMAILbr6rpHub+tn3vWS2xx++OHZtGnTSI87rGeeeSazZs2a6WHsNdMnAAAOQTfeeGPWrFmza3nlypVZv359kuTII4/MVVddldNPPz3nnHNO7rvvvpx11lk58cQTc+eddyaZjtqPf/zjedOb3pTJycl86UtfSpKsX78+K1eu3LXfNWvW5MYbb0wyfZfiT3/60znzzDNzyy235LrrrsvJJ5+cycnJXHTRRQfmC99PrhQDABzkfvnLX+bUU09NkixevDi33377i26/c+fOnHXWWbn22mtzwQUX5FOf+lTuvvvubN68OatXr87555+ftWvXZv78+bn//vvz5JNPZsWKFTn33HNfcizz5s3LPffckyQ57rjj8uCDD2bu3LnZsWPH8F/oGIliAICD3L5On5gzZ07OO++8JMnSpUszd+7czJ49O0uXLs3WrVuTJN/85jfz3e9+N7feemuSZGpqKg888EDmzJnzovt+3/vet+vx5ORkLr744qxatSqrVq3ax6/qwDJ9AgDgEDQxMZFnn3121/Lub082e/bsXe/OcNhhh2Xu3Lm7Hj/99NNJpt/r94tf/GI2bdqUTZs25cEHH8y55577ovtNkiOOOGLX47vuuiuXXXZZNm7cmNNPP33Xvl+ORDEAwCFo0aJF2bRpU5599tk8/PDDue+++/bp+e94xzty/fXX56mnnkqS/OhHP8rOnTvz+te/Pps3b86TTz6ZqamprFu3bo/Pf+64b3vb2/LZz342O3bsyC9+8Yuhv65xMX0CAOAQtGLFiixevDhLly7NKaeckmXLlu3T8y+55JJs3bo1y5YtS2stCxYsyB133JETTjghF154YSYnJ7NkyZKcdtppe3z+M888k/e///2ZmppKay1XXHFFjjrqqFF8aWNRrbWZHkOWL1/eNmzYMNPDAADYZ1u2bMlJJ50008NgD/b0d1NVG1try5+/rekTAAB0TxQDANA9UQwAQPf8ot24XTP/ABxjavzHAAA4hLlSDABA90QxAADdE8UAAAe5qsqVV165a/lzn/tcrrnmmpHse9asWTn11FN3/XnuNtCHGnOKAQBGadS/T7QXvzs0d+7c3HbbbfnkJz+ZY489dqSHP/zww7Np06aR7nNYzzzzTGbNmjXSfbpSDABwkJuYmMill16az3/+8//hcz/96U9z9tlnZ3JyMmeffXYeeuihJMlv/uZv5vLLL88ZZ5yRE088MbfeeuteH+/GG2/MmjVrdi2vXLky69evT5IceeSRueqqq3L66afnnHPOyX333ZezzjorJ554Yu68884k01H78Y9/PG9605syOTmZL33pS0mS9evXZ+XKlbv2u2bNmtx4441Jpm9b/elPfzpnnnlmbrnlllx33XU5+eSTMzk5mYsuumifzteeuFIMAHAIuOyyyzI5OZlPfOIT/279mjVr8sEPfjCrV6/OV77ylVx++eW54447kiSPPPJI7rnnnvzgBz/I+eefn/e85z3/Yb+//OUvc+qppyZJFi9enNtvv/1Fx7Fz586cddZZufbaa3PBBRfkU5/6VO6+++5s3rw5q1evzvnnn5+1a9dm/vz5uf/++/Pkk09mxYoVOffcc1/ya5w3b17uueeeJMlxxx2XBx98MHPnzs2OHTv26hy9GFEMAHAIeNWrXpUPfvCDue6663L44YfvWv9Xf/VXue2225IkH/jA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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"smokers = list(filter(is_smoker, df))\n",
"non_smokers = list(filter(is_not_smoker, df))\n",
"\n",
"plt.figure(figsize=(12,8))\n",
"plt.hist([list(map(age, smokers)), list(map(age, non_smokers))])\n",
"plt.legend([\"Fumeurs\", \"Non Fumeurs\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On s'aperçoit que la distribution des données est différente dans les deux groupes. La population des non fumeurs est globalement plus âgée (ci-dessous)."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(44.26975945017182, 49.815846994535534)"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def mean(arr):\n",
" sum = 0\n",
" for el in arr:\n",
" sum += el\n",
" return sum / len(arr)\n",
"\n",
"( mean([ age(r) for r in smokers ]), mean([ age(r) for r in non_smokers ]) )"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"On calcule alors la regression logistique pour chacun des deux groupes."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAHSCAYAAADmLK3fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdf3yU1Z33//fJMIGImpSCe9eAkvpltWqmRNOixV1ZqUVrxJFth7ZaabV4dyu3i+lScWURuHHFpQ3UqrVaXN2vbEv0G9OIbZXFle8tj4KNmzRUxVIKBYIrWiRVjCQk5/7jSkJ+zI9rZq75/Xo+HjxwrjlzXcdZDO+e/ZzPMdZaAQAAAIWmKNMTAAAAADKBIAwAAICCRBAGAABAQSIIAwAAoCARhAEAAFCQCMIAAAAoSKMy9eDx48fbyZMnZ+rxAAAAKBCvvPLKO9baCcOvZywIT548Wc3NzZl6PAAAAAqEMeaP4a5TGgEAAICCRBAGAABAQSIIAwAAoCBlrEYYAAAgn3R3d+vAgQP68MMPMz2VgjVmzBhNnDhRfr/f1XiCMAAAgAcOHDigU045RZMnT5YxJtPTKTjWWv3pT3/SgQMHVFFR4eozlEYAAAB44MMPP9RHP/pRQnCGGGP00Y9+NK4VeYIwAACARwjBmRXv909pBAAAQJ7w+XyqrKwceN3Y2CgOMIuMIAwAAJAnSkpK1NramulpDNHT0yOfz5fpaYRFaQQAAEAGNLa0a/qqF1Sx+FlNX/WCGlvaU/Kcxx57TAsWLBh4XVNToxdffFGSdPLJJ+v222/XhRdeqM9+9rN6+eWXNWPGDH384x9XU1OTJCfILlq0SJ/61KcUCAT0ox/9SJL04osvqqamZuC+CxYs0GOPPSbJOUF4xYoVuuSSS/Tkk0+m5N/LC6wIAwAApFljS7vuaNihzu4eSVL7kU7d0bBDkhSsKk/4vp2dnZo6daokqaKiQk8//XTU8UePHtWMGTN077336tprr9WSJUu0adMmvfbaa5o3b55mz56tdevWqbS0VL/+9a917NgxTZ8+XZ/73OdizmXMmDF66aWXEv53SQeCMAAAQJqtfu6NgRDcr7O7R6ufeyOpIBxvaURxcbGuuOIKSVJlZaVGjx4tv9+vyspK7d27V5L0/PPPq62tTU899ZQkqaOjQ7t27VJxcXHUe8+dOzexf4k0IggDAACk2cEjnXFdT8aoUaPU29s78HpwezG/3z/QaaGoqEijR48e+Ofjx49Lcvrz/uAHP9CsWbOG3Pell16KeF9JGjt2rLf/IilAjTAAAECanV5WEtf1ZEyePFmtra3q7e3V/v379fLLL8f1+VmzZumHP/yhuru7JUm/+93vdPToUZ155pl67bXXdOzYMXV0dGjz5s2ezz3VYq4IG2MelVQj6ZC19vww7xtJ35f0eUkfSPqatfa/vJ4oAABAvlg06+whNcKSVOL3adGssz1/1vTp01VRUaHKykqdf/75uuCCC+L6/De+8Q3t3btXF1xwgay1mjBhghobGzVp0iSFQiEFAgFNmTJFVVVVns891Yy1NvoAY/5a0vuS/i1CEP68pP8lJwhPk/R9a+20WA+urq62zc3NCU0aAAAg27z++uv6xCc+4Xp8Y0u7Vj/3hg4e6dTpZSVaNOvspOqD4Qj3fwdjzCvW2urhY2OuCFtr/39jzOQoQ66RE5KtpG3GmDJjzMestW/GN20AAIDCEawqJ/hmmBc1wuWS9g96faDv2gjGmJuNMc3GmOa3337bg0cDAAAAifGia0S4Q53D1ltYax+W9LDklEZ48OzEtNVLm1dIHQekIr/U2+Xt/f1jpavXSoGQt/cFAACAZ7wIwgckTRr0eqKkgx7cNzXa6qVnbpW6+9qTeB2CJan7qNQw3/kVjSmSbO/I6yXjpCvvJUgDAACkkBdBuEnSAmPMT+VsluvI6vrgzStOhOBMCxeCJanzsLsgPRwBGgAAwDU37dN+ImmGpPHGmAOS7pLklyRr7UOSfi6nY8Tv5bRP+3qqJuuJjgOZnkHqJBKgKy6V5jWlbk4AAABZyk3XiC/HeN9KusWzGaVa6USpY3/scYVizxZpWam7sdU3STV1qZ0PAABImDFGtbW1+t73vidJ+u53v6v3339fy5YtS/rePp9PlZWVA68bGxs1efLkpO+bSYV3xPLMpfqwYYHG6FimZ5J7mtc5vyIxPunCrxGWAQDIkNGjR6uhoUF33HGHxo8f7+m9S0pK1Nra6uk9k9XT0yOfz5fw5wvuiOXL/+M0fafrJh3oHa9ea9TZ65O1ivxLLq9lrgdG9rA9TlBeVjrsV5nza835zmZFAADg/J245nxP/44cNWqUbr75Zq1Zs2bEe3/84x81c+ZMBQIBzZw5U/v27ZMkfe1rX9Ott96qz3zmM/r4xz+up556yvXzHnvsMS1YsGDgdU1NjV588UVJ0sknn6zbb79dF154oT772c/q5Zdf1owZM/Txj39cTU1OWWZPT48WLVqkT33qUwoEAvrRj34kSXrxxRdVU1MzcN8FCxbosccek+QcGb1ixQpdcsklevLJJ+P6foYruBXhXYeOapcuUVPXJZ7e99/8d+uvil6N6zPWGBWF7zSXZ/r+HTv2x65hHn+OtGB7eqYFAECmDO9i1bHfeS0lven9lltuUSAQ0He+850h1xcsWKAbbrhB8+bN06OPPqpbb71VjY2NkqQ333xTL730knbu3KnZs2frC1/4woj7dnZ2aurUqZKkiooKPf3001HncfToUc2YMUP33nuvrr32Wi1ZskSbNm3Sa6+9pnnz5mn27Nlat26dSktL9etf/1rHjh3T9OnT9bnPfS7mv+OYMWP00ksvuf1KIiq4IJwqN3TfmfQ9BsJ0X2fmcA2a8947O0/ULBcVn2hvR0cMAEA+CdfFqrvTuZ7k33WnnnqqbrjhBt13330qKSkZuP6rX/1KDQ0NkqSvfvWrQ4JyMBhUUVGRzj33XL311lth7xtvaURxcbGuuOIKSVJlZaVGjx4tv9+vyspK7d27V5L0/PPPq62tbWAVuqOjQ7t27VJxcXHUe8+dO9f1PKIhCGcRt2G6yEhfmXaGVgb7CtY31kav3c1Vg3s8R+uIQUgGAOSaSF2sPOputXDhQl1wwQX6+tcjN/My5sSS2+jRowf+2cZR7zlq1Cj19p5oB/vhhx8O/LPf7x94RlFR0cAzioqKdPz48YFn/eAHP9CsWbOG3Pell16KeF9JGjt2rOs5Rp2/J3fJIVNOG6tdh45mehpJ6bXSE9v26Ylt+/quzOz75Zhy2lhtqp0R+QZt9dLT33RqevNBpJBcOkmauZSADADIPpG6WJVO9OT248aNUygU0rp163TjjTdKkj7zmc/opz/9qb761a9q/fr1uuSS5MtEJ0+erAcffFC9vb1qb2/Xyy+/HNfnZ82apR/+8Ie67LLL5Pf79bvf/U7l5eU688wz9dprr+nYsWP68MMPtXnzZk/mO1zBBeFNtTN0ed2LI8LwqaN9+vOxE8Fw9KgiVZ9Zpq27D6d7iknbdeioJi9+dsT1shK/ls0+T8GqkPtw2FYv/ewWqcfNCXxGEU7XzoxoNcn0TwYAZNLMpUNrhCXJX+Jc98i3v/1t3X///QOv77vvPt14441avXq1JkyYoH/9139N+hnTp09XRUWFKisrdf755+uCCy6I6/Pf+MY3tHfvXl1wwQWy1mrChAlqbGzUpEmTFAqFFAgENGXKFFVVVSU913BMPMvfXqqurrbNzc0ZeXY8ljTuGLTy6kS9004p1lvvpeBo5gwxkq67aFCpRTLa6qWGm5VVgdgtwjEAIAmvv/66PvGJT7j/QFu9UxPcccBZCeb/i+mJcP93MMa8Yq2tHj6WIOyRxpZ2rX7uDbUfyZLjm5MUs7wiXgP/sefIYSb0RAYAxCnuIIyUIAhnsSWNO7R++76BvsM+I/Xk2OLpSf4i/fOcgIJV5d7csK1e2rhQ6hpWu2182VPHzIY8AEAMBOHsQBDOYY0t7Vr+zKt694PuTE8lbp6WWPRrq5eeWSh1Z+kGR46dBgD0IQhnB4JwHmtsadd3nvqNunJgGXlEmzevbayVXnksO1aNTZF04dcJxQBQwF5//XWdc845Q9qSIb2stdq5cydBuNAsadyh9dv25cQWNc9LK4a7f5pzMEc2YAMeABSMPXv26JRTTtFHP/pRwnAGWGv1pz/9Se+9954qKiqGvEcQLnDXPfKrrG4F5/nmvOEyeejI6FLpWMeJ14RjAMhL3d3dOnDgwIjDH5A+Y8aM0cSJE+X3+4dcJwgjqnC9lTMlJbXG4WRDaQU1xgAApBxBGHHJpmAsSdenIxj3e3y2tGdLep7Vj0AMAEDKEISRtGwprygvK9GiWWenrsZ4uHT1QK64VDr8BxqrAwDgMYIwUiJbNumldcV4Y630yr9Ktjc9z/MVS9c8QCgGACBBBGGkXWNLu/6xoU0fdKcpMCoDq8VS9F7HwzfKeYEyCgAA4kIQRsb1H0N9sO8Y6lT9yfP7jMYWj1JHZ7dOz0QwHu6eM7wPwxKn3QEA4BJBGFmnsaVdCze0pv25Jf4i3ZPKPsbhpHQDnpGqb2SVGACACAjCyAlLGnfoiW370va86WeN0/r5F6fteZJGllKYIm/rjY1PuvBrBGMAAPoQhJFzGlvatazpVR3p7E7L8/xF0uovTs1MGUVKDvzwSXMeonQCAFDwCMLIeenuUOEzRl+eNinN3SgeS90BH9QUAwAKFEEYeWdJ4w79ZPt+9Qz6M/yRk/x6/8Pj6u717s912k66CycVtcUEYgBAgSEIo2A0trTr2/Wt6knRH+209iwerK1e2rhQ6vLwxD9CMQCgABCEUXDScUx0Vmy2SxYHdgAA8hxBGAWtsaVdtfWt8rBiYoiyEr+WzT4vc/2K758mvbPTm3uxSgwAyDMEYWCQxpZ2LXqyVak69C4jK8WpOPq54lJpXpN39wMAIAMIwkAEqe5GkZGaYi9XiCWOdQYA5DSCMOBC/zHQ7X3HQHtpymljtal2huf3jaqtXtq8QurY7839Tv6Y9A8eBmwAANKAIAwkIBUn3Y0eVaR7/zbNRzxLTij+xe1S5+Hk70UdMQAghxCEgSSkcqU4o+3YfnaL1NOV+D0omQAA5ACCMOChVGy2y0ggbquXGv9O6j2e+D3YUAcAyHIEYSAFljTu0L9v3+dpW7aMdJzw4gS70knSzKWUSwAAsg5BGEiD6x75lbbu9qAGVxksmdhYKzWvS/zzpki68OuUTAAAsgZBGEgjrzfZGUlr5k5N7wa7tnqpYX5y92CVGACQBQjCQIZ4uUosZaB0IuluE0aqvpEVYgBAxhCEgQxrbGnXnU/v0NGuHk/utzbdK8RS8rXEdJkAAGQAQRjIIl6WThhJ16WznnhjrfTKY5JNMNAThgEAaUYQBrKUl6UTaT+9rq1eemah1H00/s/6x0pXr6V+GACQcgRhIMt51YrNZ6TvhdJcNnH/NOmdBI9eNj7p2ocIxACAlCEIAzmisaVdCze0Jn2ftG+qS7ZkgmObAQApQhAGclCytcQ52YuYkgkAgMcIwkAO82pzXVqDcVu9tHGh1JVA/bDEpjoAgGcIwkAe8GJjXUZqiBNdISYMAwA8QBAG8khjS7uWNb2qI53dSd8rbbXEiYZhaocBAEkiCAN5LNmV4jE+o513f97DGUWR6KEcxWOlGmqHAQDxixSEizIxGQDeWj//Yl1/0RnyGZPQ5z/ssZp29yaPZxXBvCZpWYfzq/om95/rOio1zJfuPt2pPwYAIEkEYSBPrAxWavc9n9feVVdp+lnj4v78W+91qbGlPQUzi6KmTprziLPa61Z3XyB+fHbq5gUAKAiURgB5KpFyibISv8aOHqWDRzp1elmJFs06O32b6jbWSs2PSorjZ9L4c6QF21M2JQBAfqBGGChQSxp3aP32fUr0P3Uj6bp0tV1rq5d+cbvUGUeALyqWgg9QOwwAiIggDCCpfsRp7UGcSIcJuksAACIgCAOQlNwRzj5j9OVpk9K3OvzMQqcmOB4Vlzob8gAA6EMQBjBEY0u7Vj/3xkA98Addx/XuB+77Eqet/3BbvdR4i9Tb5f4zvtHSNfezOgwAkEQQBhBDY0u77mjYoc7uHtef8RdJq7+YplPq7p8mvbMzvs9wMh0AQPQRBhBDsKpc98yp1Nhin+vPdPdKCze0aknjjhTOrM+C7U7ZQzya10nLxtF3GAAQFkEYwIBgVbleXXFF3IdzPLFtn6575FcpnFmfeU1O3+GSePok9zh9hzfWpmxaAIDcRGkEgIgS6TJhjHTdtDR1mIj3uGZKJQCgIFEaASBuK4OVcZ9SZ62zQnx53YupmdRg85riK5doXictK+VUOgCAJIIwgBjWz79Ya+dOVbHPfamEJO06dFSTFz+b+kDcXy7hj+OY5j1bpBUTqB0GgAJHEAYQU7CqXL+7+/NaO3eqiuLLw9p16KgCd/0yNRPrFwhJdx50jlx2q7dLeuZWwjAAFDCCMADXglXlqgtNlT/Onxx/PtaTnlKJBdvjC8Pdnc5GOsIwABQkNssBSMiSxh369+371JvAj5BTR/vUtvwK7yfVL95T6YxPuvYhDuAAgDzFgRoAUiKRzhL9Un46Xbyn0pWMk668l0AMAHmGrhEAUmJlsFJr505N6LNbdx9Obf/hQEha+rb7zhKdh+k5DAAFhBVhAJ65vO5F7TrkshxhkCIjfSUdvYeXf0Syve7GznmElWEAyBOsCANIuU21M7R31VWaclocrcwk9do0nU534dfdj22YLy0rY3UYAPIYQRiA5zbVzoj7mGbJKZVobGlP0azknCpXfZNk3P7os84hHIRhAMhLlEYASLnJi5+Na/zYYp/uvrZSwaryFM1Izka6hvkuBxtp2ZHUzQUAkFKURgDImL2rrtKpo32uxx/t6tHCDa2avPhZLWnckZpJBULO6rArllVhAMhDBGEAadG2/AqtnTtVHznJH9fnUlo7XFPnbIorGRd7bPM6ac35HL4BAHmEIAwgbYJV5WpZ+jmtnRvf6XRbdx9O7crw7XvcrQ537OdYZgDIIwRhAGkXrCrXrn++Kq7+w+u37UvPRrpYujulp79JGAaAPOAqCBtjrjDGvGGM+b0xZnGY988wxvynMabFGNNmjPm891MFkG+CVeW6/qIzXI21khZuaNX0VS+kLhC7DcO2R2q4mbphAMhxMYOwMcYn6QFJV0o6V9KXjTHnDhu2RFK9tbZK0pckPej1RAHkp5XBStdhWJLaj3TqjoYdqQ/DJtbmvr7WastKpcdnp2YuAICUcrMi/GlJv7fW/sFa2yXpp5KuGTbGSjq1759LJR30booA8t3KYKX2rrpK089ysWlNUmd3T2pXh2vqpLsOOxvp/CWxx+/ZQhgGgBzkJgiXS9o/6PWBvmuDLZN0vTHmgKSfS/pf4W5kjLnZGNNsjGl+++23E5gugHy2fv7F2rvqKl1/0RlycxRH+5FOLdzQqin/+GxqAnEgJF19n4vVYTlhmFIJAMgpboJwuL+Php/C8WVJj1lrJ0r6vKT/15iRRzdZax+21lZba6snTJgQ/2wBFISVwUqtmTtV5WUuVmMldfc69cMpabMWCEnXPqTwPwqH4RQ6AMgpboLwAUmTBr2eqJGlDzdJqpcka+2vJI2RNN6LCQIoTMGqcm1dfJnWzp2qEr+7wzi27j6cujBcfaNch2H6DQNATnAThH8taYoxpsIYUyxnM1zTsDH7JM2UJGPMJ+QEYWofACQtWFWue+ZUul4d3rr7sKYuf977UomaOmnOw1JRceyxHfvpKgEAOcBYO7zKIcwgpx3aWkk+SY9aa+82xqyQ1GytberrIvGIpJPllE18x1r7fLR7VldX2+bm5qT/BQAUjsaWdi3c0OpqrJF03UVnaGWw0vuJPD7bqQl2o/omJ0QDADLGGPOKtbZ6xHU3QTgVCMIAEnHdI7/S1t2HXY8vK/Fr2ezzFKwavsc3SRtrnTIINyouleYN/3+kAQDSJVIQ5mQ5ADll/fyL4+o7fKSzW4ue/E1qSiVc9RuWs3p8/zRvnw8ASBpBGEDOibfvcHev1cINrVrSuMPbiQzuNxxrI907O6kZBoAsQxAGkLPWz79Ya+dO1UdO8rsa/8S2fSnuKhFD8zq6SQBAFiEIA8hpwapytSz9nOtDOLbuPpy60+iqb4o9rmE+xzIDQJZgsxyAvNHY0q7a+lb1uvyxdupon9qWX+HtJOLpKMEmOgBICzbLAch7wapy1YWmuh7/52M9Ctz1S28nMa9JGn+Ou7FuAzMAICUIwgDySrCq3PUmOskJw2fd8XNvN9It2O6uTEJyyiToKAEAGUEQBpB34m2x1mOtnti2z9swXFPndJPwuzgR752d0nddriIDADxDEAaQl/pbrK2dO9X18cw/2b7f20kEQtLV97k7lvn9N2mvBgBpRhAGkNeCVeXauvgynTo69sEXPanYPBwISUvfdje2+VHaqwFAGhGEARSEtuVXuArDkxc/q8mLn/W+37CrmmEr/eJ2b58LAIiIIAygYLQtv0J7V13lqn546+7Dmrz4We/qhmvqnHZpsXQedjbQUSYBAClHEAZQcFYGK3X9RWfIZ2IfwfHEtn26vO5Fbx48r8nZQGdc/OhtXsehGwCQYhyoAaDgTV78bMwx088ap/XzL/buoRtrnbAbS/VNzmoyACBhHKgBAEnYuvuw9+3VSlz0O25exwY6AEgRgjCAguf2AA7Pew1fea+7cY23ePdMAMAAgjCAgrd+/sVxheGqFc+rsaU9+QcHQu420PV2sSoMAClAEAYAOWF476qrNKoo9ga6dz/o1sINrd6E4XlN7lqrbV6R/LMAAEMQhAFgkO9+8ZNykYUlSYuebPXmoTV10rIOSVEe3LFfWlYmrTmf1WEA8AhBGAAGCVaVqy40VWOLYx++0d3r8cOrb4wxwDqB+JlbCcMA4AHapwFABEsad2j9tn1y+1Py+ovO0MpgZXIPfXy2tGdL7HGlk6TbfpvcswCgQNA+DQDitDJYqTVzp7oe70lXif5DN0onKXqpxIHkngMAIAgDQDTBqnLXHSUkJwwnLRByVnuXHekLxGGUTkz+OQBQ4AjCABBDPO3VJOkv7/y5Nx0lJGnmUslfMvSav8S5DgBICjXCABCns+74uXpc/Oz0pGZYcjbGbV7hlEOUTnRCcCCU/H0BoEBEqhEelYnJAEAu+/K0Sa5KINZv26fqM8cpWFWe3AMDIYIvAKQApREAEKeVwUpNOW1szHFW0rfrf+NdmQQAwFMEYQBIwKbaGa7CcI+1um1Da/LdJAAAniMIA0CCNtXOcLWJzsqj1moAAE+xWQ4AktTY0q5/bGjTBy6Pmpty2lhtqp2R2kkBAAZE2ixHEAYAjzS2tOvb9b9x1VEiZWF4+Ml0FZc6h3QAQAHjZDkASLFgVbm+F/pktPPgBuw6dNT7CYQ7nnnPFuc6AGAEgjAAeChYVa7rLjrD1diz7njW244Sw0NwrOsAUOAIwgDgsZXBSl1/0RkxV4Z7rLRwQ6um3b0p9ZP63/8j9c8AgBxDEAaAFFgZrNSauVNd/ZB9670uXV73Ymon1NMpLSuVNtam9jkAkEMIwgCQIsGqcv1h1VWuxu46dDT5MglfcewxzesIwwDQhyAMACnmptewJC16KslT6K55wN245kcTfwYA5BGCMACk2Pr5F7s6ha67x2r5M68m/qBASBp/jouBVrp/WuLPAYA8QRAGgDTYVDtDa+dOjbmB7t0PujV91QuJrwwv2C75SmKPe2en9F03oRkA8hdBGADSJFhVrj2rroq5Otx+pFMLN7TqvKW/TCwQ/9N/S6NLY497/03CMICCRhAGgDTbVDtDZSX+mOOOdvXo208mWDd8xz6p+qbY495/k9ZqAAoWQRgAMmDZ7PPkL4p9Bl1PbxJ1wzV10pxHYo/r6ZTucXcICADkE4IwAGRAsKpcq7/4SZWXxa7nffeD7sQf5HYD3bEO2qoBKDgEYQDIkGBVubYuvszVJrrJi5/VdY/8KrEHLdgunfyx2OOa1yV2fwDIUQRhAMiwYFW5rrsodmnC1t2HEz+B7h92ugvDrAoDKCAEYQDIAiuDlbreRRjedehocmE4Vmu1Vx5L7N4AkIMIwgCQJVYGK7V27tSYdcO7Dh1NvEzin/47+vu2R1o+jpVhAAWBIAwAWaS/bjiWrbsPJ/6QWJ0kbI9TL8zpcwDyHEEYALLQ9LPGpe7mgZBUcWnsce/sZGUYQF4jCANAFlo//+KYJ9AlZV6Tc+CG8UUf98q/pm4OAJBhBGEAyFKbamdEDMOerBjX1El3HY4ehm2v9Pjs5J8FAFmIIAwAWWxT7YwRoXf6WeO0fv7F3j3kwq9Ff3/PFkokAOSlUZmeAAAgOk9Dbzg1ddLerU5NcCTN66QzLnLqiwEgT7AiDABwTp/zx6hJbphPmQSAvEIQBoA80djSrumrXlDF4mc1fdULamxpj+8GV6+NPYYyCQB5hCAMAHmgsaVddzTsUPuRTllJ7Uc6tXBDa3wHb7htq9a8LuF5AkA2IQgDQB5Y/dwb6uzuGXF96+7DWtK4w/2N+tuqxcKqMIA8QBAGgDxw8EhnxPee2LYvvpvV1MU+fa55HWEYQM4jCANAHji9rCTq+xWLn41vZTgQkoqKo49pflRqq3d/TwDIMgRhAMgDi2adHfV9K2dl+PK6F93fNPhAjAGWThIAchpBGADyQLCq3NW4XYeOatrdm9zdNBByVy+8Z4t0/zR39wSALEIQBoA8cf1FZ7ga99Z7Xe67SdTUuQvD7+ykTAJAziEIA0CeWBms1JTTYhyK0Wfr7sPubzwQhk30cQ03u78nAGQBgjAA5JFNtTNcrwzHpaZOmvNwjEFW+u453j8bAFKEIAwAeWZlsFJ7V10Vc3V48uJnvT9w4/032TwHIGcQhAEgT22qnRGrmEFbdx+Or5PEvKbYY/ZsoV4YQE4gCANAHlszd2rMMLzr0NH4egy7OYb56W8ShgFkPYIwAOSxYFW51sydqvIYB248sW2f+zKJeU3S6NLoY2yP9MythGEAWY0gDAB5LlhVrq2LL4s5Lq4yiTv2SSd/LFKLkr4AACAASURBVPqY7k5p8wp39wOADCAIA0CBmH7WuJhjdh066j4M/8PO2GUSHfvd3QsAMoAgDAAFYv38i131Gd516Gh8ZRJzHpGML8IAQ3kEgKxFEAaAAuK2z/DW3Yfdb6ALhKRrH1L4AzcsG+cAZC2CMAAUmJXBSldlEk9s2xdfGJYN/x4b5wBkKYIwABQgt2UScYXh0kmR3+vuZGUYQNZxFYSNMVcYY94wxvzeGLM4wpiQMeY1Y8yrxph/93aaAACvbaqd4SoMr9+2T40t7bFvOHOp5I/Sps32SI2EYQDZI2YQNsb4JD0g6UpJ50r6sjHm3GFjpki6Q9J0a+15khamYK4AAI9tqp0Rs0zCSlq4oTX2ynAgJF19X5SNc5J6e6SN/BUBIDu4WRH+tKTfW2v/YK3tkvRTSdcMGzNf0gPW2nclyVp7yNtpAgBSZf38i11toHN16Eb/xrloK8NdR+OcIQCkhpsgXC5pcCPIA33XBvtLSX9pjNlqjNlmjLnCqwkCAFJvZbDSdTeJmGUS/SvD0aw5nxIJABnnJghH6IczxChJUyTNkPRlST82xpSNuJExNxtjmo0xzW+//Xa8cwUApFB/GA73Q3+wRU+2xr5ZIKTwf3306dgvNcyXvntOPFMEAE+5CcIHJA3eCjxR0sEwY35mre221u6R9IacYDyEtfZha221tbZ6woQJic4ZAJAiK4OVWjN3atQx3b1yd+BG9Y2xx7z/JmEYQMa4CcK/ljTFGFNhjCmW9CVJTcPGNEr6G0kyxoyXUyrxBy8nCgBIj2BVecwyia27D2vy4mejb6CrqZOqb4q+eU5ywjBlEgAyIGYQttYel7RA0nOSXpdUb6191Rizwhgzu2/Yc5L+ZIx5TdJ/Slpkrf1TqiYNAEitlcFKFftiFUk4G+gur3sx8oCaOumuw9F7DEtOj2EASDNXfYSttT+31v6ltfYsa+3dfdeWWmub+v7ZWmtrrbXnWmsrrbU/TeWkAQCp9y9f+KSrcbsOHY1dKjFzafT3bY+0sdblzADAG5wsBwAIK1hV7uooZslFN4lASDr5Y9Fv0vwoJRIA0oogDACIaP38i12H4TufjnHgxj/sjHEHK21e4W5iAOABgjAAICq3B24c7eqJXSJRcWn09zsOxDEzAEgOQRgAENPKYKXWzp2qWPvntu4+HH3z3LwmaXy0dmlWWlYq3T8tkWkCQFwIwgAAV4JV5dp9z1Xyx/ibY9eho9HD8ILtTlu1aAduvLOTMAwg5QjCAIC4rP5i9AM3JCcMx+wxPOfh6G3V3olVUwwAySEIAwDi4ubADcnpMRw1DAdC0m2/jX4TukgASCGCMAAgbiuDla66STyxbZ+745gjoYsEgBQiCAMAErJ+/sWactrYmOO27j4cfWVYUY5gposEgBQiCAMAErapdoarMBy1TGLOQ1E+2ddFYvk4Tp4D4DmCMAAgKZtqZ7gaF7FMIhCK3UXC9kjN66THZyc0RwAIhyAMAEhaPEcxh10ZHtJFIkog3rOFDXQAPEMQBgAkLZ6jmNdv2xf+jf4uEsuORL8BG+gAeIQgDADwxPr5F2vvqqtitlazUozNc5JMtA10++OfHACEQRAGAHhqZbAyZhhev22fGlvaIw+48GvRH8LGOQAeIAgDADy3MlgZ9ShmK+nb9b+JHIZr6qI/4JXHEp0aAAwgCAMAUiLWUcw91mrhhlZdXvdi+AHRjl+2PdKa89k4ByApBGEAQEq4PYp516Gjmnb3ppFvzFwa/YMd+6WGmymTAJAwgjAAIGX664WjNESTJL31XtfIDXSBkFRxaYxPWqn5UVaGASSEIAwASKmVwUqtmTtVPhM9Dv9ke5huEPOanMM2onWRkJV+cXtykwRQkAjCAICUC1aV63uhT0Yd02Otpq96YeQGupo66a7D0WuGOw9TIgEgbgRhAEBaBKvKNeW0sVHHtB/p1MINreGPYp65VFFPnWteJ90/LblJAigoBGEAQNpsqp2hvzilOOa4sEcxB0JS9Y3RP/jOTunx2UnMEEAhIQgDANJq+52X6/qLzohZM7x+e5ijmGvqpJIYRznv2ZLE7AAUEoIwACDtVgYrtfuez6u8rCTiGGsV/sCNK+9V1BIJSfruOclNEEBBIAgDADJm0ayzo74f9sANNyUS77/J5jkAMRGEAQAZE6wqj3oUs+QcuBG465dDL9bUSeNjrPo2r0tucgDyHkEYAJBRq784VUUxKh3+fKxnZCeJBdtj35yNcwCiIAgDADIqWFWuulDsAze27j48smY41slze7Zw6hyAiAjCAICMc3PghiTdtqF1aFu1eU2xb/70NwnDAMIiCAMAsoKbAzespCe27Rsahqtvin5j2yM13MzmOQAjEIQBAFljU+0MnTraF3Pc+m37TpRJuNk4Jys1P8rKMIAhCMIAgKzStvwKTT8r+qEZVhp6FPOC7bHrhWWlzSs8mSOA/EAQBgBknfXzL9bauVNjHZuhrbsPn+gzPK9JmvOIZKKsKHfs92qKAPIAQRgAkJWCVeW67qIzYo7bdejoiTKJQEi69qHoH6A8AkAfgjAAIGutDFbq+ovOiLkyvHBD64kXgVD0wQ3zpfunJT03ALmPIAwAyGorg5VaM3dqzHHT7t7k/qbv7OSwDQAEYQBA9gtWlcfcQPfWe10nwnDMjXNyDtsAUNAIwgCAnLB+/sUxxwyE4XlN7sIwq8JAQSMIAwByxvUuNs+99V6Xs3muv4tENHu2UC8MFDCCMAAgZ6wMVro6cOPb9b9xwnAgFPuwDeqFgYJFEAYA5JS25VfoL04pjjqmx1rdtqHVOYrZzWEbe7ZwBDNQgAjCAICcs/3Oy2OGYSvpiW37nDA8ryn2TV95zJO5AcgdBGEAQE5yE4alQWE41qqw7fFoZgByBUEYAJCztt95udbOnSqfiX7kxhPb9um6rjui1wtHO5oZQF4iCAMAclqwqlzfC30y5ulzW3cf1pKJP468Mnzh17yeGoAsRxAGAOS8YFW5rnPRWu2JbfuceuHqm06sABuf87qmLsWzBJBtjLU2Iw+urq62zc3NGXk2ACA/LWnc4YTdKP7ilGJtv/PyNM0IQDYwxrxira0efp0VYQBA3lgZrIx56MZb73Xp8roX0zMhAFmNIAwAyCsrg5Uq9kWvGN516KjTSQJAQSMIAwDyzr984ZMxx6zfts85fQ5AwSIIAwDyTrCqXNPPGhd1jJW0/JlX0zMhAFmJIAwAyEvr518c88CNdz/ojrwq3FYvrTlfWlbm/N5Wn4JZAsgkgjAAIG9tv/NyTTltbNQxq597Y+TFtnqp8VtSx35J1vm98VuEYSDPEIQBAHltU+2MqJ0kDh7pHHnxF7dLvd1Dr/V2S88s9Hh2ADKJIAwAyHsrg5UqK/GHfe/0spKRFzsPh79R91FpY62HMwOQSQRhAEBBWDb7PJX4fUOulfh9WjTr7Phu1LyOMAzkCYIwAKAgBKvKdc+cSpWXlchIKi8r0T1zKhWsKh85uCR6xwk1P0q9MJAHOGIZAIDh2uqlhvmxx1XfJNXUpX4+AJLCEcsAALgVCDkhNxbKJICcRhAGACCcmjr3YRhATiIIAwAQyUAYNtHHUS8M5CSCMAAA0dTUSXMejj5m84r0zAWApwjCAADEEggp6qpwx35qhYEcRBAGAMCN6hujv8/GOSDnEIQBAHCjpk6quDT6mFceS8tUAHiDIAwAgFvzmqQ5j0R+3/awcQ7IIQRhAABcamxp1/Sfj9dxG+Wvz4b50nfPSd+kACSMIAwAgAuNLe1a9NRv1H6kU+t7LlPUg1nff5MwDOQAgjAAAC4sf+ZVdfc46feu4zfq33o+GzsMs3kOyGoEYQAAXHj3g+4hr+86fqPa7fjoH6KTBJDVCMIAACToX46Hoq8KS4RhIIsRhAEAcKGsxD/iWlPvJTpoy1yE4UfpJgFkIYIwAAAuLJt9Xtjr07sedBGGrfSL21MyLwCJcxWEjTFXGGPeMMb83hizOMq4LxhjrDGm2rspAgCQecGqcl1/0RlhD1qe3vVg7M1znYdZFQayTMwgbIzxSXpA0pWSzpX0ZWPMuWHGnSLpVknbvZ4kAADZYGWwUmvmTlV5WcmI91x1kmiYT70wkEXcrAh/WtLvrbV/sNZ2SfqppGvCjPvfkv5F0ocezg8AgKwSrCrX1sWX6fqLzhjxnqswzOY5IGu4CcLlkvYPen2g79oAY0yVpEnW2o0ezg0AgKy1Mlip6y86Qz4ztFjiruM36rA9OfqHX3ksdRMD4JqbIByuHGrgf+saY4okrZH07Zg3MuZmY0yzMab57bffdj9LAACy0MpgpXbf8/kRf1EuP36DPrDFkT9oe6gXBrKAmyB8QNKkQa8nSjo46PUpks6X9KIxZq+kiyQ1hdswZ6192Fpbba2tnjBhQuKzBgAgi5w+rGa4qfcSLe7+RvQSicZvEYaBDHMThH8taYoxpsIYUyzpS5Ka+t+01nZYa8dbaydbaydL2iZptrW2OSUzBgAgyyyadbZK/L4h15p6L4leL9zbLT2zMPWTAxBRzCBsrT0uaYGk5yS9LqneWvuqMWaFMWZ2qicIAEC2C1aV6545lSO6ScTcPNd9VHqcv0qBTDE25nE4qVFdXW2bm1k0BgDkl+mrXlD7kc4h1/aM/opMuB03/SouleY1RRkAIBnGmFestSPKdjlZDgAAD4Urk3hXMbpI7NlCvTCQAQRhAAA8FK5MYln3DTGOYJa0eUVqJwZgBIIwAAAe6z90oz8Mx9w4J0kd+6U157MyDKQRQRgAgBQZXCZx1/Eb9X96z4sdhp+5lTAMpAlBGACAFOkvk+h3Q/edscNwdydlEkCaEIQBAEihYFX5kHrhG7rv1N93f0sHescrYh7u2C9trE3L/IBCRhAGACDFhneSaOq9RJfbB9RZ8rHIH2peR49hIMUIwgAApNjgThJGUnlZie6ZU6mTrlwh+Usif5C2akBKjcr0BAAAKATBqnIFq8qHXQ05vzXMj/zBzSukQChl8wIKGSvCAABkUiAkGV/k9zsOpG8uQIEhCAMAkGG7z/hi5E4SpRPTOhegkBCEAQDIsBvemhu2rVqXfFLXUWlZGYdtAClAEAYAIMMOHukc0lat1xr9qfdkyRqp87Aky2EbQAoQhAEAyLDTBx3FfEnXffr4sfXq1BgVm+NDB3LYBuApgjAAABk2vM+wJJ1u/hR+MJvnAM8QhAEAyLBwfYY/POl/RBhtqRcGPGJs1APPU6e6uto2Nzdn5NkAAGS9tnqnJri7M8IAI1XfKNXUpXVaQC4yxrxira0efp0VYQAAslEgJF19n1Q6KcIA6xzDvLE2rdMC8glBGACAbBUISbf9VpKJPIYwDCSMIAwAQLaLdahG86PUDAMJIAgDAJDtZi5V1FVhWdqqAQkgCAMAkO0CIWdjXDS0VQPiRhAGACAX1NRJ1TdFfj9W+QSAEUZlegIAAMCl/lZpzY9KGtT+1F/SVz4BIB6sCAMAkEtq6qQ5D/e1VTPO71ff55RPAIgLK8IAAOSaQIjgC3iAFWEAAPJJW71zBPOyMo5iBmJgRRgAgHwx/Fjmjv3Oa4kVZCAMVoQBAMgXm1ecCMH9ujulX9yemfkAWY4gDABAvojUS7jzMCUSQBgEYQAA8kWUXsIHnrpD01e9oMaW9jROCMhuBGEAAPJFlF7C5eYdben8Wx19+u8Jw0AfgjAAAPkiEJJKxoV9yxhplOnVV8wmfexnX0rzxIDsRBAGACCfXHmvc9JcBMZIn7Zt1AwDIggDAJBfAiHnpLnSSYMPYR7CGOn9/28BNcMoeARhAADyTSAk3fZbWRP5r/mxOqYff7BACze0aury5wnEKEgEYQAA8lTRhV+Puip8jmnX8lGP6khnt+5o2EEYRsEhCAMAkK9q6mQqLo34tjHSDb7/0Oyil9TZ3aPVz72RxskBmUcQBgAgn81rkqKUSBgjfd//oHaP/opufv8B6oZRUEZlegIAACDFLvy61Lwu4tvGSD45q8N6X7qjYb4kKVhVnqYJApnBijAAAPmupk4af07MYcZI1/leoEwCBYMgDABAIViwXaq+KeYwn3o1u+glHTzSmYZJAZlFEAYAoFDU1ElzHol54MYq/4817+SX0zgxIDMIwgAAFJL+AzeKx0YccpLp0nf8G9I4KSAzCMIAABSaQEj6x4NRSyVO6vzvNE4IyAyCMAAAhaqmTiqdFOFNK605X2qrT+uUgHQiCAMAUMhmLo1cM9yxX2q4WdpYm945AWlCEAYAoJD11wxHWxluXifdW8HqMPIOQRgAgEIXCEm3/VaSiTym87D0zK2EYeQVgjAAAHCUToz+fnentHlFeuYCpAFBGAAAOGYuVdRVYUnqOJCWqQDpMCrTEwAAAFkiEJL2bZOaH5VkIwyy0rJSqeJSNQZ+qNXPvaGDRzp1elmJFs06W8Gq8nTOGEgKK8IAAOCEmjppzsNSybiow+yeLfrrp6vVfqRTVlL7kU7dtqFVSxp3pGeegAcIwgAAYKhASLp9j3Mcc4RuEkbSR8wH+jf/3QPXrKQntu1TxR3PEoiREwjCAAAgvIFuEuEZI/1V0asjrlvrBGLCMLIdQRgAACTlpeJbNbvopRHXf7J9fwZmA7hHEAYAANFVXBrxLWOkiUXvaK3/QS0f9eiQ93pspA13QHYgCAMAgOjmNUmjS6MOKTLSDb7/0CvFNw+sDvtMjFZsQIYZm6H/tVZdXW2bm5sz8mwAAJCAx2dLe7bEHGat9H96z9PzF/5I1WeOo8UaMs4Y84q1tnr4dfoIAwAAd+Y1Ob+vOV/qiFz/a4z0V75XVf7u/ap55Vp1dvdIclqs3dHgbKAjDCMbUBoBAADi4+IEOiPpzD/WD4Tgfp3dPVq4oVXTV72gxpb21M0RcIEgDAAA4hMISdU3KlYY9tnesN0kpBOrw4RhZBJBGAAAxM/FCXTGSN/3PzhkA91gnd09Wv3cG6mcJRAVQRgAACSm/wS6GO3VPlr0vlb5fxw2DB880pnKGQJREYQBAEBy5jVJ1TdFHXKS6VKd/6ERYfj0spJUzgyIivZpAADAGzG6SUgnWqvd0H2nSvw+3TOnUpJosYaUitQ+jRVhAADgjZlLJX/0FV5jpL8qelX/Meb2gRB8R8MOtR/plBWb6JBeBGEAAOCNQEi6+r6oG+gkJwz/P9qvYNvfafVzb4RtscYmOqQDQRgAAHinfwPdnEck44s+ds8W/c/3Hwj7FpvokA4EYQAA4L1ASLr2oZjDrh/1H2G7SbCJDulAEAYAAKkRCEVtrSY5QeT7/ge1fNSjA9dK/D4tmnV2iicH0DUCAACk2v3TpHd2Rh1i5XSUeLroCvlm1w3pGtHY0k5XCSSFrhEAACAzFmyPuTJsJBUZ6W/tLxVs+7uB640t7XSVQMoQhAEAQOoNHLphYo/ds0Vqq5ckukogpVwFYWPMFcaYN4wxvzfGLA7zfq0x5jVjTJsxZrMx5kzvpwoAAHJaTZ0052F3YxvmS/dPi9g9gq4S8ELMIGyM8Ul6QNKVks6V9GVjzLnDhrVIqrbWBiQ9JelfvJ4oAADIA4FQzOOYB7yzU5vG3B72rdPLStTY0q7pq15QxeJnNX3VC5RLIG5uVoQ/Len31to/WGu7JP1U0jWDB1hr/9Na+0Hfy22SJno7TQAAkDdq6lyXSZyl/do6+tYhLdZK/D79zTkTqB1G0twE4XJJgw8OP9B3LZKbJP0imUkBAIA8V1MnLTviahNduXlH9xav0zVFL6m8rET3zKnUf+58m9phJM1NEA73P9fC9lwzxlwvqVrS6gjv32yMaTbGNL/99tvuZwkAAPLTvCbnFLoYSnRM3y9+UFvP36hgVTm1w/CEmyB8QNKkQa8nSjo4fJAx5rOS7pQ021p7LNyNrLUPW2urrbXVEyZMSGS+AAAg3wRC0vhz3I1tXic9PjviyXOlJX7qhuGamyD8a0lTjDEVxphiSV+S1DR4gDGmStKP5ITgQ95PEwAA5LUF292H4T1btPbcXSrx+4Zc9hcZHe06PqRueOGGVl33yK+8ny/yQswgbK09LmmBpOckvS6p3lr7qjFmhTFmdt+w1ZJOlvSkMabVGNMU4XYAAADhLdguLetwSiX84Vd8+33qv76j1jE362snv+zUEZeV6OQxo9TdM7J6c+vuw1rSuCNFk0Yu44hlAACQfdrqnV7CsRT5peCDUiCkisXPht/EJMlnjHbf83lPp4jcwRHLAAAgdwRCUvHY2ON6u53AvLE2Yt2wJPVkaOEP2Y0gDAAAslPNWsm4jCrN69Qw9t6Ib/uM0wSLQzgwGEEYAABkp0BIuvZHUsk4V8P/4k/b1FbyzSGHb/T78rRJamxp5xAODEEQBgAA2SsQkm7f42yg8xXHHH6q/bO+X/yg/mv0zZpd9JJ8xuj6i87QymClVj/3BodwYIhRmZ4AAABATIGQ8/vT/1OyvVGHGknjzPu6b8wjui9YJQUqJUU+bINDOAoXK8IAACA39JdKFPlij5WGbKSTFHEzXbRNdshvBGEAAJA7AiEp+JDkG+3+M32n0S2adfaIQzhK/D4tmnW2x5NEriAIAwCA3BIISf90yKkbdrmRTnu2KOjbqnvmVKq8rGTgEI575lQqWFWe0ukie3GgBgAAyG1t9a5qh2V80rUPnag3jqGxpV2rn3tDB4906vSyEi2adTahOUdxoAYAAMhP/bXDsdge6ZlbneAcQ7hWaws3tGrq8udpt5ZHCMIAACD3BUJS9U2xx3V3OhvolpVK91ZEDMXhWq1J0pHObnoP5xGCMAAAyA81dU7dcFHsfsOSpM7DQ7pKDBatpVpnd48WbmjlZLo8QBAGAAD5IxCSlr7tBGLjss1a8zrp7tOHrA67aanGyXS5jyAMAADyTyDkbIzzu+wR3H1UavzWQBgO12otHFaHcxtdIwAAQP5qq5c2r5A69rsbXzpJuu23kpwNc8ufeVXvftDt6qNGkpXTlo0OE9klUtcIgjAAAMh/bfXSz26RerrcjS8qloIPSIHQQBu19jiPYv7ISX7ddfV5BOIsQPs0AABQuAIh6ZoHpOKx7sb3djkb6e6tUNC3VVsXX6a1c6e6Kpfo9+4HdJjIdgRhAABQGAIh6R8Pumuz1q/z8EDv4WBV+cDJdK4/Tg1xVqM0AgAAFJ62eukXtztB141BtcPSiQM3wvUajqasxK9lsymXSLdIpRGjMjEZAACAjAqEThy1vKw09viOA0Ne9gfZ/trh/o1ysfQfyDH4HsgcVoQBAEBhe3y2tGdL9DEl45zf+1eQS8ZJV947EKYbW9q1rOlVHel012HCZ4x6rdXpdJhIC7pGAAAARBItDPuKpZ7jknpHvhcmEMfbYaLE79M9cyoJwylEEAYAAHBjoPfwAal0otR1NHYtccWl0rymgZfx1hCzQpxaBGEAAIBELCuTqwrgMGE4ngM5+rFC7D36CAMAACSidKK7cXu2OBvvlpVKj89WsKpcLUs/p7Vzp6q8rERGzspvLJ3dPVr93BvJzRmusCIMAAAQTVu91PgtqTe+lV1JTs/imrqBl25LJoykNXOnDllRpvVa4lgRBgAASEQgJAUfPNE5Ih7N66S7T3fCtDTkUI5oK8SlJX4teuo3Q8oqjnR2a9GTv+FgDg+xIgwAABAPN+3WwhlWQyyFXyEu8fs0xl8Utba4nE11cWGzHAAAgFcSDcO+0dI19584zEMnWq4dPNI50DXitg2tMbfn+YuMTh4zSkc+6KbbRAwEYQAAAC/Fe0xzOGFWiSVp+qoX4upFLNFtIhpqhAEAALwUCEm375HmPCIZX2L32LNFun/aiMuLZp0tvy92h4nB6DYRP4IwAABAMgIh6a7DTiD2j43/8+/slO6tGNhQJzmb6lZ/4ZP6yEn+uG51MM5V5EJHaQQAAIDXEq0h9o+Vrl47pIZYct92rbysRFsXXxb/c/McpREAAADpMq/Jqf+NV/dRqWG+9M+nj1ghHtx2razEP6J0osTv06JZZyc58cLCijAAAECqtNVLzyx0Am4iImymk8J3m4i1US6Rz+QDukYAAABkSlu99LNbpJ6uxD5fOkmauXREyUQ8IvUsLoROE5RGAAAAZEogJP3T286RyyaB+NWx3ymZGLapLh6rn3tjRI1xoXeaGJXpCQAAABSMmjrnlyRtrHWOYI5H52EnEDfMd15HKZ0YLlJHieHXnZXjNnV290qSioz0lWlnaGWwMr655gBWhAEAADKhps5puVacQMu1fnu2SMtKXa0Sn15WEvN6Y0u7aje0DoRgSeq10hPb9mlJ447E55mlCMIAAACZEghJ/3jQCcRFxYnfp2G+s8IcxaJZZ6vEP/Tgj+GdJlY/94Z6h3+wzxPb9mn6qhfU2NKe+DyzDJvlAAAAssXGWumVxyQbvV+wK2HKJmJ1jahY/KzcJsOyEr+WzT4vJzba0TUCAAAgl7TVS7+43akLTobxSRd+7URtchTTV72g9jhOpysy0qlj/Oro7M7qdmx0jQAAAMglgZB0+x6nbKJkXOL3sT3Oprxlpa7KJ+IJh71WOtLZLSup/Uin7mjYkVOlEwRhAACAbDY4ECereV3UMBysKlfd3Kkq8ScWEXOtHRulEQAAALnk/mnSOzu9u1/JOOnKe8Me1hHuEI5YjKQ9q67ybn4eiFQaQR9hAACAXLJgu/O7VzXEnYelxm85/zwsDPfX+y5relVHOrtd3S5Sm7ZsxIowAABALmurlzavcE6f89KwrhONLe1a/syrevcDJxCf5C9Sd49Vd++JLJmtRzbTNQIAACDfedl+rV+UrhOx2rFlC4IwAABAIUnkCGc34mjHli0IwgAAAIWqrV762S1ST5e39y2dJM1cGnajXTahjzAAAEChCoSkax5Irh9xOB37pYabnR7Fa853AncOYUUYAACgULXVS8/cKnW7P03OlSxbKWZFGAAAAEMFQtLV/t/JDwAABsFJREFU9znB1Usd+6WG+c5K8T+fnrUrxfQRBgAAKGSB0ImV21S0Yus6KjV+88SzsggrwgAAAHAEQtJtv5WWdThHOpdOkmScThHJ6O1xAnaWYUUYAAAAIw1eKZaS71HcccCTaXmJIAwAAIDYaupG9g7eWCs1PyrJRfOF0okpmVYyKI0AAABAYmrqpDkPD9psZ8KPK/I5XSSyDCvCAAAASFy4EorBq8TFY6WatVm3UU4iCAMAAMBL4UooshSlEQAAAChIBGEAAAAUJIIwAAAAChJBGAAAAAWJIAwAAICCRBAGAABAQSIIAwAAoCARhAEAAFCQCMIAAAAoSARhAAAAFCSCMAAAAAoSQRgAAAAFiSAMAACAgkQQBgAAQEEiCAMAAKAgEYQBAABQkAjCAAAAKEgEYQAAABQkY63NzIONeVvSHzPycG+Nl/ROpieRR/g+vcX36S2+T2/xfXqH79JbfJ/eyobv80xr7YThFzMWhPOFMabZWlud6XnkC75Pb/F9eovv01t8n97hu/QW36e3svn7pDQCAAAABYkgDAAAgIJEEE7ew5meQJ7h+/QW36e3+D69xffpHb5Lb/F9eitrv09qhAEAAFCQWBEGAABAQSIIx8EYM8kY85/GmNeNMa8aY/6+7/o4Y8wmY8yuvt8/kum55gJjzBhjzMvGmN/0fZ/L+65XGGO2932fG4wxxZmea64wxviMMS3GmI19r/kuE2SM2WuM2WGMaTXGNPdd47/1BBljyowxTxljdvb9DL2Y7zMxxpiz+/5c9v/6szFmId9n4owxt/X9PfRbY8xP+v5+4udnAowxf9/3Pb5qjFnYdy1r/2wShONzXNK3rbWfkHSRpFuMMedKWixps7V2iqTNfa8R2zFJl1lrPylpqqQrjDEXSbpX0pq+7/NdSTdlcI655u8lvT7oNd9lcv7GWjt1UNsf/ltP3Pcl/dJae46kT8r5c8r3mQBr7Rt9fy6nSrpQ0geSnhbfZ0KMMeWSbpVUba09X5JP0pfEz8+4GWPOlzRf0qfl/HdeY4yZoiz+s0kQjoO19k1r7X/1/fN7cn6Ql0u6RtLjfcMelxTMzAxzi3W83/fS3/fLSrpM0lN91/k+XTLGTJR0laQf97024rv0Gv+tJ8AYc6qkv5a0TpKstV3W2iPi+/TCTEm7rbV/FN9nMkZJKjHGjJJ0kqQ3xc/PRHxC0jZr7QfW2uOStki6Vln8Z5MgnCBjzGRJVZK2S/oLa+2bkhOWJZ2WuZnllr7/V36rpEPS/23vfkKsrOIwjn8fMiHHQBwUDJWajbQJm4VIxiAUgiEGYqgUSCCuRSSwpeBOwl2bpJUaUxq5CqU/4MrFKJE4i+gPzjT4B0SFFiL5tDhHRkKYue+I9768z2fzvu9538Xhxznn/u49v3svF4Dfgbt1AgFMU95sxNyOA58Aj+r1MInlQhg4L2lC0v7alrnezAhwG/iylu58IWmIxPNZ2A2crueJZwO2/waOAdcpCfA9YIKsn01cBcYkDUtaArwHrGGAx2YS4QYkLQXOAAds3+93f9rM9r91e281ZSvl9ac99nx71T6StgG3bE882fyURxPL+dtkexTYSimDGut3h1psETAKfG77TeAfBmhrtK1qzep24Ot+96XNar3q+8BrwCvAEGXe/1/WzznYnqSUlFwAvgd+oZSVDqwkwj2S9CIlCT5p+2xtvilpVb2/ivLpZvSgbpP+TKm9Xla3p6AkyDP96leLbAK2S/oL+IqypXecxLIx2zP1eItSf7mBzPWmpoFp25fq9TeUxDjxXJitwGXbN+t14tnMu8Cftm/bfgicBd4i62cjtk/YHrU9BtwBfmOAx2YS4R7UmssTwKTtz564dQ7YW8/3At897761kaQVkpbV85coi9Ek8BOwsz6WeM6D7cO2V9t+lbJV+qPtD0ksG5E0JOnlx+fAFsqWX+Z6A7ZvAFOS1tWmd4BrJJ4LtYfZsghIPJu6DmyUtKS+zj8en1k/G5C0sh7XAjsoY3Rgx2b+UKMHkt4GLgK/MluH+SmlTngcWEuZUB/YvtOXTraIpDcoRfMvUN6Ujds+ImmE8qnmcuAK8JHtB/3rabtI2gwcsr0tsWymxu3berkIOGX7qKRhMtcbkbSe8kXOxcAfwMfUeU/i2bNafzkFjNi+V9syPhtS+fnOXZRt/CvAPkpNcNbPHkm6SPmOykPgoO0fBnlsJhGOiIiIiE5KaUREREREdFIS4YiIiIjopCTCEREREdFJSYQjIiIiopOSCEdEREREJyURjoiIiIhOSiIcEREREZ2URDgiIiIiOuk/90LSYOnjsQAAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X_smokers = [ [x.age] for x in smokers ]\n",
"Y_smokers = [ label(x) for x in smokers ]\n",
"smokers_model_logit = LogisticRegression(penalty='l2',solver='newton-cg')\n",
"smokers_model_logit.fit(X_smokers, Y_smokers)\n",
"smokers_P = [p[1] for p in smokers_model_logit.predict_proba(X_smokers)]\n",
"\n",
"X_non_smokers = [ [x.age] for x in non_smokers ]\n",
"Y_non_smokers = [ label(x) for x in non_smokers]\n",
"non_smokers_model_logit = LogisticRegression(penalty='l2',solver='newton-cg')\n",
"non_smokers_model_logit.fit(X_non_smokers, Y_non_smokers)\n",
"non_smokers_P = [p[1] for p in non_smokers_model_logit.predict_proba(X_non_smokers)]\n",
"\n",
"plt.figure(figsize=(12,8))\n",
"plt.scatter(list(map(age, smokers)), smokers_P)\n",
"plt.scatter(list(map(age, non_smokers)), non_smokers_P)\n",
"plt.legend([\"Fumeur\", \"Non Fumeur\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On voit sur les courbes ci dessus que le groupe non fumeur à une probabilité plus élevée jeune alors que le groupe fumeur à une probabilié plus élevée en fin de vie.\n",
"Je ne suis pas arrivé à calculer l'erreur standard de la regression, mais on voit clairement que le faible nombre de non fumeur au dela de 65 ans à un impact sur les résultats.\n",
"Pour palier à se problème, j'effectue une regression, non seuleument sur l'âge mais j'introduis également le status de fumeur dans les coordonnées."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"global_model_logit = LogisticRegression(penalty='l2',solver='newton-cg')\n",
"X = [ features(x) for x in df ]\n",
"Y = [ label(x) for x in df ]\n",
"\n",
"global_model_logit.fit(X, Y)\n",
"\n",
"P_smokers = [ p[1] for p in global_model_logit.predict_proba([ features(x) for x in smokers ]) ]\n",
"P_non_smokers = [ p[1] for p in global_model_logit.predict_proba([ features(x) for x in non_smokers ]) ]\n",
"plt.figure(figsize=(12,8))\n",
"plt.scatter(list(map(age, smokers)), P_smokers, c=\"#0078ba\")\n",
"plt.scatter(list(map(age, non_smokers)), P_non_smokers, c=\"#ff7f0e\")\n",
"plt.legend([\"Fumeur\", \"Non Fumeur\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le graphique ci-dessus représente la regression en tenant compte de l'âge de la personne et de son status de fumeur. On voit ici que le fait de fumer à un impact notable sur la santé, la courbe de survie étant en dessous de celle des non fumeurs."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
......@@ -16,10 +653,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
"nbformat_minor": 4
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment