{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### 一.简介 \n", "通过前面几节的介绍,大家可以直观的感受到:对于大部分机器学习模型,我们通常会将其转化为一个优化问题,由于模型通常较为复杂,难以直接计算其解析解,我们会采用迭代式的优化手段,用数学语言描述如下: \n", "\n", "$$\n", "\\min_{v^k} f(x^k+v^k)\n", "$$ \n", "\n", "这里目标函数为$f(x)$,当前优化变量为$v^k$,目标即是找到一个$v^k$对当前的$x^k$进行更新,使得函数值尽可能的降低,如果目标函数一阶可微,对其作一阶泰勒展开即可得到如下梯度下降的更新公式: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 二.梯度下降\n", "对目标函数作一阶泰勒展开: \n", "\n", "$$\n", "f(x^k+v^k)=f(x^k)+\\triangledown f(x^k)^Tv^k\n", "$$ \n", "\n", "所以要使得$f(x^k+v^k)0\n", "$$ \n", "\n", "则一定能使$\\triangledown f(x^k)^Tv^k<0$,所以,我们就得到了梯度下降的更新公式: \n", "\n", "$$\n", "x^{k+1}=x^k+v^k=x^k-\\lambda_k \\triangledown f(x^k)\n", "$$ \n", "\n", "这里$\\lambda_k$一般可以设置一个较小的定值,或者初始设置一个定值并使其随着迭代次数增加而递减;另外更好的做法是利用一维搜索:$min_{\\lambda_k}f(x^k-\\lambda_k\\triangledown f(x^k))$求一个最优的$\\lambda_k$,接下来我们想一下下面两个问题: \n", "\n", "(1)梯度下降法一定能使得函数值下降吗? \n", "\n", "(2)若它能使函数值下降,则它是最优的方向吗? \n", "\n", "对于第一个问题,泰勒展开其实是有一个条件的,那就是$v^k\\rightarrow 0$,再结合上面的更新公式,如果$\\lambda_k$取得过大时,我们是不能省略泰勒展开后面的项的,而且后面项的取值也不一定能保证小于0,所以有时我们设置的学习率$\\lambda_k$较大时,函数值反而会上升。 \n", "\n", "所以,当$v^k$的取值大到不能忽略后面的项时,泰勒展开的二阶项取值就必须要考虑其中了,所以这时梯度下降法未必时最优的方向,接下来我们看下二阶展开的情况: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 三.牛顿法\n", "\n", "对其作二阶泰勒展开: \n", "\n", "$$\n", "f(x^k+v^k)=f(x^k)+\\triangledown f(x^k)^Tv^k+\\frac{1}{2}{v^k}^T\\triangledown^2 f(x^k)v^k\\\\\n", "=f(x^k)+g_k^Tv^k+\\frac{1}{2}{v^k}^TH_kv^k\n", "$$ \n", "\n", "这里为了方便,记$g_k=g(x^k)=\\triangledown f(x^k),H_k=H(x^k)=\\triangledown^2 f(x^k)$,$H_k$表示Hessian矩阵在$x^k$处的取值,Hessian矩阵的定义: \n", "\n", "$$\n", "H(x)=[\\frac{\\partial f}{\\partial x_i\\partial x_j}]_{n\\times n}\n", "$$ \n", "\n", "对于大部分机器学习模型,通常目标函数是凸的,所以$H(x)$半正定,即对于$\\forall v^k$,都有${v^k}^TH_kv^k\\geq0$,此时,$f(x^k)+g_k^Tv^k+\\frac{1}{2}{v^k}^TH_kv^k$是关于$v^k$的凸二次规划问题,所以最优的$v^k$在其梯度为0处取得: \n", "\n", "$$\n", "\\frac{\\partial f(x^k+v^k)}{\\partial v^k}=g^k+H^kv^k=0\\\\\n", "\\Rightarrow v^k=H_k^{-1}(-g_k)\n", "$$ \n", "\n", "可以发现牛顿法对比梯度下降法,其实牛顿法是对梯度法的方向进行了一个改变$H_k^{-1}$,所以,我们可以得到牛顿法的更新公式: \n", "\n", "$$\n", "x^{k+1}=x^k-\\lambda_kH_k^{-1}g_k\\\\\n", "=x^k+\\lambda_k p_k\n", "$$ \n", "\n", "这里记$p_k=-H_k^-1g_k$; \n", "\n", "可以发现牛顿法的复杂有点高,因为要求解$H_k^{-1}$,那么有没有方便一点的方法呢?比如构建一个矩阵去近似$H_k$或者$H_k^{-1}$,这便是拟牛顿法的基本思想" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 四.拟牛顿条件 \n", "上面说到了利用一个矩阵去近似Hessian矩阵或者Hessian矩阵的逆,那么这个近似矩阵需要满足怎样的条件呢?我们还是从二阶泰勒展开出发,稍微变换一下: \n", "$$\n", "f(x^{k+1})=f(x^k)+g_k^T(x^{k+1}-x^k)+\\frac{1}{2}(x^{k+1}-x^k)^TH_k(x^{k+1}-x^k)\n", "$$ \n", "\n", "两边对$x^{k+1}$求偏导可得: \n", "\n", "$$\n", "g_{k+1}=g_k+H_k(x^{k+1}-x^k)\n", "$$ \n", "\n", "这便是拟牛顿条件,为了方便,记$y_k=g_{k+1}-g_k,\\delta_k=x^{k+1}-x^k$,所以: \n", "\n", "$$\n", "y_k=H_k\\delta_k\n", "$$ \n", "\n", "所以,拟牛顿法也要满足和$H_k$一样的性质: \n", "\n", "(1)正定性; \n", "\n", "(2)满足拟牛顿条件 \n", "\n", "接下来,简单证明一下如果满足性质(1):正定性,更新时可以满足函数值下降,假设$G_k$去近似$H_k^{-1}$,所以:$G_k\\succ 0$,那么迭代公式为: \n", "\n", "$$\n", "x^{k+1}=x^k-\\lambda_kG_kg_k,\\lambda_k>0\n", "$$ \n", "\n", "将其带入二阶泰勒展开式中: \n", "\n", "$$\n", "f(x^{k+1})=f(x^k)-\\lambda_kg_k^TG_kg_k+\\frac{1}{2}\\lambda_k^2g_k^TG_k^TH_kG_kg_k\n", "$$ \n", "\n", "通常$\\lambda_k^2<<\\lambda_k$,所以可以省略第三项,而第二项由于$G_k\\succ 0$,所以$-\\lambda_kg_k^TG_kg_k< 0$,所以$f(x^{k+1})]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#损失函数对比\n", "plt.plot(range(0, len(sgd_model.losses)), sgd_model.losses,'b')\n", "plt.plot(range(0, len(dfp_model.losses)), dfp_model.losses,'r')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以发现,大部分情况下DFP比SGD收敛的更快,且收敛效果更好" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXd4XNXRh9+521fFaqbXQCB0AqaE3kOAj95LqHFoIQECAUJCCb33DqGZ3oshhA4BAib03sHgrr599873x1nLknbvSiutmn3e59ED2nv3nFlJnnvOnJnfiKpisVgslvkHZ6QNsFgsFktlsY7dYrFY5jOsY7dYLJb5DOvYLRaLZT7DOnaLxWKZz7CO3WKxWOYzrGO3WCyW+Qzr2C0Wi2U+wzp2i8Vimc/wj8SkTU1Nuswyy4zE1BaLxTJmefvtt2er6vi+7hsRx77MMsswZcqUkZjaYrFYxiwi8l1/7rOhGIvFYpnPsI7dYrFY5jOsY7dYLJb5DOvYLRaLZT7DOnbLfIFqCnU7sP0FLBbr2C1jHM1+i9t8CDrjl+jM9dDZW+Imnh5psyyWEWVE0h0tlkqguenonN1BO4D8Sj03FdpOxNUETnSXEbXPYhkp7IrdMmbRzhtA43Q59S6S0HEeqrmRMMtiGXGsY7eMXVLPAlmvi5D9ajitsVhGDdaxW8Ywpf58FcT+eVsWTOxfvmXsEtkBCBa/JrXgW25YzbFYRgvWsVvGLFJ1CDi1FOYAhJHaMxGRkTDLYhlxrGO3jFnEaUAaH4XITiARwAeBNZGGm5Dw5iNtnsUyYth0R8uYRnzjkXHnwrhzR9oUi2XUYB27xTJK0OyXaOe1kH4NCENkV6TqYMSpHmnTLGMM69gtllGApt9FWw4CTQKueTF2A5p8HBofss7dUhY2xm6xjAK07aR8sZXb7dUU5KahsX+OlFmWMYp17BbLCKPZHyD3o8fVFCQeGlZ7LGMfG4qxWCqMahLSbwMuBNZCnKo+3pEC8RUqI3SRrKyBlvke69gtlgrixu6BzvPo2gxrFq0+Cqma6J1X71sa8HmM6EBwgyGw1DI/Y0MxFkuF0OSz0HGOiZVrp/kiCbFr0MT9nu8TCUD1H4FIkYthpPrIIbPZMn9iHbvFUiG08zKKhk00AZ1XlGwCItEDoOZ4I4UgUSAEvuWQ+lsRv5VGsJSHDcVYLJUi+6X3NbfZrOClpuhlEUGqfotG94Hcd0AY8S8xNHZa5nusY7dYKoVEQGNeF0FCfQ8hAfAvX1m7LAscgw7FiMiSIvKCiHwiIh+JyB8rYZjFMuYI7woEilzwQ2grRDyUKC2WClOJGHsWOF5VVwLWB44SkZUrMK7FUoBmp5rSe/VqsDFySM0fwbcEEO72ahicRqT21AGPq5pGNTNo+ywLDoMOxajqNGBa/v87ROQTYHHg48GObbHMRdPvoG0nm0Ie8QF+tPpYnKr9KjeH24bG74DEY0AOQtsYrRbfQv16vzi10PgwmngYko+C5iC8HRLdE3GKx9ZL2pN6De04D7KfA4IGN0Bq/4r4f1b2WJYFCyl1Ul/2YCLLAC8Dq6pqu9d9EyZM0ClTplRsXsv8jWa/RGfvBiR6XYlAzYkVce7qNqOzdzGHnKTyrwZAqpDGBxD/UoOeoyx7Ui+hLX+gZ5aN5O15ZNjtsYwORORtVZ3Q130VS3cUkWrgQeBPxZy6iEwUkSkiMmXWrFmVmtayAKAdVzHP2XYnAZ2XVSQsox2XgTur1zwZ0Ha0/YxBj1+WLapo+5kUpk4qaBztvGpY7bGMPSri2EUkgHHqk1S1qLCFqt6gqhNUdcL48eMrMa1lQSH9Bj3FsbqTgdz3g58j+TjFG2O7kH4d1d67hSHEnQG5mV4XIfX88NkyhKhmSub2WwZOJbJiBLgZ+ERVLxm8SRZLL0plk2gOJOx9vb9osR1BlwF9XK80QgnhmDGNag6383rcGeuhM1ZFZ66D23E5qumRNm2+ohIr9g2BA4AtROTd/Nd2FRjXYjFEdsWzabVvKcS32ODnCKzifc1pAhk3+Dn6i7MQ+Bb1uOiD8NbDZ0uF0bYToPNq0BZMaKkdYjejLUfY1XsFGbRjV9VXVVVUdXVVXTP/NbkSxlkskG9a7VuYns7dAYkg486pzBzVx9MzTXEuYag+flgbY4sIUnt6EXscc3haffSw2VJJNPMFJJ+l8OwgCZkpkHlnJMyaL7FaMZZRjzi1SOPDUDURnEXBaYTw9kjjg0hwjcrMEVofxl1kxpYqkGpT/l9zCk50x4rMUZ49GyINt0BgTUxoJl/k1PgQ4lt82O2pCKkXKH6OAWgSTT4zrObMz1hJAcuYQJxapOYYqDlmyOZwItug4S0h+xmQA/+KI1otKsEJSON9qLqADOuuwTK2sSt2i6UbIj4ksDISWG3USACIOPOHUw9thudaUsLIGD47GG1Yx26xWAaFahJ1O/s8/JTAChDagsKzgzAE1jJflopgHbvFYhkQmv0at/lAdMZa6Mx10dnbmGYjJZC6i6H6SJA6zGFwDVQdjNRfP3/sSkYJNsZusVjKRnM/onP2yHeJyq/Uc9+hrceh487DiRTPeBbxIdWHo1W/BzJAwDr0IcCu2C2WCqC5OWjmE9TtGGlThgXtvM60ACwopEpCx9n5A19vRASRoHXqQ4RdsVssg0Bzs9G2EyH9pqmQ1Qwa3g4ZdzoiRXqYzi+kngVyxa+5naYLlH/ZYTXJMg/r2C0jjmoWMh8BCoGVK5aNopoyTsYZh8jA/9Q18wWafAzcdiS4HoRN0wzVNNq8J+SmA1mYWxafnIy6M5CGWyvyOUYnvhLXtI/rlqHGOnbLiOLGH4WOszCFKwIIWnMiTnSvAY+pbhvafhYknzJjShCtOgTCOyHpl4y+TGjDribR6sZB/EUfKG77+RC/M29fDk08Cp0XQsM9kH4rL/Pbu+gmBen/oZmPkcB82nMmvB3EJ2Hi5L1wGsG35LCbZJmHdeyWEUNTL0L73ygoMW8/G1eqcSLblz+mptE5e+cVHzNzJ4LOq6DzSpQg4EKHoP6VQJtN8w4EDW2K1J7aVdmpyRcgcRc9pXzjkEuhrceabkka97DEhfQU6MOxa3YqZD8Fpw4CayEyNo69pGoimnwc3FZ6hmTCyLgzbex8hLGO3TJiaMfFFOqGYF7rvAQG4NhJPgO5aRSuJOc6n27zZd/teUvqBXT2/6DpCcQ3Ho3dDEXlenOQ+SDfBs+hqKSw+EqqTqobQ9uOg9RrIAFAjZRB3VVIcM2+PuWII74m0y2q49L8zigDgTWRmuORYJ99IMYkqgqZ9yH7ldEuCq6PyOgMOY2N5YFlvkNV8y3fPMj9NCANdE3+G/BaRfeFC9qJxv/ZZYMnEoTg2kDIw5AchLfytrP1T8apkzIpgxoDdybachCamz5A+4cX8S2CU3c+ziLvIwu9jUR2Q5NP43b+E3WbR9q8iqK56eicHdCW36IdZ6KtR6OzNkYzH460aUWxjn2YUE2hicdw287A7bgazf040iaNKGarXuqQ1AECAxh4sJvQDCSeNv9bqreopiC4GUS2BXpnv0Sg5ljEaSj+1uz3+eYhRTTeNYvGJw3A7pFDMx+hszYx5xrx26HzEnTmZriJ+UPUS1XR5t9C9muzg9N4/kE8G23+Lep6dgEdMaxjHwY0+z06a3O0/e+QmASxa9BZ2+LGbhtp00aWyA54RgOd8QNqbiGR/wOJDs6ufJxbqidSXMo3AMENcPwLI7XnIeP+Af6VzKFhYB2k/mqcqkO9x89+nA+/FCNtUifHCKoZtPkQo6vetVNKAUlo+/OY2X2UJP1fcGdSNL1Tc6Z5+SjDOvYhRlXRlokme6LroC0DpKDjYjTzwUiaN6JI9Z9NEwuKHLS5s9DmA/osdCkguAn4V6W4Q+7XABDewdgXXBdqjsOEW8KAzzw0/CsgdReZe0SQyI44TY/iLPQ6TuMkJLRR6SlkHCU7JDlNA7R9BEi9DHh1P3LR+P3Dac3QkP0MPPvqJiDz3rCa0x+sYx9qsh/l85yLOag0Grt9uC3qF+q247afgztjAu70lXFn74KmXqnoHOJrhHEXUjznOQO5ryH9n/LGFMfomFcfnneQAfD9DHwr5Vfycx8iQQofKH6T8171265XnKqDkPEvILV/Qar/hNTfZDTRndqy7OpBcF08Y/MAqRdwW45Es18OfI7hIjcVtEjKIwBpyH01rOYMCU5jiR2Wv0S3q5FjTGXFaG6GyUaQaghOGFTRybCR+9Fs7Ysu0FzIftv1naoL6dfQ9BTEqYbwb0akqYK6caMDkvuRrtVY9iO05Si09kyc6M4Vm0sy73mvXTWOJl9EQhuXN6YEkeojjdjU3KFUIfMWmngCyCChrVH8Jvsm+wlmpb6dyeroFRsXXxNE9yvLhtL2+aD+CrOT0zSFefBZSD2Hpl+HhvuQwM8rNnfF8S1lnF7RnqUh8K8w7CZVnPCW0H6qx0UfEtljWM3pD2PAM+Zzk9tOhuS/8o2NFQhA3cVl/6MfdnxLmwyJ4hchYP7w1W1Bm/c3zlTjKAHouBT1LQ++RvMgi+xlVrlDjCbuz6cM9v7HmoSOf6CR7SqnVS5+vDeOTomVUpnTiEBwXRNemfsaQHgTVHXY864luC40PoHGb4fEA3kxre4oaAydsxta9Tuk6sDB7RKGitAmZiekscJr4oxKp1cuIhGouxJtOQqz805jdpkBqDke8S8zovYVY0yEYrT9NEj+G0jPSw3TVrOCHOXbVQn8Iq+ZUSzcEECiBwKgrcdD9ptecfgM5D6B9KvQeS06e6vhicknHqV4fjmAVjamGNqKojF2AAkhHiqBA8FLL3ykimnEvwRSc5JHrvxckhC7AZ2zM+q2Dptt/UXEh9TfCtJg8vABkyUUQequQHzjR9C6yiGhjZHxT0PVwRDcCCJ7Io3341QdONKmFWXUr9jVbYHE4xQ/oMmgnTcidecPt1llIfXXmdW4Oyf/jzgEuFB7JhJYwYSY0m/i2Q8SMPnOKbTlSBj/0hBXKHrtMPJ4HiSVj/iXQqN7Qfx+oLuDi0BwMySw+qDncOOPQOxKyP2AShVEdkWqjzXhrhFHKX7+0p0U5GaindchtScNh1FlIYGfw0Ivm0bVua/AWdiEtUbFz7dyiG8xpOb4kTajX4x6x072S5CQRwwvB5n/DbtJ5SK+RaDpGUi/YsSunHoIb4s49eaG3E8lPmMv3FnmIVH9RyS03tAYHP41dH5N8TzrHFS4MlJq/gqBldHO683PwtcE0UOQ6L6DHtvtvAY6r6froaExiN+Lpt+ExgfzYl4ZSD2Lpv4LTi0S2alLR2aoEfGhgTUh804fd6aN3VWHjspVsEgQKri7sgyO0e/Ypa70CtGjCGS0oLnppuAk/Tb4Fkai+yLBdXre5Fu0f04dABcyU9DWiWj0QJya4ypus0T3ReN3gpuhx2pSIlB1VMXlaEXErKIju1Z0XHXboPNaCh9QaaMlk3wKDa6PNu8NuRZMHrYfjf0TjR6EUzs8qzOpOdkUwHiGv+YSM/UQ0QOQmhOtHovFk9EfY/cvb3QZiiERJLr/8NpTBpqegs7eFmL/hMwUI+fafBhu+7k97hPfIhCcgGesuejgCYjdimY+razRgDh1SOND+ebDASBoCoZqTsGpnljx+QaLus24HVfiztkDt/kQNPk0qjlT3emVOaUJNPGoKe3PTWdecU0WSEHidjT1cvG3Zr9DUy+imc8qYr8E1zQpmr6V+nF3GuJ3ofF7KzK3Zf5E+mpAOxRMmDBBp0yZ0u/7NfOxCT9omnmx9iiEfoXUXTUqhXhUs+jMDUFbCi9KBKm/uYdYkrrN6MzN6HvV1h0Hovvj1HqlYg0e1aQ50JX6UblC1OyXRs1RU3StzCUKgV9CZHeTplYsYwMgsDZkPqRoyAkg+CuchnnVweo2oy1H51NuAyYs5VsCqb8W8S9Vkc/jdt4OnRfR59+BsyjOQi9VZE7L2EFE3lbVPlXWRv+KHZDAykjT01B1KPjXgODGSN0FSN3Vo9KpA6YM2asiT5No/K4eL4nTAOHfUNaqHRfc2QO1sF+IhBGnoSJOXVWNI05PMWGSCqCtx4N20MM5axzS/zNl4F4hLolAYEI+fdaD3NSetjcfmM8Iygt3kYDcV2jz3uYBWAGc6t9CzYlAHweP7rTyq3ItCwyjP8aeR3wLITXHQs2xI21K/3CLrNS7UMjNLHhVqg5Ak0/R/1V7FALr9n3bKEAzHxsN89x0Ex7RNBrZGan9OzLAXHXN/mBSRIuWOCUgfo9x4AWVkX5wFoHo7hC/1WN0AV+3A9TMW5D7gUI5YNc8SJKToYwzAtUUJB5FEw+ah094ayS6D+LU41TtjxvZA2ZOwHM3IdVjRrvdMvzYv4yhIvCLEoVJcyVfeyKBVaH6j5h0yLnP3DDm19R7ZyL5PO8dK2XxoFDNmuySYtdyM/LFV98AiXkr7MSjaPvfBjFpa2k1x9x3RQp/AAQabsPxL50v7y/2YAkj1b+b923mA+/Vv8ZNlk1/zXbj6Jw90fazTTZM9iNTpzDrN6bxBuA4IRNKKqqAGYLInv2ez7LgYR37ECH+5SGwOkWdhvg9U/mc6kORpsdMIUR4J6j5CzQ9a8IGhIycgkTAtwzSeNeI5wpr5mPcOfujM1ZFZ6yGO2cvNN2zgEnjd3g4xSQknkBzAwwn+ZYtkTEl+a9i4YoAknrV3FV3sTmglyjm4RkGQlBzXM/sJaktEbbxGz2RfqKxm4wEbI+8/ZQpuutWui41x4N/uZ5qlXkRMqon4nZchjvjV0bPp+VItJs8hWXBZkwcno5V1G03ZciZ90xHHQBCSP01SHCt8sfLfmccgm9h8K804oeZmvnUpAoWtIcLIw23d3UCcmfvYlalxZBqZNzFSHjzAdngtv8jX9zUO3zlxxRaefx9R/bBGXeG+RyqJmsp/bZ5cIa3Nfow3VC3DZ25EcVDIyGk6ZF+5767MzcEd5bH1QCy0Otd8gEmx/55NDEZRJDwdmhgfZi9dZGDeQfq78QJzZ8djCz9PzwdMzH2sYg4tUjjHWj2K8h8YlZ1wXUHfOAr/qXBv3SFrRw42nFBEacOkETbz0SaHjLfltQ4URjErkNqTjKdlhKPdVtRC4R3hMTDFO+mFOyhyGd0ZNYxX17zOOPQ2n9A+98xh+LddgJOI7jFQj4eFA0PzcWXv16bty0A4V8j4V/Pe3vLscWzrXCh5XBYZP5fNFlKYx37MCD+5cyWej5CVSH9uvcN2Q9x3Q4cpwaJ7o1m3vXQRAlCoPzdy1xEAsi4c9DqYyHzrglVBNc1mUeJh7zehUTKV6h0ojvj+hqg5Qh6OHb3J7T5AGi4ubD4rBj+lSHztodpQXAWKv3+VKnORO24mS9whkkRUrPfmgeRf7mKF65ZBo6NsVuGjtm74nZcjPpXh8A69GwhZ+LZUndxRVJWxTceCW+NhDY0zt6pQeouxcTM555z+M33taeborCBkHya4nH7JNp2Wv9s7TogL0Jk537IUXvpn+fJTeuXHYNBMx/iztoWnb2jaQ83c33cjktsCuYowa7YFxBU05B8Bs1+bZzaIEWaRAT1/xyyJSpf3e9M1W38Dqi7EYlsn5cqaIXA2kjV7zy1xlVT+cKocQNO65PwFjD+KVMzkPkM/MsaSQf/sgMaD4DkM3iKpOW+R3Oz+tZyCU7AZLsUidfHH0Kr/9TH7yZKyYbdwTUA0NxPkHoR1IXQJhUrotLsVLNDmVv4NfcYI3Ybqjmk9oSKzNNjTrfT6OZLGPyr2FTPPrCOfQFAM5/ltUhSea33CLSfDfVXIqFNBjam5iCwcmnHDhip5TS0HQPjX8WJ7FJ63NxMtP1MSL0ACDg1aNXRxiEP4LBYfIsjNZV0NKVWpEKfyphgnK24Hue6OTTxGFJVQgCt6kCIXVv8mn8lRGrzh8r35W1S6Djf6OjXnuO5QzIP00yfD3yN3ULxfrQJiN+BVh9RsWwtVRftvAxit+ZTW10Tbht3Qd8tCBdgKvLYE5FbRGSmiHxYifEslUM1i7YcbA7bug46E0ACbf3DgFINNTcNnb01JJ4u401JSL9V+ha3A52zK6Sew4Qb0kbquOMCNHZ12XYOCaFN8fxn4xtvJGv7Ivul+XkUJZHv6OSNVB8DgfUpqFJ2xkP9nWj8btO8Y25TafJyC4mn0diNBeNp9hujsTPjl+jMdXFnbY0mn/M2IP0KnhLT4u/T/nLQ2DUQuw1I5nsxxMGdjbYciWY+rtg88xuV2s/cCmxbobEslST1sncjB3XRxANlDWeacx9m5HVLhQMKEI9Mjm5jx+8Dt53CVW8COq832/ERRqqPMXUEBYSRmr/1uatQtw11qvHueRoE32KlbRAf0nAbNNwH4V0g9GuouwYZ/wqOrwZi13v8zhMQu7lHHFxzP6Fzds/3ls2ar9x3aOuxuInJHgZUFX8dMCvqUtf7j2oKYjfRM99/Lim002PXYqmMY1fVl4HmSoxlqSya+djbsZOC7BflDZj9ELI/0ndziAJDwN+HemHyaTzlFCQwKrT3xb8s0nBPXsrBh2lmvBxSf1XJXHxN/Rd39vbozF9B+zkUd1ZgMnb6liYQEZzgGjh15+PUX4kT3goRx2QruSUOTzXWI0VVO6/Lf987LpSEjrOLH4ZG9qbnQXh3w2r6/j33l+y3eGsn5WsPLEUZthi7iEwEJgIstVRlDnEspVG3Oa+F4uWEg+D/WXmDZr8FEc+6H7NW6D1f0PRs7as3ZKnsGFWKtxfsfZtiwjiBISvgksCKSOOdeeXLbN8x6fQUtOV3FH9oBZhrLzhQexbiJVNddOx3zOGwO9McSEf3zvcw8GijJ4GeO47Us3ieC7idkPu24G9EoruiyQcg83m3z+QAIWTcRZX7uTs1JSqLMcVklqIMm2NX1RuAG8BUng7XvAsyGru5xGodwEEiu5c3qG8xvL26A8FN5ykgImalHpyA1F3Z99jhnU0hV9HVbMxsvX1LmEKtXqhmzOozfpuJxUoNWnUgUnV4P9IHB4ZIuF9inNpxHp47EafJSE/4l0UieyL+Jfo9v9t+AcQn5cdWSL+Nxm+B0LZGlKxgzhCEd+91eFpq0178YSoShIZJaPweI7SmMQiuY37WFcyfF99iqH9ZjwP6cH7nYCmGzYqZn0k8Tsmc55q/eK4OVbOAr3D1FVjLNC7WBIUO3jWhnXEXGmfqtkBgpX6nF0p0ZzR+W15FsYi2TGYKOmc3aJqM+HoW8WjrHyD1Gl3OTNug8wY08zFSf02/5h8K3MQTkHm/xA3Tkbrny87l1/Tbeafe/SGYz0BKvQj+1SD30bywi0RNyKh3z87wdvlxivydOA3gK767FgkhVQeaDJ0hRMZdgDbvm8/CmWtjBPw/Q6r2G9K5xzLWsc/XlEq9E4jfgevOQqL7I74mczAav9McvrmzQKJoZC+k5k9mdUq+/L7hRnTOvnnn3mtV6E6F1qOg/lqkzB6YImFovB/tuAwStxe5wwVNoPFbkZoTu17VzPv5KtjeK9QkpP6DZj5CAquUZUslcGP/hI7L+rjLoTwNfoN2rdSLkYKaoxAUTU4GXCS0jcll7/UAkaqJaPJxU1vQ4+8ljIw7c8T0iDQ303SJynwAoa0xLSE/MGGkyJ5IdFdEvA6gLZVKd7wbeB1YUUSmisihlRjXMkhCW+D97FbIfQ2xm9DZ26LZr9GOs6DjIhOvRc0WOz7JVBZ2kyAW/3LIQi+BZ8FL0kjSDgBxqpHI/5WIn2byRUKgmjDFMol/eeRVA6TQ5PMDsmUwqBuDjkvxPiQFEAhuNLBim9x0Shx0IG4zEtoQZ9zZOOPORcKbF90ViK8JaXzYaOsQBnwQ+CXScPOAaxwGi6beMOm0sesh/SIkH4PkvyC6N07TwzhV+1in3gcVWbGr6j6VGMdSWaT6cLNi0068nUAaNGN6f2a/obAaMgXZz03aZLesD5FwaZnY3Leo296lUlie4f4S9gL4cNtOhsQTIE5eEnjwpeya+wmN3Q7pN8FpMNLKoc37TmHUhAkDaQqCa5vwVvrNfEOREm+UKqT2LwMzNvjLfIinSMhKc6YfQD8R3yJI3fnA+QOzpYKoptHWo3qdDeXMV8fFaGjjfqtoLsjYUMwYQtPvmAPC7CfgG49ED4Lw9p4rPvEtDo33ou1nGElar6ISNJ/26NHJSONocnKRdL6+Dt4GuCH0/8KUjhftVRoyxT2JxzEPpb4GCyHhLfucUtPv5Au5MsyN5WpmCoQ2h3GXeDp3N/4gdJyJOWRU85CM7AjBzUpPKPVI4z0DljeQ6P4mbFbw+QMQWM30AxiLpF7E+yGdQ+P3IrWnDKNBYxMruDBGcOOPmJ6b6RfBnQ6ZD9D2U9G2P1NKU1/8y+M03IEs9BbIuBIz5B1TOYS3xPNPKLDagMvKRXxI7VmY0ECPQcEZl48He3Qz6mkghDZCAiuXvEvVRVuPyR80djtE1LiRNkgVr8LU9JvQfoZZXWpn/kGUhsSTkH6DwpZ8c4lA9TGD0qwR36IQOYie8XnHSAqM4GHxoHFn4d15LJsvjLP0hXXsYwB1Y3kd8HxaW9eFhHE66f/2OYY4VRBYA++DuhKOXaJI+DeFL1cfl68y7P1n5EDmU9yZG+J2XDagilEJb4k03JxXhQyZh1J0v3zD71Jx6xCmbWAdVP8eqbu878ky7+Opka7xgsbjXZc6r6L4AWYCEg+aLlgFhTx+8DUOSDa4O27sdkjcSsHvzJ0+qHFHHP8KJrxWlHC+K5mlL6xjHwukX/Yu3tGkaYjcD6T6DxQvZY9A1aH5Hpu9HVEIfMvnNVJ6jedfEml8BMLb54te/MwrUEqa1VfsZrR5LxOHLhMJroPTOAlnkQ9wFn4Lp/YUU9noWajkR6qPQhb+EGfhN3Gqj+pfDru2UjIzxZ1T/PVMCU0UccyBZM1JRsMFPxA0qpqND5gH7QBRTULnJUVqFFxw20x++VglMAGcRSn6OxYfEi2z7mIBxTr2sYAbA0+dawVt79cwElzD9PiUcSbrRPKaJdF9kOqjkdrToOZYUzSDY3Kfo/sgjXd45lmLf0mcuouRhfJt5QrioynI/oDG+/fw6fMzhLfF27H7ILyN6TpUDv6UVBCeAAAgAElEQVRf4NmomkBeZrcITp33mJpBnHqTwTH+VWShN5GF38GpuwhxGsqzrzeZ9/H+p5uC5JODG38EERGk4Z+mn61EgYjZFUodUv/Pwf/sFhDs4elYILg23gdKEQhu3O+hJLy1ORDMvGOyOAKr98hckaqDoOogo99eTll+5gO8i6GS+dDE/v220xOnCs+QUXBdpFyJBExWiIa2yEsF98oKEr85pC5GdH/ouJjCcIwDgTURn2lwLSIVLn/v63cysr1wB4v4FoGmJ01HrOwX4FsonxZq3VV/sSv2MYD4l4XQBhSGURyQSNnxWhE/ElwHCW3kmY4oEiyvOEXTlHQonnnm5aGd1+BZeJX5rORBcimk7gIIbQYE87uZKnAakfqbEP+Sxd8U2S0vsdD9c4dNqmTdEKYOBtbA+6A7nM9JH9uICBL8JRLdEwltZp16mdif1hhB6i5H2/5uNEAkZBypf0Wk7pKKNTUYFIFVSwg2BSG8dWXmST6H5+5F240cwQA6BYmEkfor0dw0yHxssm8Ca3mmkqomoHn/fBu6uU5WzFfdTSbVdIgQCaI1J0P7WfTcLfjNwyi615DNbRkbWMc+RhAJI3UXoO4pkP0OfE1D6jzKRZwqtHoidN5Iz6yV/K4iekCFJiqlLAkgaOZDtPMGk+/vLGzCS6Et+7UDEd+i4Fu0z/s0dgtkv6Jn6EbN9x1nQ+OkPscYDE50T9RpQDsugdxXQAgiOyI1x42OB71lRLGOfYwhTh0ESxzajSBSdRQqVdB5DaZ4KGtizePOQXxNlZkktC0k7qVosZWvCU2/A+2nmvlxTdOItg8gvBMy7szK2AAQv5eiPUtxIfMe6jYP+UGfhLdCwluhqiOm6WIZnVjHbqkYIoJUHYxGDzBaJk61eRBVco4umYQ2eoZkwia1sPXPFBxmagISj6KRXZDgLytjiFuqr4zPaJmXcOyqms+fbwP/LwrUKsuhUk5d3VajyeK2m4bYgXXsA2OMYh27peKI+KEMXfHuqCYh+Sy4M8C/HAQ37pFqKb6FoelhtOOivBhY1lS51pwIuRmo+DxCNSk08WBFHLtmp1JSDlmckuEcTb9nZIa1HTBaNxreChl3/oiJW7nxB6H99Lz2TgYkCL4loeE2m2I4BrGOfQFCc3PQ2E35POeciTtXH4700WNzuNDUf9HWIzC5+WnjXKQGGu7o0VxDfIshdZeY93QLQ2j8nhLl6K7Rh68EyacwCWUecwV+6ZlLr7lpaMuBdG9PZ8Z8DtUTkfp+VMpWGM18ZKQRSM17KGoWsl+hs/dCfePM9+FtkOg+4Dab7KTUq+Z3FNkZqTq04rszy8Cxjn2Mo8kXjLPO/QD+pZGq3xWVW9XcTHTOzuC20bXaTDyAJp+Exvv7nf+tbgxS/4LcdJQw+BY3fUADKwzuc7jNaOvvezo8zZiS/uYDYfzzRTNUeoQKAmuWmCECwQ0HZWOXWdpJSa37Ej0/NXabh4ZMClLPobnpJo+72HszH6CJx0A7keDGEN7KdDMaJBq7meLaO1lwv5sX8er8yhwaa5quMwwFYv9EE49D0yPWuY8SrGMfw7gdl5qepnNLy9PT0fT7aPVEnOqjetyrnZfmxbO6HzpmQTvROXujgdWRyA6m5N3DWWjqNbT1SEz/0XmZL0oQ9S+H1F874NW/xu/3WG2riUOnX4PQRiXHkMAv0MCa+abX3R3V3Hz/8vK7NS8HPLfJSNc8wQloPFq46gYjxRta13vQ9Jt4hnEkCJmPoJdjV1W0/dR5ipa4aOIp6LwYGu7rKoQaMNnP6Z/sccqjHiEN7mw0diNSc8LgbLFUBFugNEbR7HcQu6WIXkgCOq9Dcz/2fDk5meKyvWq0UtIvo+2no3N2LSraZVbUR+SdWe8505D9FJ2zb76l3gDIfkLxLBPMCjf7tedbVTOo24pqzigbhjbFFBrVAGGT7994b7/TADX7FW7zIeiMNdAZa+LO3h5NvTLvhuCG4FucwnWRH5xFSlcCO/WlZoZiBWPJJ4z2PEnmOeA45KahbScW3l8uPo8CrLJIQ+KRCoxjqQTWsY9RNJGPkxe/mo8Dd3+pxGFf1z1xyH6Ddlxa5NJD+ZW655vNyjo1wG5FvqXw1IOXQMEqFkDdTty2U9EZa6MzN0RnrofGb0PqrkDGP292EE2P4jQ9WrQBdtFPkf0enbMHpP+D+fmaPq7achSafMGYIw7ScCcEf0VXpSohCK6PNE4q2RFJovvmNVCKXQybnrKAag5Nv2VCbZ03UFzRMgvp13FnbYs7fUXcGWvitp1uslvKQIqqUA6AClUXWwaPdexjFe3Au3FG2sTCu9NvudMMJB8oLM3Pfo53j825NsXQ9Hv9nKcnEtmDUqqNpty/21SaRZv3g8TDebsyJsuk83q0/RTEtxASXLdszXPtvDq/K+n9EEui7Wd2/VzEqcdpuDn/ALkFGf8sTsMtfWeQhLbIN+Ho7twDQASpuxwRH5p6BZ25Adrye7TteMh9VmLArGlxiBq7E/ejc3Yr/P2XQILrQvXvMJIVc3ch5boGB4Lrl/key1BhHfsYRULr5bXQi12MIr0UCaXmzxQ2rvBAkxTsBvzLAH0d1AUR38BS48S/JNSegXEuc1fuYROzrr+hMO6feh5y31EYr05CYjKa/X5Adpgdh0e82Z0N7rSedvsWQoJrmjTMfiAiRgai7gKz4vevCJG9kKbHkeC6aOZztOVo0JZ8845ytewzkJuFJh4o611O9dFI0yN5+eY9zH+L/r0EKH40F8rLQltGA/bwdKwS3NjEc3Pf0XPlHjBhjeAGPW6X4ASov9LozbitFDTt6I6zWIHokkR2M235SiIQ3qHMD9Jt2uguaGg9NP4A5KZCYGUksgviFHZ+0uS/ix9ezrUj/Sr49x2AFZVVTlS302SdJB40D8zgekYiObwNEt6m8P7Y9XieNfSbJCQehaoDy3qX+JdDao7v+t71rQgdZ9D1d6JZs7KX8dB5qbFTc+BbAhl3NhJYcZB2WyqFdexjFBEfNE5CW0/IN04OmjS04K+QuguKVgxKaFMY/6JpNB1/AuI3UhheiUCRlZf4FkbHXQRtf8Y8SLo/TAQIQc2J/V65en4u32JIzTH9uLHUn64w4M1o+NeQeICi5xe+RczDtJ+o24nO2TXfzi2fpZP6N5p+GepvQoLrFL4p/Q6lM1SCGEcrmN+Bd3/QweJEd0Qjv8lLPGcgsEbXAbRG9zCLCgn1qVmkuemQ/cx0tQqsbqtZhwHr2Mcw4jQgDTejuZlGZdC3GOIbX/o9IuBfFmqORiUHsZvM4SSYf7zVhyGRXYq+14lsgwZfQBOPQOY9yP1oHiaBFZCqg5DAapX+iN6fI7wdmnzKY9XuGs35gYxbfSSafDp/htFTskBqTy/LKWn89rz6Y/fUSxc0gbadDE3/LhzPGQfuVI8Rw1A1EXGiaGANaD6E4oeqIQhv1287SyESgGBh+qaID/qofVBNoK0nGp17CQKuafJSfyViW9wNKTJQ/erBMGHCBJ0yZcqwzzsWUM2aFbi2gX8VZAAStGXN57aYxsuIyeoYIwUmqi7afJBpxtBj1xGB6L44tX8Z+NjZqUayIPVvIGdWqjUnFJxb9IU7ayvIecX6I0jTIwWHuxp/EG0/k6IO27cczvh52U5u7GbouKLXvT4j3dv0ZNEQ1nDithxhqlMLmpdUIU1PD3p3tyAiIm+rap9/iHbFPoowJfXH0LXC0ywaXM9kSwyiR2YpxKnPN4geW4g40HATGrsBYneaB6FvMag6EonsOrix/Usg9ZcBDE45sVT6nzj5Q+peRHYyNQeZt7vtRoIgwS4Zhbk4VYfiSj10Xm76yyJGJqL21BF36pqdWtypA2gGjd+F1Bw77HYtKFjHPkrQ7A9oy0QKVmrp/6JtxyH114+IXaMZkSBSfTRUHz2EcwwiHhzaKF+0Uyze7RiRs4L5/FB/AyT/hSbuAbcDQhsh0f2LrnCd6K5oZBfQmHH+FZAYqASamYL3OUc6v0u0DBXWsY8SNH4bxfPSU5B6Dc1ORQaomGgZGaTq8OLnAGIOqL2csIgPItshkf7FySvfU3XgqBtH20/PC82VKIpzBimDYCmJzWMfLaT/h7eGSMBkFVjGFOJf2lSo+lcEQqbiVMZB9fFItLxUxLGCtvw+X/VcqtI5gkT3Hi6TFkjsin204JTKZtE+NEYsoxUJrIo0PW5S/jQOviU9JX3HOpp5H7LvUzIPXyIQ2qa0no5l0FjHPkqQqv3Q9BsUzYaQqj4kaS2jHS8p3vmK9FulNYmcRZDa0yC0hc1lH2JsKGa0ENwYIjuYFc28F408QN3VJYWlLJbRQQhvvR/HSEKH+9dU3DI4rLcYJYgIUnsWUneN2aoG1oaqQ5GmfyHBNUbaPIulb8Jb4SlTQRCJ/N9wWrNAY0MxowgRgdCGSKgynX4slnLR3E+QehlQCG3Sp1xAd8S3CFp9BMRu6NUnIGKyfAKrVNxeS3GsY7dYLKZLU8dZEL+PeUJnZ6ORXfNSCv3b3DvVR6H+ldDYdZD9FnyLIFWHQri87lWWwWEdu8UyhKjbBqlXgIwRaBulh6ganwTxByjIaEk8ivqXQaoO6fdYEt4CCW9RWQMtZVGRGLuIbCsin4nIlyJyUiXGtFjGOm7nzejMjdD2v6HtZ6CztsJt+ytatLdr5VDNoeV2M4pdR3FBsQTEbixsvGIZ1QzasYuID7ga+A2wMrCPiKw82HEtlrGMJp+B2BUYzfJYvvo0DYknTJemoZgzNxO39Th0xurojDVwZ22FmzCiYappNPMpmv2uwEmr5sCd6T2w20JPhUrLaKcSoZh1gS9V9WsAEbkH2An4uAJjWyxjEu28qkijcYAExG9Fq4+oaKGSuq1G+92dQ5c2Te57aDsRNzEZMv/BtM/LGV35cechQdNfVcSHSrV3tyYJ03f3LMtoohKhmMWBH7p9PzX/msWy4JL9xvuaZsFtruh0Gp8EbhuFgmMpSP8r32YvBiRNo5Xmg9Hsl/Nui+6DyUPvTQgie9jc8zFGJRx7sd94QUBORCaKyBQRmTJr1qwKTGuxjGJKyua6IDWVnS/xJOW11Euhndd0fSfVf4DAKkbPpuvFKARWRGqOq5iZluGhEqGYqcCS3b5fAvip902qegNwA5hGGxWY12IZvUT3g85rKWw96IfQ5ogTLfauQVDuGs3tIZ0rEoaGSZB+Ja9ICRLe1uSyi1c1qWW0UgnH/hbwcxFZFvgR2BsYSBdhi2W+QaoORVOvQuYjIC/bK1HT3WjcGZWfMLI9dH5Heav2cI/vRHwQ2gwJbVZJyyzk017TU0yv3uC6SA/pkMozaMeuqlkRORr4F0Yo4hZV/WjQllksYxiRIDTcDqkXTY9Y0kjo16YCU8J9vr/s+aL7ofG7wZ1NYaPxYhvkEER3r7gdlp6Ywq+LIH77vN7C5NCaU3Ciew3ZvBUpUFLVycDkSoxlmb/R3I9o/C7IfAy+JZDofkjgFyNt1pAg4oPwlkh4y6Gfy6mFxofRzgvy8fYM+H4Gkd0gdlW+Td/cg9UQ+BZHor8dcrsWdDR+CyTuxKS9dttNtZ+N+hZBQpsOyby2mbVl2NDUS2jLHzAOJoPZ4AWg5nicqvmz8cRIYP5Nu12xcc1+jXZeD+n/mNTFyO6m1Z4zOrouza+o5tCZ65t+vMXwr4rT9FBZY9pm1pZRhWoCbf0jPQ8Tc+ar4yI0tCniX6b0GNlvTdNm3zKIr1RjkgUbk5o478BT/D9D6s4fOYMWVNzm4g3L55L9fMimto7dMjwkn6N4ZixADk3cj9ScUPSqZr9HW4+B7NcmTqkpNLQZMu58xKkakDmafsfEPjPvAH4I/xqpOX7UarlYxiBSBbglrg/djsnqsVuGB3d2ie46WchNK3pF3U50zp6Q/RRIgnYAaXMo2XrEgEzR1Gto84GQecvMTRKST6Czd0JzMwY0psXSG3GiENqY4s1HQjCEh6fWsVuGB/+KJtWrGBLxbP2nicfypfm9Vz5pSL+LZspr8q2qaPvfKcwvz4F2mFi0xVIhpPYMcBqBbumNEgH/ckjV74dsXuvYLcNDcH1wFqb46sWPRHYp/r70axRXHcyTeac8O9yfwHNVnoXUU+WNN4ZRTZswV4XlDSzzEN/CSNPTUHMsBNaCwHpI7WlI431DUKQ2DxtjtwwLIgINt6Eth0J2KogAAhJB6m9EHI8Se2ccnrnY4is/Tqk5vGP9gJaIiQ6QXC6Hm3MJBCsn+jUYVBWNXQuxm/I/jxwaWB0Zdx7iX2qkzZvvEKcaqToIqg4atjnHnmO/5BJQBccp/PL5Bvd9pd7b+3p/3rsAiCyJbxFofAIy70Pua7OCD65XsmRdIruhySeKKyVqDkKbl2eEb0nzsHCLZSv4IFzmeCWY+cNsrjv+Nl579C3cnMsSKyzG787fn1/9X5/ZakOCqvLcpFe455ybmDm1k4UWW5w9j57Jlru1IJn/oXN2h/FPI07DiNhnqRxjL489GISM1yHcGEZkaB4a5Yw1lGMP8KGrImjqUci9C5IxwUNHwBeAqn1wIuuVbZebeRPiV4KTyo+V//n7okjjtUhwicEtBkRomdXOxNWOo725Ezc3bxcQigT50w2/Z6v9Nhn2P7Erj76JZ257gWRsnrZ6OJpjqz1a+MO5PwIhqJqIU/OHYbfN0j/6m8c+9hx7LAauW/iVyxX/PpczK3yv671f68+9vccuZUu5dpQauxKf0ev+4Rh7AerCowgukEPIlwvhIiiCilDdUIMM5qFb5oMzHkvxv+c/Iucqbt4ezdskPmX9bTuorsuBvwGJ/sb7Adbf18vdsXq9Xqld+GDGHkW76fm3QKlqYHnLvUmnMjx98/NMvvHfxDuSrLXV6ux5wo4stpzNYx4yVHs6/YE8NMp9oPe+1ut1zXSCCuL6Kjr2I5c/SaK1E0Fx8l8COCiBgI+Nt1yHuobqgS0uvP4/m/X8OaWmt7Ck2wZd9tBlmy+nOC/loCoHbgr0/uKfs/fPbwF6UJf90Jj7dcYZcNBBw27u2HPsFSCdTHP8ZqfxzYffk4qbbenTtzzPc3e9wgX//jsrrffzEbZwPkVkXshplDBUa7GH75zFtLbi7eYioTArnXwmdWsuO0SzF/LI3+7hrrMf9Liq7HXITA45pQ2p+Vv/xcF6O/1iD6nuD4LeD6RSD43eD9K+xq7EAqCYff3d6XstRBYfmZ5DC6Rjf/LGZ/nmwx+6nDpALpsj15njvAOu4NbPrrAdY4YJzc2E1MuAC6GNEN9iI21SRdh0zw148NInyKSyBdeC4QDLrrbUsNqz1lar8dBlT5CMFcr6Rqpc1t40Bb7lILJj1+uqSUi9CG4L+FeCwBo9/12ImNWqzweB0ZHxYzEskI598g3PkooX162e81MzP3z2E0v9wnb3G0rmyZneZtIWFSCHRnZGas9EZPSs6gfCbsfuwL/++QKts9pRt2fIYsKv18QZ5l3L6puszLKrLc2X735DJjkv+SAQcll6RZfVt/4tUn2IkRsGNPVyXtsH08oPB/zLQP0ttM728fh1z/Deix9RN76W7SduzS+3XM0uhkYRY/tfzwCJd3gXvPj8PhIlrlsqgyYehPidQDqfypgw/594HI3dNMLWDZ668eP4y+3HFHV2rz78Jo9cNbyFUCLC+c+cymZ7bUAwHCBcHSYYDrDZXptzwYt346s5qqv5g2Z/MCqcGsv3SU0BCch+wecvHc5BKx7Dvec/wvsvfczLD7zBabtcwMWHXsNIJGJYirNAOvY1NlsFx1f8o+eyLkutvMQwW7QAEruG4hWlCYjdhA5BodBw8+QNzxSs1gFS8RS3n34f7XM6uPqPt7DTuN+yjX9PDl3lWF59+L9DZk+kOsKJ/zyaB2bezPXvXMgN71/Mpnv8iq/e+w7Xnffz1vgdGFnlnqhm+cfBaeLtCdLdVv3JWIqX7n+d/z75vyGz3VIeC2QoZu+TduGVB94g2SscE4qG2PWP2xGpqnyHG0svcj96X5u7Uqx0w+dh5r0XP/JcxWbSWY5a7yRmT20mmzZx+O8/mcp5B1zBYeftz85H/2bI7PIF/Nx22r288uB/CYT8qCrhaIi/3n0sa2y2CmQ+pGcXJsMX70doay7uMpKxFI9e/RTr77D2kNlt6T8L5Ip9qV8szrlP/5WFlx5PuCpMtDZCKBJkl2N+w0H/2HukzVswkHElLvqMUNIYJxQNeV7LpjI0T2vtcupzScXT3HzypIJFRyW5dOJ1vPrwm2RSGeLtCRIdSVpmtHHqDufy45fTwLc4xVxD62w/Psc73NI8rXXIbLaUxwLp2AFW3Wgl7vj6aq547SzOmfxX7p9xE4ees9+wH2otsET3AYo5viBEdkK8lCDHEL8+eHOC4eLZIv5ggHQiXfSa43P44JVPur5XVTLpylRbt8xs46X7Xi86dyad5YGLH0ei+wPBguvLrpQkky7+78Pn97HS+itUxEbL4FmgvZiIsOxqS7PKBisSqR77K8SxhFQfCYFVgW4KdxIF/7JIzV9GzK5Ksvtx/8f4JZt6OHef3yFSHWax5Rcu+V4359Le3MHFh17DDlX7sX10P/b/2ZH8+46XBmXT1+996/mwyWVzfPDKJ0hwDaj+PRBmnosIM37xMBN+vVLR9/uDfnY/bodB2WapHGN/WWQZk4iEoOFOSL1sRL5wkfC2ENoCkULHkU6mef2xKcyZ1sIyqy7FmpuvMup3V1W1Ua5+6zwevfppnr7leTqbO2laooH1tl+bYCTIT19O71FLMZdsJsfyv1yWP6x3MjO/n002Y5pQz/h2FpcfcSPN01vZ64Sd+pzfdV3efeEjpn72E01LNBBrjXHb6fcRa4t7vmdckznXcKqP4u1XFuO5Ox7i209SLLLMQux0zAGcNGkNztrrEt59/kN8AR8g+PwOp9z1J5ZYYf6oQZgfGHtaMZYFjnee/4DTd70QVSWbzuIP+KlbaBwXPncaCy89r/epqpadS908vYVb/no3L977GplUhhXXWY5Dz92PNTZdpWL2T/t6Bsdu8jfiHSaeHQgFACVcFSbeniCXzXXdG4qG2OeknaltrOH6E24v6vhD0SD3T7+p5C7zxy+n8Zet/0F7cwe5rIubcwvi+b0JV4X4881HssqGK3Lcpqcx7eueuvXBSJD/O3xrDjtvf15+4A2+/egHVlj7Z6y/w9r4A2aN+NlbX3LTyZP44OVP8PkdNthpHQ49dz8WWWYhz3kTnQky6Sw19dU2F74P5l8RMMsCxZxpLRz08z8UHCaKwKI/W5gbP7yUe857mEeveor2OZ00LlbPXifuxE5H/6bPFX3b7HYmrnE8bbM6ejrXSJC/3nNsReR1VZVDV/4TU7+YVpD6GAwHWGOzVXj3+Q9xValrqmX/0/Zg+99txXGb/J0P//Np0TGjtRFOmfRH1tu+eAZKLpdj/2WPYs5PzUXTLYsRrg6x1par87f7j+PQlY/lpy+nF73PH/QTCPm7HHAuk2OPE3bkt6ftyUf/+ZSTtj27R/Gf4wjRcVGu+9+FPR7CAN99MpUrj7qJD//zKSJC02L1HHb+AWy6x6/6ZfOCyPwrAmYZFaQSKRKdSWoaqvH5vPXUB8vkG5/tkWM9F1X46asZ7L/MEXS2xbuqKef81MLNp9zNNx/+wHE3HF5y7AcueZz2OT2dOkAqkebyI25g/R3WHvQK8rO3vmTW1DlFHWw2k6NpiUYe67iDVCJNtCYyb75SvUBUSyoOTnn6XWJtsX479abFGzjy8kPYcOd1ePf5D5k9dY7nvdl0tmDlf/9FjxOtifDMbS8WVHS7rhJvT3DHGffx51uO6np9+rcz+eMGfyXeHu/SEpv+7SwuPPgqMunMiMgaz0+M7iClZdTRMqOVM/e4iJ3rD2LfpY5gz0UO44FLHx+yqsMv/vd1j2KYQnvaepTIgykAeu7Ol/npq+Krzrk8f9erZNO5otdaZ7bx/SdT+2VjrC3GI1c9xTn7Xc6Nf7mDHz6bl6M//ZuZnjsHN+fy/SdT8Qf8VNVGezxEtth3Y890yURHko9f+7ToAw/g24+mkk70P4vml1uuxsa7rofjOHz17rdk+gjZ9CYVTzHprAf58YviDcndnMtzd73KjO9mdb1297kPk4wlCwQiU/E01x9/O7lc8d+LpX9Yx27pN4nOBEevdzKvPTqFbDpLJpWhfU4nt/3tXm46edKQzLnozxbG5y9/R6AKbzz+dsl7SklH5LIus0qsXOfy1Xvfsv+yR3HzSZN44e5XefDSJzl8rRO5/+LHAGO/lwN2fA5Lr7wkANlMlvsufJR9lzqc7aP78chVTxGtjeQPKAu5+7xH+E1oH/ZY5DBu/fs9PUJVjYvVe2a+9CZSHWbDndft+r62qYZAqPyNfDadLanim01nOWzV4/jwVZPG+cbjU8hli/9ckrEkP34xnXQyzcdvfM7nb381JI6+dVYbbzzxNu++8CHZTHkPs9GOdeyWfvPM7S/RNrswdJGMp3jkism0z+mo+Jw7/H5rT+dWCnXdPncR0kcMfvaPpZs8u67LqTucS2drrMux5rI50ok0t512L1++8w0rTFiO8Us24TiFoRN1XaI1YWLtcf66w7ncfsZ9zJo6h3QyzfcfTyXeHqe6rnj/AXUVN+fSOrON+y96jOM2+VtXrvuGu6xb9D29CQT9LLzM+B7Vohvtut6Awk+5bI6mxetL3pOMJfnHnpfgui5S5OcxF1Xl37e/yO4LHcrJ257Fnzc/nb0X/z2vPfpW2XZ52XrZ4dez71JHcO7+l3PaLhewxyKH8dpjlRl/NGAdu6XfvHz/656qmP6gn/df/nhA46oqT974b/Zb5gi28e3JbuMP5ta/30M6lWHJFRfniEsOxPGV52yymRxv/etdPnjlYy48+GpO2e5s7r3gka6HTzqVobM15vl+8QnBcGGRTnc+eOUTYu3FUwczqQmEYlIAACAASURBVCyPXv00IsLZT55Mw2L1hKI9x1OFx659hsNWOZaPXvusIAMmFU/TNru9z8+aTmb44bOfePHe1wCIVIU57cE/E4qGulbu/oAfn98hEPITigQJhAJsutcGXPbKP3rsiKpqo/zl9mPM+3r9yAMhP/5g4UNWHGGVDX/BH676HaFI6Z9ZojPJ33c8n9aZbZ73BMNBHrp8MonOpKmM7UzSOrONc/a9rGvFPxhu/MsdPHvnK12Vt/H2BJ0tMc7Z9zI+f/urQY8/GrBZMZZ+c+I2Z/LOsx8UvRatjXDSHccMKJPkuuNv5Ynre0opByNBfrHO8lz4/Gk4jsNzd73CRQdf3ZXT3R8cn+C6mpcEhmAoQCAc4OIXzyAVT/HnLc4gk/KIRQs8POdWzxUzwHOTXuHyI28g0VGsMbYRm7vo+dMBE2qZuPrx/PDZT4VTOdLvg85SrLnFqlz47Gld38+Z1sJTNz3LV+99x+LLL8L2E7dm/JKNtM3uoLouSijiLXkw9YtpPHLlZD5543OiNRG23G8TNt5jfY7b+O/8+OX0rt9VMBwgVBXi6v+ex6I/W5gpz7zHaTuf73ku4jiCOOIZhglFg/gCfuIeufbdf6YDIdGZYI+FDyNVpPJWRNhgp3U4/aETBjz+UGOzYiwVZ+sDNuWT1z8v2qwhl3VZc4tVyx5z1tQ5PHbNMwUONp1I8/n/vubtf7/POr9eky322YgX7/kP7zz/QY+VbSgaJJfJFXX4bq6ns0ynMqRTGU7f5UL2//vu3k4dqF9oXEmnDrDUSosXzTMHk7Sy/FrzOiTF2xNM+6Z4R6VKOHWgIFulcdF69v/bHgX3NS5aOmQCsMTPF+XoKw4teP2K18/mmdte4plbXyCVTLPhzuuy01HbUjfeaP9M2GYN/u/IX/PIlZPJZQqdt+sqeHzen6/9M/Y/dTfO3vdyT7s+ffPLPm0vxY9fTDehvSLHK6rKp29+MajxRws2FGPpN5vttQFLrLhYwcFcKBrisPP2G5Aq5puT/+cpoZzsTPLivf8BzGrq9IdO4OCz9mHhZcYTioZYZtWlOOGWo8jlypP4nTOjhUsmXlfynl/ttE6fMXp/0O95MKoKjYs2MPmm53jtsbfoaOnE5x+6f26haJBNdl9/yMbvmicS4v8O34Yr3ziXG969mANP36vLqc9l12O2IxAqDMl4/Z4B/AEfm++1Iatvugpuid9nuMp7l9EfahqqSxZq9fUwHyvYFfsQ0jKjldtOu5cX7v4P6VSGX6y7PIeesy+rbrTSkM4ba4vRMrOdxsXqKypBHAgGuOSlM7n7nIeYfOOzxNoSLLXS4hx45l5ssOM6AxrTzZVuitz9H7nP72O3P+3Abn/qqUly1R9voXWGd8y2N5l+pAI+e8dLTP3sJ86ZfEpXyCKXy/HSva/x2LX/on1OR48wTzFuPmUS/oAfxxEULXlYG4oGyaZzBQfT3fEHfPiDftKJTI8His/vUF1XxTYHbd7n5xooLTPbuOvsB3n+7lfJprOsufmqHHTmXiy72tIF9y601HjOe/pU/rHHxcQ7EziOQzqZYaGlGvnxi+IpqOI4+AI+quuqWPlXK/DBy58UPFgDIT/bHLjpoD7HwkuPZ8mVFufrd78t+LMLRYPsdNS2gxp/tGBj7P/f3n1GR1V9DRh/zvRMQui9NxFEmiJV6VWkCSJKERSkoyAC0kUFhFdAARFEUAREmiAoRQXpVRBCB+k1dNKmnvfDQP6EzEwmySQTkvNby7XM1H0zYc+9p+ydQu7dvE/38gO5E34Phy3ursYRSwZSpWklv7/n/dsRTH73G3b+ug+dXovD4aR+x5foPaVLghOBgXLlzDXeeeZ9t2OyQSEmhvzYL8EvjUXjlrPg02Ueh0WSymDS07hrXfpOeweHw8GI5hM4tPmI26EonwnifRkYgwyMXjGIJZNW8Y+HOQyAfMXzMO/El/w8aRU/jV+BNcaG0+GkcuMK9JvRjRz5snl8bvjFm/w+508unbxC0bKFaNS1LllzeSud/D+3r9+lR8VB3LtxL3bISwiBIcjA5xtGUKZaKbfPczqdHN15kns371OiYlHCL9xgcMOxbn9/BpOeOUemkKdILi6evELfqkOxRFpi19QbggzkzJ+NabvHJ/us+tzRi7xXYzjWGGvs350p2EipyiUYv254bHmEtEiVFAiw74YtZOkXq92O4+YokI2F52b6tS6Gw+7g3YqDuHTySpxLTYNJz7MvlWH82uF+ey9/m/T2DDYt3h5n8lRv1FPkmQJ8tWtcgjtbHXYHo1pP5N+NYViirH7dLGU0G1lxay5blu1icveZyUvqcV7XgEajwRRiYuDsHlR5+TmsMVZa5+ji9gtKoxO07NOUnl+8BbiuHu5cv4c5kynByqR/L9nB529NQzolNosNg0mPRqthzC+DqVTv2QRjnfH+XH79er3bIYwiZQsy++AXPh2zlJIxr05i7/oDcY7RFGykyTv16DW5S+xtNy7fYvmUNWxfuQedQUfDzrVp9m4DzJn8U4X19rU7rPp6Hbt/2485NIim79TnpTZVk7RnIjWpxB5gHYr2irPT7lGmYCPTdo+ncGn/teDbvnIP4zt+SXRE/BUaRrORKVvGUqJiUTfPDDyn08niCb+w5P9+Jep+NDq9loadatPt8w4+l1OWUnJkxwk2L92BJdrGxkVbiLrnZobMzRmzN4YgA/NPT+OTdpPj1EhPrkKl8zP0x/4UK184zs7Ud8oO4NyRC26fk7NAdt775l1eaFIx3n03Lt1k7/qDaDSCyo0rkDV3FsC1MqZTiT5u668HhZhYfGV2gsN1bfO843F5ot6oZ/5/032akAXXF9IvX/3OsslruHP9DrkK5aT9kFY0fKu2KgDmg1RZFSOEaAuMBkoDL0gp03e2TgRvO+WEEDi9jKUmxe7f/3Gb1AFsFis/jV9B/5ndyZQ1xK/v6w8ajYb2Q1vTbnBLYiItriVviaw/I4TgmeqleKa6a1igRe9GDG38KVH3o1xlAwSEZguhRZ8mLPx0mc9n3kIIMmUL4f6tCN+ORatBo9UkWEnxwrHL8ZL6heOXuPKf5zII4Rdv8nGbSXy8cjCV6pcDXF+KM/rP5bdv/3SdbQrXFUybAc3oMra9q367l5O3rct20aBTLew2O2fDLqDRaihStmCcuLztytRoBdYY34fAtFr38ySKfyV3MCkMaA1844dY0pXqzSuzZvYfccbXH9Ib9X5vmG00GxFCuB2GcDokW5bvYvuqPfT+sisvd2vg1/f2F41Gk6xLbYfDwYm9/2Gz2Cj5XDEWnv+aA3+FcfXMdfKXzEu5WmWw2+zsWLWH0wfOeq1BAw/H2OugN+ipUKcsF05cdvt5Pqp+xxfZs/Zfbl/13iZOo9XEO0M9tOVYgrthLdFWvhn0A9/snwTAssmrWTt3IzaLLc6w34opv5G/RF6unbnu8TgtUZbYsfdZg+a7Tkak64qy34xu1GxVhch7UeQqnJOI2+43cwWHmuNVbUzLXEsaT7Fj1Z7YdeulKpcIdFh+l6zELqU8CqhLKDfaDW7JnwtcwwGPJluj2UD3iR39XhGxbvuarJn1h8edoU6Hqyb31J6zyVM0N889OONLL7b9spsvus/EZrEhhGsDzOtDWlK6akkcDifOByUG9AY9k/4azaoZ61j9zQYi7kRQokJRNDotBzcdxm6z43RIjGYDpSqXoNuEDly/cIMjO48nmNQB1s/7m6eeK0Z0RAyWKIvbNepCI9xWjjQFG33aYXs27ALWGCt6o57FE35x+5nHRFn4cexS2g5sjinY6PYKxRhs4t6t+yz8LO7Ec3REDOM7fMmH3/fh6/fneSwVYTQb6DaxY5pvePKQ3WZndOuJ/LvpcOzxLp+6hgp1n2XU0oGJnjR1Op3YbQ4MRt/q8qQmv4yxCyE2AR/4OhSTEcbYAS6euMzUXrNd7caEIFveLLwzrgN1Xq+R7Nc+E3aeTYu3ERNp4bkG5Xm+UXk+f2s6W5fv8pjcH8qSKzNLrn6b7BjSirCtRxnS6BO3uwkfEhpBaPYQ/m/Txx7nNs4evsDWFbuwW+280KQipas+hSXaSpdS/bh19Y7X9dWP02g11H2jJhsXbYs9E354uzk0iOm7x5OveJ44z4m8G8lr+bp77IUa+9o6DWsiF2CJtvJqzq4ev3CEECy/NZc3C/eMN98ghOvvQG/Uc/38DbfPD8kaTPT9aLe7RE3BRvrP7P5EldedN+onlk76Nd7fiTHIQLshLenoZjOXO7ev3WHmBz+weckOHHYHeYvmouunb1DrteopEXYcfps8FUL8AeRxc9cwKeXKB4/ZRAKJXQjRHegOUKhQoefOnTuXUGzpRnRkDLYYG5myJb9DjJSSr/p8y/p5m7BZ7TgdToJCTOQtlpuJf41i24rd/Dh2qcd/rA8tODuDXIWenEtobwbVG8OBjWE+PTY4NIifr83x+Sxr7dyNTO//HTEe5i+8yZwzlC93fMbCT5ayfeVeEK4CXR2Gt/E4fLF61gZmDvje45ezEPBcg/KMWzsch91Bi8ydPH6hhWQJZsWteRzbfZKPmn6Gw+bAZrGhM+owZwpi1LJBDHhpRKLKNDx6bEuvzUn08wJFSkmr7G8Recd9qYJM2UL4/uRXXDp5hay5s3j8fCLuRNLt2QHcvnb3sc5XBrp/3pHmvVJ2HbzfJk+llPX9EZCUchYwC1xn7P54zSdFULDJbxuFNi7ayoYf/o7zjzk6Iobzxy4xpccsRv48kAp1y9K5RF+Py/40Wg3njlxMN4n9+B7ft5lH3Y9my9Id1PPxTHPvugMek7rQCqTD85/y3fB73LpyO06DiYeklFw9ex0k5CmaK/YLv1n3BhR8Kh9zRyziyPYTcT5DjUZgCjHRc4prWaBWp6Veh5dY//2meJO1BpOeZj1ccylPv1CSxZdnsWvNP1w7G06BUvl4vlH5BCd4vYnyUPwsrbJZ7US7WyX1wP1bEbyW11XEzGaxUbRcYYYtfI+8xeI2HV89cz33bkXEb84SZeXbIQto3LVumtgz8mQMjimxFk9c6Xa81G61s/PXfdy/HUHeorkxh3qehNTqNLHL4dIDU4jvX5pSwr9/+16FMjiz2eNVlrek/tC/m8K4evY6d8L/t1xwz9r9dCzem25lB9Ct3ADeLNKTbb/sjr2/fO1nmLLlE+b/N53GXeoQkjWYkCzB1H3zRb7e9zmFns4f+9juEztSsFQ+gh75HQSFmCheoQgdRrSJvU1v0FOzVRVefb8ZVZpWQqvVYo2xUaJiUbcldLV6rde67IX8uFQ3NegNOsyZzV4fY7faibwbhTXGxsm9p+lX7aN41Ts3Lt7mcahMaESya9n4S7ISuxCilRDiIlANWCOEWOefsBRPwi94bv6gM+i4deU2AL2mdPHYXi1HgewUr1AkBaJLeVJKLp68wn8Hz8XWH2/StS56HxtLAETejWJArZF0KtGHMW0meT3jb9i5drxyu4nx/aif6VyiL6/n706fqkNZN28jY9pM4trZcCzRVixRVsIv3GTcm1PZs3Z/nOfmLpyTgXN6seLmPFbcmsfg7/vGG5cPDjUzY+8EBs7pxYuvVqHWa9UZMr8fk7eM9Vi90WF3MLXXbF7P351zRy/Gm+DVG3VkzZWZ14e0xOSmi5PRbOCtj1+Pc9uV/67xzx8HuXTKfRelQBNC0Pq9l33+LJ1OSUyUhQ0//J3o90kLkrsqZgWwwk+xKD7IWyy3xzXVdpudHPld28obdKrF4e3HWP/937GX3HqTDqPJyJjlg9LMH2BihG09ysQuM7h55ZZrvbhGQ8dRbXntwxZsXbGba2eve51AfWjHr3uwxbh+J1fPXGfP2v28N7M79TvEr0NSptpTvPhqVbYs25mkXafSKZFIcMLx3ac4sfe025UylmgrX/WZww+npiX6PXR6HbXaVvO5CfS0vnPYMP9v1zLIR5dCCshVKAcNO9emVb+mZMoagjXGzoqpa9AZXKnCYXfy7qSOsc05bl+/y9jXvuD47pPojXpsVjvFyxdm5JKB5MifPdHHkpLeGNqa0/vPsHf9wdiloRqtJnbF2ONiIi3s+X0/Lfs0ib2tbvuaXDxxxf1Zu4RSL6SNpZNq5+kTZsvyXUzo/BWWx5KM3qjnpTZVGTK/X+xtUkoObzvGmtl/cP38DZ59qTSt+79MaLZMqR12sp0JO0/fqh/Fm1Q0mo10/aw9Td6ux9rv/mLd3I3ERMZw9Uy414JajzOaDfx85Vu36+illGxavJ1lk1dz8/ItV8ckP5UWeNzX+yZQomKxFHltgHu37tO+wLtu17br9FqadqtP32nvxHtO2JZjaPVaytd+JvYs3ul08k7ZAVw+fTXOyhytTkPOAjmYe3xqmqy7cmr/GXas3otAYAwy8OPYpUR5aJNYp31NPlrQP/bnyLuRdC//ATev3I5bA8psoMcXb9Gse8ruEfF18lSNsT9hXmxdhVb9mmIw6dEbdAiNwBRspORzxej/dbc4jxVCcOXMdfZtOMjx3af4+fNVDKo3Jnbo4dbV23w75EfeKtWPt595j0XjlhN513NXoaSKjoxhzawNjGw5gXEdprJvw7+Jrufy49ilWKLjJ1NLlIX5o5egN+ho1bcpM/+ZyLzjXzH3+FSeb1TB43DU4zRaDbvW/OP2PiEE1VtWpsnbdcmeL5vXOu7J9cOYJSn22gCn9p9F72FFkN3m4MDGw/FuD82WieotKlOlaaU4QzP71v/LjYs34y23dNid3L15jx0J9JwNlBIVi9JxRFs6jGhDs54NPZZ9NgUbadwlbsXM4MzBTNs9nnpvvIjeqEcIKPh0Pgb/0C/Fk3piqDP2J9TVs9fZsmwX1mgrFeqWpUy1p+INr6z/YRNf9podr6iUKdjIqGWD+OyNKcRExDxSQU9P1lxZmLF3AqHZ/XNWf+PSTfpU/YjIR85yTcFGKtUvx8ilA33eqPVqji7c8zAEpTPomLl/otv16W8U7uF1XuIho9lAuw9bujYjbT9BlpyZaN67CRXrleXr9+fx54ItPjXE0Oq16PTaJFeaNJoNrI5ImcbgACf2neaDOqM9lp8oU70UU7d+4tNrzR+zhB/G/Ozx/tbvvRxbtCwt++PHv5ny7iysMdbY6gumYCNVXq7EsEXve548lxKn0+n3zYbeqA5K6VyeIrloO/AVj/c7nU6+Hfyj2wRjjbbyeeeviLgTGSdZWaNt3Lxym/ljltD7y64JxuDqVfoHP41bwfULNwjNnomWfRrTbnBL9AbXWeGEztO4/djmnphIC/s2HGTtnL942cezHG/NNOxWO3pD/D9lKaVPSR3AaXfy0/gV2G0OnA4n54/C8b2n0epcSdqXpG40G3ntg1dY/PlKzw9KoAhZSu/iLFmpGMFZzG4TuynY1UTDV8FZzBhMeo/DOqHZE65LJKVk+8o9rJy+ljvX71K25tPUbF2Fbb/s4diuk+TIn40WfZpQsW7ZFJsXqt+hFvlK5GXRZ8s5/e9ZsubOTKt+L1P3jZpe31MIkapJPTHUGXs6I6Xk6K6T7Fq9j58nrUrSWuXgzGZ+uf19go+b3v87fp/zV7xepWVrPM34dcO5E36PNwv39Dh0UbhMAb4Nm+xTTK/l6+ax/orQCP5v4xiefTF+A5OWWTsT6aF/5kM6ow7pkIkak3+URqshW54sdPm0PQ071WZYs8/4Z8NBtxt/chXOgdFs4MLR+L1PNRpBnTdeZMgPfZMUh6/Cth5laJNPsVnsscdsCjZSplopPvvtI59K1zqdTm5fu0vH4r2xuUnsBpOebw9PJm/R3G6e7SKlZFyHqexYtTf2ak6j0eB0OmMnNR/G1uTteq6VXhmcGmPPgCLuRNKv+jAGN/iYxRNXJnkDii8rS66dC2fN7Pi1aazRVo7sOMGBjWHcuX7X7Zn0Q9461T/O29CQMcjgsUVd0271PS6F1Bl06I16Sr9QAkNQ0up9GEx63h73JgvPz6Rhp9oADP/pfSrWexa9QRenHdzTVUoy7vfhfPBtL4yPLSPUaATmUDOdx7yWpDgSo2zN0szcP5HGXetQ4Km8PF2lJP2md0swqcdEWZj14XxaZOlEI107+lb9iGqvPI/RbODRE1uj2UiHEW28JnVwtUV8NKkDsZ/j41d4v337J4e3H0/iEWc8aigmHRnf8UtO7T+TYELXGXTo9DpiIt2Ps5aslPCqjJ2r93m8TLVExbB5yQ66T+zo9Sy4SNlCCb7PQ3Xb12DBJ8vcVyoUgtJVSrp9XqfRr3Fo8xHOHrkYu4PUFGIiZ/5s9JzSheLlC3N4+wkmdZ3ucyxx31pQuVH5OL+LoJAgPvttGBdPXmb2h/PZ/dt+9EY9Zw+fp0fFQbzSowH/t2k03320iAObwtAIQb6Sean2yvOptgw1f4m8vDfzXZ8f77A7+KDuaM4cPBf7GYRfuMH9m/ep3uIFrNEWzh+7TP4SeWgz8BXK13omwdf8deZ6n1cXWaOtrJm1IbYss+KdSuzpxI1LN9n/5yGfknrmnKG0+7AFc4YudLN80EDXT9sn+H7eepVK6UoEQSFBNOxSh/VzN8a7CjAEGWj/UesE3+ehV3o2YuX0ddwNvxunKNXDeD1t4zaZjUzZ+gm71vzDX4u2IqWkVttqVG9ROXYpXqnKxZN0daM36ihb82m3fT8BDv59hH0bDmG3OeIMy6yZ/Sd5iuVm5JIBfFBvDJdOXOH80YtcPnWVFVPX8NqgFnQe0y7R8aSknav3ce7IxXhfrDFRFrYu38WPZ6aTLY9vzTYeunvDfdVId6SU3EqgFLKv7t26j0ajSTeNq91RQzHpxKWTVz0uYwPXOHSWnKE079WImf98Tqu+Tek24U3MmYIwhwYRlMlE5hyhDP6+LxXqlE3w/So3ruDxvqAQEzVaVQGg5xedeeHlShhMelcDDZ3rT85us/NJuy9YNH6Fx2GUR2XKGsL0PeOp2boqOoMOrU5D7sI5ef+bHrTq29Trc7U6LdVbVGb4T+8zYvEAXmpTLc766lwFc1C12XNxhk0SotFqqNm6KqOWD/L4mAVjl7kt5mWJsrDosxVM7DqDc2EXXBOZ0jUJbI2xsfSLX9m5Om0tFdz40zaPNXO0eg171h5I9GuWr13Ga9mCRxmCDJR7KXlN4Pes3U+X0v1pl7c7bXK/Ta/Kgzm2+2SyXjOtUmfs6USOAtm8nnVWqFOWzzeMjHNbi95NaPJOfU7tP4NOr6V4hSI+z/IXeCofNVtXZdsvu+KsvDGY9BR8Oj/PNyoPuGqUjPx5IOeOXGBww7Gx4+pOu5OI25Es+GQZ185d572vEx4WyJEvG8N/eh+7zY7NYsMUbEry0MWZsPPM+Wgh+/84iNAIKjeuSEIvpdVryVUwBw061aJ5r0ZkzhHq8bFOp5PrFzxX2LwTfpfdv+2PXWr6qJhICz9NWBG7uzMt8LrIQgpvTZo8atmnCatmrMNmSfhq6eHmqaTau/5fxrw6Kc6V48l9//FB3TFM2TqWEhXSZtvIpFJn7OlE/hJ5XS3N3Jx1moKNtBngfmmkwainTNWneOq54oleuvXh971p92FLgrOY0Rl0GM0GGnety6SNo+O91n8HzxN5LypebW9LlIX18/4m/KJvyxLBtYU+KCQoyUn91P4z9Ks2jN1r9mGNsWGJsrL9l91u644/pNVrWRb+HT+cmkbHkW29JnVIuBuUa+LW83nV5dPXEj6QVFSrbbU4hcYe5bA7eL5h4hu35Mifnc83jCRXoRwEhZgIzmx21anJnRm9SY851ExQiImcBbMz6a/RZMmZOcnxz3jvO7eLAqzRFuYOW5Tk102r1Bl7OjLi54H0rzGMqHvRREfEoNFq0Bt0NOvR0G0D5OTSarV0HNmWN4e/SvT9aEzBJo+rKrYs30lMhPuJMq1Ow771/9K4a12/x+jOtH7fxZs4diawTj1zjtBEt+1r0q0ev85YF29cWm/UUbd9Tf5auNXjc/MUyZWo90pp1VtUJl+JPJw/einO8lWj2UiTrnWSXBfm6RdK8uOZGZzYe5p7N+9TtFxhcuTLxuXTVzkbdoEsuUIpXTX+5rvEuH87giseviilhP1/HUrya6dVKrGnI7kL5+SHU9P4e8kO9v95iNAcmWjYqTbFyrmf3PMXjUZDcGbvE1FerwaE8GnttD/ERFk4tutEop5jNBvpOKqtT8klOiKaiyeukClbCG99/DqHNh/lwrFLsRuCgkJM5C2em15TunA3/B571x9wNdt+hCnYyGuDmicqxpSm0+uYvPljvh26gPXzNmGNsZE5RybaD21FywTmOBIihIjXdzRf8TzxKlkmlUar8bYnDE0a3WSUHCqxpzMGk4EGHWvRoGP8SoWBVKd9DXat2ed2x6PT7uB5L5Ox/iSdTrwVkBFCYDQbYoe0HDYH7Ye05OUExncddgezB//I6pnr0eq12G0OCpbKx4fzenP59DU2LtqKdEpqtatBjZauFTmD5vVmYO1RXDsbTnREDFqdFq1Owys9G1Gj5Qv+PGy/CAoJou9X79B7aldsFhsGk+GJqBIaHGqmZKViHNsVf6JUoxHUaFk5AFGlLLXzVEkVDoeDgbVHc/Kf01ij/3cpbzIbeXVAs3j1vVPSuxU+4L+D7lszVqpfjjG/fMihzUdwOpyUfbE0waHeGzQATO05iw3zN8dZBSOEq2jUd0eneGxs4nQ62bvuXw5sPERQSBB1Xq9BgafyJe3AFI9O7DvNwNqjXA3GH/af1QjMmV317BPaTJVW+K3naUpQiT1jssZYWTR+Bb/OWMf925HkLZabDiPaUO/NF1P1zO/AxjCGNxsXv6mx2cjkzR/7tEHrUXfC7/Jm4Z5uN08ZTHraDmrBW2lsXXpGdObQOb4b/pNrJZRWQ/UWleky9vU0N5/hjUrsiuLFP38e4uv353Lx+GWkhOIVitD7y66UqfpUol9r5+p9jOswlSgPQhsBDAAABu1JREFUPTWfeq4Y0/dMSG7IiqKqOyqKN5XqPcvsg18QcScSoRE+Dbd44mkZ4EMJ9dpUFH9TiV3J0PyxrbxszafReti1+rAyoaKkJrVBSVGSSavTMmhenwdVDv83V2A0GylVuYTPvUgVxV/UGbui+EG1V55n8uaxLPx0OUd3nSBT1hCa925Mk7frptoafUV5SE2eKoqiPCFUow1FUZQMSg3FKGnO9fPhLP/yN8K2HCVLrsw079WYyo0rPBG7HBUlLVCJXUlTwrYdY2iTT7Fb7bFliP/ddJgXX63KoLm9VXJXFB+ooRglzXA6nYxt+3/ERMTEqS0fE2lhy7KdSWrmoCgZkUrsSppxZPtxoj30YY2JtLBqxtpUjkhRnkwqsStpxr2bEWi8DLXcvnY3FaNRlCeXSuxKmlGiYhGsHtqk6Qxank1mz0tFyShUYlfSjFyFclK5cQUMpvhNuXUGPa37Ja+hg6JkFCqxK2nK0AX9eb6RK7mbQ80EZQoia+4sjPvtI3IVyhno8BTliaCWOyppislsZMyKD7l2LpxT+88Qmj0Tz9QohUajzkEUxVcqsStpUu7COcldWJ2hK0pSqNMgRVGUdEYldkVRlHQmWYldCDFRCHFMCHFQCLFCCOG+Y6+iKIqSapJ7xr4BKCulLAecAIYmPyRFURQlOZI1eSqlXP/IjzuBNskLR1FSh8PuYMP8zayc/jv3b0XwTPVSvD64JUWfLRzo0BQl2fy5KqYrsNiPr6coKcLhcDD8lXEc2nIMS5QFgPDzN9j2y25GLf2Ayo0rBjhCRUmeBIdihBB/CCHC3PzX4pHHDAPswAIvr9NdCLFXCLE3PDzcP9ErShJsXb6bsK3/S+oATqfEEmVlfMevcNgdAYxOUZIvwTN2KWV9b/cLIToDzYB60kufPSnlLGAWuFrjJTJORfGbNbM2EBNpcXuf3WonbNsxytd6JpWjUhT/SdZQjBCiMTAYqCWljPJPSIqSsiLvRHq8T2gg+r770sGK8qRI7qqYaUAmYIMQ4oAQYqYfYlKUFPV8owrojfELjQFYLXZKVS6eyhEpin8lK7FLKUtIKQtKKSs8+K+HvwJTlJTSvHdj9Mb4F6tGs4F6b7xI1txqO4byZFM7T5UMJ3verEzePJZCpQtgNBswhwZhMOlp0Kk2/b/uFujwFCXZVBEwJUMqVq4wcw5P5sLxS9y/FUGh0gUIyRIc6LAUxS9UYlcytIKl8gc6BEXxOzUUoyiKks6oxK4oipLOqMSuKIqSzqjEriiKks6oxK4oipLOCC/lXVLuTYUIB849dnMO4EaqB5O6MsIxQsY4zoxwjJAxjvNJOsbCUsoEmwEHJLG7I4TYK6V8PtBxpKSMcIyQMY4zIxwjZIzjTI/HqIZiFEVR0hmV2BVFUdKZtJTYZwU6gFSQEY4RMsZxZoRjhIxxnOnuGNPMGLuiKIriH2npjF1RFEXxgzSV2IUQY4UQBx807VgvhMgX6Jj8TQgxUQhx7MFxrhBCpMvi30KItkKIw0IIpxAiXa04EEI0FkIcF0KcEkIMCXQ8KUEI8Z0Q4roQIizQsaQUIURBIcRGIcTRB3+r/QMdk7+kqcQOTJRSlpNSVgBWAyMDHVAK2ACUlVKWA04AQwMcT0oJA1oDmwMdiD8JIbTAdKAJUAZoL4QoE9ioUsQ8oHGgg0hhdmCglLI0UBXonV4+yzSV2KWU9x75MRhIdxMAUsr1Ukr7gx93AgUCGU9KkVIelVIeD3QcKeAF4JSU8j8ppRX4CWgR4Jj8Tkq5GbgV6DhSkpTyipTynwf/fx84CqSLOs5prh67EOJToBNwF6gT4HBSWldgcaCDUBIlP3DhkZ8vAlUCFIviJ0KIIkBFYFdgI/GPVE/sQog/gDxu7hompVwppRwGDBNCDAX6AKNSNUA/SOgYHzxmGK5LwQWpGZs/+XKc6ZBwc1u6u7LMSIQQIcAy4L3HRg2eWKme2KWU9X186EJgDU9gYk/oGIUQnYFmQD35BK83TcRnmZ5cBAo+8nMB4HKAYlGSSQihx5XUF0gplwc6Hn9JU2PsQoiSj/zYHDgWqFhSihCiMTAYaC6ljAp0PEqi7QFKCiGKCiEMwOvAqgDHpCSBEEIAc4CjUsovAh2PP6WpDUpCiGVAKcCJq/pjDynlpcBG5V9CiFOAEbj54KadUsoeAQwpRQghWgFfATmBO8ABKWWjwEblH0KIpsAUQAt8J6X8NMAh+Z0QYhFQG1flw2vAKCnlnIAG5WdCiJrAFuAQrpwD8JGU8rfAReUfaSqxK4qiKMmXpoZiFEVRlORTiV1RFCWdUYldURQlnVGJXVEUJZ1RiV1RFCWdUYldURQlnVGJXVEUJZ1RiV1RFCWd+X++YYTpBbN42wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#分类效果对比\n", "sgd_model.plot_decision_boundary(data,target)\n", "dfp_model.plot_decision_boundary(data,target)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 六.BFGS算法\n", "\n", "BFGS算法是用一个矩阵$B_k$去模拟海瑟矩阵$H_k$,它的更新公式同样假设有两个附加项: \n", "\n", "$$\n", "B_{k+1}=B_k+P_k+Q_k\n", "$$ \n", "\n", "当然,它需要满足拟牛顿条件: \n", "\n", "$$\n", "B_{k+1}\\delta_k=y_k\n", "$$ \n", "\n", "所以: \n", "\n", "$$\n", "B_{k+1}\\delta_k=B_k\\delta_k+P_k\\delta_k+Q_k\\delta_k=y_k\n", "$$ \n", "\n", "考虑,使$P_k$和$Q_k$满足下面两个条件: \n", "\n", "$$\n", "P_k\\delta_k=y_k\\\\\n", "Q_k\\delta_k=-B_k\\delta_k\n", "$$ \n", "\n", "可以得到满足条件的解: \n", "\n", "$$\n", "P_k=\\frac{y_ky_k^T}{y_k^T\\delta_k}\\\\\n", "Q_k=-\\frac{B_k\\delta_k\\delta_k^TB_k}{\\delta_k^TB_k\\delta_k}\n", "$$ \n", "\n", "所以更新公式: \n", "\n", "$$\n", "B_{k+1}=B_k+\\frac{y_ky_k^T}{y_k^T\\delta_k}-\\frac{B_k\\delta_k\\delta_k^TB_k}{\\delta_k^TB_k\\delta_k}\n", "$$ \n", "\n", "同样可以证明,如果$B_0$正定对称,那么迭代过程中的每个矩阵$B_k$都是正定对称的,由于这里是对$H_k$的近似,所以每次更新梯度时,还需要对$B_k$做求逆计算,我们可以使用两次如下的Sherman-Morrison公式: \n", "\n", "$$\n", "(A+uu^T)^{-1}=A^{-1}-\\frac{A^{-1}uu^TA^{-1}}{1+u^TA^{-1}u}\n", "$$\n", "\n", "得到BFGS算法关于$G_k$的迭代公式: \n", "\n", "$$\n", "G_{k+1}=(I-\\frac{\\delta_ky_k^T}{\\delta_k^Ty_k})G_k(I-\\frac{\\delta_ky_k^T}{\\delta_k^Ty_k})^T+\\frac{\\delta_k\\delta_k^T}{\\delta_k^Ty_k}\n", "$$ \n", "\n", "接下来,进行代码实现: " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", "BFGS拟牛顿法,封装到ml_models.optimization模块,与梯度下降法配合使用\n", "\"\"\"\n", "\n", "\n", "class BFGS(object):\n", " def __init__(self, x0, g0):\n", " \"\"\"\n", "\n", " :param x0: 初始的x\n", " :param g0: 初始x对应的梯度\n", " \"\"\"\n", " self.x0 = x0\n", " self.g0 = g0\n", " # 初始化B0\n", " self.B0 = np.eye(len(x0))\n", "\n", " def update_quasi_newton_matrix(self, x1, g1):\n", " \"\"\"\n", " 更新拟牛顿矩阵\n", " :param x1:\n", " :param g1:\n", " :return:\n", " \"\"\"\n", " # 进行一步更新\n", " y0 = g1 - self.g0\n", " delta0 = x1 - self.x0\n", " self.B0 = self.B0 + y0.dot(y0.T) / y0.T.dot(delta0)[0][0] - self.B0.dot(delta0).dot(delta0.T).dot(self.B0) / \\\n", " delta0.T.dot(self.B0).dot(delta0)[0][0]\n", "\n", " def adjust_gradient(self, gradient):\n", " \"\"\"\n", " 对原始的梯度做调整\n", " :param gradient:\n", " :return:\n", " \"\"\"\n", " return np.linalg.pinv(self.B0).dot(gradient)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 应用到LogisticRegression\n", "\n", "`fit`函数追加如下的一个判断: \n", "\n", "```python\n", "elif self.solver == 'bfgs':\n", " self.bfgs = None\n", " self._fit_sgd(x, y)\n", "``` \n", "\n", "`_fit_sgd`函数中,在梯度更新前做如下调整: \n", "\n", "```python\n", "if self.solver == 'bfgs':\n", " if self.bfgs is None:\n", " self.bfgs = optimization.BFGS(x0=self.w, g0=dw)\n", " else:\n", " # 更新一次拟牛顿矩阵\n", " self.bfgs.update_quasi_newton_matrix(self.w, dw)\n", " # 调整梯度方向\n", " dw = self.bfgs.adjust_gradient(dw)\n", "```" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "#训练模型\n", "bfgs_model = LogisticRegression(solver='bfgs',epochs=50)\n", "bfgs_model.fit(data,target)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#损失函数对比\n", "plt.plot(range(0, len(sgd_model.losses)), sgd_model.losses,'b')\n", "plt.plot(range(0, len(dfp_model.losses)), dfp_model.losses,'r')\n", "plt.plot(range(0, len(bfgs_model.losses)), bfgs_model.losses,'y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以发现大部分情况下BFGS会比DFS收敛更快" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXd4XNXRh9+521e92Kb3QCihBFNC7yFAQu/OBwTi0EICJAQICb33GnpopncIEELvARMIvYdiwFV9++6d74+zliXt3pVWWjX7vM+jB7T37jmzkjz3nDkzvxFVxWKxWCwLD85oG2CxWCyWymIdu8VisSxkWMdusVgsCxnWsVssFstChnXsFovFspBhHbvFYrEsZFjHbrFYLAsZ1rFbLBbLQoZ17BaLxbKQ4R+NSZubm3W55ZYbjaktFotl3PLmm2/OVdUJ/d03Ko59ueWWY/r06aMxtcVisYxbROSrgdxnQzEWi8WykGEdu8VisSxkWMdusVgsCxnWsVssFstChnXsloUC1RTqdmL7C1gs1rFbxjma/RK35VforHXQ2Rugc7fGTTwx2mZZLKPKqKQ7WiyVQHMz0Xl7gHYC+ZV6bga0H4erCZzorqNqn8UyWtgVu2Xcol3XgsbpdurdJKHzHFRzo2GWxTLqWMduGb+kngKyXhch+/lIWmOxjBmsY7eMY0r9+SqI/fO2LJrYv3zL+CWyExAsfk1qwbfiiJpjsYwVrGO3jFuk6lfg1FKYAxBGak9DREbDLItl1LGO3TJuEacRaXoIIjuDRAAfBNZGGq9HwluOtnkWy6hh0x0t4xrxTUDqzoa6s0fbFItlzGAdu8UyRtDsZ2jX3yD9ChCGyG5I1UGIUz3aplnGGdaxWyxjAE2/jbYeCJoEXPNi7Fo0+Qg03W+du6UsbIzdYhkDaPvx+WIrt8erKch9j8b+PlpmWcYp1rFbLKOMZr+B3LceV1OQuH9E7bGMf2woxmKpMKpJSL8JuBD4MeJU9fOOFIivUBmhm2RlDbQs9FjHbrFUEDd2J3SdQ/dmWLNo9RFI1VTvvHrfsoDPY0QHghsNg6WWhRkbirFYKoQmn4LOs0ysXLvMF0mIXYUm7vF8n0gAqn8HRIpcDCPVhw+bzZaFE+vYLZYKoV2XUDRsognouqxkExCJ/hJqjjVSCBIFQuBbEWm4CfFbaQRLedhQjMVSKbKfeV9zW8wKXmqKXhYRpOr/0Oi+kPsKCCP+pYbHTstCj3XsFkulkAhozOsiSKj/ISQA/pUqa5dlkWPIoRgRWVpEnhWRD0XkfRH5XSUMs1jGHeHdgECRC34IbYOIhxKlxVJhKhFjzwLHquqqwIbAESKyWgXGtVgK0OwMU3qvXg02Rg+p+R34lgLCPV4Ng9OE1J406HFV06hmhmyfZdFhyKEYVf0e+D7//50i8iGwJPDBUMe2WOaj6bfQ9hNMIY/4AD9afTRO1f6Vm8NtR+O3QuJhIAeh7YxWi2/igN4vTi00PYAmHoDkQ6A5CO+ARPdCnOKx9ZL2pF5BO8+B7CeAoMGNkNo/I/4Vyh7LsmghpU7qyx5MZDngBWANVe3wum/y5Mk6ffr0is1rWbjR7Gfo3N2BRJ8rEag5riLOXd0WdO6u5pCTVP7VAEgV0nQv4l9myHOUZU/qebT1t/TOspG8PQ+OuD2WsYGIvKmqk/u7r2LpjiJSDdwH/L6YUxeRqSIyXUSmz5kzp1LTWhYBtPMKFjjbniSg65KKhGW08xJw5/SZJwPagXacOuTxy7JFFe04jcLUSQWNo11XjKg9lvFHRRy7iAQwTn2aqhYVtlDVa1V1sqpOnjBhQiWmtSwqpF+jtzhWTzKQ+3rocyQfoXhjbBfSr6Lad7cwjLizIDfb6yKknhk5W4YR1UzJ3H7L4KlEVowANwAfqupFQzfJYulDqWwSzYGEva8PFC22I+g2oJ/rlUYoIRwzrlHN4XZdgztrA3TWGujs9XA7L0U1PdqmLVRUYsW+MfBLYCsReTv/tUMFxrVYDJHd8Gxa7VsG8S0x9DkCq3tfc5pB6oY+x0BxJoJvcY+LPghvO3K2VBht/yN0XQnaigktdUDsBrT1MLt6ryBDduyq+pKqiqquqapr578eq4RxFgvkm1b7JtHbuTsgEaTurMrMUX0svdMU5xOG6mNHtDG2iCC1pxSxxzGHp9VHjpgtlUQzn0LyKQrPDpKQmQ6Zt0bDrIUSqxVjGfOIU4s0PQBVU8FZHJwmCO+INN2HBNeqzByhDaHuAjO2VIFUm/L/mhNxor+oyBzl2bMx0ngjBNbGhGbyRU5N9yO+JUfcnoqQepbi5xiAJtHkkyNqzsKMlRSwjAvEqUVqjoKao4ZtDieyHRreGrIfAznwrzKq1aISnIw03Y2qC8iI7hos4xu7YrdYeiDiQwKrIYEfjRkJABFn4XDqoS3wXEtKGBnHZwdjDevYLRbLkFBNom5Xv4efElgZQltReHYQhsCPzZelIljHbrFYBoVmv8BtOQCd9WN09vro3O1Ms5ESSP2FUH04SD3mMLgGqg5CGq5ZOHYlYwQbY7dYLGWjuW/ReXvmu0TlV+q5r9C2Y9C6c3AixTOeRXxI9aFo1W+ADBCwDn0YsCt2i6UCaG4emvkQdTtH25QRQbuuNi0ACwqpktB5Zv7A1xsRQSRonfowYVfsFssQ0NxctP04SL9uKmQ1g4Z3QOpOQaRID9OFhdRTQK74NbfLdIHyLz+iJlkWYB27ZdRRzULmfUAhsFrFslFUU8bJOHWIDP5PXTOfosmHwe1AghtA2DTNUE2jLXtBbiaQhfll8cnHUHcW0nhTRT7H2MRX4pr2c90y3FjHbhlV3PhD0HkGpnBFAEFrjsOJ7j3oMdVtRzvOgOTjZkwJolW/gvDOSPp5oy8T2ri7SbS6cRB/0QeK23EuxG/L25dDEw9B1/nQeCek38jL/PYtuklB+j9o5gMksJD2nAnvAPFpmDh5H5wm8C094iZZFmAdu2XU0NRz0PEXCkrMO87ElWqcyI7lj6lpdN4+ecXHzPyJoOsK6LocJQi40Cmof1XQFtO8A0FDmyO1J3VXdmryWUjcTm8p3zjkUmjb0aZbksY9LHEhPR36ceyanQHZj8Cph8CPERkfx15SNRVNPgJuG71DMmGk7jQbOx9lrGO3jBraeSGFuiGY17ougkE4dpJPQu57CleS851Pj/myb/e+JfUsOvc/0Pwo4puAxm6AonK9Oci8m2+D51BUUlh8JVUn1Y2h7cdA6hWQAKBGyqD+CiS4dn+fctQRX7PpFtV5cX5nlIHA2kjNsUiw3z4Q4xJVhcw7kP3caBcFN0RkbIacxsfywLLQoar5lm8e5L4blAa6Jv8FeK2i+8MF7ULjf++2wRMJQnBdIORhSA7C23jb2fZ749RJmZRBjYE7G209EM3NHKT9I4v4FsOpPxdnsXeQiW8ikd3R5BO4XX9H3ZbRNq+iaG4mOm8ntPX/0M7T0LYj0Tmbopn3Rtu0oljHPkKoptDEw7jtp+J2Xonmvh1tk0YVs1UvdUjqAIFBDDzUTWgGEk+Y/y3VW1RTENwCItsDfbNfIlBzNOI0Fn9r9ut885AiGu+aRePTBmH36KGZ99E5m5lzjfgt0HUROnsL3MTCIeqlqmjL/0H2C7OD03j+QTwXbfk/1PXsAjpqWMc+Amj2a3TOlmjHXyExDWJXoXO2x43dPNqmjS6RnfCMBjoTBtXcQiI/B4kOza58nFuqp1JcyjcAwY1w/JOQ2nOQutPBv6o5NAyshzRciVN1sPf42Q/y4ZdipE3q5DhBNYO2/MroqnfvlFJAEtr/MG52HyVJ/xvc2RRN79ScaV4+xrCOfZhRVbR1qsme6D5oywAp6LwQzbw7muaNKlL9B9PEgiIHbe4ctOWX/Ra6FBDcDPxrUNwhD2gACO9k7AuuDzXHYMItYcBnHhr+lZH6C8w9IkjkFzjND+FMfBWnaRoS2qT0FFJHyQ5JTvMgbR8FUi8AXt2PXDR+z0haMzxkPwbPvroJyPx3RM0ZCNaxDzfZ9/N5zsUcVBqN3TLSFg0IdTtwO87CnTUZd+ZquHN3RVMvVnQO8TVB3fkUz3nOQO4LSL9c3pjiGB3z6kPzDjIAvhXAt2p+JT//IRKk8IHiNznvVf/X/YpTdSAy4Vmk9k9I9e+RhuuNJrpTW5ZdvQiuj2dsHiD1LG7r4Wj2s8HPMVLkZoAWSXkEIA25z0fUnGHBaSqxw/KX6HY1eoyrrBjNzTLZCFINwclDKjoZMXLfmq190QWaC9kvu79TdSH9CpqejjjVEP7ZqDRVUDdudEBy39K9Gsu+j7YegdaehhPdpWJzSea/3mtXjaPJ55DQpuWNKUGk+nAjNjV/KFXIvIEmHgUySGhbFL/Jvsl+iFmp72CyOvrExsXXDNH9y7KhtH0+aLjM7OQ0TWEefBZST6PpV6HxbiTwg4rNXXF8yxinV7RnaQj8K4+4SRUnvDV0nORx0YdE9hxRcwbCOPCM+dzk9hMg+c98Y2MFAlB/Ydn/6Ecc37ImQ6L4RQiYP3x1W9GWKcaZahwlAJ0Xo76VwNdkHmSRvc0qd5jRxD35lMG+/1iT0Hk6Gtmhclrl4sd74+iUWCmVOY0IBNc34ZX5rwGEN0NVRzzvWoLrQ9OjaPwWSNybF9PqiYLG0Hm7o1W/RqoOGNouYbgIbWZ2QhorvCbOmHR65SISgfrL0dYjMDvvNGaXGYCaYxH/cqNqXzHGRShGO06G5L+A9ILUMG0zK8gxvl2VwA/zmhnFwg0BJHoAANp2LGT/1ycOn4Hch5B+Cbr+hs7dZmRi8omHKJ5fDqCVjSmGtqFojB1AQoiHSuBg8NILH61iGvEvhdQc75ErP58kxK5F5+2Cum0jZttAEfEhDTeBNJo8fMBkCUWQ+ssQ34RRtK5ySGhTZMITUHUQBDeByF5I0z04VQeMtmlFGfMrdnVbIfEIxQ9oMmjXdUj9uSNtVllIw9VmNe7Oy/8jDgEu1J6GBFY2Iab063j2gwRMvnMKbT0cJjw/zBWKXjuMPJ4HSeUj/mXQ6N4Qvwfo6eAiENwCCaw55Dnc+IMQuxxy36BSBZHdkOqjTbhr1FGKn7/0JAW52WjX1Ujt8SNhVFlI4Acw8QXTqDr3OTiTTFhrTPx8K4f4lkBqjh1tMwbEmHfsZD8DCXnE8HKQ+c+Im1Qu4lsMmp+E9ItG7MppgPD2iNNgbsh9V+Iz9sGdYx4S1b9DQhsMj8Hhn0LXFxTPs85BhSsjpebPEFgN7brG/Cx8zRD9FRLdb8hju11XQdc1dD80NAbxu9D069B0X17MKwOpp9DUv8GpRSI7d+vIDDciPjSwNmTe6ufOtLG76uAxuQoWCUIFd1eWoTH2HbvUl14hehSBjBU0N9MUnKTfBN8kJLofElyv902+xQfm1AFwITMdbZuKRg/AqTmm4jZLdD80fhu4GXqtJiUCVUdUXI5WRMwqOrJbRcdVtx26/kbhAypttGSSj6PBDdGWfSDXisnD9qOxv6PRA3FqR2Z1JjUnmAIYz/DXfGKmHiL6S6TmOKvHYvFk7MfY/SsZXYZiSASJThlZe8pA09PRudtD7O+QmW7kXFsOwe04u9d94lsMgpPxjDUXHTwBsZvQzEeVNRoQpx5puj/ffDgABE3BUM2JONVTKz7fUFG3Bbfzctx5e+K2/ApNPoFqzlR3emVOaQJNPGRK+3MzWVBckwVSkLgFTb1Q/K3Zr9DUc2jm44rYL8G1TYqmb9UB3J2G+O1o/K6KzG1ZOJH+GtAOB5MnT9bp06cP+H7NfGDCD5pmQaw9CqGfIPVXjEkhHtUsOntj0NbCixJBGm7oJZakbgs6ewv6X7X1xIHoFJxar1SsoaOaNAe60jAmV4ia/cyoOWqK7pW5RCGwDkT2MGlqxTI2AALrQuY9ioacAII/wWlcUB2sbgvaemQ+5TZgwlK+pZCGvyH+ZSryedyuW6DrAvr9O3AWx5n4fEXmtIwfRORNVe1XZW3sr9gBCayGND8BVQeDfy0IborUn4fUXzkmnTpgypC9KvI0icZv7/WSOI0Q/hllrdpxwZ07WAsHhEgYcRor4tRV1Tji9HQTJqkA2nYsaCe9nLPGIf0fUwbuFeKSCAQm59NnPcjN6G17ywH5jKC8cBcJyH2OtuxjHoAVwKn+P6g5Dujn4NH9vvyqXMsiw9iPsecR30Sk5mioOXq0TRkYbpGVejcKudkFr0rVL9Hk4wx81R6FwPr93zYG0MwHRsM8N9OERzSNRnZBav+KDDJXXbPfmBTRoiVOCYjfaRx4QWWkH5zFILoHxG/yGF3A1+MANfMG5L6hUA7YNQ+S5GNQxhmBagoSD6GJ+8zDJ7wtEt0XcRpwqqbgRvaE2ZPx3E1I9bjRbreMPPYvY7gI/LBEYdJ8ydfeSGANqP4dJh1y/jM3jPk19d2ZSD7P+xeVsnhIqGZNdkmxa7lZ+eKr/wGJBSvsxENox1+GMGlbaTXH3FdFCn8ABBpvxvEvmy/vL/ZgCSPVv17wbeZd79W/xk2WzUDNduPovL3QjjNNNkz2fVOnMOdnpvEG4DghE0oqqoAZgsheA57PsuhhHfswIf6VILAmRZ2G+D1T+Zzqg5Hmh00hRHhnqPkTND9lwgaEjJyCRMC3HNJ0+6jnCmvmA9x5U9BZa6CzfoQ7b2803buASeO3ejjFJCQeRXODDCf5li+RMSX5r2LhigCSesncVX+hOaCXKObhGQZCUHNM7+wlqS0RtvEbPZEBorHrjQRsr7z9lCm661G6LjXHgn/F3mqVeREyqqfidl6CO+snRs+n9XC0hzyFZdFmXByejlfU7TBlyJn/mo46AISQhquQ4I/LHy/7lXEIvkngX3XUDzM185FJFSxoDxdGGm/p7gTkzt3VrEqLIdVI3YVIeMtB2eB2nJ4vbuobvvJjCq08/r4j++LUnWo+h6rJWkq/aR6c4e2NPkwP1G1HZ29C8dBICGl+cMC57+7sjcGd43E1gEx8tVs+wOTYP4MmHgMRJLwDGtgQ5m5b5GDegYbbcEILZwcjy8APT8dNjH08Ik4t0nQrmv0cMh+aVV1w/UEf+Ip/WfAvW2ErB492nlfEqQMk0Y7TkOb7zbclNU4UhrDrkJrjTaelxMM9VtQC4V9A4gGKd1MK9lLkMzoy65kvr3mcOrT2dOj4K+ZQvMdOwGkCt1jIx4Oi4aH5+PLXa/O2BSD8UyT80wVvbz26eLYVLrQeCost/IsmS2msYx8BxL+i2VIvRKgqpF/1viH7Hq7biePUINF90MzbHpooQQiUv3uZj0gAqTsLrT4aMm+bUEVwfZN5lLjf611IpHyFSie6C66vEVoPo5djd79DW34JjTcUFp8Vw78aZN70MC0IzsTS70+V6kzUgZv5FGeEFCE1+6V5EPlXrHjhmmXw2Bi7ZfiYuxtu54Wof00IrEfvFnImni31F1YkZVV8E5DwtkhoY+PsnRqk/mJMzHz+OYfffF97iikKGwzJJyget0+i7ScPzNbuA/IiRHYZgBy1l/55ntz3A7JjKGjmPdw526Nzf2Haw83eELfzIpuCOUawK/ZFBNU0JJ9Es18YpzZEkSYRQf0/gGyJylf3K1N1G78V6q9DIjvmpQraILAuUvVrT61x1VS+MKpu0Gl9Et4KJjxuagYyH4N/eSPp4F9+UOMBkHwST5G03Ndobk7/Wi7ByZhslyLx+vj9aPXv+/ndRCnZsDu4FgCa+w5Sz4G6ENqsYkVUmp1hdijzC7/mH2PEbkY1h9T+sSLz9JrT7TK6+RIG/+o21bMfrGNfBNDMx3ktklRe6z0CHWdCw+VIaLPBjak5CKxW2rEDRmo5De1HwYSXcCK7lh43NxvtOA1SzwICTg1adaRxyIM4LBbfkkhNJR1NqRWp0K8yJhhnK67HuW4OTTyMVJUQQKs6AGJ/K37NvyoitflD5bvzNil0nmt09GvP8twhmYdppt8HvsZupHg/2gTEb0WrD6tYtpaqi3ZdArGb8qmtrgm31Z3XfwvCRZiKPPZE5EYRmS0i71ViPEvlUM2irQeZw7bug84EkEDbfjuoVEPNfY/O3RYST5TxpiSk3yh9i9uJztsNUk9jwg1pI3XceR4au7JsO4eF0OZ4/rPxTTCStf2R/cz8PIqSyHd08kaqj4LAhhRUKTsToOE2NH6Had4xv6k0ebmFxBNo7LqC8TT7P6OxM2sddPb6uHO2RZNPexuQfhFPiWnx92t/OWjsKojdDCTzvRji4M5FWw9HMx9UbJ6FjUrtZ24Ctq/QWJZKknrBu5GDumji3rKGM825DzHyuqXCAQWIRyZHj7Hjd4PbQeGqNwFd15jt+Cgj1UeZOoICwkjNX/rdVajbjjrVePc8DYJvidI2iA9pvBka74bwrhD6KdRfhUx4EcdXA7FrPH7nCYjd0CsOrrnv0Hl75HvLZs1X7iu07WjcxGMeBlQVfx0wK+pS1weOagpi19M7338+KbTLY9diqYxjV9UXgJZKjGWpLJr5wNuxk4Lsp+UNmH0Pst/Sf3OIAkPA3496YfIJPOUUJDAmtPfFvzzSeGdeysGHaWa8ItJwRclcfE39G3fujujsn0DHWRR3VmAydvqXJhARnOBaOPXn4jRcjhPeBhHHZCu5JQ5PNdYrRVW7rs5/3zculITOM4sfhkb2ofdBeE/Davr/PQ+U7Jd4ayflaw8sRRmxGLuITAWmAiyzTGUOcSylUbclr4Xi5YSD4F+hvEGzX4KIZ92PWSv0nS9oerb21xuyVHaMKsXbC/a9TTFhnMCwFXBJYBWk6ba88mW2/5h0ejra+muKP7QCzLcXHKg9A/GSqS469lvmcNidbQ6ko/vkexh4tNGTQO8dR+opPM8F3C7IfVnwNyLR3dDkvZD5pMdncoAQUndB5X7uTk2JymJMMZmlKCPm2FX1WuBaMJWnIzXvoozGbiixWgdwkMge5Q3qWwJvr+5AcPMFCoiIWakHJyP1l/c/dngXU8hVdDUbM1tv31KmUKsPqhmz+ozfbGKxUoNWHYBUHTqA9MHBIRIekBindp6D507EaTbSE/7lkcheiH+pAc/vdpwH8Wn5sRXSb6LxGyG0vRElK5gzBOE9+hyeltq0F3+YigShcRoav9MIrWkMguuZn3UF8+fFtwTqX97jgD6c3zlYimGzYhZmEo9QMue55k+eq0PVLOArXH0FfmwaF2uCQgfvmtBO3fnGmbqtEFh1wOmFEt0Fjd+cV1Esoi2TmY7O2x2aH0N8vYt4tO23kHqFbmem7dB1LZr5AGm4akDzDwdu4lHIvFPihplI/TNl5/Jr+s28U+/5EMxnIKWeA/+PIPf+grCLRE3IqG/PzvAO+XGK/J04jeArvrsWCSFVB5gMnWFE6s5DW/bLZ+HMtzEC/hWQqv2Hde7xjHXsCzWlUu8E4rfiunOQ6BTE12wORuO3mcM3dw5IFI3sjdT83qxOyZffN16Hztsv79z7rArdGdB2BDT8DSmzB6ZIGJruQTsvgcQtRe5wQRNo/Cak5rjuVzXzTr4Ktu8KNQmpl9HM+0hg9bJsqQRu7O/QeUk/dzmUp8Fv0O6VejFSUHMEgqLJxwAXCW1nctn7PECkaiqafMTUFvT6ewkjdaeNmh6R5mabLlGZdyG0LaYl5LsmjBTZC4nuhojXAbSlUumOdwCvAquIyAwRObgS41qGSGgrvJ/dCrkvIHY9Ond7NPsF2nkGdF5g4rWo2WLHp5nKwh4SxOJfEZn4PHgWvCSNJO0gEKcaify8RPw0ky8SAtWEKZZJ/NMjrxoghSafGZQtQ0HdGHRejPchKYBAcJPBFdvkZlLioANxW5DQxjh1Z+LUnY2Etyy6KxBfM9L0gNHWIQz4ILAO0njDoGschoqmXjPptLFrIP0cJB+G5D8hug9O8wM4Vftap94PFVmxq+q+lRjHUlmk+lCzYtMuvJ1AGjRjen9m/0dhNWQKsp+YtMkeWR8i4dIysbkvUbejW6WwPMP9JewF8OG2nwCJR0GcvCTw0EvZNfcdGrsF0q+D02iklUNb9p/CqAkTBtIUBNc14a306/mGIiXeKFVI7Z8GZ2xwnXyIp0jISnOmH8AAEd9iSP25wLmDs6WCqKbRtiP6nA3lzFfnhWho0wGraC7K2FDMOELTb5kDwuyH4JuARA+E8I6eKz7xLQlNd6EdpxpJWq+iEjSf9ujRyUjjaPKxIul8/R28DXJD6P+hKR0v2qs0ZIp7Eo9gHkr9DRZCwlv3O6Wm38oXcmWYH8vVzHQIbQl1F3k6dzd+H3SehjlkVPOQjPwCgluUnlAakKY7By1vINEpJmxW8PkDEPiR6QcwHkk9h/dDOofG70JqTxxBg8YnVnBhnODGHzQ9N9PPgTsTMu+iHSeh7X+glKa++FfCabwVmfgGSF2JGfKOqRzCW+P5JxT40aDLykV8SO0ZmNBAr0HBqcvHgz26GfU2EEKbIIHVSt6l6qJtR+UPGnscImrcSBukildhavp16DjVrC61K/8gSkPiH5B+jcKWfPOJQPVRQ9KsEd/iEDmQ3vF5x0gKjOJh8ZBx5+DdeSybL4yz9Id17OMAdWN5HfB8Wlv3hYRxOul/9zuGOFUQWAvvg7oSjl2iSPhnhS9XH5OvMuz7Z+RA5iPc2Rvjdl4yqIpRCW+NNN6QV4UMmYdSdP98w+9ScesQpm1gPVT/Bqm/tP/JMu/gqZGu8YLG492Xuq6g+AFmAhL3mS5YBYU8fvA1DUo2uCdu7BZI3ETB78ydOaRxRx3/yia8VpRwviuZpT+sYx8PpF/wLt7RpGmIPACk+rcUL2WPQNXB+R6bfR1RCHwr5TVS+oznXxppehDCO+aLXvwsKFBKmtVX7Aa0ZW8Thy4TCa6H0zQNZ7F3cSa9gVN7oqls9CxU8iPVRyCT3sOZ9DpO9REDy2HXNkpmprjzir+eKaGJIo45kKw53mi44AeCRlWz6V7zoB0kqknouqhIjYILbrvJLx+vBCaDszhFf8fiQ6Jl1l0soljHPh5wY+Cpc62gHQMaRoJrmR6fUmeyTiSvWRLdF6k+Eqk9GWqONkUzOCb3Obov0nSrZ561+JfGqb8QmZhvK1cQH01B9hs0PrCHT7+fIbw93o7dB+HtTNehcvBUqhRjAAAgAElEQVT/EM9G1QTyMrtFcOq9x9QM4jSYDI4JLyETX0cmvYVTfwHiNJZnX18y7+D9TzcFyX8MbfxRRESQxr+bfrYSBSJmVyj1SMPfh/6zW0Swh6fjgeC6eB8oRSC46YCHkvC25kAw85bJ4gis2StzRaoOhKoDjX57OWX5mXfxLoZK5kMTUwZspydOFZ4ho+D6SLkSCZisEA1tlZcK7pMVJH5zSF2M6BTovJDCcIwDgbURn2lwLSIVLn/v73cyur1wh4r4FoPmf5iOWNlPwTcxnxZq3dVAsSv2cYD4l4fQRhSGURyQSNnxWhE/ElwPCW3imY4oEiyvOEXTlHQonnnm5aFdV+FZeJX5uORBcimk/jwIbQEE87uZKnCakIbrEf/Sxd8U2T0vsdDzc4dNqmT9MKYOBtbC+6A7nM9JH9+ICBJcB4nuhYS2sE69TOxPa5wg9Zei7X81GiASMo7UvwpSf1HFmhoMicAaJQSbghDetjLzJJ/Gc/eiHUaOYBCdgkTCSMPlaO57yHxgsm8CP/ZMJVVNQMuUfBu6+U5WzFf99SbVdJgQCaI1J0DHGfTeLfjNwyi697DNbRkfWMc+ThAJI/Xnoe6JkP0KfM3D6jzKRZwqtHoqdF1H76yV/K4i+ssKTVRKWRJA0Mx7aNe1Jt/fmWTCS6GtB7QDEd/i4Fu83/s0diNkP6d36EbN951nQtO0fscYCk50L9RpRDsvgtznQAgiv0BqjhkbD3rLqGId+zhDnHoIlji0G0Wk6ghUqqDrKkzxUNbEmuvOQnzNlZkktD0k7qJosZWvGU2/BR0nmflxTdOI9nchvDNSd1plbACI30XRnqW4kPkv6rYM+0GfhLdBwtugqqOm6WIZm1jHbqkYIoJUHYRGf2m0TJxq8yCq5BzdMgnt9A7JhE1qYdsfKDjM1AQkHkIjuyLBdSpjiFuqr4zPaJmXcOyqms+fbwf/DwvUKsuhUk5d3TajyeJ2mIbYgfXsA2OcYh27peKI+KEMXfGeqCYh+RS4s8C/IgQ37ZVqKb5J0PwA2nlBXgwsa6pca46D3CxUfB6hmhSauK8ijl2zMygphyxOyXCOpv9rZIa1AzBaNxreBqk7d9TErdz4fdBxSl57JwMSBN/S0HizTTEch1jHvgihuXlo7Pp8nnPOxJ2rD0X66bE5Umjq32jbYZjc/LRxLlIDjbf2aq4hviWQ+ovMe3qEITR+Z4lydNfow1eC5OOYhDKPuQLreObSa+57tPUAeranM2M+jepxSMMAKmUrjGbeN9IIpBY8FDUL2c/RuXujvjrzfXg7JLovuC0mOyn1kvkdRXZBqg6u+O7MMnisYx/naPJZ46xz34B/WaTq10XlVjU3G523C7jtdK82E/eiyX9A0z0Dzv9WNwapf0JuJkoYfEuaPqCBlYf2OdwWtO03vR2eZkxJf8sBMOGZohkqvUIFgbVLzBCB4MZDsrHbLO2ipNZ9iZ6fGrvZQ0MmBamn0dxMk8dd7L2Zd9HEw6BdSHBTCG9juhkNEY3dQHHtnSy4Xy2IeHV9bg6NNU33GYYCsb+jiUeg+UHr3McI1rGPY9zOi01P0/ml5emZaPodtHoqTvURve7Vrovz4lk9Dx2zoF3ovH3QwJpIZCdT8u7hLDT1Ctp2OKb/6ILMFyWI+ldEGv426NW/xu/xWG2riUOnX4HQJiXHkMAP0cDa+abXPR3V/Hz/8vK7NS8HPL/JSPc8wcloPFq46gYjxRta33vQ9Ot4hnEkCJn3oY9jV1W046QFipa4aOJx6LoQGu/uLoQaNNlPGJjsccqjHiEN7lw0dh1S88eh2WKpCLZAaZyi2a8gdmMRvZAEdF2N5r7t/XLyMYrL9qrRSkm/gHacgs7brahol1lRH5Z3Zn3nTEP2I3TefvmWeoMg+yHFs0wwK9zsF55vVc2gbhuqOaNsGNocU2hUA4RNvn/TXQNOA9Ts57gtv0JnrYXOWht37o5o6sUFNwQ3Bt+SFK6L/OAsVroS2GkoNTMUKxhLPmq050mywAHHIfc92n5c4f3l4vMowCqLNCQerMA4lkpgHfs4RRP5OHnxq/k4cM+XShz2dd8Th+z/0M6Li1y6P79S93yzWVmnBtmtyLcMnnrwEihYxQKo24XbfhI6a1109sbo7A3Q+M1I/WXIhGfMDqL5IZzmh4o2wC76KbJfo/P2hPTLmJ+v6eOqrUegyWeNOeIgjbdB8Cd0V6oSguCGSNO0kh2RJLpfXgOl2MWw6SkLqObQ9Bsm1NZ1LcUVLbOQfhV3zva4M1fBnbU2bvspJrulDKSoCuUgqFB1sWXoWMc+XtFOvBtnpE0svCcDljvNQPLewtL87Cd499icb1MMTf93gPP0RiJ7Ukq10ZT795hKs2jL/pB4IG9XxmSZdF2DdpyI+CYiwfXL1jzXrivzu5K+D7Ek2nFa989FnAacxhvyD5AbkQlP4TTe2H8GSWirfBOOns49AESQ+ksR8aGpF9HZG6Gtv0Hbj4XcxyUGzJoWh6ixO3EPOm/3wt9/CSS4PlT/GiNZMX8XUq5rcCC4YZnvsQwX1rGPUyS0QV4LvdjFKNJHkVBq/kBh4woPNEnBbsC/HNDfQV0Q8Q0uNU78S0PtqRjnMn/lHjYx64ZrC+P+qWcg9xWF8eokJB5Ds18Pyg6z4/CIN7tzwf2+t92+iUhwbZOGOQBExMhA1J9nVvz+VSCyN9L8CBJcH818grYeCdqab95RrpZ9BnJz0MS9Zb3LqT4SaX4wL9+8p/lv0b+XAMWP5kJ5WWjLWMAeno5XgpuaeG7uK3qv3AMmrBHcqNftEpwMDZcbvRm3jYKmHT1xligQXZLI7qYtX0kEwjuV+UF6TBvdFQ1tgMbvhdwMCKyGRHZFnMLOT5r8V/HDy/l2pF8C/36DsKKyyonqdpmsk8R95oEZ3MBIJIe3Q8LbFd4fuwbPs4YBk4TEQ1B1QFnvEv+KSM2x3d+7vlWg81S6/040a1b2MgG6LjZ2ag58SyF1ZyKBVYZot6VSWMc+ThHxQdM0tO2P+cbJQZOGFvwJUn9e0YpBCW0OE54zjabjj0L8OgrDKxEosvIS3yS07gJo/wPmQdLzYSJACGqOG/DK1fNz+ZZAao4awI2l/nSFQW9Gwz+FxL0UPb/wLWYepgNE3S503m75dm75LJ3Uv9D0C9BwPRJcr/BN6bconaESxDhawfwOvPuDDhUn+gs08rO8xHMGAmt1H0BrdE+zqJBQv5pFmpsJ2Y9NV6vAmraadQSwjn0cI04j0ngDmpttVAZ9SyC+CaXfIwL+5aHmSFRyELveHE6C+cdbfQgS2bXoe53IdmjwWTTxIGT+C7lvzcMksDJSdSAS+FGlP6L35wjvgCYf91i1u0ZzfjDjVh+OJp/In2H0liyQ2lPKckoavyWv/tgz9dIFTaDtJ0DzvwrHc+rAneExYhiqpiJOFA2sBS2/ovihagjCOwzYzlKIBCBYmL4p4oN+ah9UE2jbcUbnXoKAa5q8NFyO2BZ3w4oMVr96KEyePFmnT58+4vOOB1SzZgWu7eBfHRmEBG1Z87mtpvEyYrI6xkmBiaqLthxomjH02nVEILofTu2fBj92doaRLEj9C8iZlWrNHwvOLfrDnbMN5Lxi/RGk+cGCw12N34d2nEZRh+1bEWfCgmwnN3YDdF7W516fke5t/kfRENZI4rYeZqpTC5qXVCHNTwx5d7coIiJvqmq/f4h2xT6GMCX1R9G9wtMsGtzAZEsMoUdmKcRpyDeIHl+IONB4PRq7FmK3mQehbwmoOhyJ7Da0sf1LIQ2XAAxNObFU+p84+UPqPkR2NjUHmTd77EaCIMFuGYX5OFUH40oDdF1q+ssiRiai9qRRd+qanVHcqQNoBo3fjtQcPeJ2LSpYxz5G0Ow3aOtUClZq6X+j7ccgDdeMil1jGZEgUn0kVB85jHMMIR4c2iRftFMs3u0YkbOC+fzQcC0k/4km7gS3E0KbINEpRVe4TnQ3NLIraMw4/wpIDFQCzUzH+5wjnd8lWoYL69jHCBq/meJ56SlIvYJmZyCDVEy0jA5SdWjxcwAxB9ReTljEB5EdkMjA4uSV76k6eNSNox2n5IXmShTFOUOUQbCUxOaxjxXS/8FbQyRgsgos4wrxL2sqVP2rACFTcSp1UH0sEi0vFXG8oK2/yVc9l6p0jiDRfUbKpEUSu2IfKzilslm0H40Ry1hFAmsgzY+YlD+Ng29pT0nf8Y5m3oHsO5TMw5cIhLYrradjGTLWsY8RpGp/NP0aRbMhpKofSVrLWMdLinehIv1GaU0iZzGk9mQIbWVz2YcZG4oZKwQ3hchOZkWz4EUjD1B/ZUlhKYtlbBDCW+/HMZLQ4YE1FbcMDestxggigtSegdRfZbaqgXWh6mCk+Z9IcK3RNs9i6Z/wNnjKVBBEIj8fSWsWaWwoZgwhIhDaGAlVptOPxVIumvsOUi8ACqHN+pUL6In4FkOrD4PYtX36BERMlk9g9YrbaymOdewWi8V0aeo8A+J3s0Do7Ew0slteSmFgm3un+gjUvyoauxqyX4JvMaTqYAiX173KMjSsY7dYhhF12yH1IpAxAm1j9BBV49Mgfi8FGS2Jh1D/ckjVrwY8loS3QsJbVdZAS1lUJMYuItuLyMci8pmIHF+JMS2W8Y7bdQM6exO04y9ox6nonG1w2/+MFu3tWjlUc2i53YxiV1NcUCwBsesKG69YxjRDduwi4gOuBH4GrAbsKyKrDXVci2U8o8knIXYZRrM8lq8+TUPiUdOlaTjmzM3GbTsGnbUmOmst3Dnb4CaMaJhqGs18hGa/KnDSqjlwZ3sP7LbSW6HSMtapRChmfeAzVf0CQETuBHYGPqjA2BbLuES7rijSaBwgAfGb0OrDKlqopG6b0X5359GtTZP7GtqPw008BpmXMe3zckZXvu4cJGj6q4r4UKn27tYkYfrvnmUZS1QiFLMk8E2P72fkX7NYFl2y//O+pllwWyo6ncangdtOoeBYCtL/zLfZiwFJ02il5SA0+9mC26L7YvLQ+xKCyJ4293ycUQnHXuw3XhCQE5GpIjJdRKbPmTOnAtNaLGOYkrK5LkhNZedL/IPyWuql0K6rur+T6t9CYHWjZ9P9YhQCqyA1x1TMTMvIUIlQzAxg6R7fLwV81/cmVb0WuBZMo40KzGuxjF2i+0PX3yhsPeiH0JaIEy32riFQ7hrN7SWdKxKGxmmQfjGvSAkS3t7ksotXNallrFIJx/4G8AMRWR74FtgHGEwXYYtloUGqDkZTL0HmfSAv2ytR092o7tTKTxjZEbq+orxVe7jXdyI+CG2BhLaopGUW8mmv6emmV29wfaSXdEjlGbJjV9WsiBwJ/BMjFHGjqr4/ZMsslnGMSBAab4HUc6ZHLGkk9FNTgSnhft9f9nzR/dH4HeDOpbDReLENcgiie1TcDktvTOHXBRC/ZUFvYXJozYk40b2Hbd6KFCip6mPAY5UYy7Jwo7lv0fjtkPkAfEsh0f2RwA9H26xhQcQH4a2R8NbDP5dTC00PoF3n5ePtGfCtAJHdIXZFvk3f/IPVEPiWRKL/N+x2Lepo/EZI3IZJe+2xm+o4E/UthoQ2H5Z5bTNry4ihqefR1t9iHEwGs8ELQM2xOFULZ+OJ0cD8m3a7Y+Oa/QLtugbSL5vUxcgeptWeMza6Li2sqObQ2RuafrzF8K+B03x/WWPaZtaWMYVqAm37Hb0PE3Pmq/MCNLQ54l+u9BjZL03TZt9yiK9UY5JFG5OauODAU/wrIPXnjp5BiypuS/GG5fPJfjJsU1vHbhkZkk9TPDMWIIcm7kFq/lj0qma/RtuOguwXJk6pKTS0BVJ3LuJUDcocTb9lYp+ZtwA/hH+K1Bw7ZrVcLOMQqQLcEteHb8dk9dgtI4M7t0R3nSzkvi96Rd0udN5ekP0ISIJ2AmlzKNl22KBM0dQraMsBkHnDzE0Sko+ic3dGc7MGNabF0hdxohDalOLNR0IwjIen1rFbRgb/KibVqxgS8Wz9p4mH86X5fVc+aUi/jWbKa/KtqmjHXynML8+BdppYtMVSIaT2VHCagB7pjRIB/4pI1W+GbV7r2C0jQ3BDcCZRfPXiRyK7Fn9f+hWKqw7mybxVnh3ud+C5Ks9C6vHyxhvHqKZNmKvC8gaWBYhvEtL8BNQcDYEfQ2ADpPZkpOnuYShSW4CNsVtGBBGBxpvR1oMhOwNEAAGJIA3XIY5Hib1Th2cutvjKj1NqDu9YP6AlYqKDJJfL4eZcAsHKiX4NBVVFY3+D2PX5n0cODayJ1J2D+JcZbfMWOsSpRqoOhKoDR2xO69gtI4b4FoOmRyHzDuS+MCv44AYlS9YlsjuafLS4UqLmILRleUb4ljYPC7dYtoIPwmWOV4LZ38zl6mNv5pWH3sDNuSy18hL8+twp/OTn/WarDQuqytPTXuTOs65n9owuJi6xJHsdOZutd29FMv9B5+0BE55AnMZRsc9SOWwoxjKiiAgSXAuJ7IqENupfhySwDoR/buKSC0YBwlB7etlZMSICNSfRt5y+e/dQdXhZ43nROrudIyb/iZcfeJ1cJoe6yjcffcuZ+1zMU9NeqMgc5XLFb2/g0sOu4auPEiS6fHz1SZjLj1+SK05cEnBBE2hs2qjYZqks1rFbxjQigtSejtRdAIH1wLcMhLZDmm7Die48qDGdyE+R+kvAtxxm0+qH4IYm7lmhUMR9Fz1CrD2Om+sd2kkl0vzt938nlxveLkp9+fqjb3nixmdIxno3zEjGfTx5VyNffxoCUpB6ekTtsgwP4y8UM3UquC44Tu8vEfNfn6/wWpF7s67yyX/+x0dvfE46lWWJlZdkra3WoG5iffFxh+urnPHL+YylxhbJx7jHByIC4W2R8LaVGzPfl1PdThB/xUWZnr/nVTLpbNFrmXSW/737NSutvXxF5yzFS/e/Ri5b/Pwgl4EXH61j/6NngxTTZLeMN8afY3/qKUinjXMfyFcuB6rm/3vIJ/gxffy6e/i9Brx278h/ntGir9MfSw+wERxbKj12/v71Yp/Toh24CPkCfxRQhEAmROTfL0PrlyP2OXPtnfgzKRwERXDztiiQywmppGNCUZE9R/XP0lIZFi2tGFVQ5cHL/sFNf76ddDyFAE7+T9xBWXyFiVz177OR+Q+D+V99v+/70Ojvda97yxm7nPkGO/ZQ5yxzbHXTkGvL21qNqK9iY/c7hgUwFQLiAI6AE+h+2KnjgOOCAziBXteG9YE00Pt9vuEbu1Jf66wDP/hBxX5XViumGPkQxD9ueJZYImvS5frwzaw438xNscwPbXe/4WSBnOnNRphKATJoZEek9jREnJEwYngeGqp0zG3n9N3Pp6u1Cyf/EDELCFhvuzWZcuKuZvEwiLEHswDQXI5Hrniced+1oNls94LG73NpmuCy3ZTlkcCa5sHqumjma4g/bX4vOdf8V6vRwOakE/D1+9/Q8l0LobCfpX+wOI0TawsXQ+XYnc0W7q697s3lhvYzKTb2cC1wL7usoo59oCxajj1PvNO74MXn95Eocd1SGTRxH8RvA9K9U9QTj6C+ZZDqqcNvhIhZ9fl8EKhsjnktsM8dp3LiDmfi9smN/+LluVS/E2PX3+5Q0TlLIcC2hx3J5b+9gefvegXH78PN5th8r43Y7YqDcaoXnDFo9ht07k5AfZ9R/Hz6QYzjdouQTU8inTRpkeG5ITbf8ycce8Ph47c3at8HRKV245MmjcrHWbRCMXnOO/AKnp72YkHGAkAoGuKeWdcTqap8MwTLAtw5W0FuRvGLUo9MfG1kVu3DyGl7XsBL979OsX9j1Q1V3PzJ5dx62j08edNzJGJJll5lSQ46Yx822XWDYbUr0ZWgdVY7qsqMj7+jqr6K1X6yMo5jft5ux1n5h27vw19VOGDDVZn1TbBgzHBViD/fcTQb7rTusNq+qGNDMSXY5/hdefHe10jGe7cRC0VD7Pa7HaxTHwly33pf05j5qnTD5xHmv8+9X9Spg8mMOWKD45k7o4VsPnvm6w9ncM4vL+OQc6awy5E/Gza7fAE/N598Fy/e928CIT+qSjhqHPNaW6wOmffo69QBPn0nQntLcZeRjKV46MrHrWMfI4zvJdEgWeaHS3L2E39m0rITCFeFidZGCEWC7HrUzzjw9H1G27xFA6krcdHXpyBpfBKKeqcOZlMZWr5v63bq80nF09xwwrSCRUcluXjq1bz0wOtkUhniHQkSnUlaZ7Vz0k5n8+1n34NvSYq5hra5fnyO9w6/5fu2YbPZUh6LpGMHWGOTVbn1iyu57JUzOOuxP3PPrOs5+Kz9u7ejlmEmui9QzPEFIbIz4qUEOY746UFbEgwXj937gwHSiXTRa47P4d0XP+z+XlXJpL0kj8ujdXY7z9/9atG5M+ks9174CBKdAhSGW5ZfNUkmXfzfh8/vY9UNV66IjZahs0h7MRFh+R8ty+obrUKkevyvEMcTUn04BNYAeijcSRT8yyM1fxo1uyrJHsf8nAlLN/dy7j6/Q6Q6zBIrlT5Uc3MuHS2dXHjwVexUtT87RvdnygqH869bnx+STV/890vPh00um+PdFz9EgmtB9W8wsgvzXUSYCUuGmfzTVYu+3x/0s8cxOw3JNkvlGP/LIsu4RCQEjbdB6gUj8oWLhLeH0FaIFDqOdDLNqw9PZ973rSy3xjKsveXqY353VVUb5co3zuGhK5/giRufoauli+alGtlgx3UJRoJ899lMUvHClXM2k2OldZbntxucwOyv55LNGPmBWV/O4dLDrqNlZht7/7F/OQXXdXn72feZ8fF3NC/VSKwtxs2n3E2sPe75nrpmc67hVB/Bmy8uwdO33s+XH6ZYbLmJ7HzULzl+2lqcsfdFvP3Me/gCPkDw+R1OvP33LLXyEoP7QVkqziKZFWMZX7z1zLucstv5qCrZdBZ/wE/9xDrOf/pkJi27oPepqpadbtcys5Ub/3wHz931CplUhlXWW5GDz96ftTZfvWL2f//FLI7e7C/EO008OxAKAEq4Kky8I0Euu0A3JhQNse/xu1DbVMM1f7ylqOMPRYPcM/P6krvMbz/7nj9tezodLZ3ksi5uzi2I5/clXBXiDzcczuobr8Ixm5/M91/01q0PRoL8/NBtOeScKbxw72t8+f43rLzuCmy407r4A2aN+PEbn3H9CdN494UP8fkdNtp5PQ4+e38WW26i57yJrgSZdJaahurxmy45Qgw0K8Y6dsuYZt73rRz4g98WHCaKwOIrTOK69y7mznMe4KErHqdjXhdNSzSw93E7s/ORP+t3Rd8+t4Opax1L+5zO3s41EuTPdx5dEXldVeXg1X7PjE+/R93e/9aC4QBrbbE6bz/zHq4q9c21TDl5T3b89TYcs9lfee/lj4qOGa2NcOK037HBjsUzUHK5HFOWP8IUI7kD+/cdrg7x463X5C/3HMPBqx3Nd5/NLHqfP+gnEPJ3O+BcJseef/wF/3fyXrz/8kccv/2ZpHr8rhxHiNZFufo/5/d6CAN89eEMLj/iet57+SNEhOYlGjjk3F+y+Z4/GZDNiyI23dEyrKQSKRJdSWoaq/H5+pHeHQKPXfcUbpHyf1X47vNZTFnuMLra42SS5nBx3net3HDiHfzvvW845tpDS45970WP0DGvt1MHo8B46WHXsuFO6w55BfnxG58xZ8a8og42m8nRvFQTD3feSiqRJloTWTBfqV4gqiVF3KY/8Tax9tiAnXrzko0cfumv2HiX9Xj7mfeYO2Oe573ZdLZg5X/PBY8QrYnw5M3P9XLqAK6rxDsS3Hrq3fzhxiO6X5/55Wx+t9GfiXfEu4s+Z345h/MPuoJMOsM2+282INstxRnbQUrLmKN1Vhun7XkBuzQcyH7LHMZeix3CvRc/4pmvPVQ+/c8XpJPeGSGts9q7nfp8UvEUT9/2At99XnzVOZ9nbn+JbLq4fG7b7Ha+/tCjgKoPsfYYD17xOGftfynX/elWvvl4QY7+zP/N9tw5uDmXrz+cgT/gp6o22ushstV+m3qmSyY6k3zwykdFH3gAX74/g3Ri4Fk062z9IzbdbQMcx+Hzt7/0VKX0IhVPMe2M+/j20+INyd2cy9O3v8Ssr+Z0v3bH2Q+QjCULKvlT8TTXHHvLiMsaL2xYx24ZMImuBEducAKvPDSdbDpLJpWhY14XN//lLq4/YXgaNCy+wiR8/vJ3BKrw2iNvlrynlHRELusyp8TKdT6f//dLpix/BDccP41n73iJ+y7+B4f++DjuufBhwNjv5YAdn8Oyqy0NQDaT5e7zH2K/ZQ5lx+j+PHjF40RrI/kDykLuOOdBfhbalz0XO4Sb/npnr1BV0xINnpkvfYlUh9l4l/W7v69triEQKn8jn01nS8qtZNNZDlnjGN57yaRxvvbIdE8Z4WQsybefziSdTPPBa5/wyZufD4ujb5vTzmuPvsnbz75HNlPew2ysYx27ZcA8ecvztM8tDF0k4ykevOwxOuZ1VnzOnX6zradzK4W6br+7COknBj/329JNnl3X5aSdzqarLdbtWHPZHOlEmptPvovP3vofK09ekQlLN+M4haETdV2iNWFiHXH+vNPZ3HLq3cyZMY90Ms3XH8wg3hGnur54hyh1FTfn0ja7nXsueJhjNvtLd677xruuX/Q9fQkE/UxabkKvatFNdttgUOGnXDZH85INJe9JxpKcvtdFuK6LFPl5zEdV+dctz7HHxIM5Yfsz+MOWp7DPkr/hlYfeKNsuL1svOfQa9lvmMM6ecikn73oeey52CK88XJnxxwLWsVsGzAv3vFoQQ52PP+jnnRc+GNS4qso/rvsX+y93GNv59mL3CQdx01/vJJ3KsPQqS3LYRQfg+MpzNtlMjjf++TbvvvgB5x90JSfucCZ3nfdg98MnncrQ1RbzfL/4hGC4sEinJ++++CGxjuKpg5lUloeufAIR4cx/nEDjEg2Eor3HU4WH//Ykh6x+NO+/8oauIckAACAASURBVHFBBkwqnqZ9bke/nzWdzPDNx9/x3F2vABCpCnPyfX8gFA11r9z9AT8+v0Mg5CcUCRIIBdh874245MXTe+2Iqmqj/OmWo8z7+vzIAyE//mDhQ1YcYfWNf8hvr/g1oUjpn1miK8lff3EubbPbPe8JhoPcf+ljJLqSpjK2K0nb7HbO2u+S7hX/ULjuT7fy1G0vdlfexjsSdLXGOGu/S/jkzc+HPP5YwGbFWAbMcdudxltPvVv0WrQ2wvG3HjWoTJKrj72JR695qtdDIxgJ8sP1VuL8Z07GcRyevv1FLjjoyu6c7oHg+ATX1W71yGAoQCAc4MLnTiUVT/GHrU4lk/KIRQs8MO8mzxUzwNPTXuTSw68l0VmsMTastcXqXPDMKYAJtUxd81i++fi7wqkcGfBBZynW3moNzn/q5O7v533fyuPXP8Xn//2KJVdajB2nbsuEpZton9tJdX2UUMRb8mDGp9/z4OWP8eFrnxCtibD1/pux6Z4bcsymf+Xbz2Z2/66C4QChqhBX/vscFl9hEtOf/C8n73Ku57mI4wjiiGcYJhQN4gv4iXvk2vf8mQ6GRFeCPScdQqpI5a2IsNHO63HK/X8c9PjDjc2KsVScbX+5OR+++gnJWOGqPZd1WXurNcoec86MeTx81ZMFDjadSPPJf77gzX+9w3o/XZut9t2E5+58mbeeebfXyjYUDZLL5Io6fDfX21mmUxnSqQyn7Ho+U/66h7dTBxom1pV06gDLrLpk0TxzMEkrK/14Qeu7eEeC7/83u+i9lXDqQEG2StPiDUz5S2FHpKbFS4dMAJb6weIcednBBa9f9uqZPHnz8zx507Okkmk23mV9dj5ie+onGO2fydutxc8P/ykPXv4YuUyh83ZdBY/P+4N1V2DKSbtz5n6Xetr10euf9Wt7Kb79dKYJ7RU5XlFVPnr90yGNP1awoRjLgNli741YapUlCg7mQtEQh5yz/6BUMV9/7D84vuJ/hsmuJM/d9TJgVlOn3P9HDjpjXyYtN4FQNMRyayzDH288glwR+eVSzJvVykVTry55z092Xq/fGL0/6Pc8GFWFpsUbeez6p3nl4TfobO3C5x++f26haJDN9thw2MbvnicS4ueHbsflr53NtW9fyAGn7N3t1Oez21E7EAgVhmS8fs8A/oCPLffemDU3X72onPZ8wlVD68la01hdslCrv4f5eMGu2IeR1llt3HzyXTx7x8ukUxl+uP5KHHzWfqyxyarDOm+sPUbr7A6almioqARxIBjgoudP446z7uex654i1p5gmVWX5IDT9majX6w3qDHdnFuye03Pf+Q+v4/df78Tu/++tybJFb+7kbZZ3jHbvmQGkAr41K3PM+Pj7zjrsRO7Qxa5XI7n73qFh//2TzrmdfYK8xTjhhOn4Q/4cRxB0ZKHtaFokGw6V3Aw3RN/wIc/6CedyPR6oPj8DtX1VWx34Jb9fq7B0jq7ndvPvI9n7niJbDrL2luuwYGn7c3yP1q24N6Jy0zgnCdO4vQ9LyTelcBxHNLJDBOXaeLbT4unoIrj4Av4qM5rw7/7wocFD9ZAyM92B2w+pM8xadkJ/9/efYc3Wb0NHP+e7Kal7L23ILIUmcqeIksQUYagIBsFERAUEBUQXgEFRJChCIgsQVCGCrKnIJQNsmfZdGWe949Af5QmadqmTWnP57q8LrOe3E8T7pznjPtQsEx+/jtwNt7Xzmg20LJPk2QdP61Qfewp5N7N+/SoMIg74fdw2OKuavxoySCqNqvs9/e8fzuCSe98y85f96HTa3E4nDTo9CJ9JndNcCAwUK6cucbbT7/ntk82KMTE0B/7J/ijsWjschZ8tsxjt0hSGUx6mnSrR7+pb+NwOPioxXgObT7itivKZ4J4PwbGIAOjVgxmycRV/ONhDAMgX/E8zDvxFT9PXMVP41ZgjbHhdDip0qQi/ad3J0e+bB5fG37xJr/P/pNLJ69QtFwhGnerR9Zc3kon/8/t63fpWWkw927ci+3yEkJgCDLwxYaPKFu9tNvXOZ1Oju48yb2b9ylRqSjhF24wpNEYt38/g0nP7COTyVMkFxdPXqFftWFYIi2xc+oNQQZy5s/G1N3jkt2qPnf0Iu/WHIE1xhr7vTMFGyldpQTj1o2ILY+QFqmSAgE2Z/hCln652m0/bo4C2Vh4boZf62I47A7eqTSYSyevxLnUNJj0PPNiWcatHeG39/K3iW9NZ9Pi7XEGT/VGPUWeLsDXu8YmuLLVYXcwss0E/t0YhiXK6tfFUkazkRW35rJl2S4m9ZiRvKQe57gGNBoNphATg2b1pOpLz2KNsdImR1e3P1AanaBV32b0+vJNwHX1cOf6PcyZTAlWJv17yQ6+eHMq0imxWWwYTHo0Wg2jfxlC5frPJBjr9Pfm8us36912YRQpV5BZB7/06ZyllIx+ZSJ71x+Ic46mYCNN365P70ldY++7cfkWyyevYfvKPegMOhp1qUPzdxpizuSfKqy3r91h1Tfr2P3bfsyhQTR7uwEvtq2WpDUTqUkl9gDrWLR3nJV2jzIFG5m6exyFyxTw2/ttX7mHcZ2+Ijoi/gwNo9nI5C1jKFGpqJtXBp7T6WTx+F9Y8n+/EnU/Gp1eS6POdej+RUefyylLKTmy4wSbl+7AEm1j46ItRN1zM0LmpsXsjSHIwPzTU/m0/aQ4NdKTq1CZ/Az7cQDFKhSOszL17XIDOXfkgtvX5CyQnXe/fYfnm1aK99iNSzfZu/4gGo2gSpOKZM3t2q/05pXbdC7R12399aAQE4uvzEqwu65dnrc9Tk/UG/XM/2+aTwOy4PpB+uXr31k2aQ13rt8hV6GcdBjamkZv1lEFwHyQKrNihBDtgFFAGeB5KWX6ztaJ4G2lnBACp5e+1KTY/fs/bpM6gM1i5adxKxgwoweZsob49X39QaPR0GFYG9oPaUVMpMU15S2R9WeEEDxdozRP13B1C7Ts05hhTT4j6n6Uq2yAgNBsIbTs25SFny3zueUthCBTthDu34rw7Vy0GjRaTYKVFC8cuxwvqV84fokr/3kugxB+8SaftJ3IJyuHULlBecD1ozh9wFx+++5PV2tTuK5g2g5sTtcxHVz127003rYu20XDzrWx2+ycDbuARquhSLmCceLytipToxVYY3zvAtNq3Y+TKP6V3M6kMKAN8K0fYklXarSowppZf8TpX39Ib9RTqKz/WuvgapULIdx2Qzgdki3Ld7F91R76fNWNl7o39Ot7+4tGo0nWpbbD4eDE3v+wWWyUfLYYC89/w4G/wrh65jr5S+alfO2y2G12dqzaw+kDZ73WoIGHfex10Rv0VKxbjgsnLrv9PB/VoNML7Fn7L7evet8mTqPVxGuhHtpyLMHVsJZoK98O/oFv908EYNmk1ayduxGbxRan22/F5N/IXyIv185c93ielihLbN/7zMHzXY0R6bqi7D+9O7VaVyXyXhS5Cuck4rb7xVzBoeZ4VRvTMteUxlPsWLUndt566SolAh2W3yUrsUspjwLqEsqN9kNa8ecCV3fAo8nWaDbQY0Inv1dErNehFmtm/uFxZajT4arJPaXXLPIUzc2zD1p86cW2X3bzZY8Z2Cw2hHAtgHltaCvKVCuJw+HE+aDEgN6gZ+Jfo1g1fR2rv91AxJ0ISlQsikan5eCmw9htdpwOidFsoHSVEnQf35HrF25wZOfxBJM6wPp5f1Pq2WJER8RgibK4naMuNMJt5UhTsNGnFbZnwy5gjbGiN+pZPP4Xt595TJSFH8cspd2gFpiCjW6vUIzBJu7dus/Cz+MOPEdHxDCu41d88H1fvnlvnsdSEUazge4TOqX5DU8estvsjGozgX83HY493+VT1lCx3jOMXDoo0YOmTqcTu82BwehbXZ7U5Jc+diHEJuB9X7tiMkIfO8DFE5eZ0nuWa7sxIciWNwtvj+1I3ddqJvvYZ8LOs2nxNmIiLTzbsALPNa7AF29OY+vyXR6T+0NZcmVmydXvkh1DWhG29ShDG3/qdjXhQ0IjCM0ewv9t+sTj2MbZwxfYumIXdqud55tWoky1UliirXQt3Z9bV+94nV/9OI1WQ73Xa7Fx0bbYlvDD+82hQUzbPY58xfPEeU3k3UhezdfD416oscfWaVgTuQBLtJVXcnbz+IMjhGD5rbm8UbhXvPEGIVzfA71Rz/XzN9y+PiRrMNH3o92uEjUFGxkwo8cTVV533sifWDrx13jfE2OQgfZDW9HJzWIud25fu8OM939g85IdOOwO8hbNRbfPXqf2qzVSIuw4/DZ4KoT4A8jj5qHhUsqVD56ziQQSuxCiB9ADoFChQs+eO3cuodjSjejIGGwxNjJlS/4OMVJKvu77HevnbcJmteN0OAkKMZG3WG4m/DWSbSt28+OYpR7/sT604Ox0chV6ci6hvRlcfzQHNob59Nzg0CB+vjbb51bW2rkbmTZgDjEexi+8yZwzlK92fM7CT5eyfeVeEK4CXR1HtPXYfbF65gZmDPze44+zEPBswwqMXTsCh91By8ydPf6ghWQJZsWteRzbfZIPm32Ow+bAZrGhM+owZwpi5LLBDHzxo0SVaXj03JZem53o1wWKlJLW2d8k8o77UgWZsoXw/cmvuXTyCllzZ/H4+UTciaT7MwO5fe3uYztfGejxRSda9E7ZefB+GzyVUjbwR0BSypnATHC12P1xzCdFULDJbwuFNi7ayoYf/o7zjzk6Iobzxy4xuedMPv55EBXrlaNLiX4ep/1ptBrOHbmYbhL78T2+LzOPuh/NlqU7qO9jS3PvugMek7rQCqTD81f5bvg9bl25HWeDiYeklFw9ex0k5CmaK/YHv3mPhhQslY+5Hy3iyPYTcT5DjUZgCjHRa7JrWqBWp6V+xxdZ//2meIO1BpOe5j1dYylPPV+SxZdnsmvNP1w7G06B0vl4rnGFBAd4vYnyUPwsrbJZ7US7myX1wP1bEbya11XEzGaxUbR8YYYvfJe8xeJuOr56xnru3YqIvzlLlJXvhi6gSbd6aWLNyJPROabEWjxhpdv+UrvVzs5f93H/dgR5i+bGHOp5EFKr08ROh0sPTCG+/2hKCf/+7XsVyuDMZo9XWd6S+kP/bgrj6tnr3An/33TBPWv306l4H7qXG0j38gN5o0gvtv2yO/bxCnWeZvKWT5n/3zSadK1LSNZgQrIEU++NF/hm3xcUeip/7HN7TOhEwdL5CHrkbxAUYqJ4xSJ0/Kht7H16g55aravyynvNqdqsMlqtFmuMjRKVirotoavVa73WZS/kx6m6qUFv0GHObPb6HLvVTuTdKKwxNk7uPU3/6h/Gq965cfE2j11lQiOSXcvGX5KV2IUQrYUQF4HqwBohxDr/hKV4En7B8+YPOoOOW1duA9B7cleP26vlKJCd4hWLpEB0KU9KycWTV/jv4LnY+uNNu9VD7+PGEgCRd6MYWPtjOpfoy+i2E722+Bt1qROv3G5ifD/yZ7qU6Mdr+XvQt9ow1s3byOi2E7l2NhxLtBVLlJXwCzcZ+8YU9qzdH+e1uQvnZNDs3qy4OY8Vt+Yx5Pt+8frlg0PNTN87nkGze/PCK1Wp/WoNhs7vz6QtYzxWb3TYHUzpPYvX8vfg3NGL8QZ49UYdWXNl5rWhrTC52cXJaDbw5ievxbnvyn/X+OePg1w65X4XpUATQtDm3Zd8/iydTklMlIUNP/yd6PdJC5I7K2YFsMJPsSg+yFsst8c51XabnRz5XcvKG3auzeHtx1j//d+xl9x6kw6jycjo5YPTzBcwMcK2HmVC1+ncvHLLNV9co6HTyHa8+kFLtq7YzbWz170OoD6049c92GJcf5OrZ66zZ+1+3p3RgwYd49chKVu9FC+8Uo0ty3YmadWpdEokEpxwfPcpTuw97XamjCXaytd9Z/PDqamJfg+dXkftdtV93gR6ar/ZbJj/t2sa5KNTIQXkKpSDRl3q0Lp/MzJlDcEaY2fFlDXoDK5U4bA7eWdip9jNOW5fv8uYV7/k+O6T6I16bFY7xSsU5uMlg8iRP3uizyUlvT6sDaf3n2Hv+oOxU0M1Wk3sjLHHxURa2PP7flr1bRp7X70Otbh44or7VruE0s+njamTauXpE2bL8l2M7/I1lseSjN6o58W21Rg6v3/sfVJKDm87xppZf3D9/A2eebEMbQa8RGi2TKkddrKdCTtPv2ofxhtUNJqNdPu8A03fqs/aOX+xbu5GYiJjuHom3GtBrccZzQZ+vvKd23n0Uko2Ld7OskmruXn5lmvHJD+VFnjcN/vGU6JSsRQ5NsC9W/fpUOAdt3PbdXotzbo3oN/Ut+O9JmzLMbR6LRXqPB3binc6nbxdbiCXT1+NMzNHq9OQs0AO5h6fkibrrpzaf4Ydq/ciEBiDDPw4ZilRHrZJrNuhFh8uGBB7O/JuJD0qvM/NK7fj1oAyG+j55Zs075Gya0R8HTxVfexPmBfaVKV1/2YYTHr0Bh1CIzAFGyn5bDEGfNM9znOFEFw5c519Gw5yfPcpfv5iFYPrj47terh19TbfDf2RN0v3562n32XR2OVE3vW8q1BSRUfGsGbmBj5uNZ6xHaewb8O/ia7n8uOYpVii4ydTS5SF+aOWoDfoaN2vGTP+mcC8418z9/gUnmtc0WN31OM0Wg271vzj9jEhBDVaVaHpW/XIni+b1zruyfXD6CUpdmyAU/vPovcwI8huc3Bg4+F494dmy0SNllWo2qxynK6Zfev/5cbFm/GmWzrsTu7evMeOBPacDZQSlYrS6aN2dPyoLc17NfJY9tkUbKRJ17gVM4MzBzN19zjqv/4CeqMeIaDgU/kY8kP/FE/qiaFa7E+oq2evs2XZLqzRVirWK0fZ6qXida+s/2ETX/WeFa+olCnYyMhlg/n89cnERMQ8UkFPT9ZcWZi+dzyh2f3Tqr9x6SZ9q31I5COtXFOwkcoNyvPx0kE+L9R6JUdX7nnogtIZdMzYP8Ht/PTXC/f0Oi7xkNFsoP0HrVyLkbafIEvOTLTo05RK9cvxzXvz+HPBFp82xNDqtej02iRXmjSaDayOSJmNwQFO7DvN+3VHeSw/UbZGaaZs/dSnY80fvYQfRv/s8fE2774UW7QsLfvjx7+Z/M5MrDHW2OoLpmAjVV+qzPBF73kePJcSp9Pp98WG3qgdlNK5PEVy0W7Qyx4fdzqdfDfkR7cJxhpt5YsuXxNxJzJOsrJG27h55TbzRy+hz1fdEozBtVfpH/w0dgXXL9wgNHsmWvVtQvshrdAbXK3C8V2mcvuxxT0xkRb2bTjI2tl/8ZKPrRxvm2nYrXb0hvhfZSmlT0kdwGl38tO4FdhtDpwOJ+ePwvG9p9HqXEnal6RuNBt59f2XWfzFSs9PSqAIWUqv4ixZuRjBWcxuE7sp2LWJhq+Cs5gxmPQeu3VCsydcl0hKyfaVe1g5bS13rt+lXK2nqNWmKtt+2cOxXSfJkT8bLfs2pVK9cik2LtSgY23ylcjLos+Xc/rfs2TNnZnW/V+i3uu1vL6nECJVk3piqBZ7OiOl5Oiuk+xavY+fJ65K0lzl4Mxmfrn9fYLPmzZgDr/P/iveXqXlaj7FuHUjuBN+jzcK9/LYdVG4bAG+C5vkU0yv5uvusf6K0Aj+b+Nonnkh/gYmrbJ2IdLD/pkP6Yw6pEMmqk/+URqthmx5stD1sw406lyH4c0/558NB90u/MlVOAdGs4ELR+PvfarRCOq+/gJDf+iXpDh8Fbb1KMOafobNYo89Z1OwkbLVS/P5bx/6VLrW6XRy+9pdOhXvg81NYjeY9Hx3eBJ5i+Z282oXKSVjO05hx6q9sVdzGo0Gp9MZO6j5MLamb9V3zfTK4FQfewYUcSeS/jWGM6ThJyyesDLJC1B8mVly7Vw4a2bFr01jjbZyZMcJDmwM4871u25b0g9526n+cd66hoxBBo9b1DXr3sDjVEidQYfeqKfM8yUwBCWt3ofBpOetsW+w8PwMGnWuA8CIn96jUv1n0Bt0cbaDe6pqScb+PoL3v+uN8bFphBqNwBxqpsvoV5MUR2KUq1WGGfsn0KRbXQqUystTVUvSf1r3BJN6TJSFmR/Mp2WWzjTWtadftQ+p/vJzGM0GHm3YGs1GOn7U1mtSB9e2iI8mdSD2c3z8Cu+37/7k8PbjSTzjjEd1xaQj4zp9xan9ZxJM6DqDDp1eR0yk+37WkpUTnpWxc/U+j5eplqgYNi/ZQY8Jnby2gouUK5Tg+zxUr0NNFny6zH2lQiEoU7Wk29d1HvUqhzYf4eyRi7ErSE0hJnLmz0avyV0pXqEwh7efYGK3aT7HEvetBVUaV4jztwgKCeLz34Zz8eRlZn0wn92/7Udv1HP28Hl6VhrMyz0b8n+bRjHnw0Uc2BSGRgjylcxL9ZefS7VpqPlL5OXdGe/4/HyH3cH79UZx5uC52M8g/MIN7t+8T42Wz2ONtnD+2GXyl8hD20EvU6H20wke89cZ632eXWSNtrJm5obYssyKdyqxpxM3Lt1k/5+HfErqmXOG0v6DlswettDN9EED3T7rkOD7edurVEpXIggKCaJR17qsn7sx3lWAIchAhw/bJPg+D73cqzErp63jbvjdOEWpHsbraRm3yWxk8tZP2bXmH/5atBUpJbXbVadGyyqxU/FKVymepKsbvVFHuVpPud33E+Dg30fYt+EQdpsjTrfMmll/kqdYbj5eMpD364/m0okrnD96kcunrrJiyhpeHdySLqPbJzqelLRz9T7OHbkY74c1JsrC1uW7+PHMNLLl8W2zjYfu3nBfNdIdKSW3EiiF7Kt7t+6j0WjSzcbV7qiumHTi0smrHqexgasfOkvOUFr0bsyMf76gdb9mdB//BuZMQZhDgwjKZCJzjlCGfN+PinXLJfh+VZpU9PhYUIiJmq2rAtDryy48/1JlDCa9awMNnesrZ7fZ+bT9lywat8JjN8qjMmUNYdqecdRqUw2dQYdWpyF34Zy8921PWvdr5vW1Wp2WGi2rMOKn9/ho8UBebFs9zvzqXAVzUK35s3G6TRKi0Wqo1aYaI5cP9vicBWOWuS3mZYmysOjzFUzoNp1zYRdcA5nSNQhsjbGx9Mtf2bk6bU0V3PjTNo81c7R6DXvWHkj0MSvUKeu1bMGjDEEGyr+YvE3g96zdT9cyA2iftwdtc79F7ypDOLb7ZLKOmVapFns6kaNANq+tzop1y/HFho/j3NeyT1Oavt2AU/vPoNNrKV6xiM+j/AVK5aNWm2ps+2VXnJk3BpOegk/l57nGFQBXjZKPfx7EuSMXGNJoTGy/utPuJOJ2JAs+Xca1c9d595uEuwVy5MvGiJ/ew26zY7PYMAWbktx1cSbsPLM/XMj+Pw4iNIIqTSqR0KG0ei25CuagYefatOjdmMw5Qj0+1+l0cv2C5wqbd8Lvsvu3/bFTTR8VE2nhp/ErYld3pgVeJ1lI4W2TJo9a9W3KqunrsFkSvlp6uHgqqfau/5fRr0yMc+V4ct9/vF9vNJO3jqFExbS5bWRSqRZ7OpG/RF7XlmZuWp2mYCNtB7qfGmkw6ilbrRSlni2e6KlbH3zfh/YftCI4ixmdQYfRbKBJt3pM3Dgq3rH+O3ieyHtR8Wp7W6IsrJ/3N+EXfZuWCK4l9EEhQUlO6qf2n6F/9eHsXrMPa4wNS5SV7b/sdlt3/CGtXsuy8Dn8cGoqnT5u5zWpQ8K7QbkGbj23qy6fvpbwiaSi2u2qxyk09iiH3cFzjRK/cUuO/Nn5YsPH5CqUg6AQE8GZza46NbkzozfpMYeaCQoxkbNgdib+NYosOTMnOf7p785xOynAGm1h7vBFST5uWqVa7OnIRz8PYkDN4UTdiyY6IgaNVoPeoKN5z0ZuN0BOLq1WS6eP2/HGiFeIvh+NKdjkcVbFluU7iYlwP1Cm1WnYt/5fmnSr5/cY3Znaf068gWNnAvPUM+cITfS2fU271+fX6evi9UvrjTrqdajFXwu3enxtniK5EvVeKa1GyyrkK5GH80cvxZm+ajQbadqtbpLrwjz1fEl+PDOdE3tPc+/mfYqWL0yOfNm4fPoqZ8MukCVXKGWqxV98lxj3b0dwxcMPpZSw/69DST52WqUSezqSu3BOfjg1lb+X7GD/n4cIzZGJRp3rUKy8+8E9f9FoNARn9j4Q5fVqQAif5k77Q0yUhWO7TiTqNUazkU4j2/mUXKIjorl44gqZsoXw5ievcWjzUS4cuxS7ICgoxETe4rnpPbkrd8PvsXf9Addm248wBRt5dXCLRMWY0nR6HZM2f8J3wxawft4mrDE2MufIRIdhrWmVwBhHQoQQ8fYdzVc8T7xKlkml0Wq8rQlDk0YXGSWHSuzpjMFkoGGn2jTsFL9SYSDV7VCTXWv2uV3x6LQ7eM7LYKw/SacTbwVkhBAYzYbYLi2HzUGHoa14KYH+XYfdwawhP7J6xnq0ei12m4OCpfPxwbw+XD59jY2LtiKdktrta1KzlWtGzuB5fRhUZyTXzoYTHRGDVqdFq9Pwcq/G1Gz1vD9P2y+CQoLo9/Xb9JnSDZvFhsFkeCKqhAaHmilZuRjHdsUfKNVoBDVbVQlAVClLrTxVUoXD4WBQnVGc/Oc01uj/XcqbzEZeGdg8Xn3vlPROxff576D7rRkrNyjP6F8+4NDmIzgdTsq9UIbgUO8bNABM6TWTDfM3x5kFI4SraNSco5M9bmzidDrZu+5fDmw8RFBIEHVfq0mBUvmSdmKKRyf2nWZQnZGuDcYf7j+rEZgzu+rZJ7SYKq3w256nKUEl9ozJGmNl0bgV/Dp9HfdvR5K3WG46ftSW+m+8kKotvwMbwxjRfGz8TY3NRiZt/sSnBVqPuhN+lzcK93K7eMpg0tNucEveTGPz0jOiM4fOMWfET66ZUFoNNVpWoeuY19LceIY3KrErihf//HmIb96by8Xjl5ESilcsQp+vulG2WqlEH2vn6n2M7TiFKA97apZ6thjT9oxPbsiKoqo7Koo3les/fOsJwAAABtdJREFUw6yDXxJxJxKhET51t3jiaRrgQwnttako/qYSu5Kh+WNZeblaT6H1sGr1YWVCRUlNaoGSoiSTVqdl8Ly+D6oc/m+swGg2UrpKCZ/3IlUUf1EtdkXxg+ovP8ekzWNY+Nlyju46QaasIbTo04Smb9VLtTn6ivKQGjxVFEV5QqiNNhRFUTIo1RWjpDnXz4ez/KvfCNtylCy5MtOidxOqNKn4RKxyVJS0QCV2JU0J23aMYU0/w261x5Yh/nfTYV54pRqD5/ZRyV1RfKC6YpQ0w+l0Mqbd/xETEROntnxMpIUty3YmaTMHRcmIVGJX0owj248T7WEf1phIC6umr03liBTlyaQSu5Jm3LsZgcZLV8vta3dTMRpFeXKpxK6kGSUqFcHqYZs0nUHLM8nc81JRMgqV2JU0I1ehnFRpUhGDKf6m3DqDnjb9k7ehg6JkFCqxK2nKsAUDeK6xK7mbQ80EZQoia+4sjP3tQ3IVyhno8BTliaCmOyppislsZPSKD7h2LpxT+88Qmj0TT9csjUaj2iCK4iuV2JU0KXfhnOQurFroipIUqhmkKIqSzqjEriiKks4kK7ELISYIIY4JIQ4KIVYIIdzv2KsoiqKkmuS22DcA5aSU5YETwLDkh6QoiqIkR7IGT6WU6x+5uRNom7xwFCV1OOwONszfzMppv3P/VgRP1yjNa0NaUfSZwoEOTVGSzZ+zYroBi/14PEVJEQ6HgxEvj+XQlmNYoiwAhJ+/wbZfdjNy6ftUaVIpwBEqSvIk2BUjhPhDCBHm5r+WjzxnOGAHFng5Tg8hxF4hxN7w8HD/RK8oSbB1+W7Ctv4vqQM4nRJLlJVxnb7GYXcEMDpFSb4EW+xSygbeHhdCdAGaA/Wll332pJQzgZng2hovkXEqit+smbmBmEiL28fsVjth245RofbTqRyVovhPsrpihBBNgCFAbSlllH9CUpSUFXkn0uNjQgPR992XDlaUJ0VyZ8VMBTIBG4QQB4QQM/wQk6KkqOcaV0RvjF9oDMBqsVO6SvFUjkhR/CtZiV1KWUJKWVBKWfHBfz39FZiipJQWfZqgN8a/WDWaDdR//QWy5lbLMZQnm1p5qmQ42fNmZdLmMRQqUwCj2YA5NAiDSU/DznUY8E33QIenKMmmioApGVKx8oWZfXgSF45f4v6tCAqVKUBIluBAh6UofqESu5KhFSydP9AhKIrfqa4YRVGUdEYldkVRlHRGJXZFUZR0RiV2RVGUdEYldkVRlHRGeCnvknJvKkQ4cO6xu3MAN1I9mNSVEc4RMsZ5ZoRzhIxxnk/SORaWUia4GXBAErs7Qoi9UsrnAh1HSsoI5wgZ4zwzwjlCxjjP9HiOqitGURQlnVGJXVEUJZ1JS4l9ZqADSAUZ4RwhY5xnRjhHyBjnme7OMc30sSuKoij+kZZa7IqiKIofpKnELoQYI4Q4+GDTjvVCiHyBjsnfhBAThBDHHpznCiFEuiz+LYRoJ4Q4LIRwCiHS1YwDIUQTIcRxIcQpIcTQQMeTEoQQc4QQ14UQYYGOJaUIIQoKITYKIY4++K4OCHRM/pKmEjswQUpZXkpZEVgNfBzogFLABqCclLI8cAIYFuB4UkoY0AbYHOhA/EkIoQWmAU2BskAHIUTZwEaVIuYBTQIdRAqzA4OklGWAakCf9PJZpqnELqW898jNYCDdDQBIKddLKe0Pbu4ECgQynpQipTwqpTwe6DhSwPPAKSnlf1JKK/AT0DLAMfmdlHIzcCvQcaQkKeUVKeU/D/7/PnAUSBd1nNNcPXYhxGdAZ+AuUDfA4aS0bsDiQAehJEp+4MIjty8CVQMUi+InQogiQCVgV2Aj8Y9UT+xCiD+APG4eGi6lXCmlHA4MF0IMA/oCI1M1QD9I6BwfPGc4rkvBBakZmz/5cp7pkHBzX7q7ssxIhBAhwDLg3cd6DZ5YqZ7YpZQNfHzqQmANT2BiT+gchRBdgOZAffkEzzdNxGeZnlwECj5yuwBwOUCxKMkkhNDjSuoLpJTLAx2Pv6SpPnYhRMlHbrYAjgUqlpQihGgCDAFaSCmjAh2Pkmh7gJJCiKJCCAPwGrAqwDEpSSCEEMBs4KiU8stAx+NPaWqBkhBiGVAacOKq/thTSnkpsFH5lxDiFGAEbj64a6eUsmcAQ0oRQojWwNdATuAOcEBK2TiwUfmHEKIZMBnQAnOklJ8FOCS/E0IsAurgqnx4DRgppZwd0KD8TAhRC9gCHMKVcwA+lFL+Frio/CNNJXZFURQl+dJUV4yiKIqSfCqxK4qipDMqsSuKoqQzKrEriqKkMyqxK4qipDMqsSuKoqQzKrEriqKkMyqxK4qipDP/D4zfQO3PzYEuAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#查看效果\n", "bfgs_model.plot_decision_boundary(data,target)" ] }, { "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }