{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How Close is the 2020 U.S. Presidential Election Race?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see the latest poll updates and understand polling averages, but 2016 jaded many of us in terms of trusting poll numbers. We can use weighted poll averages based upon the quality of the poll conducted and monte carlo simulations to provide candidate probabilities for each state." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![election](https://raw.githubusercontent.com/ahoaglandnu/election2020/master/graphics/election2020.png)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np, pandas as pd, plotly.graph_objects as go\n", "import random\n", "import datetime\n", "from collections import Counter\n", "import warnings \n", "import matplotlib.pyplot as plt\n", "random.seed(2020)\n", "warnings.filterwarnings('ignore')\n", "plt.style.use('ggplot')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Polls Only Probabilities\n", "\n", "If we look at all the states where a candidate has at least a 50% probability without any undecided voters, we get our first benchmark for the state of the race." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Biden electoral college votes with at least a 50% probability: 262\n", "\n", "Trump electoral college votes with at least a 50% probability: 111\n" ] } ], "source": [ "df = pd.read_csv('https://raw.githubusercontent.com/ahoaglandnu/election2020/master/results/results_20200811.csv')\n", "print('Biden electoral college votes with at least a 50% probability:', np.sum(df['ec'][df['Biden_probability'] >= .5]))\n", "print()\n", "print('Trump electoral college votes with at least a 50% probability:', np.sum(df['ec'][df['Trump_probability'] >= .5]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may have noticed that the total does not add up to 538, the total votes in the Electoral College. That is because we are only looking at states where one candidate has at least a 50% majority." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### But we have to consider what happened in 2016\n", "\n", "Undecided voters swayed election results in states where one candidate did not have a 50% or higher majority. When we add ALL undecided votes to Trump, we get new probabilities for each state. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Biden electoral college votes if ALL undecided voters go for Trump: 258\n", "\n", "Trump electoral college votes if ALL undecided voters go for Trump: 280\n" ] } ], "source": [ "print('Biden electoral college votes if ALL undecided voters go for Trump:',np.sum(df['ec'][df['biden_alt_prob'] >= .5]))\n", "print()\n", "print('Trump electoral college votes if ALL undecided voters go for Trump:',np.sum(df['ec'][df['trump_alt_prob'] >= .5]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Polls and simple corrections to polls give us two different outcomes. This is our first clear indication that the race is far closer and more complex than it may initially appear." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# How the undecided vote can determine the winner" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On election day, the votes for each candidate will add up to 100%. When polls do not have a candidate with a majority of the votes, then the candidate \"winning\" the race is not necessarily in the lead.\n", "\n", "We can illustrate this scenario by examining a simple pie chart." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sizes = [45, 45, 10]\n", "explode = (0, 0, 0.3) \n", "fig1, ax1 = plt.subplots()\n", "ax1.pie(sizes, explode=explode, autopct='%1.1f%%',\n", " shadow=True, startangle=90)\n", "ax1.axis('equal') \n", "plt.title(\"Candidates tied with 10% unaccounted for in polls\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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RUpKitFy33//veF99vb2xrJly4x+sxqSnp6OadOmwdnZGVZWVggMDMTnn3/e8BOpHvn5+SQWi+mDDz6o9fGIiAgCQHv37iUiovfff58UCgWNHz+eLl26RFevXqU+ffrQyJEjDc+JiYkha2trWr58OcXGxtL169fpqaeeoi5dulBFRUWdWebMmUMuLi60efNmSkxMpMjISPrPf/5jeHzVqlV05MgRSk5OpnPnztGQIUOMtnvixAkCQGFhYXTgwAFKSEig2bNnk1KppIKCAiIiKi8vJ09PT5owYQJdvXqVzp07R/379ycrKyujfeDn52d0e/LkyRQUFETHjh2j6OhomjVrFtna2tLDDz9sWGb37t20c+dOio+Pp+joaJo/fz45ODhQbm4uERFlZ2eTRCKhVatWUWZmJmVmZrZof4WHh9P7779vdHv+/PmG2++//z75+vrS7t27KTk5mfbt20c+Pj60bNkywzIbNmyg3377jRITE+nKlSs0adIkCg4OpsrKyhbtLz8/P7K3t6dPPvmEEhISaMeOHSSRSGjDhg2GZV5//XVydXWlvXv3UlxcHC1ZsoTs7OwoKCjI6DWEh4fXuQ/0ej2NGjWKwsPD6fTp05SUlERff/01WVpa0tGjR4mI6KuvviKlUmm0L6OioggAxcTEEBHRxo0byd7enjZv3kxJSUl06tQp6tWrFz333HNG+1epVNIbb7xBsbGxdODAAVIqlbR8+fI689X1nm/cuJFEIhGNGDGCIiIiKDY2lh555BEKDAwkjUZDRESZmZlka2tLzz77LF2/fp1Onz5NvXr1ouHDhxvtn/v3FxHR6dOnCQClpKQQEdGlS5dIJBLRu+++S3FxcbRnzx4KCgoiAHT69Gkiatx3pyFz5841+j5UW758OQUEBNS439vb2/CZeeedd2jatGmkVqtp165d5O3tTXq9ng4fPkzdu3cnlUrVqAx6vZ4GDhxIvXv3ptOnT9P169fpmWeeIXt7e8rJySGtVkuZmZnk7e1NixcvpszMTCopKal1XYMHD6aXX37Z6L7XXnuNBg4c2Oht7d27lwDQxYsXKTMzk/Ly8oio4c+bVqslBwcHevPNNykhIYESEhJo9+7dFBERUedrv379Oq1Zs4auXbtGiYmJ9OWXX5JEIqHjx48blgkPDycbGxt65ZVXKCYmhq5fv0737t0jNzc3+stf/kLXr1+nuLg4WrhwITk6OlJ2dnad23uwvSEi+uCDD8jPz89we+7cuWRnZ0czZsygGzdu0NmzZ8nX15fmzJnTpNzLly8na2trWr16NcXHx9Ply5eN2pv6fjsaep+I/vz8p6WlGb0eiURCGzduJCKilJQUAkABAQH0448/0q1bt2jx4sUkkUgoISGBiFrWxv/yyy8kkUho5cqVFB8fT+vXrydXV9dac1UrLCykVatWkUQiMdremjVrSC6X09dff00JCQm0bt06kslktH79esNz/fz8yNbWlt5//32Kj483tIUPenDfNLetqK4dhg0bRhcvXqSLFy/SwIEDKSwsjPR6PRER/f777yQWi+njjz+m+Ph42rFjB9nb2xv9Zj3YzjzYBk6aNIkefvhh+uOPPyglJYWOHz9O27ZtqzNXtXoLpQsXLhAA2r17d62P5+XlEQD67LPPDKEkEonRF2j79u0kEokMb/jcuXNp+vTpRutRqVRkZWVFe/bsqXU7t27dIgC0a9euBl9QtStXrhAASk9PJ6I/38Cff/7ZsExmZiYBoIMHDxIR0bfffkvW1taUn59vWObGjRsEoM4f/upshw8fNjxeWVlJnp6etf4wVNPpdGRvb09bt2413Hf/F69ac/ZXbe5vuMrKysjKyooOHDhgtMz3339PSqWyznVUv99nzpwhoubtr+rbkyZNMlr3+PHjacaMGUREVFpaSlKp1OiLS0Q0aNCgGj/89Tlx4gTJZDIqLCw0un/evHn05JNPEhFRQUEByeVy2rFjh+Hx119/nfr372+Ud926dUbrOHXqFAEwvPbw8HDq1auX0TKvvPIKDR48uN6Mtb3nGzduJAB0+fJlw32RkZEEgOLi4oiIaNmyZeTl5WUoWomIrl69SgDo1KlTRNS4QmnmzJlGxRUR0bp162otlOr77jSkrkLppZdeoiFDhtS4v3///rRgwQIiIiouLqbZs2eTr68vDR48mM6fP08lJSUUGBhIkZGR9N1331FoaCiFhYXRb7/9VmeGo0ePGhXARFXfJXd3d/rnP/9puO/Bz2tt1q1bR/b29oYiTa1Wk7OzM61Zs6bR23rwvbh/+/V93vLz8wkAnThxot6MDXniiSfoxRdfNNwODw+nLl26kE6nM9z3/vvv06BBg4yep9frKTAwkP7f//t/da67sYWSs7OzUaH7ySefkLu7e6Nz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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sizes = [42, 48, 10]\n", "explode = (0, 0, 0.3) \n", "fig1, ax1 = plt.subplots()\n", "ax1.pie(sizes, explode=explode, autopct='%1.1f%%',\n", " shadow=True, startangle=90)\n", "ax1.axis('equal') \n", "plt.title(\"One candidate 'leading' even though 10% of votes are unaccounted for in polls\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD4CAYAAABPLjVeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3hUZfo38O+ZmUzLpCeTDiQkoQQIIEWlg4iAuiKuYAWFBV1X3cV1Vfy9dtfdFVdR3HXBXRRx7Qg2VJSOSkkIJYGQXkjvZfqc+/0jMGskhLSZM+X+XFcumHbmPjNnvnPmOc/zHIGICIwxxlxCJnUBjDHmSzh0GWPMhTh0GWPMhTh0GWPMhTh0GWPMhTh0GWPMhTw2dJcuXYqrrrrK6c9TVFQEQRCwf/9+pz9XZ9566y0oFApJnttV3GUdu7tNCYKAzZs39/vz//J12L17NwRBQFlZWb8/F5OOW4bu0qVLIQjCBX86nc6pz5uUlISnnnqqw3Xx8fGoqKjAxIkTnfrc7H82b94MQRBc/rxr167FRx995Li8fPlyTJ8+3eV1uJpUr7czeMK6SL97cRFTpkzBhx9+2OE6mcz13xFyuRxRUVEuf16pWa1WKBQKt9+A+1NQUJDUJTAf4JZ7ugCgVCoRFRXV4U+v13f5mPfffx+jR4+GWq3GoEGDsGrVKrS1tXW4z+uvv47hw4dDpVJBr9fjpptuAgBMnz4d+fn5ePrppx171kVFRZ02L+Tk5GD+/PnQ6XTQ6XS47rrrkJeX57j9/M/EAwcOYOzYsdBqtRg/fjzS09O7rJ+I8P/+3/+DXq+HTqfD4sWL0dDQ0OE+hYWFuPHGGxETEwOtVouRI0finXfecdy+ceNGBAcHw2AwdHjc008/jYSEBFxsAOL5n9avvfYaBg0aBJVKhba2NlRVVWHp0qWIiIhAQEAAJk2ahL179zoeZ7VasWrVKsTFxUGlUiE6OhqLFy++YLk/19XeyO7du3HHHXcAgON9WLp0KQBg//79mDRpEgICAhAQEIC0tDR88803nS7HYDBApVLhu+++c1w3bdo0qFQqx2tjMpmgVqvx1VdfXVDrU089hX//+9/Ys2ePo4633nrLsazm5mbccccdCAgIQHx8PP72t791Wsd5RITf/OY3GDx4MDQaDRITE7F69WqYzeYuH9eVHTt2QC6Xo7S0tMP1H3zwAdRqNRobGwF0vb129XoDwGuvvYahQ4dCrVYjOTkZzz//PGw2m+P2bdu2YcyYMdBqtQgODsaECRNw9OjRLuv+4IMPcNlll0GtViMsLAxz5851bOc7duzA9OnTERoaiqCgIEybNg2HDh3q8Pg333wTw4YNczx+6tSpKCsru+S6uA1yQ0uWLKFZs2b16D4bN26k4OBg2rRpE+Xn59OePXto5MiRdPvttzvu88QTT5C/vz+99tprlJOTQ+np6fTss88SEVFdXR0NGjSIHnroIaqoqKCKigqy2WxUWFhIAGjfvn1ERGQwGGjAgAE0c+ZMOnLkCB05coSmT59OgwcPJrPZ7KhFEASaMmUK7d27l06dOkWzZ8+mxMREslqtF12nV155hbRaLb311luUk5NDf/3rXykoKIjkcrnjPsePH6d169bRsWPHKC8vj1599VWSy+W0c+dOR33BwcH01ltvOR5jt9tp4MCB9Nxzz3X5egYEBNANN9xAR48epePHj1NzczMNGzaMbrzxRjp8+DDl5ubSc889R0qlkrKzs4mI6KWXXqLY2FjatWsXFRcX06FDh+jll1/u8r1855136Oeb3saNGx3raDabad26dQTA8T40NjaSzWajkJAQ+sMf/kBnzpyhM2fO0JYtW2jv3r0XXacpU6bQo48+6nhdlEolhYeH09dff01ERN999x0pFApqbm6+oNaWlha69dZb6YorrnDUYTAYiIgIAOn1elq/fj3l5eXR2rVrCYDjPeiM3W6nxx9/nH766ScqLCykbdu2UVRUFD3xxBOdvg5ERLt27SIAVFpaetFlxsbG0p///OcO18+fP59uvvlmx3p3tb1e7PUmInryySdpwIABtGXLFiooKKAvv/yS4uPj6f/+7/+IiKiiooL8/Pzor3/9KxUUFFB2dja9++67dPz48Yu+Dv/5z39IoVDQM888Q1lZWXTs2DF65ZVXqKamhoiItmzZQh9++CHl5OTQyZMnadmyZRQSEkK1tbVERHTkyBGSy+X09ttvU1FRER0/fpw2bNhApaWlXa6LO3Hb0JXL5eTv79/h79prr+1wn59/mAcOHEj//Oc/Oyxnz549BIDq6+uptbWV1Go1vfjiixd93sGDB9OTTz7Z4bpfhu6bb75JGo3GsZEQEVVWVpJaraa3336biNo/PAAoPT3dcZ8ff/yRANDp06cv+vyxsbG0evXqDtctXLiwwwexM9dffz0tX77ccfn++++nSZMmOS5//fXXpFAoqLy8/KLLWLJkCQUFBVFLS4vjuo0bN1JsbOwFXxQzZsygBx98kIiIHnjgAZoxYwaJonjR5fYkdDu7nYiovr6eANCuXbsuug6/9OSTT9L48eOJiOjbb7+lxMREuvfee+nhhx8mIqLVq1fTFVdccdFaly1bRtOmTbtguQDo/vvv73DdkCFDHAHfXX//+98pKSnJcbmnoUtE9Mgjj9CwYcMcl6uqqkihUNAXX3xBRN3bXjt7vdva2kij0dD27ds7XP/2229TUFAQERFlZGQQACosLOz2OsfHx9N9993X7fvb7XYKDg6mzZs3E1F7KAcGBlJTU1On9+9sXdyN2zYvTJw4EZmZmR3+/vWvf3V635qaGhQXF2PVqlWOn1A6nQ5z584FAOTl5SErKwsmkwlXX311n+rKysrC8OHDER4e7rguMjISQ4YMQVZWluM6QRCQlpbmuBwbGwsAqKqq6nS5zc3NOHv2LK688soO10+ePLnDZYPBgEcffRSpqakIDQ2FTqfDV199heLiYsd9Vq5ciQMHDiA7OxsAsGHDBsyfPx/R0dFdrtuwYcM6HKw8fPgwKisrERwc3OF13bdvH3JzcwEAd911F06cOIGkpCTcc889+OSTT2CxWLp8nt4ICQnB8uXLMWfOHMydOxd/+ctfkJOT0+VjZs6ciYyMDDQ1NWHnzp2YNWsWZsyYgZ07dwIAdu7ciZkzZ/aqntGjR3e4HBsbe9H39rwNGzZg4sSJiIyMhE6nw2OPPdbhfeuNJUuW4NSpUzh8+DAA4L333kNYWBjmzJkDoPvb6y9lZWXBaDRi4cKFHd77lStXoqmpCTU1NRg1ahTmzJmDESNGYMGCBVi7du0FTR0/V11djdLS0i4/g4WFhbjjjjuQlJSEwMBABAYGoqmpyfE6zZ49G4mJiUhISMDixYuxfv161NbW9ug1k5rbhq5Go0FSUlKHv5iYmE7vK4oigPajzz8P6WPHjiE3NxcjR4503Lc/Dgx1tgwi6nC9TCaDXC6/4DHna+3s8d2p7+GHH8bmzZvxxBNPYNeuXcjMzMS8efM6BF1qaiomT56MN998E9XV1fjss8+wYsWKS66Xv79/h8uiKGLYsGEXfPmdOnUKGzZsANAePoWFhVizZg2USiUefPBBjB49Gs3NzY7XgX7Rjmy1Wi9ZS2c2bNiA9PR0zJ49G3v27MGIESMu+kUMAJdffjlUKhV2797tCNgZM2YgMzMTJSUlOHLkSK9DV6lUdrgsCMJF31sA+Oijj3Dfffdh0aJF+Oqrr3D06FE88cQTvX4tzhs2bBjGjRuHTZs2AQA2bdqEW2+9tUPXs+5sr790fl0++uijDu/9iRMnkJubi9DQUMjlcmzfvh07d+7E+PHj8cknnyAlJQVffPFFlzV39bzXXnstSkpK8Prrr+Onn35CZmYm9Hq9Y/vW6XQ4cuQIPv30U6SkpOCNN95AUlLSJY+XuBO3Dd2eiIyMRHx8PHJyci4I6qSkJKjVagwfPhxqtfqiB16A9g+S3W7v8rlSU1ORlZXV4du1qqoKZ86cQWpqaq/XISgoCLGxsThw4ECH6395ee/evbjtttuwaNEipKWlITExEWfOnLlgeStXrsSmTZuwfv16REVF4ZprrulxTePGjUNBQQECAwO7/ALU6XRYsGABXn31VRw5cgSnTp3Cnj17AAB6vR7l5eUdlpuRkdHl854PtM7eixEjRmDVqlXYvn07li1bhvXr13e5nEmTJuHTTz9FRkYGZs6cifDwcKSmpuKZZ56BXC6/4JfFLx9/qe2hu/bu3YsxY8Zg1apVuOyyy5CcnIyioqJ+Wfadd96J999/H8eOHUNGRgaWLFniuK0722tnr3dqairUajUKCgo6/Uyd36EQBAETJkzA6tWrsXfvXkybNg0bN27stE69Xo+4uLiLfgbr6uqQnZ2NRx99FHPmzHF8ZqurqzvcTy6XY+rUqXjmmWeQnp6O6Oho/Pe//73ourgbtw1di8WCysrKC/5+udd03vPPP49XX30Vzz33HE6ePImcnBxs3boVK1euBNAeDA899BCeeuopvP766zhz5gyOHTuGF154wbGMhIQEHDhwACUlJaitre10z+XWW29FREQEFi1ahIyMDKSnp2Px4sWIjY3FokWL+rTODz30ENauXYt33nkHubm5eOmllzocfQeAIUOGYNu2bTh06BCys7OxYsWKC0INgKNXxrPPPotly5b1qrvdbbfdhoSEBMyfPx/ffvstioqKcPDgQbzwwgvYunUrAODFF1/Eu+++i6ysLBQWFuI///kP5HI5UlJSAABXXXUVTp8+jXXr1iE/Px8bNmy4oCvgLyUkJAAAPvvsM9TU1KC1tRV5eXl45JFHsH//fhQXF+PHH3/Evn37MHz48C6XNXPmTLz77rsYOnSoo/fLzJkz8fbbb+PKK6+EWq3uso7Tp087QqsvPQ2GDBmCEydOYNu2bcjPz8fatWuxZcuWXi/v52655RY0NTVh6dKlGDVqVIdmre5sr5293jqdDqtXr8bq1auxbt065OTkICsrC++//z4eeeQRAMAPP/yAZ599FgcPHkRJSQm+//57HD9+vMv35Mknn8S//vUvPPvsszh16hSysrKwbt061NbWIiQkBBEREdiwYQPOnDmDH3/8Ebfccgs0Go3j8du2bcPLL7+M9PR0lJSUYOvWrSgtLXU8Z2fr4nYkbVG+iCVLlhCATv/OHxDo7ADNp59+SpdffjlpNBoKCAigtLQ0evrppx23i6JIr7zyCqWkpJCfnx/p9Xq66aabHLcfPnyYxo4dS2q12nGA4JcH0oiITp8+TXPnznUc4Js/fz7l5uY6bv/lAREiotLS0kseCLLb7fTYY49RWFgYabVaWrhwIf3973/vsKySkhK6+uqrSavVOo5+33333Z0e8Pn9739PMpmsywMx512sx0htbS3dc889FBMTQ35+fhQTE0M33HADZWRkEBHRG2+8QWPHjqWAgADy9/encePG0datWzss47nnnqOYmBjy9/enxYsXO44wd/V6Pfjgg6TX60kQBFqyZAmVl5fTggULKDY2lpRKJUVHR9Py5csveXT60KFDBIAeeOABx3WfffYZAXD0XLnYa1BXV0dz586lwMBAAkAbN24kovYDae+8806Hx86aNYuWLFly0TosFgutWLGCQkJCKCAggG655RZ67bXXunwdunMg7bwbbriBANCaNWsuuO1S2yvRha/3eW+++SalpaWRSqWi4OBgmjBhAv3jH/8gIqKTJ0/S3LlzKTIykpRKJQ0YMID++Mc/OnrxXMzmzZtp1KhRpFQqKTQ0lObNm0cNDQ1ERLR7924aNWoUqVQqSklJoY8//rjDAe49e/bQjBkzKDw8nFQqFSUlJdELL7zQ4UDuxdbFXQhEfOYIb3XzzTfDaDTi888/l7oUxtg5bjsijfVeQ0MD9u3bh08//RQ7duyQuhzG2M9w6HqhMWPGoK6uDn/60598Yu4AxjwJNy8wxpgLuW3vBcYY80Ycuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kIcuowx5kI84Q1zC0QEsakB9roa2OtrYK+vbf9/XTXEliaQ1QqIdpDNBtjt2DzxLuRaVFDIBMhlAhQyATqVAmH+SoT5qxDur0SYTokwfyXC/VXQqXhTZ+6Bt0TmUvbmRljOZMOSmw1rYS7sddXt4dpQB9i6f76w3ORbcKTe0O37q/1kCNMqER2kRkpEAIZE6jAkMgCDQv0hl/X9vHmMdReHLnMa0dAKS+5pWPKyHUFrr7rw1EK9UVFVA/iFdfv+JquIs00mnG0y4UhJo+N6lUKGpAgdhuoDkBKpwxB9AJIjdFAquOWNOQeHLus3oskEU8aPMB3aC/OpE7CdLQacNHOo0ItzvnXGbBORVdGMrIpmx3UqhQyXxYdgUmIYJg8OQ0yQposlMNYzPJ8u6xN7cyNMB/fB+NNumI7+BOrDyRt74oEpj6FMHuKS50oI828P4MQwpMUFQdFPgc98E+/psh6zVVfC+NNuGH/YBXNWJiC67+mu+0NhXRsK69qw+XAJdCoFLh8UiunJ4ZiRrOdmCNZjHLqsW8SWZrR9/wXadn4Fa/5pqcuRTKvZhu9yqvFdTjWCNLmYNzwKC9JikBDmL3VpzENw8wLrkvlMFtq++hhte74FLK5pOugOVzYvdMfo2CAsSIvBrCF6qBRyqcthboxDl12A7DYY9n2Hlk/fhTXvlNTldMrdQve8QLUCc8/t/Q4O10ldDnNDHLrMQTS0ovXrrWjZ+l+IddVSl9Mldw3dn5ucGIaVkxMxNDJA6lKYG+E2XQbR0IaWTzahedt7gLH7Aw5Y1/YX1GF/QR2mJ0dg5aQEJEXwni/j0PVpZLej9ZutaHj7HxBam6Qux2vtzq3BntwazBqix4pJCXzQzcdx6Poo4+H9qPnnixCqzoIHwTofAfgupxo7z1RjzrBI/ObKBMSHaKUui0mAQ9fHWApzUfOPv0LMzuSwlYBIwPbsKnx7uho3jY7Fb6ckQqvkj6Ev4XfbR9jra1H3n1dh2r0dAh87lZxdJHyQUYbduTV4ZPYQTBkcLnVJzEU4dL0cEaF523tofGsdZFYL7926maoWM1ZtOY6rhujxx1kpCPNXSl0SczIOXS9mq6tB6dOroMg/xbPVu7nvcqpxqLge909Lwq9GRkMQ+OvRW/Fn0UvV7/gMJctugCLfPQc3sAs1m2x4/pvTuOeDoyjuwVzBzLNw6HoZ0dCKgsd/h7ZXnoGf1X2G7bLuyyhtxG1vH8InmWelLoU5AYeuF2nJOIjCpdfBL/MnqUthfWS2ifjLjhw89VU2TFbvnsXN13Cbrhcgmw2lrz4PfP85+DCMd/kyqxJnqlvxtxtGIi6YJ1P3Bryn6+GsjfXIXXkzhO8/554JXiq3phV3bjqMffm1UpfC+gGHrgerOZmJgt8shKayROpSmJO1mG14aMtx/HNfPkTuZ+3ROHQ9VNHXn6Hp8d9Ca2iRuhTmIgTgPz8V48GPj6HR2P0zJzP3wqHrgbL/vQ5Y9xxUNovUpTAJ/FRUj2XvHkF5k1HqUlgvcOh6ECLCsWf+BN2WtyAnUepymIRKGoxY/t905NW0Sl0K6yEOXQ9hM5tw7IElCD24kw+YMQBATasFK9/PwLGyRqlLYT3AoesBDA31yF5xM8IKsqUuhbmZZpMN932UiYNF9VKXwrqJQ9fNNVSU48z9tyOktlzqUpibMttEPPTpcRwoqJO6FNYNHLpurKq4EAV/XI6wBvc+XxmTntkm4uGtx7Enr0bqUtglcOi6qZqyUpQ+/jvoGzlwWfdY7YRHt53kQRRujkPXDdVWVaLw8d8hsqFK6lKYh7GJhNWfn0R2ZbPUpbCL4NB1Mw01NTj9+P2IruUZpljvmKwi/vDJcZxt5H687ohD1420Njch88lVGFhRKHUpzMPVGyz4/SfH0MQj19wOh66bMBuN+OnpR5BUzJOOs/5RVG/Aw1uPw2LjgTTuhEPXDVgtFny35jkk56RLXQrzMkfLmvD09mwQT5LjNjh0JSaKIr7e8E8kZ+yBjD8YzAm+PV2NdXvzpS6DncOhK7Eftn+BuAPbobGYpC6FebFNh0qw7TgPsHEHHLoSKsg6CcvW/yK8iftVMudbs/MMCuvapC7D53HoSqSlsRHHN/4TSeV5UpfCfITJKuL/vsjiA2sS49CVgN1mw443XsPI3KM8YxhzqTPVrdy+KzEOXQns+uRDpBzdAyVPQs4k8H56KX4o5MlxpMKh62JZhw9C9c0nCGrlOVCZNAjA019lo66Nv/SlwKHrQnVVlcj+cDMGVhVLXQrzcfUGK57Zfor770qAQ9dFbFYrtm96CyOKs7gdl7mFHwrr8F56mdRl+BwOXRf58ZvtiC44CV0bz/7E3Mc/9uXzCS5djEPXBRpqalD4wz4MLsuVuhTGOjDbRLyyi7stuhKHrpMREb77+AOMKD0FuWiXuhzGLrArtwaHi/kca67Coetk2YcPQnn6OCLqK6UuhbGLemlnLmwiD5pwBQ5dJzIbjTjy7XYML+XpGpl7y69tw8dHeeJ8V+DQdaLd27ZgcPEpqM18oIK5v/UHCtFo4L67zsah6yTlRYWozjyC+HI+CwTzDC1mG/6xr0DqMrweh64T2O127Pr0E6TUlEAG7nzOPMe2E+U4XdUidRlejUPXCU789CPstVWIqiqRuhTGekQk4I39vLfrTBy6/UwURZz48QBSqov4TBDMIx0oqENeTavUZXgtDt1+ln3kEMSGWkRV8PwKzHNtOsTbr7Nw6PYjURRxbP8+JNeWQk7c55F5rm9PV6OChwc7BYduP8o9dhTWuhrEcI8F5uHsIuHdI6VSl+GVOHT7CREhfc9uJNWV8XBf5hW2nShHo9EqdRleh0O3n+SdPA5TbTViy/nIL/MOJquIjzJ46sf+xqHbD4gI6bt3IrGxEgq7TepyGOs3Hxwtg8nKv9z6E4duPyjOOY3munpEV/IRX+ZdmoxWfJnFkzX1Jw7dfpCxdzciLW3QGrlvI/M+X3Ho9isO3T5qa25CbUU57+Uyr3WivInPLtGPOHT76Oj+vVAJAvQ1fMCBeScC8M2pKqnL8Bocun1ARCjMzkZ0UzV3E2NebXs2h25/4dDtg7L8PBhaWqCv5k7kzLsV1rUhh2cf6xccun1w4scfEKCUI6ShWupSGHO6r7mJoV9w6PaS3WZDVVkp9DVneTYx5hO+PVUFkbf1PuPQ7aXCU9mwmE3Q1/B5pZhvqG41I6O0UeoyPB6Hbi+dSj8ErUqJoKZaqUthzGV259ZIXYLH49DtBZvViuqzZxHcXM9NC8ynHClpkLoEj8eh2wtVpSWwms0IaeRvfeZbCmrb+IzBfcSh2wu5x49BrdUiuIFDl/kWApDO7bp9wqHbC7UV5fAjEQGt/FOL+Z70Ut7u+4JDt4esFgsa62oR1FTL7bnMJ/Gebt9w6PZQRXERbFYLt+cyn1VQ24YGbtftNQ7dHso/cRxqrT+CG7mrGPNdvLfbexy6PVRTUQ4/0Q5dC290zHdx17He49DtAYvZjKb6OgQ110EGbs9lviurolnqEjwWh24PlBcVwm63QWPgM0Qw31ZSb5C6BI/FodsDhdlZUGu00Bp4ijvm2wxWO6pbzFKX4ZE4dHugtakJMpmMz4XGGICi+japS/BIHLo90Nba3o7FzQuMAcXcxNArHLrdREQwNrdAZrdDbeaNjTEO3d5RSF2ApzC2tcJqsSCQrBCkLoYxN8Ch2zscut3UWFcHu2iHxsRNC4wBQEkDh25vcPNCN1WVFMNPqeSDaIydU9lsgtnGZ8HuKQ7dbqqrrICfUskH0Rg7RyTgbKNJ6jI8DoduN7U1t0AQBD6IxtjPNBp54pue4tDtJsO57mJyu03iShhzH01G/jz0FB9I6yaTwQi5Qs6hy/qERDuyX/0tlIFhSL77zzCU56F4yysQrRYIMjkGLHgQugFDOzzG0liNwvf/AmtrAyAIiJg4H5GTFwIAyr5aj6bTh6CNSULC4kcBAHXpO2AzNjvu40xNJqvTn8Pb8J5uNxARbLb2jYtDl/VF1f4t0OgHOC6XfbkeMVfdgdQ/rEfM1UtR9tX6Cx8kkyPu2nsw4o8bMey+daj+YRuMVUWwGVvRWpSF1FVvgkQRhooCiFYzatO/QcQVv3LJ+jQbOXR7ikO3G2xWK85PKia389Fa1juWxho0nT6I8Anz/nelIMBuaj9OYDe1QRkYdsHjlIFh8I9LAQDI1Vpo9ANhaaqFIMhAdhuICKLNDEGuQOXuD6CftAAyuWt+xLaYeSekp7h5oRtsVgvo3Kl5eE+X9Vbp568jbt4K2H92MDb+ut8i99+PovTLfwEkYuh9r3W5DHN9JQzledANGAa5WovgkVOQ/cpKBCaNgVztj7ayHMTMvtPZq+Jg4i5jPcah2w02qw1EIkAEmcgbGeu5xuwfodCFwD8uBc35mY7ra376HPHX3YuQkVNRf2w3ij5agyErXux0GXazEfnvPIX4634LudofABA9fTGipy8GABR9tAaxVy9FzcEv0ZybDk10ImJm3e7U9TJZRacu3xtx80I32CwWiKIIud3OQ4BZr7QWZ6Ex+wccf+FWFLz7HFryM1Hw3p9Rl/4tgkdMAQCEjJqGttLTnT5etNuQ/85TCB0zCyEjp1xwu+FsLgBAFRGHuowdGHz7EzBWFsJUU+a8lQJgsvJOSE/xnm43WK0WEInctMB6LW7ucsTNXQ4AaM7PRNWeD5F4y2qcXHMXWgqOIXDwaLTkHYU6PPaCxxIRij9aA7V+AKKm/rrT5Z/9ZiMGLlwFsttBYvvepyDIIFqdO+etycZ7uj3FodsNFrMZAgTIRNeE7pW7TsBfLoNcECAXBHw5eRi+qGjAy7nlyGs14bMrhyIt2L/Tx75ZWIX3SmshABgaoMGaUYOglsvw59Nl2F3TjOGBGrySlgAA+ORsHRotNixLiHTJevUngbzjdEkDF65C6Wevg0Q7ZAolBi5cBQCwNNWi6OOXkLLsBbQWnURdxg5oohKQ9fIKAEDsNcsQPGwiAKDh5H74xw+FMigcAKAbOBxZf18OTVQitDGDnVq/Qsa//XqKQ1o/cw8AABQnSURBVLcbTG1tkMllLv2gf3D5EIQq//f2DAlQY/3YwXjsZPFFH1NpsmBjUTW+n5oKtVyGezMK8HlFPeZEhiC9oQ3fThmOBzILcbrZiEH+KnxUVod3xie7YnX6XYDd6LFbb+Dg0QgcPBoAEJAwEsMffOOC+yiDwpGy7AXHfcb97fuLLi9kxGSEjJjsuBx/7T39XPHFqRTcQtlTHrrZupbZZIRMJocoSLd3lazTdOt+NiKY7CIUggCjXUSkSgmZAFhFEXT+NpmANwoqcfcgPfw8dE8l1NIMqC78Kc5cS+0nl7oEj8Oh2w2izQYIAkSZa77VBQC3HzoDQMBtA8Jx24CIbj0uSq3EioRIXL7rBNRyGaaGB2JqRCAAYG5UCObuP4VJ4QEIUMhxrMmA3yfHOG8lnCzc1AgESF0FU/Oebo9x6HaDUq0BiSLsfkqXPN8nVwxBlFqJWrMVtx3KRZJOjYmhl06YRqsNO6qbcGD6CAT6KXDv0XxsOVuHG2PDcO/gKNw7OAoA8KfjRXgoOQbvldZib00zhgVq8EBStLNXq19FGmqlLoGB93R7g7+mukGp0UC02yHK5HBFA0OUuj3cw1V+mBMZjMzG7p0AcH9tC+I1SoSp/OAnE3DNubbcnzvZ1N4xP9FfhU/K6vDPsYnIaTGisM2zpuiLbquRugQGQO3HEdJT/Ip1g0qtgSiK7UM2nTy80mCzo/XcKB+DzY59tc0YEtC99txYjRIZjW0w2tvbbw/UNSNJp+5wnzVnyrEqJQZWItjPfYXIABjtntX1J7a5QuoSGACVgvd0e4qbF7rBT+kH4dywCKtCCYUT++vWWGxYkZ4PoP2g2A0xoZgeEYSvKxvwRHYp6i023HUkD8MDtdg8IRmVJgseOVGMt8cnY0ywP+ZFhWDe/mzIBQGpgVrcGh/uWPY3lY1IC9Y69qQvC9Zh9t4sDAvUYnig1mnr5AxhpiYoIMLG+w2S4jbdnhOIvKTDoxM11NTgg3WvQKvTYdyR7xHQ2ih1SQzAXdOeRpPQvV8BzDmemT8cc4dHSV2GR+GvqW5QazUQzvVcsLroYBq7tEC7UeoSfF6wxk/qEjwOh243KNUayDl03U6wjc9XJ7XYYP6l0VMcut0gl8sh92v/RjcreSNzF2HmZqlL8GlyQUBMoPrSd2QdcOh2k5+yfQ/XoOUe+e4iwtQgdQk+TR+ggkLOEdJT/Ip1k0rTvofLoes+eICEtGKDeS+3Nzh0u0kXEAQAaPPn0HUXMa3VUpfg07g9t3c4dLspKDwcdpsNNj8VLH4qqcthAGKby6UuwafFBnHo9gaHbjdFD0qA2dTeRYmbGNxDgNUIJfjMBVKJ4z3dXuHQ7aawyCjHqLQ2Dl23oSPnnhmBXRw3L/QOh2436YKC4Kdqb1bgPV33EWg3XPpOrN/JBGBAiGcNHXcXHLrdJJPJoA1on5vWwAfT3EaIlQdISCExzB86FU/d0hscuj2gCzzXg0EbKHEl7LxQc5PUJfiktNhgqUvwWBy6PRAQHARRFGFWa2HmHgxuQW/kARJSSIsLkroEj8Wh2wNRAwbBbGzvwdAYope4GgbwAAmppMVy6PYWh24PxCQkAudmwqzn0HULMS1VUpfgc/Q6FWK4j26vcej2QEBwMPyD2tuyGjh03UJcczngkpMosfNG8V5un3Do9lBYZCSICGa1FgaNTupyfJ5atEIN553Jg12Imxb6hkO3hxJTR8JsaO8byk0M7kEn8gAJVxodxz0X+oJDt4cGpgwBzk1ozk0M7iGIB0i4TKBageQI/oXXFxy6PaTWahEUGgYAaAyOgHhuaDCTToi1ReoSfMa0pAjIZbzN9wWHbi+ER8dAFEXY/JRoDeCfWlIL5wESLjNrCP+66ysO3V5IHpUG0/l23dBIiathEcZ6qUvwCYFqBSYODJG6DI/HodsLMYMSHKfvqdLHS1wNi26tkboEnzAtKYJPz9MP+BXsBYWfH0IiIgAABv9ANAfwt7+UYlp5gIQrcNNC/+DQ7aXBI0bBbDIBACqiBkpcjW+LbqmEwAMknIqbFvoPh24vDbtsPGTnuo5V6+Nhl/FLKRU/EqGBVeoyvBo3LfQffhV7SalSITJ+AIgINj8lasNipC7JpwWIJqlL8GrctNB/OHT7YPSkKTC1tfdiqIzmJgYpBdl4gISz6HUqTBzETQv9hUO3D2ITB0Mb2H4WifqQSJhUPPOSVEItzVKX4LV+PTYWCm4+6zf8SvaBIAgYlDIUNqsVEARURg6QuiSfFW5ulLoEr6SSC1gwKlbqMrwKh24fjZ4yDTZL+0GcSu7FIBk9D5BwimtHxiBI4yd1GV6FQ7ePAoKDERrVPirNqA3gmcckEt1aLXUJXkcAcMtlPPinv3Ho9oOhY8c5hgUXDxwqcTW+KbalUuoSvM6ViaEYGMqnWe9vHLr9YOiYy6BUqQG0zzzWGBgmcUW+R99WCxlEqcvwKreN42MUzsCh2w8Ufn5IGTMGFnP7ZNrFA4dIXJHvkQHQEg+Q6C9J4f4YPzBU6jK8EoduPxk3baZjhFp9WDRadDzlo6sF8gCJfnP7eN7LdRYO3X6iVKsxeMRIWC0WAEBhwnCJK/I9QbZWqUvwComhGsxNjZK6DK/FoduPJsy6GnTuFO11YdFo4rZdlwq18Bkk+sOqWUMgE/jsEM7CoduPNP7+SB45yrG3W5CQKnFFviXC1CB1CR5vXFwAJg7itlxn4tDtZ5dfPdfx/8aQCO6360J6Q53UJXg0AYSHZ3OzmLNx6PYzlUaDYZeNd/RkyBs8CiL/VHOJ6DYeINEX142IQmK4v9RleD0OXScYN2MW5HIFAKBNF4TS+BSJK/INcTxAotdUMuC+qclSl+ETOHSdQKlSYcyUaTAb27swFQ0cBoOG9yCcLczYCDkPkOiVu64YhFB/pdRl+AQOXSdJmzQZQWGhEEURolyOMyljpS7JJ+jIInUJHidULcPtE3iyJlfh0HUSQRBw1a9vgcXU3rbbEKJHRSRv2M4WKPJk5j1DePb6UVAp5FIX4jM4dJ0oVK9H6vgJ/zuoljQSFj+VxFV5t2Brm9QleJT5Q0IxgYf7uhSHrpNdfvU1UGm0586lpkJe0iipS/JqfAaJ7gtTEh6bx9ujq3HoOplcocCMBQthNhgBAFWRA1AXGilxVd4rgicz7xYBhDU3jeVmBQlw6LpAXOJgDBx67rQ+AM4kj4FVzrPxO0OkkQdIdMfiUXqMiOWTTUqBQ9dFZtywEILQ/nKbNP44NWwcSOKavFFMCw+QuJQ4f+DB2SOkLsNncei6iFKtxqR582E618xQFx7DZ5lwgrjmCqlLcGtyiHh50QTIZTxKUiocui6UkjYGSSNHOnozFA4azu27/SzA2gY/2KUuw239bvJADArTSV2GT+PQdbFpv7oRgaGhsNvtgCAge9gEGNV8Hqr+pCOz1CW4pSuj/XD7FTzUV2ocui4ml8tx3ZK7QSKd60amxMnUK2CX8VHk/hJoN0pdgtuJVlqx5pYrpS6DgUNXEhp/Ha659XbH3AytAcHISRkjcVXeI8TKZ5D4Oa1gxb/unAQ/OX+xuwMOXYnEDErAuBkzYTae678bNRBlMYkSV+UdwsxNUpfgNhSw48VfpSI6hNtx3QWHroTGTJmGuKRkx5km8pLSeNLzfhBh4gESQPsAiD9cEYUJyXFSl8J+hkNXQoIgYPavF0Ot1UEURZBMhhMjrkBjULjUpXm0yLZaqUtwCzclKnHz5JFSl8F+gUNXYgo/P1x/1zLYbTYQEUS5AsdHXommQJ6EpLdiW6ukLkFyk8NtePjGyVKXwTrBoesGAoKDccPylbBZrCAi2BV+OD5yElp0wVKX5pHaB0j47ni/ywIMeGnJVRD4NFFuiUPXTYRFRuH6u5fDajY7upJlpk1Gq3+g1KV5HLXdArWPDpBIUzfh1bvnQCbjj7a74nfGjUTExOLaJct+FrwqZKZNQZs2QOrSPI5ONEldgsuNVTfhtd/Mg1LJkym5Mw5dNxM1YACuue1OWMztPRqsSjUy06bAoOZzrPVEkN23ziBxmaYRa1fMg0bNk+S7Ow5dNxSXOBhzFt0Cs6l9b82i0iBz9FQO3h4I9pkBEoQJ/k1Yu+JaqFUcuJ6AQ9dNDUgZglkLb3YMnjCrtcgYO4N7NXRTuLlR6hJcgHClrgUvL78WKiWfyddTcOi6scThqZi+YCFMRiOICFalCplpU1ETHiN1aW5Pb2yQugSnkkPEjKBmrFl+LbfhehgOXTeXPDINc2+53XFwTZTLcTL1cpTGJkldmluLbKuRugSn0cCCX4U34/m7roOfn0LqclgPceh6gPjkFCxY+dv2PrznpoTMS07D6ZQxELkvZqdiWyqlLsEpwtCGW+PNePiO6zlwPRSHrocI00di0e8ehFqjdczVUBGTiMy0qXxa9060n7bHuwZIDEIdfj8hDCsXXQ+FggPXU3HoehCNvw433fs7RMbFO6aFbAoOx5HLZvLotV/wIxu0sEpdRr+QQUSaUIGnfjUW10y7kkeaeTgOXQ/jp1Ri/p13YcTll8NkaO+LalZrkTFmOkrikr1s365vdKLnn0FCDRtmqCvxl7vnITVlsNTlsH7AoeuBBEHAFVfPxYwbb4LlZwfY8pNG4ejoqXz6n3OCbG1Sl9An0WjCzVEteHrlzQgP5dOlewsOXQ+WPDINC1feB5Va4xhI0RQcgcPjZuNsdILE1Ukv1NoidQm9ooINY1CKFWPC8Lvbb+Q+uF5GICL+RerhRFHET99+jZMHf4JKo3a0+YXWVWJoTjpUFt+bhwAA/j3y1/gybLzUZfRIrNCMNL9a3Dx3BjcneCkOXS9SfbYM3374HkxtbVCeGxKqsFqQnJuJqOpSiatzvc+TZmJj3DVSl9EtatgwjCowLSkMC+fP5iG9XoxD18vYbTbs//IznD56FGqtxrHXG1FdhuS8Yz6113skeiT+POQOqcu4pFihCWl+dVg0dyaGp/B58rwdh66XKi8qxPcffwCL2QQ/Zftek8xuQ3xZHgaU5EBht0lcofNV6PS4b9wfpS7jooIFE5LESkxJicSNc6/ivVsfwaHrxawWC/Z89inyT56AWqt17PX6WcwYWHwKseWFkJEocZXOIwK4efpfILrZ8WJ/wYqhQg0G+Blx47xZGJrEe7e+hEPXB9RUlGPf59tQU362Q/iqja1ILMyCvroM3trd/s5pz6JVcI89SDVsSJHXI0asw5jhQzD/qqncM8EHcej6kOIzOTiw/Uu0NjZArf1fX15dSwMG559AaKP3TRJz35THUSEPkrQGBUSkyBsQY69G6uCBuP7qGQjU8dzIvopD18cQEU5nHMGRXTthMhqgUqsdt4XUV2FA6RmENFR7zZ7v41f8HqdU0kyFqYQdg+TNiLNXITk2EtdfPR368DBJamHug0PXR9ltNmTs3YOTB3+EKNocB9sAQGNoQezZfERVlsDP7tnzF6y57G78EDDUpc8ZLJiRKG9CmK0WMeFhuG72NAyM4zmQWTsOXR9nMZlwcMc3yDt5AlarBWqNxnGbzG5DVFUJYs/mQ9fWLGGVvff2iBuxLfxypz+PDIQ4eSsSZI1Qm5sQHhaC2VOvxPDkRJ6ghnXAocsAADarFafSDyPr8CE01tZCrdV0OI13UGMtYsvzEVFzFjIP2mS2J07DhgHznbZ8jWBDorwZsVQPP7Jh0IBYXDVpIuJiopz2nMyzceiyDogIVWWlSN/1PSqKiyDIhA5ND0qzCfrqUkTUnEVQc53bt/1m6ofhmeF39esytYIV0TIDomVt8Lc2IFCrxYhhyZh2+Xj4azWXXgDzaRy67KKMbW3IPLAXeSeOw9DS0qG7GdAewOG15YioPYvgxlq37PNbownByomP9Xk5gYIFMfI2xMjbEEBGmC0WROkjMGX8WIwYmtThVwFjXeHQZZckiiIKs7OQdfggairKYbNYLghguc2G4MZqhNVXIrSuChqzQcKKO/r19L/A3sMBEjIQQmUmRMsMiJG3QWk3wmq1ITQkCAnxsZg8YSxPt8h6hUOX9YjNakXJmRycyjiM6rPlMBsM7e2/cnmH+2kMLQhsrkdAayN0LY3QtTZJ1hNi6bRn0Cyou7yPTrAgRGZGqMyMEJkZwYIZFrMJBAGR4aFISRyE8WmpCA4KdFHVzFtx6LJes9vtqCotQU5GOqrOlqGprg4ymQClWn3hEXsiaIxt0LU2IqC1EQEtDdC1NkFpdf7ZHR6Y8hjK5O17pQIIGsGGQMHiCNhQmRlKQYTVZoPJZIFK5YcofQRGDE3G6OFDoNV0HdiM9QSHLus3htYW5GedRHlhAZrr69HS2ACr2QxBJoNKo+m065TSbILScu7Panb8389y/v9mKK0m+FktIAiAIIDO//3iMgCIMhksSjWMCiVKrTIoo2JxKHoUWtUB8Bds0Ag2yIT2JpM2owlyuQwBWi1CQ4MRE6nH8ORExETq+Uy7zGk4dJnTiKKI5vp6lBcV4GxBAZrq69DS0ACLyQgCwU+pgsLPzyn9WEVRxN6CKiSljoDJbIHNboNcroBapURocBCiIsIwNCkRA2KjuccBcykOXeZSRITWpiZUl5WisbYWzQ31MBkNsJjMsJiMsJjNsJhMsFksEEmE3W6HcK5jmiATAGr/l4ggCO23EABBkEEml0GpUkOpUUOl1qDcDMQmJSM2So+oiHCEBAXCX9v5HjdjrsKhy9yS1WKByWCA2djeC0KQydpDVmj/VyaTAYIAmUxovyyXQ6XRctct5vY4dBljzIV4t4AxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlyIQ5cxxlzo/wPbwJun4/G8EgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sizes = [51.8, 48.2] \n", "fig1, ax1 = plt.subplots()\n", "ax1.pie(sizes, autopct='%1.1f%%',\n", " shadow=True, startangle=90)\n", "ax1.axis('equal') \n", "plt.title('Election day results with all votes cast')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On election day, the majority of undecided voters in polling voted for one candidate.\n", "\n", "This is the outcome we saw in 2016 in several states that ultimately determined the winner of the election." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Randomly Distribute the Undecided Vote\n", "\n", "The most mathematically unbiased method is to randomly distribute undecided voters to each candidate.\n", "\n", "A random number generator will pick a value between .01 and .99. \n", "\n", "One candidate will receive that percentage of the undecided votes for the state; the other candidate the remaining undecided votes.\n", "\n", "For the polling results, we will use normal distribution to randomly choose the number of votes cast for each candidate using the weighted polling as the average assuming a 3 percent margin of error.\n", "\n", "The undecided votes will then be added to the the polling results and the candidate with the highest number of votes will win that state.\n", "\n", "We will do the above process for each state 20,000 times. The number of times a candidate wins each state divided by the number of simulations (20,000) will be our probability the candidate will win the state." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def moe(x, y, n):\n", " min_x = x - n\n", " max_x = x + n\n", " std_x = (max_x - min_x) / 4\n", " min_y = y - n\n", " max_y = y + n\n", " std_y = (max_y - min_y) / 4\n", " return round(random.gauss(x, std_x),1), round(random.gauss(y, std_y),1)\n", "def distro_sim(x, y, n=3, num_sims=20000):\n", " u = 100 - (x + y)\n", " x_wins = 0\n", " y_wins = 0\n", " for i in range(num_sims):\n", " rand = np.random.uniform(low=0.01,high=.99)\n", " x1 = x + (u * rand)\n", " y1 = y + (u * (1 - rand))\n", " x1, y1 = moe(x1, y1, n)\n", " if x1 > y1:\n", " x_wins += 1\n", " else:\n", " y_wins += 1\n", " return x_wins/num_sims, y_wins/num_sims " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Biden electoral college votes with randomly distributed undecided votes: 352\n", "\n", "Trump electoral college votes with randomly distributed undecided votes: 186\n" ] } ], "source": [ "b = df['Biden_avg'].values\n", "t = df['Trump_avg'].values\n", "rand_prob = []\n", "for x, y in zip(b,t):\n", " rp = distro_sim(x,y)\n", " rand_prob.append(rp)\n", "df['biden_rand_prob'] = [i[0] for i in rand_prob]\n", "df['trump_rand_prob'] = [i[1] for i in rand_prob]\n", "df.loc[(df['cook'] == 'Solid Dem') & (df['Biden_avg'].isnull()),'biden_rand_prob'] = 1.0\n", "df.loc[(df['cook'] == 'Solid Dem') & (df['Biden_avg'].isnull()),'trump_rand_prob'] = 0.0\n", "df.loc[(df['cook'] == 'Solid Rep') & (df['Trump_avg'].isnull()),'biden_rand_prob'] = 0.0\n", "df.loc[(df['cook'] == 'Solid Rep') & (df['Trump_avg'].isnull()),'trump_rand_prob'] = 1.0\n", "print('Biden electoral college votes with randomly distributed undecided votes:', np.sum(df['ec'][df['biden_rand_prob'] >= .5]))\n", "print()\n", "print('Trump electoral college votes with randomly distributed undecided votes:',np.sum(df['ec'][df['trump_rand_prob'] >= .5]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### That looks like a landslide. Is anyone else getting that result?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yes. At the time of creation, [The Economist](https://projects.economist.com/us-2020-forecast/president) had the same forecast \n", "![economist](https://raw.githubusercontent.com/ahoaglandnu/election2020/master/graphics/economist0811.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### \"But we have to consider what happened in 2016\"\n", "\n", "I hear this all the time and I agree. \n", "\n", "Even if forecast models are constructed in a manner that worked for other elections in the past, there is a prevailing sense that the 2016 polling errors can or will occur again in 2020.\n", "\n", "To answer this concern, we will identify the 2020 battleground states and recreate the 2016 polling error." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Battleground States According to the Cook Political Report" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States labeled as **toss up** and **leaning** will be considered battleground states. \n", "\n", "Note the poll-based probabilities below. We see divergences between the probabilities and qualitative assessments." ] }, { "cell_type": "code", "execution_count": 10, "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", "
Statecookbiden_rand_probtrump_rand_probBiden_avgTrump_avg
11iowaLean Rep0.413500.5865044.546.0
27ohioLean Rep0.774950.2250548.444.4
31texasLean Rep0.278900.7211043.747.5
\n", "
" ], "text/plain": [ " State cook biden_rand_prob trump_rand_prob Biden_avg Trump_avg\n", "11 iowa Lean Rep 0.41350 0.58650 44.5 46.0\n", "27 ohio Lean Rep 0.77495 0.22505 48.4 44.4\n", "31 texas Lean Rep 0.27890 0.72110 43.7 47.5" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Lean R', na=False)][['State','cook','biden_rand_prob','trump_rand_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "code", "execution_count": 11, "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", "
Statecookbiden_rand_probtrump_rand_probBiden_avgTrump_avg
16michiganLean Dem0.974650.0253550.440.4
17minnesotaLean Dem0.891550.1084549.343.1
22new hampshireLean Dem0.961300.0387050.342.7
28pennsylvaniaLean Dem0.795200.2048048.544.0
35wisconsinLean Dem0.869900.1301048.842.0
\n", "
" ], "text/plain": [ " State cook biden_rand_prob trump_rand_prob Biden_avg \\\n", "16 michigan Lean Dem 0.97465 0.02535 50.4 \n", "17 minnesota Lean Dem 0.89155 0.10845 49.3 \n", "22 new hampshire Lean Dem 0.96130 0.03870 50.3 \n", "28 pennsylvania Lean Dem 0.79520 0.20480 48.5 \n", "35 wisconsin Lean Dem 0.86990 0.13010 48.8 \n", "\n", " Trump_avg \n", "16 40.4 \n", "17 43.1 \n", "22 42.7 \n", "28 44.0 \n", "35 42.0 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Lean D', na=False)][['State','cook','biden_rand_prob','trump_rand_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "code", "execution_count": 12, "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", "
Statecookbiden_rand_probtrump_rand_probBiden_avgTrump_avg
2arizonaToss Up0.547350.4526546.445.6
8floridaToss Up0.950950.0490550.746.0
9georgiaToss Up0.215550.7844544.648.5
26north carolinaToss Up0.667600.3324047.745.3
\n", "
" ], "text/plain": [ " State cook biden_rand_prob trump_rand_prob Biden_avg \\\n", "2 arizona Toss Up 0.54735 0.45265 46.4 \n", "8 florida Toss Up 0.95095 0.04905 50.7 \n", "9 georgia Toss Up 0.21555 0.78445 44.6 \n", "26 north carolina Toss Up 0.66760 0.33240 47.7 \n", "\n", " Trump_avg \n", "2 45.6 \n", "8 46.0 \n", "9 48.5 \n", "26 45.3 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Toss', na=False)][['State','cook','biden_rand_prob','trump_rand_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Factoring in what we witnessed for the 2016 election\n", "\n", "States that were **Lean Dem** and **Toss Up** in 2016 had undecided voters overwhelming vote for Trump.\n", "\n", "To replicate this, we will use our **all undecided votes for Trump** probabilities for these states **unless** Biden is polling over 50% in a Lean Dem state." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def qual_correction (row):\n", " if row['cook'] == \"Lean Dem\" and row['Biden_avg'] < 50:\n", " return row['trump_alt_prob']\n", " if row['cook'] == \"Lean Rep\" :\n", " return row['trump_alt_prob']\n", " if row['cook'] == 'Toss Up' :\n", " return row['trump_alt_prob']\n", " else:\n", " return row['trump_rand_prob']\n", "def qual_correction_opp (row):\n", " if row['cook'] == \"Lean Dem\" and row['Biden_avg'] < 50:\n", " return row['biden_alt_prob']\n", " if row['cook'] == \"Lean Rep\" :\n", " return row['biden_alt_prob']\n", " if row['cook'] == 'Toss Up' :\n", " return row['biden_alt_prob']\n", " else:\n", " return row['biden_rand_prob']" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "df['biden_qual_prob'] = df['biden_rand_prob']\n", "df['trump_qual_prob'] = df['trump_rand_prob']\n", "df['trump_qual_prob'] = df.apply (lambda row: qual_correction(row), axis=1)\n", "df['biden_qual_prob'] = df.apply (lambda row: qual_correction_opp(row), axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The adjusted poll-based probabilities align with some qualitative assessments while making other states more competitive. " ] }, { "cell_type": "code", "execution_count": 15, "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", "
Statecookbiden_qual_probtrump_qual_probBiden_avgTrump_avg
11iowaLean Rep0.000001.0000044.546.0
27ohioLean Rep0.041850.9581548.444.4
31texasLean Rep0.000001.0000043.747.5
\n", "
" ], "text/plain": [ " State cook biden_qual_prob trump_qual_prob Biden_avg Trump_avg\n", "11 iowa Lean Rep 0.00000 1.00000 44.5 46.0\n", "27 ohio Lean Rep 0.04185 0.95815 48.4 44.4\n", "31 texas Lean Rep 0.00000 1.00000 43.7 47.5" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Lean R', na=False)][['State','cook','biden_qual_prob','trump_qual_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "code", "execution_count": 16, "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", "
Statecookbiden_qual_probtrump_qual_probBiden_avgTrump_avg
16michiganLean Dem0.974650.0253550.440.4
17minnesotaLean Dem0.170850.8291549.343.1
22new hampshireLean Dem0.961300.0387050.342.7
28pennsylvaniaLean Dem0.052400.9476048.544.0
35wisconsinLean Dem0.086050.9139548.842.0
\n", "
" ], "text/plain": [ " State cook biden_qual_prob trump_qual_prob Biden_avg \\\n", "16 michigan Lean Dem 0.97465 0.02535 50.4 \n", "17 minnesota Lean Dem 0.17085 0.82915 49.3 \n", "22 new hampshire Lean Dem 0.96130 0.03870 50.3 \n", "28 pennsylvania Lean Dem 0.05240 0.94760 48.5 \n", "35 wisconsin Lean Dem 0.08605 0.91395 48.8 \n", "\n", " Trump_avg \n", "16 40.4 \n", "17 43.1 \n", "22 42.7 \n", "28 44.0 \n", "35 42.0 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Lean D', na=False)][['State','cook','biden_qual_prob','trump_qual_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "code", "execution_count": 17, "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", "
Statecookbiden_qual_probtrump_qual_probBiden_avgTrump_avg
2arizonaToss Up0.000150.9998546.445.6
8floridaToss Up0.593250.4067550.746.0
9georgiaToss Up0.000001.0000044.648.5
26north carolinaToss Up0.008150.9918547.745.3
\n", "
" ], "text/plain": [ " State cook biden_qual_prob trump_qual_prob Biden_avg \\\n", "2 arizona Toss Up 0.00015 0.99985 46.4 \n", "8 florida Toss Up 0.59325 0.40675 50.7 \n", "9 georgia Toss Up 0.00000 1.00000 44.6 \n", "26 north carolina Toss Up 0.00815 0.99185 47.7 \n", "\n", " Trump_avg \n", "2 45.6 \n", "8 46.0 \n", "9 48.5 \n", "26 45.3 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['cook'].str.startswith('Toss', na=False)][['State','cook','biden_qual_prob','trump_qual_prob','Biden_avg','Trump_avg']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### If all undecided voters go for Trump in battleground states" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "df2 = df[['State','code','ec','cook','Biden_avg','Trump_avg','biden_qual_prob','trump_qual_prob']]\n", "for col in df2.columns:\n", " df2[col] = df2[col].astype(str)\n", "df2['text'] = df2['State'] + '
' + \\\n", "'Electoral College Votes '+ df2['ec'] + '
' + \\\n", "'Cook Political Report: ' + df2['cook'] + '
' + \\\n", "'Biden ' + df2['Biden_avg'] + ' Trump ' + df2['Trump_avg'] + '
'\\\n", "'Biden probability ' + df2['biden_qual_prob'] + '
'\\\n", "'Trump probability ' + df2['trump_qual_prob']" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "autocolorscale": false, "colorbar": { "title": { "text": "Biden Probability" } }, "colorscale": [ [ 0, "rgb(103,0,31)" ], [ 0.1, "rgb(178,24,43)" ], [ 0.2, "rgb(214,96,77)" ], [ 0.3, "rgb(244,165,130)" ], [ 0.4, "rgb(253,219,199)" ], [ 0.5, "rgb(247,247,247)" ], [ 0.6, "rgb(209,229,240)" ], [ 0.7, "rgb(146,197,222)" ], [ 0.8, "rgb(67,147,195)" ], [ 0.9, "rgb(33,102,172)" ], [ 1, "rgb(5,48,97)" ] ], "locationmode": "USA-states", "locations": [ "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "IN", "IA", "KS", "KY", "ME", "MA", "MI", "MN", "MS", "MO", "MT", "NV", "NH", "NJ", "NM", "NY", "NC", "OH", "PA", "SC", "TN", "TX", "UT", "VA", "WA", "WI", "DC", "HI", "ID", "IL", "LA", "MD", "NE", "ND", "OK", "OR", "RI", "SD", "VT", "WV", "WY" ], "marker": { "line": { "color": "white" } }, "text": [ "alabama
Electoral College Votes 9
Cook Political Report: Solid Rep
Biden 38.0 Trump 58.0
Biden probability 0.0
Trump probability 1.0", "alaska
Electoral College Votes 3
Cook Political Report: Likely Rep
Biden 45.0 Trump 48.0
Biden probability 0.28055
Trump probability 0.71945", "arizona
Electoral College Votes 11
Cook Political Report: Toss Up
Biden 46.4 Trump 45.6
Biden probability 0.00015
Trump probability 0.99985", "arkansas
Electoral College Votes 6
Cook Political Report: Solid Rep
Biden 45.0 Trump 47.0
Biden probability 0.3684
Trump probability 0.6316", "california
Electoral College Votes 55
Cook Political Report: Solid Dem
Biden 62.4 Trump 29.6
Biden probability 1.0
Trump probability 0.0", "colorado
Electoral College Votes 9
Cook Political Report: Likely Dem
Biden 55.0 Trump 45.0
Biden probability 1.0
Trump probability 0.0", "connecticut
Electoral College Votes 7
Cook Political Report: Solid Dem
Biden 50.9 Trump 33.9
Biden probability 0.99445
Trump probability 0.00555", "delaware
Electoral College Votes 3
Cook Political Report: Solid Dem
Biden 56.0 Trump 40.0
Biden probability 1.0
Trump probability 0.0", "florida
Electoral College Votes 29
Cook Political Report: Toss Up
Biden 50.7 Trump 46.0
Biden probability 0.59325
Trump probability 0.40675", "georgia
Electoral College Votes 16
Cook Political Report: Toss Up
Biden 44.6 Trump 48.5
Biden probability 0.0
Trump probability 1.0", "indiana
Electoral College Votes 11
Cook Political Report: Solid Rep
Biden 39.0 Trump 52.0
Biden probability 0.0014
Trump probability 0.9986", "iowa
Electoral College Votes 6
Cook Political Report: Lean Rep
Biden 44.5 Trump 46.0
Biden probability 0.0
Trump probability 1.0", "kansas
Electoral College Votes 6
Cook Political Report: Solid Rep
Biden 40.0 Trump 52.0
Biden probability 0.00135
Trump probability 0.99865", "kentucky
Electoral College Votes 8
Cook Political Report: Solid Rep
Biden 39.7 Trump 53.3
Biden probability 0.0001
Trump probability 0.9999", "maine
Electoral College Votes 4
Cook Political Report: Likely Dem
Biden 51.6 Trump 39.2
Biden probability 0.9966
Trump probability 0.0034", "massachusetts
Electoral College Votes 11
Cook Political Report: Solid Dem
Biden 64.0 Trump 32.0
Biden probability 1.0
Trump probability 0.0", "michigan
Electoral College Votes 16
Cook Political Report: Lean Dem
Biden 50.4 Trump 40.4
Biden probability 0.97465
Trump probability 0.02535", "minnesota
Electoral College Votes 10
Cook Political Report: Lean Dem
Biden 49.3 Trump 43.1
Biden probability 0.17085
Trump probability 0.82915", "mississippi
Electoral College Votes 6
Cook Political Report: Solid Rep
Biden 41.0 Trump 56.0
Biden probability 0.0
Trump probability 1.0", "missouri
Electoral College Votes 10
Cook Political Report: Solid Rep
Biden 43.2 Trump 50.2
Biden probability 0.0475
Trump probability 0.9525", "montana
Electoral College Votes 3
Cook Political Report: Likely Rep
Biden 42.0 Trump 52.2
Biden probability 0.0009
Trump probability 0.9991", "nevada
Electoral College Votes 6
Cook Political Report: Likely Dem
Biden 48.0 Trump 43.7
Biden probability 0.7586
Trump probability 0.2414", "new hampshire
Electoral College Votes 4
Cook Political Report: Lean Dem
Biden 50.3 Trump 42.7
Biden probability 0.9613
Trump probability 0.0387", "new jersey
Electoral College Votes 14
Cook Political Report: Solid Dem
Biden 55.0 Trump 34.5
Biden probability 1.0
Trump probability 0.0", "new mexico
Electoral College Votes 5
Cook Political Report: Solid Dem
Biden 53.7 Trump 43.7
Biden probability 1.0
Trump probability 0.0", "new york
Electoral College Votes 29
Cook Political Report: Solid Dem
Biden 55.7 Trump 32.0
Biden probability 1.0
Trump probability 0.0", "north carolina
Electoral College Votes 15
Cook Political Report: Toss Up
Biden 47.7 Trump 45.3
Biden probability 0.00815
Trump probability 0.99185", "ohio
Electoral College Votes 18
Cook Political Report: Lean Rep
Biden 48.4 Trump 44.4
Biden probability 0.04185
Trump probability 0.95815", "pennsylvania
Electoral College Votes 20
Cook Political Report: Lean Dem
Biden 48.5 Trump 44.0
Biden probability 0.0524
Trump probability 0.9476", "south carolina
Electoral College Votes 9
Cook Political Report: Likely Rep
Biden 43.3 Trump 50.3
Biden probability 0.04065
Trump probability 0.95935", "tennessee
Electoral College Votes 11
Cook Political Report: Solid Rep
Biden 39.0 Trump 52.7
Biden probability 5e-05
Trump probability 0.99995", "texas
Electoral College Votes 38
Cook Political Report: Lean Rep
Biden 43.7 Trump 47.5
Biden probability 0.0
Trump probability 1.0", "utah
Electoral College Votes 6
Cook Political Report: Likely Rep
Biden 38.5 Trump 46.9
Biden probability 0.201
Trump probability 0.799", "virginia
Electoral College Votes 13
Cook Political Report: Likely Dem
Biden 50.7 Trump 39.0
Biden probability 0.98555
Trump probability 0.01445", "washington
Electoral College Votes 12
Cook Political Report: Solid Dem
Biden 59.5 Trump 30.3
Biden probability 1.0
Trump probability 0.0", "wisconsin
Electoral College Votes 10
Cook Political Report: Lean Dem
Biden 48.8 Trump 42.0
Biden probability 0.08605
Trump probability 0.91395", "district of columbia
Electoral College Votes 3
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "hawaii
Electoral College Votes 4
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "idaho
Electoral College Votes 4
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "illinois
Electoral College Votes 20
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "louisiana
Electoral College Votes 8
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "maryland
Electoral College Votes 10
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "nebraska
Electoral College Votes 5
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "north dakota
Electoral College Votes 3
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "oklahoma
Electoral College Votes 7
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "oregon
Electoral College Votes 7
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "rhode island
Electoral College Votes 4
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "south dakota
Electoral College Votes 3
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "vermont
Electoral College Votes 3
Cook Political Report: Solid Dem
Biden nan Trump nan
Biden probability 1.0
Trump probability 0.0", "west virginia
Electoral College Votes 5
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0", "wyoming
Electoral College Votes 3
Cook Political Report: Solid Rep
Biden nan Trump nan
Biden probability 0.0
Trump probability 1.0" ], "type": "choropleth", "z": [ 0, 0.28055, 0.00015, 0.3684, 1, 1, 0.99445, 1, 0.59325, 0, 0.0014, 0, 0.00135, 0.0001, 0.9966, 1, 0.97465, 0.17085, 0, 0.0475, 0.0009, 0.7586, 0.9613, 1, 1, 1, 0.00815, 0.04185, 0.0524, 0.04065, 5e-05, 0, 0.201, 0.98555, 1, 0.08605, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0 ] } ], "layout": { "geo": { "projection": { "type": "albers usa" }, "scope": "usa", "showlakes": false }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "State probabilities with battleground undecided voters favoring Trump" } } }, "text/html": [ "
\n", " \n", " \n", "
\n", " \n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = go.Figure(data=go.Choropleth(\n", " locations=df2['code'],\n", " z=df2['biden_qual_prob'].astype(float),\n", " locationmode='USA-states',\n", " colorscale='RdBu',\n", " autocolorscale=False,\n", " text=df2['text'], \n", " marker_line_color='white',\n", " colorbar_title=\"Biden Probability\"\n", "))\n", "fig.update_layout(\n", " title_text='State probabilities with battleground undecided voters favoring Trump',\n", " geo = dict(\n", " scope='usa',\n", " projection=go.layout.geo.Projection(type = 'albers usa'),\n", " showlakes=False),\n", ")\n", "\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### State probabilities do not necessarily mean probable Electoral College outcome" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Biden electoral college votes if ALL undecided voters in battleground states go for Trump: 268\n", "\n", "Trump electoral college votes if ALL undecided voters in battleground states go for Trump: 270\n" ] } ], "source": [ "print('Biden electoral college votes if ALL undecided voters in battleground states go for Trump:', np.sum(df['ec'][df['biden_qual_prob'] >= .5]))\n", "print()\n", "print('Trump electoral college votes if ALL undecided voters in battleground states go for Trump:', np.sum(df['ec'][df['trump_qual_prob'] >= .5]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that recreating the 2016 polling error in battleground states brings the race far closer.\n", "\n", "It should be kept in mind that the numbers below are simply a sum of states where a candidate has at least a 50% chance of winning that state. If we think about it, a 50% probability is the same as a coin toss.\n", "\n", "We are left questioning how many different combinations of outcomes for each state produce a different winner." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# An Electoral College Monte Carlo Simulation\n", "\n", "Since we have probabilities for each state, a random number generator will determine if the candidate won that state. \n", "\n", "\n", "To replicate ideological voter trends, the **Lean Rep** block of states will have their own random number for each simulation round. \n", "\n", "The **Lean Dem** block of states will also have their own random number for each simulation round. \n", "\n", "Each **Toss Up** state will have its own unique random number for each simulation round. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "lean_r = list(df[df['cook'].str.startswith('Lean R', na=False)]['State'])\n", "lean_d = list(df[df['cook'].str.startswith('Lean D', na=False)]['State'])\n", "tossup = list(df[df['cook'].str.startswith('Toss', na=False)]['State'])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def electoral_college(ec, cand, state, sims=20000):\n", " cand_wins = 0\n", " cand_ec_total = []\n", " cand_states = []\n", " for i in range(sims):\n", " cand_ec = 0\n", " cand_state = []\n", " sim_election = np.random.uniform(low=0.05)\n", " lean_r_sim = np.random.uniform()\n", " lean_d_sim = np.random.uniform()\n", " for x, y, z in zip(cand, states, ec):\n", " if y in lean_r:\n", " sim_election = lean_r_sim\n", " elif y in lean_d:\n", " sim_election = lean_d_sim\n", " elif y in tossup:\n", " sim_election = np.random.uniform()\n", " if x > sim_election:\n", " cand_ec += z\n", " cand_state.append(y)\n", " cand_ec_total.append(cand_ec)\n", " cand_states.append(cand_state)\n", " if cand_ec > 269:\n", " cand_wins += 1\n", " return cand_wins, cand_ec_total, cand_states" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Monte Carlo Simulation of Electoral College Results\n", "\n", "Biden Win Percentage: 36.335\n", "Biden Avg EC Votes: 263.51915\n", "\n", "Trump Win Percentage: 61.925\n", "Trump Avg EC Votes: 274.3046\n" ] } ], "source": [ "print(\"Monte Carlo Simulation of Electoral College Results\")\n", "print()\n", "sims = 20000\n", "ec = list(df.ec.values)\n", "states = list(df.State.values)\n", "cand_1 = list(df['biden_qual_prob'].values)\n", "cand_1_wins, cand_1_ec_totals, cand_1_states = electoral_college(ec, cand_1, states, sims=sims)\n", "print('Biden Win Percentage:', (cand_1_wins/sims)*100)\n", "print('Biden Avg EC Votes:', sum(cand_1_ec_totals) / len(cand_1_ec_totals))\n", "print()\n", "cand_2 = list(df['trump_qual_prob'].values) \n", "cand_2_wins, cand_2_ec_totals, cand_2_states = electoral_college(ec, cand_2, states, sims=sims)\n", "print('Trump Win Percentage:', (cand_2_wins/sims)*100)\n", "print('Trump Avg EC Votes:', sum(cand_2_ec_totals) / len(cand_2_ec_totals))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The race is very close when factoring in the potential for 2016 polling errors in critical battleground states" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Given the state probabilities under a polling error scenario:\n", "36.34 % of the potential state outcomes result in a victory for Biden.\n", "61.92 % of the potential state outcomes result in a victory for Trump.\n", "\n", "The most common simulation outcome was 268 for Biden and 270 for Trump.\n" ] } ], "source": [ "print('Given the state probabilities under a polling error scenario:')\n", "print(\"{:0.2f}\".format((cand_1_wins/sims)*100),'% of the potential state outcomes result in a victory for Biden.')\n", "print(\"{:0.2f}\".format((cand_2_wins/sims)*100),'% of the potential state outcomes result in a victory for Trump.')\n", "print()\n", "print('The most common simulation outcome was',\n", " Counter(cand_1_ec_totals).most_common(n=1)[:1][0][0], 'for Biden and',\n", " Counter(cand_2_ec_totals).most_common(n=1)[:1][0][0], 'for Trump.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A graphic of each simulated election results is below." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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j5q0adNGiYmJGjhwoBYuXKif//znKi4ulnShjGnSpIl27NhR7c+uXbv05z//WdKFYmj37t1644031KxZM73wwgvq0KGDvv32W0nXd/5q8uyzz2rv3r0aOnSodu7cqTvuuEPPPPPMdX0WAABWR4kBAICFderUSZLqvIriUs2aNdORI0eqjV1tBUB+fr7uv/9+jRo1SsnJyUpISPCtXLiofv36V72fw8UnhFxazHz44YcBeXrI/fffr4SEBD333HOSpJSUFJ08eVJnz55VQkJCtT+tWrXy7XfTTTfp/vvv1+zZs/WPf/xDZ86cUU5OjqQL56+oqKjad73a+btYyFzp/LRt21YTJkzQunXr9Pzzz+u1116r8/cGAMCKKDEAALCI3r17a/Hixfrb3/6mgwcPavPmzZowYYKaNm2qu+++29BjpaWlaffu3Vq4cKG+/vprLV26VGvXrq11nw4dOuiDDz7QX//6V+3du1fPPPOM/u///q/aNrfeeqt2796tL774QsXFxTp37txln9OuXTsNGTJEEyZM0KZNm7R7925NmjRJO3fu1NSpUw39nhdNnTpVS5Ys0f79+9W3b1+lpaVp8ODBWr9+vfbt26ft27drwYIFWrp0qSRp2bJlWrp0qf7+97/r4MGDWr16tU6fPu27b8Xdd9+tM2fO6Nlnn9XXX3+tt99+W9nZ2bVmaN26tUJCQvSnP/1JRUVFOnXqlMrKyvTII48oLy9P+/fv12effab33nvPdxwAAG40lBgAAFjET3/6U61evVoPPPCAOnTooIyMDCUmJmrr1q3V7nlhhLS0NL344ouaOXOmbrvtNuXl5VV7lOuVPPvss+rdu7cGDhyonj17yu1267HHHqu2zahRo9SjRw/16tVLMTEx+sMf/nDFz3r99dd13333afjw4brtttu0detWbdy4sdqTSYw0cOBAtWnTRtOmTZPD4dC7776rwYMHa8qUKerYsaMefPBB/fGPf1S7du0kSU6nU2+++ab69OmjTp06ac6cOVqyZIn69esn6UKhs3TpUv33f/+3unTpojfeeEMvv/xyrRmaN2+umTNnKjMzUy1atNDAgQMVGhoqt9utUaNGqVOnTrrvvvvUvHlz/f73vw/IeQAA4IfO4a3tTmAAAAAAAAA/EKzEAAAAAAAAlkCJAQAAAAAALIESAwAAAAAAWAIlBgAAAAAAsARKDAAAAAAAYAmUGAAAAAAAwBJCzQ4QLEeOHDE7wg9adHS0iouLzY4BgzCf9sJ82gvzGTzp6emSpHXr1gXsGMynvTCf9sFc2gvzaS+XzmdcXNw17c9KDAAAAAAAYAmUGAAAAAAAwBIoMQAAAAAAgCXcMPfEAAAAN5bu3bubHQEAABiMEgMAANjSU089ZXYEAABgMC4nAQAAAAAAlkCJAQAAbGnMmDEaM2aM2TEAAICBuJwEAADYktvtNjsCAAAwGCsxAAAAAACAJVBiAAAAAAAAS6DEAAAAAAAAlsA9MQAAgC3deeedZkcAAAAGo8QAAAC2NHnyZLMjAAAAg3E5CQAAAAAAsARKDAAAYEvDhw/X8OHDzY4BAAAMxOUkAADAls6ePWt2BAAAYDBWYgAAAAAAAEugxAAAAAAAAJZAiQEAAAAAACyBe2IAAADLGbh6tyRpw792rHGbtLS0YMUBAABBQokBAABsafz48WZHAAAABuNyEgAAAAAAYAmUGAAAwJbS09OVnp5udgwAAGAgSgwAAAAAAGAJlBgAAAAAAMASKDEAAAAAAIAlUGIAAAAAAABL4BGrAADAlvr37292BAAAYDBKDAAAYEsjR440OwIAADAYl5MAAABbKi8vV3l5udkxAACAgViJAQAAbGnEiBGSpHXr1pmcBAAAGIWVGAAAAAAAwBIoMQAAAAAAgCVQYgAAAAAAAEugxAAAAAAAAJbAjT0BAIAtDRkyxOwIAADAYJQYAADAloYNG2Z2BAAAYDAuJwEAALbkcrnkcrnMjgEAAAzESgwAAGBLY8eOlSStW7fO5CQAAMAorMQAAAAAAACWQIkBAABsy7vnH6ocM8DsGAAAwCCUGAAAAAAAwBIoMQAAAAAAgCVQYgAAAFsaMWKEhreKMTsGAAAwECUGAACwpYEDB2pAXKTZMQAAgIEoMQAAgC0dPnxYR8o9ZscAAAAGosQAAAC2NGnSJP367/vNjgEAAAxEiQEAAAAAACyBEgMAAAAAAFgCJQYAAAAAALAESgwAAAAAAGAJlBgAAMCWxo4dqzG3Njc7BgAAMBAlBgAAsKV7771X9zRvanYMAABgoNBgHMTj8Wj69Ok6f/68Kisrdccdd2jo0KEqKyvT3LlzdeLECcXExGjy5MmKiIiQJK1fv155eXkKCQlRRkaGkpKSJEn79u1Tdna2PB6PkpOTlZGRIYfDEYyvAQAALKSwsFBVZWfVLqKB2VEAAIBBgrISIywsTNOnT9crr7yi2bNna8eOHdq7d69ycnLUtWtXzZ8/X127dlVOTo4k6dChQ9q2bZvmzJmjp59+WsuWLVNVVZUkaenSpRo3bpzmz5+vY8eOaceOHcH4CgAAwGKefPJJPbXzoNkxAACAgYJSYjgcDjVocOG3IJWVlaqsrJTD4VBBQYF69+4tSerdu7cKCgokSQUFBerVq5fCwsLUrFkzxcbGqrCwUG63W+Xl5Wrfvr0cDodSU1N9+wAAAAAAAHsLyuUkklRVVaUnnnhCx44d03333afExESdOnVKTqdTkuR0OlVaWipJcrlcSkxM9O0bGRkpl8ulevXqKSoqyjceFRUll8sVrK8AAAAAAABMFLQSIyQkRK+88oq+++47/dd//Ze++eabGrf1er3XNH4lubm5ys3NlSRlZmYqOjr62gLfYEJDQzlHNsJ82gvzaS/Mp7FqO5dhYWHy+LFdXTCf9sJ82gdzaS/Mp73UdT6DVmJc1KhRI3Xu3Fk7duxQkyZN5Ha75XQ65Xa71bhxY0kXVliUlJT49nG5XIqMjLxsvKSkRJGRkVc8TlpamtLS0nyvi4uLA/SN7CE6OppzZCPMp70wn/bCfBqrtnNZUVHh13Z1wXzaC/NpH8ylvTCf9nLpfMbFxV3T/kG5J0Zpaam+++47SReeVPKPf/xDLVu2VEpKirZs2SJJ2rJli3r06CFJSklJ0bZt21RRUaGioiIdPXpUCQkJcjqdCg8P1969e+X1epWfn6+UlJRgfAUAAGAxjz32mCYmtDA7BgAAMFBQVmK43W5lZ2erqqpKXq9XPXv2VPfu3dW+fXvNnTtXeXl5io6O1pQpUyRJ8fHx6tmzp6ZMmaKQkBCNGjVKISEX+pbRo0dr0aJF8ng8SkpKUnJycjC+AgAAsJjU1FRVrmxsdgwAAGCgoJQYrVu31uzZsy8bv/nmmzVt2rQr7jN48GANHjz4svF27dopKyvL8IwAAMBedu7cqarSM/pR44ZmRwEAAAYJyuUkAAAAwTZjxgw9t+tbs2MAAAADUWIAAAAAAABLoMQAAAAAAACWQIkBAAAAAAAsgRIDAAAAAABYAiUGAACwpSeeeEL/2aGl2TEAAICBgvKIVQAAgGDr0aOHKp0RZscAAAAGYiUGAACwpYKCAv3NXWZ2DAAAYCBKDAAAYEuzZs3S7D2HzY4BAAAMRIkBAAAAAAAsgRIDAAAAAABYAiUGAAAAAACwBEoMAAAAAABgCZQYAADAlmbMmKHpnePNjgEAAAwUanYAAACAQOjSpYsqGzc0OwYAADAQKzEAAIAt5efn68PiUrNjAAAAA7ESAwAA2NL8+fPlLTyqu6Ibmx0FAAAYhJUYAAAAAADAEigxAAAAAACAJVBiAAAAAAAAS6DEAAAAAAAAlkCJAQAAbCkzM1Mzu7Q2OwYAADAQTycBAAC2lJCQoMqIBmbHAAAABmIlBgAAsKX3339ffzl+0uwYAADAQJQYAADAlpYsWaKl+4+bHQMAABiIEgMAAAAAAFgCJQYAAAAAALAESgwAAAAAAGAJlBgAAAAAAMASKDEAAIAtzZs3T6/edqvZMQAAgIFCzQ4AAAAQCC1btlRleH2zYwAAAAOxEgMAANjShg0b9O4Rl9kxAACAgSgxAACALa1cuVKrvjlhdgwAAGAgSgwAAAAAAGAJlBgAAAAAAMASKDEAAAAAAIAlUGIAAAAAAABLoMQAAAC2tGTJEi3u1s7sGAAAwEChZgcAAAAIhMjISFXW5586AADYCSsxAACALa1Zs0ZvHyo2OwYAADAQJQYAALClt99+W28fKjE7BgAAMBAlBgAAAAAAsARKDAAAAAAAYAmUGAAAAAAAwBIoMQAAAAAAgCVQYgAAAFtauXKl3uqRaHYMAABgIB6eDgAAbCk8PFyV9fh9DQAAdsLf7AAAwJaWL1+uFQeLzI4BAAAMRIkBAABsaePGjdp41G12DAAAYCBKDAAAAAAAYAmUGAAAAAAAwBIoMQAAAAAAgCVQYgAAAAAAAEugxAAAALa0bt06rb2jg9kxAACAgUKDcZDi4mJlZ2fr5MmTcjgcSktL0wMPPKC1a9dq8+bNaty4sSTpoYceUrdu3SRJ69evV15enkJCQpSRkaGkpCRJ0r59+5SdnS2Px6Pk5GRlZGTI4XAE42sAAAAAAAATBaXEqFevnkaMGKG2bduqvLxcTz75pH784x9Lkh588EENGDCg2vaHDh3Stm3bNGfOHLndbr3wwguaN2+eQkJCtHTpUo0bN06JiYmaOXOmduzYoeTk5GB8DQAAYCGLFy9W1b5jGtc21uwoAADAIEG5nMTpdKpt27aSpPDwcLVs2VIul6vG7QsKCtSrVy+FhYWpWbNmio2NVWFhodxut8rLy9W+fXs5HA6lpqaqoKAgGF8BAABYTG5urjYXnTI7BgAAMFDQ74lRVFSk/fv3KyEhQZK0adMmPf7441q0aJHKysokSS6XS1FRUb59IiMj5XK5LhuPioqqtQwBAAAAAAD2EZTLSS46e/assrKyNHLkSDVs2FD33nuv0tPTJUlr1qzRihUrNGHCBHm93ivuX9P4leTm5io3N1eSlJmZqejo6Lp/ARsLDQ3lHNkI82kvzKe9MJ/Gqu1choWFyePHdnXBfNoL82kfzKW9MJ/2Utf5DFqJcf78eWVlZemuu+7S7bffLklq2rSp7/1+/fpp1qxZki6ssCgpKfG953K5FBkZedl4SUmJIiMjr3i8tLQ0paWl+V4XFxcb+n3sJjo6mnNkI8ynvTCf9sJ8Gqu2c1lRUeHXdnXBfNoL82kfzKW9MJ/2cul8xsXFXdP+QbmcxOv1avHixWrZsqX69+/vG3e73b6fP/nkE8XHx0uSUlJStG3bNlVUVKioqEhHjx5VQkKCnE6nwsPDtXfvXnm9XuXn5yslJSUYXwEAAFhMgwYN1KAeT5MHAMBOgrISY8+ePcrPz1erVq00depUSRcep7p161YdOHBADodDMTExGjt2rCQpPj5ePXv21JQpUxQSEqJRo0YpJOTCP0JGjx6tRYsWyePxKCkpiSeTAACAK1q1apUqxwy4+oYAAMAyglJidOzYUWvXrr1svFu3bjXuM3jwYA0ePPiy8Xbt2ikrK8vQfAAAAAAA4IePNZYAAMCW5s6dq3lfHTU7BgAAMBAlBgAAsKWtW7dqa0mp2TEAAICBKDEAAAAAAIAlUGIAAAAAAABLoMQAAAAAAACWEJSnkwAAAASb0+mUN4x/6gAAYCf8zQ4AAGxp6dKlqhwzwOwYAADAQFxOAgAAAAAALIESAwAA2NLMmTOVufuw2TEAAICBuJwEAADY0vbt2+U9WWZ2DAAAYCBWYgAAAAAAAEugxAAAAAAAAJZAiQEAAAAAACyBEgMAANhSixYt1KJBfbNjAAAAA3FjTwAAYEsLFixQ5ZgBZscAAAAGYiUGAAAAAACwBEoMAABgS9OmTdOMXd+aHQMAABiIy0kAAIAt7dq1S97SM2bHAAAABmIlBgAAAAAAsARKDAAAAAAAYAmUGAAAAAAAwBIoMQAAgC21bdtWtzZqYHYMAABgIG7sCQAAbGn27NmqHLPb7BgAAMBA17USY+fOndq1a5fRWQAAAAAAAGrkV4kxffp07d594TcZOTk5mjdvnubNm6d33nknoOEAAACu13/+53/qiX8cNDsGAAAwkF8lxrfffqv27dtLkjZv3qzp06frpZde0l/+8peAhgMAALhe+/bt0/7vzpodAwAAGMivEsPr9UqSjh07Jkm65ZZbFB0dre+++y5wyQAA+KeBq7mvAQAAAPy8sWeHDh30xhtvyO12q0ePHpIuFBo333xzQMMBAAAAAABc5NdKjEceeUQNGzZU69atNXToUEnSkSNH9MADDwQ0HAAAAAAAwEV+rcS4+eab9fDDD1cb69atW0ACAQAAGKFz587yHv3a7BgAAMBAfpUY58+f1wcffKADBw7o7NnqN8h69NFHAxIMAACgLp5//nlVHt1hdgwAAGAgv0qMhQsX6uDBg+revbuaNGkS6EwAAAAAAACX8avE+Pvf/66FCxeqUaNGgc4DAABgiIkTJ8q7Y7/mJd1qdhQAAGAQv0qM6OhoVVRUBDoLAACAYY4ePSrvWY/ZMQAAgIH8KjFSU1P1yiuv6Kc//amaNm1a7b0uXboEJBgAAAAAAMD3+VVivPfee5KkP/zhD9XGHQ6HFi5caHwqAAAAAACAS/hVYmRnZwc6BwAAAAAAQK38KjEkqbKyUnv27JHL5VJUVJTat2+vevXqBTIbAADAdevevbuqju83OwYAADCQXyXG4cOHNWvWLHk8HkVFRamkpERhYWF64okndMsttwQ6IwAAwDV76qmnVLnvI7NjAAAAA/lVYrz++utKS0vTz372MzkcDknSu+++q2XLlmn69OkBDQgAAGC2gat3S5I2/GtHk5MAAHBjC/FnowMHDqh///6+AkOSHnzwQR04cCBQuQAAAOpkzJgxGrf9a7NjAAAAA/lVYkRGRmrXrl3Vxr788ks5nc6AhAIAAKgrt9std8V5s2MAAAAD+XU5yUMPPaRZs2ape/fuio6OVnFxsT799FNNnDgx0PkAAAAAAAAk+VlipKSkaNasWfroo4/kdrsVHx+voUOHKi4uLtD5AAAAAAAAJF3DI1bj4uL0i1/8IpBZAAAAAAAAalRjifG73/1O48aNkyQtWLCg2k09v+/RRx8NTDIAAIA6uPPOO+UtPmh2DAAAYKAaS4xmzZr5fo6NjQ1KGAAAAKNMnjxZlbv+anYMAABgoBpLjJ///Oe+n++55x41bdr0sm1OnjwZmFQAAAAAAACX8OsRq5MmTbri+OTJkw0NAwAAYJThw4fr3wq+MjsGfoAqxwxQ5ZgBZscAAFwHv27s6fV6Lxs7c+aMQkL86kAAAACC7uzZs/JWVpkdAwAAGKjWEuNXv/qVJMnj8fh+vqisrEx33nln4JIBAAAAAAB8T60lxsSJE+X1ejVz5kxNnDix2ntNmzZVXFxcQMMBAAAAAABcVGuJ0blzZ0nSsmXLdNNNNwUlEAAAAAAAwJX4dU+Mm266SQcOHNCXX36p06dPV7tHxrBhwwIWDgAA4HqlpaWpyv2N2TEAAICB/CoxcnNz9dZbb+nHP/6xduzYoaSkJH3++edKSUnx6yDFxcXKzs7WyZMn5XA4lJaWpgceeEBlZWWaO3euTpw4oZiYGE2ePFkRERGSpPXr1ysvL08hISHKyMhQUlKSJGnfvn3Kzs6Wx+NRcnKyMjIy5HA4rvPrAwAAuxo/frwqt//J7BgAAMBAfj1eZMOGDfrtb3+rqVOnqn79+po6daqmTJmievXq+XWQevXqacSIEZo7d65eeuklbdq0SYcOHVJOTo66du2q+fPnq2vXrsrJyZEkHTp0SNu2bdOcOXP09NNPa9myZaqqunB38aVLl2rcuHGaP3++jh07ph07dlznVwcAAAAAAFbiV4lRWlqqTp06SZIcDoeqqqqUnJys7du3+3UQp9Optm3bSpLCw8PVsmVLuVwuFRQUqHfv3pKk3r17q6CgQJJUUFCgXr16KSwsTM2aNVNsbKwKCwvldrtVXl6u9u3by+FwKDU11bcPAADA96Wnp2vox3vMjgEAAAzk1+UkkZGRKioqUrNmzdSiRQv97W9/080336zQUL92r6aoqEj79+9XQkKCTp06JafTKelC0VFaWipJcrlcSkxMrHZ8l8ulevXqKSoqyjceFRUll8t1xePk5uYqNzdXkpSZmano6OhrznojCQ0N5RzZCPNpL8znBXY5B8ynsWo7l2FhYfL4sV1djsd8WtPxf/6X+bQv5tJemE97qet8+tVCDBw4UIcPH1azZs2Unp6uOXPm6Pz588rIyLimg509e1ZZWVkaOXKkGjZsWON2379xqD/jV5KWlqa0tDTf6+LiYv+D3oCio6M5RzbCfNoL83mBXc7BjT6flWMGSJLqLX3XkM+r7VxWVFT4tV1djnejz6fVMZ/2xVzaC/NpL5fOZ1xc3DXt71eJ0adPH9/PycnJevPNN3X+/Hk1aNDA7wOdP39eWVlZuuuuu3T77bdLkpo0aSK32y2n0ym3263GjRtLurDCoqSkxLevy+VSZGTkZeMlJSWKjIz0OwMAAAAAALCuGu+JUVVVVeOfkJAQ1a9f33ezzavxer1avHixWrZsqf79+/vGU1JStGXLFknSli1b1KNHD9/4tm3bVFFRoaKiIh09elQJCQlyOp0KDw/X3r175fV6lZ+f7/cTUgAAAAAAgIseKiAAACAASURBVLXVuBLjoYce8usD1qxZc9Vt9uzZo/z8fLVq1UpTp071ff6gQYM0d+5c5eXlKTo6WlOmTJEkxcfHq2fPnpoyZYpCQkI0atQohYRc6FtGjx6tRYsWyePxKCkpScnJyX7lBAAAN5b+/fvLW3rI7BgAAMBANZYYCxcuNOwgHTt21Nq1a6/43rRp0644PnjwYA0ePPiy8Xbt2ikrK8uwbAAAwJ5Gjhypyq3vmB0DAAAYqMYSIyYmJpg5AAAADFVeXq7KyiqF1/PrifIAAMAC/Lqx54IFC+RwOK743qOPPmpoIAAAACOMGDFC3j1fae0dHcyOAgAADOJXiREbG1vt9cmTJ/Xxxx/rrrvuCkgoAAAAAACAS/lVYgwZMuSysb59++rtt982PBAAAAAAAMCVXPdFom3atNGXX35pZBYAAAAAAIAa+bUSY+fOndVenzt3Tlu3btUtt9wSkFAAAAAAAACX8qvEeO2116q9btCggVq3bq1JkyYFJBQAAEBdDRkyRN7lR8yOAQAADORXiZGdnR3oHAAAAIYaNmyYKnNXmx0DAAAYyK8S46IzZ87o7Nmz1cYiIyMNDQQAAGAEl8ulSs95Rda/pn/uAACAHzC//lb//PPPtWTJEp04ceKy99asWWN4KAAAgLoaO3asvHu+1to7OpgdBQAAGMSvEmPx4sX6xS9+oTvvvFP169cPdCYAAAAAAIDL+FViVFRU6O6771ZIyHU/kRUAAAAAAKBO/GolHnzwQW3YsEFerzfQeQAAAAAAAK7Ir5UYt99+u1566SXl5OTo5ptvrvbewoULAxIMAAAAAADg+/wqMebMmaOOHTuqZ8+e3BMDAABYwogRI1S15BWzYwAAAAP5VWIUFRVp1qxZ3BMDAABYxsCBA1W5cZnZMQAAgIH8aiVSUlK0c+fOQGcBAAAwzOHDh3Wk3GN2DAAAYCC/n04ye/ZsderUSU2aNKn23qOPPhqQYAAAAHUxadIkeffs19o7OpgdBQAAGMSvEiM+Pl7x8fGBzgIAAAAAAFAjv0qMIUOGBDoHAAAAAABArWosMXbt2qXOnTtLUq33w+jSpYvxqQAAAAAAAC5RY4mxbNkyZWVlSZJee+21K27jcDi0cOHCwCQDAAAAAAD4nhpLjIsFhiRlZ2cHJQwAAIBRxo4dq6qFL5odAwAAGMivR6x+35EjR/TJJ5/oxIkTgcgDAABgiHvvvVf3NG9qdgwAAGCgWm/suWLFCrVp00apqamSpC1btui1115To0aNdPbsWT3++ONKTk4OSlAAAIBrUVhYqKqys2oX0cDsKAAAwCC1rsQoKCjw3dxTkv7whz8oIyNDy5Yt05gxY7Ru3bqABwQAALgeTz75pJ7aedDsGAAAwEC1lhilpaWKjo6WJH3zzTc6ffq0+vbtK0lKTU3VkSNHAp8QAAAAAABAVykxGjZsqJMnT0qSdu/erXbt2iksLEySdP78+cCnAwAAAAAA+Kda74nRs2dPzZs3Tz169NDGjRs1aNAg33uFhYVq3rx5wAMCAAAAAABIV1mJ8fDDD6tz5876/PPPlZaWpnvuucf33oEDB5SWlhbwgAAAAAAAANJVVmKEhoZqyJAhV3zvgQceCEggAAAAIzz22GOqmjvN7BgAAMBAta7EAAAAsKrU1FTdFd3Y7BgAAMBAlBgAAMCWdu7cqS9Kz5gdAwAAGIgSAwAA2NKMGTP03K5vzY4BAAAMVGOJ8fTTT/t+fvvtt4MSBgAAAAAAoCY1lhhHjhyRx+ORJG3cuDFogQAAAAAAAK6kxqeT9OjRQ5MmTVKzZs3k8Xg0ffr0K2733HPPBSwcAAAAAADARTWWGBMmTNDu3btVVFSkwsJC3X333cHMBQAAAAAAUE2NJYYkdezYUR07dtT58+fVp0+fIEUCAACouyeeeEJVs54wOwYAADBQrSXGRX379tXOnTuVn58vt9stp9Op1NRUdenSJdD5AAAArkuPHj1U6YwwOwYAADCQX49Y3bx5s1599VU1bdpUP/nJT+R0OjVv3jzl5uYGOh8AAMB1KSgo0N/cZWbHAAAABvJrJca7776rZ555Rm3atPGN9erVS1lZWUpLSwtUNgAAgOs2a9Ysefcc1to7OpgdBQAAGMSvlRinT5/WLbfcUm0sLi5OZWX8dgMAAAAAAASHXyVGx44dtWLFCp07d06SdPbsWa1cuVLt27cPaDgAAAAAAICL/LqcZMyYMXr11Vc1cuRIRUREqKysTO3bt9ekSZMCnQ8AAAAAAECSnyWG0+nUc889p5KSEt/TSaKiogKdDQAAAAAAwMevEuOiqKgoygsAAGAJM2bMUNULvzY7BgAAMNA1lRgAANjZwNW7JUkb/rWjyUlghC5duqiycUOzYwAAAAP5dWNPAAAAq8nPz9eHxaVmxwAAAAa6aolRVVWlnTt36vz588HIAwAAYIj58+drQeFRs2MAAAADXbXECAkJ0ezZsxUaypUnAAAAAADAPH5dTtKpUyft3bs30FkAAAAAAABq5NfyipiYGM2cOVMpKSmKioqSw+HwvTds2LCAhQMAAAAAALjIrxLD4/GoR48ekiSXy3XNB1m0aJE+/fRTNWnSRFlZWZKktWvXavPmzWrcuLEk6aGHHlK3bt0kSevXr1deXp5CQkKUkZGhpKQkSdK+ffuUnZ0tj8ej5ORkZWRkVCtUAAAAAACAfflVYkyYMKFOB+nTp4/uv/9+ZWdnVxt/8MEHNWDAgGpjhw4d0rZt2zRnzhy53W698MILmjdvnkJCQrR06VKNGzdOiYmJmjlzpnbs2KHk5OQ6ZQMAAPaUmZmpqmfr9m8YAADww+L3I1YPHTqkdevWadmyZZKkI0eO6ODBg37t27lzZ0VERPi1bUFBgXr16qWwsDA1a9ZMsbGxKiwslNvtVnl5udq3by+Hw6HU1FQVFBT4Gx8AANxgEhIS1C6igdkxAACAgfwqMT766CNNnz5dLpdL+fn5kqTy8nKtWLGiTgfftGmTHn/8cS1atEhlZWWSLlyuEhUV5dsmMjJSLpfrsvGoqKjrurQFAADcGN5//3395fhJs2MAAAAD+XU5ydq1a/Xss8+qTZs2+uijjyRJrVu31oEDB677wPfee6/S09MlSWvWrNGKFSs0YcIEeb3eK25f03hNcnNzlZubK+nCctLo6OjrznojCA0N5RzZCPNpL8znBcE8B4E81o0+n8f/+V+jzkFtn/Pmm2/Ks/+47mneNGDHu9Hn06pq+t8h82kfzKW9MJ/2Utf59KvEOHXqlFq3bl1tzOFw1Ommmk2bNvX93K9fP82aNUvShRUWJSUlvvdcLpciIyMvGy8pKVFkZGSNn5+Wlqa0tDTf6+Li4uvOeiOIjo7mHNkI82kvzOcFwTwHgTwW83mBUeegts+pqKgI+PGYT2tjPu2LubQX5tNeLp3PuLi4a9rfr8tJ2rZt67uM5KKtW7cqISHhmg72fW632/fzJ598ovj4eElSSkqKtm3bpoqKChUVFeno0aNKSEiQ0+lUeHi49u7dK6/Xq/z8fKWkpFz38QEAAAAAgLX4tRIjIyNDL774ovLy8nTu3Dm99NJLOnLkiJ555hm/DvLqq69q165dOn36tMaPH6+hQ4fqiy++0IEDB+RwOBQTE6OxY8dKkuLj49WzZ09NmTJFISEhGjVqlEJCLnQto0eP1qJFi+TxeJSUlMSTSQAAAAAAuIH4VWK0bNlSr776qrZv367u3bsrKipK3bt3V4MG/t3x+9e//vVlY3379q1x+8GDB2vw4MGXjbdr105ZWVl+HRMAAAAAANiLXyWGJN10003q2LGj7x4V/hYYAAAAZpg3b56qnhhldgwAAGAgv0qM4uJizZ8/X1999ZUaNWqk7777TgkJCXrssccUExMT6IwAAADXrGXLlqoMr292DAAAYCC/buyZnZ2ttm3b6s0339Trr7+uN998U+3atVN2dnag8wEAAFyXDRs26N0jLrNjAAAAA/lVYuzbt0/Dhw/3XULSoEEDDR8+XPv27QtoOAAAgOu1cuVKrfrmhNkxAACAgfwqMRITE1VYWFht7Ouvv1b79u0DEgoAAAAAAOBSNd4TY82aNb6fmzdvrpkzZ6pbt26KiopSSUmJPvvsM/3Lv/xLUEICAAAAAADUWGKUlJRUe3377bdLkkpLSxUWFqaf/OQn8ng8gU0HAAAAAADwTzWWGBMmTAhmDgAAAAAAgFr59YhVSTp37pyOHTums2fPVhvv0KGD4aEAAADqasmSJaqcPNzsGAAAwEB+lRhbtmzRG2+8odDQUNWvX/1566+99lpAggEAANRFZGSkKuv7/fsaAABgAX79zb5q1Sr95je/0Y9//ONA5wEAADDEmjVr5D1UrCG3RJsdBQAAGMSvR6yGhoaqc+fOgc4CAABgmLfffltvHyq5+oYAAMAy/Coxhg0bphUrVqi0tDTQeQAAAAAAAK7Ir8tJ4uLitHbtWm3atOmy99asWWN4KAAAAAAAgEv5VWIsWLBAqamp6tWr12U39gQAAAAAAAgGv0qMsrIyDRs2TA6HI9B5AAAAAAAArsive2L06dNH+fn5gc4CAABwRZVjBqhyzIBr2mflypV6q0digBLBSNczvwCAG5NfKzEKCwv13nvv6Z133lHTpk2rvffcc88FJBgAAEBdhIeHq7KeX7+vAQAAFuFXidGvXz/169cv0FkAAAAMs3z5cnkPFunfWjczOwoAADCIXyVGnz59AhwDAADAWBs3bpT3qJsSAwAAG/GrxMjLy6vxvb59+xoWBgAAAAAAoCZ+lRgffvhhtdcnT57UsWPH1LFjR0oMAAAAAAAQFH6VGNOnT79sLC8vT4cPHzY8EAAAAAAAwJVc9y27+/TpU+tlJgAAAAAAAEbyayVGVVVVtdcej0f5+flq1KhRQEIBAADU1bp161Q5ZoDZMQAAgIH8KjEeeuihy8YiIyM1btw4wwMBAAAAAABciV8lxsKFC6u9vummm9S4ceOABAIAADDC4sWLVbXvmMa1jTU7CgAAMIhfJUZMTEygcwAAABgqNzdX3qJTlBgAANhIrSXGc889V+vODodD06ZNMzQQAAAAAADAldRaYtx1111XHHe5XPrzn/+sc+fOBSQUAAAAAADApWotMfr27Vvt9enTp7V+/Xpt3rxZvXr1Unp6ekDDAQAAAAAAXOTXPTHOnDmjd999V5s2bVK3bt00a9YsxcZyfSkAAPjhatCggbz1QsyOAQAADFRrieHxePTHP/5RGzduVOfOnfX8888rPj4+WNkAAACu26pVq1Q5ZoDZMQAAgIFqLTEeeeQRVVVVacCAAWrXrp1OnTqlU6dOVdumS5cuAQ0IAAAAAAAgXaXEqF+/viTp/fffv+L7DodDCxcuND4VAABAHc2dO1fer45qUmILs6MAAACD1FpiZGdnBysHAACAobZu3SpvSSklBgAANsLdrgAAAAAAgCVQYgAAAAAAAEugxAAAAAAAAJZQ6z0xAAAArMrpdMobxj91AACwE/5mBwAAtrR06VJVjhlgdgwAAGAgLicBAAAAAACWQIkBAABsaebMmcrcfdjsGAAAwEBcTgIAAGxp+/bt8p4sMzsGAAAwECsxAAAAAACAJVBiAAAAAAAAS6DEAAAAAAAAlkCJAQAAbKlFixZq0aC+2TEAAICBuLEnAACwpQULFqhyzACzYwAAAAOxEgMAAAAAAFgCJQYAALCladOmacaub82OAQAADESJAQAAbGnXrl3aVXrmsvGBq3ebkAYAABiBEgMAAAAAAFgCJQYAAAAAALCEoDydZNGiRfr000/VpEkTZWVlSZLKyso0d+5cnThxQjExMZo8ebIiIiIkSevXr1deXp5CQkKUkZGhpKQkSdK+ffuUnZ0tj8ej5ORkZWRkyOFwBOMrAAAAAAAAkwVlJUafPn3029/+ttpYTk6Ounbtqvnz56tr167KycmRJB06dEjbtm3TnDlz9PTTT2vZsmWqqqqSJC1dulTjxo3T/PnzdezYMe3YsSMY8QEAgAW1bdtWtzZqYHYMAABgoKCUGJ07d/atsriooKBAvXv3liT17t1bBQUFvvFevXopLCxMzZo1U2xsrAoLC+V2u1VeXq727dvL4XAoNTXVtw8AAMClZs+erVldW5sdAwAAGMi0e2KcOnVKTqdTkuR0OlVaWipJcrlcioqK8m0XGRkpl8t12XhUVJRcLldwQwMAAAAAANME5Z4Y18Lr9V7TeE1yc3OVm5srScrMzFR0dHSds9lZaGgo58hGmE97YT4vCOY5COSxbvT5PP7P/17rOahpv9o+51e/+pXK/3FQs7q2vqb9anPpfjf6fBrlev93YfTxmE/7YC7thfm0l7rOp2klRpMmTeR2u+V0OuV2u9W4cWNJF1ZYlJSU+LZzuVyKjIy8bLykpESRkZE1fn5aWprS0tJ8r4uLiwPwLewjOjqac2QjzKe9MJ8XBPMcBPJYzOcF13sOLt2vts/58ssv5f3u7DXvdy3HZz6NFexzyXzaF3NpL8ynvVw6n3Fxcde0v2mXk6SkpGjLli2SpC1btqhHjx6+8W3btqmiokJFRUU6evSoEhIS5HQ6FR4err1798rr9So/P18pKSlmxQcAAAAAAEEWlJUYr776qnbt2qXTp09r/PjxGjp0qAYNGqS5c+cqLy9P0dHRmjJliiQpPj5ePXv21JQpUxQSEqJRo0YpJORC1zJ69GgtWrRIHo9HSUlJSk5ODkZ8AAAAAADwAxCUEuPXv/71FcenTZt2xfHBgwdr8ODBl423a9dOWVlZhmYDAADGGLh6tyRpw792NDkJAACwqx/cjT0BAACM0LlzZ3mPfm12DAAAYCBKDAAAYEvPP/+8Ko/uMDsGAAAwkGk39gQAAAAAALgWlBgAAMCWJk6cqEk79psdAwFUOWaAKscMMDsGACCIuJwEAADY0tGjR+U96zE7BgAAMBArMQAAAAAAgCVQYgAAAAAAAEugxAAAAAAAAJbAPTEAAIAtde/eXVXHubEnAAB2QokBAABs6amnnlLlvo/MjgEAAAzE5SQAAAAAAMASKDEAAIAtjRkzRuO2f212DAAAYCBKDAAAcM0qxwwwO8JVud1uuSvOmx0DAAAYiBIDAAAAAABYAiUGAAAAAACwBEoMAAAAAABgCTxiFQAA2NKdd94pb/FBs2MAAAADUWIAAABbmjx5sip3/TVox7t4s9N6S98N2jEBALjRcDkJAAAAAACwBEoMAIAtDVy92+wIMNnw4cP1bwVfmR0DAAAYiMtJAACALZ09e1beyiqzYwAAAAOxEgMAAAAAAFgCJQYAAAAAALAESgwAAAAAAGAJ3BMDAADYUlpamqrc35gdAwAAGIgSAwAA2NL48eNVuf1PZscAAAAG4nISAAAAAABgCZQYAADAltLT0zX04z1mxwAAAAaixAAAAAAAAJZAiQEAAAAAACyBEgMAAAAAAFgCJQYAAECADFy92+wIAADYCo9YBQAAttS/f395Sw+ZHQMAABiIEgMAANjSyJEjVbn1HbNjAAAAA3E5CQAAsKXy8nKVV1aZHQMAABiIEgMAANjSiBEj9O8FX5kd44ZSOWaA2REAADZHiQEAAAAAACyBEgMAAAAAAFgCJQYAAAAAALAESgwAAAAAAGAJPGIVAADY0pAhQ+RdfsTsGAAAwECsxAAAXJOBq3dr4OrdZscArmrYsGEacku02TEAAICBKDEAAIAtuVwuuTznzY4BAAAMRIkBAABsaezYsRr/6ddmxwAAAAaixAAAAAAAAJZAiQEAAAAAACyBEgMAAAAAAFgCJQYAAAbgqS0AalM5ZoDZEQDAFigxAACALY0YMULDW8WYHQMAABiIEgMAANjSwIEDNSAu0uwYAADAQJQYAADAlg4fPqwj5R6zYwAAAANRYgAAAFuaNGmSfv33/WbHAAAABqLEAAAAAAAAlhBqdoBHHnlEDRo0UEhIiOrVq6fMzEyVlZVp7ty5OnHihGJiYjR58mRFRERIktavX6+8vDyFhIQoIyNDSUlJJn8DAAAAAAAQDKaXGJI0ffp0NW7c2Pc6JydHXbt21aBBg5STk6OcnBwNHz5chw4d0rZt2zRnzhy53W698MILmjdvnkJCWFACAAAAAIDd/SD/339BQYF69+4tSerdu7cKCgp847169VJYWJiaNWum2NhYFRYWmhkVAAAAAAAEyQ9iJcZLL70kSbrnnnuUlpamU6dOyel0SpKcTqdKS0slSS6XS4mJib79IiMj5XK5gh8YAAD84I0dO1ZVC180OwYAADCQ6SXGCy+8oMjISJ06dUovvvii4uLiatzW6/X6/bm5ubnKzc2VJGVmZio6OrrOWe0sNDSUc2QjzKe9/FDnM9iZrud415uxLt/tavv+UOfzWh1Xzd+1tu933I9trmW/2j7n4Yf/v717D46qvvs4/skNkhgIuZEYCCKEqIxKigRKuAQsrZUyWDKK1qe1CMIwClhpKRel4EDnQZFGqHEcBCFEC5iZAmr/qA8gidwkgiDKpQYUAWNCsgkBkpBk9zx/MG6TuJuEZJOzZ/N+zTDDbvZ39ru/7/nt75zvnsvjKsp57abbNaVxu/r5bE2Mvqap9aK5dmpFW0+3a8/x2dq+Qev4ynctbiCfvqWt+TS9iBEZGSlJCg8PV0pKigoKChQeHq6ysjJFRESorKzMeb2MqKgolZaWOtvabDZn+8bGjRuncePGOR+XlJS046ewvujoaPrIh5BP3+Kt+ezomFrzfq2NsS2frbm23prP1nD3OVry+TyVm6aWU1BQIMfVavUPC76pdjfz/q7y6an3sqr2HD/t3a69x2dnWxfM5EvftSCfvqZxPps6kMEVU6+JUV1draqqKuf/P//8c/Xp00dDhgxRbm6uJCk3N1cpKSmSpCFDhmj//v2qra1VcXGxCgsLlZiYaFr8AADAey1YsEALvzhndhgAAMCDTD0S4/Lly3rllVckSXa7XSNHjlRycrL69++vjIwM7d69W9HR0Zo7d64kKSEhQcOHD9fcuXPl7++vadOmcWcSAAAAAAA6CVOLGLGxsVq5cuWPnu/WrZv+8pe/uGyTnp6u9PT09g4NAAAAAAB4GQ5jAAAAAAAAlkARAwAAAAAAWAJFDAAA4JPmzJmj2Ym33nQ7+/SJsk+f2A4RAQCAtqKIAQAAfNLo0aM1Krq72WEAAAAPoogBAAB80hdffKEvKyrNDgMAAHgQRQwAAOCTli5dqhdPnDc7DAAA4EEUMQAAAAAAgCVQxAAAAAAAAJZAEQMAAAAAAFgCRQwAAAAAAGAJFDEAAIBPmj9/vv58Ry+zwwAAAB5EEQMAAJjqoXdOtctyU1JSNCQirF2WDQAAzEERAwAA+KT8/Hx9WnbV7DAAAIAHUcQAAAA+6aWXXtLLpy+aHQYAAPAgihgAAAAdrL1OoQEAwNdRxAAAAAAAAJZAEQMAADTJPn2i7NMnmh0GAAAARQwAAAAAAGANFDEAAIBPWrp0qZYMTDA7DAAA4EGBZgcAAADQHu6++27Zu4eaHQYAAPAgjsQAAAA+KS8vTx+XVJgdBgAA8CCOxAAAAD5pzZo1MgoKNSq6u9mh3LQfbsG643/u9IrlAADgLTgSAwCAToy7jgAAACuhiAEAAAAAACyBIgYAAAAAALAEihgAALSTH65H0B7s0ydyKggAAOh0KGIAAACftGLFCv3v3beZHQYAAPAgihgAAMAnJSYmqn9YsNlhwMdwBBQAmIsiBgAAJnnonVPtespJZ/fhhx/q/4rKzQ7DsjhlCQDgjShiAADgIyiINLR27Vq9+XWR2WF0KAoPAABfRxEDAAAAN81KBRMKfADgOyhiAAAAAAAAS6CIAQAAAAAALIEiBgAAAAAAsASKGAAAwCetXr1arw663ewwAHgp7hAFWBNFDABAh/DUhqKVLiYIc/Xq1UvxIV3MDgMAAHgQRQwAAOCTduzYofe+s5kdBgAA8CCKGAC8Fr+4A2iL7Oxsvf3tJbPDQCMcwg8AaAuKGAAANINiGnADxQcAgNkoYgAA0EHs0yeqaFJquyy3JYUWjm4CAABWRxEDAAAAAABYAkUMAAA6sfQxL3OKAAAAsAyKGAAAwCetXbtWbwzub3YYHSp9zMsun+c0IsBcXNAW8ByKGABajI1g+BquEeGaJze0zdxoj4yMVGSXQNPeH23HTh8AoDGKGACANqMY0Dat6bv0MS+7/dUdN2zdulU5F0rMDsOyWMdaj+ILALQfihgAAMAn5eTkKOdCabss25OFu5Yuix1jAAAoYgAATNZRR3BwtAjgHuMDAGAVFDEAAPAi/NoOAG1jnz5RRZNSzQ4DQDuhiAHA0tjhAzreQ++cavW1ErjOAgAAaAuKGAAAALCEjrxNJUVyuMO6AZiLIgbQSXXk+c+caw3ADNnZ2cpKGdDka/h+an/s8HkO6ysAUMQAgJvSkb8CouU6eqOeHYn25alxFhISopAANnXQvvg+AICOxcwOAJ1AW3YKKdp0vPbcIfLl61E89M6pBn23ceNGbTpXbGJE1tKadaNxm/QxL/Od0QItHeO+1JcUe1qPH1CAhihiAIDFtOeGjKc2Mtnggjf44IMP9EFhmdlhoINZ9funPeOmgADAl1iyiHH06FE9++yzmj17trZv3252OAC8jBkba2wcwle4Wpe5o4hn8X3hfaxa+DBDS+dYT/YnYwZAfZYrYjgcDq1fv16LFi1SRkaG9u3bpwsXLpgdFmAafl2xjuY26Fqby45u197YmfAMb81va3m6iNJc33R00aazn4bhLUWyokmpzb7GW2LFf3XmseMOcyl8meWKGAUFBYqLi1NsbKwCAwOVmpqq/Px8s8OCl7LSRrxV4vQlriZ3b8vDQ++c0ojVe2+6nbeu+83F5I0xewv6xrXm+uWLHv2b3ensbAWEzvRZO4vGOW3JDqyrecLsdYMdbwAtWP46uwAAEHlJREFUYbkihs1mU1RUlPNxVFSUbDabiRGhNVq7Mc5GvPdr76MCXL2mpe08GVf95xpvcHnDetqWXwo9+StjU33R2o3s1vKGUyJaE0NbNurN3jn3hrHQnlxd1LIj17G2rBtWyE3jGD0Zsyfz1JK8P/TOqR+9pjW5c/U+Le2X9lpf2/vC0R39HdaZiijucteRxaS2vE9r2rbms7V1He9M61RH8TMMwzA7iJtx4MABHTt2TDNnzpQk5eXlqaCgQFOnTm3wup07d2rnzp2SpBUrVnR4nAAAAAAAwLMsdyRGVFSUSktLnY9LS0sVERHxo9eNGzdOK1asoIDRQgsWLDA7BHgQ+fQt5NO3kE/fQj59C/n0HeTSt5BP39LWfFquiNG/f38VFhaquLhYdXV12r9/v4YMGWJ2WAAAAAAAoJ0Fmh3AzQoICNDUqVP117/+VQ6HQ2PHjlVCQoLZYQEAAAAAgHYWsHTp0qVmB3Gzbr31Vj344IMaP3687rrrLrPD8Rn9+vUzOwR4EPn0LeTTt5BP30I+fQv59B3k0reQT9/Slnxa7sKeAAAAAACgc7LcNTEAAAAAAEDnZLlrYqB1Xn/9dR05ckTh4eFatWqVJCkjI0PfffedJKmyslKhoaFauXKliouL9dxzzyk+Pl6SNGDAAM2YMcO02NFQSUmJMjMzVV5eLj8/P40bN07jx4/X1atXlZGRoUuXLikmJkbPPfecwsLCJEnbtm3T7t275e/vryeffFLJyckmfwr8wF0+s7OzdfjwYQUGBio2NlZPP/20brnlFsanl3OXz3fffVe7du1S9+7dJUm/+c1vNHjwYEmMT2/mLp/Mn9ZUU1OjJUuWqK6uTna7XT/96U81efJk5k+LcpdP5k/rcZdL5k5rcpdPj86dBjqFL7/80jhz5owxd+5cl3/PysoycnJyDMMwjKKiIrevg/lsNptx5swZwzAMo7Ky0pgzZ45x/vx5Izs729i2bZthGIaxbds2Izs72zAMwzh//rzxpz/9yaipqTGKioqMWbNmGXa73bT40ZC7fB49etSoq6szDMMwsrOznflkfHo3d/ncunWrsWPHjh+9nvHp3dzlsz7mT+twOBxGVVWVYRiGUVtbayxcuNA4ffo086dFucsn86f1uMslc6c1uctnfW2dOzmdpJMYOHCg81eFxgzD0IEDBzRixIgOjgqtERER4bwQTkhIiHr16iWbzab8/HylpaVJktLS0pSfny9Jys/PV2pqqoKCgtSzZ0/FxcWpoKDAtPjRkLt8Dho0SAEBAZKkpKQk2Ww2M8NEC7nLpzuMT+/WXD6ZP63Fz89PwcHBkiS73S673S4/Pz/mT4tyl0/mT+txl0t3GJverbl8emLu5HQS6OTJkwoPD9ett97qfK64uFh//vOfFRISoscee4y7wHip4uJiff3110pMTNTly5cVEREh6caGd0VFhSTJZrNpwIABzjaRkZFM6F6qfj7r2717t1JTUxu8jvHp/ern89SpU/r3v/+tvLw89evXT0888YTCwsIYnxbianwyf1qPw+HQ/Pnz9f333+uBBx7QgAEDmD8tzFU+62P+tA5Xufzss8+YOy2qqbHpibmTIga0b9++BpWwiIgIvf766+rWrZvOnj2rlStXatWqVQoNDTUxSjRWXV2tVatWacqUKU3mxuAGRJbgLp///Oc/FRAQoFGjRklifFpF43z+4he/0MMPPyxJ2rp1qzZt2qSnn36a8WkR7sYn86f1+Pv7a+XKlbp27ZpeeeUVffvtt25fy/j0fq7y2adPH0nMn1bjKpfMndbV1Nj0xNzJ6SSdnN1u16FDhxpUqYOCgtStWzdJN+7fGxsbq8LCQrNChAt1dXVatWqVRo0apWHDhkmSwsPDVVZWJkkqKytzXgQpKipKpaWlzrY2m02RkZEdHzTccpVPSdqzZ48OHz6sOXPmOA/DY3x6P1f57NGjh/z9/eXv76+f/exnOnPmjCTGpxW4G5/Mn9Z2yy23aODAgTp69Cjzpw+on0+J+dPK6ueSudP6Go9NT82dFDE6uePHjys+Pl5RUVHO5yoqKuRwOCRJRUVFKiwsVGxsrFkhohHDMPTGG2+oV69emjBhgvP5IUOGKDc3V5KUm5urlJQU5/P79+9XbW2tiouLVVhY+KPTFWAed/k8evSoduzYofnz56tr167O5xmf3s1dPn/YQZKkQ4cOKSEhQRLj09u5y6fE/GlFFRUVunbtmqQbV88/fvy4evXqxfxpUe7yyfxpPe5yydxpTe7yKXlu7uR0kk7i1Vdf1YkTJ3TlyhXNnDlTkydP1v333/+jw3kk6cSJE3r33XcVEBAgf39/TZ8+3e1FQdHxTp8+rby8PPXp00fz5s2TdOOWU7/+9a+VkZGh3bt3Kzo6WnPnzpUkJSQkaPjw4Zo7d678/f01bdo0+ftTv/QW7vK5YcMG1dXVadmyZZL+e7spxqd3c5fPffv26ZtvvpGfn59iYmKctw5jfHo3d/kcPHgw86cFlZWVKTMzUw6HQ4ZhaPjw4brvvvuUlJTE/GlB7vI5e/Zs5k+LcZfLv//978ydFuQun9KPTyWRWjd3+hmcVAQAAAAAACyAkhUAAAAAALAEihgAAAAAAMASKGIAAAAAAABLoIgBAAAAAAAsgSIGAAAAAACwBIoYAABY2J49e7R48WKzw2hWZmamtmzZ0i7LXrp0qXbt2iXJOv0BAABaJ9DsAAAAQNOeeeYZlZeXy9//v789jBkzRtOmTfPI8ouLizVr1ixt3rxZAQEBHlnmzSorK9OWLVv02Wefqbq6WpGRkUpNTdXEiRMVHBxsSkwttXbtWtXU1GjWrFkNnj937pwWLlyotWvXur3nvTf0PQAAVkIRAwAAC5g/f77uvfdes8NwyW63t2kH/OrVq3rhhReUlJSk5cuXq2fPniopKdH777+voqIi3XbbbR6M1vPGjBmjZcuW6amnnmpQcMnNzdXgwYPdFjAAAMDNo4gBAIAPuXjxot566y2dPXtW3bt316OPPqrU1FRJUk1NjbZs2aKDBw/q2rVr6tOnjxYvXqwlS5ZIkqZMmSJJWrx4sRITE7Vt2zbt2rVLNTU1Sk5O1tSpUxUaGuo8emDmzJnKyclRz5499eKLL+pvf/ubTp48qZqaGvXt21dPPfWUEhISmo35gw8+UHBwsGbPnu082iQ6OlpPPvmk8zWnT5/Wxo0b9d133yk+Pl5TpkzRHXfc0ab+uHLlijIzM3Xy5EnFx8dr0KBB+vLLL7Vs2bJm29aXlJSkyMhIffLJJ0pLS5MkORwO7du3T9OnT5fD4XDbl676PikpSbt379b777+v8vJyJSYmasaMGYqJiZFhGMrKytLevXtVW1urmJgYzZkzR3369Gm2LwAA8AVcEwMAAB9RXV2t5cuXa+TIkVq3bp2effZZrV+/XufPn5ckbdq0SWfPntXy5cu1YcMG/fa3v5Wfn59efPFFSdLGjRuVnZ2tpKQk7dmzR3v27NGSJUv02muvqbq6WuvXr2/wfidOnFBGRoaef/55SVJycrLWrFmjdevW6fbbb9eaNWtaFPfx48c1bNiwBqfL1Hf16lWtWLFCDz74oN566y396le/0ooVK3TlypU29cf69esVHBystWvX6plnnlFubm6L2zaWlpamvLw85+PPP/9cdXV1Sk5ObrIvXfX9oUOHtG3bNv3xj3/UunXrdOedd2r16tWSpGPHjunkyZNavXq1Nm7cqD/84Q/q1q1bi/oZAABfQBEDAAALWLlypaZMmeL8t3Pnzh+95siRI4qJidHYsWMVEBCgfv36adiwYTp48KAcDoc++ugjTZkyRZGRkfL399cdd9yhoKAgl++3d+9eTZgwQbGxsQoODtbjjz+u/fv3y263O1/zyCOPKDg4WF26dJEk3X///QoJCVFQUJAeeeQRnTt3TpWVlc1+titXrqhHjx5u/37kyBHFxcVp9OjRCggI0MiRIxUfH6/Dhw83udzm+uOTTz7R5MmT1bVrV/Xu3dt5FEVzbV0ZPXq0Tpw4odLSUklSXl6eRo4cqcDAwBb1ZX07d+7UpEmT1Lt3bwUEBGjSpEn65ptvdOnSJQUGBqq6uloXL16UYRjq3bu3IiIimutiAAB8BqeTAABgAfPmzWv2mhiXLl3SV1995Tw1QbpxvYrRo0frypUrqq2tVVxcXIver6ysTDExMc7H0dHRstvtunz5svO5qKgo5/8dDoc2b96sgwcPqqKiQn5+fpKkiooKhYaGNvle3bp1U3l5udu/22y2BrFIUkxMjGw2W5PLbao/KioqZLfbG3yG+v9vqq0r0dHRuuuuu/Txxx/rl7/8pfLz851HWbSkLxvHvWHDBm3atMn5nGEYstlsuvvuu/XAAw9o/fr1Kikp0dChQ/W73/2u2T4GAMBXUMQAAMBHREVFaeDAgS5vMepwOBQUFKTvv/9effv2bfC3HwoO9UVEROjSpUvOxyUlJQoICFB4eLjzaIP67fbu3atPP/1UixcvVkxMjCorKxtc06Ip99xzjw4dOqSHH37Y5SklP1xvor6SkhIlJyc3udzm+iMgIEClpaWKj4+XJOfnaq6tO2lpadq+fbt69Oihnj17ql+/fpKa7ktXhZjo6Gilp6dr1KhRLt9n/PjxGj9+vC5fvqyMjAy99957euyxx1ocJwAAVsbpJAAA+Ij77rtPhYWFysvLU11dnerq6lRQUKALFy7I399fY8eO1aZNm2Sz2eRwOPSf//xHtbW16t69u/z8/FRUVORc1ogRI/Svf/1LxcXFqq6u1ubNmzV8+HC3dyGpqqpSYGCgwsLCdP36dW3evLnFcU+YMEFVVVXKzMx07uzbbDZlZWXp3Llz+slPfqLCwkLt3btXdrtd+/fv14ULFzR48OA29cfQoUOVk5Oj69ev6+LFiw2uidFUW3eGDRum0tJS5eTkNDg1pam+dNX3P//5z7V9+3bn9TcqKyt14MABSVJBQYG++uor1dXVqWvXrgoKCnJ7LREAAHwRR2IAAGABL730UoOd1XvvvVfz5s1r8JqQkBC98MILysrKUlZWlgzD0G233abf//73kqQnnnhC//jHP7Rw4UJVV1erb9++ev7559W1a1elp6dr8eLFstvtWrRokcaOHauysjItWbJENTU1GjRokKZOneo2vrS0NB07dkwzZ85UWFiYHn30UX344Yct+mxhYWFatmyZtmzZokWLFun69euKjIzUiBEjFBcXp65du2rBggXasGGD3nzzTcXFxWnBggXq3r17k8ttrj+mTZumzMxMzZgxQ/Hx8RoxYoTOnj3borauBAcHa9iwYc7rYfygqb501fdDhw5VdXW1Xn31VZWUlCg0NFT33HOPhg8frqqqKmVlZamoqEhdunTRoEGDNHHixBb1MwAAvsDPMAzD7CAAAADM9vbbb6u8vFyzZs0yOxQAAOAGxx8CAIBO6eLFizp37pwMw1BBQYE++ugjDR061OywAABAEzidBAAAdEpVVVVavXq1ysrKFB4ergkTJiglJcXssAAAQBM4nQQAAAAAAFgCp5MAAAAAAABLoIgBAAAAAAAsgSIGAAAAAACwBIoYAAAAAADAEihiAAAAAAAAS6CIAQAAAAAALOH/AeFJnTsOK2FoAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(18,8))\n", "plt.hist(cand_2_ec_totals,500)\n", "plt.hist(cand_1_ec_totals,500)\n", "plt.axvline(x=270, color='k', linestyle='dashed')\n", "plt.xlabel('Electoral College Votes')\n", "plt.ylabel('Number of Simulations')\n", "plt.title('Simulation Results')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "A variety of simulated outcomes are best suited to provide insights into the status of the Presidential Election race. We simply cannot state definitively if certain states will have a similar polling error as they did in 2016. What we can say is that is that we can have far more confidence in those weighted polling averages when a candidate is above 50% than when both candidates are below 50%.\n", "\n", "When we take the most unbiased method of distributing the undecided vote, we have a very clear winner. Yet, when we anticipate an undecided vote swing to one candidate as we did in 2016, we have a race that is closer than some covering the election portray it to be. \n", "\n", "The ability to answer \"what if\" scenarios without defending a specific methodology ensures the goal of the forecast is to inform the public as best as possible. While it may be a challenge to explain how close the race is, now we can at least explain why." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.7" } }, "nbformat": 4, "nbformat_minor": 2 }