Skip to content

Instantly share code, notes, and snippets.

@8one6
Created January 22, 2014 03:46
Show Gist options
  • Save 8one6/8553196 to your computer and use it in GitHub Desktop.
Save 8one6/8553196 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "Drawdown cython"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "import numpy as np\nfrom numpy.lib.stride_tricks import as_strided\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n%load_ext cythonmagic",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": "%%cython\nimport numpy as np\ncimport numpy as np\nfrom libcpp cimport bool\ncimport cython\n\nDTYPE = np.float64\nctypedef np.float64_t DTYPE_t\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\n@cython.nonecheck(False)\ncpdef tuple cy_dd_custom(np.ndarray[DTYPE_t, ndim=1] ser):\n cdef double running_global_peak = ser[0]\n cdef double min_since_global_peak = ser[0]\n cdef double running_max_dd = 0\n \n cdef long running_global_peak_id = 0\n cdef long running_max_dd_peak_id = 0\n cdef long running_max_dd_trough_id = 0\n \n cdef long i\n cdef double val\n for i in xrange(ser.shape[0]):\n val = ser[i]\n if val >= running_global_peak:\n running_global_peak = val\n running_global_peak_id = i\n min_since_global_peak = val\n if val < min_since_global_peak:\n min_since_global_peak = val\n if val - running_global_peak <= running_max_dd:\n running_max_dd = val - running_global_peak\n running_max_dd_peak_id = running_global_peak_id\n running_max_dd_trough_id = i\n return (running_max_dd, running_max_dd_peak_id, running_max_dd_trough_id, running_global_peak_id)\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\n@cython.nonecheck(False)\ncpdef np.ndarray[DTYPE_t, ndim=1] cy_rolling_dd_custom(np.ndarray[DTYPE_t, ndim=1] ser, long window):\n cdef np.ndarray[DTYPE_t, ndim=2] result\n result = np.zeros((ser.shape[0], 4))\n \n cdef double running_global_peak = ser[0]\n cdef double min_since_global_peak = ser[0]\n cdef double running_max_dd = 0\n cdef long running_global_peak_id = 0\n cdef long running_max_dd_peak_id = 0\n cdef long running_max_dd_trough_id = 0\n cdef long i\n cdef double val\n cdef int prob_1\n cdef int prob_2\n cdef tuple intermed\n \n for i in xrange(ser.shape[0]):\n val = ser[i]\n if i < window:\n if val >= running_global_peak:\n running_global_peak = val\n running_global_peak_id = i\n min_since_global_peak = val\n if val < min_since_global_peak:\n min_since_global_peak = val\n if val - running_global_peak <= running_max_dd:\n running_max_dd = val - running_global_peak\n running_max_dd_peak_id = running_global_peak_id\n running_max_dd_trough_id = i\n \n result[i, 0] = <double>running_max_dd\n result[i, 1] = <double>running_max_dd_peak_id\n result[i, 2] = <double>running_max_dd_trough_id\n result[i, 3] = <double>running_global_peak_id\n \n else:\n prob_1 = 1 if result[i-1, 3] <= float(i - window) else 0\n prob_2 = 1 if result[i-1, 1] <= float(i - window) else 0\n if prob_1 or prob_2:\n intermed = cy_dd_custom(ser[i-window+1:i+1])\n result[i, 0] = <double>intermed[0]\n result[i, 1] = <double>(intermed[1] + i - window + 1)\n result[i, 2] = <double>(intermed[2] + i - window + 1)\n result[i, 3] = <double>(intermed[3] + i - window + 1)\n else:\n result[i, 3] = i if ser[i] >= ser[result[i-1, 3]] else result[i-1, 3]\n if val - ser[result[i-1, 3]] <= result[i-1, 0]:\n result[i, 0] = <double>(val - ser[result[i-1, 3]])\n result[i, 1] = <double>result[i-1, 3]\n result[i, 2] = <double>i\n else:\n result[i, 0] = <double>result[i-1, 0]\n result[i, 1] = <double>result[i-1, 1]\n result[i, 2] = <double>result[i-1, 2]\n return result[:, 0]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "def py_dd_custom(ser):\n running_global_peak = ser[0]\n min_since_global_peak = ser[0]\n running_max_dd = 0\n running_global_peak_id = np.nan\n running_max_dd_peak_id = np.nan\n running_max_dd_trough_id = np.nan\n\n for i, val in enumerate(ser):\n if val >= running_global_peak:\n running_global_peak = val\n running_global_peak_id = i\n min_since_global_peak = val\n if val < min_since_global_peak:\n min_since_global_peak = val\n if val - running_global_peak <= running_max_dd:\n running_max_dd = val - running_global_peak\n running_max_dd_peak_id = running_global_peak_id\n running_max_dd_trough_id = i\n return (running_max_dd, running_max_dd_peak_id, running_max_dd_trough_id, running_global_peak_id)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": "def windowed_view(x, window_size):\n y = as_strided(x, shape=(x.size - window_size + 1, window_size),\n strides=(x.strides[0], x.strides[0]))\n return y\n\ndef py_so_rolling_max_dd(x, window_size):\n pad = np.empty(window_size - 1)\n pad.fill(x[0])\n x = np.concatenate((pad, x))\n y = windowed_view(x, window_size)\n running_max_y = np.maximum.accumulate(y, axis=1)\n dd = y - running_max_y\n return dd.min(axis=1)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": "test = np.random.randn(200).cumsum()\nmaxdd = cy_dd_custom(test)\n\nrmdd_cy = cy_rolling_dd_custom(test, 20)\nrmdd_so = py_so_rolling_max_dd(test, 20)\nrmdd_cymv = cy_rolling_dd_custom_mv(test, 20)\n\nfig, ax = plt.subplots(1, 1, figsize=(15, 6))\nax.axhline(color='k')\nax.grid(which='both', alpha=0.1, linestyle='-')\nax.plot(test, lw=5, alpha=0.7)\nax.plot(maxdd[1], test[maxdd[1]], 'go', markersize=10, alpha=0.7)\nax.plot(maxdd[2], test[maxdd[2]], 'ro', markersize=10, alpha=0.7)\nax.plot(rmdd_cy, 'orange', lw=10, alpha=0.5)\nax.plot(rmdd_so, color='red', marker='.', linestyle='', alpha=1)\nax.plot(rmdd_cymv, color='k', marker='x', linestyle='', alpha=.5)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": "[<matplotlib.lines.Line2D at 0x7f5929605cd0>]"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAA3MAAAFwCAYAAAASQiL9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4lGXWP/DvpBFIQkIghNBr6E2pIhYQFBvYlbWhrK6u\nhbVh/a37vq5l1XdVLLvristawLK6rrqwirgKKFVApIUQahIChCSEJCSZZH5/HIcp9/3MPNNnMt/P\ndeWSuac9yCR5znPOfY7FZrPZQERERERERDElIdIHQERERERERL5jMEdERERERBSDGMwRERERERHF\nIAZzREREREREMYjBHBERERERUQxiMEdERERERBSDAg7mbrrpJuTm5mLo0KEn144ePYopU6YgPz8f\nU6dORWVlZaBvQ0RERERERE4CDuZmzZqFJUuWuKw9/fTTmDJlCgoKCjB58mQ8/fTTgb4NERERERER\nObEEY2j4nj17cNFFF2Hz5s0AgAEDBuCbb75Bbm4uDh48iLPOOgvbt28P+GCJiIiIiIhIhGTPXFlZ\nGXJzcwEAubm5KCsrC8XbEBERERERxa2QN0CxWCywWCyhfhsiIiIiIqK4khSKF7WXV3bq1AmlpaXo\n2LGj8hgGeEREREREFO8C2fUWkmDu4osvxoIFCzB37lwsWLAAM2bM0D4uCNv1iOLaQw89hKeeeirS\nh0FR7Lm/PIcvk5Zh645ENDS43teli3w1NTZh0olJuO+W+yJzkBHE7yGiwPB7iCgwgSa4Ai6zvOaa\na3Daaadhx44d6NatG9588008+OCD+PLLL5Gfn49ly5bhwQcfDPRtiIjID8WVxdhfogZyAFB/Qv6b\nmJyI4sri8B4YERERBSzgzNzChQu160uXLg30pYmIKEANVV1w5NgOWJISlfvqfw7wmhqb0CWrS5iP\njMizjRuBzZuBrl2Bs84CuDuDiEgVkjJLIgqPiRMnRvoQKIpVVAC7NpyN5naLkdixjXJ/ff3P/z1Y\nj7OnnB3mo4sO/B6KTl9+Cbz0kuN2YSHwy19G7njIGL+HiCIr5N0siSh0+EuUjNhswMsvAwkYgqRD\nbbWPaWwAbM1AxrEMDBk0JMxHGB34PRSdPvrI9faSJUBdXWSOhTzj9xBRZDGYIyKKgB07gAULJANh\nz5AF0/ffA2vWAImJrdC2egQsmxPRdKgWNmsTAMBmbYL1UC2sGxMxMnckWrVqFfyDIPJDXR1w4IDr\nWkMDUFoameMhIopmLLMkIgqzTZuA//f/gOZmub1+PTB3bnD3BDlvW+6f81s0NdWjuvgnlBd9jRMJ\nxUht7oL2rc7G/9w9BGPGMJCj6FFSol8/eBDo3Tu8x0JEFO0YzBERhZHNBrz+uiOQA4CVKyXAGzEi\nOO/R3Axs2eK6lpjYCn16noqs8lNd1isrg/OeRMGyf79+vawsvMdBRBQLWGZJRBRGO3cCe/eq659+\nGrz32L0bqK11XWvTBjjzTPWxhw4F732JgsG9xNKOwRwRkYrBHBFRGBlNbVm7Nnh7gn76SV0bNAjI\ny1PXDx4MznsSBQuDOSIi8xjMERGFSX098M03+vtsNuDf/za+7/hxoLhYTmidSzR1dMHc4MFAp07q\nOjNzFG0YzBERmcc9c0REYbJypVr+6OyLL4CZM4HWrYEffwTef19ObKuqAKvV8bh+/YDHHgPatVNf\nQ7dfDgCGDAHaaiYUMJijaNLUZNwA5dAhubDB4eFERA4M5oiIwsSoxNKuthZYtkz2t734opzY6uzc\nKXO4br5ZvW//fqC62nWtVSugb185EXZXXg40NgLJyeb+DkShdOiQfB516uvlwkZWVniPiYgomjGY\nIyIKg9JSYPNm74975x0pqdQFXs6MXktXYjlgAJD080/79u0lgHN26BDQpYv3YyMKNaMSS7uyMgZz\nRETOuGeOiCgMvvxSXdOVSVZXew/kAODwYf26UYmlXW6uej9LLSlamAnmiIjIgcEcEVGINTVJ+aS7\nGTOA4cP9e81jx4CGBtc1m02fmXMO5jp2VO/nCTJFC6MZc3bsvkpE5IrBHBFRiP3wg1ramJgITJoE\nXHSR5+eOGwe89x7QoYN6n3t2rqQEqKhwXUtOBvLzHbeZmaNoxswcEZFvGMwREYWYrvHJ6NGy92f0\naP3IAAA46yxg7lxpiKIL5o4ccb2ty8r17w+kpDhuMzNH0cpm856Z42eViMgVgzkiohBqaJCB4O6m\nTJH/JiQA06er90+bBvzmN47GJTk56mPMBHODB7veZmaOolVVlTT/8YTBHBGRK3azJCIKoS1b1Fbr\nmZnAqac6bp9/PrBvn8yZS0oCrrkGuPRS13la3soszeyXA5iZo+jlrcQSkM98c7NcBCEiIgZzREQh\ntXGjujZypOyZs0tIAG6/HZg9W9ad77PzVmZ56JCaqUtMlLEEznJyJEh07phZUSEZROdyTKJwMxPM\nNTXJ51x3UYKIKB7x2hYRUQht2KCujRypf2xKij6QA7wHc7qsXL9+QGqq61pSksyac8dSSwqEzQZY\nrebGahgpLjb3OGaSiYgcGMwREYVIRQWwe7e6PmKE76/lbc+cmRJLO92+OZ4gk78qK4H/+R/gkkuA\nWbOAH3/073V0zU+Sk9U1flaJiBwYzBERhYiuxLJHDyA72/fX8rZnbvt29X735id2bIJCwfT++8C6\ndfLn8nLgd78D9uzx/XV0ZZa6CxIM5oiIHBjMERGFiNF+OX9kZjo6W9rV1sqX1QqUlqrPcd8vZ6fb\nb8Rgjvz1/feutxsagKeeAmpqzL9Gfb3+M3jKKeoagzkiIgcGc0REIWCz6YM5f0osAWmSYrRvrqRE\nGkM4y84G0tP1r8WOlhQsdXVq4x1APpPz5pnfQ1dSoj62Y0ege3f1sfysEhE5MJgjIgqBffuAo0dd\n15KTjfexmWFUaqkrT+va1fh1uGeOgsVTB8qVK4F//cvc6+j2y3Xtys8qEZE3DOaIiEJA18Vy0CCg\nVSv/X9OoCYruRLhbN+PX4Z45ChZv4wTefBPYts2/1+naVbJzzvMWAdmX19Bg/hiJiFoyBnNERCEQ\nzBJLO6MyS6OshpH27dWhy5WVsm+JyBe6z56zpibg2We9B19GwVxysr5h0OHDEiQ+95x87dpl/piJ\niFoSBnNEREHW0KAfFeBv8xM7X8osPWXmjGbNsXyNfGVm0Pfhw8Dq1b6/jv0zrMsk//e/wCOPAN98\nI1/33iv/JSKKNwzmiIiCbPt2NcvVti3Qq1dgr6srs/RnzxwAdOqkrq1fD/z738CHHwI7d/p3jBRf\ndJk53YWCTZuMX6O5WT8w3P4Z1n1W33sPaGx03G5qAp5/Xj6/RETxJMn7Q4iIyBe6/XIjRqiljb7S\nZeZ27lQDxzZtvM+y03W0nD/f9fZDDwGnnebbMVL8MBqJcd11wAsvuK5t3mz8OqWlahlmerqM4wD0\nn1Vdl0ybDXjtNRnXcfnlno+diKilYGaOiCjIdMFcoCWWgD6Yq6tT17p2VZtGuNOdILtbsMB8a3mK\nPwcPqiMxsrKAsWPVz19JiX6EAaDPAvfq5XgNXZmlJwsW8LNLRPGDwRwRURCtWaNvxhBo8xNAshVm\numF62i9nZ+YEuaSEjSXImNE+t/R0oE8f9b4ff9S/TmGhuta3r+PPvgZzgJQKf/ed788jIoo1DOaI\niILk0CHgj39U17t102fVfGWx6PfNufO2Xw4ABgww957Ll5t7HMUfT11Uhw1T7zMqtdRl5nwJ5ozu\nZzBHRPGAwRwRURBYrcAf/gAcP67ed/HFwXsfM0Ghmcxcly7AjBmua7qs3/LlLFcjPU+Nd4YOVe/b\ntEn9LDU367O//fo5/tyhA5CYqD+G3Fxg3jzgggvU+7yNTSAiagnYAIWIKAj+/ndgxw51fcwYYOrU\n4L2PmWDOTGYOAG6+GTjnHKCiAsjLA1JTgRtucN0Hdfiw/L3MZvIofngaJzB4sARg7p+lsjLX7pQH\nDqgNfNLTXR+TkCAZ6YMH1fe77TagdWvg6quBzz9Xj6+5OfDGQ0RE0Yw/4oiIArR6NfDxx+p6Tg4w\nZ05wTya9lVkmJelbuRvp0UP28+XmSvdAXXkcSy3Jnc3mOTPXurVrds3OvdTSqMTSvYFK587q4844\nAzj1VPlzZqYEgc4aGzk7kYhaPgZzREQBaGiQMi93iYnAAw8AGRnBfT9vmbnOnY1L0syYOFFdW7lS\nMhxEdkePyggAZ6mprjPmdBcG3JugeNsvZzdliuvtzExg9mzHbYtFX15sZqg5EVEsYzBHRBSAH34A\nqqrU9RtuCE1pordgzsx+OU/Gj5fsnrPycmDr1sBel1oW3X60Ll1cs9C6fXM//ui6b07XyVKX0Tvt\nNOCOO4D+/YFx42RAeLt2ro/Rffa5b46IWjrumSMiCkBJibo2YgQwfXpo3s9bMGd2v5yR9HSZibd2\nrev6ihXAkCGBvTa1HJ72y9kNHCgXBqxWx9rRo/I906WLrBcVqa+jy8wlJADnnitfRnSffQZzRNTS\nMTNHRBSAQ4fUtREjQtd0wdueuUAzc4BxqWVTk+xDKi3Vd+2k+OFpv5xdq1b67PSmTfLfffvk8+Qs\nM9Pc+A2d7t3VNQZzRNTSMTNHRBSAw4fVNX9PRs1o3RpISwNqavT3ByOYGzsWSE52PdGurATuuUdO\njhsb5UT9l7/0nCmhlstMZg6QUsuffnJd27wZOP984xJL9+YnZhll5mw2/1+TiCjaMTNHRBQAXTDX\nsWNo39NTsKjr+uerNm2AUaPU9aIiR4BXXw/8+c/AkSOBvx/FHk8Dw50ZDQ9vbjbf/MSsnBx1VmJt\nrYzeICJqqRjMEREFQFdmGepgzmjfXMeO0lEwGHSllu4aG2UvHcWXmhrZ++YsMVFmFbrr3x9ISXFd\nq6qSEstgB3MJCdw3R0Txh8EcEZGfamrUcsekJCArK7Tva5SZC0aJpd3o0WqWQ2flyuC9J8UGXYll\nbq6U5rpLTpZGKO4+/hjYu1dd13Wy9AWDOSKKNwzmiIj8pCux7NAhdM1PnN9DJ5jBXGoqcPHF3h+3\nfTtLLeON2f1ydrpSy2XLXLtcAkB2tnwFgrPmiCjeMJgjIvJTJPbLAcbBXJcuwX2fmTNlMPO4ccDU\nqcDdd+szH8zOxRdfg7lJk9RSS51ASiw9HQczc0TUkjGYIyLyU7g7WdqFIzMHSMno9OnAI48Ad94J\nnHOOfi/dd98F930pupkZS+CsQwfg5pu9v26gJZZGx8FgjohaMgZzRER+ikTzEyA8e+aMTJigrm3d\nCpSXh/69KTqY7WTpbNo0yfB6EoxgrnNnacbirKLCeJQHEVGsYzBHROQnXTAXrsxcmzbq+7ZtG/r3\n7t5df+L+/fehf2+KvOPHgYMH1XVvwZzFAtx1F9C+vfFj+vQJ7NgAySbrumoyO9cyNTcDS5YA/+//\nAfPmSadUonjDYI6IyE+RKrNMTgYuuMB17dJLQ/++gJyU67JzHFEQH9atA5qaXNdyc2WQvTcZGTJ4\nXjfAOycneF1gWWoZP774AnjlFWDDBvnz44/LkHiieMJgjojIT5FqgAIA110HPPAAcNVVcgJz4YXh\neV/AuNTSffYYtTxr1qhro0ebf/6wYcAVV6jrgwf7f0zu2NEyfnzxhevtwkL+W1P8YTBHROQHq1Uf\nvBg1Jwk2i0WakVx7LXDqqeF5T7uePWVvkjObDVi1KrzHQeHV2AisX6+ujx3r2+tcc41rANiqlT7A\n8xc7WsaH5mYZPu9OV/5O1JIlRfoAiIhi0ZEjajlPu3bmWrDHOnup5QcfuK6vWAGcf35kjolCb/Nm\noLbWdS0tDRgyxLfXSUoCHn1UuqBWVMhnKdD5cs5YZhkfysuB+np1vbIy/MdCFEnMzBER+SFSzU+i\nxemnq2tbtvBEqiVbvVpdGzVKgjNfJSTIZ+iii4IbyAH6YK6sDGhoCO77UGQVF+vX+TOI4g2DOSIi\nP0Ryv1w06NUL6NTJda25mTPnWiqbTR/MjRkT/mPxpnVr9cKKzWZ88k+xyWhvHDtaUrxhMEdE5IdI\ndbKMFhaLPjv37bfhPxYKvV271FmCSUnh369pFvfNtXxGwRwzcxRvGMwREfkhUgPDo8nEierali2y\nn9CuuRnYtElmQZWWhu/YyGH/fmDpUqCoyP/X0GXlhg41N5IgEhjMtXwM5ogEG6AQEfkh3jNzgJRa\ndumilq+tWAHMmCF//stfgM8/lz+npspw36FDw3uc8ey774A//MExG27cOGD2bJkN5wtdMOdrF8tw\n0u2b03U+pNjFYI5IMDNHROSHeG+AAkip5RlnqOv2UsvNmx2BHACcOAE8/zxQUxOe4yPgnXdch3yv\nWgX8+tfA++/LqAEzysqA3bvV9WgO5nSZuTVrGNC1FHV1atmvHYM5ijchDeZ69uyJYcOGYeTIkRgT\njbukiYj8YLOxAYqdLpjbuVNKKt9+W72vvByYPz/0x0USNOuCl/p64K23gDvuALZv1z/XZgOOHZMT\n4+XL1fv79AnfTEV/9OkjmWBnVivwyitS+kuxzVMzm6oq/htTfAlpmaXFYsF///tfZAe77zARUQRV\nValZjdato3f/UCh17Qr07q3ux5o3D9i6Vf+cL76Q/XYjRoT++OKZURmaXUkJ8PDDwJ13AmefLWsN\nDcCHH8q/kVHmA5ByzWiWmiqlvosWua5v3Sr7B6dOjcxxUXB4Cuaam+VCRFZW+I6HKJJCXmZpc5+q\nS0QU44yan1gs4T+WaKDLzm3e7Pk58+ZJqRSFjpmSwsZG4P/+T7KoW7YAd98NLFzoOZADonMkgbsr\nrgA6d1bX33yTpXixztuFCv77UjwJaTBnsVhwzjnnYNSoUXj99ddD+VZERGHD5ieudF0tvTl0CFiw\nIPjHQg6+7A977z3gwQe9nyQDcuGiVy//jytcUlKA229X148fZ6lvrPM2M5DBHMWTkAZzK1euxIYN\nG7B48WK88sorWK4rvCci8oHVKuVhzk0dwo3NT1x17AgMHOj78z7/HPjpp+AfDwldMHfVVUC/foG9\n7rnnxk4WevhwYNIkdf3rr4HFi7m3KlZ5u+jAweEUT0K6Zy4vLw8AkJOTg0suuQRr1qzBRKdLuA89\n9NDJP0+cONHlPiLyrrq6OtKHEFYFBcCzz8ov6sxM4JprZK9PuE8s9++XoNJZRgYQZ/8cLkaN8lxa\nOXs28Pe/y54sZ6+/DjzxRGiPzZOW/D1UVKR+TocNA6ZNA159VcYWeJKQAKSny38tFtkXOnYsMGVK\nbH3Wr7hC/q7Hj7uuv/QS8NFHwJVXyt8rVgLUaBPu76HmZmDPHvWz7ay0NLY+oxRfli9fHtQEl8UW\nok1ttbW1aGpqQkZGBmpqajB16lT89re/xdSfdx1bLBbupyMKUHV1NTIyMiJ9GGEzZw6wa5fr2vDh\n0mr952tHYfH730uLd2f336/fOxYvKiqAG2/UZzqGDAGefBL49FMJ3twtWhS55jEt9XuotlaycM4S\nEoAPPpDyw+Zm+f++cKH++fn5wF13AT16hP5Yw+HLLyV4M9Kvn/x86d49fMfUUoT7e6isTC4OeXL5\n5cANN4TneIgCFWhMFLIyy7KyMkycOBEjRozA2LFjceGFF54M5IiIfFVTowZyALBpk3Tj+/jj8JVM\nscxS1a6d8TDwa6+VrMeFFwKdOqn36/5dKTD796trnTpJIAdIYDdzJnDvvUBysuMxrVrJifKzz7ac\nQA4AJk+WrKSRnTuB3/1OzRxT9DGzr5N75iiehKzMslevXti4cWOoXp6I4kxZmfF99fXS0KC4WGZn\nhRoboOideaYE185OOQUYPFj+nJAA9O8PHDzo+pjCQs8n2uQ73X45XdbprLMkK/XllxLonXNOy5yX\nmJAAPPqodO50z6rbHTokM/UmTw7vsZFvvDU/ARjMUXwJ+WgCIqJgcA8AdL74AjhyJLTHUVen7sVI\nTAQ4TlP2L/bt67jdti1wyy2uj+nTR31eYWFojyse6TJz3brpH9uli5TIzpzZMgM5u9atgUceAZ55\nxnGBwd2//iUD0yl6mcnMVVSE/jiIokVIG6AQEQWLp8ycnc0mQ4FDuXdNl5Xr0EGu/Me7pCRpZvLN\nN5ItHTdO3cvoHOzZscwy+HTBHPeDiUGDgKeeAlaulMDOWVGR/AwxCvb27QPefVcabJxxBnDppWyc\nEm7MzBG5YjBHRDFBl5lLTpahx84KCsIfzLXkbIav0tKA8883vr93b3WtpET2REaqCUpLtHevusZg\nzsFiAU4/HfjkE2D7dtf7Pv1UH8zV1Unzo5ISuV1UJJ/Z884L/fGSg5nMXFWVXNxjoE3xgNeSiSgm\n6DJzo0erazt2hPY42PwkMGlpQOfO6npRUfiPpaWqq1MvOlgsQNeukTmeaHbRRera99/rL9qsWOEI\n5Ow+/phlmeFUWwscPeq6lpDgaOxjZ7XKBSKieMBgjohigi4zpxtNuWuX5/lDgdIFlQzmfKMrteS+\nueDx1smSHE47DWjf3nWtuVkG2rtbulRdKynRZ0ED1dzMfV86uhLLTp30e5ZZaknxgsEcEUW95mZ9\nRmz4cGmy4ayxEdi9O3THojtRDueMu5aA++ZCi/vlzEtK0pcF/+c/su/TrqRE9tLprFwZ3GPasEHG\neVx/vcy+02UJ45WuxLJrVyArS11nMEfxgsEcEUW9o0fVvXFpaUBGhrS6d1dQELpjMdvynYyxo2Vo\n6T6jRp0sCTj3XNdZewBw/Djw9deO2199Zfz8YAZzxcWyL8/eMXfXLrkdjGqD0lJg40b1Z2ks0WXm\nunRhMEfxjcEcEUU9XWmjffh0KIK50lJgyRJg2zbX9RMn9OWePFH2jS6YKy6W/TAUOF5w8E1mpsxI\ndPfZZ7IfrrnZczC3f7/+/7mvrFaZg+ecEQQkoFu0KLDX/ugjGRPy2GPAzTfrKx1iATNzRCoGc0QU\n9XQBVG6u/FcXzAXSBGX9euDWW4FXXgEeeAD44APHfUZ7kVJT/X+/eMQmKKHFYM53ukYoe/dKZ8uN\nG4Hycs/P/+47c+9js8nn/JNP5LWdm3ksWmR8IeqDD9SLS2Zt3gy8+abjdkUF8Ne/+vdakaYL5piZ\no3jH0QREFPU8Zeb69VPvKy6WMqn0dN/ep7kZePVV1+50770HXHihDBxm+Vrw9OmjdgYsLASGDInM\n8bQUdXVq1oWdLL3r3VvGEWzZ4ro+fz7Qs6f353/3HXD11fr7mpokoFq9Wr6c98AtWADMmAEMHOh6\n4chdc7Nk7V56SX4WmdXYKBem3K1bJ5nwNm3Mv1akNTerPzMA+Wzv2aOus4EMxQtm5ogo6umCOXtm\nLi1Nf6LqT6nlhg3qiXB9PbBzp/yZGY/g8bWjZV2dWn5GKl3mIjcXaNUq/McSa664Ql1rajLXnGf3\nbnU/19GjwMKFUtb42GNStunezKS+Xi4YPf64BCueHDwIvPGG92Nx9uGH+n1mjY1ShRBLDh9W9/ul\np0sTLGbmKJ4xmCOiqOepzBII3r65//xHv25/LQZzweNLR8u33wZ+8Qvg8suBP/3J+0lvPONn1H+n\nnipZeG/attXv+7SXWm7dCjz9NHDTTcC773ov0TSSlqau/ec/wJo15p5fXOw52/f99/4dV6SUlqpr\nnTtL5pnBHMUzBnNEFPU8lVkCQH6+er+v++aOHjU+SbIHc2z5HjxGTVDq6lzXNm6UzIX9ivznn5s/\nmY1HDOYCc/PNUvLoydln62dcfv018OSTwNy50uGyqcn/4xg4EHjuOX1G9fXXvV/QsNmkvNJT58r1\n62Ors6WuxNK+91YXzFVVhfZ4iKIFgzkiimoNDeqVbYvFdVC3UWbOee+bN0uXGp98FRRIkOEeVFos\n3DPnr7Q0dT6fzaZm53TZ0tWrQ3dcsY4XHAKTlAQ8+CDQrp3xY845R4aNu9u/31y2KzERGDBAHYdg\n16YNcO+9Uj4+e7Z6/8GD3puhLFsm+/Q8qa0FNm3yfrzRwtdgrrLSt98BRLGKwRwRRTVdC+3sbCAl\nxXG7Rw/X2wBw7Ji+PFOnuRn44gvj+8vL9Sc93IsUGG+llnV1+iwcu17q2WzSgdEdLzj4JjtbOtkm\nJqr39ekjDVHy8qRpilmJicC4ccB990nZ8LPPAq+9ph+JcNttjjLyc88Fhg5VH7N8ufF71dRI4xYz\nYqnUUrf3zx7MtWmjBsf19TJOhqilYzBHRFHNW4klIFfTdYGB2X1zmzbp38fZ0qXqGjMegfE2PHzV\nKsnMutu7N7bKw8Khuhp44gn9xQ92svTdkCHArFnq+gUXOP48YYL318nOBq65RhqXPPKIBG/2Lru5\nuRLc/d//AdOmSbbv0UeBs85yPN9iAaZMUV93xQrjSoJvv5WLWe7OPVddW7MmdvagesrMcd8cxTMG\nc0QU1bw1P7ELZN+cUeMTZ+vWqWsM5gLjraPlt9/qn9fUFJwhzS3Ftm3A3Xfrs5h5eZyD6K+LL5bG\nO4mJ8nXeeVJiaecpmGvfHpgzR4K4mTPltpF+/YDbbwceeggYO1a9f+xYtfKgqsq4jHLVKnVt4kTZ\nD+ievaqsBLZvNz62aNHUpL/g5jyvksEcxSvOmSOiqGYmMwf439GyokJ/8uNOdxWcwVxgjJqglJdL\ntnXDBuPn7tqlf368+c9/pFzPKEszaVJ4j6clsVhkdtzll0vJnnt3yS5dgDFjXIPolBTg0kuByy4L\nXhDdpg0wapQ6mHz5cmDECNe1mhrgxx/V15gxQ+bTjRypBv3ffw8MGhScYw2VQ4fUz3hmpuu/iS6Y\n46w5igfMzBFRVAskM1dU5L0c76uv1JMEs/vgGMwFJj1d3wRl/nzv3QBb6r654mIJ0H76yftjDx2S\nIfdG/5+mTweuvDK4xxePkpL0YwIA4K67pPSyTx8Za/Daa5LNC3Y2VNc987vvAKvVdW39enWtfXtH\nFnz8ePV1Vq2K/kYhnkos7ZiZo3jFzBwRRTWzmbmcHOlA53wltrFRSi2HDNG/dkMDsHixun7xxcC/\n/y1XuY1YLNyLFAynnQb84x+ua99+C2zZ4vl5ZgY5x5offpB9b/YLEFdfLYGBkXXr9Pud0tOlxE9X\nskfBlZmDLMcHAAAgAElEQVQJ/OpXoX+f0aMlQHRu6HH8uGSvR492rOkamowbByT8fOl+zBj5s/Pn\n5uBB4I9/dGTFO3cGfv1ryTxGCwZzRMaYmSOiqGWzmc/MWSz6Usv33zd+/Q8+UBtGWCzSKKBfP8/H\n1qkTO1kGw+WXyxBmd94GLe/eHTuNG8x65x3XTPIHH3g+GdVl7/LzgRdfZCDX0rRqpf83dd5X2tAg\nmTl348Y5/ty2LTB4sPqYr7+WsvTyctmLN3euzN6MFp46Wdpx1hzFKwZzRBS1jh+XWUjOkpONZ0CN\nGaOubdggg6fdHTgAfPihuj5qlASLurJNZ2z3Hhzp6fqugd7U18u/ISBlZV9/LcOU16+P/pIxnbo6\nYOdO17WmJsnW6dhs+mBu1iygY8fgHx9Fnq7UcvVq+V4AZK9cXZ3r/enpamWCrtTSXVWVDC2Plgsm\nzMwRGWMwR0RRyygrl2Dwk+vss9U9WACwYIHrSYnNJnuN3PeWJCU5AgtvwRz3ywXPpEnAwIG+P8++\nb27BAmnv/q9/AY8/LoFdrNm5Ux+E6rqoAnJy697cITnZ++eWYtcpp6h79+rqHJ8RXYnl6NHyc82Z\nc6bOk82bgUWLfD/OUCgtVdcYzBGJqAzmdu+WDfDvv69elSei2LVvn3xff/ml5+YWdmb3y9klJQHX\nXaeuFxZKQw27Zcv0bb0vu8yRcfNWZslgLngSEmTfkVGQDuhLzHbtkpO8f/7Tdf3NN6Mno2CWUXv4\nDRv03yu6PYX5+WoLe2o5kpP1WbXly+XzrhtNoQvccnLMB3SLFskczkiyWvXzE90v3DGYo3gVdcHc\n7t3APfcAH38MvPUW8MADsfdLmYhU27ZJU4a33gJeegl48knvz9EFc7r9cs4mTNDPL3vrLTkpqK6W\ni0Xu8vJcO/9lZ8tJj5EePTwfB/mmd2/XgczO+vUDTj9dXS8q0mfhYmV2ljOjmYjHj+vv05VYGjX6\noZbjjDPUtVWr5Geae+CSkiLZPJ0775Rh5L16ybiCK64AZs+WPcPObDbg+ecjGxQdPKieB2Zny6gF\nZwzmKF5FXTfLd95xLX3au1fqwN1nqRBRbPnXv1ybO6xZA+zZA/Tsafwcf4K5hATgxhuBRx91XS8t\nlaG8ZWXAsWPq8371KzWrkZ8PHD6sfw92sgy+X/wCWLFCLR8880z9TLldu/SluEBszM6ys9k8B5/r\n1rn+XYz2yzGYa/mGDZMmJs4/w5qagE8+UR87YoTxiIS2bWWsgruaGmDhQte1igopY/7d79RgLxzM\nND8BZH9gYqJrJru2VhrDMGNNLVlUZeaOH9d3Ytq7N/zHQkTBpZsLZpSNsDPbydLd8OFytdnd9u36\nIbITJ+qvYBvtP+rUiScHoZCWBtxyi+tadrbsqevSRe0eWlOjL78CYmN2lt3Bg/oLDHbuvxcPHVIv\nMiQmAgMGBP/YKLokJgJTp5p7rJlGJ+6uvloCRncbNkQu222m+QkgF9kyM9V1Dg6nli6qgjndAEzA\n+Jc1EcWGpiZ9lm3PHs/P83XPnLMbbzT3uDZtpLxIxyiYYyfL0Dn9dGmLPmqUBNmPPw5kZMiJWq9e\n5l/n4MHYuRDo7aJGUZHrqAZdVq5v3+APqqbodM013hsGJSS4zp8zKyEBuPdefcmiUWfVUDPT/MSO\npZYUj6IqmPvmG/267oSOiGLHkSP6Jg67dxs/p7xcfyHHTGYOkD1YZ57p/XE33yzZH50+ffRNOdj8\nJLROPx347W9lz7RzAKcrtfRE190vGnkL5gDXE2ld8xOWWMaPlBQZLq/bR2o3eLA+S2VGdrYEjO50\nFxHCwWxmDtD/nRnMUUsXNcHc0aP67nIAM3NEsU53ZRWQzJx7KVxNDfD3vwO33qpm6jMy1Nbcnlx/\nvTzHXVKSDBifM8dzyVLr1vrAjcFcZPgazK1aFZrjCDYz5WvOIwq4X45SUoD77wcuv1x/f6BD44cP\nV9d27JD9Z+HmSzCnm0Gq2/dM1JJETQOU5cuN9zeUlcl9kdh4S0SBMwrmamoka2fvGrlqFTBvnvH+\noS5dfHvfjh2Bp58GPv0UOHFCsnUDBkhQYHbP29ixruWgycn6PSUUer17+/b4oiL5/WE2mxsJ9fWe\nM9R2GzfKxY2qKvX7KSHBvzl9FNsSEoAbbpDS89dec1Q/ZGdLp8pAdO4sgZHzfrPGRqCgILwXDhoa\n9MGYbp4ooP8d4a2cnyjWRU0wZ1RiCUg3ouPH9VfYiSj6GXUcBORENidHMvBPP+15/tzkyb6/d/fu\nwK9/7fvz7GbMALZulcqB5GTPZZkUWt27S1ZVt7caULv8AXKBYPr00B+bv3btUj/z7dvLxYeaGsda\nba18DnUlY716+Zaxppbl3HOl0mDJEmkSdNFFshc4EBaLBG3Ll7uu//STazDX1CSDy0N1fqbLyuXk\nGF+M03VHZjBHLV1UBHMlJcDOnZ4fU1bGYI4oVhll5gD5RTtmjLSkNwrk0tNlGPh554Xk8DxKTwd+\n/3sJNtPS5DZFRnKyBHS6zqjdu0vDlHfecV2P9mBOt1/OnmVbscJ1ff16OXF2N3Ro8I+LYkvPnjJe\nJZiMgjm7b78F/vxnucAwYQJw333B7/LrS4kloA/m9u6VOXW6/c9ELUFUfLS//db7Y7hvjih2ecrM\n2a+a6vbMJicDl14KvP46cP75ITk0UywWKdVjIBd5RvvmJk8Gxo1T17duldLEaKXbL9e/v3TzdPft\ntzKf0d3gwcE/LiJdOeX27ZIZLy0FXnhBMuHNzdJs6M03g38MvnSyBCRr556VPHGCjfSoZYt4MGez\neS6xtOM3IlFsstk8Z+Z275aM3Nat6n1PPAHMmsUgihx0++YSE4GzzgJ69FD30jQ36wMgfxQWAp99\nBmzbFpzXMxoW3r+/fu7hkSOuIwrsGMxRKHTtKqXLzurrpZLqs89kD52zJUuCf67ma2bOYmGpJcWf\niAdzRUXAgQPeH8dgjig2VVXJlVEjJSUSyNXWuq6np3MIMqkGDVLXTjlF9jFaLPrs3IcfAitXet6P\n6c2XXwK/+Y2UlT3wgJzMBqq8XDo5O0tKkuxju3YyO86bHj24BYFCIyFBf6Fg7Vpg6VJ13WoFFi0K\n7jH4GswBDOYo/kQ8mNOVWCZpdvIxmCOKTZ6ycoBkTj7/XF0fPJh7HEjVu7fsjbNr1Qq46SbH7fHj\n1eeUlEhznV/+EvjoIzWj4I3VCvztb65r77xj3IjFLF1Wrndvx74jMx0JOZKAQkn3+frnP9WLb3bL\nlgHFxcF7f91r+RPM7d0b2HFYrcCmTQwKKTpFvAHK6tXq2qRJwBdfuK4xmCOKTZ72y9nphjuzqQMZ\nue8+GQh/9Khk4pxnS/Xvr7ZUtzt8WPb1/PAD8L//a37czebNapfM48elRLhfP///HrrmJ/37O/58\n3nlyMvvvfxsHjmef7f/7E3mjC+Y8XQxpbpYLHQ88EPh719Wp38cJCTKKwRNdMGdm/IeRnTvlYpC9\nd8P06cDs2f6/HlGwRfS6d2WletXFYgEuuUR97KFDxnPoiCh6ecvMAXIC4I7BHBlJSJD5f9OmqUOC\nExKMBynbbdokX2Z9951+XbfP0xe6zJxzaXFCgmQT331X9o/OnAmMGCFlldnZwG23uQZ/RMHWs6fv\ne5aXLw8seLLTfX907Kiv3nLWo4e6VlrqudzfyOrVwEMPuTbh++QTGSlCFC0impnTfaP26CFDH1NT\nXb/x6utl701WVviOj4gCZyaYc5eRob+6SmTGRRdJkPfee8blVcuXS2DkTXOzjDfQ2bbN/7EHDQ36\nE0JdcNa6NTB8uHwRhVNCguxT9bWJ0DvvAI8+Gth76yo28vO9P69NG+k+7FzRZbMB+/cbZ9I3bpQA\ntG1b2bPatSuweLF0UtYlElauNO6sSxRuEQ3mdFc1Bw50tAF3/yVcVsZgjijWmCmzdDdkCPfLkf8s\nFtlXd/rpUiL50Ucyo83Zd99JZssbo0Hd9vtsNvPlms5+/FEtV2vXTjIPRNFkyBDPwdyIEa7z5wDJ\naC1dKttm/PlZbnQRRbcnVqdnT3V7zp49+mDuvfeAt992XUtO9lxOumYNcP315o6FKNQierqka+9s\n71SWm6vex31zRLHHn8zcsGHBPw6KPxaLfJYeekiqPZwdPw5s2OD9NYxKLAHZz+PPxQoAWLdOXRs5\n0r/AkCiUPDXZyckB7r1X/uvuxRdlkPmSJUB1tW8Ng3bsUPfLJScDp55q7vlm9801NAD/+Ie67q1J\n0t69/v1uIwqFiAZzhYXq2sCB8l/d1UkODm/ZqqokwK+ri/SRULDU1akDmxMTgV69PD+P++UomFq1\nkj127pYv9/w8+zBkT/zZN2ezSXt3d6NH+/5aRKHWu7c6iNvuggvk++vqq/X3l5YCr7wi+z0vuQS4\n9FLgmmuAhx/WnwPa6b7vRoyQkmMzzHa0PHDA/3OOYM2vJApURIM596s07ds7gjhm5uLLN98AN98s\nHbB++Utg375IHxEFg+7KZU6O5/lZbdsC3buH7pgoPjmPM7BbtUquzBspLJRB3Z74E8zt369enExM\nlMwcUbRJTHRcaHeWkgJMnSp/njQJ6NbN+2s1NkpWfPNm4Le/1QdSNps+mDNbYgkYz5pz3/9mdmSB\nroMmgzmKFlG1K2XQIEeJiS4zx2CuZaqvl03G9fVyu6oKeOYZfYdDii26ErS8PM+ZuaFDWWpGwXfK\nKUBamutaXZ2MKTDiqcTSTrddwBtdVm7QIPX4iKKFrlrizDMdA+uTkoDHHtMHfUaOHdN/L+zZo/7u\nSEgAxowx/9p5eVKW6f5+7qWbugvHiYmOP6ekyBzLhx9WH7dli5SPEkVaVAVzzj8EdFdBGMy1TIWF\nainevn3mTqQouukyc506ee5Uyf1yFArJyfor+0Y/Z2w2cz+D9u9XZ9A5Ky6WxzhfnNLtlxs1yvt7\nEUXK1KmuIwrS04GrrnJ9TF6eXIh98km5eGKGe2MiQJ+VGzwYyMw0f7yJifoKD/eh37pg7o47ZB7l\nc88Bb7wh5aE9e6pJhqYm/fEThVtUBXP25ieAPjN3+DCzNS1RQYF+/b33+O8d64wyc56COe6Xo1A5\n4wx17Ycf9KVee/aoFyMsFtkO4E6XnbNaHQ0gbr9d5sTV1UmJme7xDOYommVkyOd5xgwZ/fHMM/rt\nMBaL/Az/3e/k8ZMmSWl9mzb6iov169Xf84F0sXSmqwAxE8x17w506CBjQuwd1C0W/b5bllpSNIia\nYC411fUELz1dLTlpbFRT5OSfI0c87xUJp5079et79kh7Y4pdusxcXp6cGHTooN7Xrp3M9yEKhWHD\nZE+ms4YG/QmZUXZA16TEPTiz2YB586Q1u93atcBf/iIdNJuaXB+fm2tuvxFRJHXsKHvbb7nF3L7m\n3r2B3/wGmD9fLs5++KE0S3FWVeU6b7G0VN91ctw4349XNzzcOZg7cUJ/wdHoe1FX5rl+vW9dOolC\nIWqCuf79XeuUAXa0DIUdO4A5c4BZs6S71H//G+kjMg7mAGDRIv3ATooNRmWWgD47x/1yFEqJicCE\nCer6t9+63m5q0ne6PO001woSO/cmKAsXAsuWqY9buhR49111fdQofu6p5UtJ0VdeOJcd67Jyffvq\nRx94Y9QExW7/fvX+jh2NO2YOGaImGWpr1Rl7ROEWNcGc7hekLoXv70yfeNfQAPztb9It0n4VrL4e\nePVVKfsJNqtVhuIWFXl+XFWV53/ToiKWMcQqq1XfCdAezA0YoN43YkRoj4nIqNTy6FH5s80G/PnP\n0rLc3fjx+gYPhYWOSoelSyWYM6J7XZZYUrzQfdadg7lAu1g60wVz+/c7MmlGJZZGkpL0c+5YQUSR\nFnPBHDNzvisokGzcP/6h1qbX1UlHpmA6dgy4807gkUeAu+8G/vQn48d6mjNjx+xcbCorUz9v7do5\nhjefd55jPwIg5ZVnnx2+46P4NGiQuu/NapULXfv2AR9/DCxerD5vwAApDc7NBbKzXe9rbJSfZRs3\nAi+/7NvxtGrFpj8UP3TB0M6dcmG3vBzYvl29399gLitLfuc4s1qBkhL5sy6Y05VmOtPtm1u9muco\nFFlJkT4AQFrO9u+vrnPWXOBWrwaeekrdo+Fs5079Dyh/ffSR69Xnzz8HpkwB+vRRH2vU/MRZYaHU\npfPqdWwxan5il5kpw2T/+1+54jlpkvyXKJQSEoDTTwc++cR1vawMuO8+fTMUiwW47jrHnwcNAlas\ncH3MSy9JWbGvTZuGDZPyM6J40KmTXLhzPkew2SQ7vm2bGhR17RrYftIePdReC3v2SAbO18wcIMFo\nYqLrOdXhw7LPr3dv/4+TKBBRkZnr1Utfo8xZc4H72988B3KAueyYL3Steo3a9+qCOfe9kwDw9tve\n/x4UXTztl7Nr2xa4+GLg/PMdGTuiULvkEv1MN10gB0jDB+fsma7UsrhYH8iNH+/a0t0dL1JRvNF9\n5j/9FPjPf9R13R5XX+hKLe379P0J5tLSZO+cuw0bfD40oqCJimDOaMgkyywDc+yYfn+Gu507g1ci\nUFMD7N2rrutKJ2w2ffOTq69W13btkvInih3eMnNEkdK+PfDb36qdLXWmTwcuvNB1TbctQGfoUOD+\n+2U8gRFdd0yilsyo1NL9YkibNjIGIRC6iqC1a+XCjfv5pMViLguoO35dB06icImKYM7oF6MumDt8\nmBkas9znqQCy18O9pOfYseAFydu36wPD7dvVH9SHDqnDwpOTgcsv1/8AfvddfaBI0clMZo4oUgYO\nlKHAnj6T48YBN92krvfq5T2T3Ls38PDD8jPtjDP0GYYePfzr0kcUywYPNleJcfXVvg0K1xkxQu0U\nW1ys75qZm6uOTtDRnZ/ozreIwiUqgjmjzFzr1uqV06Ym2SRL3umuFA0bpq/rDlappW4YLgBUV8sP\nUGe6rFyfPrJv6le/kr0tzhobgRde4EyXWFBWps/GMjNH0SQvD/j97+Xk0l1+vuyhc/85BEgpuFHn\n1XbtgOuvB5591lFeabEAt92mNl6ZMSOw4yeKRcnJwPDhnh+Tl6dmxP2RlaXvyfDRR+qamdl5gH4Y\n+YEDco5CFAkRD+ZycvTDg+24b85/umCuZ0+Z2eIuWMGc+7wlZ+4n97pgrl8/+e+AAfoTncJC/Q9h\nih5Hjkgn02PH1PsYzFG0ycgA/vd/gXPPdQRugwYBjz3m+Sr9tddKGZhd587AHXcAf/0rcMUVagVE\nZqYEeBMnys+3W28FJk8O/t+HKBZ42ys6a5YEfcGgK2XWZdLMBnMZGeqFmaYm/dw6onCIaO+4Vom1\nGDYYgFGmJbE1cnMtSqDBfXPm6IK5Xr1c28HbeRrcbZbV6rk75bZt0tXS03vagzkA+MUvZMac+76/\nhQuBMWP0G5spso4elUBOd8FlwABze5SIwi05WQKxK68ETpyQDnq6jJyzHj2AN96QLnw5OXL139tz\ncnJkBAJRvNPtO7MbOlRKnINlzBjgrbe8P85sMAfIuZR7lRg7WlKkhCyYW7JkCebMmYOmpibMnj0b\nc+fOVR5zz7Q/oHNnAEbZnMQUTMjrjB1tJuNIrWNX6rZtvKLpjdWqv0rUq5c+E1pYKHvd3GvLfVFU\nJIPIjTiXYDY364O5/HzHn1NSZD7eAw+47rezWoF582S/SyDHS8FVWQk8+qhjho+zdu2Ae+4J/zER\n+UJXCeJJerp+CDkReZaTIxdE3PfBWyzA7NnB/d3eo4d8b3tLBHibMeesZ0/XYecA981R5ISkzLKp\nqQl33HEHlixZgq1bt2LhwoXYptlMddp4oKenb56mBnRrtwdTer+BPu0cve2//da4hTSJ4mK1fts+\nQLNrV3XzcU2NvvugL4z2y9kdOOAovdu/X66AO0tPV8vw+vcHLr1Ufa2CguCPVCD/2WwSXOsuIGRm\nAk88wRJLIiJy0JU/nnNO8LNbFotk5zxJSJBzI7N0++YYzFGkhCSYW7NmDfr27YuePXsiOTkZV199\nNT5xn9D6s80FZdhc4KjJKthTjspjJ1CwR/LXXboCNosVXVL/jqxUeVxdnQR0ZMyoxBKQH1q6bkyB\nllp6C+YAYMcO4/fq21dfpnTNNfp2wcEoDaXg2LRJvtylp8t+JF/KV4iIqOWbPl32n9nl5UnzoFDw\nNgKkUyd1n6snum0eu3cHb8wTkS9CEswVFxejm9PZd9euXVHs3soQwIl6Kwr3H0Xh/qM4US8b5zpm\np+GFt79Hx2yZ6NrUZMWhmiLkZGagV5bjbFE3XJIcjJqf2DnvTbMLJDiy2Tw3P7GzP0a3t865xNJZ\nSoq+lGnXLvPHR6H1/vvqWps2wP/8j/4KJhERxbesLODFF+WC7U03AU8/rd/THwxDh0qHdCO+XnDs\n0kVt0FJVJdsNiMItJHvmLCaLnb+6YT6mzZsJtE3FV3cvwoTaBqxssGLO81di5QMfnrx99RMz8fXa\nJHRKd5y979wpJ/O6DBN5zswBwe9oefAgUFHh/XH2jpbemp+40/07FxWZOzYKrW3bgM2b1fU77/T8\nb0pERPEtJweYOTP075OcDIwcCXz3nf5+X4O5xER5jvtF5d27ZTsLUThZbLbgJ4VXrVqFxx9/HEuW\nLAEAPPXUU0hISHBpgmKxWDAHQHU6sL0zcE0xcKAGuB1ASR7QXAf8q9Jx+5+jJqGhKQf/9+8ZAOzB\n4pcA3gj24UfYcAAjABwB8D2Ao36+zp8AuF/iuh+AfVNTJwAvuN1/AsCNfr7fRAC/dls7CiDbba0R\nwGwAb0JNDP8KgNFlrXYAXnNbswK4HkCz+nAKo/sBuLcmKwZwbwSOhYiISOcMyFmlzksADCI9Q7cB\nONNt7W0An/n4OkRAIOFYSII5q9WK/v3746uvvkLnzp0xZswYLFy4EAOdpoNbLBZ81j0bk+fPkszc\nDfMxYVspVnbPxoQ/XYeV975/8vbk+bNw4Fg61qwBPtr2AOqbZLhP69bAggWeU+eeNDVJl8RgzTIJ\n1JdfAi+95Lhtschg2ilTgLFjzddzV1YC113nupaUBHzwgfwXkL/3zJnS+MTZq6/q96d588orwM+x\n+0mXXgosXarOG5s4EVi+3HWtfXvgb38zfn2bTf5OVVWu6/PmxfeIgurqamQ4bzoIs927gbvuUtfv\nuQc4++zwHw+RryL9PUQU62Lle6iyUvbk6c56X3rJ9y0Bn3wicyWdnXUWcC+vY5KPLBZLQMFcSPbM\nJSUl4eWXX8a5556LQYMG4aqrrnIJ5Owmz5+FxT/ux+IVOzF53kxkTRmECX+6Di98sgETnr8SWVMG\nYfL8WfhqWwlyO1mRnAykpTgyN3V1alBgRnOzzAe64goZ/BotQ6j/8Q/X2zYbsGED8Ic/SD352rXm\nXkfXUalbN0cgB0ijkWCWWur2yw0aBGj+2bX/ZgMGeH59i0Xf4Yr75iLrww/VtdxcCdiJiIiiRVaW\ndMh2l5Age+B8pbuQzI6WFAkhCeYAYNq0adixYwcKCwvx0EMPaR+TmpOOvt2y0bdbNlJz0oHnrsCh\nxibMuXY8DjU2Ac9dgdScdEwe2xulh6vQoweQnuy6McufRihr1wL//Ke07q+tBd58E1i/3vvzQun4\ncRknYKSqSoK66mrvr+Vtv5ydLpjzpwlKdTWwb5+6PnCgPpjTueAC74/hvrnoUlICrFihrl96qeuF\nAyIiomig62qZl+dbJ0s7XTC3f786Fooo1EIWzJmS1AZDB/XC0EGOSCO/Z3tktU1Ffs/2J9dSWyUh\nv2d79O3rmpkDpCuiryf0usDtnXci21LWzN/hxAnghx+8P85bJ0u7YAVz9qYmzrp2Bdq2NRfMXXqp\ndJryRpeZYzAXOf/4h+swd0A2fp9zTmSOh4iIyJPx49WB5IMH+/damZlAtltbgKYmmalLFE6RDeYG\nPeD4yj3L68Oz2wH9eqgNMpYu9e1tdcOxd+4E1q3z7XWCyWy5oJnHmc3M6ToNFhXJDyNf6ObLDRok\n/+3b13OWZtgw83NljII594CCQq+sDFi2TF2fMcO/K5xERESh1q2bXEC269ABuOwy/18v3KWWVivQ\n0BC616fYFNlgzlmKueEiY0aqwdxPP/n2VmVl+vWFCyOXndNlmHQ/JLztabNaJc3vThfMdewo2TNn\nDQ3653uyZYu6Zg/mUlL0GUBAfojef7+0+DUjL09tdlNba/zvSaHz1lvyWXOWng5MmxaZ4yEiIjLj\nxhtlvt3vfge8/DLQubP/r6U7t9JdUA+GtWuB2bMl+Hz8cXPbbig+RE8wl2wumOvXQx1mtnevlCCa\n0dwMHDqkvy+S2TldMKc7Md61y3Mmav9+NbPWrp2UA7izWAIvtayq0pdZOpdX6pqbJCUBDz7o24DQ\nhAT9D042QQmvggLgm2/U9Ysu8r+zLBERUbj07g2ccgqQlhbY64QrM1dVBTz3HFBeLrfXr9c3IKP4\nFD3BXIq5KYttkirRsaNr+qy52XwXxqNH1YyCs0WLwp+dq6/X11iffjqQmuq65i0TZbbE0k4XzPly\nVWnNGjW4zMuTL7uzz1Zr1G+5Rd9Vyhvum4ssm006wbrLygIuuST8x0NERBQp4crMff21nP85M9vh\nnFq+6AnmkjMAi4nDabZiyIAaZbmgwNzb6PbLub9OuDtb7tmjBkT2Ekhf2/H7GswFmun6/nt1zX2D\nce/eMossNxfo1Am4807gvPPMv4czBnOhY7XKRQVPpRvff68fQzFzJrNyREQUX7p0UfsCVFbKV7DY\nbDKH2F1pqe89Dqhlip4G4pYEIDkTaFDLKN0N7FOJZd+mu6yZDebM7K9auBA49VQ1mxQquuDJHrT0\n6aOePO/aJVk7HV+DOV27f3twmeAltq6rAzZuVNfHjVPXzjknOF0OOZ4gNIqLgSeekGDOYpHGNGed\nBZx2GtCmjTzGatUPdu/eHZg6NZxHS0REFHlJSdJUxf3ca/duYOTI4LxHQYF+/JPVKtuGnCuhKD5F\nT0B2ff0AACAASURBVDAHSBMUE8Fcfs8KAF1d1nbsMPcWZoK5ggLgySeB225T286Ggi4YsQctuuDF\nKHNms5kfS2CXmysn687pe3spp7cfEOvXq/NU2rXzr3zSrO7d5Yenc6lsRYWUz4bj36qleucdR6mv\nzQZs2iRfr70GDBkiey5rauRKoLtZs8w3sSEiImpJevUKbTD3xRfG9x04wGCOoqnMEjC9b65bbqVy\n8njkiJzQe6ML5nQZuFWrJJhbsiT0re91wZm3YE63r+/oUeDYMde15GQpAzCSkKAP9sxku777Tl0b\nN857Ri8QSUlAjx7qOrNz/rPZjOcXNjTIfV9/Lfsj3Q0fLllsImphmhuB+vLAv5o5QZlaNt051OLF\nUr0UqLo6YPly4/s5046AaMzMmZBsq0TPnmoQtGOH7NcCpF5561bJ5HR1SuLp9sydfz7w+efqem0t\n8MorwMcfS6v9/v2lM2P37sELWKxW6cbpzl5m2a2btPd3nity7Bhw+LDsq3Om6yppz2R50ru3WspZ\nVARMmGD8nMZG/d5C+///UOrdW/23LyoCRo0K/Xu3RBUVknXzlcUC3Hxz+MqRiSgMju0Ayv4LnCgD\nbEG4kmmxAKm5QO5koK1muClRjHPu3m138CAwfz7w618H9torVngOCouLA3t9ahmiK5gzOZ4AjZXo\n3189oS8okGDixx9lBkdjo5R/3X67Y0+PLjN34YWSwfrnP/VvV1IiX/bh5H36APfeK4FWoA4cUEsV\nMzMdJYOJiZLCdy8j3bVLDeZ0w7t1P2Tc+dNUZNMmtbNSWhowdKj39wsUm6AEl64W34zJkz3vxySi\nGFP2X/kKJpsNqDsI7HkH6DAWyDuPV4CoRenfX8613M/BliwBxowBRo+WyqnPPpPz1IEDgYsvBjIy\nvL+2rvGJM2bmCIi6MkuTwVxDBfLz1eUdO6Szz4svOgKkpiZp2tDYKNkt+4wOZx07AjfdBMyda27u\n2a5dkrHzR1WVXEmxdyAyan7i/LvO7L65YAZz3lrr6rpYjh7tPQsYDL7sIyTvdJnhTp3UgfLOOncG\nbrghdMdERGFWdxA49A0K9pTjRL1jU3LBnnJUHjuBgj3l2tsAsLmgDJsLygyfAwAn6q0oWPdv4MDH\nQDNb8FHLYbEAc+YArVqp982bJ3vSb70V+OADuRC+aBFw332SJPBk/379eZ0zZuYIiLpgztyeOTRU\noX++ummssFCCDPeh4NXV0qHx8GH1pdq3lzJGi0U6RL76qrmui1u26F/Pk08/lWYRv/qVZPaOHvXc\n/MRONwvOPXg5cUIf0Awa5P24undXG1iUlxu31m1uBlavVtfDUWIJSH26+4Xdgwf9KxUk+YXh7rzz\ngAULZEjpo48Cd98tJZVXXQXccQfwzDO+DXwnoihX9jVgs6F7Xia+Wl10MqDrmJ2GF97+Hh2z07S3\nT9RbUbj/KAr3HzV8zol6K75aXYTueZlAxY/AvveBZg8DX4liTOfOkhRwV1EhwduJE67rJSUS0OlG\n/djZq8E8qawEjh/37Vip5YmuMsukdCAhyfsPeVsTOnesRlpaW5cT+Lo6qVHWKSxUyxIB6eboLCND\nTlzPPBN4+23PXTI3bTLfbr+0VIYtO2fknn9eP8DcPZjTZaIKC6V6xR7UFBSo80ZycoAOHbwfW3Ky\nBHRmuzFt3SoZRmcpKcApp3h/r2Bo3Vp+cLpfkdq9Wzovkm90ZZbdukmWNZSdSYkoSjTVA9WFAIDU\nVkmYPLY3vrp7ESbUNmBlgxVznr8SKx/40PD2tHkzgbapHp8zed5MpLb6+ZTj2A5gz9tAj2uARE06\ngygGTZsmF7qNGoq5q66Wi6Vz5gBnnOF6n9UKLFtm7nWKi/m7Ot5FVzBnscisuXpNLaSbBGsl8vPb\nYsMG13WjbJk9+HHnHszZjRghX9XVEih99hmwbp3rY3wJ5r75Rg22fvxR/1j3ssfu3SXgct5bV1kp\nV3zse+v8LbG007XWLSrSB3OrVqlrI0cCqanm3y9QvXurwdzatQzmfGWz6TNz3buH/1hQXw4cXgHU\nFgONQZi4mpQBtOkKdDwDaNU+8NcjaqmqdwI2xy+o1FZJmFDbgBc27cccAFl//NLj7dRnFgPPXWHq\nMScd3yP76HpdLxdxiWKcxQLcdZdUr5jNljU2As8+K9VFV1whr2GzAS+/rFZHJSUB+flqNu/AAQZz\n8S66yiyBgPfNGdm5U9/8pFMnz8/LyJDW69Onq/dt2qQPEN3ZbMC335o7zjZt1GMyasfvXFYZaDBn\ntqlIc7N+JEG4SiztdOWjS5eqzWTIs4oK9ZdOq1b6LHZIVf4E7PwTcHQDcOIQ0NQQ+Fd9OVCxCSh4\nBajysvGAKJ4dc/3+OFFvlewagJXds1H5mykeb5+YO83jc97Py0Tlb6Yo71GwZQNw0EuHB6IY0r69\njLXSSUyUWbw6b70lAZzVKnvsvvpKfcy4cfrzOjZBoSgM5szum6v06UrEvn36cjKjzJy7QYMkO+as\nokKf1XC3d6+5xwGyH0w39sCo1BKQAEs3lsDMfjk7s8HcqlVq9jMxUTo2hdMZZ6j/HseO6QNNMqb7\nnujaNbSzAhUNVUDxv1BQdDA0jRdONKBg+Z+BOs3VHKJ412yVzNzP7PvbJs+biawpgzDhT9fhhU82\nYMLzV2pvT54/C4t/3I/FK3YaPufKN27EC59sQOWxEy7v0T0vEziyGjhWEKm/PVHQnXEGcMEFrmvj\nx0tPhnnzZMSVzhdfSMnle++p9yUkAJddpp8bzCYoFH3BnA/jCXzJzDU1SSbNndlgLiVFHxxt3Oj9\nuZ4GPrrTBW1G6/bM3L59avOP1q312TwjumCuuFjdtPvxx+rjRo4012I3mNq2lYY17hYvDu9xxDpd\nMBf2Esuyr4GmhtA2XshNB0o+M5dKJ4onx3dJJvtn+0qrMHlsb6TmpAPPXYFDjU2Yc+14HGps0t5O\nzUlH327Z6Nst2/A5WV2yMOfa8Xj/zndRef18fHXDfEwe2Nmxh+7AP4HG6gj9DyAKvltvlRFZs2dL\nh/WHH5a9/pmZwO9/bzzHV9ddGpBsX9++rnOT7ZiZo+grVDddZlmJzEwpSdQNAtfRleCZDeYAYNgw\nNSDctEnmhRjxpcQS8C+Y05VY9u+vdqj0JC1N/l84l6LabNIF1H4Vads2fQZwxgzz7xNM06YBX3/t\nurZliwQoEdnzFYMivl+uqQE4JhsAQt54oWY/UPEDkH1qGP+CRFHumOsP9fye7bW3s7LSgeS2yO8v\nG7WzchyPGTo02/U5+e2AhgpktXVspM5qm4orbdDvobPWAvs+ANpqasgsCUDrTkBqHpCY4udfkii8\nLBbZonOq5tdNSgrwwAPSMfqjj7y/1lVXSYdpQB/MlZZKwsKXcz5qWaIwmDNbZlkBQDaDmg3m3CUl\nSX2zWSNGSF2zs59+8vxNVFjo2/HpMmSAlF8mJro2UTlyRDbIBrpfzvm93fcVFhU5gjndUPVevSTI\njYQBAyT76H4la8kS4JZbInNMsSbimbnqHS5ZgZA3Xji4FGg7AEhKC+NfkihK2ZqVYM5Q9iig83nm\nX/vIKqBkycmb7nvqJs+dBpeeWTX75MtIQjLQ5UKg3XDzx0AUpRISZFRVbi7w5z/LdhmdyZOBX/zC\ncTsjQyqTjh1zrFmtMpIrLy+0x0zRK/rKLM1m5hqPAbZmw1LLnBz9urOOHX3bG9S3r2SwnNXWSnMV\nI7oSy2HDZPSBu+RkaQmvk5KiP8nesUMfzPmyX87O07650lL9oPBLLlFnvoWLxSLZOXfLlqnloaSy\n2YzHEoRNhWtL12A3XrA/5iRrnZxgnjji/au+nMONqWWr2SvfE2Zk+niFsMM4oNsMwGJR9uFNnj8L\nX20rcdkj61VzI7D/Y6CUDVOo5Tj/fOCxx/TdwEeOlM6Y7udYLLUkd9EXzCW2kStw3tiagcZjhk1Q\nbr/d+0v4UmIJSOA3dKi6brRvrrkZWLFCXZ84UTJHmZmu62PHSrbQiK7U8rXX1MxfQoJ/bWp79VLX\n7OMKPvlE3W7Uvr38XSLprLOk+6Kzmhrf9inGK6NOlr5+X/jNWiP7dX4WisYL2pPGys1Awcvev3bM\nA7b8Hij8qzRpsHIqPbUgNpv5Lq9JaUAbP67ytBsB5J2r7MPbV1OPCSO6Y1+pDCw109wI+LkD5tp/\nAeVrfT8Woig1ahTwzDOuSYihQ4GHHtKfE+qaoDCYi2/RV2ZpsUh27oTBwDhnDZXo0ycL7drJiand\ngAFSp5yXJxklI/6ctA4frs5Z27QJuPpq9bE7dug7P552mqTJn3gCeOopoKQEGDwYuPFGz+89cqS0\n33dWrhnJ17OnNEDxlS5Y3LNHSjnd3xcALrrIc/AZDmlpkuX84gvX9c8/B0aPBrJMJnrjUcQ7WVZu\nkYsy9uOxn/C1SpImCnvKpYnC0RpkaW6nAujbTfbqnGy8oHnM5La9sa+0StkLZIqtGag9IF+lS4BW\nHeTLEsHNCQkpQOvOQNt8ILlt5I6DYo/NBhxdLxc0TpS6lDh71La/7F3zR/uxyB+6y6Vjpr3Z0eSx\nUg5ib1w051qZcWNvbgQA/Xq0R2qrJMfFnrG9gZJ/S7O0tv38OyaiKNO7t5Rbrl0rF1VHjjT+XcyO\nluQu+oI5QPbNmQrmKpCc3hO33w788Y9S8tihg7R2tVikLNJTMOdtxpzOcE25/vbtUtbnnibXNT4Z\nOVICOUCCrj//GWhokBJLb+WKp50mAZfzfDkdf/bLAZJpy8iQQel2DQ3Ao48C9fWuj23d2rEhN9Km\nTVODuV27gOuuk+xnz57ApEnA2WdHriQ0GkW8+Umla4mlYeOFn5souN8GgKH5uR6fU7CnHN3zMk+u\nF+wpR8fsNBw6WoP8nu2V2wBOZgOcX/tEvfXngNBm7mdTyP0AHGwFdJ4m2Q8ib5qbgL0LgepC35+r\na0xilsUi5ZY7XwMapRTATLMjXXOjk82MbDZg/wdAlsH+ucRUIDVXglAzlT5EUSA5Wc7zvGGZJbmL\nvjJLwKfxBIAMUpw/X+Z3/PWvjqsW/bxctPMnM9e1q9o0xWqVLorOmpuBlSvV5+va6aekmAsykpIk\n7Z6e7vlx/uyXA+QYdPvmdK1yp05V9w9GSt++xv/WVVWSOf3jH4FPPw3vcUW7iO6Xqz8q2S4zcs8C\nBj9s7itrsMtTgzHuYHNBGRav2CkzseB9/p0/8/D8ec0TtTUoWP4GcFwzEJLI3eEVQHUhCvaUe5zn\nCPxczmi/ndgKSNfU4PsiKQ3oeonLknOzownbSl0aF03YVorUZxYrj0l9xmn2TFODlFvqvg4tB/Z9\nCBS8AhzfHdixE0UZXTDHzFx8i85gzofxBHZpaY6Oj3ahCOYsFn127kfXJAN++sm19BOQqy7jxvn+\nns5yc4F77vH8GH8zc4BxN01niYlSYhlNdI1Q3P3972rZa6w4cgRYt07+Gyx+dbJsPOYoOwzkq3y1\n+QNtN1xakpv5yjtPTj5/5pwBqLx+Plbe8nfMmT4SKx/4UHv7qxvmY9qwbph2er+Tzyl89J9ArWOu\nibeA0J95eP685smhywc+dSlXJVJYa4FDUiri7QKHy2cLADLygYQgFPFk9AFyHGkHM42LnB/zfl4m\nKn8z5eTzTV3wqD6Cgm/mAXVubZqJYlhurtpBvbJS3QNP8SNKyywdwZy9TOrkcFE4lTylVeqefVLv\n3hJ8Gc0J9rfRw/Dh0jHRmXsTlLWa/dmnnhqcbNbo0TJ35L331Ps6dDDXydPIoEH6weDOTj89jE0y\nTDr7bBlJUFBg/Jj6esncPvRQ+I4rGNatA55+Wo4/ORm4917jgaNmGXWy1AZzNpu0GS9fBTRUBfbG\nvkrrZn5cCQAkZwC5k4ASxxX8YIw7SF22DV99/qPp+Xf+zMPz9fbJkrOGCtmP1NaPrkcUHyo2Ajbp\nzGqmxPHkZwuQUR7BkjsZqD2AE0eLTjY7Sn1mMSb8Zgpe+GQD5jx/JbL++CUmz52GxT9KHfi0nx9z\npf0x145HVttUZZ+dbt/dyT12ZV8DPTUb24liUFKS9IRwL60sLvav+R3FvijNzDlO3tyvIrpcNWwo\nN47UALRpo98oar8vI8O/w9Nl5oqK5MqI3YYN6mPGj/fv/XRmztQfx+DB6povRo/2nNnLzwd+9avA\n3iMUkpKA3/8e+PWvpcNlr14S+Lj77jtg/fqwH57fbDbgjTccexYbG4FXX5X/BkJ3FS8lRROkNzfJ\nMN/S/4Q/kAOALD+GGLYfDbTpfPJmMMYd4OELPJaEebutKxnz9TV0r3nSUc0PHCLA0fTEiZkSRwCS\nkcsIYpORhESg5y+wrzrbpbvlocYmaVzU2AQ8dwVSc9LRt1s2+nbLPvmYrC5ZmHPteLx/57ums+yT\nB3aWoLR6J9DEeTXUcrCjJTmLzmDOac+ce5mUyw/oxuNAzR6PL2VUapmb638zjPbt9TXL9mzckSP6\nfWannOLf++kkJAD33+86JDIhAbjsssBeNzFRgqKHHgJmzwbuvht4+GHgySelWcvzz3vfsxcpqanS\nlOXee4GXXpIB7+00SZ2//EUauwRDQwPw/vuSOfviC+PBn/46dEj9AX3sWOABqalOljYbUPI5ULXV\n6z6bYOwTA9z26lgSgEw/rk5YEoAuFwEJSUEZd2Bf+7q+0XRA6M88PH9e86TqgpPNJYhc1OyVmYlO\nTM9mbNtfypeDKbEV8ifdg9TBtwF55wIdxiF/1AXI6n0W8kddIPPpOozD0BGnKA2Ostqm4kobfL/g\nYWsCTrDUkloONkEhZ9EZzCWmAkmO3voeN0EfXefxpTwFc4EYNUpds48s0GXlevcOfpv8zExp7HHN\nNcCFF8qfdbPifGXvqDR9OnDOOZJRHDoU6NzZ+3OjSVoacNNN6npJiXEp6datwIsvAn/6E7B6tdrF\n0509aFy5UhrwfPJJ4Mftfjw633wT2OuaKrE8sgo4+oPcF4RGIj7tAwOAjL5AUhv//oKt84Bul2Nf\nWY3HDICZjAB+7ozZd+40UwGhP/Pw/HlNl/l5tmagcpN//6+oZav4weWmtwscJz9bDU1SshwqbboA\nOeOBzufpv3pdB6S67hnwJ8t+EvfN+abZClT+JEPaD30rjZY8VEJReHE8ATmz2GyR+e60WCzw+NZ7\n3weq5Ez2RL0VX90wHxO2lWJl92xMnj9LTrQAmfc08B7plqWxbRvwwAPq+vTpknny19atwNy5rmvJ\nycA778hJvfvQ6ssu8z5HjoLPZgMeeQTYvNl1PSVFyhWdg/pt2yQLaXWaL22f9zJ+vAxIdy7d3LlT\nbUaTliafAffNyf569VVg8WJ1PSVFgsimpmpk+FEvrHvd664Drrzy5xvHCoA977rcf6Le6rLPZsLz\nV2Ll/35meHuyZp+Ymeec/N7ufjmQNcTnv5uLxmPA4e9lppbpzJUNsFafnMHlvm/X23gDM+MOfH0N\n3Ws6xiX83F63VXsg/w7O3/BRdbV/30MxwVoLbP8/OTH/mbfPMwCcaGjGvqbhyB8bYKlHoBoqgcLX\nAWuNIwgd2BmpzyxGpX0P3fSRyPrjl8rtE3On4attJY7ZldmnAl2jrHNXtKrZC+xdBFjrXNfTegDd\nL1PmW7bo76EopTu37dZNfrdT7PEaE3l7ftQGc1Xbgb2LlB/gyg9oAMibAuToO0LU18sJqnv52623\nSjbLX83NwPXXS+t7Z3PnyjeT86w2QEoXh/mx/YcCt28fcNddQFOT6/q4cRLoARL03XuvBGhGuv9/\n9t48vq3qzP9/a7El7/IaO44dx0mUPSQhkBCH1SQQdmiTslNKy0zboQ3tTNN2vr8pzEwXChSmdKOd\nplNKKQRaSIEaSEOgxIQt+0aczbFjO3Fix7slWcvvj2MtV7qSrmzJ63m/Xn7Z5/rq6sq+0j3PeZ7n\n8ymFRx7xl5k+8USoEA7Aj388OEXRQL76VfUsGgg/xQsvHNhNdN06ZdbPoOvjP/+thvlT66F9X9jA\np+3u9X7hkBWzaWvujDjmsdUDegyGZJj1b8PrEeVoE+bK53aDPY4yoolk6hcgbSjNAkc/Y3oievYD\naHxD+/7JFpExy6tQ9J0OKz0NcPwP1BxtiGlRBYIWPFInwbRBrOCOF3oa4Nj/UXPslLr4XJsZa+W3\nFQqnvvdQX4d4vL1FLCrpTaBPFl+GoJ+N6QM3opfQ2Sm0EwIxGOBPfxI+wJLRxWCDuZGpZgmQaYWk\nDOpqa/2B22OrMQOVmeXKFenW7ZC3THVF2mQSk/DaWuX2wZZZ6vWwZEmoWfXzz4cGciZT/Cb3g6bj\nsCjHsp0Gd1DjmDFDGK1mzYL08jHzQVtaCjfcEFpa+cEHsGOH6GX84IPIgRyIoOrZZ4UAzLlz6qbw\nIPrZ4vH/7uwMH8gBvPMOXHhh7Md1OpXHnZTxKUsnvcIUgw0ixCzBJU4VD66g+psbwo4r162CATzG\nDJA1b/jNfpMtUHAx5C+HvnawNYe+Z4YCdx80/FVbiVPrDhnMjTccbdBTH9IXB4iFCC0Y02DmN4RA\nyUgjtRim/xNW04vQ0+jb7L3/W/rLoIPHIFo0fPMEe7N4D8nMdWTObAV3n6+03jv/UqiDntkq/D+9\neNzQvBWa31FkgSNiSIbUUiisFGXxkpjIyBDK5YF2Sy4XHDoECxYM33lJhoeRG8zp9JCzCGtZZ8iv\nFB/QIAyIu2vDGpsuW6YM5lJSBm6sHcjSpaHBnJrwyfz56sqKQ4rHAydfiXxzd7QLD7DW7eLmnj4F\nzAViJW0kk5QJKRMj+hPedpsIvlqC5ju/+Y3okfvjH7U9VVWV8LR7/31lOWYg27fDnXdqPPcIHDwY\n+fd79kBra+yqrG+84VeyLM44xMWTn+d0WwtGYxbej4TgVW6b3UnV1sNM+9bVWJ77MERKXIu0uJbH\nbD7YSGXObMyFCezViRWdTlxbWv0vE0H7fug8En2/tr3azdgjoTdAUjZY5onFnTGysDOmcDuh6Q1o\nidw3romchSMzkPOSnA1TvyRsOHobgsr/POLvEG2xw+WAvrbYrE7GGy4bdBwC1C0sfJYVZ7dB7hKh\nbeB2Qv3L1BzdHt5GKnC+5nsuh/hM6zoOk26EbFm6FCtz58KWLcpt+/bJYG7I8HjAdkpU7rgHKTE+\nSEZuMAeQvVA03mpakd4eNpi78UZhHfDBB6JE7qtfjY/f23nnCQVFWxTF43iqWA6Ys+/Dud3a+iXs\nTupq67CWdQ/nGcdO9gLROG8wh/wqJUWIoTz6qHL7yZPw0EPqQXh6eqh8v9st1DDr68OfxpEjQvp/\nsII34cRPAs9l2zaYPFn7MXt7RfYYQK9zsnji3wCYNzOLtz/yr8IGezYdPiGi4OlzJgrhkNoWIRzS\n2o1FZWwGppXkAPjFRzQ8pjJ3PnWeC7GG6YEdt+Qs0hbMeVzxKwntPQ0dn4pV84lXi34ZycjA44ET\nf4LOo/E5XvZIuElFQacDU474CqblI/XMZDC9p2UwFwnbaZFl6yfYo9PrwYnLLnxH85fDiReg45Bq\nJu+ZV3exZqW/71l1vmGzU/f+77Gu/F5IL54kMuGCOckQ0H1ClLD3Ng33mQAjPZhLtkD6NOERE432\ng+DsVhVCSU0VvVG9vaLkUR+nRebkZGEEXl0deb+FC+PzfAOmr0uYpkLIB25Eo9XRxrldotyo/PPC\nPDqIiy+G118PDZKCxVFA+PV9//si8PEGP1727Il+Kjt3CiPzwRAtmAPYuhVujcEL95VX/H2epVkH\nSE0Sg/MXGElJDW8kXNdvfO1dBLCW5YIpD0uhSYxnC2ktS6H/ueYtUMptBe+jGCdlQWox5uyFWAeq\nYDmWyZghlD2dPUCoiAUkUGSldh/W3ibx2Zq9QPyvQAiupExUKA9Lhoiuo9B5VNPiXPB1AUEZk/Ry\n9QBpNGGeoC2Ys52GrDiaoI81bGeUw6AyeV8ZPMDpd8ViT79KqFomb83ja6jeVadtvtH8DygehJDB\nOETNV7imRlgmJY/wgqpRi9sp5tNn3x9R6q4jO5gDoUAVEMypTWLEjakFa+GusEIokJim0IsuihzM\nFRSMAEn/s9t8dexqH7iBk/YNnTbW/Oz2mJrMEzGJjPWY4J141mDl9/0BndIQT6cTwjdr10Z/D951\nl2gmXr1a9KadOhXbn3zHjsEFcw5H9B4+gKNH4fhx6O4WpcRpaVBRof5B3tam7BucliPKs8rKvH58\nylXYQM8mxaosQMZUKLtDlt8NFXoDWM4T72VCF2W8VhAA0yfnqk6cYh2HLOw4u+FM0IedTg8TLhef\nu/JaGDrOCh8cLYtzwddFyP815/xheQlxxTzBp34dEek1F5mArH6ghYX5kSp/GXxmgPhckN1DcCbP\n8sQmKr9/c9j5hqJ0s22v8B0c7l7pUcTEieLefe6cf1tfnwjo5g5SCFqiQu9pOPkX33UfD6Vr78La\nYBn5d99+IRQvwX5XCm+q1h1DHikvXhxZhn7RomHut3b2QOvHik3Bvn2Bk/Ybjp2h+rt/SaifWMI9\nyuxn4ehvVBUZy8uFsXgkFi3yr3glJ8O992r8WwewY8fgDMRrakJ78nJzxfkH87WvCZP3p5+Gn/xE\n/NynUr69YYPITgNkmZrJT61Dr/errGo2EjblQelqOXkfanL8Kf7ARZm2u9ez+Z71rJpfwqrl033b\nqu9/hrU3LqT6Wy8NaLz5nvVCRdgUYc3P44ZTm6Hxb0PwB5AAYmGuW9SFB18Hav/D4OtC8X81pkHm\nGMhUmTUqmslgLjJ2f2aurqld4dFpzk+nckm5b+JZU9vi97nsp63DxoYum+KeEWm+ofANdtm1BeQS\nHzqdetAmSy0TQMsncOTXigWMWP13o3rrDoKRn5nT6f29c0RpyrW3iAbpISwZSUsTk2E1o3AYASWW\nZz/w+WV5iapK+INbIq6kBY9XqfiJRXtMIo5ZGVAGiKMdDj4m5LXTpkBamcgm6fTceafwAQzu0JvR\ncQAAIABJREFUh/MSLF7iNU1XK8cEEWA1NCgNxjs6RNYsnGl9NNRKLGfPFsc7dizyY2tqYNMmuOYa\n/7ZTp5S+ct6s3PTpkJ4WugobUZyk7HbVvkRJgjEXCHn1foGTcP0skbKrsY7r/uMVSp+8NXqP7fY3\nsWYvEOcnSSw9JxXN9mrZkGjXhS/Lnr1gZAufaCVFYzDnaBX3Q4OsQVMlIDOnJloSKD4XmBUGEcg9\n+ew21j51u+KeUWEqjTjfUJRuntsJ2ecl9jWOMebODfU1lsFcnGndDg2vhWyOVukW87x1EIyOpfUc\nZXoreKXHt7ID8VFyi5GlS9W3GwxCJGXYcNmg5UPFpsBJu2XFbCp+dRdPbtxJxeNrsKyYTeX6e6k+\n2sz5XfawK2lqK2vRVt9iHQ/kmIrrwEtPoygNq/0jHPopdB4lMxPuuEP9T7Z0aWgAptMJg/lwGdab\nbhLBXjDbt2v4H4VBTcly9mzR96cl0/vqq8rM4LPP+jN9Rr2DKdm7SUqCOf2qrsGrsM19LiFO0ufy\nr8pevJA6Y+Xo768ZzQRk54IXZWzrVkXNrsY6Lvh/10VceVSsLJ55f4j/GOOULuVqjpaMutq1gt4I\nuRcMxyuIP0kW4V0WDY9HkX2SBOByiEVQjSiywvf/gQ33rBeG7cUW3z2jYkEpG97aH3G+sflgoz/D\n11WrrfdR4kOtb+7TT8OrbUtipK8Lmt4E1LPRABPOdQ9qrhsPRkcwl2yB9Km+oeqNyUtvw5Cf3pIl\n6tut1vioZg6Ysx+K0oUAtEzaKxaU8tceu+YJXyImkbEec0NRFm0PrlC8VpvdSU1twI3B0QYnnofu\nOlatClWB1OnCWwqUl8OKFaHbs7NFgHW+StvJjh1h/zMRcbvDZ+by8rSZz5886X/+w4fh3Xf9v5uc\ntY8kvZ2ZM4UaK4hV2MDVIWtZLpZMs1iFzZgGk67HPPcBrPMuGtiLksQHy3lgygtZlKlcfy9Ve+qp\n2no47MQp1rF3YadiQWnEMj5fyV5njVhAkiSW7uO+H7UszgVfF74JdFbF8NptxBOdTmSutSBLLdWJ\nooIbaSL7i30NrDl2BssTmxS/a27t5u7rz4u8SBhQugmI7JxEMyUlkBkkAmq3C1VtSRw4856vuk2t\nzatq62HqYVBz3XhgeOihhx6Ky5Fi5OGHHyamp3Z2Q9dR/83r7mWkN7VT+uhqNh9spLQwC6OxPzYd\n4obu1FQxcQ72MLvqqmFsQnXZof6lEAPPXEuq/+/UPzabjORahIKgze7k3e213HzvctKb2in4/s08\nuXEna752JZbmzpBx6aOrqdpTz5G6VlZqfEwijjn1h5/hyY07WTCjCLPJyN6a03y0r4HFcyb6Xq/N\n7uRYfQu5xkb0uecze66R99/3l0d+4Qvhs6wAM2bA5s3Kcsq77hIG4enp8FpQFr61Fa67TiioxkJt\nLfz1r8ptqan+7GBZmZAjdrnA7Xag15swGkN79NrbhQjLj34EZwPu0xcWv0p2RicVFWCItpwz5zsi\nM54yUazkS4YXnR5SCjm2/z0WzijAnGmGlXMwpiXjdLrJyUqhuDQHVs6hrrWbyiXlNHfbyV2zOOax\nMS2Z0sIsGs90MuutAzy5u541Z7vE+6+t1zdOb2qHlXNE/5wpd9QZADscDkyxvkmHC5cdGqsA0Rt+\n7OQ5Fs4s8l0Hav/D4OvCmJFG6YLPUNdTRG5e3vC+nnjS2yi+opFsgYwB1r+PZbqOCXXKMKSlJIss\nfP9cyzuR7dh+ghvPdvFJaQ6lj67GmOYvYc0tuxBjeqFQwHXbyc00KuYbAEajXjHGcQ7ylkpzd43o\ndCITdzKoKK24OD5+yuMaRzvUv4z389Zo1FNamMXmrz9PwYZP2PTiJzB7Iqvuv3RAc9/A+OX7v3kv\ntpgoCJ3HMzzamjqdjpieursOjq6PoGbZL7OsM4gJ6BBPPN94A37+c//YYBDj4uLwj0koZ6qhaVP0\n/UD0leVVQNcRanb/g9KClFGpZtnWYWPDA8+xxgNbbH1w10WsWjk7RMHNbDIK9b2iFXR3iw/C4mIo\nDJDVD8eJE/Db38KZM3DZZbBmjf+ec//90BRkObJuHSxfru3f4OX11+FXv1JuW7QIHn7YP25tFX2a\nbncnCxdmcPw4/Od/hh5r9Wp48UX/OCelkaum/prFi8EabT6Tcz5Muj62k5cMDY5zYlLfXRvSExtv\nbHYnm+9ZT8XBJtHz8qu7qP7mBt+4cv29YuUdhNdn+T0JPZ9409nZSUZGqJXJiKSjBmqfi76fTgcF\nlwRtM4Cpv+8ySOl3TNDyMTS8Hn2/9DKhdixRcmozNL8XcReb3enrD/LdY5eW0/f910j69+tEX/WS\ncszmJJh0k7L/7eyH/QsRGiis1J5pjYQxA8z5Y14hc+NG+N//VW5bvBi+973hOZ8xw8m/CmHFINru\nXs+Tu+u5Dph7xUzMT3wOGJya5YwbfxZbTBTE6FlqTykCnT5qUy4el3BkH+JG/JUrhTDFm2+K0rX7\n7hvGQM7t8vWvRA1+AYpvFA3kljlYJ14rJoi9p8DZibV/4dbSr6IYPAaYF7S4G+0xcTlmrgfO7cSS\n6RfisGSaWePB3+T/9kE2v75HvdH07DbIPo+0tALVEslwTJ6sHjSBCLheD5pLbN8eezAXrsQykJwc\nqKyEzk7IyBDj4mIhxBJIYCAHMDV7OxYLTJum4URyF8d03pIhJDkbym4X2TBHm8Lod1B4XKLZu20X\nuBzahXG8cuXdtdDXIc1/E0VXFPUjLynFwjJiPBGLoqXHIzM/wdii9xIG9rFfB8x9+yDm6+fT9/2b\nMaeZqMwsp+5UB9ZL/hmygm5alvlwalNItZAqpzYP7DWoYUgWi9X5y8eG2I8KahVgBw6Iap2eHrHw\nm5Ul+usiqa+Pd7q7RVVURwdceUkLU527QvYJbv+Z+91rfb+zluVC9gIsZeKzxdovL2ApQ3UMYAas\nRQA/G9S5j55gTp8kPqy1uK33NAx5MKfXw1e+InzM9Pphvk/01ImyVNT9qBQeQ5kzlUpgeqPokcrQ\nMtsfZrJmiVXqfmW3EIPT715LxTc3qPukedxCTn3KPXH7Z51/fmgwt2NHbPMGjwf27w/dHq1cQq+H\nG26AX/4y/D5GvZ0yy16y8ltwOKIE+KnFo65cblyi08dfkKb4GphwGZzeQt2ON/3Z7MdW01zbInpe\nWruxPLYaM4gJnPfa8XigbR/kL4vvOUkEWoO59CmJPY+RiNZMjrMXnJ1ywSGYKD1zEHkiC2DOyMU6\n+0uQNjn0wcYUMd9oG2KpRZdDmDw7WkW2cAwG8VOmiFaMnh7/tp4eWL9eKFt7ty9fDv/2b2K+IFHi\ndsP/+3Y3vS0nyTC1kFH7Fr3zRADsvWQiei/O/eqwzplG179Ua4A2DIqWXgyGEfBZ0VPv+1HNj0rh\nHRVcijOaSJ8CZbeB3hhWEGKLvS98o2lXLbTH78Yybx4kBVVztLaGll5Gork5tPfSYBBiOtG4/HLR\nuxeO4owaJpc4OH9eBK9GLzkyKzeuMaZC8bVYr/5vzFOuFz0sBAnj9KOojABo2zPUZzs+6OsCW7O2\nfdNVDCnHOgazdkGXXimCosDtEsFOBNTusT4lSmMKFK0A67+oB3JechYphsGiKjW1LbR12HzCZcFj\nEC0Y3jYMrY+x2Z3U7HwbOg5F/1uMQvR69QXfjRuVAd7WrfDOO0N2WqMHt4vj77/JBemPcsnkP7Gw\n8C0A9uyF97ZCX/8lGtZ70XzdsC9+j7JgTmPd4jAoWo4oHG2KYVgrh4xpol9uNJNeDlPuou5sn+JN\nRn/55bR1q9QlkL00vRmi+DlQzGb1oOvwYe3HUMvKTZumTUQlJUWI7oSjMKOORQs1BPgGM1iGS7lH\nMqJIyoS8JTDxaihaqe0xvae0Bx0S7QSoWEZEb4TUksSey0hFmocPDEdr1FJt1YnsspnU9c2A6V8W\nfejRetPSpigC7lhNl212J0fqWzlS3xrTY3yLla2D8Asa4WgV2/vTn6RtgQKPB+peoK9xm+qvT56E\nt94SLS3Bqt8A5okXYZ0XQTlviBg9ZZYAKRozc/ZWcPaI1eXxSFAwF1J+6DXptGjQuB8NpE3GuuJ7\ncG6XkEfvqqWuqZ1Vy6eLN96iUupqW6hYUKooJbTZndTVnsCatUVMVuOA1RoakNXUwKWXanu8mtln\nLIqo110Hr7wilC6DuXTpKbw6D+EMpwHRtD7GG8YlA8AyV/S8aGnSbtsDhVcm/pzGE10ag7nU0vGr\nPGueoC37IoM5JRq893zZ9/xlYgE0vQxz+jSsxhQ6Ozu1PY9OB9kLRdkjAzNdXvXU7ZBpjukxvn75\nnhMiaNWNrjyGFrTOE06dEsHJNdck9nxGDV1HoaOG/UdbcDizSDaKz86m1hYyU9Po6OkGcnnzLaio\ncNJpC2hH0RtHTHXb6LqiTbkia6CFnnGcnXOc8/0YsTRiLJk/G1PFTab88zDve1gXXalYQSktyqJ6\nV52vlFCxWtfyUdwyCcGG4zD4zJyaKWg48vKgoiJ0uyXLzZJ5p3zjiF6NWTIrJ1EhKRPSyrTt27ZX\nW9An0Y7mfrlxWGLpRWbmBoaGfjkALPNEhn7S9eJnY0rsz5W9QNGLElw5pMVkeSCPAUT/3BitGpg6\nVbsN0gsvgCOxIsijh36xwPTkLPbXHsPRn7bMTE2j6uNtZKaKDG9Xj5P/+3NQO0ruhZA0MpSQR1cw\np9PFUGo5fH1zw4rHDX1+A86wNb5N7ZA0Rgxjg9HpYOI1kOx/00UsLfS4ofGNuEw+1cosjx7VVtbQ\n2gqNQTZJOl3sXjGf+QwYgxbm77urlWSjXygmbICv00GKBo8GyfgkKJuvZiRsszupqTkmhJgk8cFx\nLqTiIizjUfzES0AwF/barG0RwYsWVcXxggYlS0DI/A+W5CwhhOJ96qCFRS0mywN5jI8ATYGxhNEI\nF1wQul3Ncqm1NVSsbVzickD3CQAcdiNzyspx/Pl5Fv9hPabnn+H6eQvxbHyJxX9Yj/7Z9UxJmUhy\nkrcdxSQUUkcIoyuYAyG5rIXxmpnr61TUvqvW+JqMWMsngDFtqM9u6NAnQZFS8CRs7yBENUzVSkEB\nZAaJpDkcUKdhXqtWYlleDmkx/pvKy+Eb3xBWBfn58PnPw2VL/CosEQN8U54ssZSEJ2uWooQvuOdF\nkfE+J4VQ4kZ/Vi5igAKicmU8q9CacnzXZ8Rr0+MWvnQSgdbMnClOJvNFV4EhOWRhseJXd/Hkxp1U\nPL5GdewVNqvaejimxyj65cdoMAdw990wqb8byWSCW28Vfsdq1TovvaQURxmXdB0DjwuPR9gSJBuN\nXOZw8FxDPTecauLKdzcpxhe9UUWrt/At76IR1co1+oI5rYqWvQ3js8ynT+PqbZJlBMhuJpjMGZDh\nr3uMWFoIQgyl3+ZgoOh0Ay+1VCuxjKVfLpCLLxbG4+vXi0wdvf4Sy7ABflkumGVWThIBg1m8r/qJ\nmPHuOCBU8iSDw+OBdmE+GTFAAVEGOwb7gTSj0/ssCqIKPTVvAUd7hIONEzyeGIK5OGTmQIigTL6V\nurMuxcJic59LWJ/0uVTH5vx0ppXkMK0kJ6bH+BYrAbrHbjBXVARPPSXu/c8+C3fcAcnJ4nuwHUFH\nh1C7HNd0iolZd4+wJnA4nXzgEnPEN3Jy2P+5Fb5xlSWHrStWcfYsIojLu2g4zzyE0dclrbXM0tkr\nFJpMoSbjY5qAfrmIJGcn9jxGAjodTFwFh49j67WF9wfx3twdbdDwOqSpKMHpjJCUJf5uSZkRA2Gr\nVZiFB1JTE1lpEtQzc7H0y0VEiz8jjO9VfYk2suZBm3/lIayYjrNXrHxmqqxuSLTTvg86jwLqghE+\ncQcY3/1yXsyF0CPq1SMKPbkcwmt08q1jf2EzEn3t2hYxdXpIjmOffXo51hX/Ae37obcRnN1Y+6u4\nLf1r9sFjgHmLZygO49un2AmdR33iFJZMv76Cwj7FcU5UMI2QXqd4YzSKqpxASkqEddHmIC/2V14R\nomkZY/NPERmPxxfMdXWJQG5/7TEWfPZ22jdVkXLLCl7du5PFN62hfcsm3CtWsetUI4VN5cy86iZR\nZjmCGH3BnDFNTKi1BC2tO2DC5eNL2UtrX4VWP57RjikH8pZR99HLCvPjELNjL+d2ia9I6Ayi7l9n\nCNqWA5Z5TJ82E1BODqJl5trb1Usx4xLMeTxgOxV9P5D9cpLoZEwXwgfOXiCCWi5A+14ZzA2Gvi4R\ncAQQMUAZz/1yXixzxb2fKNcmCOXLjk9F+fB4RWu/XHIO6A3R94sFYwrkxsnT1OOBgz/2fS5FpOfk\nuPuf33YbvPuusn+/pwe2bIEbbhi+8xo2bM3Q1wFAVye0dLQzp6wcndFI9c2r0ZtbWHv3Rfz19W6q\nb16NDrCWzObFD+dzxQNWRtryz+isx9CanTtTDft/AEd/N2YVjEKQwVwo+cuxTp8SvrQwVjwuYX9h\nO+P/6j0lSqFOvMDstD9h0ClXOuvqwB7Bzk6txHLy5ND+uwHR1yGsOrRglpk5SRT0BsgUqjwRxXRA\nTJQHWbo87vB4xGKl7QwcfyZkchq2XDwpM349TaOZtClgLoh+bXo58cL4NhHXYEsAjPxrS6fTbl81\nhvvmwjFhgnp10IEDQ38uajQ1ibLPDz8cog6pTv8Ke1c3FOXk+mwJAGZPzaW8xMyk/FwOnFlOdf1n\nefPYN2jouIHmERhOjNJgTuMbFkSjc/cJOPJrX6nKmCaWnrnxgiFZ1fA4WEygpraFtg6bT0wg1jGI\niVbD0W2smvMS4P9EcrngWARl8cFaEkREa4llctbApKYl449+U/mIYjogStk6Y/DmGM84e6D+FTjw\nI/j0f6Dm5yGLkBEDlJxF47tc0ItOB8XXqV6bpYVZHD7RotjdZndSs+m/RYl9n0a/tLGE1n65eChZ\nJhq1Fgk1xmEwB+p+tzU1Q38ewRw4AF/+Mvzv/8J//zf88pdD8KSBwVxX6K/T08FgAHvKXHafvpK6\n9rnYXULw5ODBITi/GBn1wZyautfemtPsrVGutNl6bdRs/a2YXIxlZM+cOllzIG2yYlOwmEBBThpP\nPruNgpy0AY0DxQjmlB5iXsE7iueL9KEZT/GTELSWWMqsnEQraZMhKSOymI6XNpVmUImS3iYRvJ3b\nJQyZwxA2eD7jEJ5HEkFaKdZFK0OuzemTc6k71a4uINPyMRz6Hzj70fgSTxsrmTmAVK3BXOO4tKYo\nLxcBSiBnzgirguHk978XC95e3nwTITSSKFw2RUCv5nmfni6+ZxaHtgmMxGBudDaTmQtFj5LH5ZuQ\ne/uhbHYnR+rFlTl9cq5vm3cfzu2EvCXD/AIShNvlqwGOyngqswS/GMqRp303ajUxgbWPr6H6Wy8N\neOwVI8jJgbkF79JuK6CuQ6TYvH1znZ2wdav4+ZJLxHe1rJ0UP5GMWHR6sUBy9oPo+3bWiABlhDWM\njxh6TsLxZ8ElsvylRVm+IKSmtoWCnDSaW7uxluViLcv1WRF4A2azyYh12W0jSiZ7RFB4pSjzdXb7\nNkUVkHE7RY+iswsKrximEx9CApQsg689EMGur688XkqWiSSlWHw2BdgzqeJxifui1kzeGMFkEu0b\nwfONw4dhyTBNi9vaQoMjt1ucU16i1g86j/quEQ/hM3MARdOnhfxuJAZzCcnMPfTQQ0yaNImFCxey\ncOFC3njjjfg+gd7oE2pQkx9eNb+EVcunq0sSn9sxdlfdnB3aXpshGQzjsJwupRByzldsCvaeszyx\naVBjr3ddbn9iYumkV7CYRWbs8GFoboYHH4Rf/EJ8/dM/wQsvhP7bJk6EnHgJh0nxE0kisGhMHbud\ncfFwHJN0nxB9cS4bEL1aIMSKAISQQ9bsIT/1EY8xRfiZBRH4mT/hYBP8QOmebLM7qfn4Ze2LYKMV\njwea3vL1ZEa1vRgNmTlDssI4PiLjtNRyxozQbcNZavnxx+rT1hMnEvikASWWdjv0BbV1GwyQYgZS\ni5kxJ9To98SJkefRl5BgTqfT8Y1vfIOdO3eyc+dOrr766vg/SUCppZoZdFiD6N7T2ie3ow2t4ifj\nwWMuHBOuUPSFBYsJtD24YlBjrxhBTo74Exv0fVwy+XlMhh4aG+EHP4DTARXA7e3w8suhpxm3Ektn\nj3YvJZmZk8RCSrH2DH/ze3DyVeVXw9/g7IdCTGg80nWsPyPnL/0PXpysvv8Z1t64kOpvvaTulWZM\ngYnXjt/P82hY5oXYNQR+5teXZFN1xazQAKYwSwiojSW66/rfh38VvZl7H4az23y/jujLl5wlAqXR\ngOZSy/EZzKn54A5nMPfRR+rba2sT9IQeD3Qd8Q3DZeV0OiBjOhaL8O8LxO0eGb2GgSSsZ86T6OxX\nwEqkmrpXRIPoftniMYfsl4uOMRWKrwdCxQQqfnUXT27cScXjawY0rlx/L8+8+yltHTaSjH4lyiTd\nWaam/xLwcFSjBk/cSiy1LlwYU8E4Hs1mJANGp9OenbOfhdbtyq+Wj6CxSvSKndo8dism1Oiug9rn\nVJU+o1UL+BYmAYpWQVL6EJ74KKNfDMVrTxT8mb/qd1+A1CSqHnguNIBpP6C9bWEk47JD7fNwdL14\nn7XuCGu/E3YRfDSUWHqJRQRlPH3m9KOWmTt8WAQoQ43DATt3qv8uYZk52ylh+dJPV4R+OTJE5DtL\nxcVipKiAeklYMPfUU09x3nnncd9999HWpjFjFAuppZA2WVXdq2pPPVVbD4eXJG7bOzblsqUtgTay\nZsOk66lr7lWICTT3uVh750U097kGNDbnp7Nm5Vw2vLUfm91Jbq7fiHJW0TnyU7WvBMYtMxdLv5xc\n3ZfEStY8xTBWhVgAm81OzUevQPM/huachxu3E+peoubY6RDxLpvdyd6a05qy/2RaReZJEhlTDhSJ\n6iA1AZlVy6dT0t4bGsB43NDyyTCeeBzwuMW1tqc64vsS1K8937WWMnGIT3wQaM3M9XVpV/8eQ0ya\nBClBXTbd3dDYOPTnsnt3eMumxkYR7MWd/hJL770qMDPncDppam0RJurGNN91rxbMfTrCOgcGHMyt\nWLGCefPmhXz99a9/5ctf/jLHjx9n165dFBUV8c1vfjOe5yzQ6WDy56g7lxzy4TytJIdpJTkR5LJt\nY7OHQ9oSaCfnfKwrH8Y89WbIWyrGi1ZiKavAumhl0HgFZEzHOmMGlqw0n/CAtSwXS6ZZodxnyTRz\n9/Xnsfnrz1P6+Hr0z65nQeFEko1GijMPaTq1/HwoKIjT6+zVqmQp++UkA8BcoJAsj1UhVtGXc+Y9\nbYa/o532/dDXodqjVLX1MEfqW8NWC/gWJl1JIuMkF2C0kbsYJl2PdWpRiMIlwGmdLkwVzyejW/Ww\n6zh0HtbUixl87SkWwbPiVSoyBCRlQZLGKpPu8VdqqdfDtFBNj2EpGwxXYgkiU1ifiH9PfzDnfU+c\nPSfeE96F99zMLNLTgIxpvs9XtWDu0KHhyWaGY8Bqlps2bdK03xe/+EWuv/561d995zvf8f188cUX\nc/HFF8d8HkVLv07fub30ddeC7TTYz1JWLIKVzm5lyF+Un+7fVvc+GMpifr4RTWsT9ERwpvZiT1LX\nYh2PJFnFl1Y8bqF05rKLEo36v4AjtOdnfqeNpw418BWg483X+OC6m0kzHMbpXOrfZz7s2xf6gTBj\nhvZ/T2e0Hc8cB4eGayI7U14TkoFhKIfuk77hhXOLefVfnmNpj4MPHE7u+8EtbPrmhrDjyx5bQ5/T\nRV9nNzR8DDkLh/T0o76H4k3DJ9B/Hwr+W5U8uIKpMwvpMxnpe/gGjp1o5b5bFnGstYfpD98gHrNg\nKgd6FzPdpgObfM9qJskKRRPh7Pu+jJvN7uSdT2q57JHPYnjiLS58cCWv7jzBZYvL+oM+O9R/ADnn\nDe+5D5QI11rw+zD42vM+5kBrEdOdqRHvD0P+HoqGOw+6hUrn4ROtlBRmhqh01p/qYLrpEBinDNdZ\nDhulpaHljXv2wAUXDN05uN3w/vvgjLBWcuBAHBe2QSi+nzku1EwR1/efv/QcF3Y7+NjlZMZNa3C5\nXGBw0clE3zVvsUByslL0pKNDWEqVlQ3sVN577z3ee++9Qb4gPwmxJmhqaqKov2Pw5ZdfZt489VKQ\nH/7wh/F5wszlwHLxc8NrGksjmsBVC/rBNvXqwJQLyTnDv0qabAOdBvnv3EmQIvujBk6Aklzu1+Do\nbxXmvja7kz0uN+uAquwc3FddR4rJxMSkNpKMaXjQs3AhPPSQ+LB67DFo6a92SU6GW29FpPk1khFu\nZ5cDkrshScM1kT8VzPKakAyA5Auh+0PfMCPNxAq7kyf3NbAWsDz9LhmRxk9thsdWiwfrW2O7+ONE\n2PdQvHHZwNMIaeI9GfK3+ssO/98CWDS7CPRGSsqmQVImpJaQkbeUfIN5aM53zJEBOZ+B7gvh6G9p\nOtPF9ZfOEBP9J28lA7i+MNMvxw/g2AfpFcN/fx8Ixvbw11rw+zDo2gPIKD6f/Ek3g94Qeuwghuw9\npIUCK7iOAzB7an6IfdU/tp8QY/3ZYfm8GW7mz4fXlSKu1NUN7Z/i8GEREBkjRCFnzsT5nOwtkGrE\nG/pkpJm40u7k2SbxHmh/dzPVN6+msEBHRtF8hVjevHmwfbvycPX1YvtAuOaaa7jmmmt84x/96EcD\nO1A/CQnm1q1bx65du9DpdEyZMoWnn346EU+jTvZC7XXudX+O3/MmpYtm9KzZw/Oh73ZCn8bVsfHe\nMxdPDCaYfCvUPAUej6KH0/xIFZalq3j7YCNzyspJNkKm6Sz61AK+8Q1R7jB3Lvz85/D226Ju/eKL\nobg4TudmO63dqsKUG30/iUQNUy6kThRGvIQKUlU8uILqb24IO65ctwpfaNLbMDyvYajoqPGtCkPo\n30rxtzDlQvk9IoiTxJe0ErDMxVoWamgfYnrfewp66iBt8hCeYBwI8JCD6O9LxbUHwsbjqpvVAAAg\nAElEQVSn+Frh2zbaCBBBiegt2Hta9M6NMxEhNRGU48dFj1ryEImWfvxx9H3iLoJiVzqRd/U4eb9P\nvCeqLDm4V6xCr4O03HxFIAcwc2ZoMHfwIATEY4BQK//730Vf4ooVQxcgJ+Rd+swzz7Bnzx52797N\nK6+8woQJGn0/4kHKRNHHMdT0dUHdi9DyYfR9E/L8GuXnDWbxJYkfphxIFjf/4Ab7srnpzCkrp6VD\n/H/yUhv4138VaXsvaWlw/fUiIxe3QA6EGTGhohSAz3gYEP1yo3HVWTJyyKsAYleIDRGnsp3xea6N\nSdr3+35UE+/y/S2SMqH88zKQSyS5Mbgknx2m+/pg6Gv32V5Ee1+GvA8Llvf3ZI7CQA7AXORTMIUI\nKp0AnSNMY34IyM31e+F6cTpFQDdUfKjhLZXIYM5md/L6P45h+OzttM+YjfvOe9l1qhFjkhNDaqh6\n62wVK89g8/AzZ+BrX4Pnn4ff/Q7+9V+F/dRQMErfqRHQ6UR2LoBYFdbUlJ721pxmb83psMeA/gny\ntj+JCclQo9mWQGblEkKqiMKsZbmK2nzrdLBOM1KUk0tyMtx/VyPz5w/B+Ti7haAEGsxgpfiJZLBk\nzYaMaSGLGVoUYBXiVAA9YzQ757JDl9+bRE1Z0fe3yF6gXcRBMjBSJ/k+t72EXfja8572e+xIIWDi\nGu19qbj2Cq8UX6N5gU9vUHgRR7Sq6hh/wRwMvd+cwwFNTaIN7exZOHYsdB99UETS0hLnVn67f75e\n19TO+TPK0aWnU33zanTpYuG9x9nuW5wPZPp0YSYeyOnTSpGWDRuUfXWNjTBUhYljL5gDyJ6vWFGK\nVWFNTenpSH0rR+pbI6pBCbPRjOGR2NZsSzCOPeYSSYp6Ss1ggGUXwa2fg89+BmZPGaKJasPrwjCc\nKGawIM3CJYNHp4PJt2JdfJ1yMSNI8VVNATakrK3HL6YypuisUSgjBi/8QMDfIktlGVgSX3S6kOxc\n2IWvwiwhduV2qR1pZBKwqByyyKj2PszIw3rZ10RWbizQ7xEWMQMOYoFlNCuWDhC1UstEBXPvvw93\n3AH33w+33w5f/GLoPlOmCNuEYOKanQtY4LCW5eK0Kz9/k41GZpXngikv5KEpKeoB8LZt4rvL5f85\nkPfeg61bB3XWmkhIz9ywY0yDzBnQLnKgajXTax9fQ/W3XtI8XvXU7ZBpjngMXx12+35wXDG0gZO0\nJRheUiPXR/pWnHpPixuHPoFvvbb9wvA2gMAyk7Ugyky8ze5Rzl0i0YTeCBOvgoJLoLcxNJPReRg6\nNNhzjNW+uXaNLrOmHDAPYWvCeCZrDpx6y2ciHLG/qrsemt6E4muiHHSEYNdYIZSUCWW3galAk9DJ\nqCHDCk2b/FlJk1FkIYHKzHK/yI27T1g4ZKrM1McwVhUR70QEczYbPPWU+O7FpbImsmQJNDQIIZZA\namvj6Lsb3DPXHbpLejqqwRzAsmWh/nLbtsGaNULZMlxJ5S9/KV5DYHvNsWOwYwd89rMxnH8ExmZm\nDiB7kWIYXDNteWJTTGPzI1VRj6EwGz2jEqInEmkYPryYJ4BOw43Q4wKbRu+3gdDXBY2vh2wOW2aS\nOkw9ppKxizEFMqYKb6/Ar2yNlgM9J7UJ94wmXA6fv1FUsuaM7hK30YTeADmLFZsi9le1fAQnXhAL\nxV3HRrYvotZgrrBSVGeMpUAOxITclBM5A+5lHPbNTZsW+jHT2Bh/h6LDh1EYc4fjwgvVZf69mTm3\nW/xcUzPA24Ozx1et5EXttYpgTl0QbunS0G1Hjoheuerq8E/d0QG/+AWcOwcvvyz66r7+dfj97+PX\npzh2g7mMqYrMWPBktu3BFTGNbetWRT2Gog773A7RtzRUyJ654UVvhBSNq+n9qn9xx+MRgVzQB1bE\nMpO8ZYk5F4kkGK0ZYGfP6OtPCoejXWTkjj+jvZRLllgOLTmLFQtxEfurQARyJ16AY8/AgUfgyK+h\ndafI8IwUgpQsI2IKFXsYE+h0Ijunhc6BRgijl9RUKCkJ3X5Y45qTVrSUSRYWwtSpMFlFMLa2VmTy\nHn8c/uVf4JvfhG9/G/pifbsF9Mt5UQsy07IyhEq5CkVFohw0mOpq9RLLQLZtg3vugfXrlQHc229H\nfpxWxmaZJYieueLr4PgfQuTiKx5cwZMbd7L28TUiuxZlXLluFVV7RJfjqjDHqFy3is0HG6nM7E/n\nu51CAavwiqF5vbJnbvhJKdYWqCWqjKyzBtoPUlPbQmlRlm81sq6pnYoFpdS1dmMNLDPpzMGaNScx\n5yKRBJOUAclZIsCJRs9JUW44WnHZoekNMcmPheRsKUg01CSlC8GZ1u0hc4WQ+7oaPY3Qs1EspKVM\nFMFRolQgdXpx/PQpke1knN3as4ZhSsrGBJkz4OwH0fdztAsrn5Tx9d6zWkPLGmtqYNEi9f0HQm1t\n5N+npsJXviJaUdSCubo6qKqCfwRIURw4AH/5C3zuczGcSNDihtsj7KCCSc+L/H5Ytiw0m/biiyL7\nFg219YJ33oHPfz76Y6MxdoM5ENm5SddT9/6ziprp5toWoeTU2o1Fw9gMTCsREwufGpTKPoo6bBAl\nGeYhWPXyuLVnAWXPXOJImahtv0So9Xk8cHoL4G/i917zgWMv5rQMrAvul+VckqEldZL2YC57KGRf\nE4DHDcf/MDAhl+HyKR3vFFZCZw11tbWKuUJdbYtYCOu/r9fUtlCQk0Zza7fvPm+zO/33/e468ZVo\ndHrIr4AJl6sHjlpLLJOzhM/oWCW1VGRZXPbo+3YcGpfB3N//rtz20UfCJileqGXmHnxQBG42m8gO\nZvY7sBQUgNms7K/r6RHliMH87W/wmc9ENh1X4FBm5np6ROlmICYTmDIie+5edBH88Y/KbWqBXF6e\nUO2MRlsb7IxxzU+NsR3MAeScj3VlObR/CrYmcNmw9s8RLP3KOdHGAPMWB6TrHW1Yy/r3yfR7toXU\nYbts8TUmHyzG1LH9wT3caC0js58V10Y8/f46DglzW6I08XuZeM24M0qVjABSJgmBnmiMZhGU1h3Q\nczIkQx41EADRLycZeoypULoaq/P/RDDeT/BCmFfFeu2dFwHCsuhIfSurlvvFM7wWRvOsouw++P8e\n61jtmHjc2Oq3UHesEeuyu0Jfz3gvsfSiN0DGNG2fOZ01MOHSxJ/TCGKOysfN4cNw9KgoexwsHo96\nMDdnDqjZT3uzc4eCdLJsKtajra1CJfOSSzSejC1I/ESlXy4jg6iZ6tJSmDhR9BdG4u67hTH6e++F\n32fmTLjiCvF9sIz9YA5E6Ur+RfE7nr0Vap4afTXWsl8usZjyRLDcb9Qakd4mUSoTDzweaH5XsSmi\nemXmTMiKlzyURBIDqSra02r0nkq86msi8Hjg7PtAaIY8OBDwlfR5M+bJFmkTMpyklULRVdDoFzyJ\npoR9xNYHd/nnFl4bI4Dpk3NV/++xjtWO6bt2lgK25lARK61et2M9mAPImKEtmOtpgE+fiP34xnTx\nvs27KHLp6wiktFQIoRw5otz+xhvw1a8O/vjNzdAbVO2bkgL5ES47tWAuHK++GkMwF7TA0a6STYuk\nZOlFpxPZuT9HyNMYjULQ5fzzRXB8KkDzLj9fBHCXXw7FcRQSH2V3yhGCKUesoLbt822Ktgo7kNW3\neKzoKVZ+Zb9cYtHpwVwE3Ro6fnsa4hfMdR4WwWEAwU38letWYQaxAl18nSzlkgwPKYXifeJxR97P\n4xLXdJpKh/5IpqdeLPahzRJHkTGXJZbDT+6Fojy2ba9vU/DCWKCK9VrA/PZBNr++JyYbo3hYI1U+\ndTvmZCOcqYaSm5WvQ2uZpXkM98t5yeiXbdSy+K6lBFztMT0NcG6XuLdmL4j9GMPI1VfDz36m3Pbu\nu/CFL4jAazCoZeUmTw41Bw9ETdEyHJ9+KoIlNf83BW6XQlTL0Sf67oLREsxB9GBuwQJIExbUPPoo\nbNoEdjvMny8sCiK9/oEydtUsE01+hWI4FMbkAznm5g+PUVqUJU5S9sslHq2llvEqI1PJykVUryxc\nIcsrJcOHPkl7X8poNA8/t1sx1GxnA1LFciSg00Hx9YpMVzQVa757bcw2RvGwRvJdO217oS8ozaA1\nmBsPmTljquid66emtsVvGN4/buuwUVPr76naW3Pat7iuto/aY2y9Nmq2/s7X7jBauOQSIUISSG+v\nCOgGi5r4iZrISSy/D+a11zTs1NcmFgj72b07NGMIUDjRCElZUQ83fTrkRkjCLl/u/9ligdWr4c47\nRTCXiEAOZGZu4KQUCYGVzqPA0BmTxzpWrPzKMsvEk6IxmOs6Hp9+yo52cCsDw7AmqS1gXXze4J9T\nIhkMKZOGV/U1Ubj7oH2fYlNwIFDx4Aqqv7khNGOeWqz9s0OSWAzJMPlzcOQ32Hq6Iiph+5Su7X2K\n/ylR/u+xjtWO6bt2PG6hnF20Qpy/s9dngh6V8RDMAWRafRUzWsqfYy2VVZRMN1bB1HuH4UUOjJQU\nuOwyISgSSFUVXHXV4IoFgpUyIXqwFktmDkRP2r33Kg25Qaxzv/22EBeZPeksV0wFswnOnFW3Xygu\nhvziXE0vWK8X2Tm1QNJgECWWQ43hoYceemjonxYefvhhhump40dSpmIl1mjUU7DhE57cXc+as11Y\nmjspaOvVPE5vasd4zbxBHUPtmKzs73ItWC4DukSjT9Ymhexxil6HQX45upoxJSvXZHItqRiNyuUf\no1FP7uxbZE+OZPhx9ULHwej7uR2Qp+LSGmccDgcmk7qvUEy0H1SU5/kmeHcvI72pnYLv38yTG3ey\n5mtXYmnupPTR1Ww+2EhpURbG8tuEsqBkZGBMhYxpHDuwjYXWXMyZZlg5h7rWbiqXlNPcbSd3zWKc\nRj1H6lqZduVsJvc4KH10NVV76jlS18rKe5er/t9jHasd03ftFGaJz3p7sygR1RtFZuicBnm8pPS4\nCX7E7T2UKAwp0PIxIO6FpYVZbP768xRs+ITqV8Tfuvr/e4WCDZ/w7p+3s/Le5UyfPiHsPmqPqbx7\nmbhO+tpFaWdS5jC/aO3k5YngLZBz52Dx4sgZqGg89xy0B1Wu3nKLuviJF5NJ9OypiZ7ccYco3bQH\niJO63aI8MljMZeNG+OUvxf7dTYfoPn0MnR727w89ttEoAtrk7DLNIlTJyeoecQsXiiA4VgYbE8ky\ny8GQVqZo6B8KY/KBHBMAYxqkjrL+k9FIUpaYCPQTraRDS/nGgEo+7E7FmORsyJoX39cqkQwEraXI\njjbtGYaRQFCJpS9D7rWz6XMJO5s+l8iY56dTuXw+dYbLtQvDSIaOlEKsV/0X5qm3QM75kDkT6/wK\nLBNnY50qruG6pnZWLZ/OvEWlvv/ptJIcppXkhP2/xzpWO6Y5P53KJcIKCRDS+63bxc+aSyzHQb+c\nF1OewrdSS/lzrKWyipLpM+8Pw4scOFOmwIwZodvfeGPgx3Q64aRKpbyWzJvaPvn5IhBcuTL0d3/7\nm3i+QF591f9zhqkFh0Nk6dpULJnnz4e0VCBZe+Q6Z47fUiGQiorQbUOBDOYGg04Hk24AvTGkT6ni\nV3fx5MadVDy+RtO4cv29VO2pp2rr4QEfQ+2Yvl6pohWJMzKV+NHpFOVSw9FLGdIrCVBwsZBplkiG\nm+QcMPo764MXPCBgMaKnfqjPbmD0dUKXUhLOWparsAOxluViyTQLMaoJl0LZ7ZjnrcW6sHKoz1ai\nFb0RchbBpOuh7FbxVX43zPk2TLsf66IrMacoLWbmWSf4LQQI+r8PYKx2TFCxQjr7gRB6kEqWoeh0\nip7UaIvmA1lY9y2cg6g8sCt9zUY6V18duu0f/1A31tbCyZPgcim3ZWerB0DBnKfSDXLHHSIbds01\noX1nLS3wwQfKcXOzf5xpCm/VkZsLM7zOYzEscBgMQpUykPR0UX45HOg8nuHR19fpdAzTU8efjhpq\nqn9LaV7SyFOz7PNQ1zcT69LbhuEPM045/Y746sdmdyr6ICseX0P1f72meVyp0kvp3Wd+p409Lrfq\nY8z5/UInyRawPiCDOcnI4fgfhQoryn4Thez6knLMOVOg/AsJVXns7OwkIyNj4Adw2eD0u3B2m7b9\np31Je3ZSMvJxOcB2SmTE3K7o+8dKx6fQdUzbviU3C5XtTpWmoGAmXgN58WnuGfR7aChw9sCh/8HW\n0y0+X2ZNxPxIFW3ePsgbF2J5YhM2bx8ksGp+ieo+ao/ZfLDR36sOIps76fphfMGxYbfDPfeEBm//\n9E9w3XWxH+8f/xBKjoEsWAD/9V/RH9vbC+vWwfHjYrxqFfzzP/uDuB/+UHjMBXLBBfAf/yF+rq6G\nH/3I/7tbZv0Yk6En5Hn0erhqpQgyAZh2P6ROjH6CAef5k5+IQDI3V9g5XHCB5ocrGGxMJIO5eOHs\n7wPpbRI9IcONPglMBZA1U1oSDDUdNVD7nGJT293r/dLWK2bT1twZ05jHVqse45Hd9ayL8BhAyCXn\nLh7Kv4BEEpnT78LpLb5h8IKHYjFi0o2QszBhpzKgiajLAWfeE6WVwUqCkTDlgfWr0oJAop3e03D4\nl9r2NeeLLLFLpeEomPJ74maPMyqCOYBze6jZ+ltKCzPCLrxD7AvrEGQDBSKrO2PtqFKP/vWvleWJ\nILzofvaz2D+ynnkGXnxRue2mm+C++7Q93u0W9gGZmVBSonz+PXvg3/9duX9qqujRMxhg/Xp4+WWx\nPdnQy2dmPaL6HLNmwcJAJ4k53wFD7L2fLpc4v8EoVQ42JpJqlvHCmCLKMSSS1BLQGXxSuNEU7Qai\nZObd5ysRHmMG0YQ9ynxvJOOAoB6xiCb3pzYJo3vjIE2P4oXLDkd/K0SIYiX7PBnISWIjZYIQ1Oj0\nl/EG+9pCfzBR+6my9DIS46lnzkv2fKxXfhuaNkHvSXA5fH8vS6a/XDa4pDV4H7XHhJS9up3Q8iEU\njp4y6quvDg3m6upg717RVxYL4TzmtKLXC082NebOFcFbT0CyracHjh0TtgGffurf7i2xTE+HroAW\nbIsF5gUePyljQIEciAByuJHBnEQSb4wpIiPatl/RS6kmbR1tXBlY8qFyDMOjb1Dxb1eHPGbzwUYq\nM8sxT7pUrBBKJCOJtDIhyuQUNT1hTe7BVx5F8bXiMeai4Q3sGqvA1hwyoY66Wq/TgSXGGZFEApC/\nTBHMBcvrK6TxtWAwg3H0ZIziSkqR6Hv0uEUWM1bcDjjya2FFEo2WjyF/+YCDhKGmtFQESvuUDiu8\n+mrswdxAPOa04g30PvpIuX3vXiHmciSgfdkbzF1xOXR2QkOjsCiYbhUqlj5G+eKGLLOUSBKBox2O\n/i81h2sjTvgG20tZlJ9O05ku9UlkZy7Wy9fKTIBkZNL8Dzj1tn8i2t/Dotp/EkzOIihaKSalgySm\nEjGXHQ4+Cm5nSK9fW4fN5z1lyTSH/J70cjGJlEhixeOBI08rDKkjliZHI60Epmqsd9PAqCmzjBeN\nVcLbr5+wmdKmdqwX3Qr5wyRxOACC+81ATCF+85vIlgKB9PTA5z4XeowXXxTWAyH0NomSdfsZbUEy\nsGMHvLdVua2sTHi8bdjg35aa1EFuRhs33wwRZ0K5F4gFw2FClllKJCOR5CyYcg9Wc5XPWB6il2vE\nWvLR2W0PfYxOj7nkcqwFl8hATjJyyVsG53ZRV3tY3eQ+sP8kmNYd0NsIU780tMI+PfWifApRVlW5\npFwxoV77+Bqqv/WScoLtneBlq0i0SSRa0OlEQFD3Z9+mwNLk6wB+8Do8IWbQUbPE40nJMhHkXSSy\nbh43ECVTevodyJylsEYYySxdKnznzgYIQHo8Qv7/3jBe6IcPi98bjaIvrlMl4VlUpBLIeTxw6u9w\npjrm8yzLh09Tldsc56CtAfKDtuflRQnkAEyDMNQbAchgTiJJFOY8mHKX+ISxNYtV/XjT2Q0Zaf5x\nchaYJ8QlYyGRJBS9EYpWYbW3KjZ7V7m9k9CwE9Pa/Vgz/wETLh+6cw461+Bev0DvKUXvnyFZTOgk\nkoGSORuS3xb3E5SlyVtKsqm/Yhar7E7MJqPPrmbtnRf59lWUYY7ykrJhJ9kizKXb9gLqCzu+hRx3\nH5x8GcrvHRX2UAYDXHst/P73yu1vvQW33QbmoKlFXR185zt+I+8tW+CSS0KPq1pi2fIhnKmOWrKu\nNs7PTuNMRzf5mbk0tbaQmZpGR2s3ZrO4R9Q1i4qm0oIJ5OVqWeAY3e+JkX9lSSSjneRsyJwB2fMT\n8DVXOU6bLAM5yeghczpkKYOcaN6MCh/Fsx8kZpEkHP0TaS9a/KoAMfEzJA/deUrGHnoDlH4GdPoQ\nX9tVv/sCpCZR9cBztN29nur7n2HtjQup/tZLtN29ns33rBdlzN4ssczMDZ6g0slgk3GFiXh3/agy\nEl+5EpKSlNu6uuCdd0L33bDBH8iB+HnTptD9QoI5twua3wMG5sf7P3/cxtTJYpyZmkbVx9vITE2j\nsxMcTienz7Vy+lwrDqeTvDwNfryjPJiTPXMSyShm3PUqSMYejjao+bmiVyKaN6OiP2jiKshbMuCn\nj+k9dOIFaD/oP8coflWbDzZSuWwm5nkPCrU0iWSwtO6gpvp3lBaG9mjtu/u3vPbpqYgWNwDMXCuy\nS3Fi3N6Hjv/B10ZhszvZfM96Kg42CRGn9feG9jAazEKAJTlbqF5nWoWo0wjkpz8NDcomT4annvJ3\nb7S2whe+EGoOrsa6dbB8ecCGzqPi79fPQPx43/z2ayxscfCBy4nrpjX0vfkalznE2PDZ2+kzm3H+\n+Xk+k+Hg/b4I9xG9Eeb8+7C2pQw2JpKZOYlEIpEMH8kWKFDW5QSvcgeWL4aserd8JHovhoKAzFxd\nU7vokclPh8dW09znYu2dF9Hc5xK9f/npVC6bRR0XykBOEj9yFmG99AHMqakhvzqt00XPEidbIClr\nSE95zFJwKUBIprRy/b1sPtjoyzT5cNmg67jo+T25EQ4+BkfXi56xWPwqhwA1o/ATJ4RipJe33tIW\nyIEQJ1HQU68YRvvMVxtf4XbwXEM9N5xq4ootm7jM4R8v31RFstFIpcvB/+yJch8x5Y56fQEZzEkk\nEolkeMm7SNGArrl8EcDeAp2HE3+OHo8imLOW5SoyI9ayXCyZZtF/YUyDvKWY534N66KrE39ukvFF\nplX0YPUvEgQHExW/uosnN+6k4vE1ocFF9oJRP3EdMaSVQs6ikIWdum47FQtKqWtq9+26t+a0T5na\ni83WR83+ncL37tBP4dRmzWqOiaa8HObMCd2+caP47nRCVVXo79VIShICKAqCgrlon/lq4w9dYlxl\nyeHty1fwQcB464pVOJxOPtJpuI+klWl7ISMYGcxJJBKJZHjRG2HSTaA3xjYx9dLyYfhjxwuXTVt/\nnk4HMx+EiVcLQSKJJBGkFMHUL0LKBG1Z4iXl1LWnQf7Fw33mY4uiq7BapyoWdkqLsqjeVefrx7LZ\nnRypb+VIfavvcyukZ8vtFD1kx5/x+W8ON2rZuY8+Er1zH3wgyiy1UFISZKztcUPPSd8w2md+uPHy\nx9fgWDgb26138erenbhuWkP7jNm477yXTxrq2X30MAse0nAfGQP+n7JnTiIZxYzbXgXJ2KT9U2qq\nf0tpvkm7GbcX61fBHLuwg+b3UE+jMAuORlImzPpGzOchkQwId58o0zu7LfxigyEZcpf2G1jHX4hn\n3N+Huk/Asf9TlHur+QCSafZt29BpY83PbsdSbFE8pq6pHat1GpTdIRSxhxGnE770JaVNAUBqKhQU\nhBqDz54NDQ3Q3q7cfuWV8PWvB2zoPQ2Hf+kbDkTN0jt223J5fXO/mmVPN0U5SjXLr943gYz0CPeR\nvplYl9056L/VYBlsTCSDOYlkFDPub6KSsYfLJiS/bc1wbldsZUdZs4S4QNYcSC3W9BDN76H2A3Bi\nQ/T90ibD1DCGTBJJovCWAbt6ldsNKeI9kcDSSnkfApreClGsbLt7fYgAjXfbPwPbF5RQ+eu7Q7zp\nzCajCLqNmerPZTCJzGzWHEifktCXtWUL/OQn/rHLZcfWuY+kli1k2BroNBfTl3s55oy5/PjHJlJS\n4LvfFcbhXh5/HKzWgIO2fAINr8Xl/FrPwRtvqP/OZIJbbgnjMZeUCYVXgmXeiCg7lqbhEolEIhk7\nGMyQe4H4eeIqOPRUiCVAWPqVJjnzPqSXQ+EVkDopPuel9RziqBIokWhGpxs1xtRjkglXQOcRsQhF\naA9Y5bpVELSt4ge3qHvTAbgc4Dob9unoaRBBUd4SKLo6YQHJZZfB9u3w7rvgPvQwMzp2sdDZQbne\nRLLOgKPrEMeaqziUmcmulxZw50Pf46c/FZYFvb1w9dVBgRyE9MuFJXMG5C+LuIvFDe//nzJ49LJg\nAeimqjwoORuMGSMiiIsXMpiTSCQSychEp4fcC6HpTd+maCU54DUV/xhr1zEhFjHhcrGSPRg0B3PZ\ng3seiUQy+tAboeQWOPIbbDa7rwfM/EgVletWUbVHBDCrArZtPtjI+V12ntx7kusAfvA6PPE5IHqp\nIfR/zn3yN6zLCyDn/IS8LJ0OvvxlOHDATtbHu7jN4wSDX0k1WWdgpiGVq/OdbNm1E7vdzoQJJh54\nIMJBNQdzVlHpEAE9MKFc9PIFUzQNGJnOD3FHCqBIJBKJZOSSs1DR5xOTqThARw0cfhqOPQMdh0Tz\n/UBwtGnbTwZzEsn4JKUQJt0QIkhjzk9nWkkO00pyFNsqFpTy1x47a4H6kmyqrpil2Thb8Tl36u8i\nk5cg0tLgpmv3scilbp9gMEBuLszs7OTQvn2RD+bsBrtG5ZQUbVUV8+apb585U9vTjAVkZk4ikUgk\nIxeDGSwLhJ8cwo+ockm5ojxp7eNrqP7WS75x6bpQOwBbSw11+z4W4gJ5SyDnAtAbQvYLiyyzlEgk\n0cg+D+tlD8CpTWA749s8zzpBsZvN7qR6Vx13P3035keqWNWfvat64DkutzlVP9Ey+y4AABf/SURB\nVNeCx76yTGcvdHwK2YlTZbQd38LyEhNnGkJ/l5cvArqZJhMbt2xh/vkRsoTdGrNyBpNmQSu1YE6v\nh2nTtD3VWEBm5iQSiUQyssm9UDGMZjA7/ZltiuydYhXbcQ4a34Bj67WvEHs8MjMnkUi0kWmF6V8R\nqrZT74Xyz4uvyZ8TJd/mAtXs3arl0ylp79VsnO0zvQZo25PQl+RoaKBsooHMIE0WnQ4mFIifTQYD\njgaVaC8QrSWWqZNEmb0GpkyBiROV2xYuhJQUbU81FpDBnEQikUhGNuY8yJjuG0YzmOW71/qyd213\nr+eZW39NxdQChReU7dwJat59SlvZpbMTPK7o++kMorFeIpGMb3Q6oZiYNhnSy8RX1iyYcClYv4L1\n0q9gTg1t6Dqt02k2zvaZXgN0HYW+roS9nOTiYhxuF1Ongle4VG+AsjIwm8XY7nKRXBxFRTjAXy4i\nqSWaz02vhwcegLx+J4fSUrjvPs0PHxPIYE4ikUgkI5+CS0Cn02wqDvhWsW84dobq7/4lNFOX3Qet\nO6M/dywllmNIIU0ikSSIrFnC9L0/kx+rcbbC9BpE9UB7lH61QTDz8ss5ZLeTlAQzZ8GChbBwAeQH\nVEJ+arcz8/LLwx/E7YLeKJk7LzEEcwBz58LTT8Mf/gA//akwKh9PSJ85iWQUI/19JOOKU3+n5qON\nmtQsD59ooe4/NlJxsEnIgP/qLqr/6zVlv0l+Op2ubDIWfj3Ss8K53VD/cvTzy5gGU4bfgFYiGUrk\nfWgQOLuh9k/UHNgdk3E2BJiM949JnQjT7k/IadrtdjbeeitrnM6w+7xgMHDTCy9gMpnUd+hpgCO/\nif5kOh3M/rbomxsnDDYmkpk5iUQikYwOJlRiXX4v5tR03yZrWS6WTLN/QtNP3al23yp35fp7qT7a\nLGTAg/tNbKfA3hL5eaX4iUQiSQTGNCi/F+tFt2NO9/fbBn+uqX3OmU1G5edeT6NCdCWemEwm+hYs\n4AWDgd09Pdhdouzc7nKxu6eHFwwGnAsXhg/kQHu/nLlgXAVy8UCqWUokEolkdKDTQc4iyF4gAjBH\nv4CJ2wHtB6DrGLjsfnEBk1GICwAVplI29MuAe018zd7jtu0TvSzhkB5zEokkUegNkH+R+HJ2gzPI\nAdvVC0fXaztW214ovCL+5wjc8b3vYbfbObRvHxu3bMHR0EBycTEzL7+cm+bOjRzIQQziJ+OsRjIO\nyGBOIpFIJKMLnV7IVgdKV1vmgcsOZz/Aanhf/NxPsAy417C3MrNc7NC+z9eTp4pUspRIJEOBMU18\nBZNeBl210R/ftkcoZiaod9dkMjH//PMj2w+o4fFAd522fWUwFzOyzFIikUgkYwODSWTYZj4IE/1e\nc2oy4JVLyqlrahc72M6ArTn8cbVm5pJkmaVEIkkAljDO2ME42rRnwIaSvg7o6wREP6BPuKUfm91J\nTW1/ubsM5mJGBnMSiUQiGVsYzJC3FGb/GyD6TQJtCUCl36R9v/qx3E5hTaAFmZmTSCSJIHO2sD7R\nQoI95wZE9wnfj6VFWeF9QI1p8nN0AMhgTiKRSCRjE2OaUJjUQvs+UQoUTF+7+vZgDCYRREokEkm8\nMaYIM/J+Ima32vcLG4CRROdh349mk1HhA7r5nvVUzpooFtxSS6S9ywCQwZxEIpFIxi6Wudr2s7dC\nb1Po9ljET+QkRCKRJArLfN+PEbNbzl4hBjVScLsUwRyIgM7rA6pQF06TJZYDQQqgSCQSiWTskjlT\nlCd5NKxUt+8TXk2BSCVLiUQyEsiYLrL/Lpsiu6XwzvSWk3fXQub0YT1dHz114LIpNtnsTqodzlB1\n4bQpw3GGox6ZmZNIJBLJ2MVgFpMgLbTvDy2p1KpkKcVPJBJJItEbIWuObxg2uwUimBsI7j7oOQnn\n9sC53cK2pf0AdNSA7Sx43LEfs+NTxdCbRQz0Ad18sBGbOwVSigZ23uMcmZmTSCQSydjGMlcxoaip\nbaG0KEshimKzO6mrPYa16BBkzfQ/VmbmJBLJSCFrNrRuByJkt0CUjLscYEjWdlyPB87tglN/F153\n4TDlQOFK5WdktON2HFJsUvMBrcwsp64zG6ssVR8QMjMnkUgkkrFNhhX0Sb5hxH6TuhfFqrSXPukx\nJ5FIRgipJaDTh89ueUVRPO7YLApat8PJjZEDORC9xXUviKydFmzNIdUNYdWFFyTG7Hw8IDNzEolE\nIhnbGJIhc4YoGUKppja/08Yel9vfb+JxQf1foOkNQAeuHm3PkSzLLCUSSYIxJEPKROqO71bPbjW1\n+y1Xuk9AxtTox+zrhMYq1YqFvTWnAZhnneDbZrP1Ubd1PdYrvx29LLLzUOTfB76utDJt+0pCkJk5\niUQikYx9spSqlt5+k1/sawjtNwFw9ohVai22BCCDOYlEMjSkTdbmnam1b67jEHhcqhULR+pbOVLf\nGlrFUJgBdS+JUs5ox9ZC+jTREygZEPIvJ5FIJJKxT8Y04QXnsgP+fpOvABuKsljz4Aq84VhNbQsF\nOWk0t3b7JkeqK9R2p1gJn16mKOOUSCSShJE2Gc5UR9+vp0EImkT7bOo5CaCqkLnqqdsh06yummlv\ngaYqmHSj+nH7OsU5aCFzhrb9JKrIzJxEIpFIxj564//f3v3HRH3neRx/fWFGBgEFuooIWOoii1hq\nR01t07Uri9gQI6sxkmq367U0aep1r7bd1Pb+sr2cPy4aW60mblMTE3Otde8ozV4geia6lDuLF8f2\nTjDgKhX5YVddlEr56dwf4351ZIAZZmT4Ds9HYjLfHzPfj2k+/fr6fj+f90dKckq6r5pa/s9U8snf\n6YNyl9pvespnT02O0wcH/1tTk+PM8wd9Qp06mbdyAEZP3Az/1rR09/sXpnpvmB99VcgcsmrmdZdn\nrl3rkYF/mv/Dv7+PYfhfcRg+8WYOADA+TF0k3azTpcYL5nyT3n9eqcS4GG349VP6/Lf/qhK3PBXi\ndpSo+u0/+PeEmuInAEZLtENyTPNUrBzOre+k+Myhz7knzPmqkKmhqmZKnkAXjIkzJNvE4H5jnOPN\nHABgfLDFSY/8RtnZWQPmmyROcqjELfPpc+LOo/4/oSbMARhNcQ/7d95w8+bcbqn3piTf679VfNuk\niq8azH0z3v+VKr5tMkco1DdeU/vNLtU3XvNr+2/XuXebIZbBI8wBAMaPmIekrJelieleu+9/It3+\nRqHXdtfGogHndG0s8nw53o+KcQAQKv6Guc7L0u3+wY/3d0q3PcHMXP9tSrynQuaUeGVlJCsrI9nc\nNyt3uiSp4TtPGLt/SPpw217D0/+GMBc0w+32t1RXiC9sGArTpYGI0dHRoYSEhHA3A7Ce271SU5k6\nWlyy26I9T6RnT5djW4Xa3yjUB+UubfiVU4k7j6prY5EqvvWs2VT0WIYc2yrUtbFIx+paVPCLJ+R4\n9B8kg2ejGJ+4D4VBX6dU+y/+nfvTUikuw/exzhbp/O8DunRXd5/XcPOnd5So+p/+6Pd2we61nnAo\nSY4pUvbfB3T9SBRsJiLMARbGTRQIgtutjvNfqrXuP73WV/K7mmVftC7Zlyo7b+Hotx0YI7gPhUn9\nXs+i3MOZ+oyUku+7aMqNOum7QwFfuv03+/XBN03aICmxMFft33cEtK3tq++07efStCUBXz/SBJuJ\neJQIABifDEOa9ktlF/xOjuSfmiW8szMfUuIkh9eaTXnZKXeDnD1eSnpcjrw3CHIAwsPfoZbf/0mq\n3SpdPCjduuR97M58uUAMNyR9uG1zeLokJWQHfH0MNOI3c4cPH9amTZt07tw5nTp1SvPmzTOPbdmy\nRfv371d0dLR27dqlpUuXDrwwb+aAoPFEFAiOVx9y35b6fxzmG1GSLfaBtwuwCu5DYdL+f56FuwNh\nGFLacin5zr/ZW49If/kvv79uFkkZZEj6cNvm8PSFM+VIfkSa+ZJ/yyxEuLANszx37pyioqL0yiuv\naMeOHWaYq62t1dq1a3Xq1Ck1NzdryZIlqq+vV1SU90tAwhwQPG6iQHDoQ0Bw6ENh0tsh1e0wN+sb\nrw07XLyru0+X2m4oe/HrUkKWdOmw1H52+GslO6UbZ1X/59YhrzHc9t02dCj7l78bfC7fOBO2YZY5\nOTnKzh74erS8vFxr1qyR3W5XZmamsrKyVFNTM+IGAgAAALiHPcFTnfeOGamTdezrC+ayAYNWkpw2\nWWr6N6mnXeq54fOnB5g0W8p8Qdk5OV7Lutw/JH24bUlyJExRdsHbBLkQCvmi4S0tLXryySfN7fT0\ndDU3+7ECPQAAAAD/xD0sdXuWCXDE2FSwcKZXpckNO0pU/fYfvCtJxtikvh+lS597Ap0/7JOl2BRp\n1queeXfdf5Fu9wTW1qgJUmya5EiRoqID/ItiKEOGucLCQrW1tQ3Yv3nzZi1fvtzvixiMhwUAAABC\nJ+5h6fppc9MRY9PTnT13K0fuPOq17dhWcbeSZGeL/9eZcGddOCNKis/0/MGYMWSYO3r0aMA/mJaW\npqamJnP78uXLSktL83nuu+++a35etGiRFi1aFPD1gPGso6Mj3E0ALI0+BASHPhROKdKP/ebC313d\nfTr+Y49KJR1NT9KTr/xCJ//x383txb8tkONWd2CXiJ4g3eqRjN6Qt368qqqqUlVVVch+L+h15vLz\n87V9+3bNnz9f0t0CKDU1NWYBlPPnzw94O0cBFCB4TDwHgkMfAoJDHwqz5j9K1/5n2EqT//v8Qp2/\nfktFP59lznvr6u7TpdYbXnPaBmBh7wcubAVQysrKlJGRoZMnT2rZsmUqKvKsG5Gbm6uSkhLl5uaq\nqKhIe/fuZZglAAAAEGqpz0rxmbrUesNT8n9KvLR9tb7v7deGXz+l73v7pe2rNSt3uiSp4TvPHDuz\nIErq5KF/3z7McYRd0G/mRnxh3swBQeOJKBAc+hAQHPrQGOC+Lf3VJf31G6n7qtTX6fO0ru4+rwIp\nBbvXesLfUJLnS+n+18lA4ILNRCGvZgkAAABglBhRntCVPP/uvs5m6c/7JXe/uev+AileBVEGY5/0\nYNqMkBnxMEsAAAAAY9DENGl6kdeuru4+z5IFkqpnJKtrY5Hv795rAsMsxzrCHAAAABBpkudLk34m\n6e4cuYLda5VYmKuC/S/qWF2Lucj4oJgzN+YR5gAAAIBIYxhSQpYkDSiQ4pgSr4KFM3Wp9cbQv8Ew\nyzGPOXMAAABAJIr1rPXsa/kBR4xt6GUJJMKcBfBmDgAAAIhEjhQpaoTvbmxxUpQ9tO1ByBHmAAAA\ngEgUFS05po3suxQ/sQTCHAAAABCpJqaP7Hs2hlhaAWEOAAAAiFQT00b2Pd7MWQJhDgAAAIhUsSMM\ncyxLYAmEOQAAACBSTUiSbLGBf49KlpZAmAMAAAAilWGM7O0cb+YsgTAHAAAARLKRFEFhzpwlEOYA\nAACASBbomzkjSrLFP5i2IKQIcwAAAEAkmzg9sPPtCZ5AhzGP/0oAAABAJLPFeQqh+Iv5cpZBmAMA\nAAAiXSDrzRHmLIMwBwAAAES6e4qg1DdeU1d3n9fhru4+1Tde82ywLIFlEOYAAACASHdPEZQZqZN1\n7OsLZqDr6u7Tsa8vaEbqnTdyFD+xDFu4GwAAAADgAYudZn50xNhUsHCmjr3+mZ7u7FF1T58Kdq+V\nI+ZONIhJDlMjESjezAEAAACRLsouxaaam44Ym57u7NEH3zTp6bpWObZV3D03kGIpCCvCHAAAADAe\nTMoxP3Z196m6p08bJFXPSFbXxiLPgQmTpZgp4WkfAkaYAwAAAMaDhxZIUTZzjlzB7rVKLMxVwf4X\ndayuxTOHLmmeZBjhbin8ZLjdbndYLmwYCtOlgYjR0dGhhISEcDcDsCz6EBAc+pAF3WxQ/Z/2aEZK\n/N05cvK8qbv0w0+Uvfh1wtwoCjYTEeYAC+MmCgSHPgQEhz5kUT+2SddqpJvnJBmeoZU/eUqaPEcy\nGLg3moLNRFSzBAAAAMaT2GlSerGk4nC3BEEiegMAAACABRHmAAAAAMCCCHMAAAAAYEGEOQAAAACw\nIMIcAAAAAFgQYQ4AAAAALIgwBwAAAAAWRJgDAAAAAAsizAEAAACABRHmAAAAAMCCCHMAAAAAYEGE\nOQAAAACwIMIcAAAAAFgQYQ4AAAAALIgwBwAAAAAWRJgDAAAAAAsizAEAAACABRHmAAAAAMCCCHMA\nAAAAYEGEOQAAAACwIMIcAAAAAFgQYQ4AAAAALIgwBwAAAAAWRJgDAAAAAAsizAEAAACABRHmAAAA\nAMCCCHMAAAAAYEGEOQAAAACwIMIcAAAAAFgQYQ4AAAAALIgwBwAAAAAWRJgDAAAAAAsacZg7fPiw\n5syZo+joaJ0+fdrc39jYqNjYWDmdTjmdTq1fvz4kDQUAAAAA3DXiMJeXl6eysjI988wzA45lZWXJ\n5XLJ5XJp7969QTUQwOCqqqrC3QTA0uhDQHDoQ0B4jTjM5eTkKDs7O5RtARAgbqJAcOhDQHDoQ0B4\nPZA5cxcvXpTT6dTixYv11VdfPYhLAAAAAMC4ZhvqYGFhodra2gbs37x5s5YvX+7zO9OnT1dTU5OS\nkpJ0+vRprVixQmfPnlVCQkJoWgwAAAAAkOF2u93B/EB+fr527NihefPmBXTcMIxgLgsAAAAAlhdM\nHBvyzdxIGnD16lUlJSUpOjpaFy5cUENDg2bOnDnkdwAAAAAAgRnxnLmysjJlZGTo5MmTWrZsmYqK\niiRJJ06c0Ny5c+V0OrV69Wrt27dPiYmJIWswAAAAACAEwywBAAAAAKPvgVSzHE5lZaVycnI0a9Ys\nbdu2LRxNACwnMzNTjz32mJxOp5544glJ0vXr11VYWKjs7GwtXbpU7e3tYW4lMHa89NJLSklJUV5e\nnrlvqD6zZcsWzZo1Szk5OTpy5Eg4mgyMOb760aZNm5Seni6n0ymn06mKigrzGP0I8NbU1KT8/HzN\nmTNHjz76qHbt2iUpdPejUQ9z/f39eu2111RZWana2lp9+umnqqurG+1mAJZjGIaOHz8ul8ulmpoa\nSdLWrVtVWFio+vp6FRQUaOvWrWFuJTB2vPjii6qsrPTaN1ifqa2t1aFDh1RbW6vKykqtX79et2/f\nDkezgTHFVz8yDENvvvmmXC6XXC6XOdWGfgQMZLfbtXPnTp09e1YnT57Unj17VFdXF7L70aiHuZqa\nGmVlZSkzM1N2u13PPfecysvLR7sZgCXdPyr6yy+/1Lp16yRJ69at0xdffBGOZgFj0qJFi5SUlOS1\nb7A+U15erjVr1shutyszM1NZWVnmQxNgPPPVjyTfhezoR8BA06ZN0+OPPy5Jio+P1+zZs9Xc3Byy\n+9Goh7nm5mZlZGSY2+np6Wpubh7tZgCWYxiGlixZogULFujjjz+WJF25ckUpKSmSpJSUFF25ciWc\nTQTGvMH6TEtLi9LT083zuDcBQ9u9e7fmzp2r0tJSc3gY/QgYWmNjo1wulxYuXBiy+9GohznWlwNG\nprq6Wi6XSxUVFdqzZ4+qqqq8jhuGQf8CAjBcn6E/Ab69+uqrunjxos6cOaPU1FS99dZbg55LPwI8\nfvjhB61atUoffvihEhISvI4Fcz8a9TCXlpampqYmc7upqckrfQLwLTU1VZI0ZcoUrVy5UjU1NUpJ\nSVFbW5skqbW1VVOnTg1nE4Exb7A+c/+96fLly0pLSwtLG4GxburUqeY/Pl9++WVzCBj9CPCtt7dX\nq1at0gsvvKAVK1ZICt39aNTD3IIFC9TQ0KDGxkb19PTo0KFDKi4uHu1mAJbS2dmpjo4OSdKtW7d0\n5MgR5eXlqbi4WAcOHJAkHThwwPwfBADfBuszxcXF+uyzz9TT06OLFy+qoaHBrBoLwFtra6v5uays\nzKx0ST8CBnK73SotLVVubq42bNhg7g/V/cj2YJvv44I2mz766CM9++yz6u/vV2lpqWbPnj3azQAs\n5cqVK1q5cqUkqa+vT88//7yWLl2qBQsWqKSkRJ988okyMzP1+eefh7mlwNixZs0anThxQlevXlVG\nRobef/99vfPOOz77TG5urkpKSpSbmyubzaa9e/cyPAzQwH703nvv6fjx4zpz5owMw9Ajjzyiffv2\nSaIfAb5UV1fr4MGD5vJSkmfpgVDdj1g0HAAAAAAsKCyLhgMAAAAAgkOYAwAAAAALIswBAAAAgAUR\n5gAAAADAgghzAAAAAGBBhDkAAAAAsCDCHAAAAABYEGEOAAAAACzo/wH1MjI5NuASEQAAAABJRU5E\nrkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x4cb9f50>"
}
],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": "%%cython\nimport numpy as np\ncimport numpy as np\nfrom libcpp cimport bool\ncimport cython\n\nDTYPE = np.float64\nctypedef np.float64_t DTYPE_t\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\n@cython.nonecheck(False)\ncpdef tuple cy_dd_custom_mv(double[:] ser):\n cdef double running_global_peak = ser[0]\n cdef double min_since_global_peak = ser[0]\n cdef double running_max_dd = 0\n \n cdef long running_global_peak_id = 0\n cdef long running_max_dd_peak_id = 0\n cdef long running_max_dd_trough_id = 0\n \n cdef long i\n cdef double val\n for i in xrange(ser.shape[0]):\n val = ser[i]\n if val >= running_global_peak:\n running_global_peak = val\n running_global_peak_id = i\n min_since_global_peak = val\n if val < min_since_global_peak:\n min_since_global_peak = val\n if val - running_global_peak <= running_max_dd:\n running_max_dd = val - running_global_peak\n running_max_dd_peak_id = running_global_peak_id\n running_max_dd_trough_id = i\n return (running_max_dd, running_max_dd_peak_id, running_max_dd_trough_id, running_global_peak_id)\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\n@cython.nonecheck(False)\ndef cy_rolling_dd_custom_mv(double[:] ser, long window):\n cdef double[:, :] result\n result = np.zeros((ser.shape[0], 4))\n \n cdef double running_global_peak = ser[0]\n cdef double min_since_global_peak = ser[0]\n cdef double running_max_dd = 0\n cdef long running_global_peak_id = 0\n cdef long running_max_dd_peak_id = 0\n cdef long running_max_dd_trough_id = 0\n cdef long i\n cdef double val\n cdef int prob_1\n cdef int prob_2\n cdef tuple intermed\n cdef long newthing\n \n for i in xrange(ser.shape[0]):\n val = ser[i]\n if i < window:\n if val >= running_global_peak:\n running_global_peak = val\n running_global_peak_id = i\n min_since_global_peak = val\n if val < min_since_global_peak:\n min_since_global_peak = val\n if val - running_global_peak <= running_max_dd:\n running_max_dd = val - running_global_peak\n running_max_dd_peak_id = running_global_peak_id\n running_max_dd_trough_id = i\n \n result[i, 0] = <double>running_max_dd\n result[i, 1] = <double>running_max_dd_peak_id\n result[i, 2] = <double>running_max_dd_trough_id\n result[i, 3] = <double>running_global_peak_id\n \n else:\n prob_1 = 1 if result[i-1, 3] <= float(i - window) else 0\n prob_2 = 1 if result[i-1, 1] <= float(i - window) else 0\n if prob_1 or prob_2:\n intermed = cy_dd_custom_mv(ser[i-window+1:i+1])\n result[i, 0] = <double>intermed[0]\n result[i, 1] = <double>(intermed[1] + i - window + 1)\n result[i, 2] = <double>(intermed[2] + i - window + 1)\n result[i, 3] = <double>(intermed[3] + i - window + 1)\n else:\n newthing = <long>(int(result[i-1, 3]))\n result[i, 3] = i if ser[i] >= ser[newthing] else result[i-1, 3]\n if val - ser[newthing] <= result[i-1, 0]:\n result[i, 0] = <double>(val - ser[newthing])\n result[i, 1] = <double>result[i-1, 3]\n result[i, 2] = <double>i\n else:\n result[i, 0] = <double>result[i-1, 0]\n result[i, 1] = <double>result[i-1, 1]\n result[i, 2] = <double>result[i-1, 2]\n cdef double[:] finalresult = result[:, 0]\n return finalresult",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": "test = np.random.randn(1e4).cumsum()\n%timeit cy_rolling_dd_custom(test, 1e3)\n%timeit py_so_rolling_max_dd(test, 1e3)\n%timeit cy_rolling_dd_custom_mv(test, 1e3)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10 loops, best of 3: 35.2 ms per loop\n10 loops, best of 3: 148 ms per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n1000 loops, best of 3: 751 \u00b5s per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": " ",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment