{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Neural Network Fundamentals\n", "\n", "## Gradient Descent Introduction:\n", "https://www.youtube.com/watch?v=IxBYhjS295w" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "\n", "np.random.seed(1)\n", "\n", "%matplotlib inline\n", "np.random.seed(1)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "N = 100\n", "x = np.random.rand(N,1)*5\n", "# Let the following command be the true function\n", "y = 2.3 + 5.1*x\n", "# Get some noisy observations\n", "y_obs = y + 2*np.random.randn(N,1)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAFkCAYAAAC9wjgoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8lOW9///XNYMSQMtaUUFQISxat4AWFcQqGgiKWj2V\nsKi1WrUqPDh1af3qUWxPW9RW64LS1rZqPFHs8qOVQDAVRVx7grvIBFDB9oiQQVCRLfn8/rhnksyS\nbZbMTOb9fDzmAXPNvVxzB3J/7mv5XM7MEBERkfzly3QFREREJLMUDIiIiOQ5BQMiIiJ5TsGAiIhI\nnlMwICIikucUDIiIiOQ5BQMiIiJ5TsGAiIhInlMwICIikucUDIiIiOS5hIMB59yVzrk3nXPbQq+X\nnHMTo7a53Tn3b+fcDufcM865oclXWURERFIpmZaBjcCNQBEwCngWWOScGwngnLsRuAb4PnAC8CVQ\n6ZzbN6kai4iISEq5VC5U5JyrBa4zsz845/4N3Glmd4c++xqwCbjYzBam7KQiIiKSlJSMGXDO+Zxz\nU4HuwEvOucOAA4F/hLcxs+3Aq8CJqTiniIiIpEaXZHZ2zn0DeBkoAD4HzjOzNc65EwHDawloahNe\nkNDc8foCxcCHwM5k6iYiIpJnCoBDgUozq23PjkkFA8D7wDFAT+AC4FHn3ClJHK8YeDzJOomIiOSz\n6cD/tGeHpIIBM9sLrA+9fd05dwIwG7gDcEB/IlsH+gOvt3DIDwHKysoYOXJkMlXLeXPmzOHuu+/O\ndDWygq6FR9ehka6FR9ehka4FrF69mhkzZkDoXtoeybYMRPMBXc3sA+fcJ8DpwFvQMIDwm8ADLey/\nE2DkyJEUFRWluGq5pWfPnnl/DcJ0LTy6Do10LTy6Do10LSK0u5s94WDAOfczYAmwAdgfr1liPHBm\naJN7gJudc2vxopSfAB8DixI9p4iIiKReMi0DBwCPAAcB2/BaAM40s2cBzOwO51x3YAHQC3gBmGRm\nu5OrsoiIiKRSwsGAmV3Whm1uA25L9BwiIiKSflqbIEuVlpZmugpZQ9fCo+vQSNfCo+vQSNciOSnN\nQJgs51wRUF1dXa2BICIiIu2watUqRo0aBTDKzFa1Z99UzyYQEck5GzZsYMuWLZmuhkir+vXrx6BB\ng1J+XAUDIpLXNmzYwMiRI9mxY0emqyLSqu7du7N69eqUBwQKBkQkr23ZsoUdO3Yo2ZlkvXBSoS1b\ntigYEBFJByU7k3ym2QQiIiJ5TsGAiIhInlMwICIikucUDIiIiOQ5BQMiIpIV3n//fU4//XR69uyJ\n3+9n2bJlma5SXGPGjKGkpCTT1UgpBQMiIp2Qz+dr9eX3+1mxYkWmq9pg2rRprF27lnnz5vHYY49x\nzDHHZKwub7/9NnPnzuXf//53zGfOOZxzGahV+mhqoYhIJ1RWVhbx/pFHHqGqqoqysjKapqHPltwK\n27Zt44033uC///u/ufLKKzNdHd566y3mzp3LpEmTOPjggyM+e+GFFxQMiIhI9ps2bVrE+5dffpmq\nqqo2L+izc+dOCgoK0lG1uDZt2gRAz549O+ycLTGzZm/4Xbp0vlunuglERPJcZWUlPp+Pv/71r9x4\n440MGDCA/fbbj927d/OjH/2Ibt26xezz0EMP4fP5+PTTTyPK//73v3PyySez33770atXL84991wC\ngUCL5//xj3/MiBEjcM5xzTXX4PP5OOKIIwCYOnVq3NaL6Hrt2rULn8/HDTfcwJ/+9CeOPPJICgoK\nOProo3n22Wdj9t+4cSOXXHIJBx10EN26dWPo0KFce+21mBkLFizgoosuArzxAeEulddee62hLHrM\nwKZNm7jkkks44IAD6NatG8cddxzl5eUR26xZswafz8f8+fOZP38+Q4YMoVu3bpx00km8+eabLV6j\ndOt84Y2IiCTklltuoUePHtx4443s2LEDv9/fbP94vPLf/e53fP/732fKlCnccccdfPHFFzzwwAOM\nHTuWN998k4MOOijueUtLS+nXrx/XX389F198MWeccUZDC0F7zg9QVVXFE088wQ9+8AO6d+/Or371\nK84//3w2bNjA/vvvD3iBwPHHH89XX33FFVdcwbBhw9iwYQMLFy5kz549nH766Vx11VU89NBD3H77\n7Rx++OEADB06tOHcTX355ZeMHTuWf/3rX8yaNYuBAwfy5JNPMn36dL744gsuv/zyiO0ffvhhdu7c\nydVXX01dXR3z5s3jggsuIBAIZKz7QcGAiIgAXtP4iy++mFAz+LZt2/jP//xPZs+ezd13391QPmPG\nDEaMGMG8efO455574u579NFH07VrV66//nqOP/74mC6O9lizZg2BQIABAwYAcOKJJ/LNb36Tp556\niksvvRSA6667jq1bt7Jq1SqOPPLIhn1vv/12wLvpn3TSSTz00EOceeaZnHDCCS2e8/7772f9+vX8\n+c9/5txzzwXgyiuvZMyYMfzoRz9i5syZEV0un3zyCYFAgB49egBw6KGHMnXqVJYvX85pp52W8HdP\nhoIBEZH22LED3n8/vecYMQK6d0/vOeK49NJLE+4Pr6io4Msvv2Tq1KnU1tY2lO+7776MGjWK5cuX\np6qaLZo8eXJDIABw/PHH07VrV9avXw/A3r17efrpp7ngggsiAoFkLFmyhMGDBzcEAuCNK7j22mu5\n9NJLeemllyJu8tOnT28IBADGjRuHmbF+/XoFAyIiOeH992HUqPSeo7oaMrBo0qGHHprwvmvXrsXM\nOPHEE2M+c85xwAEHJFGztjvkkENiynr16sXWrVsB+Pe//81XX32VskAA4KOPPmL48OEx5SNHjsTM\n+Oijj1qsY+/evQEa6pgJCgZERNpjxAjvZp3uc2RAvIGCzfVh19XVRbyvr6/HOcfChQsbbm5N7bvv\nvgnVqa3nD/P7/XHLm06nzLRsrKOCARGR9ujePSNP7ZnSu3dvdu3axe7duyNu6B9++GHEdkOGDAGg\nf//+jB07NqXn/+yzz2LKo8/fVgcffDDdunXjnXfeaXG79gzkGzx4cNwZE6tXr8Y5x+DBg9tdz46m\nqYUiItLszW/IkCGYWUSmwu3bt/P4449HbFdSUkL37t356U9/Gvepvek4gvYYMmQIn376KTU1NQ1l\nGzZsYPHixQkdr0uXLpx99tn8+c9/bjEg6NGjB2YWNxCJVlJSwkcffcSiRYsayvbu3cv9999Pr169\nOPnkkxOqa0dSy4CIiDTbRH3WWWdx4IEHMnPmTK677jrMjIcffpgBAwbwySefNGzXp08f7r33Xi6/\n/HJGjx7NhRdeSN++ffnwww95+umnKS4u5o477mh3vWbMmMHNN9/MWWedxTXXXMP27dt58MEHGTly\nJO+9915C33XevHk899xznHTSSVxxxRUMHz6cjz/+mIULF/LGG2+w7777ctxxx+Gc46c//SmffPIJ\nXbt25cwzz4zbBXL11Vfzu9/9jmnTpnHNNddwyCGH8MQTT7Bq1SoeeughunbtmlA9O5KCARGRPNFS\n03dzn+27774sWrSIa665hptvvpmDDz6Y6667Dp/PR3XU2Invfve7DB48mHnz5jFv3jz27NnDgAED\nGD9+PDNmzEiofgcccAB/+ctfuO6667jhhhsYMmQI99xzD9XV1THBQFtzEgwePJhXX32VW265hUcf\nfZTPP/+cgQMHctZZZ7HPPvsAMGjQIB544AHuvPNOLrvsMurq6nj55Zcbphk2PV6PHj144YUX+NGP\nfsQf/vAHPv/8c0aOHMnjjz/O1KlTW/2OLdW9o7hsGlThnCsCqqurqynKoz45EcmcVatWMWrUKPR7\nR7Jda/9Ww58Do8xsVXuOrTEDIiIieU7BgIiISJ5TMCAiIpLnFAyIiIjkOQUDIiIieU7BgIiISJ5T\nMCAiIpLnFAyIiIjkuYSDAefcj51zrznntjvnNjnn/uqcGxa1zR+cc/VRr4rkqy0iIiKpkkzLwDjg\nPuCbwARgH2CZcy56DcwlQH/gwNCrNIlzioiISIolvDaBmZU0fe+cuwT4FBgFrGzy0S4z25zoeURE\nRCS9UjlmoBdgQDCq/NRQN8L7zrn5zrk+KTyniIik0G233YbP5yMYjP5V3vmFv3s+Ssm3dt5SS/cA\nK82s6TJSS4CLgNOAG4DxQIXL5NJMIiJ56L333mPGjBkMHDiQgoICBgwYwIwZM9q88l9n8dVXXzF3\n7lxWrFgR85lzTsFAkuYDRwARazWa2UIze9rM3jWzvwFnAScAp6bovCIi0oq//OUvFBUVsXz5ci69\n9FIefPBBLrvsMp577jmKiopYtGhRpqvYYXbs2MHcuXN57rnnYj675ZZb2LFjR8dXKgskPGYgzDl3\nP1ACjDOz/2tpWzP7wDm3BRgKLG9uuzlz5tCzZ8+IstLSUkpLNfZQRKQ91q9fz0UXXcTQoUNZsWIF\nffo09tTOnj2bsWPHMnPmTN566y0OPfTQzFU0ipmxe/duunbtmvLjNsfn87Hvvvum9HzpUl5eTnl5\neUTZtm3bEj+gmSX8Au4HNgKHt3H7gUAdcFYznxcBVl1dbSIiHaG6utpS/Xtnz5499sADD9jo0WNs\n6NCRdsUVV9jatWtTdvz2uOKKK8zn89mLL74Y9/MVK1aYc86uuuoqMzO77bbbzOfz2fvvv2//8R//\nYV/72tesb9++Nnv2bNu5c2fEvsuWLbOxY8dar169bL/99rPhw4fbTTfdFLHNrl277L/+679s6NCh\n1rVrVzvkkEPshhtusF27dkVs55yza6+91h5//HE78sgjbd9997WnnnrK+vTpY5deemlMvbdv324F\nBQV2/fXXm5nZ7t277ZZbbrFRo0ZZz549rUePHjZu3Dhbvnx5wz4ffvihOefM5/OZc67hNXfuXDMz\nu/XWW805F3GevXv32u23325Dhgyxrl272qGHHmo33XRTTP0HDx5sZ599tq1cudJOOOEEKygosMMP\nP9weffTRiO327Nljt912mxUWFlpBQYH17dvXxo4da1VVVXF/Pk219m81/DlQZO29n7d3B2u8cc8H\ntuJNMezf5FUQ+rwHcAfe1MPBwOnA/wKrgX2aOaaCARHpUG0NBurr6+3FF1+0hx9+2J599lmrq6tr\ndrvzzjvfnPOZc+caXG1duhxk++/fy9555510fIUWDRgwwA4//PAWtznssMNs0KBBZuYFA845O/ro\no+2cc86x+fPn20UXXWTOObv44osb9nn33Xeta9eu9s1vftPuu+8++81vfmM33HCDnXrqqQ3b1NfX\n25lnnmn77bef/fCHP7Tf/va3NmvWLNtnn33svPPOi6iDc86OOOII69+/v/3kJz+xBx980N588037\n3ve+Z3369LE9e/ZEbP/II4+Yz+ezVatWmZnZli1bbMCAAXbdddfZggUL7K677rKRI0da165d7c03\n3zQzsy+//NIWLFhgzjk7//zz7fHHH7fHH3/c3n777Ybv7vP5Is5z8cUXm3POLrzwQnvwwQftkksu\nMeecffvb347Y7tBDD7URI0bYQQcdZDfffLPNnz/fRo8ebX6/3957772G7W666Sbz+Xx25ZVX2sMP\nP2x33323TZ8+3e64444Wf0Zm2RsM1Iee8qNfF4U+LwCWAp8AO4H1wIPA11s4poIBEelQbQkGNm3a\nZKNHjwn/ojXARoz4hq1fvz5m26qqqtA2Cw0s9PrM/P5CO+ec8+Ic3Wznzp32yCOP2PTp0+173/ue\nLVu2zOrr65P+btu2bTPnXMyNN9o555xjPp/Pvvjii4ZgIHqfq6++2nw+X8ON85577jGfz2fBYLDZ\n4z722GPWpUsXe+mllyLKFyxYYD6fz15++eWGMuecdenSxd5///2IbZctW2bOOVu8eHFEeUlJiQ0d\nOrThfX19fUzAsG3bNjvwwAPtsssuayjbsmVLRGtAU9HBwJtvvmnOObviiisitrv++uvN5/PZc889\n11B26KGHxrTAbN68OaL1wszs2GOPtbPPPjvm3G2RzmAg4QGEZuYzM3+c16Ohz3ea2UQzO9DMCszs\ncDO7ypRzQERyzPTpF/HGGx/iTZDaA6xg7dqvOOec82P6oBcvXkyXLoOBC5qU9qSu7vssXvx0zPaf\nf/45J598ChdffDFPPFHDI4+s5Mwzz+Sqq37QYv92W3z++ecA7L///i1uF/58+/btgDeq/uqrr47Y\n5tprr8XMqKjwksj26tULgL/+9a/N1vNPf/oTI0eOZNiwYdTW1ja8vvWtb2FmLF8eOXTs1FNPZfjw\n4RFlp512Gv369ePJJ59sKPvss8+oqqpi6tTGMevOObp08YbBmRlbt25l9+7djB49mlWrVrX4/ZtT\nUVGBc445c+ZElP/whz/EzFi8eHFE+RFHHMFJJ53U8L5fv34MHz6c9evXN5T16tWLd999l7Vr1yZU\np3TJzzkUIiJt9MEHH1BVVcnevXcBE/HGXY9j794Hefvt13nttdcitvduSLvxGk+b2onfHztme968\nebz++jvAq9TVvcrevauBB1mw4CGeeeaZpOoevsmHg4LmxAsahg4dGrHNkCFD8Pl8fPjhhwBceOGF\nnHzyyVx++eX079+f0tJSnnrqqYjAoKamhnfffZevf/3rEa/hw4fjnOPTTz+NOEe8AYx+v5/zzz+f\nRYsWsWfPHgD+/Oc/s3fvXr7zne9EbPvII49wzDHHUFBQQN++fTnggANYvHhxwgPrPvroI3w+X8y1\n6N+/P7169eKjjz6KKB80aFDMMXr37s3WrVsb3t9+++189tlnDBs2jKOPPpobbriBt99+O6H6pZKC\nARGRFmzcuDH0t6KoT0YBsGHDhojSb3/72+zd+394w6rCPsbvf5Dzz/92zBz+xx57gvr6mXizrgEc\ncAVduoyIeBpOxNe+9jUOOugg3nrrrRa3e+uttxgwYAD77bdfs9tE17ugoIAVK1ZQVVXFRRddxNtv\nv82FF17ImWee2RAQ1NfXc9RRR/GPf/yDqqqqiNczzzzDD37wg4hjdusWnc3eM3XqVLZv386SJUsA\nWLhwISNGjOCoo45q2KasrIzvfve7FBYW8vvf/57Kykqqqqo47bTTqK+PDszap615F/x+f9zypgHS\nuHHjWLduHX/4wx846qijePjhhykqKuL3v/99UnVMloIBEZEWjBgxIvREH73Gmve+6Q0JYMyYMVx9\n9TXALPz+0cA5+HzDOOAAPz//+c9iju/Na+8dVeqor++dkjnvZ511Fh988AEvvfRS3M9feOEFPvzw\nQ84+++yI8pqamoj3a9eupb6+Pubp/Vvf+hZ33XUX77zzDv/93//Ns88+29D8P2TIEILBIN/61rc4\n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\nks1GL7ZenAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(x,y_obs,label='Observations')\n", "plt.plot(x,y,c='r',label='True function')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradient Descent\n", "\n", "We are trying to minimise $\\sum \\xi_i^2$.\n", "\n", "\\begin{align}\n", "\\mathcal{L} & = \\frac{1}{N}\\sum_{i=1}^N (y_i-f(x_i,w,b))^2 \\\\\n", "\\frac{\\delta\\mathcal{L}}{\\delta w} & = -\\frac{1}{N}\\sum_{i=1}^N 2(y_i-f(x_i,w,b))\\frac{\\delta f(x_i,w,b)}{\\delta w} \\\\ \n", "& = -\\frac{1}{N}\\sum_{i=1}^N 2\\xi_i\\frac{\\delta f(x_i,w,b)}{\\delta w}\n", "\\end{align}\n", "where $\\xi_i$ is the error term $y_i-f(x_i,w,b)$ and \n", "$$\n", "\\frac{\\delta f(x_i,w,b)}{\\delta w} = x_i\n", "$$\n", "\n", "Similar expression can be found for $\\frac{\\delta\\mathcal{L}}{\\delta b}$ (exercise).\n", "\n", "Finally the weights can be updated as $w_{new} = w_{current} - \\gamma \\frac{\\delta\\mathcal{L}}{\\delta w}$ where $\\gamma$ is a learning rate between 0 and 1." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions\n", "def f(w,b):\n", " return w*x+b\n", "\n", "def loss_function(e):\n", " L = np.sum(np.square(e))/N\n", " return L\n", "\n", "def dL_dw(e,w,b):\n", " return -2*np.sum(e*df_dw(w,b))/N\n", "\n", "def df_dw(w,b):\n", " return x\n", "\n", "def dL_db(e,w,b):\n", " return -2*np.sum(e*df_db(w,b))/N\n", "\n", "def df_db(w,b):\n", " return np.ones(x.shape)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# The Actual Gradient Descent\n", "def gradient_descent(iter=100,gamma=0.1):\n", " # get starting conditions\n", " w = 10*np.random.randn()\n", " b = 10*np.random.randn()\n", " \n", " params = []\n", " loss = np.zeros((iter,1))\n", " for i in range(iter):\n", "# from IPython.core.debugger import Tracer; Tracer()()\n", " params.append([w,b])\n", " e = y_obs - f(w,b) # Really important that you use y_obs and not y (you do not have access to true y)\n", " loss[i] = loss_function(e)\n", "\n", " #update parameters\n", " w_new = w - gamma*dL_dw(e,w,b)\n", " b_new = b - gamma*dL_db(e,w,b)\n", " w = w_new\n", " b = b_new\n", " \n", " return params, loss\n", " \n", "params, loss = gradient_descent()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "iter=100\n", "gamma = 0.1\n", "w = 10*np.random.randn()\n", "b = 10*np.random.randn()\n", "\n", "params = []\n", "loss = np.zeros((iter,1))\n", "for i in range(iter):\n", "# from IPython.core.debugger import Tracer; Tracer()()\n", " params.append([w,b])\n", " e = y_obs - f(w,b) # Really important that you use y_obs and not y (you do not have access to true y)\n", " loss[i] = loss_function(e)\n", "\n", " #update parameters\n", " w_new = w - gamma*dL_dw(e,w,b)\n", " b_new = b - gamma*dL_db(e,w,b)\n", " w = w_new\n", " b = b_new" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0078296405377948283" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dL_dw(e,w,b)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nIDroFwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(loss)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAGHCAYAAAD7t4thAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4VNXWBvB306uANBGQoghiJypVQVEsYKPIDVVAEAUU\n7N6r3k+vigUkoKCCBAglgAqKFbsoAipNpQlSBJQOiaEns74/3gwJIW2SmZxM8v6eZ56YmTNn1gzI\nWbP32ms7M4OIiIhIKBXxOgAREREp+JRwiIiISMgp4RAREZGQU8IhIiIiIaeEQ0REREJOCYeIiIiE\nnBIOERERCTklHCIiIhJySjhEREQk5JRwiBRSzrnJzrlNae7zOeee8iqmQIRTrCKihEMkzznn6jrn\nXnPOrXPOHUy+rUq+78I8DMWSb1ndF1TOuUjn3P2hfI1w5Zy70Tn3X6/jEAmFYl4HIFKYOOc6AJgJ\n4DiA6QBWAvABaASgI4CBzrl6ZrbVoxBLA0gM8Wt0A3A+gNEhfp1wdBOAewE87XUgIsGmhEMkjzjn\n6gOIBbAJQFsz25Xm8UfBi40vi/OUMbNDoYjRzI6F4rySbc7rAERCRVMqInnnUQBlAPRJm2wAgJn5\nzOw1M9vuvy+5zuIf51x959zHzrl4ANOSH2vlnJvtnNvinDvinPvTOfeKc65U2nM7525zzv3mnDvs\nnPvFOXdbegGmVxfhnDvTORftnNuR/Dq/Oef6pDmmdfJzuzjn/uOc25r8Wl84585OddzXANoDqJN8\nvM85tzGzD805V8I5N8o5t8s5F++ce885VzODY7OMNfm4IcmPHXTO7XPO/eSc+1c655ronNuefK6N\nzrlxzrliqY6p4JyLSv7sjzjn1jvnHnHOuVTH+N/rA865/s65DcnH/uicuyzVcZPAhNP/5+BzziVl\n9tmIhBONcIjknfYANpjZzwE8x8D/T+cD+A7AgwD8oxtdwCmQcQD2ArgCwBAANQF09Z/AOdcOwDsA\nfgPwGIDKACYB2JbVizvnqgFYAiAJwBgAewDcCGCic668mY1J85THko99GUAFMMmaBqB58uPPJt9f\nE8BQ8Bt9QhZhTASnYaYDWATgGgAfIU2tSXZjdc71B6dzZgOIAlAKwEUAmoLTXXDO1QDwE4DTALwJ\nYF1yzJ3BpDHeOVcawAIANQC8AWArgBYAhgM4A8ADad5HdwDlko+15M/mXedcfTNLSr7/TADXJh+r\n0Q4pWMxMN910C/ENQHlwquTddB6rACYB/lupVI9NAi+gz6bzvJLp3PcoWINRK9V9y8Hkolyq+9om\nx7MxzfN9AJ5K9ftbyc+tmOa4GQD2+WMA0Dr5ub8BKJrquCHJ8TdOdd8HaV83k8/touTzjklz/7Tk\n8+Yk1rkAfsnidaeAdTaXZnLMEwDiAdRPc//zAI4BqJn8e53k97ALwGmpjrs5+T3clOq+VwEkef33\nVTfdQnHTlIpI3jgt+Wd63+a/AbA71e3edI55I+0dZnbU/9/OuTLOucrgCEARAJcm338GgIsBTDaz\nhFTP/RLA6mzE3RFMEIo65yr7bwA+AxOlJmmOjzZ+W/f7DvymXj8br5Wem8DRgFfT3B+FU0cAMou1\nYqpYDwColXo6I7Xk6ZBbAcwzs+WZxNYZfH9xaV7vS3BU6qo0x880s/hUv+f2sxEJK5pSEckb/yT/\nLJfOYwPAEZDqSK7PSCPRzE6Z/nDO1QbwP/CbcqVUDxmYDAD8dg0AG9I57zokJybpcc5VBS/UAwDc\nnc4hBqBamvvSrq7Zn/yzEnLGPzrwR5r716X+JcBYXwRHeH50zm0AE5IZZvZD8uNVwQRxVRaxNQBw\nIZgkZvZ6fid9NmZ2ILnUI6efjUhYUcIhkgfMLN459zeAC9J57CeAxYVIf97+aNo7nHNFAHwBXmSH\ngxfgg2CdwRQEpyDcf45pyedMzy9pfs+oyDHU9QjZjtXM1jrnGgLoAOAGcGTkXufc02YWyHLUIgA+\nBxOY9N7f72l+9+qzEckXlHCI5J2PAPRzzl1mgRWOpudC8Bt2TzOb7r/TOXdtmuO2JP9skM45Gmbx\nGrvBkZmiZvZVTgNNRyCNxbaAF/azAaxPdX+jNMcFFKuZHQbwNoC3k1edzAXwH+fc8ORzxSOd5DCN\nP8C6mK+z80ayKaRN10S8pBoOkbzzEoDDAKKTV1SkFcj/j/5vy2mfMxSpLlpmtgPACgC9nXPl/fc7\n564D0DizFzAzH4B3AXRyzp2f9nHnXJUA4k3tIFKmfLLyCTgCcF+a+9O+z2zH6pw7PfVjZpYIYE3y\n6xQ3MwPwHoCbnXNpa1RSmw2gefIqoLSvV8E5VzSL95aeg8nPPy2rA0XCjUY4RPKImW1wznUDV02s\nc875O406APXApZ9JyMZyVQBrwW/YI51ztcBv5J3AKZa0HgfwIYCFzrlocCXMYHBFSXo1Jak9BqAN\ngCXOuQlgoenpACLA5ak5STqWArjDOTcSXHqaYGYfpnegma10zsWCUx4VAfwA1l+cjVOnIrIb62fO\nuR0AFgLYCSZegwB8aGYHk4/5N4DrACxwzo0HE5IzwULRlsnFny8DuAXAh865ycnvqyy4sqYjgLrg\n6phAPxsH4FXn3HxwxcqsAM8hkj95vUxGN90K2w1MLl5DSt1FAlig+BqAC9McOwlAXAbnaQj254gD\nL5yvg9MASQB6pTn2NjDBOATgV3AVxiQAf6Q5LgnAk2nuqwL2tdgM4AiA7WChZd9Ux7ROfm7HNM+t\nkzYesI/FVLB3SBKyWCILoASAUeCy0nhw+uPMXMR6F4Cvk893CKy1GI5Uy4aTj6uV/BntSD5uPdi/\no1ia9/Js8p/l4eQ/h+/AEZiiaT6DYem8t5PeAzhiFZX8monQElndCtDNmWnKUEREREIr7Go4nHMD\nnXMrnXNxybcfnHM3eB2XiIiIZCzsRjicc+3BYcj14FznnQAeBnCJma3xMDQRERHJQNglHOlxzu0F\n8JCZTfI6FhERETlVWK9SSW5+dAdYuLXI43BEREQkA2GZcDjnLgATjFJgs5/bzWytt1GJiIhIRsJy\nSiW5M+BZYPOgzgD6A7gqvaQjeTOl65GyTE5ERESypxTYU2a+me3NzYnCMuFIyzn3OYANZnZPOo91\nAzD91GeJiIhINnU3sxm5OUFYTqmkowiAkhk8thkApk2bhvPOOy/PAioIhg0bhlGjRnkdRljRZ5Yz\n+twCp88sZ/S5BWbNmjXo0aMHkHwtzY2wSzicc8+D+yv8CW7p3R3scnjKfgbJjgDAeeedhyZNMtsW\nQdKqUKGCPrMA6TPLGX1ugdNnljP63HIs1yUJYZdwAKgGbj9dA2zp/AuAdhbc3SxFREQkiMIu4TCz\nu7yOQURERAITdq3NRUREJPwo4ZAMRUZGeh1C2NFnljP63AKnzyxn9Ll5p0Asi82Mc64JgKVLly5V\noZCIiEgAli1bhoiICACIMLNluTmXRjhEREQk5JRwiIiISMgp4RAREZGQU8IhUsAtWQJ8/bXXUYhI\nYRd2fThEJDAjRgA7dgDffed1JCJSmGmEQ6SAa9UK+Okn4OhRryMRkcJMCYdIAdeqFZONn3/2OhIR\nKcyUcIgUcBdfDJQtCyxc6HUkIlKYKeEQKeCKFQOaNQO+/97rSESkMFPCIVIItGrFEQ6fz+tIRKSw\nUsIhUgi0bAns2wesW+d1JCJSWCnhECkEmjUDihTRtIqIeEcJh0ghUL48i0dVOCoiXlHCIVJItGql\nEQ4R8Y4SDpFComVL4I8/2HVURCSvKeEQKSRateJPTauIiBeUcIgUEjVrAnXqKOEQEW8o4RApRFTH\nISJeUcIhUoi0agUsWwYcPOh1JCJS2CjhEClEWrYEkpKAJUu8jkREChslHCKFyPnnAxUrqo5DRPKe\nEg6RQqRIEaBFCyUcIpL3lHCIFDKtWgE//MCpFRGRvKKEQ6SQadkS+Ocf4NdfvY5ERAoTJRwihczl\nlwPFi2t5rIjkLSUcIoVM6dJARASnVURE8ooSDpFCqFUr4LvvADOvIxGRwkIJh0gh1KoVsG0bsHWr\n15GISGGhhEOkEGrenD+1PFZE8ooSDpFCqFo1oFEjYMECryMRkcJCCYdIIdWiBbB4sddRiEhhoYRD\npJBq0QL45RfgwAGvIxGRwkAJh0ghdfXVgM+nfhwikjeUcIgUUvXqAVWqAD/95HUkIlIYKOEQKaSc\n42oVFY6KSF5QwiFSiF13HZfGHjnidSQiUtAp4RApxK64Ajh+HFi1yutIRKSgU8IhUohdeCE3clMD\nMBEJtbBLOJxzjzvnfnTOxTvndjrn5jrnzvU6LpFwVKYMcNVVwMcfex2JiBR0YZdwALgSwKsAmgK4\nFkBxAJ8550p7GpVImGrTBvjxR23kJiKhVczrAAJlZjel/t05dyeAXQAiAKijgEiAGjcG9u8HduwA\natTwOhoRKajCcYQjrYoADMA+rwMRCUfNm3OJ7GefeR2JiBRkYZ1wOOccgCgA35vZaq/jEQlHNWqw\nzfncuV5HIiIFWdhNqaQxDkBjAC2zOnDYsGGoUKHCSfdFRkYiMjIyRKGJhI/mzZVwiBR2sbGxiI2N\nPem+uLi4oJ3fWZhWijnnXgNwM4ArzezPTI5rAmDp0qVL0aRJkzyLTyScjBsHDB0KHDoEFAv3ryEi\nEjTLli1DREQEAESY2bLcnCssp1SSk41bAVydWbIhItnTrBkbgKmOQ0RCJewSDufcOADdAXQDcNA5\nVz35Vsrj0ETC1qWXsgnY5MleRyIiBVXYJRwABgI4DcA3AP5KdbvDw5hEwppz3Fdl5UqvIxGRgirs\nZmvNLByTJJF8r3JlYJ8Wl4tIiOjiLSIAgFq1gL17gT9VFSUiIaCEQ0QAAB07AhUrAqNGeR2JiBRE\nSjhEBABQrhwwcCDw1lvaV0VEgk8Jh4icUK8ekJDAIlIRkWBSwiEiJyQlAUWLeh2FiBRESjhE5ISK\nFZl0LF/udSQiUtAo4RCREzp1Ai64ALjnHsDn8zoaESlIlHCIyAnFiwNjxwJLlgAff+x1NCJSkCjh\nEJGT1K/PnyocFZFgUsIhIifZsoU/69b1NAwRKWCUcIjISbZu5c+KFb2NQ0QKFiUcInKS5s2BSpWA\n3r2BY8e8jkZECgolHCJykjp1gLlzgQULgEGDvI5GRAoKJRwicorWrYHBg4HZs9XmXESCQwmHiKRr\n5UqgVSutVhGR4FDCISKnSEgAvv8euOEGryMRkYJCCYeInOLbb1kw2rKl15GISEGhhENETlGjBlCh\nAtC5M7uOiojklhIOETlFkybcwK1aNdZxREV5HZGIhDslHCKSrnr1gO++Y8Lx5JNarSIiuaOEQ0Qy\nlJAALF3K3WO1WkVEckMJh4hk6LXXgOPHgQce8DoSEQl3SjhEJF0JCazduOsu4IwzvI5GRMKdEg4R\nSdekScC+fdxbRfUbIpJbSjhEJF0XXACccw7QvTvQuDEwahSwd6/XUYlIuFLCISLpuvpqYN064Msv\ngYsvBh59FKhZE4iN9ToyEQlHSjhEJENFigDXXAPMnAk8/TRw9ChQsaLXUYlIOFLCISJZWrmSCceQ\nIcCNN3odjYiEIyUcIpKpgweBrl2BRo2Al17yOhoRCVfFvA5ARPK3++4Dtm4Fli0DSpXyOhoRCVdK\nOEQkQ7GxQHQ0l8g2bOh1NCISzpRwiEi6kpKAgQOB4sWB+fOBTZuAc88FGjTgTxWPikgglHCISLqK\nFAFGjgQWLwbWrwe++QbYsSPl8apVgQ4dOAIiIpIVJRwiki7n2Nb8rrtS7ouPBzZsAF55BZg+XR1I\nRST7tEpFRLLttNM4tTJrFleuTJjgdUQiEi6UcIhIts2ezUTjjjuAadOAYhojFZFsUsIhItkSGwtE\nRvIWE6NkQ0QCo4RDRLI0bRrQowfQsycweTJQtKjXEYlIuFHCISKZiokBevUCevcGJk5UsiEiOaNB\nURHJ0KRJQL9+QLduwIsvAn/9BRw+nPmtRQvg/PO9jlxE8puwSzicc1cCeBhABIAaAG4zs3neRiVS\n8KxcyWTDjEtgp0/P3vPuvx+IigptbCISfsIu4QBQFsAKABMBzPE4FpECq0EDYPx49uMoXTrjW1IS\nk4z584GhQ7XBm4ikL+wSDjP7FMCnAOCccx6HI1JglSlzctOv9KxaBXTqBGzfziWzXbrkTWwiEn5U\nNCoiOTJjBnDFFVwe+/PPSjZEJHNKOEQkIEePAoMGAd27Ax07AkuWaCdZEcla2E2piIh3tmxhl9EV\nK4DXXwfuvps1HiIiWSk0CcewYcNQoUKFk+6LjIxEZGSkRxGJhJdPP+WoRvnywPffA5df7nVEIhJM\nsbGxiI2NPem+uLi4oJ3fWRhv9+ic8yGLZbHOuSYAli5duhRNmjTJu+BECoikJOCZZ4D//Q+44QZg\n6lSgcuXMn7N3L7BmDbB6dcrP338HnnwS6Ns3b+IWCURSEvvM1K7tdST5y7JlyxAREQEAEWa2LDfn\nCrsRDudcWQDnAPAP5NZ3zl0MYJ+ZbfUuMpGCZ88ejmp8/jmTjn//GyiSXPllBvz996mJxZo1wK5d\np57roouAli3zNn6RrGzaxAZ3kyfz7/OePUCawXAJkrBLOABcBuBrAJZ8G5l8/xQA+u4kEiRLlnDl\nyaFDwJtvAjVrAq+8cnJi4R9tLVECOPdcoHFjoE0b/ty2DRg5kqMd//d/wIMPAsWLe/mOROjwYWDO\nHCA6GvjqKybRHTvy76iSjdAJu4TDzL6FVteIhNTUqewyevw4fx8wgD/LlgUaNWJCccst/HneeUD9\n+im7x+7dCzzwAPdgadOGzcMaNPDkbYicYAYsXcokY8YMJssVKgAPPQQMHgzUqeN1hAVf2CUcIhJ6\nv/3GolB/QuH/Wbt2ypRKWmbcwv7++4HEROCtt1ivoVUs4qU9e9iWPzoa+OUX3tegAfDcc9yQsFw5\nb+MrTJRwiMgpXnwxsOO3bAEGDuRKljvuAEaPBs44IzSxiWQlKYl1RxMnAu+/nzJS17Yt2+/fdFPG\nibOEjhIOEcmxpCTg1VeBJ54AKlUC5s0Dbr7Z66iksNq4MaUAdNs23leyJEfahg4FLrzQ0/AKPSUc\nIpIjK1cC/fuzrfmgQRyiPu20nJ3LjEWo334LfPMNf581S9MxkrVDh1gAOnEi/+74Va/Ov5d33w1U\nq+ZZeJKKEg4RCcjhw+zJ8fLLXJmycCHQvHlg5/D5uNLFn2B8+y2wezcfK1EC+M9/lGxIxsyY6E6c\nyLqh+PiUxy69FBg2jFN7JUt6F6OcSgmHiGTb119zxcqff7KJ12OPMUHIis/HQlR/grFgAYv5/Mtk\n/XPsd9wBDB/OVS8iae3eDUybxgLQ335Lud854LbbOG1y5ZVKVvMrJRwikqX9+4GHH+Y3ylatWKtx\n3nkZH+/zcUVA6gRj3z4mGE2bssC0WjVg7lwmMc2bs2dHoCMlUvAlJQHz5zPJmDcvJTkF2Ga/Xz9g\nyBAlqeFACYeIZMgMeOcd/oN++DDwxhus20hb4Z+UxJoOf4Lx3XdMUkqUYBIxeDB7cjRrBvzzDxuB\nDR8OnHUWMHs20LmzvpXKyTZsYAHolCnA9u0nP1a/PnDffUCfPjmvG5K8p4RDRNK1bRtw773ABx8A\nt9/O1Sg1a/KxxETuGJs6wYiLA0qVYoJx//1MMJo25X0AE5aoKCYaRYsCL73Eoj7Ns4vfwYPAu+9y\nNOPbb099vHVr1md06MC/QxJelHCIyEl8Pm49//jjbIr07rvsKrpsGTs0fvMNd4uNjwdKlwZatGBL\n6DZtgCuuODWB8PnYeOk//wF27GCS8eSTwOmnBzfuffuATz7hsPt333HlQrNmwX2NcLZqFZeN5rdl\ny2bAjz8yyYiN5QhY7dpcZh0Xxw62kZFMYi+91OtoJTeUcIjICatWccpk0SLg4ouBG28EJkwA7ryT\nF4IyZbgB2yOPMMG4/PLMi0a/+YbJyLJlQKdOwAsvAOecE7x4N25kgvH++0wykpIYT//+3CyusNu9\nmxfxKVP4Z1CvHpte5YfRgV27UgpAV60CatVin4y4OP5etSoT04ED1USuoFDCISI4ehR4/nlOd/iL\n8lau5Dx6q1Yc7WjTBoiIyN6qlLVrgUcfZTLQtClHRIKxU6zPx2/D8+bxtmpVymPFi3MFzeOPF+4t\nxo8cAT78kHvZfPIJp7/OOQcYN46tvL1MNhITWQA6cSKn6ooUAW64ATj/fK46+eEHJorR0RzV8E/H\nScGghENE8NJL3H6+XDng2ms5V96mDdCkSWA7vO7eDTz9NItLa9cGZs7kUtfcFIQeOgR8+SUTjA8+\nAHbu5EjLoUN8vFgxdpL897/zbgOuP/9ksevs2fy8nn8+b143I2bA4sVMMmbOBA4c4P0tW3KE6ZZb\nvE001q9PKQD96y+Onj38MEczZs/mhn8dOgCvvca/dyogLpiUcIgIBg0C2rfnt8tiOfhX4cgR7p/y\n/PO8WAwfzpUtOf2GunMnv6XPm8c9MQ4fZpOxLl1YB/LttxyVufNO1obUq5ez1wnEjh1csTNzJpud\nAawRufXW0L92RjZv5s6+MTEcjQI4atC5MxMNL2tYDh7k5zVxIqe7KlYEuncHLrmEf34jRnC0rG9f\n/l3RjsIFnxIOEcHpp+esiNPn4wX48cf5zfWee4CnngKqVAnsPP7W5v6pksWLmbi0aMERk3bt2Mtj\n+HDO/ffqxf1bQt17Ye9eFp/OnMl6FJ+P97drx/fcunXefxuPj+eFPCbm5JUcZcqk7Bly9tl5G5Of\nGbBkCZOMmTOBhASOAE2dyhGWN94Axo7lSNQLLzDeihW9iVXynhIOEcmRBQuAhx4CfvqJy2Y//5yj\nENmVmMjaDn+S8ccfQNmywPXXc/j9ppvYY2HiRI6+/P030KMHCwmDWXiaVnw8i1BnzgQ++4xxAkws\nOndmd9WIiNC9fnoSE4EvvmCSMXcuR5T8qldnT4qBA4O/8ie7du5kUhEdzcTxrLM4wnL77cBXX/HP\nbPNm1gO98w5HhXIykibhTX/kIhKQ339nQeh77wGXXcZv2Vddlb3nxsezaHDePOCjj9gcrEYN1hiM\nGQNccw2nYY4dY9Lx3HPsB9KtG0dOAkloAnHoEKdwZs4EPv6Y0zV+xYsDPXtyZU7DhqF5/Yz8+iuT\njOnTmXCl1rgxE75u3bzpZZKYyKLU6Gh+dkWLMsEYPRqoW5cjGVdeyemwrl2Bt9/m3xcpxMysQN8A\nNAFgS5cuNRHJud27zYYMMStWzOyss8ymTzdLSsr6eX/+afbaa2bt2pkVL24GmF10kdmTT5r99NPJ\n5zh2zGzCBLM6dcycM4uMNFuzJjTv58gRs/ff52uULcu4zjjDrEgR/neZMmZDhzL+vLRjh9moUWaX\nXMI4SpbkZ8EJC7O2bc0++cTM58vbuPzWrjV79FF+VoDZpZeavfqq2d69Zl9/bXbrrYy3cmWz//zH\nbPt2b+KU4Fi6dKkBMABNLJfXY41wiEimjhxhl9HnnuMl79ln2YQpo4JQM2D58pSpkuXLOXzepg33\nS7n5Zn4DTu34cQ7JP/sssGkTV7Z89BGXSwbT8eMc4p81i7UZcXHs/dCpE4f8Fy0CKlRgEeOQIYHX\nouTUkSP8rGJigE8/5WhBkybcr2bLFv7etSunKbxofpWQwBGK6GhOg1WqxALQvn050jJzJtC2LbvP\nnn8+MH48Hy9dOu9jlXwstxlLfr9BIxwiOeLzmcXGmtWta1a0qNmgQWa7dqV/7JEjZp9+anbvvWa1\navGbb4UKHD2YOdPswIH0n3f8uNnkyWZnn83ndOpk9ssvwX0fiYlm33xjNnCgWZUqfJ0GDcyeesos\nJoav6ZxZjRpmI0aYxccH9/Uz4vOZff+9Wf/+/KwAs2bNGGeHDhwNOu00s4ceyvtRFn98Cxea9etn\nVq4cP6PrruPficOHORLzf/9nVq0aY7/pJrPPPvNu5EVCI5gjHJ4nBKG+KeEQCdx335ldcQX/hbjl\nlvSnNfbs4QW7c2dekAAmJ/ffb/bll5weyUhiIp/boAGfd9ttZitWBC9+n89s8WJOiZx5Jl/jrLPM\nHnnEbOlSs6++4sUTYLIzfjyTprzwxx+8UPuTrLPOMvv3vzkt0a4d76td22zkSLO4uLyJKbW//zZ7\n6SWzRo0YS506jHfzZj6+YoVZnz5mJUpw2umeezjNIgWTEg4lHCIhsX69WceO/JehSRNemNM+PnKk\nWevWHPUAmJg8+yxHJrL6dpuYyNqPhg1Tkplly4ITu89ntnw56wvq1uX5a9RgAvTDD3zt994za9qU\nj118MUdfEhOD8/qZOXCAtSlXXsnXLleOF+35882io80uvDDlM58+PfNkLRSOHWM9yy238M+1ZEmz\nbt3MvviCNTaJiXz86qsZZ61aZi++yLoNKdiUcCjhEAmqPXt4YS5enBeTmJiUC83ChbyIn3ce/8Uo\nVYpD/uPHm/31V/bOn5TEi7v/HO3bs2A0GFavNvvvf1OSmMqVze6+mwWMiYm8mMbEmJ1/Ph+/8kqz\njz8O/dD/8eNmH31k1rUrP7MiRTiCMW0aCylfeCFl9KV9eyZ3eT0dsWaN2cMPm1WvnpLwjB1rtm8f\nH4+PNxszJmU0plkzs1mz8j4hEu8o4VDCIRIUR46wbqFiRX7rfu45Jh/vvWfWt2/K/HzVqvxGPneu\nWUJC9s+flGQ2e3bKxf7GG82WLMl93H/8Yfb881ztArDW4c47uXrDfzE8dIirY+rUSbmof/997l87\nKytWmD3wQMpF/PzzOUWxbZvZpk1M7MqV45REv35mq1aFPqbU4uPNJk40a9GC8Z1+utl993F0yG/T\nJr6H007jiMe//mW2aFHexin5gxIOJRwiueLz8ZtqvXq8oNx2m9n//seRi1Kl+C/DeedxZGPhwsCn\nHZKSzN59N2WqoF07TmvkxrZtZq+8klJbUqYML4TvvcciRr8DB5iMVKvGUYXISLOVK3P32ln5+28m\nbv4EqGpVJhZLl/Kz/vFHjnQUKcIL/BNP8Dl5xedjXU6fPlwC7JzZ9dfz74D/s/Mf06kT46xUiX/+\nXhSsSv4BzZoNAAAgAElEQVShhEMJh0iOLVzIoXF/Xwf/CokiRcyuuooXzt9/z9m5fT4mAP4eEm3b\n5m5UYedODvFfeSUvkiVKMDmaOfPUkZYdO8wee4zfykuU4LTKhg05f+2sHDrEFRs33sjPrkQJFtB+\n8AFHWZKSzObN42fqL04dOzawEaLc+usvTt2ce66dKOp95hmzLVtSjjl61GzqVLOICB7TsKHZ66/n\nbZySfynhUMIhErANG8y6dElJNPzFi507s8Zhz56cn9vn48W1SROe9+qrzRYsyNm59u3jkP911/FC\nXrQoL+qTJ6e/vHbTJi7HLVWK7+fhh7NfWxKopCS+r7vuYmIDcGrijTdS6h4OHTJ7882UmpIWLczm\nzMmb4lQzJjtz55rdfDM/u1KlzLp358qh1E3Wdu9msW+NGnZiFOqTT7LXzE0KDyUcSjhEAvLBByld\nPmvW5FLGTz7J/VJQn4+FkZddxnNfdRWLNQMVH89iSn//CeeYtLz5Ji+M6fntN7MePXhRrVKFU0L+\ni36wrV/Pvh316tmJkYKnnjp5JGjXLi4frVqV8XfsyNGkvLJ6NXt2+OtuLrvMbNw4s/37Tz7u11+Z\nMJUqxduAAfwsRdKjhEMJh0hAVq1iXYO/piC3fD42+vIvMW3ZkksoAzn3oUNm77zDERZ/3Ujz5maj\nR2c+QrFoEZdv+vtVjB4dmuH//fuZ8PiLK8uXZ5Hnt9+ePAqwbh2nb0qVYl3JoEFMUPJCXByX2zZv\nbidW6Nx//6k1K0lJTAz9vUfOPJN/HzJK5kT8lHAo4RDxhM/HbpL+C1zz5oF1lzx6lKMt3bunNAtr\n0oSrOPyNpTJ63fnzzdq04XMaNTKbNInnC6Zjxxhfly7sRVGkiNkNN7BW4+DBk+NZsCBl35Dq1Tk9\nkZtpqezyv/addzLBcY4xvv32qSNWCQmsG/HXcFx2Gft8BPtzk4JLCYcSDpE899VXZq1a2YlmX9nd\nQOz4cbPPP+foQKVKdmIFzDPPcHQgM4mJvJD6Cxovu4yrX4JZZ+DzsfnY0KEp0xEXXsji2bQjLceP\nc5mvf6XMeeeZvfXWyatkQmX7drPhw1O6s9avzyQnvVUkW7awq2rFikyaOnfm9I7ajkugtHmbiOSZ\nb78F/vtf/oyI4FbkN90EOJfxc3w+YOFCbpL29tvArl3A2WcD997LTcguuCDz5x87BkybBrz4IvD7\n79y2/vPPuUFYZs8LxF9/cdv3mBjgt9+AatW44Vjv3sDFF598bEICNy4bNYqbvF19NTeXu+EGoEiR\n4MSTnmPH+DoTJ3Ir+JIlgc6duTnaVVed+tqLFgFRUcC77wLlygH9+wODBwN16oQuRpFsy23Gkt9v\n0AiHSI4sWJDSyvrSS7kKJbNvyP5+Ew88wMJUfwvsBx9kV9HsfLtOSODW7P4N4G67jXuiBMvBg5xS\nuP56fvMvWZL9MT76iKMXaW3fzqW2FSuyOLVbN9bBhNqqVfwcq1bl53D55VwJk94qnWPHOOXjr6dp\n0IANz/75J/RxSsGnKRUlHCIhs3Ch2bXX2on9RubOzThZ8PlYoPjvf3OIH+C0xODBbCKV3amPvXvN\nnn6aRY9Fi5r16hW8DpxJSdwttk8fFn4CnBoaP/7UFRx+v/7KGonixfmcBx88uXdFKMTFsUjVnzhU\nqWI2bFjGu+fu3cspFn9y17Yt60+0rFWCSQmHEg6RoFu8mN/8AbMLLuAKkowuXuvWMUHw741SqRKX\nWn7xRfojBRnZvp0X83LluMpj8ODMi0cDsW4dO3r6W5vXr89lqxk1A/P5WGvi/wxq1WIdR3qjCsHi\n8zEZ6tXLrHRpjrrcdBM/+4wKO1ev5hb2pUtzhKZv34yTEpHcUsKhhEMkaH78kY21ALPGjVkUmV6i\nsWkTdwi99FI70TSsRw+zDz8MfNXD+vVm/fuzO2eFChwh2bkz9+9l7152yfSvoqlQga/z3XcZj9Ic\nPcrGZ/625Jdcwp4godygbNs27ltzzjl2ogvpc8+Zbd2a/vH+Zcg33MDjq1dn0W0wPjORzCjhUMIh\nkmtLl7LRln+ZaWzsqd0wt283i4pKaYVeqhSXjL77LvtoBGr58pQ9RapXZ9vt3I4g+LdW79SJCUzR\nohwlmDUr8xj372cC5d+x9cYb2Y0zVCs5jh7lyMVNN/H9ly7NkY1vvsn4NQ8e5DSLfyTp0kuZHOW2\nYZtIdinhUMIhkmPLl7N/BMD+DNOnn5xo7N7NAsU2bdjjoXhxtsmePp0dQXNiwYKUUZS6ddkBMycJ\ni5/PZ/bzz9zltEoVOzEy8corWW+KtnkzayP8O7b27RvaTpu//srX88fZtCmTiMwSrW3bzB5/nBu9\nOWd2++1sOKZlrZLXlHAo4RAJ2MqVvHABHMqPiUmpt9i/n420briBIwRFi3JvjejonLcL9/k43dKy\npZ2oC5k2LbAaj7S2beOoSOPGPOcZZ7Cdd3Z2g/3pJ+4uW7Qoa07+85/Q7dh64ACTNn+/jqpVueok\nq8Tmxx+5EqZYMRarDh1q9scfoYlRJDuUcCjhEMm2X39l4yd/4eSkSbzoJyRwGuXWW/lN3znuhTJu\nXO5qA44fN5sxI6UmonlzLqnN6eqJhATuZnrddYyxVCluOf/JJ1knL0lJXLnRunXK+3/11dC0Qk9K\n4j4yPXqkFIC2b8+N2zKrcfE3E/O3UK9Xj9NYcXHBj1EkUEo4lHCIZGn1atZLOMdpjIkT2Zthzhyz\nO+5gW2z/EP+oURw9yI3Dh/mt3r889vrrM69PyExSEjub9u5tVrasndgY7q23slfzcfgwl702asTn\nNmvG+olQ7Ni6dSs7fvrfd4MGXK66fXvmz9u/3+zll83OOovPa92aS5DzaldZkewo9AkHgEEANgE4\nDGAxgMszOVYJhxQqa9dyWN45XszGjjV77z0WKPr7UFx8MS+KwRiuj4/nXihnnMHX7NIl582x1q7l\nipXate3E1M8zz5ht3Ji95+/ezeW61aql1D6EYsfWI0fYcv2GGziSUaYMk6MFC7JOsNat4wZvZcuy\nPqZ3b7ZWF8mPCnXCAaArgCMAegFoBOBNAPsAVMngeCUcUij8/juH84sU4cqLLl14MTv9dP6f3rCh\n2X//y5GPYNi1i30uKlbkhbNfv6z3RknPnj3sjOmvd6hYkbuv/vBD9kdHfv/d7J57OJVRurTZvfee\nvHV8sPzyC3djrVzZTkwXTZiQ9fSHz8ceJf5VQVWrcnv7UNWQiARLYU84FgMYnep3B2AbgEcyOF4J\nhxRoGzYwsShShP9HlyiRskla3bpszb1iRfBWOGzZwtUhpUvzm/2wYRn3j8jI0aOcPrj9diYrRYty\nJczbb2d/IzSfz+z779n+3DmOavzvf8Hfcn3/fta1XHaZneik+tBD2euEeugQp4EuuMBObAoXHZ03\nm72JBEO+2rzNOW6lZMareyg554oDiADwvP8+MzPn3BcAmof69UXyk02bgGefBaZMAZKSUu6vUgW4\n4w7gX/8CrrgieJudrV3LzdSmTQPKlwceeQQYMgSoXDl7zzcDfv6Zm6XFxgJ79wJNmgAvvwxERnLz\ntOxISgLmzgVGjACWLAEaNeJmZj16AKVK5fz9pebzAd98ww3b3n0XOH6cG9bNnQu0bw8UL5758//+\nG3j9dd727gU6dABGj+amb8H68xAJNzlOOJxz/QAMA9Ag+ff1AKLM7K0gxZaeKgCKAtiZ5v6dABqG\n8HVF8o3Nm4HnngMmTwYSE3lflSpAly5MMlq1Cu4Opj//DAwfzottjRpMOgYM4G6k2bF1K5OUmBgm\nLWeeCfTrB/TsyV1jsyshAZg0iTu2btoEtGnDnWtvvDF47/fPP5nATZrE1zj3XOD//g/o1YvvPSvL\nlnG31pkzgRIlgL59mZQ1aBCc+ETCWY4SDufcMwAeAPAqgEXJdzcHMMo5d5aZPRWk+EQk2a5dwFNP\n8Vv38eNAhQpAx45MMq65BiiW6/HKFGbA118z0fjiC+CccziK0LMnt0jPSkICMGcOL95ff82Rh44d\n+S2/bVugaNHsx/L338Brr3G0ID6eozdvvw1EROT8/aV29Cjw/vv8XD/7DChThq8REwO0bJn1iERS\nEjBvHhONBQu4Ffzw4UyqKlYMTowiBUFO/4m6B0B/M4tNdd8859wvYBISqoRjD4AkANXT3F8dwI7M\nnjhs2DBUqFDhpPsiIyMRGRkZ1ABFQmXiRI4U+Ecy2rXL3sU/ED4fL57DhwM//ghccgkwaxbQqVPW\nSUJSEpOLmBhOQxw6xCmE6Gg+v3z5wGL57TfglVeA6dM5WjBgAHDffbygB8PKlYxt2jRg3z6gRQtg\nwgQmG9mJNS6Ozx8zhqNOLVsC77wD3HprcJM/kbwSGxuL2NjYk+6Li4sL3gvkpPADwAEADdK5/1wA\nB3JbWJLFa6dXNLoVwMMZHK+iUSkQfL7cdenMzLFjZlOmpHTwvOoqNtbKTqHp6tUsTK1Vy060S3/2\n2Zzt+upfzeHfpKxmTS65zWgb+UDt28dlwhERdmITtIcfNluzJvvn2LCBK1XKl2dH0O7d2SFUpCDK\nD0WjU8FRjgfS3D8AwPQcnjO7XgEw2Tm3FMCPYB1JGQCTQ/y6Ip5yLvjfnA8d4rf0ESOALVtY3Dhh\nAr/tZ2bPHhZ+xsSwxqNSJY669O6ds0LV48c5kjJyJLBiBXDxxcDUqRxtKFEi5+8P4KjN119zhGjO\nHNa9tG/P6akbb8y6ABTgFNO333LaZN484PTTOdpy772sSRGRrGX7ny/n3CupfjUAdznn2oEjDgDQ\nFMBZAGKCF96pzGy2c64KgGfAqZQVAK43s92hfF2RguTAAWDcOF5A9+5lsjBvHnDRRRk/5+hR4KOP\nmGR89BHva98eePxx/szJ9E5cHBOc0aOBbduAG25gzcg11+R+Nceff7KwdtIkTnk0bAj873+sQznj\njOyd4+hRFoBGRTERatwYePNNoHt31nqISPYF8n3p0jS/L03+eXbyzz3Jt/NzG1RWzGwcgHGhfh2R\ngmbHDl48X3+dF9M+fYCHHwbq10//eDPWckyZwgvv/v3AZZdxpUjXrkDVqjmL488/mWRMmAAcOcIl\nrQ88ENiqlfQcOcIC0IkTmbiUKcM4+/UDmjfPfhKzcyfwxhtMynbt4kjISy8B116rZa0iOZXthMPM\nrg5lICISOps2sd9FdDSnKO65Bxg6NOOlnlu2pCxl/f13oGZN4O67OTrQuHHO41i6lNMms2cDp53G\nJaODB2dvyWlmVqxgkjF9OpOiVq34e5cu2V++C7CQdPRonqdYMU4R3Xcfe32ISO6ollqkAPvtN+CF\nFzg6UakS8OSTrDuoVOnUY//5h6tLYmJY81CmDFeXjB3L1SaBLGVNzecDPvmEdSLffAPUq8cRkj59\nAksG0tq3D5gxg0nU8uWcJhkwgOdtGEBXHp+P/Tyiovi+a9Xi1Mtdd7FWQ0SCQwmHSAG0aBGXtn7w\nAVC7Ni/w/fqdWneQlAR8+SWTjDlzOCVxzTWcQunYMXcJwZEjHCV55RVgzRqgaVP2z7j99twlL19+\nySRj7lzG36ED8PTTnPYIpKj2n39Y4zFmDLBhA9CsGROzjh2zV0gqIoFRwiFSQJixcdXw4VxR0agR\nL6jdup16AV21iknGtGnAX3/x2CefZC1F7dq5i2PvXtaIvPoqsHs3+1L4V77ktP5h8+aUAtA//2S8\nzz7LKZ7qabvyZONcr70GvPUWG5R17swVMc2a5Sw2EckeJRwiYS4piaMTL7zA1tqXX87fb7315Jbf\nu3alLGVdtox7oERGsm33ZZflvhhywwaOpEyaxOTnzjuBYcPYHjwnjhzhKEZ0NEc1ypblapq+fZkc\nBBKvGbBwIadN5s5ll9aBA4FBg3KfYIlI9ijhEAlTx47xm/lLL7Gws23bU5eUHjnC+oSYGNZROMcp\niCef5GZkue1xAQA//MD6jPfe454ujz3GotScrmBZtoxJxvTpXL575ZX8vUsXJh2BOHaM0zhRUewX\n0rAha1J69gz8XCKSO0o4RMJMQgKnKEaOBLZvZ03E1KlsuAXw2/yiRazDmDWLF+2mTbn6omvX7O/u\nmpmkJCYYI0fytRo2ZH+KHj2A0qUDP9/evSkFoCtWcNXKwIEsAM3JCMmePYxn7FjuxdKuHfDxx8D1\n1wd3YzsRyT4lHCJhYt8+1kWMGcNNzLp3Bx59FDjvPD6+eTMTj5gYTm/Urs0VKT17Bm9Z58GDrKV4\n5RVg40agdWsWpt50U+AXcn/B6sSJTF58PuDmm1mbcf31OeuqumoVE6upU/l7r15c1np+yLsDiUhW\nlHCI5HPbt/MC/+abvCjfdRfw4IPcxCw+nqMCU6Zwp9KyZVkEOX48k4FgfZvfsSNlx9a4OE5vzJrF\n2o9AbdqUUgC6dSv7egwfztGRatUCP5/PB3z6KadNPv+coyNPPsklslWqBH4+EQkNJRwi+dT69azP\nmDKFy1mHDuW39dNPZ63G44+zAPLoUXbAnDqV0yvBrE1YtYrJzrRprPe46y7g/vuBunUDO8/hw4x1\n4kTgq6+4G2tkJAtAc7L3CsDRlpgYjmisW8fkZ/p0JlzBqE0RkeBSwiGSzyxfzhUn77zDwstnn2U9\nw5Yt7BY6fTrrEho3Zv+Jbt3YrCpYzNgAa8QIFpqeeSYbYQ0YAFSsGNh5li1jkjFjBkdGWrdmAtWp\nU84To61bOdoyfjxHeDp25GvkZtmtiISeEg6RfMAM+O47Ti18+im7cY4dy2ZWc+bwQr1iBacIunVj\nbUKTJsG9wB4/zpbjI0cy6bnoIo4gdO0a2IjBnj1MiqKjgV9+YcIyaBALQM85J+fxLV7MaZN33mFD\nsv792Ra9Tp2cn1NE8o4SDhEPmXHn1eHDubz0wgv5bb1UKY4KDB7Mrpw335zSTTPYXTDj4tgEKyqK\nO7Zefz1rIdq2zX5Ck5TE50RHc/M0M+CWW/i+2rXLWQEowCTo3XcZ25IlTFiiorjHSfnyOTuniHhD\nCYeIBxITOZrwwgvAr79yJ9PHHuPowAMPMAlo3pxTB3fcEZo9PbZuZf3D+PHs19GtG187sy3q09q4\nkcWfkyczWTn/fL6nHj1y3ocD4IqcCRP4/rdtY2+RnK6GEZH8QQmHSB46coQX55df5sX63HN5Md28\nmRfqOnW4g2qvXkCDBqGJYdmylB1by5XjdMeQIZz6yI5DhzjNEx3NWo/TTkspAL388txN86xdyyRo\nyhSuPunenUWqgSRBIpI/KeEQyQPx8cAbb7D1944dvK9sWXYI/ftvLjONjmZXzVB8g/cvHR05kqtE\n6tblf/ftm70N2szYqTM6mlM98fFAmzas8ejU6dRN4QJhxumYUaMYY/XqXIFz9905WyYrIvmTEg6R\nENq9m9/Yx45lx0+/IkWAVq04knHbbbm7YGfm6FEWcI4cCaxezRGI2bO5fDY7dRW7d6cUgP76K1Cz\nJkdD+vQBzj47d7EdOsTltqNHM7ZLLuHIRteuQMmSuTu3iOQ/SjhEQuDPP7ms9K232IPC74ILWPDY\nrVv2pzByYu9ejqi8+io3bbvlFv7eqlXWUx5JSdx1duJEYN483nfrrewJct11Od9a3m/7dmDcODYy\n27eP5379dY7uaFmrSMGlhEMkiNasAV58kaMCiYm8r2pV1iL06sVv8aG8qP7xR8qOrT4fk5thw7jX\nSXae6+9aun07V8y8/DJjD0bHzp9+4gqT2bO530q/fhwtqV8/9+cWkfxPCYdIEPz0E5eAvvceaxJK\nluS0Re/eXBYa7KWsaS1axGmTOXO4Odsjj3AflaxWihw6xL4W0dHAt99y2/Zu3VjbERGR++QoMZGf\nyahRXPZbrx5Hfvr0YbGpiBQeSjhEcmHBAuCZZ7gJGQC0bMmRjC5dgEqVQvvaSUnseTFyJC/m557L\naZOePTPfsdUM+PFHJhmxscA//wBXX816ittvD049yYEDnE569VVOL7VuzdbmN9+c+ykZEQlPSjhE\ncujYMfaFqFoVeOopXuhz00kzuw4dStmx9Y8/gKuuYuLRoUPmK1x27WJSER3NPVJq1eL+LHfeGbxp\njfXruZvtpEn8fLp147LWSy8NzvlFJHwp4RDJoRIl2JTqtNPyphnVzp0pO7bu389NymbM4OZnGUlM\nBObPZ5Ixbx7jvO02jopce21wRhvMuNQ2KopdU6tU4W6299wDnHFG7s8vIgWDEg6RXAhkM7OcWr06\nZcfWYsVSdmytVy/j56xfz1GGKVOAv/5i46yRI1kAWrlycOI6coQJT1QUl8z627JHRrI1u4hIako4\nRPIhMxZxjhjBUYMaNbiXyoABGdeGHDyYUgC6YAELQLt352qQSy8N3uqYv//mKMsbb7AVe4cOTDqu\nvlrLWkUkY0o4RPKR48eZNIwYwRbkF17Ieo3IyPR3bDXjpmbR0cDMmSwAbduWy3Jvvz3z4tFALVvG\nJl2xsYylb18uaw1VC3YRKViUcIjkA/HxKTu2bt3KBlvz5/NneqMGO3emFICuXg3Urs1+G3femflU\nS6CSklj7ERXFUZM6dbj8t1+/vJlOEpGCQwmHiIe2buWqjvHj2ZE0MpI7tl588anHJiZyr5GJE4EP\nP2QB6O23Mxm45prgLjeNj2cyM2YMsGkTl/u+8w67guZ0q3kRKdz0T4eIB1asYBHnzJncxO2eezg9\nUbPmqcf+/ntKB9AdO9itdNQoLjkN9rb1f/zB3hnR0UyAunYFZs3iHiwiIrmhhEMkj5hxmmTECDYK\nq1OH/923L1C+/MnHJiQAb7/NC//337NQtHt3HhvsnhZmnC4ZNYrTJ6efDtx3HzuVhnK/FxEpXJRw\niITY0aNcPjpyJBtuXXYZRzY6dTp5esKMLcqjozmqcPAgC0BjY9k7I9hLTY8eZRxRURxxadyYG6p1\n7x663WtFpPBSwiESIvv2pezYumMH23qPG3fqrqg7dgBTpzLRWLuWIx8PPcR9WOrWDX5cu3YxrnHj\nWHx6443ccC6jAlURkWBQwiESZBs3cnoiOpqrPPw7tjZqlHLM8ePAJ5/wmA8/5EhHx45MTq65JjSd\nS1eu5LLW6dNZYHrnnZw6SR2XiEioKOEQCZIlS1iTMWcO6yAefph1ENWqpRyzdi07gMbEcGSjSRMm\nAZGRwS8ABbhF/UcfMQH6+mvun/LMM0D//qF5PRGRjCjhEMmFpCTggw+YaCxcyCZYY8dyx1h/HcQ/\n/6QUgC5cyALQHj1YAHrJJaGJ659/2DBszBhgwwagaVPWa3TsCBQvHprXFBHJjBIOkRw4dIjLVF95\nhRf0Vq2A995jnUaRIiwAXbiQPTNmz+bx113Hi/6tt4Zur5HNm7nB21tvcaVL586sD2nWLDSvJyKS\nXUo4RAKwcydHMMaN446tnTqx42fTpnz8779TCkDXrWPR5yOPsF7irLNCE5M/uYmKAubO5R4qAwcC\ngwaxA6mISH6ghEMkG9au5WhGTAwLPPv1A4YOZRvx48eB99/naMbHH/PxTp2YlLRpE7qt648d41RN\nVBTw889Aw4Yc3ejVi83ERETyEyUcIhnwN8QaMYIrSWrUAP7v/4C772Ydxpo1LAyNieFS04gIrjL5\n178y3tE1GPbsYb+MsWM5otKuHROd668PXXIjIpJbSjhE0khMTNmxdelS4IILuLIkMpKjCrNmccpk\n0SKu9OjZE+jTJ/39T4Jp1SquaJk6lb/37Ancfz9w/vmhfV0RkWBQwiGS7J9/WGw5ejSwZQtw7bXc\nLO2661gjMXAgC0APH+ZowuzZwC23ACVLhi4mn48xREUBn3/OUZYnnwQGDACqVAnd64qIBFtYJRzO\nuX8DaA/gEgBHzUydBCTXtm1L2bH14EGOZDz4IFC1KqdLhgwB1q9nvcbjj7ORV6iLMQ8e5GuPHs3i\n04gIFqd26QKUKBHa1xYRCYWwSjgAFAcwG8AiAH09jkXC3MqV3N8kNpY9MwYO5G3FCuCJJ1gXUaIE\nl5a++SbQunXoayS2bmXh5/jx3CK+Y0cWo7ZoobbjIhLewirhMLOnAcA519vrWCQ8mQGffcb6jC++\n4FLVl17iBf3tt7m8dfdubsc+diwLQCtWDH1cixdz2uSdd7jCpH9/YPDg0OylIiLihbBKOERy6uhR\njmSMHAn89hunKN58k51CY2KABx4AKldmIWbfvsCFF4Y+puPHgXffZaKxZAlwzjn87969T92uXkQk\n3CnhkAJt/34mFmPGcAlp+/bAHXewO+jQoUxErr+eIws335w39RH79gETJnDqZNs2btY2bx5j07JW\nESmoPE84nHPDATyaySEG4Dwz+z03rzNs2DBUqFDhpPsiIyMRGRmZm9NKPrVpE0cLJk7kMte2bbnq\nZNEibmZ29tms0+jVixua5YW1a1kEOmUKV590785lrRddlDevLyKSmdjYWMTGxp50X1xcXNDO78ws\naCfLUQDOVQZQOYvDNppZYqrn9AYwKjurVJxzTQAsXbp0KZo0aZK7YCXf+/FH1me8+y5rIc46i/uW\nLF/O5audO7NL6JVX5s1oghmXs44axeWt1atzB9mBA0/eRVZEJD9atmwZIiIiACDCzJbl5lyej3CY\n2V4Ae72OQ8KXz8cdW0eOBL77jveVKsX7V60CrrgCeP11oGtX7jOSFw4d4jLW0aOB1au5K+yUKYwh\nlH07RETyK88TjkA452oDOB1AHQBFnXP+3o4bzOygd5GJFw4f5kV81Cjg9zQTbuXKcbqkTx92Cs0r\n27dzD5U332Stxq238verrtKyVhEp3MIq4QDwDIBeqX73D+9cDWBB3ocjXti1ixfxsWO5r4hfkSLA\njTdylUmHDnnbIOunn1gzMns2ULo0p22GDAHq18+7GERE8rOwSjjMrA+APl7HId5Yty5lx9YjR1Lu\nP+ccJhm9egE1a+ZdPImJwHvvcYTlhx/YifTllxnLaaflXRwiIuEgrBIOKXzMWJcxYgTrNPzKlGGb\n76bJAx0AABF8SURBVL59WQCal9MVBw5wz5VXXwX+/JMdSOfO5bLaokXzLg4RkXCihEPypcRErjQZ\nOZLTFX7NmjHJ6No170cR1q9nP49Jk7hrbGQkl7Vq8ZOISNaUcEi+8s8/3Pp91Cju2ApwE7VevZho\nNG6ct/GYAV99xfqMjz7iDq0PPgjccw9wxhl5G4uISDhTwiH5wvbtnKJ44w0gLo4FoB06sPiyfXug\nePG8jefIEWDGDCYav/7KVudvvQV068YltyIiEhglHOKpX35J2bH1+HGgQQPgscc4onHmmXkfz44d\n7Nnx+utcAdOhA5OOq6/WslYRkdxQwiGeMGMNxKxZLADt3p2jGS1benNhX76ciUVsLJfT9ukD3Hcf\nEyAREck9JRziCefYkOu667iZmhe7oyYlceXLqFHAggVsgz58OBOfvNiSXkSkMFHCIZ554glvXjc+\nnoWpY8Zwk7eWLYG33wZuuw0opv8jRERCQv+8SqGxcSOTjOhotkXv2pVTOpdf7nVkIiIFnxIOKdDM\nOF0SFQW8/z5QqRJbjt97b952JRURKeyUcEiBdPQoRy+iolgQ2rgxN1Tr3p1FqiIikreUcEiBsmsX\ne3mMGwfs3MnN3ObPZ3GqlrWKiHhHCYcUCL/8wtGMGTPYNOzOO7mstVEjryMTERFACYeEMZ+P7caj\noth+vFYt4Omngf79gdNP9zo6ERFJTQmHhJ2EBGDyZGD0aGDDBqBpU2DmTKBjx7xvgS4iItmjhEPC\nxubNwGuvcU+ThASgc2dg6lTuICsiIvmbEg7J18yAH35gN9C5c4EKFYCBA4FBg4Datb2OTkREsksJ\nh+RLx46x+2dUFPDzz0DDhhzd6NULKFvW6+hERCRQSjgkX9mzBxg/Hhg7FvjrL6BdO+Djj4Hrr+fq\nExERCU9KOCRfWLWKRaBTp/L3nj2B++8Hzj/f27hERCQ4lHCIZ3w+NuUaNQr4/HOgRg3gySeBAQOA\nKlW8jk5ERIJJCYfkuYMHgZgYjmisWwdERADTpgFdugAlSngdnYiIhIISDskzW7eyNmP8eCAujn0z\nJk4EWrRQ23ERkYJOCYeE3OLFXG3yzjtcYdK/PzB4MFC3rteRiYhIXlHCISFx/DgwZw7rM5YsAc45\nh0lH795A+fJeRyciInlNCYcE1b59wIQJ7JmxbRtwzTXAvHlA+/Za1ioiUpgp4ZCgWLuWRaBTpgBJ\nSUD37lzWevHFXkcmIiL5gRIOyTEzLmeNigI++QSoXh147DHg7rv53yIiIn5KOCRghw9zGWtUFLB6\nNXDJJdy99V//AkqW9Do6ERHJj5RwSLZt3w6MGwe8+SZrNW69lb9fdZWWtYqISOaUcEiWfv6Zq01m\nzwZKlQL69QOGDAHOPtvryEREJFwo4ZB0JSYC773HaZOFC4F69YCXXwb69OEW8SIiIoFQwiEnOXCA\n3T9ffRXYsoXTJXPmALfcAhQt6nV0IiISrpRwCABg/XpgzBhg0iTg2DEgMpLLWps08ToyEREpCJRw\nFGJmwNdfsz7jo4+AypWBBx4A7rmHO7eKiIgEixKOQujIEWDGDNZn/PorcOGFwFtvAd26sShUREQk\n2JRwFCI7dgCvv87b7t1Ahw4c3bjmGi1rFRGR0FLCUQgsX87RjNhYoEQJrjQZMgQ491yvIxMRkcJC\nCUcBlZQEfPABRzAWLADOOgt4/nn20KhUyevoRESksFHCUcDExwPR0VxxsmkT0LIl8PbbwG23AcX0\npy0iIh4Jm0uQc64OgCcBXAPgDADbAUwH8JyZHfcytvxg40YmGdHR3OvkjjuAmTOBK67wOjIREZEw\nSjgANALgAPQH8AeACwC8BaAMgEc8jMszZpwuiYoC3n+fUyVDhgD33gvUrOl1dCIiIinCJuEws/kA\n5qe6a7NzbgSAgShkCcfRo8CsWUw0li8HzjsPeOMNoEcPoEwZr6MTERE5VdgkHBmoCGCf10HklV27\nmFiMGwfs3AnceCMwfz5w3XVa1ioiIvlb2CYczrlzAAwG8IDXsYTaL79wNGPGDKBIEaB3b+C++ziy\nISIiEg6KeB2Ac264c86XyS3JOXdumufUBPAJgFlmFu1N5KHl83FZa9u2wMUXA599Bjz9NLBtGxt3\nKdkQEZFwkh9GOEYAmJTFMRv9/+GcOxPAVwC+N7O7s/siw4YNQ4U0+6pHRkYiMjIygFBDLyEBmDwZ\nGD0a2LCBq0xiY4FOnYDixb2OTkRECqrY2FjExsaedF9cXFzQzu/MLGgnC7XkkY2vAPwEoKdlI3jn\nXBMAS5cuXYom+Xjr082bgdde454mCQlA587A0KFAs2ZeRyYiIoXVsmXLEBERAQARZrYsN+fKDyMc\n2ZI8svENgE3gqpRqLrlS0sx2ehdZzpkBP/zAbqBz5wKnnQbcfTcwaBA7g4qIiBQUYZNwALgOQP3k\n29bk+xwAA1DUq6By4tgxdv+MigJ+/pl7mrz2GtCrF1C2rNfRiYiIBF/YJBxmNgXAFK/jyI09e4Dx\n44GxY4G//uJy1o8+Am64gatPRERECqqwSTjC2apVLAKdOpW/9+zJZa0XXOBtXCIiInlFCUeI+Hxs\nyjVqFPD550CNGsATTwADBgBVq3odnYiISN5SwhFkBw8CMTEc0Vi3DoiIAKZNA7p0AUqU8Do6ERER\nbyjhCJKtW1mbMX48EBcH3H47l7i2bKm24yIiIko4cmnxYq42eecdrjDp3x8YPBioW9fryERERPIP\nJRw5cPw4MGcOE43Fi4Gzz2atxp13AuXLex2diIhI/qOEIwD79gETJrBnxrZtwDXXAPPmATfdBBQN\nq04gIiIieUsJRzasXQuMGQNMmQIkJgLduwP3389N1URERCRrSjiyoXt3YPt24NFH2Xq8enWvIxIR\nEQkvSjiyYfZsoFYtoGRJryMREREJT0o4suHss72OQEREJLxpBw8REREJOSUcIiIiEnJKOERERCTk\nlHCIiIhIyCnhEBERkZBTwiEiIiIhp4RDREREQk4Jh4iIiIScEg4REREJOSUcIiIiEnJKOERERCTk\nlHCIiIhIyCnhEBERkZBTwiEiIiIhp4RDREREQk4Jh4iIiIScEg4REREJOSUcIiIiEnJKOERERCTk\nlHCIiIhIyCnhEBERkZBTwiEiIiIhp4RDREREQk4Jh4iIiIScEg4REREJOSUcIiIiEnJKOERERCTk\nlHCIiIhIyCnhEBERkZBTwiEiIiIhF1YJh3PufefcFufcYefcX865GOdcDa/jKqhiY2O9DiHs6DPL\nGX1ugdNnljP63LwTVgkHgK8AdAFwLoCOAM4G8LanERVg+h8zcPrMckafW+D0meWMPjfvFPM6gECY\n2ehUv251zr0AYK5zrqiZJXkVl4iIiGQu3EY4TnDOnQ6gO4CFSjZERETyt7BLOJxzLzjnEgDsAVAb\nwG0ehyQiIiJZ8HxKxTk3HMCjmRxiAM4zs9+Tf38JwFsA6gD4L4CpADpk8vxSALBmzZrcB1vIxMXF\nYdmyZV6HEVb0meWMPrfA6TPLGX1ugUl17SyV23M5M8vtOXIXgHOVAVTO4rCNZpaYznNrAtgKoLmZ\nLcng/N0ATM91oCIiIoVXdzObkZsTeD7CYWZ7AezN4dOLJv8smckx88Faj80AjuTwdURERAqjUgDq\ngtfSXPF8hCO7nHNXALgcwPcA9gM4B8AzAKoCuMDMjnsYnoiIiGQinIpGD4G9N74AsBbABAArALRR\nsiEiIpK/hc0Ih4iIiISvcBrhEBERkTClhENERERCrkAnHM65Qc65TcmbvS12zl3udUz5mXPucefc\nj865eOfcTufcXOfcuV7HFU6cc48553zOuVe8jiW/c86d6Zyb6pzb45w75Jxb6Zxr4nVc+Zlzrohz\n7n/OuY3Jn9kG59wTXseVnzjnrnTOzXPObU/+f/GWdI55JnkD0EPOuc+dc+d4EWt+ktnn5pwr5px7\n0Tn3i3MuIfmYKYFunlpgEw7nXFcAI/H/7d1/qN11Hcfx5ytc0ZSxQNqgXzQqK4rbVAopnWNSYL//\nygoKQ/uxDLHAkhSKUYhhKyv/krBfErOCGgSF2eZcpGzWAmeUMaq1H0XTpAVq7t0fn++61+3udm/2\nPd9zTs8HXLjf7z3fe94czvl+Xt/P93w+nzY52FpgD/CjJGcOWth4Ox/4EvAa4CJgGfDjJM8ctKoJ\n0QXa99Pea1pAkpXATuBR4A3Ay4CP0Uag6dQ+AXwA2Ai8FLgauDrJFYNWNV5Opw0o2EibOPJJknwc\nuIL2WX01cJTWNjx9lEWOoYVet+XAq4BP09rTtwNnAd9fyhNM7ZdGk/wcuKeqruy2Q5sk7KaqumHQ\n4iZEF87+DFxQVXcPXc84S3IGsBv4EHAd8Iuq+uiwVY2vbuHF86pq3dC1TJIkW4FDVXX5nH3fAf5R\nVe8ZrrLxlOQY8Laq+sGcfQeAz1XV5m57BXAYeG9VbRmm0vEy3+s2z2POBe4BXlBV+xfzf6eyhyPJ\nMuAc4CfH91VLVncA5w1V1wRaSUu6R4YuZAJ8BdhaVXcOXciEeDOwK8mW7vbdfUkuG7qoCfAzYEOS\nFwMkmQFeC/xw0KomRJIXAqt5ctvwCK3htG1YmuPtw8OLPWDwmUZ7ciZtFtLDJ+w/TOsG0n/Q9Qh9\nAbi7qvYOXc84S3IJrbvx3KFrmSBraL1BNwKfoXVt35Tk0ar6xqCVjbfrgRXAr5M8Qbto/GRVfXvY\nsibGalojOV/bsHr05UymJM+gvRdvq6q/L/a4aQ0ceupuBl5Ou3rSKSR5Li2YXeQEdEvyNODeqrqu\n296T5BXAB2kLMmp+7wDeBVwC7KUF3S8mOWBQ0ygkOQ24nRbcNi7l2Km8pUJbuv4JYNUJ+1cBh0Zf\nzmRJ8mXgYtosrgeHrmfMnUObXv++JI8neRxYB1yZ5LGup0gnOwicuITzA8DzB6hlktwAXF9Vt1fV\n/VX1LWAzcM3AdU2KQ0CwbfivzAkbzwNev5TeDZjSwNFdae4GNhzf1534N9DugeoUurDxVmB9Vf1h\n6HomwB3AK2lXmjPdzy7gm8BMTeu3sp+6nZx8e/Ms4PcD1DJJltMupuY6xpSey//XqmofLVjMbRtW\n0Ebm2TYsYE7YWANsqKoljyib5lsqnwduTbIbuBe4ivZhvXXIosZZkpuBdwJvAY4mOX4V8LeqcqXd\neVTVUVrX9r8lOQr8tapOvILXrM3AziTXAFtoJ/zLgMsXPEpbgWuT7AfuB86mndtuGbSqMZLkdNri\nnsd7F9d0X649UlV/pN0CvTbJg7RVxDcB+1niEM9ps9DrRuuR/C7twupNwLI57cORxd5OntphsQBJ\nNtLGqa+ijS/+SFXtGraq8dUNhZrvDXFpVX191PVMqiR3Ar90WOzCklxM++LZi4B9wI1V9dVhqxpv\nXaOwiTYPwrOBA8BtwKaq+ueQtY2LJOuAn3LyuexrVfW+7jGfos3DsRLYAXy4qh4cZZ3jZqHXjTb/\nxr4T/pZue31V3bWo55jmwCFJksaD9/0kSVLvDBySJKl3Bg5JktQ7A4ckSeqdgUOSJPXOwCFJknpn\n4JAkSb0zcEiSpN4ZOCRJUu8MHJIkqXcGDkmS1DsDh6SRSfLGJA8lSbc9k+RYks/OecwtSVwsUJoy\nBg5Jo7QDOANY222vA/4CXDjnMRfQVq2UNEUMHJJGpqoeAfYwGzAuBDYDa5MsT/Ic2nL1i1ruWtLk\nMHBIGrXtzAaO84HvAQ8Ar6P1bvypqn43TGmS+nLa0AVI+r+zDbg0yQzwWFX9Jsl2YD3wLFogkTRl\n7OGQNGo7gBXAVcyGi220Xo913e+SpoyBQ9JIVdXDwK+AdzMbLu4CzgZegj0c0lQycEgawnba+Wcb\nQFU9BOwFDlbVbwesS1JPUlVD1yBJkqacPRySJKl3Bg5JktQ7A4ckSeqdgUOSJPXOwCFJknpn4JAk\nSb0zcEiSpN4ZOCRJUu8MHJIkqXcGDkmS1DsDhyRJ6p2BQ5Ik9e5fgBCkocF0cPAAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "params = np.array(params)\n", "plt.plot(params[:,0],params[:,1])\n", "plt.title('Gradient descent')\n", "plt.xlabel('w')\n", "plt.ylabel('b')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 4.98099133, 2.75130442])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "params[-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multivariate case\n", "\n", "We are trying to minimise $\\sum \\xi_i^2$. This time $ f = Xw$ where $w$ is Dx1 and $X$ is NxD.\n", "\n", "\\begin{align}\n", "\\mathcal{L} & = \\frac{1}{N} (y-Xw)^T(y-Xw) \\\\\n", "\\frac{\\delta\\mathcal{L}}{\\delta w} & = -\\frac{1}{N} 2\\left(\\frac{\\delta f(X,w)}{\\delta w}\\right)^T(y-Xw) \\\\ \n", "& = -\\frac{2}{N} \\left(\\frac{\\delta f(X,w)}{\\delta w}\\right)^T\\xi\n", "\\end{align}\n", "where $\\xi_i$ is the error term $y_i-f(X,w)$ and \n", "$$\n", "\\frac{\\delta f(X,w)}{\\delta w} = X\n", "$$\n", "\n", "Finally the weights can be updated as $w_{new} = w_{current} - \\gamma \\frac{\\delta\\mathcal{L}}{\\delta w}$ where $\\gamma$ is a learning rate between 0 and 1." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "N = 1000\n", "D = 5\n", "X = 5*np.random.randn(N,D)\n", "w = np.random.randn(D,1)\n", "y = X.dot(w)\n", "y_obs = y + np.random.randn(N,1)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.19670626],\n", " [-0.74645194],\n", " [ 0.93774813],\n", " [-2.62540124],\n", " [ 0.74616483]])" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1000, 5)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5, 1)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.shape" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1000, 5)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(X*w.T).shape" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions\n", "def f(w):\n", " return X.dot(w)\n", "\n", "def loss_function(e):\n", " L = e.T.dot(e)/N\n", " return L\n", "\n", "def dL_dw(e,w):\n", " return -2*X.T.dot(e)/N " ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "def gradient_descent(iter=100,gamma=1e-3):\n", " # get starting conditions\n", " w = np.random.randn(D,1)\n", " params = []\n", " loss = np.zeros((iter,1))\n", " for i in range(iter):\n", " params.append(w)\n", " e = y_obs - f(w) # Really important that you use y_obs and not y (you do not have access to true y)\n", " loss[i] = loss_function(e)\n", "\n", " #update parameters\n", " w = w - gamma*dL_dw(e,w)\n", " \n", " return params, loss\n", " \n", "params, loss = gradient_descent()" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAFkCAYAAAB1rtL+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XmYXFWd//H3NzQJhJCwhCSCBKOBEASEdGRfxQXkQVlk\nhgbFDXEBZNqfA6I4w4COiiObwjw44IyyxGEZNkdhAgjDhE3TMWwx7EsIRNYkEEhCOL8/TrWpNFm6\nqqv71vJ+Pc99quveU1XfuoTk0+ece26klJAkSarGoKILkCRJjcsgIUmSqmaQkCRJVTNISJKkqhkk\nJElS1QwSkiSpagYJSZJUNYOEJEmqmkFCkiRVzSAhSZKqVnGQiIhNI+KSiHgxIhZFxMyImNSjzekR\nMbd0fGpEjO9xfEhEnF96j4URcVVEjOrrl5EkSQOroiARERsA04DFwMeAicD/A14pa3MycDxwLLAT\n8DpwU0QMLnurc4ADgcOAvYBNgaur/haSJKkQUclNuyLih8CuKaW9V9NmLvDjlNLZpefDgXnAZ1NK\nV5SevwAckVK6ptRmAjAL2CWldG/V30aSJA2oSoc2DgL+GBFXRMS8iOiKiGO6D0bEOGAMcEv3vpTS\nAuAeYNfSrslAW482s4Gny9pIkqQG0FZh+/cCXwV+AnyfPHRxXkQsTildQg4RidwDUW5e6RjAaGBJ\nKWCsqs0KImJj8lDKk8CbFdYsSVIrWwd4D3BTSumlWr95pUFiEHBvSum7peczI2Jb4CvAJTWtbEUf\nAy7rx/eXJKnZHQVcXus3rTRIPEeey1BuFnBo6efngSD3OpT3SowGZpS1GRwRw3v0SowuHVuZJwEu\nvfRSJk6cWGHJqlZnZydnn3120WW0FM/5wPOcDzzP+cCaNWsWn/70p6H0b2mtVRokpgETeuybADwF\nkFJ6IiKeB/YD7oO/TrbcGTi/1H468FapTflky7HAXav43DcBJk6cyKRJk1bRRLU2YsQIz/cA85wP\nPM/5wPOcF6ZfpgZUGiTOBqZFxCnAFeSAcAzwpbI25wCnRsSj5PRzBjAHuA7y5MuIuBg4KyJeARYC\n5wHTvGJDkqTGUlGQSCn9MSIOAX4IfBd4AjgxpfTrsjZnRsRQ4EJgA+AO4ICU0pKyt+oElgFXAUOA\nG4Hj+vJFJEnSwKu0R4KU0m+B366hzWnAaas5vhg4obRJkqQG1VD32njTCz8HVEdHR9EltBzP+cDz\nnA88z3lzqWhly6KU7uUx/YorpnP44U7QkSSpt7q6umhvbwdoTyl11fr9G6pH4umni65AkiSVa6gg\n8cwzRVcgSZLKGSQkSVLVDBKSJKlqDRUknCMhSVJ9aaggMW8evPFG0VVIkqRuDRUkAB5/vOgKJElS\nt4YLEo88UnQFkiSpW0MFiXXXhUcfLboKSZLUraGCxNix9khIklRPGipIbL65QUKSpHrSUEFi7FiH\nNiRJqicNFSQ23zwvSuUloJIk1YeGCxIAjz1WbB2SJClrqCAxdmx+dHhDkqT60FBBYqONYNgwJ1xK\nklQvGipIRMCWW9ojIUlSvWioIAE5SNgjIUlSfWi4IDF+vEFCkqR60XBBYsstYc4cLwGVJKkeNFyQ\nGD8+P3oJqCRJxWu4ILHllvnRCZeSJBWv4YLEqFGw/vrOk5AkqR40XJCIcMKlJEn1ouGCBLiWhCRJ\n9aJhg4Q9EpIkFa8hg8T48V4CKklSPWjIINF95YaXgEqSVKyGDBLda0k4vCFJUrEaMkh4CagkSfWh\nIYNEBGy1FcyeXXQlkiS1toYMEgATJ8KsWUVXIUlSa2v4IJFS0ZVIktS6GjpIvPoqzJtXdCWSJLWu\nhg4S4PCGJElFatgg8b73QVubQUKSpCI1bJBYe+28MJVBQpKk4jRskACv3JAkqWgGCUmSVLWKgkRE\n/GNEvN1je6hHm9MjYm5ELIqIqRExvsfxIRFxfkS8GBELI+KqiBhVTfHbbANz58L8+dW8WpIk9VU1\nPRIPAKOBMaVtj+4DEXEycDxwLLAT8DpwU0QMLnv9OcCBwGHAXsCmwNXVFN995caf/1zNqyVJUl9V\nEyTeSim9kFL6S2l7uezYicAZKaXfpJQeAI4mB4WDASJiOPAFoDOldHtKaQbweWD3iNip0kImTMjL\nZTu8IUlSMaoJEltGxLMR8VhEXBoRmwNExDhyD8Ut3Q1TSguAe4BdS7smA2092swGni5r02tDh8IW\nWxgkJEkqSqVB4m7gc8DHgK8A44D/jYj1yCEiAT3XmpxXOgZ5SGRJKWCsqk1FnHApSVJx2ippnFK6\nqezpAxFxL/AU8DdAv89U6OzsZMSIESvsi+hg1qyO/v5oSZLq3pQpU5gyZcoK++b38xUJFQWJnlJK\n8yPiYWA8cBsQ5F6H8l6J0cCM0s/PA4MjYniPXonRpWOrdfbZZzNp0qQV9l10EXz5y/Dmm7DOOlV/\nFUmSGl5HRwcdHSv+ct3V1UV7e3u/fWaf1pGIiGHkEDE3pfQEOQzsV3Z8OLAzcGdp13TgrR5tJgBj\ngbuqqWHiRHj7bXjkkaq+giRJ6oNK15H4cUTsFRFbRMRuwDXAUuDXpSbnAKdGxEERsR3wK2AOcB38\ndfLlxcBZEbFPRLQDvwCmpZTureYLePMuSZKKU+nQxruBy4GNgReA/wN2SSm9BJBSOjMihgIXAhsA\ndwAHpJSWlL1HJ7AMuAoYAtwIHFftF9hoIxg1yiAhSVIRKp1sucZZjSml04DTVnN8MXBCaasJr9yQ\nJKkYDX2vjW4GCUmSitE0QWL2bFi2rOhKJElqLU0TJBYvhieeKLoSSZJaS9MECXB4Q5KkgdYUQWKz\nzWD99Q0SkiQNtKYIEhGw9dYGCUmSBlpTBAnwyg1JkorQdEEipaIrkSSpdTRVkFiwAJ57ruhKJElq\nHU0TJLbdNj8++GCxdUiS1EqaJkiMGwfrrQf33Vd0JZIktY6mCRKDBsF22xkkJEkaSE0TJAC2394g\nIUnSQGq6IPHQQ7B0adGVSJLUGpoqSGy3HSxZAg8/XHQlkiS1hqYLEuDwhiRJA6WpgsSGG8Lmmxsk\nJEkaKE0VJMAJl5IkDSSDhCRJqlpTBok5c+Dll4uuRJKk5teUQQLg/vuLrUOSpFbQdEFiq61g8GCH\nNyRJGghNFyTa2uD97zdISJI0EJouSIATLiVJGihNGyQeeACWLSu6EkmSmlvTBolFi+Dxx4uuRJKk\n5ta0QQIc3pAkqb81ZZAYNQpGjzZISJLU35oySIATLiVJGggGCUmSVLWmDhKPPw4LFxZdiSRJzaup\ngwTky0AlSVL/aNogMXEirLWWwxuSJPWnpg0SQ4bA1lsbJCRJ6k9NGyQgD2/MnFl0FZIkNa+mDhI7\n7piDhEtlS5LUP5o6SLS3w2uvwcMPF12JJEnNqamDxKRJ+XH69GLrkCSpWTV1kNhgAxg/Hv74x6Ir\nkSSpOTV1kACYPNkgIUlSf+lTkIiIb0XE2xFxVo/9p0fE3IhYFBFTI2J8j+NDIuL8iHgxIhZGxFUR\nMaovtaxKezvMmOGES0mS+kPVQSIiPggcC8zssf9k4PjSsZ2A14GbImJwWbNzgAOBw4C9gE2Bq6ut\nZXUmT4ZFi+DPf+6Pd5ckqbVVFSQiYhhwKXAM8GqPwycCZ6SUfpNSegA4mhwUDi69djjwBaAzpXR7\nSmkG8Hlg94jYqbqvsWo77pgfnXApSVLtVdsjcT5wQ0rp1vKdETEOGAPc0r0vpbQAuAfYtbRrMtDW\no81s4OmyNjUzYgRstZXzJCRJ6g9tlb4gIo4AdiAHgp7GAAmY12P/vNIxgNHAklLAWFWbmmpvt0dC\nkqT+UFGPRES8mzy/4aiU0tL+Kan2Jk/OEy7feqvoSiRJai6V9ki0A5sAXRERpX1rAXtFxPHA1kCQ\nex3KeyVGAzNKPz8PDI6I4T16JUaXjq1SZ2cnI0aMWGFfR0cHHR0dqy+6Hd54I0+43Hbb1TaVJKlh\nTZkyhSlTpqywb/78+f36mZFS6n3jiPWALXrs/g9gFvDDlNKsiJgL/DildHbpNcPJoeLolNKVpecv\nAEeklK4ptZlQeo9dUkr3ruRzJwHTp0+fzqTu5SorsGBBXpzqF7+Az32u4pdLktSwurq6aG9vB2hP\nKXXV+v0r6pFIKb0OPFS+LyJeB15KKc0q7ToHODUiHgWeBM4A5gDXld5jQURcDJwVEa8AC4HzgGkr\nCxG1MHx4nnA5fbpBQpKkWqp4suVKrNClkVI6MyKGAhcCGwB3AAeklJaUNesElgFXAUOAG4HjalDL\nKrnCpSRJtdfnIJFS+tBK9p0GnLaa1ywGTihtA6K9Ha6+Ok+4bKtFfJIkSc1/r41ukyfDm2/CQw+t\nua0kSeqdlgkSO+4IEQ5vSJJUSy0TJIYNg623dmEqSZJqqWWCBOR5EvZISJJUOy0VJCZPhpkzYWnD\nrMkpSVJ9a6kg0d4OixfDgw8WXYkkSc2hpYLEDjvAoEEOb0iSVCstFSSGDYP3vx/uuafoSiRJag4t\nFSQAdt0V7rqr6CokSWoOLRckdtstz5F49dWiK5EkqfG1ZJAAuPvuYuuQJKkZtFyQGD8eRo50eEOS\npFpouSARkedJ3Hln0ZVIktT4Wi5IQB7euPtuWLas6EokSWpsLRskXnvNhakkSeqrlgwSkydDW5vD\nG5Ik9VVLBomhQ/MqlwYJSZL6piWDBOThDYOEJEl907JBYtdd4bHH4C9/KboSSZIaV8sGie6FqVxP\nQpKk6rVskNh8c9hsM4c3JEnqi5YNEt0LU9kjIUlS9Vo2SEAe3vjDH2DJkqIrkSSpMbV8kHjzTfjT\nn4quRJKkxtTSQWLHHWHIEIc3JEmqVksHicGD8yqXTriUJKk6LR0kwIWpJEnqC4PEbjBnDjz9dNGV\nSJLUeFo+SOyxR368/fZi65AkqRG1fJAYORK23x5+//uiK5EkqfG0fJAA2Gcfg4QkSdUwSAD77gtP\nPpk3SZLUewYJYO+985LZt91WdCWSJDUWgwSw4Yawww4Ob0iSVCmDRMk+++QeiZSKrkSSpMZhkCjZ\nd9+8lsQTTxRdiSRJjcMgUbLnnjBokMMbkiRVwiBRssEG+SZeTriUJKn3DBJl9t0390g4T0KSpN4x\nSJTZd1949ll49NGiK5EkqTEYJMrssQestZbDG5Ik9VZFQSIivhIRMyNifmm7MyL279Hm9IiYGxGL\nImJqRIzvcXxIRJwfES9GxMKIuCoiRtXiy/TV8OHQ3u6ES0mSeqvSHolngJOBSUA7cCtwXURMBIiI\nk4HjgWOBnYDXgZsiYnDZe5wDHAgcBuwFbApc3YfvUFPOk5AkqfcqChIppf9OKd2YUnospfRoSulU\n4DVgl1KTE4EzUkq/SSk9ABxNDgoHA0TEcOALQGdK6faU0gzg88DuEbFTjb5Tn+yzDzz/PDz8cNGV\nSJJU/6qeIxERgyLiCGAocGdEjAPGALd0t0kpLQDuAXYt7ZoMtPVoMxt4uqxNofbYA9raHN6QJKk3\nKg4SEbFtRCwEFgMXAIeUwsAYIAHzerxkXukYwGhgSSlgrKpNoYYNgw9+0CAhSVJvtFXxmj8DHwBG\nAJ8CfhURe9W0qlXo7OxkxIgRK+zr6Oigo6Ojpp+z337wr/8Ky5blqzgkSWoEU6ZMYcqUKSvsmz9/\nfr9+ZqQ+ziqMiKnAo8CZwGPADiml+8qO3wbMSCl1RsS+wM3AhuW9EhHxJHB2SuncVXzGJGD69OnT\nmTRpUp/q7Y1p0/IQx913w8479/vHSZLUb7q6umhvbwdoTyl11fr9a7GOxCBgSErpCeB5YL/uA6XJ\nlTsDd5Z2TQfe6tFmAjAWuKsGtdTEzjvnJbNvvLHoSiRJqm+VriPxzxGxZ0RsUZor8QNgb+DSUpNz\ngFMj4qCI2A74FTAHuA7+OvnyYuCsiNgnItqBXwDTUkr31ug79VlbG3zkIwYJSZLWpNI5EqOAXwLv\nAuYD9wEfTSndCpBSOjMihgIXAhsAdwAHpJSWlL1HJ7AMuAoYAtwIHNeXL9Ef9t8fjjkGXnoJNt64\n6GokSapPFQWJlNIxvWhzGnDaao4vBk4obXVr//3zolRTp8IRRxRdjSRJ9cl7bazCppvC9tvD735X\ndCWSJNUvg8RqHHAA3HQTvP120ZVIklSfDBKrsf/+MG8ezJxZdCWSJNUng8Rq7LZbXunS4Q1JklbO\nILEagwfDhz/sZaCSJK2KQWIN9t8f7rwTXn216EokSao/Bok12H//fM+NW25Zc1tJklqNQWINttgC\nJk50noQkSStjkOiF/ffP8yT6eH8zSZKajkGiFw44AJ59Fh58sOhKJEmqLwaJXthzTxg6FH7zm6Ir\nkSSpvhgkemGddfLwxrXXFl2JJEn1xSDRS4ccAvfck4c4JElSZpDopQMPhLY2uO66oiuRJKl+GCR6\nacMNYd994b/+q+hKJEmqHwaJChxyCNx2G7z8ctGVSJJUHwwSFfjkJ/Mql169IUlSZpCowKabwi67\nwDXXFF2JJEn1wSBRoUMOgZtugkWLiq5EkqTiGSQqdMgh8MYbOUxIktTqDBIV2nJLeP/7Hd6QJAkM\nElU55BC44QZYurToSiRJKpZBogqHHgqvvpovBZUkqZUZJKqwww6wxRYOb0iSZJCoQkQe3rj2Wnj7\n7aKrkSSpOAaJKh12GDz3HEybVnQlkiQVxyBRpd12g7Fj4bLLiq5EkqTiGCSqNGgQHHkkXHklLFlS\ndDWSJBXDINEHRx6Zb+B1441FVyJJUjEMEn2w3XZ5u/zyoiuRJKkYBok+OuoouP56WLiw6EokSRp4\nBok+6ujI995wTQlJUisySPTR2LGw115evSFJak0GiRo48ki4+WZ4/vmiK5EkaWAZJGrg8MNhrbXg\niiuKrkSSpIFlkKiBjTaCAw5weEOS1HoMEjVy1FFw773wyCNFVyJJ0sAxSNTIQQfBsGGuKSFJai0G\niRpZd1341Kfgl7/0jqCSpNZhkKihY46BJ56AW28tuhJJkgaGQaKGdtsNttkGfv7zoiuRJGlgVBQk\nIuKUiLg3IhZExLyIuCYitlpJu9MjYm5ELIqIqRExvsfxIRFxfkS8GBELI+KqiBjV1y9TtAg49li4\n9lr4y1+KrkaSpP5XaY/EnsBPgZ2BDwNrA/8TEet2N4iIk4HjgWOBnYDXgZsiYnDZ+5wDHAgcBuwF\nbApcXeV3qCuf+Uy+xfgvf1l0JZIk9b+KgkRK6eMppUtSSrNSSvcDnwPGAu1lzU4Ezkgp/Sal9ABw\nNDkoHAwQEcOBLwCdKaXbU0ozgM8Du0fETn3+RgXbaKM86fLnP4eUiq5GkqT+1dc5EhsACXgZICLG\nAWOAW7obpJQWAPcAu5Z2TQbaerSZDTxd1qahHXssPPoo3HZb0ZVIktS/qg4SERHkIYr/Syk9VNo9\nhhws5vVoPq90DGA0sKQUMFbVpqHtuSdMmOCkS0lS82vrw2svALYBdq9RLWvU2dnJiBEjVtjX0dFB\nR0fHQJXQKxHwpS/Bt78NL74II0cWXZEkqRVMmTKFKVOmrLBv/vz5/fqZkaoYyI+InwEHAXumlJ4u\n2z8OeAzYIaV0X9n+24AZKaXOiNgXuBnYsLxXIiKeBM5OKZ27ks+bBEyfPn06kyZNqrjeIrz4Imy2\nGfzgB/CNbxRdjSSpVXV1ddHe3g7QnlLqqvX7Vzy0UQoRnwT2LQ8RACmlJ4Dngf3K2g8nX+VxZ2nX\ndOCtHm0mkCdt3lVpPfVq5Eg49FAnXUqSmlul60hcABwFHAm8HhGjS9s6Zc3OAU6NiIMiYjvgV8Ac\n4Dr46+TLi4GzImKfiGgHfgFMSynd2/evVD++9CWYPRvuuKPoSiRJ6h+VzpH4Cnky5W099n+eHBhI\nKZ0ZEUOBC8lXddwBHJBSWlLWvhNYBlwFDAFuBI6rtPh6t88+edLluefCXnsVXY0kSbVXUZBIKfWq\nByOldBpw2mqOLwZOKG1Na9Ag6OyEr34VHn8c3vveoiuSJKm2vNdGP/vMZ/IiVeedV3QlkiTVnkGi\nnw0dmnskLr4YXn216GokSaotg8QAOO44WLIELrqo6EokSaotg8QAGDMGjjwyD28sXVp0NZIk1Y5B\nYoB0dsIzz8DVTXGPU0mSMoPEANl+e9hvPzjrLBeokiQ1D4PEAPrGN+APf4A771xzW0mSGoFBYgDt\nvz9svXXulZAkqRkYJAZQ9wJV11yTl86WJKnRGSQG2Gc/m+8K+r3vFV2JJEl9Z5AYYEOGwCmnwOWX\nw8MPF12NJEl9Y5AowBe/CO96l70SkqTGZ5AoQHevxGWX2SshSWpsBomCfPGLecXL73+/6EokSaqe\nQaIg66yTeyUuvRQeeaToaiRJqo5BokDHHGOvhCSpsRkkCrTOOvCtb+VeiUcfLboaSZIqZ5Ao2Je+\nBKNGwemnF12JJEmVM0gUbJ114B/+IfdKzJhRdDWSJFXGIFEHjjkm34Pjm9/0zqCSpMZikKgDbW3w\n4x/DrbfCf/930dVIktR7Bok68fGPw4c+BH//97B0adHVSJLUOwaJOhEBP/lJvivoRRcVXY0kSb1j\nkKgjO+yQ7w76j/8ICxYUXY0kSWtmkKgz3/sevPYa/OAHRVciSdKaGSTqzGab5as3zj4bnnqq6Gok\nSVo9g0QdOukk2Hhj+PrXi65EkqTVM0jUoWHD4Nxz4frr4dpri65GkqRVM0jUqcMOgwMPhOOPh4UL\ni65GkqSVM0jUqQj42c/glVfyEtqSJNUjg0Qde8974LTT4LzzoKur6GokSXong0Sd+7u/g223hWOP\nhWXLiq5GkqQVGSTq3Nprw4UX5h6J888vuhpJklZkkGgAu+wCX/kKfOc78PjjRVcjSdJyBokG8cMf\nwsiRcPTRDnFIkuqHQaJBDB8Ol1wCd94JZ55ZdDWSJGUGiQayxx5w8sn5ctAZM4quRpIkg0TD+ad/\nyldxHHUUvPFG0dVIklqdQaLBDB4Ml16aJ12eckrR1UiSWp1BogG9//3wox/l+3FMnVp0NZKkVlZx\nkIiIPSPi+oh4NiLejohPrKTN6RExNyIWRcTUiBjf4/iQiDg/Il6MiIURcVVEjOrLF2k1J5wAH/lI\nHuKYM6foaiRJraqaHon1gD8BXwNSz4MRcTJwPHAssBPwOnBTRAwua3YOcCBwGLAXsClwdRW1tKxB\ng+Cyy2DIEDj8cFiypOiKJEmtqOIgkVK6MaX0Dyml64BYSZMTgTNSSr9JKT0AHE0OCgcDRMRw4AtA\nZ0rp9pTSDODzwO4RsVO1X6QVbbIJXH11XvXyG98ouhpJUiuq6RyJiBgHjAFu6d6XUloA3APsWto1\nGWjr0WY28HRZG/XSTjvlm3qdf35eZ0KSpIFU68mWY8jDHfN67J9XOgYwGlhSChiraqMKHHssfO5z\n8OUvw8yZRVcjSWolXrXRBCLgggtgwgQ49FB45ZWiK5IktYq2Gr/f8+R5E6NZsVdiNDCjrM3giBje\no1didOnYKnV2djJixIgV9nV0dNDR0dHXuhveuuvCf/0XTJ6cw8SNN+aJmJKk1jFlyhSmTJmywr75\n8+f362dGSu+48KL3L454Gzg4pXR92b65wI9TSmeXng8nh4qjU0pXlp6/AByRUrqm1GYCMAvYJaV0\n70o+ZxIwffr06UyaNKnqelvBtGmw335w2GF54apY2XRYSVLL6Orqor29HaA9pdRV6/evuEciItYD\nxrP8io33RsQHgJdTSs+QL+08NSIeBZ4EzgDmANdBnnwZERcDZ0XEK8BC4Dxg2spChCqz++550uXf\n/A285z3w/e8XXZEkqZlVM7QxGfg9eVJlAn5S2v9L4AsppTMjYihwIbABcAdwQEqpfKWDTmAZcBUw\nBLgROK6qb6B3OPzwfIfQk06CLbbIkzElSeoPFQeJlNLtrGGSZkrpNOC01RxfDJxQ2tQPvvlNePJJ\n+NrXYPPN4YADiq5IktSMvGqjSUXke3EccAB86lNwxx1FVyRJakYGiSbW1gb/+Z950aqPfxzuuqvo\niiRJzcYg0eSGDoUbboAddoD994c//rHoiiRJzcQg0QKGDYPf/ha22QY++lH405+KrkiS1CwMEi1i\n/fXzIlXvex98+MNw//1FVyRJagYGiRYyYgT8z//kS0L33hvuvLPoiiRJjc4g0WI23BBuvRW22y73\nTPzud0VXJElqZAaJFjRiRB7m+MhH4BOfyEtpS5JUDYNEi1p3Xbj6avjMZ/J2zjlFVyRJakS1vvun\nGkhbG1x8MWyyCXR2wuOPw09+AmuvXXRlkqRGYZBocRHwox/lG3x9/evw4INwxRWw8cZFVyZJagQO\nbQiAr34Vbr4ZZs7MK2E+8EDRFUmSGoFBQn+1997whz/AeuvBrrvCddcVXZEkqd4ZJLSCcePy+hIf\n/SgcfHCeO7F4cdFVSZLqlUFC7zBsGFx1Vb6S44ILYLfd4JFHiq5KklSPDBJaqQg48cR8x9CFC2HS\nJNebkCS9k0FCqzVpEkyfDocemteb6OiAF14ouipJUr0wSGiN1l8ffvlLuOyyfK+ObbaBX/8aUiq6\nMklS0QwS6rUjj4SHHoJ99sk9E4ccAnPnFl2VJKlIBglVZPRouPLKPBnzrrty78RPfwpvvVV0ZZKk\nIhgkVJXDDsu9E4cfnidl7rgj/P73RVclSRpoBglVbeON4d/+LS9itf768KEP5WDx1FNFVyZJGigG\nCfVZeztMmwaXXJIft9oqL2T1l78UXZkkqb8ZJFQTEfDpT8Ps2XDqqfCLX8B73wvf/S7Mn190dZKk\n/mKQUE2tv34OD48/DscdB//yL3nZ7e99D155pejqJEm1ZpBQv9h443x78scey5eNfv/7MHYsfPOb\n8OyzRVcnSaoVg4T61aabws9+Bk8+CV//Olx0Ue6h+OIX4b77iq5OktRXBgkNiNGjc6/E00/nxxtv\nhA98APbaC/7zP2Hp0qIrlCRVwyChATV8OPz93+ceiiuvhEGD4Igj8rDHd7+bh0IkSY3DIKFCrL02\nfOpTcNttcP/9cPDBcO65MH487L03/Pu/57uOSpLqm0FChdt2W/jXf4Xnn8+3Kh88OM+hGDMmT9S8\n9lp4882TLEyiAAAJ7klEQVSiq5QkrYxBQnVj6FA46iiYOjUPfXznO/Dgg/nmYKNG5XUqrr8eFi0q\nulJJUjeDhOrS2LHw7W/DzJkwa1aeVzFzJnzykzByJBx0EPz85959VJKKZpBQ3dt66zwR8/774c9/\nhtNPhwUL4Gtfg802yzcMO+kkuPlmh0AkaaAZJNRQJkzIi1rdfnu+l8ell+Y5FpdcAh/5CGy4IXz0\no/CDH+T7fixeXHTFktTc2oouQKrWRhvlORVHHQUpwQMP5PkVU6fmIPHtb8M668Auu8Aee+THnXfO\nQyOSpNowSKgpRMB22+XtG9+At97KcyruuAP+93/hwgvz/T4A3ve+HCg++EGYNAl22CGvbyFJqpxB\nQk2prS3f3ry9Hf7u73KPxZNPwt13wz335Merr14+9DF+fJ5rsf32OYxsu21eynuQg3+StFoGCbWE\niBwMxo2Djo68b+nSPHmzqwtmzMiPU6fCq6/m40OHwjbbwMSJeW7G1lvnbfx4GDKkuO8iSfXEIKGW\ntfbay4dDPvvZvC8leO65fIXIAw/kbfZsuOGG5QEjAjbfPAeK970vP44bB+95T95GjsxtJKkVGCS0\nSlOmTKGj+9f3FhGR71i66abwsY8t358SvPBC7sF45JF8T5BHH4Xp0/NNxxYsWN526NC8Dsbmmy/f\n3v3uvL3rXfm9N9545cMmrXjOi+Y5H3ie8+ZSaJCIiOOAbwJjgJnACSmlPxRZk5bzf/blIvLqmqNG\n5TuWlksp91Y8+eTy7amn4Jlncs/G736Xl/9Oaflr1l47h4rRo1fcrrtuCil1sMkmsMkmuXdj5Mh8\n9Yn6h3/OB57nvLkUFiQi4m+BnwDHAvcCncBNEbFVSunFouqSKhWR16/YcMM8YXNlliyBefPySpzl\n27x5ebvvvvw4Z06+nLWnddfNvRgbbZQfN9hg+WduuGF+PmJE3oYPX/7z+uvn54MH9+85kNS6iuyR\n6AQuTCn9CiAivgIcCHwBOLPAuqSaGzx4+TDH6nziE3D55XkY5cUX8+NLL+Xt5Zfz9tJL8Mor8Oyz\nuSfklVfy9tZbq//89dfP23rrwbBheVtvvZVv666bh2iGDs0/r7tu7hXp+Vi+DRniVS5SKyokSETE\n2kA78M/d+1JKKSJuBnYtoiapXnT/Iz9uXO9fk1JeHnz+/OXbwoV57kb542uvvXN77jl4/fXl2xtv\n5BujLVoEb79dWe1rrZUDRfk2ePDyx+5t7bWXP/b8uXtra3vn4+q2tdZavvV8vrJt0KD8+Oqr+aqd\n8n2DBlW3Raz5UWo2RfVIjATWAub12D8PmLCS9usAzJo1q5/LUrn58+fT1dVVdBktpVbnvK1t+bBH\ntVLKvRxvvpm3xYvztmRJfr506fLnixfn50uW5K3756VL83uUP+/e9+abOdy89daat2XLVtzK91Ua\ndt5pPpMmDeyf84jl4aL8efdW6b6ex1b1vPzzy9us7Piq2q/su6yqzaqC09y589lqq65ev/ea9lXz\nut6GumrCX7WBsZav+9a3YMst889l/3b2y2yrSOUzwAZIRLwLeBbYNaV0T9n+HwF7pZR27dH+SOCy\nga1SkqSmclRK6fJav2lRPRIvAsuA0T32jwaeX0n7m4CjgCcB7+8oSVLvrQO8h/xvac0V0iMBEBF3\nA/eklE4sPQ/gaeC8lNKPCylKkiRVpMirNs4C/iMiprP88s+hwH8UWJMkSapAYUEipXRFRIwETicP\nafwJ+FhK6YWiapIkSZUpbGhDkiQ1PpePkSRJVTNISJKkqjVEkIiI4yLiiYh4IyLujogPFl1TM4iI\nUyLi3ohYEBHzIuKaiNhqJe1Oj4i5EbEoIqZGxPgi6m1GEfGtiHg7Is7qsd9zXkMRsWlEXBIRL5bO\n6cyImNSjjee8RiJiUEScERGPl87noxFx6kraec6rFBF7RsT1EfFs6e+QT6ykzWrPb0QMiYjzS/9f\nLIyIqyJiVKW11H2QKLu51z8CO5LvEnpTaaKm+mZP4KfAzsCHgbWB/4mIdbsbRMTJwPHkm6vtBLxO\nPv/eBqqPSoH4WPKf6fL9nvMaiogNgGnAYuBjwETg/wGvlLXxnNfWt4AvA18DtgZOAk6KiOO7G3jO\n+2w98kUKXwPeMdmxl+f3HPI9rg4D9gI2Ba6uuJKUUl1vwN3AuWXPA5gDnFR0bc22kZcufxvYo2zf\nXKCz7Plw4A3gb4qut5E3YBgwG/gQ8HvgLM95v53rHwK3r6GN57y25/wG4N967LsK+JXnvF/O99vA\nJ3rsW+35LT1fDBxS1mZC6b12quTz67pHouzmXrd070v523pzr/6xATnZvgwQEeOAMax4/hcA9+D5\n76vzgRtSSreW7/Sc94uDgD9GxBWlIbyuiDim+6DnvF/cCewXEVsCRMQHgN2B35aee877US/P72Ty\nEhDlbWaTF4as6L9BkQtS9UalN/dSlUori54D/F9K6aHS7jHkYLGy8z9mAMtrKhFxBLAD+X/knjzn\ntfde4KvkIdLvk7t5z4uIxSmlS/Cc94cfkn/j/XNELCMPo38npfTr0nHPef/qzfkdDSwpBYxVtemV\neg8SGjgXANuQf2tQP4mId5MD24dTSkuLrqdFDALuTSl9t/R8ZkRsC3wFuKS4spra3wJHAkcAD5GD\n87kRMbcU3tRE6npog8pv7qUqRMTPgI8D+6SUnis79Dx5Tornv3bagU2ArohYGhFLgb2BEyNiCfm3\nAc95bT0HzOqxbxYwtvSzf85r70zghymlK1NKD6aULgPOBk4pHfec96/enN/ngcERMXw1bXqlroNE\n6Te26cB+3ftKXfD7kcfg1EelEPFJYN+U0tPlx1JKT5D/QJWf/+Hkqzw8/9W5GdiO/BvaB0rbH4FL\ngQ+klB7Hc15r03jnUOgE4Cnwz3k/GUr+JbDc25T+zfGc969ent/pwFs92kwgB+y7Kvm8Rhja8OZe\n/SQiLgA6gE8Ar0dEd3qdn1Lqvl37OcCpEfEo+TbuZ5CvmrlugMttCiml18ldvX8VEa8DL6WUun9r\n9pzX1tnAtIg4BbiC/JfpMcCXytp4zmvrBvL5nAM8CEwi/919UVkbz3kfRMR6wHhyzwPAe0uTWl9O\nKT3DGs5vSmlBRFwMnBURrwALgfOAaSmleysqpujLVnp5acvXSifiDXJSmlx0Tc2wkX9DWLaS7ege\n7U4jX0q0iHw/+/FF195MG3ArZZd/es775Rx/HLivdD4fBL6wkjae89qd7/XIvwQ+QV6/4BHgn4A2\nz3nNzvHeq/g7/Be9Pb/AEPJaQi+WgsSVwKhKa/GmXZIkqWp1PUdCkiTVN4OEJEmqmkFCkiRVzSAh\nSZKqZpCQJElVM0hIkqSqGSQkSVLVDBKSJKlqBglJklQ1g4QkSaqaQUKSJFXt/wMf5LRxfh2OkwAA\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(loss)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.18613581],\n", " [-0.74929568],\n", " [ 0.95245495],\n", " [-2.602146 ],\n", " [ 0.73246543]])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "params[-1]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.19670626],\n", " [-0.74645194],\n", " [ 0.93774813],\n", " [-2.62540124],\n", " [ 0.74616483]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = LinearRegression(fit_intercept=False)\n", "model.fit(X,y)\n", "model.coef_.T" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.93191854, 0.93774813],\n", " [-2.62216904, -2.62540124],\n", " [ 0.74418434, 0.74616483],\n", " [ 0.64963419, 0.67411002],\n", " [ 1.00760672, 1.0142675 ]])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compare parameters side by side\n", "np.hstack([params[-1],model.coef_.T])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stochastic Gradient Descent" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "def dL_dw(X,e,w):\n", " return -2*X.T.dot(e)/len(X)\n", "\n", "def gradient_descent(gamma=1e-3, n_epochs=100, batch_size=20, decay=0.9):\n", " epoch_run = int(len(X)/batch_size)\n", " \n", " # get starting conditions\n", " w = np.random.randn(D,1)\n", " params = []\n", " loss = np.zeros((n_epochs,1))\n", " for i in range(n_epochs):\n", " params.append(w)\n", " \n", " for j in range(epoch_run):\n", " idx = np.random.choice(len(X),batch_size,replace=False)\n", " e = y_obs[idx] - X[idx].dot(w) # Really important that you use y_obs and not y (you do not have access to true y)\n", " #update parameters\n", " w = w - gamma*dL_dw(X[idx],e,w)\n", " loss[i] = e.T.dot(e)/len(e) \n", " gamma = gamma*decay #decay the learning parameter\n", " \n", " return params, loss\n", " \n", "params, loss = gradient_descent()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(loss)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.18387464, -0.19670626],\n", " [-0.74895223, -0.74645194],\n", " [ 0.9476572 , 0.93774813],\n", " [-2.62055252, -2.62540124],\n", " [ 0.75009766, 0.74616483]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.hstack([params[-1],model.coef_.T])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "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.6.1" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 } }, "nbformat": 4, "nbformat_minor": 1 }