It is a homework for "Data Vision" class

profileggn
LinearRegression.ipynb

{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Quick Recap\n", "\n", "### Tensors\n", "\n", "### Computational Graphs and Variables" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "from torch.autograd import Variable\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "% matplotlib inline\n", "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 2\n", "[torch.FloatTensor of size 1]\n", "\n", "Variable containing:\n", " 1\n", "[torch.FloatTensor of size 1]\n", "\n", "Variable containing:\n", " 1\n", "[torch.FloatTensor of size 1]\n", "\n", "None\n", "\n", " 2\n", "[torch.FloatTensor of size 1]\n", "\n" ] } ], "source": [ "# Create tensors.\n", "x = Variable(torch.Tensor([1]), requires_grad=True)\n", "w = Variable(torch.Tensor([2]), requires_grad=True)\n", "b = Variable(torch.Tensor([3]), requires_grad=True)\n", "\n", "# Build a computational graph.\n", "y = w * x + b # y = 2 * x + 3\n", "\n", "# Compute gradients.\n", "y.backward()\n", "\n", "# Print out the gradients.\n", "print(x.grad) # x.grad = 2 \n", "print(w.grad) # w.grad = 1 \n", "print(b.grad) # b.grad = 1 \n", "print(y.grad)\n", "\n", "print(x.grad.data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Computational Graph\n", "\n", "A computational graph is a set of calculations, which are called nodes, and these nodes are connected in a directional ordering of computation. In other words, some nodes are dependent on other nodes for their input, and these nodes in turn output the results of their calculations to other nodes. A simple example of a computational graph for the calculation a=(b+c)∗(c+2) can be seen below – we can break this calculation up into the following steps/nodes:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVoAAAGLCAYAAACGM1r8AAAYHmlDQ1BJQ0MgUHJvZmlsZQAAWIWVWQdUFEuz7tnZxJJ3yTlnkJxzzjmDCCxpScKSFFAEEUmKoAKCoiISVVQUUBEEMaAowQsqIoJIUFFABZUgbwh673/fO++d1+fMzLc11dVfdVfXTM0CwM3iFxUVjmICICIylupoZijg7uEpgHsLIAADViACMH7kmCgDe3trgLTf1/9si4OINtKeya7b+u/3/9fGHBAYQwYAskewf0AMOQLB1wBAc5CjqLEAYLoRuXBCbNQ6nkMwCxUhCAAWvY6DNzHHOvbfxDIbOs6ORgjWBwBP5+dHDQaAYZ23QDw5GLHDgHDEEiMDKJGI6j4E65JD/AIA4LqD6MhEROxcxzMIlvD/h53g/7Dp/8emn1/wH7zpy0bDG1NiosL9dv8/p+P/bhHhcb/HEEIOuhCqueO6z8i8VYfttFrHdAhuifS3tUMwEcEPKQEb+ut4KCTO3GVLf4YcY4TMGWADAAUC/IytEMyDYLa4MBeDLazoR93oi+ijbCmxFs5b2J+603HLPio+MtzWestOZkigxW9cFhhj4vRbJ4hiaoFgJNJQ1xJDnN02eaI64ymutghmQHBvTJiT1VbfkcQQI9vfOtQ4x3XOIgj+FkQ1ddzUgTkiYn77BcuR/TbGQmIB1o8NcTbf7Au7B8a4W//mEBBobLLJAQ4IjHTZ4gYj0WXouNU3IyrcfksfLgsMN3PcnGf4cky80+++/bFIgG3OA/w21M/SfmusxahYe+dNbmgUsAZGwBgIgDjk8Ac7QSigPJ1pmkF+bd4xBX6ACoJBIJDdkvzu4bZxJxI5O4FE8AlBgSDmTz/DjbuBIB6Rr/6Rbp5lQdDG3fiNHmFgEsERaC60LloLbY2c9ZFDEa2O1vjdT4Dx96hYE6wx1hxripX8w4OMsA5HDiqg/A8yK+QaiHi3ziXytw9/28NMYvowbzEDmFHMS+AK3m1Y2dLaQUmj/ou5ALABo4g10y3v/P/pHVoMYa2CNkTrIPwR7mg2NBeQRSsjnhig9RDfVBDpPxnG/eH291z+e7x11v/0Z0vOIMWgssXC/8/KGP3R+rcVo3/MUQBytfq3JpwJN8AP4Ha4C26Bm4AA3AY3w93w7XX8JxLebUTC79EcN7iFIXYov3Xk6+Tfy6/8a2y/rfHX5ysmNnBX7PpmMNoZtZtKCQ6JFTBAsnGggEUkWU5GQFFeQR2A9dy+mTq+Om7kbIit528Z+QAAakiOpVn6WxbxFYDLBCS12fwtE/VBtgoWgOpJchw1flO2no4BBhAAI7IrOAEfEAYSiD+KQBVoAX1gAiyBHXAGHsAHmfEQEIFwTgDJIBVkgBxwBBwHJeA0OAeqwUVwFTSBFtAO7oPHoBcMgFdIXEyAj2AOLIJlCIJwED1EgjghfkgUkoYUIXVIFzKBrCFHyAPyhYKhSCgOSob2QzlQAVQCnYVqoCvQDagd6oL6oJfQGPQe+gItoWAUHYoFxYsSQ21DqaMMUFYoZ9R2VDAqGpWISkcdRhWjylEXUI2odtRj1ABqFPURtQADmBZmgwVhWVgdNoLtYE84CKbCe+FsuBAuhy/BN5F1fgaPwjPwTzQWTUILoGWR2DRHu6DJ6Gj0XnQuugRdjW5Ed6KfocfQc+hfGHoMD0Yao4mxwLhjgjEJmAxMIaYScx1zD9k3E5hFLBbLhhXHqiH70gMbik3C5mJPYeuxd7B92HHsAg6H48RJ43Rwdjg/XCwuA3cCdwHXhuvHTeB+4Gnx/HhFvCneEx+JT8MX4mvxrfh+/BR+mYaJRpRGk8aOJoBmN00eTQXNTZoemgmaZQIzQZygQ3AmhBJSCcWES4R7hGHCV1paWiFaDVoHWgrtPtpi2su0D2nHaH/SEemk6IzovOni6A7TVdHdoXtJ95Wenl6MXp/ekz6W/jB9Df1d+hH6HwwkBjkGC4YAhhSGUoZGhn6Gz4w0jKKMBow+jImMhYwNjD2MM0w0TGJMRkx+THuZSpluMD1nWmAmMSsw2zFHMOcy1zJ3MU8TcUQxogkxgJhOPEe8SxwnwSRhkhGJTNpPqiDdI02wYFnEWSxYQllyWC6yPGWZYyWyKrO6su5iLWW9zTrKBrOJsVmwhbPlsV1lG2RbYudlN2APZM9iv8Tez/6dg5tDnyOQI5ujnmOAY4lTgNOEM4wzn7OJ8zUXmkuKy4ErgauM6x7XDDcLtxY3mTub+yr3EA+KR4rHkSeJ5xxPN88CLx+vGW8U7wneu7wzfGx8+nyhfMf4Wvne85P4dfkp/Mf42/g/CLAKGAiECxQLdArMCfIImgvGCZ4VfCq4LCQu5CKUJlQv9FqYIKwuHCR8TLhDeE6EX8RGJFmkTmRIlEZUXTREtEj0geh3MXExN7GDYk1i0+Ic4hbiieJ14sMS9BJ6EtES5RJ/SWIl1SXDJE9J9kqhpFSkQqRKpXqkUdKq0hTpU9J9MhgZDZlImXKZ57J0sgay8bJ1smNybHLWcmlyTXKft4ls89yWv+3Btl/yKvLh8hXyrxSICpYKaQo3Fb4oSimSFUsV/1KiVzJVSlFqVppXllYOVC5TfqFCUrFROajSobKqqqZKVb2k+l5NRM1X7aTac3UWdXv1XPWHGhgNQ40UjRaNn5qqmrGaVzVntWS1wrRqtaa1xbUDtSu0x3WEdPx0zuqM6gro+uqe0R3VE9Tz0yvXe6svrB+gX6k/ZSBpEGpwweCzobwh1fC64XcjTaM9RneMYWMz42zjpyZEExeTEpMRUyHTYNM60zkzFbMkszvmGHMr83zz5xa8FmSLGos5SzXLPZadVnRWTlYlVm+tpayp1jdtUDaWNkdthm1FbSNtm+yAnYXdUbvX9uL20fa3HLAO9g6lDpOOCo7Jjg+cSE47nGqdFp0NnfOcX7lIuMS5dLgyunq71rh+dzN2K3Abdd/mvsf9sQeXB8Wj2RPn6epZ6bngZeJ13GvCW8U7w3twu/j2Xdu7fLh8wn1u72Dc4bejwRfj6+Zb67viZ+dX7rfgb+F/0n+ObEQuIn8M0A84FvA+UCewIHAqSCeoIGg6WCf4aPD7EL2QwpAZihGlhDIfah56OvR7mF1YVdhauFt4fQQ+wjfiRiQxMiyycyffzl07+6KkozKiRqM1o49Hz1GtqJUxUMz2mOZYFuQ1pztOIu5A3Fi8bnxp/I8E14SGXcy7Ind175banbV7KtE08XwSOomc1JEsmJyaPLbHYM/ZvdBe/70dKcIp6SkT+8z2VacSUsNSn6TJpxWkfdvvtv9mOm/6vvTxA2YH6jIYMqgZzw9qHTydic6kZD7NUso6kfUrOyD7UY58TmHOSi4599EhhUPFh9YOBx1+mqeaV3YEeyTyyGC+Xn51AXNBYsH4UZujjccEjmUf+3Z8x/GuQuXC00WEorii0WLr4uYTIieOnFgpCSkZKDUsrT/JczLr5PdTAaf6y/TLLp3mPZ1zeukM5cyLs2ZnG8vFygvPYc/Fn5uscK14cF79fE0lV2VO5WpVZNVotWN1Z41aTU0tT21eHaouru79Be8LvReNLzZfkr10tp6tPucyuBx3+cMV3yuDV62udjSoN1y6Jnrt5HXS9exGqHF341xTSNNos0dz3w3LGx03tW5evyV3q6pFsKX0NuvtvFZCa3rrWlti28KdqDsz7cHt4x07Ol7ddb/7V6dD59N7Vvce3je9f/eBwYO2hzoPW7o0u248Un/U9Fj1cWO3Svf1JypPrj9VfdrYo9bT3KvRe7NPu6+1X6+//Znxs/t/Wfz1eMB2oG/QZfDFc+/noy8CXky/DH85PxQ/tPxq3zBmOPs10+vCEZ6R8jeSb+pHVUdvjxmPdb91evtqnDz+8V3Mu5WJ9En6ycIp/qmaacXplvem73s/eH2Y+Bj1cXkm4xPzp5OfJT5fm9Wf7Z5zn5uYp86vfcn9yvm16pvyt44F+4WRxYjF5e/ZPzh/VP9U//lgyW1pajlhBbdSvCq5evOX1a/htYi1tSg/qt/GqwCMHKigIAC+VAFA7wEAqRcAAsNm7bXVYGi95ADAFZKDPqLSkSdqDzoDY4qFsY9xxfhIGmuCJC2Odoaun76JoYqxkqmeuZnYQXrM0sv6gu0N+zTHR855riXuVV4UH46fIEAvSBQiCrOJcIiyi3GI80jwSgpICUgLyYjIismJb5ORl1dQUlRV0lTWUzFRtVCzUDfVMNU01TLSNtDR1tXUU9aXMxAz5DViMSYYr5l8NZ00e2nebdFiWW111DrFJtTW3c7EXsVB3JHbickZ7wK7Qm4od7QHjSeTF6e3yHZZH8kdIr78flz+rGRSADGQFMQWzB0iRJEJVQszDXeNoEQm7yyIqog+Qy2OyY/NjcuKz044vKt4d3Via9KrPWCvTMqOfSdSX+0XSt95oP0gNlM4SzHbMMcpN+hQ4uH8vOojd/KHChaOMR+XLbQsCiref6Ks5EZp/8l3pxZO485wnpUq1z5nV+F/PrbyQFVhdXXNjdpHdUMXPlz8WY+/zH5F4qpeg8e16OtZjaea6pvbbnTd7LnV2/L4dkfrlbbSOyntOzo07xLvTnbeuFd7/+SDnIe7uvwfWTyW62bonnly7+nJnqhewz5S33j/1WepfzkMiA6iB98/735R/7JgKPaV67D6a67XKyMjb9pHz49lvd057vJOe0IEibLFqb+mr70v+pDyMXyG/In8OWo2Z+76/OxX/W9nF0nfi39KLz1dSfmlubb2j/VXhKfRBRgrLCv2Na4Bn0sTTDCmlaJjpFuhn2J4wfiC6Q3zO+In0leWRdZVtmX2VY5fnKtci9xfeWZ5J/mG+fsF7gneEKoUzhEJF7UWkxKnEf8g0SVZI5UtTZGxkpWVo5eb3dYnf02hSDFZiazsoGKoqqgmqE5UX9P4rDms1aXdqFOum6uXoO9rYGmoaMRljDJ+b/LU9LJZvnmMhbOlqhW71bL1G5u7trV2+fZJDkGOTk4Gzgougq4kN5zbkvtHj2HPbq/b3vXbz/gc3XHQN9mP6k8h+wV4BjoHOQTbhlhRrELNw7TC5SIEI1l30kaholaif1B/xqzGYeKJCcK7NHc7J8YkFSa37JlMod3HnyqbprPfNt3/QELGoYOVmW1ZQ9nfc1kOKR52yIs8cii/ruDh0XfH1gq5ilSK7U+ElRwoPX2y+VRv2fTpX2dZyiXP6VTYnydXxlUdrC5G8lx33exF4iWleqfL0VfyrtY1dF4bvv6lCdvMeUPqpuYtyxb320GtsW0pd1Lb93ccuJvRefBe5v3sB7kPD3UdenTo8aHu3Cc5T7N6Dvam96X273kW/1f0wM7BqOexL5JeHhg6+qp8uOH1/ZGXbz6NgbfEcaF3ChO6kxZT/tNn3n/6qDKT9Kn18685rfn4L5e+vlvgWLT6nvKj4efUMs+K42r2r86t9TdBGcDb4M/odsxBrBNOAjePv0GTQXCk5aEdoTtHH8GgwYhibGdKZ7YkMhJ7SUdY7FgZWZ+wZbObckAczZyRXMJcL7hzeHR5PvGW8pnzfeMvEzAX+Cx4TEhTaFh4j4iASKuoj+iKWLG4sni3RKDEiuRRKWmpNmkn6UmZVFlR2RdyudsMt32Tr1LwUqRXbFOKUhZU7ldJU1VUHVPLU9dR/6RRqmmhuaB1TttB+5dOna6HHk7vuj7ZgGhwxzDKSMCo1zjNRNlkyrTEzA5577hlEW0pbfnOqsza04bN5pltgZ2jPcl+0OGEo4+TiNMH5ysuia4mboxuQ+6VHjGehl50XoPep7eH+Cj6LO+455vv5+0v6b9I7gw4GugXpBSMDh4MqaWkhDqHyYRjwt9E3Iws3pkQ5RatSeWLQcfMxA7EtcfXJ5TtytudmpiQFJYcsGf7XvcU532OqQ5pDvsd050PeGRsPxiYGZYVk52Sk5lbcKjscE1e45G7+X0FI0c/H0cXShZ5Fx85ca9k+aTcKf+y46cfnVkpVzwXWFFyvqcKXa1dk1BbX/fxotSl0Pray7NXVRv2Xetu5GwKb+68yX8rpeVtq3VbS7tCx4VO6XtXHhg+HHq0q5v/SW/PoT7nZ2IDYPDji3dDH16DN6JjO8ZrJzHTiR/Bp4o58le9RfWfLivF6+u/+Q1uvWFVATh+EID1bzKONQDkXgBAfDcA7EjtaU8PgLMGQAmaAWihA0CWOn+eHxBSeBIACfACKaAOzJH6MhypKYtAPegC42AV4oBUICcoBjoONUOvkZpPBuWKSkXVo0ZgRtgQToAvwpNIleaNLkW/QioxX8x5zCesKjYV+xTHi4vAteFJeAq+nYaLJo6mn6BEKCKs0JJpn9Bp0FXTc9DnMqAYkhi+M8YxLjIlMkPM2UQ2YgVJndTLEsqKYz3PZsI2yZ7JIc3RyxnLxcnVyh3AQ8tzldeTD+a7yO+FVAR9gnlCdsLMws9EikS9xATFJsUvSMRIakpBUl3S+TJeSHTOyfVva5GvVChQ3KtEUXZS0VTlV4PURtVbNI5phmrpaDNoD+vU6Mbq6enj9fsMGgyvGTUZ3zRpNb1r1mXeYzFoOWI1ZT1vs2yHt2dzEHNUd7J2Jrskuxa7tbpPe5K8DLyjtpf7DPgS/Az8k8jNAd+D1IOTQtpDCWEu4RURCzvNo8qiZ2O0Y3PiRhKUdx3ZPZ/klnx/r05Ka6pV2nh6VoZOJsjqy7l86GReQb75UfjYvcL84sASo5MyZUJnRMuVK2wro6tLax9fBPVqV2wbPK6HNCXfOH7r6u3+tsUOvk7z+7EPzzx62r3aI9u3/dnhgTsvSEPk4YsjM2M84+oT+lMK7xk+PJ85/HnbbPu8+ZfOb4oLJYtLPxx+nl+aX9FcTfl1ZyN/bK4/EVl/SaAGTIEbCAV7wTFQBzrBCPgBkSB5yBaKhI5ADdBLFEBJIlV+GuoK6i1Sx1vD6XAbvIzWQe9Hd2M4MEGYRiwN1gfbiGPCheMe42XwefgFGm+a+wQ5QhEtTBtNO0bnQveI3oi+lUGb4TZSxT5kcmAaQerUNeIxkhzpCUskUnk2s/mx07I3cwRxsnE+4NrNLcM9xlPEa8eH5+vg3ydgKIgVfCJUKOwnIieyItotViYeLWEiyS35ReqR9DmZFFkvOa1tkvIcCjQKK4qzSuPKz1Ueqd5Su6BeonFQk6rlpW2kI6XLpLugN6TfalBveMWowbjJ5JZpm1mn+SOLXsvnVm+sp2zmbZft8Q5sjuJOGs42LgGue9xK3G94DHmuegttt/SJ3XHGt8cfIqsGRAbWBE2GiFFCQ6+ELUWYRRbunI7Wpu6JaYtDx1snFO2aTNRIOpw8tdckpTqVIW33/ikkn/RmWmY9yDHP7T7smDean3KU79idwqBihhPNpQGnSGX3z+wpVz335fyVqrga7TrshYFL5y8nX/W+ptrI0DR+49qt/bdt2zjujHXUdFLvaz/EdQ0+rnmyr8e7T/eZ6ADz4MMXLi8nXiW+Zhm5Ouo8tjJePeExxTjd9SFzxuoz0+zz+TNfQxdUv6N+9CyVrgT/UtpafxhgAd1GBpAAqkgEuIMIcACcBrfAELL/hSBLKA6qgAZRtChjZOd3wHjYAT4Nf0FboqswNBgq5g3WGdnttrgBPBn/k6aQoEGYoD1Bp083TJ/EIMDQxZjAJMU0znya6E+SJH1necBaxpbE7sWhzynNxcFNy4PiWeFd4lsRAII45A2UV0ROVEfMUTxYYp/kCanrSN09J8e0TVHeTWGvYoVSj/KyqqSah3qBRr8Wi7aHToXurL6OwSHDN8ZKJjmmY+baFoWWX6ztbS7a0dmHOzxyknLOcfngZule60njRfF+4CO244DvhL8RuTIQDgoIvksRC80Im46wjqyPYo3eRR2NNY67lMCxa+/uj0nuyD5VTalK5Uw7nI4+kJzxJdMz60r2Wq7zoarDS0ec8i8dJRyjHL9fJF2ce2K21O3k7TKx0/lI7g84131eq7KqmrkmsXbygtPFlnqxy3lXFht8rt1vlG060jx30+HWpduE1qC21nZiR+Ddxnvo+/YPSh+OP5J8TOmufDLWw9Xr0Heg/9qztwOEQfnnji+oLw8P1by6OzzwenJk/s3KGPQWN459h50AE0uTn6ZGpp+8b/5Q/jFzJvKTzWfpWdzsm7nm+awvnl8lv3751rKQtmj8Hfu980fKT62f80vnlz1XCCuNq+Rf9L+urnmsr39MkJLixuMDojMEADOytvZVDABcAQCr+Wtry+Vra6vnkGJjGIA74Zv/62w8a5gAOMO9jvouL/y3/1f+CygpwiyznZ4gAAABnWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zNDY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+Mzk1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CsV2cm8AAEAASURBVHgB7L0HYF3Vle+97pVly0W23C1XuWMDxoVqOoRmJgUTmATSnWQmk2Rm8sjkfXnhvW9eHsybycebzEvIpAAZUkwmBZNGx6ZjwMY27l3ucpdcJVvlfL//Obq2LEvyVbnS1b1rw7XuPWWfff577f9ee+21144FJPPkCDgCjoAjkDIE4inL2TN2BBwBR8ARCBFwonVBcAQcAUcgxQg40aYYYM/eEXAEHAEnWpcBR8ARcARSjIATbYoB9uwdAUfAEXCidRlwBBwBRyDFCDjRphhgz94RcAQcASdalwFHwBFwBFKMgBNtigH27B0BR8ARcKJ1GXAEHAFHIMUIONGmGGDP3hFwBBwBJ1qXAUfAEXAEUoyAE22KAfbsHQFHwBFwonUZcAQcAUcgxQg40aYY4IzPvsqs4miZFa8ttgq+pzRVVNjujWts99GUPsUzdwTaHAEn2jaHNIsyrCq2By+JWff8vjZm0tetOGWvXmHP/K/bLda9uxWOn2wLdlSk7EmesSOQCgScaFOBarbk2WW0fWvRapuj9/3aHJvUJVUvnmez/vvT9uQXlP+37IZxeal6kOfrCKQEASfalMCaRZluWWqP8br3XT89tS9dtcaeeYRHfO0GG9ICQt/94v0Wm/aEuS6c2mry3BtGwIm2YVz86LkQwF4qm+yaRQvCK2+4ZMi57mjV+YqNEaE/cHdE6BVHo+cnm2kpHUKLk+zQZWXGK3tyBFqEgBNti2DL4pv2L7UHZ8Wwl860O3NjNvke9NmpD9j0xngWdiqDpM79aZrFil9/EtBn26TyBXZnTHbh7tad5z/2dllyldEia0OFLfwFmjDPufcbX7fu3WN2/59SZ4lO7kX8qk6JgDZn9OQIJINA+ZontZFnYF97MijnhvKFD4S/p337rUZvX/09rtc9SXyWKNMGU3nw6F2JPKYFTy4tCUqWzg2mKc/bHg3L0uBtdQ5ufmJ2YFPn1jlyjq+VJcEDU/XMOcGSUl27OcAWTR7JPe8cufvpLEOgBdauTtmfeKFbi0DFUrt30p3k8oCV/Otsk4JYUTA6zPXemyY1mvukj6+2ty4ps7wuTauUMkOMbkwaj2Kf/W30iEc3LLHZ4/heNc309KXW/exnV5XZ0teXWCleCuFZ8l3wnXlcN8kWvL3w1B3l5eXWd8R0mzau4Kw8lv7HHLt/mdncNQ/btPB0oX153lybPX5W+O5n3eAHHIGmEMiyjsVft4UILPnOrFArfXhpqN6FuSz5no7NCpYcaWGmSd5Wuuih8Nlznlh9+o4jS4JZ0jC/9vTpY4lvlaujc0lo0fadJYm7Tv8tXx3MDvN+8vQx/+YItAKBxnSIprjZz2UbAvjLzv3GM9hiH7J7p9Zqfzr2txy7ba5N6tU4ILtf/IE99GyJ5TWt0DLRhMb4nS83qNWueXkuD5hlcz54WnNe89QPjKfbQ3fPPPvhXSbZ02irZbWzV3k8fOkjd9rMn86yktfnWEEVE2m1d+Xlna3NauJN+u/saaefd/ZD/IgjkDwCTrTJY5W9V0JMxeHbF5waNj9zyRj7Pxy775NXmO3fbWUFQ6ygIWmqKLH/890HbdpULKqNpqW2dNkcm/NPXHBWHrttwTfwGJiKn26C0HcvsHs/xSTcF+baly8/myjDx0CuBXXYvSC8rK8V9MrjHfRfEylRhgQb1166e2OZDWnAzNBETn7KEQgRSIiUw+EINIFALeMsK7ZieRD89ut2+7Lo8r5Hn7GZA4vtycqHrCHKG/LBBywIHmgi73Oc2rHE7ueSaffMjPLfvdDuLLzRlt72sJX8+z1NE+Y5sm7sdB5krFS8ZqmVYdctqNptT/xNod074i0L/jsdiydHoJkIuHtXMwHLysvzJtmcb0ojfdAm9+1rM9fMss0rNJw3u/+LC+wH+x5qcMgfXtDaf3oV2n1TmfT6xhz7+hdZhls40yb9/C0rf+bLzVu4EPYV5cmVZvhse+t7c2zpd++1vriSxXILbcnVS5xkk0PPr2oAgZjsuw0c90OOwFkIKHhMRRVD8gJpfPjH7q+wggEN6bFn3drqA6eeLW2zBeOw3S9jK148yR74hxuS14LlA8wnrxcmkxY8s9Uv7RlkDAJOtBlTlf4ijoAjkK4IuOkgXWvGy+UIOAIZg4ATbcZUpb+II+AIpCsCTrTpWjNeLkfAEcgYBJxoM6Yq/UUcAUcgXRFwok3XmvFyOQKOQMYg4ESbMVXpL+IIOALpioATbbrWjJfLEXAEMgYBJ9qMqUp/EUfAEUhXBJxo07VmvFwdjoC2r9m9m9gO9YLLdHjBvACdDgEn2k5XZV7glCNQUWw/uJvtcojrUFjY1/qyhc2d/9+CU6EVU/58f0DGIeBEm3FV6i/UOgQq7InZY+wrv51jc+c9aY9+O9xM3eZ940a7/6ndrcva785aBDzWQdZWffa8uLYaL/zGZCtfmkRYxd3PECFsgW0m7GNia53dLz5ohTcTrPFrT1vwr+zr4MkRaCYCrtE2EzC/vA4CBAQv6wADpiJ5lbHdeLKpOVuNV/A+jy64/xTJ6hlDrp9toV6rLc6Tfahf5wjUQcCJtg4Y/jVJBLBhPvFfiA2bO9Nu6NvdYrEHbTebKzaY2mi7ceVd/PITdjvxYWd+7ut2L9uNx/7bM8kRXxTHu8Hi1T+Ydx6ken290I9lJbaEC2ddMin5EIv1M/bfWY2AE21WV38LXp5tZG7vPsbufXmWlQZL7Mmfs42hvWUljRDtmke6W18mlc796W5Lm1AXF/yv6Tbmhntt9qJSW/KbR23OXTz2f//A1jRxT+LtEjvwNoNvE7eGf3cvXcBuu9Ps/jt8D7EzgPEfSSPg4YyThsovNLZ0uZ9tZJ6x2bZk4ZetYP9Cm/MptjG8iw0aG2GxtthuvGLZY3bj/1hq7IJrcy6OtM2Z33jS5n5ykk2r/9w22Gr8jJpmm/U5Nz9o9/1xs10x4Iwz/sMRSB6BVuyg67dmGQIl8+4Lt/1mN9zgyZ9H36d9c25QWplKIMqDuXexrbjdF2xO5jmt3Wr8jFcpDR6dyrO/89YZR/2HI9BcBFyjTb5PyvIrK2zBr7TvLamwxCoK7rSS0odsSD1zZnTB6X9bvd049uAnf0t+d023wmSktZVbjZ8uOW5ed/e1z1+Pp8E/+IaMp3Hxby1BIBnRbUm+fk/GIjDHNj+D61Pi/fYX2+4uoxsn3FZvN177oKOJB0Z/y3bstrwhQxrey6s1W43XPmbBf+tu9w4/052rYuUT9pWXJ9mjX21q6/Qzy+m/HAEh4ETrctBMBB6zeX+6z75822i8AB6zyTd/xeaXBDakkVxavd14l7yI1J9dzVbnZpPQoJf+6us2/Z5CJuPuS4kXwMLv32k3/m9e6LYF7Lw7jy3HlUrtsUfm2dw1Se6kG97j/zgCtQg019bg12cxAtvnB7jrR3Za/Z36rWBJaerxKF346Oln8txpX2ueXXj1T2ZR1keD8iSKWr5mbq0detoZz6S5kMfDQTu8bhKl9Es6GwK+Msy73GYjEG79jS5ZoK2/2ytpcQQLBvLy2Pq7mY9t0Vbj7fVe/pysQMCJNiuq2V/SEXAEOhIBX7DQkej7sx0BRyArEHCizYpq9pd0BByBjkTAibYj0fdnOwKOQFYg4ESbFdXsL+kIOAIdiYATbUei7892BByBrEDAiTYrqtlf0hFwBDoSASfajkTfn+0IOAJZgYATbVZUs7+kI+AIdCQCTrQdib4/u3UIEGy8omy3rdm4u3X5+N2OQIoRcKJNMcCefYoQ2PiM3Z6rLcELbfLfLkjRQzxbR6BtEHCibRscPZf2RmDcLHt6w9zwqfd96Yb2fro/zxFoFgJOtM2Cyy9OJwSKV2jLRLMbpjUWpDGdSutlyWYEnGizufZb8+7aers2GHdFM7b+bs0jE/eGzyOa18JntePDt2z6OXh24SMP2hOLo6iyiTyS+avnsImvJ0eg1Qg40bYawizLYPdSu39WzGL5d9q9V/OX7b+7599vxY3sgiumKisrS+JzbkYrWzbP7tTzrr6Trc7ZAeERs2nfvMGGNBS+PlGeqmJ77Iv320MLi6OKShxvotq0rfl0njPz7pnWvXvMHnzRJ9uagMtPJYNAZwug6+XtOATKNzwZBcP+9vwoiHb5kvD3tG83vnnh6u/VCRReN2h4A9+XNBGZe/W8b4XPum/e6hCAJd+M8n1gQcOhuOd/TefvC5YcKQ/0/aFFpUHpwofDPOZuaPxBb31vdnjNQwuV7+qAzdSDWT+JntlxyPuTOzsCDekCyfCzX5NtCFStsa+Mv9PYZcBK//sN0RYyZSUhCvfeNKlRNNpku3H26po8+0Gzb863h+6InpV34RyeuQT7LHvbNJAKr37Apn33fpuev8bYFcKe+e4N9nVbatNu+5ZNGtBw5PDdL95vM/92ns3+yRK77/ICW/j9OcZm6jb3+lM7pDXwJD/kCCSBQGfvKbz87YPAklpN7+Glp7XB1U/MQfubFrzVsFLZRgUrDR7Wlt82G+00kSXbgN/GsdvOsT3NkZJg7hcizZemEDy6cHMig7P/Vm5mB7Lo2gfmPVn7fVowd2lKX+7scviRjETANdokOqOsv6Rqtz2JpmdTH7J7p9Zqg9g+597zWKjhasPExlKrtxvfuMC+sgw6//bXbVqv2qfsWGCffxbq/cnMRjdnLH7q6zZmNpNlaLAP3PWgLbnwAfvBFWPs82Tx5IbAZo87s8QVGxda7WbqVrqjwu5cUWIPXXCOWbYzs/BfjkCjCDjRNgqNnziFQFWprdGP8YWW4NQF94wxBvM2529mmu0utrIBo62gIWlq5XbjFXgXKBUWJJ68224fgQmDdCdD+jJWhRWMa4AQu/S1WV941B7793vtrXsetOIL7rHH1kyyeyfNZa+z8PYG/5nzBAT78dP5Fa/dbaPPO/27wZv8oCNwLgQyUk/3l2pbBMqjSSGb+kCwel9JMP877CpbO8ye/TWZD+4LNle27SMTuZWviHbAnfa1J4PS0s3Bo6dMAbODh793X2BfeDJxacN/K2vL/r0lDZ9PHE3sfnvbQ8Hq0vKgfN/q4OG7MCV8c37iCv/rCLQYAWvxnX5jViEw/9unyXXWd+YHpQkPBM3sp9KMWb45eCC00Ub2U3kdRLZhft/1aFLbf5euWUIHca7qwjvh25HHQaIT+dYT5yDnc2Xp5x2BWgR8F9xzqfx+/hQC2mbcupze7lsO/XnttOV4Bb64lthqXL65LJYoaMR74FSBW/JFefPJ68V7NmQKaUmefk/WI+BEm/Ui4AA4Ao5AqhHwlWGpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegScaLNeBBwAR8ARSDUCTrSpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegScaLNeBBwAR8ARSDUCTrSpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegScaLNeBBwAR8ARSDUCTrSpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegScaLNeBBwAR8ARSDUCTrSpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegScaLNeBBwAR8ARSDUCTrSpRtjzdwQcgaxHwIk260XAAXAEHIFUI+BEm2qEPX9HwBHIegS6ZD0CDkC7IxAEZjV8qvlUVpsdPRlYablZ6cmYlZ4wKzlQZRXVXexABceOB3b4WI2dsLhVWcysKrCuQZUV9Mm1Xt3M8jg6rE/chvaLW5+uZr27Bta3O3+7xaxrjlkOqkQOt8X4eHIEOgqBWEDqqIf7c7MDAQmYpKyqxuxEFeRZEdjuw2b7ymO2ucxs50Gz4oOBbTsas+IjZhUnIeJj3AMJc4sl7g+/8FukGX70HXLVsCyvj9nIHmbD8mqsqH/MRgyI2fDeZkO7V9vIfjlWAPnmQbxduDjOx3kX0Dy1GwJOtO0GdfY+qBq2lGa6C3JdWxaz90oCW7HTbAff10OyJ9FmQ0ZNsCo/m9P7nyJNfan9EYdYRbQj82vsopFxu3i42cSCwEYVmA3sFQsJN3trxN+8vRFwom1vxLPgeQkN9CQa6SFMActKzF7aFNjS3Wa7S2O296jZEci1qhLzAdeEpNocZk0CQ2m80lxz0GJ75pkN6sWnT2AXDo3ZFSPNLik0G9E7sG5dYqF5IYks/RJHoMUIONG2GDq/sT4CCYKVBnv4RI29t63a5m/vAsnGbBNkewSbaw2mg2apq/Uf0orfMZEudt2B/cyuKArsrgkBf+OhTVe2XP53W24r8PVbG0fAibZxbPxMMxAIJ7i4vhwtdSca6yPvmc19H8LFBluFzVX2WV3ToTMC0nIpozTdLrlmuWi514wx+/vLIg23h45Bxp4cgbZGwIm2rRHNsvwSWuxxCHbD/sDmbzb75eqYbdjGxBdmA5kG0jZBvHlouL3RcD86utLuntbFLsK00JMJtlwxsidHoI0QcKJtIyCzNRuZCY5VBkxwxewxtNjn15kdLEVzrdVg0x2XhAdDLtrsjLFmX7zU7MZRgRXmu+023euuM5XPibYz1VaalVXmgN24Y83fXGNPrIzboo3YYY9jJkhnLbYRDEW4XdFkxzJJ9rELauyjF8ZsbL9YaErglCdHoFUIONG2Cr7svDlhLtgHqf5mldkPFgVWvCsWuWl1dkgwGQwfGNjHpsfsy5dELmKaKHOy7ewV27Hld6LtWPw75dOlyR6EZJ+AZP/ldbMD+7HF4k1Qw/FMSF1YL9kbH9xPX2z2hak1Nm5g3LowSeZkmwm12zHv4Cb/jsG90z5V2mxZeWDzllfav70R2P49kT9sppCsKqaKTuMQ3hKyOf96Vdz2skqtM5pDOq2QZWDBnWgzsFJT9UoiWcUmWIiZ4EdLc61kb8w0GdahLlspelm911Em9R571+x3q9HaWWCRie+ZIvg823oIONHWA8R/No6ASHbdviD0j13NElppfplMPtLS96LZ/gyyfb04sGMEv1EwHE+OQHMRcKJtLmJZfP0xFh78YVWNvb4ezRYf2WwgnUo6k1WsavvDWrM9mBCy4Z2zWMRT9upOtCmDNnMylhKnCbBtBIV5ZnPc9vO3o5bRtjeq0tgr6WAWbInZmztjVgHxenIEmouAE21zEcvC60OywWzw0mazpSxMkJaXdkkrJBRIoYYlavqrQutYNSwZBlhoeYmVVSn22qdWMklGiEf99uQINAcBJ9rmoJWl14pYNu6vCVd9VTF8Fn+lXaqGYHctJlTYDwl0y+yVCLeSGaxNT5tteb7VGrg6l9WEd1xVUh0GLHeuTTsJSOsCOdGmdfWkR+Fkl9xI3NiNWlqb7KqvhEZZww26KWTntqYn8lO+YYRwiLXiACrnZoIsMIN1eBfE+zYfHH13vcW2DYuIeMMLhDaPOveF95+759BrbD1MLN19XeyEXqetXyU9qtpLkSIEfCubFAGbSdlWwkMrDsRtj4g2GYLRRZXERDx5COMuf2P0513zzbr1IXRWU27/DWXexPVyezihZ2iWikLWMEOnCOIi3pMYkvfiCLt7Ic/tb9ZjqFmvIdFWDCLXE6wd1jWKndiV1QkqXxNl0ytVs0hj4Q6zT11ENkT+8uQIJIuAE22ySGXpddJm5W2wFZKt4W9DVHgGNFL9jrNUbMtzrGxYFxFtFQzVa5jZuLvM+o2F0CR2tQQq0itHAz2AAbS6rrMq5xWAoAfk2HcccQ3ZMkG/lXSPCLwEvyuZBUS0Ikv2ErNKnqW8e48g+Cz3DpwOKw40yx/J3768BNfs41lbnqWcrLZQnvlFZqNuNSugbLkEPGgs8fJ74ebdh2psSE86j9riNHa5H3cEEgg40SaQ8L+NInC0osbKjsWTc22SZrlbBPi02eBLIDrI68g2mJrfsqNe/A00zHpid6jYbOUjEN/eiERVEhFgjOsKrzC74LMQNRppgtlE5gc3mq3/TUScI26ISHMr5N6F7RREgDnc23eiWf8p/EZrFblLsz6OeWH1f0DOaL/KW7bcHS9Txq1m0+8z6zP89HP4VjdJq9XmkWVwPF89OQJJI1BP4pO+zy/MEgREKJWEyz4KfyZlNhCp9T/fbNrX0RDHRIRXDrkdhWxlP61ANe7aA9ITGyrxt2C82UV/G2mp0cHoX13TfQCaKJ9T13Oq8hhOrUx8yUQw6dNmQ6ZGpoBqWHAf5gLlKWItvPjMQotUt78CSa8hJiKEP2QG5I+Gm9cP28iPzfavQLuFaOHjxlI5OFTWJMre2FV+3BE4EwEn2jPx8F8NIKBtu/OI15pUisFEPSBGDedFhuWYEQ5DsCIxkabI8azEMZGb9gVPsHnIZSJMjsegezF+gt+qUSmP7iC/gZgIRnIf0bvZZtz6SHvewoVKXCzST9yjDEIiXoItZDdmB2y3h4uj8hzfF9lFjrLcLSxf482iF+XpmsM7Gnl7cgSSRKBxiUoyA78ssxEQT3WBpPLFWZosaogn60KgIfmON1mrOzcaxsvGmosGq7/SKOsn2VvLILz3fxAN/8PtcHURz4rD7hreT/50NJGVIDfdI4NxnELlcE1oZqi9XuaGhhI8G9p2NaOl+zSJFrIwJ2TbHXI5RD2m9lhDGUTHemAq7tPDSbZxhPxMQwg0IpUNXerHshEBEW333MD657HjAPxS2QBXnoGLzASb/wC59oQgPwMrFUVuVWWbGyZa2U0LuGbKF2tNB2LE2qRz0lo1iVV3PC8NVsR9aCOabQnnC6J7j6OpytOhoaQXkTlBk2LSrMd+xGwAJg7ZjUvX0Tm8Rpl7qTdp6O7wmE4Ngmj78alryWj0Bj/hCNQi4ETrotAkAiKUXt3iNga+C+eZKlAAG72DM5qokuaqG6V5njyGCWERpLgBciw8+05d1x0bafeZZ59r7EgXSHwAPlb7MQNsfT4qmDwINKkll61QUxWz1k38FtEOvwm/WswGJfjW9hjE9UciDwSR9phZ0a11b0t85/YYDglT+ldbbzYUi4XPSJz0v45A0wg40TaNj58FAe0wcOUIvLMGmy2Xwtgo08JGPSHTMR9mcumHZu99B22zPxmgAg66OJrZl6tXa0mqC4w38EK02Q+YFf8R17BVaKb0ACcOQtiQZ+hhUJ9o9VjEfeBks4n3sGJsHhNnEHW4PJdrJ30KL4VJXNPAfbqVw3qN84fE0fBb/Qbk6CmbEHCizababuG7yjQ7qk9gVxbGbNUWuOkEXNsY2coPdcT10XD/6C60TYb5fcbxF5Y6tInjDNsb5rLkS6cxfF4fs9FooMpbE2DKX94DSn3G84wG7KghW8KSo2+JTBqHt0SdRn4RGjLE3ZWyNpK0w8L5FH3GsJh1E9G29h0aeY4fzkwEfCubzKzXNn0rcerJqsCeWx/Y5/8ct4P7IgtB4w/hjpCJE2xcl5X43lYsdcYz6j7rHM84dV+de8Iy1S3nmW83qCCwL84M7GtXxkMb7Zln/Zcj0DQCjVv+m77Pz2YRAqKfXFyvZgyP260oi3msCWg6iegQrdC9ClUw/K7f+jROZk3n2cBZ5XUqbz0n8axzPOPUfXXuaUTN1qVyUpjKeokPjMasizbryRFoLgJOtM1FLEuvl/mgP6PzT04J7ILCIOK0c/BZJkCl9x6EU8Os82M2dVgcH9pMeCt/h/ZGwIm2vRHvxM8TyVw0KLC/OI+1/pCPJskyOkGyPXBw+ADzZ7dNwDMME25bKuQZjZ2/3BkIZHpTOeNl/UfrEIgjLQMIpnLXlBy75gJIqAfD6gyVIBFqV8wE43G7/eT5NTY0n3flGP97cgSajUCGNpNm4+A3JIGASEZabBHa7H14a11zXmBd0fgyTsvjRXNwnhg/2uxrl5ldMjLuttkk5MMvaRwBd+9qHBs/0wgCMiFMHhjY31/KBXx/eTUurKxLqDrX8txG8kurw5CsJvumjKyxv8PD4OaxeIJhMpA268kRaCkCTrQtRS6L7xPp9OgasysYVvdhgmwIJoRnl7PgivUCWgzWWVPowACpXjXR7G+mm10vkoV0M05j76wV1InL7X60nbjyOrroCgp+gngsWw7W2K+XBTZ3aY5tg2xPSrNNuKh2dCGTeL6IVLbmfr3N7mDdwmcxi0xmcUJPzAcZP+GXBD5+SesRcI229RhmXQ7y99dHYQ3iEG2/6rjdpHgsLNH9TzTcbYSc1UYH1Wi3igOerkkEKyLNRYvNZ6XwPX1r7FriGAwhMFgu7xauzsU0IhJ2rTZda7FzlMs12s5RT2lVSkXwOn6UbV12EDJgJRsWvE1sl/dw6r+BCaSPYUbYgYa7Pm779hLytZyii2zTTMOVmaAbGuuggbhvjYNkz6djwPzx1D+bDcV0MJlJsHGYD4YWEfKWyT+tLM5UD4u0Eq4MLYxrtBlasW35WtJeq9HwThK3pZTltzs3E24Wct34PgGz+ByCcPuONBsGQZ0/NLARQ8yuKDJ7sdjsjU2Bbd0XsyNouJosk7mho0g31GCR+O7YXUdAnhcNN7txdI1dPTpuIwidsLUM8kW7XfF7dsl5DtszRDsaAp4A6RZNwrWN9+qJeUG75DjptqWEZX5eTrSZX8etekOR7EmCyOzcarZhmdnaN9BiFxP5cA1hZokwmDAN5KMZFk6AiLrHrG+3mI3oyxZcBPK6rSiw+RDuW1sJSCMNF01Ycbbbm2xDksWsMWkQHgUjArt1XMwuG8a2Zj1ihIGEODEj9OmHBjuG3W4W0aEc5gPZbn6FIGTPEFQHv+GJV5qdB+mO4j378H5uTmiVaGXVzU60WVXdyb+sCPZEBVrrakIjvgbJvoD2uoVAWWi02qlbO33rGnnwy87Zn8mjQRCXtD0lkdCgnoa2GCO0YMw+iEYool2xs8YW747bhj2RhlyJlluFaSHMSzcqz5YmnqkUkipl6sKnm7TXvoHNIFbB5KExu4AOYRTa61A++TIHcHHCdasnx0ailS/D3nyiPMrrJPba/RvoILZDuu+aLeYdiyDbC26EtNF4Bwx27TZCyv9tCgEn2qbQyfJzssUewotgzy4+O9lqayvkyLGQGGV3JYW2TobTQ6dCXPxNDKnFeSK6LriB9YDQtLJqBhruoYkx2weJbTgAaW06aW/sybXlmBaqITRputqyK/xAuOLcUwSsh9VLIa/yj4g1EU9Gu9/07gFhQpqTINWrR2E3RvuUaaA/xN8dic+BWRPkWjdLRUkcjtdBb0j5MB2KktzVNKmn3c1P0FEcIg9tvy4TiHac0LM9OQLnQsAnw86FUBafF8nJNqvdXg6XMunFhNdLP+PvnyAdyEZJGmy/kWaf+A4rxT4EsfK7IfJJkGaYJz9EVOEHEjsA8S7fXWPF+wPbcDhuGw/HbP8xNsw9EVgpKnO0RVgA8bKvAeStXW0QXFZvxawnxDoSk8CU/ErL75Nr4xj+j86vtpEFmDB6xEPi156PIlZ9QlIOS372P1W85/bNZo/8HeV5/vR5brNx15jd/Nds7nsl9mi0d21VpqheiY7l9NX+zRE4GwHXaM/GxI/UIiBSEnGKTHqikfbiU4WNNYfhuL6XY8fUNQXYPYeMapxklZ3IKiRgvsBPZyRpvEPYXrZydICDAtotJLzvWGC7yqoh0y5s7w2xH6+yKnZIiMGaufHA4hiHe+XFLZ+9zPpSnqAybn0pUxflDwMmiPWMB53jh4izH+8yCI1WLl/qZLpC4ip3BeaSk8f5zbMUyzz0r9VLeXIEkkDAiTYJkLL9Eml6m7DVPvswf1+FFC+MTAXv/xEChGyHTYds0fJCIm0BWCLFbkhiV7FkbSpgQm18v0g84V0SKuSppOtyQvI+fSii79M5nDqT9BeVXzbd4Rez8u0FOhK8EMZfFx3b9AZeFD+kgykwu+ymqONpzbOSLpRfmBEIONFmRDWm7iXkcbB1o9lzj+JxsIDJnzH4nX4h8jDYswpvBD6jLoKAsIG2Np1BXHV+1Pna2kc0eb+IVv6ywydgp8Wum4t55PI7ME2M4/3RYlc8y99/heJpNZfcgL0Xe62bDpqE1E/WIuBE66LQIAKypco2uq+EoDH/ic3yGS6DhK7+HBrdbdEQ+jzI5sgmiGg8pMMEVCYkTXANxHQwZCI25PNw50JbL+J7FaR7YC2r3pabPfNgpNmej+abx3u3VJPPBLz8HZJDIOcfScld6ldlEwJaXiuPgxd+YfbqT7FXMut+w9+b3fqJyI6Zh+2yBlKqxBXq4usxHfTPHO1OHcxhNPnh5zP5NRPTAe/aFw+GvnQom9DqS3bg8oUpZTAmlP5Dovd2ss2m1tH8d3WibT5mmX0HmqwWIcjL4JUnzeY/Bplih736S2Z/8ZlI2ws9C+KRVjt4FDbakXxnaJ0pZNMlF9NBv+hd5ScrLVfHtDKs+2i02oWYTNDkj+ICNhQyzsduq4m0THn/zBbwjnk7d+/qGNzT9qnS5o7hWrUQU8HvGCKfOMQKrzvNPgzRDh9zpvYmrVcmhkwjGb2TJgDV4dTtQPT7KHi8+gezp/8JnI5iq72biF9fobOpxSZtK9YL1qEIuI22Q+FPr4eLSI7jxrToZUwG/w6R7IdkmQy6+ZNMfo04k2RVchFsJiZpppoUq5/kHaFYB5ffHLm2vfZTsyV/ZDnuoAijQSzIkPZ7pjtE/Vz8dzYiwADQkyMQIVDBwoGVi83+/ADLbVeYjbkMDwNssuMugHgyyDTQ4vqGaEWk8rW9Fi3/8nvIic7pjZ+xkOO3xEagY1Jn5ckRqI+AE219RLLwt4bKWm67gRn1Z/8Nkl2PPXIoW2x/GZJlwkfuTG5/PC0Y0uRlu70Bs8FMOqKK42YLvsvnKbOD2G2FpydHoC4CTrR10cjC7yHJMsO+bYPZ8/jKrn8bZ/1ekOy3WNZ6hbsvNSQS6nTU+SiIzl98gdCQH8DkAtm+BNm+8XTkrVFd1dCdfixbEXCizdaar31vTX7t3GL2px/ikP8c/qHYIGf/C5raLcyw49bkDvmNC0iCbO+8z+zC26JANPMfNnsHHDVp5skRSCBAv+wpWxGQ1rVvFwsSfsOkDjPp2s7l2s+bXXlrtNIrDOCSreAk8d6hZosZYcQYsw99lVgIeCEUv8lSXchWHdaMGyMXOO+skgAzwy9xjTbDK7ix19OkzaFS7IrzCMr9BJorw+ErmNy5djaLD/AhDWfPG7vZj59CQGSr1WHjsWXf+leskruIzSrfxYzwOPFr1zA5hgucJ0fAiTYLZUB22UMHWJDwe7RZtC/Fgr3qM5DsR6NJHtdkmy8U2gLnQmzaN/0NS3bx1ti0kP3HwLZ4HRON4OspuxFwos2y+peGVX7U7N0FaF3YYg9DuBOvMbvl0/jKjoxWQLmHQfOFQp4ICqwz/TrI9u/4zpLdlZhj/vgIXhzFdGaYadwbofm4ZsodTrSZUpNJvsdxVn0tfQM74ndYr7/bbPREsw9+5TTJJpmNX9YAAuqgRLZXzYJswbQHZLvkV/gl480hsnXNtgHQsuSQT4ZlSUXLJqt9sNYswo3r39maZjv2xAvM7vzfLEwgSpXiF3hqPQLSbOUed91HIv/aF38A2WIH10qzmz/BxNlYHzW0HuXOl4NrtJ2vzlpUYpkMFLz7+cfYimZ+FAbww/ezySD2xO4Qg6e2Q0CarQKh38Lk4lWfIl9+v/642WsQrlaPyaXOU3Yh4ESb6fUdRAFSdm0hjir2wg2vExyGGXJN2kyZSQjAbpkOQMe8n8i2d4HZjX9pdimTjPy0t38J4TIBWY75xpfqdky9dNRTnWg7Cvl2eK4mX9Sg95YwKfNTttF+ChsivrI3/BUxZG+MdhHI1MAw7QDvOR+hBQ1Di8yuh2wv/ABB0pl4fPEhs/feiOy1Pjl2Tggz5gIn2oypyrNfROYCDVWfeZywhz9Ge8WJ/qrPslvth4k4ha+sexecjVlbHhG+sn0XYQO//at4d1wc1cfv/gm7LSMLhWJ0sm1LxNM3L8TAU6YhoMYrO+DBvZFd8N3H+Z3DEPYuJmkIe+gk2341LrJVTNvxF5jd9g9MkOFTW7yEeLZMSOYSTHzSdCbP8r3Ta78a6ZgnuUbbMbin9Kki2qNHWHP/Z4aq/5chKxGlpt7CMtG/jgKhuCabUvjPylxLcLW7roL03Pk/cKWbxKoxNNo/fB9f23fxBqlwzfYs0DLsgBNthlVouEPCYUj2eVZ+/YwFCdhnp+LX+RG0qUFDPUhMR1a3XLy0oeOdeHsMmwLZYqt9kTpavThyvXMzQkfWTmqf7aaD1OLbrrmrocopfvV7xJWVr+wahqzXsgYf+2ARWpT2vXJttl2r5IyHJTTbaVdHO1k89R38mnG1y8G00IdJylHjPfbvGYBl0A/XaDOkMkWyWua5foXZvO8S+nAp5Ir2dPt9kO3UyB7oJNvxla060A7C0+kAb/wCEdMGmb3/OzrGnzNRpqDh2NY9ZR4CTrQZUqeVJ4gatQ6S/R5BvN9maHo+29B8iQUJl3rw7rSqYohWLnWakJyJSefS2dRPX/Zpe5TFJHOxpx+KOsy0KrMXptUIONG2GsKOz6AaN67tmwje/WOGos/QiLHF3vL3+Mpez6qvnm6X7fgaOrsEYdBw6ukGfGwvh2yrGZG88m980G4PHfTJsbMR69xH3EbbuesvtMmWbCOu7C8Zgv6BXVoHsuoLTfbym9xtKJ2rViYExfzVgobb/grbOprsIlaNvfSTqNRX4utcgN3WY1Ckcy0mXzYn2uSxSrsrtepLvrKv/4awh/9JhP9jmAv+Bl/ZO7H9Fbgmm3YV1kCB5GM7fCwR1PAKOYlWu+jXdJqPY1PvQSD2WyOyddt6A8B1skNOtJ2swhLF1aov2fPe/BPDTex7lUyEXf25aLlnn77uXZDAqTP8lTfCsCL8nP+OBQ3lZmtfwl6LGUhmn0sZmXSHdH07nM5Qk42X0W20jWOTtmfC4N3H8ZXFNeiFfzc7Vooz/G2YDD4T+cq6G1faVl2DBZPGmotmO3I8uw8zIhk902zXMuLY/hDSxXtEE53ujdAgdJ3moBNtp6mq0wWV1rPsDTwMHmRBwi48C9B6bppDQx2HTQ+neE+dEwGR7cSpuH2pLi8hWDgLGX7zL9F2OFWMWDx1XgScaDtR3ckmW4EmuwL3rad/wOz0NrNxV+Jh8BWzsbhzyd7n9rxOVKH1iirzgMwEF14Wke0gNNxtb0VxEbat9+1w6sHVqX460Xai6jrJEHLDKux3j5htRKMtRPuZ9bdRw+yBPc9T50dAG2MqaPiVsyKy7TGYrYfmUed4I5Rsdx/bzlrDPhnWCWpOq740dNy6Llpau/F1s/6YCe76f7DNov1oDX0YWboTvIsX8dwIaFSS3zva+l3+tk89QAzbp6Llubf+NRNnYyLXMB+9nBvLdLnCNdp0qYlGypFYWrtvp9n8X6LdPImJoA++l0yaXMSkibah8QbXCHid9LDqM7F67DoWM1yHzbaaCF9v4cL3GvUvlz5NiEo2PHUOBJxo07yeEr6yz/wUX9n/YLnmQFYTfZ6h5e2E3uvuJJvm1deq4slmq40eb/oky3U/A9kyCfrqz/Cz/Z2vHmsVsB1wsxNtB4Ce7COlsRzcQyi9ufjLQrRd8iHYj/H5UOTI7r6VySLZea+TZjuwEP/oT5ldcjcmpCOMbH7MIpU/Otl2plp1ok3T2hLJluNh8CYNav6PiFd6NIore/PnWLY5ysPppWm1tXmxZEaQX7R8bG/BXDThOgiWSbFn8Tp57+UoLKabENoc9jbPsEub5+gZthoBNZzDLEJ45wWzlxkqnigjQAya7K1fwtNgRNTwWv0Qz6BTIaAJz6IJyACTYdoOZ/0C4iI8ymabBUyIXh6ZGHxCNH2r1Ik2zepGNtkT2OKW4yv7HJrsvvU4sd9iNvtrzDaPrvUwSLMye3FSj4DMRIpjO3kGHe3XzX7G8uvtS/CxfRhbfY9o5wbtQSb3ME/ph4BXSxrViTRZ7Yy6/n2W1qKtbFtkNgL3rbv/IVoLryGkp+xGoGue2XkXmd3zLWy3LFJZ9xK7HGNG2LQqkp3sRid9396JNk3qRiR7soLllmtpOD/EZ/YNbLE0qNu+wJBxIjZZaSvY6zxlNwLSbLXMWrvn3vZFswGYE9aLbJGZbRsZDSFDbrNNPxlxok2TOpFf5NYNBO/+N8wGT+FVUGR281/hK3tVtEOCexikSUWlQTEkC/KfnnEjYTEh255DmBj7LUFofkR8hM342GJ+8pReCDjRpkF9aEPFXVtZZvn9KHh3wVCza/CdVIg8xZV1TTYNKinNiiCZKOiHf+0HCY/5CSbF+kK2+NcqmtueHW5GSLPqMifaDqwRDfESCxI0g7wYVy7DRnsNWsrVd0T+k26X7cAKSvNHSza0hfy1+Nde8VkWNOAC+O7vWdAwl40e99dqtsiYp45HwIm2A+tAJKv9obRP1Gu/RnPFfHDdf8VfEm22/2DXZDuwajrNo2VGENnO+hza7VfRZLHRyiXwdQj3SBnk62aEtKhLJ9oOqgaR7HFW+bz7Io2CNezlNIrpn2ZLEzSTPv3dV7aDqqVTPlaTYwOw097BSGjaxwkEv4+lur9EtuYjV2i5brPt+Gp1ou2AOki4ca1+D19ZXHNKt+AHeTuzyJ9Bk6XBaNmlJ0egOQhIZgYPN7t9Dh4Jt5rt38TqMWz+kjFFfnNPhOag2fbX+oKFtsfUamR7rf1oG+mKysAqMQtUBjGrQOgrTtRY+Ym4vbYC/0e0j4FXELj7IzQIJjd2oOX26FJjPbrGrQvdYJxJj/DDd756cgQMkQq1VMmY5KuSfyRjVUHcagYiSx8ObMshYhdviNmryJgV1VivXjHrlhuzLghR1zi/u8UsNyd2Wr5q5czhTQ0CsYCUmqyzI1eBJwRDEGv/HjsR2PZDgZUcj9tOiLP0aGD7y1nldTJmh5jsqiyvsSPVcdu7haAx68z6jWYn1AlmvXHZKaDrG5xXY4P7xG1IPhpulyobPSDHBtNQRLj8H3oh6K9+hH/13VNGIlBXrhJyJoLdeqDa9p/Isa2HzQ4gXwePB7bnZNxKsdGWIXs7VnN8R8z6TcKsMCywfFaP5XWNWS/ka2BujQ3sHbOh+TEbiKwN6RFYUf8cy5OvtlCslSt5Nrh8tY1YOdG2EEcJveYZpKkerghs4/5q2340x5btjdmyPbhrHQ7sWDkaLIJfjRarXWp1rTQQ3atJCvnO1uDapcUI+oTO6Eh2LsNALafU1jS5uYH16B6zsWi7lw4J7LyCGptSGLcBEG93Gk1Ordbbwtfw29IYARFqFXJSTue8o6zGNhH/Yl1p3BbvNttyILCyE7Ew8JBWE8o8cJKP5EuyVY1cSe7ikivkRLKljholNpSvLsiY5Ksr8tUVG29hn5hdzqTa2N41Nr0wsJH9cqwH9+bW3ucuhq0TFCfaZuCXMAdI+I+eQEM9WmNrD8ZtwRbsYRv5TUPQdjMSfAm7CDVMib+1P5P+U6tOSMjVMBRYRI1jAh4JsyfjBjY8sEG9Akg3bnk0Jg0LQ6239r6kn+MXpgUCic5b8lWBDJUer7HtR+K2cIfZH9ebrSpBvhgZye867Ki57lRqiYwl5ETyBaHKXUwbRA5gJHULI6zbxkK8BdWQcES6dU1Zp57rX5JCwIk2KZjQPBHkcuxgB9BSV2JXfQnBf7e42pbuzrEqyFXn1VDCD3meItkk8z/XZYlhnP6GNls1DoaDN4+psZnj4nbZcAgYp/V+HJNG7KlzISCe1KinjNHR5kMxe6OYEJkbq+3FrcjXsUi+TskY1+r66B99aX2qK18JGZM3w9TCGrt6QtyuGEWUsAHq2JlDwNarazwlj4ATbRNYSZhFmCcY4m9jcuHtLTX27q6YLdwes/W7Iu011CxCqW8ioxSd0nBQpJqPBjKFYd/lIwK7fmzMzmdCZACE62aFFAHfhtmKPDXcL8PE9N7OwN7cXGOL6LyXocWWYd8X+XaUe1ZoakDGNIoqYhR19Uh8dUcRgJxOfVQfjiN7kjFP50bAibYRjMSdVbSAQwzVVu6P2W+ZXHhpNbO5BzR0i7W5xtpIMZI+HMN00IswepNwD7v9fPxxx9aEdt387nGf0Egaxfa9sIZeXCaobWiwL2wx+81SszWQ7ZEK5IvOPZ2SNFiZFYr6s8PHOLOPTw5syiBNquWEI6x0Kms6lsWJtpFa0QTEOkj1pfU19sT6uG1Dwzh8XOTb9maBRorQvMO1JgXZcvuzg+r52G8/dgErhibGQu1Wkxqe0gcBTYzuwSTw6ubAfr2OGBdbYrYHG39HarDnQkdkK/nqSYc+chCyNS6wT8xgorYAjwY6ek+NI+BEWw8bmQJO0ghkh/3uuxDtGlywWLVVwxCure2u9R7dZj/DBsHExlCGe5+cbvbZKbiPQb6JyYw2e5Bn1GwEZCrQZNdeSPZXq8weW4wHAV4ElbLz153canbO7XtDuEsvJqurcB+771J2ACmMyNZNCQ3XgxNtHVzUCHYfCezPa2vs0aU5tnwbjUINgOOdhWQTryOyldDn9mTCbHSlff3aLjZjeCzUPDjlqQMQkDlKI6W3t1TbY8vi9tSamFWyRLY6XUdJTWAk+ZINVxNm5zFh9qWLA/vwBTnhZJmOezoTASda8FADkCZ7kAmJ3600++HbrKpByzgBybblzO6Z0LfPLzWI7tjWLsOu9q0b0Dyw4ebz2xtD++CfeIo66iO4ZS0qMfvOy2ZvbIV0mezqbB144n1O/UW+umE20GTZV68yu+v8wPrmsQINE4Pz7SmUzIkWLKSx7scn9ql1cfu314lYjz1WxzIpdcOUcOMFgf3d5YFdNYrFDu6i027VKzKVa+AbjJD+78KYzaczP4Fmm0lJHfcEvBH+/soa+8gkVpzVrmTMpHdszbu4CRv0DqO5PrPO7HtvmG1Gk+30WkYDEqFJvDdY+96DoV5PNI5paLZa+eMp9QgovsVSNNmfLKIO8L9WXWRaUpsppu18/51YuNLsI+cZmm2mvWXL3yeriVbCIZPBEhrBj5bHbSN/T2aYppEQDb3nYSZgXlofs744nQ/CdjuGBQ7SRHyIl0Cpbf9qUCQZK8EO+8TamC3YFHmudHZzVEMo6V2lpW/YGbMf0qEUMlF2Y1E0ASvzVbYnpkuyN2n2dxtBOeYylFu9NTM1jTNql9ZwlPf943KzeStrbD8Tf5lmIjnjfTv4h0j2KHbZBVvYFnwFNlqwz0SSrQuzYi6soi09sjiwlbur7USVKNhT1hKtqv9geWDzllfbglU4jqPtdSb3mpaKrjTbfbirPYs9es2BWEYOY1uKTVvfp478ve3V9vjbNbZjX+Rd0NbPSLf81IbKmVRetjVmr2zJsUMEvlGHk+0pa4lWmtzWwzF7cVuOlfA3QECyIUnoaxjiLULr+D12admnvSG0fc0ntFnJ17I9xIkF82zBWW1pB1s0/X4tpgT+aolxtqesJdojxIx9dzuTFNswGTC8Szqpyz4ESx3cyI2Mk1qblN9RjMNhfqgC7ZQUZexPLMZYt5eg5FnSybQTtOFjhOlGVhb+nqXbJ1hR2Km5Rj1EJbJ5aAuO5qyw2LWQYLf00icwPjeioahpLN+Jz/C2gM68U799m4hN1k6G7UdGFm3FTnko3pisNAAwAqPd74qfJo4dXfWUr7IqgCVXLbX2S4AVOHT7a6iWxWYXfo7Zg3NN1dYV2lgDZUzukIa1JbzCYhrDhYVRgJDk7vSrkkFAYQ7f3lptW/YQfaszeRlIJkOxSsgWvxU4eT9G5s1/YqO7vZArv3NwXxnxAaLL8OnKzGrsTJ0t1EdoY8sJvrT/PAKQs2w3m9OZ6GQREnsId7j2AK/fnEYgjpPQSdiOIUEBram1SRpBBarPMbRakW5TSddW80xFdFY5WjMWVfvhcfOKY+GEjV7NU9sgICzLqaLFROESxp1DnaXUItBqhjqSsUSSzB3dw55Lf8AlhxB2RbNYCvYp1tv2Y9brMQI2vIcgNTKyI7uX8ULQLhDZnrJWo91CAI/18GXTjUBshLRIi62sXcYjkqvmd0PBD0R8gUgQ4Qz3X6grXpC6Foir5z+j9699hgT8BLNUukb5KNis1s8m7lFWWg+88y2GcJsQ+A+y980gDnK9ksqjcobBS/muZ+Tmkw+qhOIpNuDEpWLuRKPVuvuhKOae2g6B0nKzd7ZRlRKFppIukAH3JOqfZECKZA51pvrXthtnyArnwg4WmQwzRk5OJW6MIQuqa/2tm3StyFOyUUXBlCQXufj5afsFPUNZHd1vtvbnxNi8iKgxN/L82nxEsFXYP6TBjrg+KldXZKtsIzOraLqDpnMMDbd+Is/DB+BoPjeNqX8yu35nLdFu2sdmdpoRbaq+RXjau1lDpp0vI5AIfu8ipGcLwyWEtH6SQJdy7vDWiIzrns/pxr0j2Uu8CCHn+xmJhnN0B5FsHkMVQipF5P2nmI2bjdf32NPXq0Ee2c4z1sKM19I4BlKm2oxUzm0vMgtBOdUpxDFBjLzJbDQaSHe0DxF2vaTX06Z+2w4GNnWIGmi9C/xnyxAA1124zlUcj53V3Z6VYSXEt3c5bPRkVLcivoIJDMlvgcCQgVwIt25SPR/cAPGp40feEklkmdcfkpzMmljJZp3K1EhJz5AcS3akufZBrs77JHI2sVa+KLTIfj/XdcPBWoQuolW+fbnmsv+X65ApbcOg54qo1RGEQ8I65UiUh7/kGJpN1pboPPlkccpaot1RKh/SOsJ4lhAgJpolk3Buesps/J0sqRqGkDODJFLse95Zd4SyrfNbn4/Iru4V0lBG3EiggZF1j0bfxXhHtiD0FxBQ9hOQ++6IMDfNI97hZyH1Ppgr9qDxolnIZFFOYzu8Gdnlvm7EqOtCw9q+ANvxn82GXUvZxtNgVmKEfZPlX0N47jVcS8Ool7g7bAiluLl5alsE9kG02vW4yZ5c9X4Q4lv9H9FQfBLEp5HJLkYt63/NMQivH3VZV6s9jmxsfRp54G99ou0zBgLlExJt7fvomqN7CXT7OPlAjJIvyfUWZGXj75At5Esdv6LbaLJLcw+SsdJ15NMb+aEzDwmW7xJwkfTJY8gWZTyOHGr3R8l2I0mPV6CmbE9ZS7QnEV7JeaNJJ8sRup2vRqQ64eNoFwikevcDKxq5DUEccjHCPjIaDta9SrvkdUdoQy2g7gm+azItfxQaBs8YANlKy1GD2/ochLqdCyD2VY8i4Ecg5K38hXBFurKTDbkc7fZqpPkd8hhBh/BRGkf/qMxbX0DhOEHjIK9Gkl6zuobne2pTBKqQr3CU31iuAl6moD2LI2JTvfU/P7paJiAN4Q+upx7RPMPJ1to66oOcTIaQQxMAeZxKnNdwvi7JiuVViAMro1HWRV82K7qVCodoRaJ7l0Za9L4ldMzItOYKpCjor4i2ZyF72XCP5EqR5ZWfZHMXHbiUAMneYOQ9p3EaUQmrfFWMNY7QqQrMzC/5KHhN0osagmymlfTeIy5EmLpyA8MfkZsEsHz/2cCE2kNJJNj1G4KGWv1oSBrenSWYDNF6Decc2qme0RUNoTfCrWfrIxKWQItodV7ajLTfXmjYfUbTcGiYOidbWW4e1yi/IUT5uJMy8paNaBx6/xzW4Pbk1Ty1LQKKKdH08mbkS3ZPjVSkQa77FeSn+qcc0hQ1ajqJ/NVPFXSw+1dFsintMpFU5z2p8+6DIxnQcbGcrjm8jYpGLmT2Cm24dPrDr0KmkJdwi2ZkTOePUo5jO6PrBl1CXsiq7LiSORG2TAs7XqWsT7Bn+VS040/XyqwK3XBSH9GnO2XL8pS1RNsjVkMnjQDRuTeeQklFOBHMRJLkSPAaSwdXR6aGk4e5QvfXJgnsGDTL/udxAKGun8IJDOXNCd0W/tYXnlUwis9n0DRoZLloIvvfR3NY/yHPAABAAElEQVT9GMQ9htMIsWx2uqluHrL1yY4s8g81Ii6pn3iWIOjTUw/11JYIdMM6m6NtLZqCVnUjIuwJOfZDLmQbVZL9VB2ryKx+knfKlmciIq5PtDJnDZwBQWJqOiOJkFUQyiOR0l8Rq2REx4tujEZQpVswH6DJaoQkM0bYaXOtbpJpYcuLrED4dWQuuOCvUQAGkYfON/6S6mwGsJV5tqesJdrBbNMdTuhHYnS2HIicpGFoOCby1DAvhnCK7EJtlkZSP4mANfmkIZUmruomCbUmpeRJcFYir4r90XBQrgAaOkq70LVdIdawQSDs0qr1XeYHkX9Cy1YZReTSRmR/y1V+aEPbXuJJvMfoW3iX+o0vah6KVdtfJjZvC2fVSosPgKUiV3WhqhqHlTMa5eQN4C/1POo2CGx89Mg9DOlDs49kqF4OA6aYXfo/0ESRx4g1o3skrxq5iLQT9+hWdb4aLdVwvTTnfhMict+3Brs+xDnq1mgCTVHiJVMyESRkK5Q78pDsb30ZTfYXEPk0TBefI8+BUd6JZ0WlOONfPT6X7LS7R7YnYMjOdH5hjg2Ge47SUdeV19NoICY96LE1u1/8x2iiKR+B1azsPjRK2VLrJxFtd7SS7hA0vHhGktRJkwj/nnEm+nFoY6QxFKIJH2M4WfI2z0Co84dxj27iI8+FvjQUNVA9J/Qk4Hh3Gqs0oO3z+dAg5N1weAt5LOT4ZdzKcxtI0jYmFAY2AFJovGAN3OiHzonAsL5xGwPnlWAFaDCpTuVRIHPPbupJWmolmqTMQNtfwTRQSn1TMWHdcW0iyazUtQj5qi9gXJCQk8S1khnJiMhZ5i55pISjMzrirXTClciatFYJQoCM5NEghl2DjE3kmHoJjslkULoFTfY3kVYr09fBVbh2rYs6ek3uSkYbcu8i20IuH92b50n2szhlLdFOgJuuG80on07+LFKUQEho5d4y5vZIO5UngRYoiOwktBK4cKheT3oSpMbtSSVdL6214DwEem1kFtBkhSZGxn4Isu93OptcCHbYlfymkem+xDO6odHKv1GasDQhaS8q/5AruJ7GK2JuIKkNXlMkG9rprBq4zA81EwFVS18w/Uv64repUqtqJAPV0UBIUBqiPFtW/CgiNnWcRcidJlV1Td0U/uZYvcN1Lznju+QkH3k9795oRePKnyA+EJ8mZsf/JZop55R0XU8Uiwu+ED1T5KukEZbk8siW6L7Nf+Q8gqPT8tMeOztqI40Q7ZQhvEq/ZAurB2ZmytodFspwaZq71Ox/vhSzg3Tsimp1doLQwkmAI6i+O2kw5ZAiQ3RpE9IMehdBvPxtTZKdTRqsPAk0bJM3gbQJTWyIzEP7Bo3gXEmmihOUUza8qqOUi5auyTKZDMKGcaawqw/pj8b1FG1txlAu47entkNAG3wu21Vjn38yxhbiTURJU/3L3KN602y/kiZce1A56lgb6syjq5L/V8SqTlgrGuUaKFHIg2ilMEh+RbKNJRGtJl/lvx16r+jmWlkK5RTh0civXjuQ6VYrc//xFrMvTo9MKY09IhuOZ61G27NrzKZiCTgfOVl4HKJF1s9OCJSESf6M+qQiqSH1ohCmTyuSiF82YH2SSF1pw3dghRiNlcO3Ik8CsGZeoknG0ZgPbpqIsgq3JRZknZWN6l+EWjCGU/qkIIlIZaboUxR9mvMIMabkM5TR5G/UuobptK9L4PKerdRFkn9q+l4JitmZtHncWDjpWhpCASP3RCedDWio3SmQzO3jaqx3t+Cs0Wk2YJDqd9TIWyaZW5Gv8RBOU0pjqsvS7vnz7gOxKtw8LrBxBTWhZ0u7lyHNHpi1RKvBTwHzALePCeySkUG4U2zCLJVmddSmxVEH0x8tdtZkdsQdEbduXWLZ1Me0KZbnyiwHIZuCBeCO89gZFgtOInTAue7rzOfVhrrTrmaMNrttgjZpjPuOy1Ro1hKthFl2yfP6B3YXpDNG5qpMR4NGkM8I8qYJgX0ITWsQ5mYNcT2lBgGNuvtDOreMDexGMO8F9pmetBZnEp4sd7PjsibC8txsEFZ51tpow7eHeHp2i4fDu3IO/E/mC/bvx57GvBLTXRmV1Ohzu6JhFZl94iLMJgX4Edef0c6oN+74l0G8ws77/MFx+9JlzHchV6+uZT4KOdMcU6Yl+Q1riuAT0zHJjYwUGWHgCYUmm0GQEIhrBqBp3I1WW3akmh08c2wHk6xant2Qq2JnxEvvqEYwepTZV66gEYyJWXd+eyNIfW0K+150cFeOwHHl4hpINmZvse37yQyTL5kMNF/8X2aa3XtRFOjb5eu0fGU10SZgUGPIpzF8ehpuOGh+//xG5C9e2Zj/Y+LGTvBX79aVWh7FcO7Ba2IMY/HGUa17K2i32lMd5GKmumZUzHL48Xk02oPb8ehDvjKhM5fJLR8b9FcuN/vbS6K2lPFmuGZKT9b60dbHSaYCDed24or6q5V8lrAYpgTXxpOdd5gnYe/FzPeFY8z+fnq13Tg+bvl5NHaOe2p/BDRK0s4L84vNfvQuboUb0HJxLexUW93UgU3mqDwUlFFDWJxxYWCfnBLYSFzaJF/ej9cBiq9OtGfiQUg37LTHAntmndl/QrhvborZcRpDpzPaIukDmey6dlRkk72MoWtPJma60jDk46hGIk3LU/siILKVJvvO9hr7+bKYPY8ZYSd+tueOEN6+5UzmaT0wuV3JRN8nZkQjpf506j652jByTrT1cKEdhKvEypgdW83EmLZMXrAmsLX7YlZ5Ir21WxGn3Le6I/DTIdYZrMwp2IjWsY1jvFg3fstvXf7xilej7/LvVGiGbnzPx8Y2hEmMQfiny6brKTUIiGyPY6TdeihmL2w2e5bQAe/s4BgL+rRCMZ3NCXJRy6WjHstisBsnmH1kYoBPdixcciw7rffdDcuMN6d6uEhQ1CsPgIhmQkjjWQV7yaAa+8XqHHu1GG0E04JW5aoxpEODSGilEnKFYRjXv8ZmXRC3OybjWoTZYyEk+8ozxJjBDBI681Hj4YpcGksiGFgPNN/+RexWcldEtPUg8Z9tjIDqqle3mE1iFewwHPtnIF/z1sXDEVRpGWSrDj1N5EuvLhnTR6vBB/YO7MoxZh9nPuNyVngP7BELO3dOe2oCAddomwAHWQ81DO2rdUCzxUxg/Gp5RF6HaRCaLAvJVhd2REK65beo5bSDcau5cTQLEUZV0RByWIzBfmh0CDs2mc39X2bvP1XrtpYoqxoOHYq02nFMYnzgCwTTvwoNeAB50qASBN4Rr5VNz6ymPiRHR3H92lRq9ov3zZ5bz1wBYQ80gqqmDjvMbJWQETrwXkx2KSbGB8dg6x8TC22x3ZA9t8cmJ61OtMnhFMp6OY1hR2m1vbIlbs9tjdk7uIGV0zgqKiAxGosm01KmiUjoKavIMSRIyFAmggEM4W4fGdgN42M2oxCipFFohltakzoBNdTX0Wh/+dfYnvfxm3ImkjSU4Rea3fMgpoZrIWzudZNBAp32/1tJXR04Htji7YE9Wxy3+bv4vRcPGMxYJ5A91aXqFDFre/JFXvg/lBvJl0xQmuiSy9bNwwO7BnK9poiwh4x+8iBYyZd3xqqI5JITbXI4hVeFQi7y4rPvOPvdsZPuIhrFwpK4bYJ0FQWsDNI9wZBdAZPaLCH4Cuyl7VHk89u3T2AXYBe7eiQR9tBAx/apsQKGcInltHUbgMp86CBRuh5BU/oX7ICHosaqsoloh0K0192DeeR2GhH5dcdkUvf+NnsHz+icCFBVUefIlyPI0GY68aVMmr27O25LMP1oMU0p8nVMpoU6HeY5Mz7XBWJYZEGTpAPovPtjzhgxILCZI2I2fQgyhjlqALtw9CAQk2RDJOupeQg40TYPr/BqNQhprtJAFG5xL9tKb4HANu4JbGNZzHZhVtgD6ZbivbCXRlHJtuZqGOJeEZ/UY/3VV6VQbqWp1n4XqWoVl5YvKh7DUILe9O4ZWNGAmJ2Pzbgov8ZGFMRsGFuE5NFAwuEbmTQm/1rpVrLN7Mf/hT0eX6A8NNYeaCr5QyHeHQwLMTuMvQbTwQcIRzqTybBhUaOTZuOpYxCQfMgD5hiTZvuQrx3MDWyAaDdiUtiGfO1F3vYfDWw/8nfkBBuNSuOlqGEHX0++9AYiyPDDd9VrDPlSVC113oPRUvux48hg4sZKvib0DWwoxyRjfZA/RXdzDVYotjw50bYcuzPuVKMox5ZbXhmzUsh1Gw1hF2aGkop4uBroAFsu7zxUY9XMRFXqWoaIh8sCy+kRt55okTmM6fv0zAn9XHvjIpBPVK3++TGGajErgmj7dqshIhLX0jAk+ApYooaTbNLw87U/mf0WM0HJCia90GSvvJeGDNEuf5Uh6iY0mVGsU7/e7IrZaDEzaIg0NnklNOc5yZbHr2seAurYT1QFdhz5kj1X/t47kJ9dh2vs0Mmc0B+3eH+VVbLYk8vCUdVh5O8kqmpv7Ktd2COve05gBaGMaek5WiqyNRAZG4EGOxiZG8z3XpiPEp23a67Nq6OmrnaibQqdZpxDtiNNlT/hBAfqRSVfqgO0WU5W0DiOnQgsgLVEyocZFr7+HGQ6LGZTLmbInldj3XKZwSWaFuEXINKAFV2x0N6aINZzaa5NFVe22VJstE8/ijvR99GSp5p97JtoLWPYlGEt/sK/Z4fr+XQANOB8NNwLZrGS6aNozxPRemiIoRbUDGJvqix+rmUIJEZBkifJkEZU2sq7BhlT5324vIZRE9ot2WuLpuXvoA3vjdlVt1CneAt0Ra66ImNaKZjDVV3prfVdXjb6JDpvdaxe1S2ro8buAmZPbYFAKJi1AipNQORoCHXdROTXkIw1cbaqGLPDK8QcGA/pQbRDh8Qj4a7No61FXfbYvrgTXQKBbnqX3LH19irAPQfzwYBC3NimmS2+DlewuWxf9Rra72Psxfc69ts53HMD5gSu6YI2rXxcw61bq+33PUGAki8Royal6srJYEIShmYpju6CaBe+F7NDG6jnSxmhjFEnHl0eSWX0r3LwlHoEcv6RlPrH+BOEgERbWskxtMaXf2e26Fd838/M/wX4U45OLYmpkaqBarKrKxqrdjwfOxny7Y8mQwPMYxJkFKQ/6QoWL0C+FZRx9xq0XDwWttMpBJBsD0wYus7JVrWZfknypVTN6GnFQmTsEQh3BURLfY6bEnmVSAY8tT8CTrTtjLl8IzdDYE//3yiwyIljEBia5Rg0yu5omSmdgKKRaWunXn2x0UGa2jOsZ8IsgDIkAlVwkNHn4YHApwtkfJzy7aCxblrO5MsOGjF55EHW3brRcXCPa7ftLEDneJwW0xzERPQyI5PVr7DABtt8+WGIFq2234CoUz1HFn46BQg40aYA1KaylG32lV+zgODPaI0M76ogXvnfjkTjSMz2N3V/a8+JyKWV9kGr7QFhajiZIMtQ6609P2g4hHsRjXM0ZYRcd74P2b4Z2XOP0nAVd7Q3hC2XIE/pg4A68nVLINqf4YK4GdmCeCvpLHthNhqDjGlE46n9EXCibUfM5XqzYaXZCz9GO9wSNQI9/qS0WobwspN2Z6Y/1Ulkq/XqMhkkSLb+M3VcjXIwhFuEh8KgcTRY7ttFI96BRr51FRMuuInJNUyauK7Pqn2x6gOWJr8PHyQ2ByapFc9TX9SPksxVJyHg0RdTj5gRGqvz6Gr/NxUIONGmAtUG8pTWWsEw7hU0jUV/jBqBGoCStA41kAuuRoMcUktaEFcqU0iMTTxD50XIXTEf9KETGD6RjmAGHQINdQ+a0valmEDeQcvFYyEHQk5ot2Ej5l5vzKmsvbPzlixJjrauNpv3f1ikUgLBInOJdJyRVIE688ua7mAT1/vftkXAibZt8Ww0t6qTkBLa7Iv/wSTTOhpFLcmGN/D9RBnDcBrCZBqCtM100g5FmjIxiEwnTsWh/UpstRDwwU1ot7zTUibMdu1Cs+2Dhou9WUt5dY+TbaPi0OYnRKrlx83+9Bja7J+pHzxbEkmiVo381WCDHyVzEGYEjWY8tR8CTrTtgLW0jaOHzN6YBympETAr3JXhthqHXKZyIS255Wh5bBFa48BCGgLaZOTv1Q4FTOIRIk1Nlqm8su9OwMzRD3OCfIblObFjOR0JWq4CpSsqmDRhNWZpxU64SQDcmkuoA7kMrgX/575PfRygnsA/MVmZhzlK3gYnjtJZDkbG8HLphp3e66U1oDfvXifa5uHVoqtFtFvRYp9/FJMB5oMxkOmg87DTFiP4mArOw2SQ15v17VuwpaENTrqE37V2zxY9MMU3KbqX7LcjINqxvEvvEZENcMf7TMQwYbZ9PY26msZMA+/Fe3k0sNRWCOLFKsNIm93+RrTqbxQjj3KIVZOt599K542tvYK5AE3GjrsYj5NaE1VqS+a5JxBA5/CUSgREshrG7dyGryyaxJUfhWgZvkn7WPsS2iHDuOs/ExHr2tdYCkvj2MW1+QzBNVxP1yRtSPEYho6EaD8M4fJuy+gglr5Ip7KIGe8tvN8C4if8hdm0a6JFEaGHQzxd36jzlktRvSQzDJDshr+h4wbvCswIB7ZDthDrlA9wjBHIZjrCLdjUJYuqr5hMVNSjp9QjkMZNOfUv315PUBjFYWMh2EmRWUA+qDvQZjW01lA8XJnFzL6Ef8/OiHQVCCadiVbYqZHqHWRKkF+u3nEcGu7bz5otmYsL2/M07Pdo4Lezpc69mBt4x3AbHTTixP3RN/+3NQhIVhS8/RYwHjyMjo9OesOKSLZUP7KbT5iCfXYiHWBJFAdBE7O9IFpP7YOAE22KcRYZaW+lcZgK9F12M80O17W/JgirAMLq0zdyx5E9tDMlmQfUwBU8fDyN+lKGq/Mfx5QA6b71C5Yco91e/mniJ6DhFo7ChksHo50ePLUeAU0+jhhdK1+1MiaZOpVqj4mMR46N5CuUxbrXnLrYv6QCASfaVKBaL09pFXWTdj6oL+Oh4Hdi4kk03G55kUlhBsPX0WhQ79zA5wnstmvwH/5nVithLrnybnbmvSJaoCFbtC/prSsdzf+uCUd9GkuSNX3Ca5q4rrH7/XjrEahHAa3P0HNwBNSgZb/V6rLbPxlN7r35B6JJ/Znwkdimty/DBelG9ij7EIR7Jd4Lg6LrHTlHIFMRcKLN1Jrt4PdKaLhxCFexE+S7OfEyJsxeZJLsFUwKLxAXF0+MjZDuRddjWsHcILOJCFr3enIEMgkBJ9pMqs00fReRp9yJLukfke6aS1kdh+12JZNlrz1utv5VbLt3mF2MljsGUg4XPKAVO+GmaYV6sZqNgBNtsyHzG1qCgEhTHgdaa9/nNjTYqWi32HFf/UUUsGbfQ+zBBvFe8pfYcDkvc4Kud7JtCdp+T7oh4ESbbjWSweURaWpiULPfw8ZEWu4ECPeVJ3EH+yn+t9hvd/FZt9Ds1s+g3Z4fLYyQC5zuddLNYOHI8Fdzos3wCk7X19MSYxHuuAsg3SLcwW5hO51f4ZWwAP/b32HH/T3uYH/FhNmtEC7+t73yIw03Xd/Hy+UINIWAE21T6Pi51CEgDZXctShDix0uxG47DP/aFdeavQfJbkCzffM/WOzwNpNlkPCFHNcOEL36RFqxa7epqxrPue0RcKJte0w9x2YiEPqBYh6QO9g1H4nst+/Nj8JJKhzjztVouPyecRcfJsyGjMA7we23zUTZL+9IBJxoOxJ9f/YZCEhLFYEOH81eZkyKTWQ57xJMCUufYinvEuy3m7HfvoOZ4YNouJdH8VXD+AlSjT05AmmMgBNtGldONhZNZCtvA8W+nTQdcwKkO5FgNW9gTlj6m4h0t2JO2IB2exWEq9VncgfT6rKmVkdlI5b+zumDgBNt+tSFl6QOAiJckacC1kwjfoIC8ky9gfgJPyQgzyr2xPoXzAksfricaGhXQLjaNl17obnttg6I/jVtEHCiTZuq8ILUR0CkqcAzXfn0G2w282YinE0mOtifWM7Lp6SY3YQfJGDNm5zDO2HSNVEktDB+gi94qA+n/+5ABJxoOxB8f3TyCCSCjRdhKtCGkRfdSLCaeZgSXsIljDgKxa9wjNVll/wFhIsHQ98Bkb03+Sf4lY5A6hBwok0dtp5zihDQNizjWMwwgGW9k3H7WvwMy3lfg3TRcrcxaTbxOrwTZvF3SmTr9ehgKaoIzzZpBJxok4bKL0wXBBLuYCJa7ew6FkIdexkTZkyWFb9l9vrPCFaDOWGaJswIOj68CN/b3GiyzG246VKL2VUOJ9rsqu+MeluRpjwURLYKKD7hIrN38bd9B6It2Wj27D/hnbDQ7Oq7mUi7GnMC18l97KxgwBmFir9MOiLgRJuOteJlShoBka3st5oA02aRBdhmx0O47xD7djVBaja/yiaYa/G//QD+t7dhcuCctnYR4cqk4MkRaA8EnGjbA2V/RsoRCLVbpFna7UUsZhh/IUR7E+aEXxIVDPvtaw/jnfAK5gQm0S5l0kz7s2mHXve9TXnV+ANAwInWxSCjEAg1XKS6Zz7mgplRwBpNlC3B57b4Dey3j2O/XQrh4iqmjxZE6FqfMMsoMUi7l3GiTbsq8QK1BQLSVOWdkAjHOPEKgtW8gA33OcIxQrx71hNw/D20W2IraENJTaxpOW+o4WKO8OQItCUCTrRtiabnlXYISMMV4Y4YSzCazxEjgUUNb+IOtpglvavQcrdiw12OKeFKCPcClvpqOx3tVKz7PDkCbYWAE21bIen5pC0CoTsY5Kmg42Pxvx04jCW92GjffILJskVR/Nvti82mQ7aXs8Js5DgCjveKJtlEup4cgdYi4ETbWgT9/k6DQGLCTG5elzNRpgmxZa8TjhH/203YbV/6N7wTXiN2wmxIl0mzwlF4J3R17bbTVHAaF9SJNo0rx4uWAgQwCYTmhDyzoSPxUvgw/rdTIVyW8i7ns/19s2e2EbAGk8LUv8CcgG13QGEUIUxuZJ4cgZYg4ETbEtT8nk6PgMhWpoT8AlzBcPOSDfcCFjUs/CMeCnyW8tmwhB0fZqD9fjIK2ShNWGTr5oROX/3t/gJOtO0OuT8w3RCIQ7pa8KCFDoVFZufjhfAWE2arfgXhMmG2mbCM0m6v+BDmhsnRhpHa88xXmKVbTaZveZxo07duvGTthQBEK7JVAHFtc37xDUyWseDhnYv5PMXuDq+z4OEn+OFiVpD9dgaBbBT/VvZb979tr0rq3M9xou3c9eelTwECip8wEL/amwlKc940/G8X8PkDrmBvsZ0Ok2Ur8E64jGA1519OyEY8GGSCcHewFFREBmXpRJtBlemv0jYIiDQVcLwbE2baKqc/QcfH4Bam3XlXEqRm7XMErcGcsA4Tw8XETzgPzVe784b7l8mk4MkRqIeAE209QPynI5BAQIQr80B/zAm9Wegg39tJaLWLCFizkihhb/6c1WX8vuQONNwPRv633TA/+OqyBIL+N4GAE20CCf/rCDSBgMwJ/QZCqDcTUBxzwhoWNrwN4W7ElPDSj3ANw7Qw/eNouDdGy361f5m7gzUBaJadcqLNsgr3120ZAqE7GOaEHr0iD4UBTIaNn050sKdxCXsc++1azAn/DAHji3vVZ6KANv0G1NpvMSe4DbdluGfKXU60mVKT/h7thoBMAzIpDCsyu+PzaLgQ7ltot6t+h+/tO2ynswY7Lq5gip+gYOQ9iA4m+62n7EXAqz97697fvBUIhBourScPLffCSyPSncjihmXPY07Abrv4V2yLDuFqi/Qp10VByXtBuNpSx7XbVgDfSW91ou2kFefFTg8ERJryv9XOvNeixWo578o3sd/iobCWCbOdrC5b/Tq+t7iDzbipdv8yb3XpUXntWAqv8nYE2x+VuQgkCFfmBE2aacHDUuIkLHoWUwIRwhT/ds0rTJZhTrj0A5E5QQTt2m3mykTdN3OirYuGf3cEWoGASFO2W30motlqDzOZDd5Au13CZ+ULRAl7F1vu22bX311nOS+tUPc66bYC/DS/1Yk2zSvIi9c5EdDS3J69WczARNmoCWybg9ngtd9iRmCxw9s/w6zwJ4LVzIni3+q8Yi24O1jnrOtkSu1EmwxKfo0j0EwEEhpqHO02pwD7LAseZFZ4Fx/cxb9mKe8ms5cfJn4CZgXZby+62mwQy3lFuPJqcO22mYCn+eVOtGleQV68zo9AYoeH4aOJbfsJzAoXQ7bYbt/HJWzjG/jgLsV+C9FeSsCaKdh1+w7AHQzvBE+Zg4ATbebUpb9JmiOgOLZaMTbhAoLWDIZwL4FsCVizHPvtKoh31waW9BI/YRqrzhTMRvETPGBNmldqksVzok0SKL/MEWgLBES28jaQmUAhGYsmET8BDfe1P0K2LON9bTNaLosephI74UrcxbQdei7are5zc0Jb1EDH5OFE2zG4+1OzHAGRpswDg4ZiKsBGO2km0cHQZBc8brYbU8KzLOldgmnhms8SA5eJtL64jLk7WOcVGifazlt3XvJOjoDIVqYBfbrm4fJ1B/ETppi9jkfCsqfM9m40+81/xX77ptnVH8HkgDmhT79awnUNt1PVvhNtp6ouL2ymIqAJs27Yb8ewVc4gVpmdz6TYOwSsWYXv7bL/ZMLsDcwJEPHFt+B/y2KIPn0haFzIPHUOBJxoO0c9eSmzAAFpuAo4rkmwiyDaoWx3PpE4Ckv+EG2HvnAuhMuS3snXQ7p8iiZG14b3ca+n9EXAiTZ968ZLlqUIhNotpgRNhPUfEmmwS/FOeBfvhC3vEaxmNd4J/L7kY9hvb4uW/IbaLWQr0vWUfgg40aZfnXiJHIEQAZFmHoQ7cmy0y8Mk3MEWEajm7R/jmQDh7t6C/fZ17LcQriKIKRyju4Olp/A40aZnvXipHIEQAbl1KXaCJsHyWWGm+AnTrzN74ZfYb4l/uxSzQjHxE2S/vf5OzA1owQpOXlMTARg4jmmBgBNtWlSDF8IRaBoBabc5kG4vyHYyfrdjWfTwLm5fr2O31TLeBd9j0gx3sJkfx5wwy6z8mFlQS7ZN5+xn2wMBJ9r2QNmf4Qi0BQKQbVwfCFdBay6HaIdjVliCOWEF3gk71pnN/wFhGfHD7YfnwpGDTrZtAXtb5OFE2xYoNpLHGcO2Oj+kaOhnQKMJ//K9hi/8PJ1qf5xx7PRZ/5blCIhs83pGmu2gESzZxUthyYtotYqhMA/tF3ttZVXkAiYZk8zF9SWRXL4SSLTLXyfaFMAs0qxGsqtq/x6tqLHyarOKmrgdO2F26Gi1rQty7MTlZmWDAlt8MLADO+LWM5fVQlBvn6411qdH3HJzYsb/4ZBRf31GOQWV1QmzDCRXdWTsZE5gPUYGNunOuFWNNjsxKbCtmBPKy2LWk9+rkL/crTHL7xGzrhB0j5xqG9Azbl1za+WrVsakLXtKDQKxgJSarDM/VyEnTUHEqskHCb+OlZXX2Oo9gW0+kmPrGb4dOsoMMTazrZDs4UoIszKwY8didrKU7wh+V5zPuzKB0Y3h4GC6vkF5gRUWxGw0xwtzT9pFw3OtqF/UKNQYZKsLh5B8F/l6+8hMWUOUQnkK5Ysf6rwT35fvrLKd5V1s1X52bzhsduAY5Ho8ZnvLMRmU0cmXoNEeQVZ6I1fEVOiGbVcxE/ogY8O6BdYvP2ZjkK8RPattdO/ALhzWxXoy6RbKFwIVmif0lzJ4B996+XKibSGGItUqtNSjJ4m6dCSw93fV2OayHFu8mzXreyDb4zQSzgUQqyYlwk/YcviuBiSGTiSRpT78Dv/qOw0i8YlDvgNpKFcPDez8vjV2aVHcRkO8/XD9ETnn6lrd7CljEFCHXYWMVDD8PwB5rtlTY6uQq9UH47ZwF/ZYyLVaskXnrd4+IWPq8HVvKF8SNJgylCn9FTqSLX30OyFjyJfi4F41jJgLvZGvEWjHhTk2iGMaZXXlvGu7Aq/lyYm2GdiJXCsh1yMI9za0hs37a2zZ3rgtQ3tYyucQGkQVwi/NQ58wSdhbmmrJUw1Dgq4tq3P5FKKJXDGS1UODsc0NrLFxg+I2sLZRdKEBeaNoKeAde5+0VcnNMWRoD6Og4gM1tmJf3FbReb+702w7o6NKZK8aGUyMnsJeu6XFrpUv3S4NViMluZLl04FfxGTapUNZCjygxs4rjNtQbL75nOsKOes6T81DwIk2SbzUAA4cD6z4EC4122O2YC2rc3bX2JbSeKhZJJlNm10m8s1B8C8cEtiUUTG7toiGURjYGDTd7mghnjoXAuqPj50MbHtZYEv2xO2ljcSp3Vpjy+nIqyFXaantnbT4YVRfRlEjYnbZaLPr0XQn9MejAVuvd+bNqw0n2ibwknBLyyhn+PY+WsWf1wT2zg5W5eyL2T4ItxLNQ+c7ohGo2BJ2Lb3M64ajOlrupCFmN00wu6HIbDSmBmm3rn00UcFpcEqaqUwEuxgNPb0usAUbAlu7P2470V7LKyLtVTLWESkxkpJttx+23gnYeq8oMrt5LIsmCplU47jkq45i3BHF7BTPdKJtpJok3BVMWu3G/vra9rj9cjnmgWLMA0xqaejWqiFbI89szeFwBREayAAaxNUTzT4xqdpmDIvZwPx4SMiugbQG3ba/V/JVxT8HmcRavjdmv1kbs+dWme1ngvQkHfsZNvy2f3zzc4RN5btbgIlq4gizT19YY9eNZCJtYG7Yobt8NQ2pE20D+EiBOMpwbTF219++X2Nz18XtxAEahmxjaB/pmkJzAhqGbLmDBpp9ZprZJ6cys4x9TRMarnmkT81pkmsLo6I/rArssZVMbu2KRfZX5KujRkjnREcjKH2Qsa506DePM/u7mWi3jKTkseDy1TiCTrR1sBHBnqAB7D0a2OvbYvaj9yIttoJZ31CLrXNtOn8Nh3w0Bi3XvHWS2ecvCmxGYcx6M8nhpoSOrTl11IfKA9yyYvbzFWZ/gmQPoMVWS4uVAHaSpMmzbsjTuFFmX50e2E1jmKTFZcw79IYr0Im2Di6yl63bH9jPlgT25Kq4FWOXDdBiO1MDqPM6oRuPJsymFlbbl66K2x2TYlZA4xARe2p/BCRHpdhd562ssZ+9H7O3N8c6bKKrLd5eciQXseH9AvvohYF9/tK4TRzgXi8NYcuA0pMaQCX2su2HY/bYEuxl78VCJ/AatIzOnPRe1fjyrtiVY//6Kh0GDeP2cYEN7MmsMRqJ82371C7VEHbW+/Ct/vN6s++/Gbf1+6ibDvImaKu3lnwFtJGSgzH71VKkCTb50sWBjegjN7CYd+h1gKa5eZImu+Ngtf2YZYtP8NmJPbYSgsqEpMZwgndZj735B28G9jyz2ocqgtBbIhPerzO8g+rg0PEaexavgh+8yeKDXUy0Yo7S8UxIiqmwG/OH2s5jiwPbie1ZbcrTaQScaMHiIMO5X63sYo+9w6wvQpIpDeB0NSP4mEBW75TdOW5v8bcc1zRP7YPAcbB+c0fMfvxuzFbviOqifZ7cfk9Rm1HbeQT5emJ1zA7SkXg6jUBWE61cbNQIXt5i9jiuNUe0sgtCysSkd5Vm+/42s58wybeGNfInO7H9uTPUkchHKwk3ou09vjJmyxlVnKj1ve4M5W9uGdV2DrNi8qeL2S59Y+S5k85eOs19v9Zcn9VEKw+D5SWB/XIZ9lmGc5lKsqcERGSLpvHqOrNfL6uxXYdq3IRwCpy2/6LObR8eLL/HhevVNZgLsNGmm/91W7+12tB2YjJoQnnR9powVkNbP6Mz5pe1RBsOdVhS+3tWey3ajHaHtpeJJoP6QqnGf5R19M+vjxMAB/9gabX1L/LfrUZAmFbiyvX2jsB+s5yFCTJJ8TvTk9qQ4n2swTz13Ka47adzkcxle8paotWyx/XMlr68JW4Hj8TasREgdadCK3WA+PH4Gsh1A1rHb1ZjV8ugSZkOQLPRR4pw5Mr1NGRTTGAYYZ4NHXkICO9+gOhiz603W4l3hdpatqesJdoyZt4XbkUQMBm062KE4yxi3/EGxiweLCfdDkrSOl5WQ9hZzZJPWoanNkVAttnVdGZPY6bJFA+W5gCkNrWe9397S0DIUJevrCXafQyfl2FD0iZ2iR1DmyNILbpW8naEaedVj2K8W9ahmq0mKY4xrFtUErfjVe5R26L6bOImeXW8VVxl/397Vx8c1XXdz+oLCSSQQAYJxIcE2BGYmJWDbUicGLCdajVJmlVh3GI3mQh7MmPXrUHTji1NMkPkztSW0xlH9A8jTWdwRTt1ER27iBk7yJlpijyxs7KDo6UFS7YRXtlgSxjBLvrY29+5773VaoWQkHefeNpzYbXv7bvv3nN/99xzzz3nfnzJq76SUKPTzlfME+Y9dD/DhuTJHpJW0AZQ+aewibLtBkrWYnkVwU2w5IzJOPKBiy7yxPlkbwlxLD9jyXvKvvNpmjYZJC246GB+A1vtGdinkz1gLUdyhi4ewWNhgu2NgO2zvOTsCrr6QDu8cJhTlp6DbZGw99zcJdiMwL7NZNlmeBHTvAKwp63CvggS4ocArwL7I6xDto2WLNIt/rqM9eP9p2G3wNAtDVtu5a7Fzi+FuJ5jxUz4t3aMQcie+QxZ3Zrw7G7qDJJW0H6Ao0GGh1Nsl7OaG1i4dr2G5TTYYovPGhmEpMu/g+j2KuwEA2FrU+CGwFtBnv1C0ebloENGePFBHrh+0o+pTYNwsvK6ZzsDj5T6u4lOHcI3DMTp88BfELYLSnBcwk+I8iBwbSRJO50DUCx4fW4Sh6Qt/acwHcyYFziMcSWflnfbIxCs0DICbxF9cATbH90NrXYhZC9XS+JbA+QBhrYu2GiTuAUkqOj9QWwYE058HY4jfxBOh4/egLP1Q5xz9CMIVgjYix9DvW6CsbQDmu0asJZ9dOlR01DKODKT7YekFbSUNoOCNgOmguX3Q7BugsaRhc4en8AJNAQs2Vq2BQ0BWyLZ1hgUzMXsrUGeEuKGgAv8RVAubQ+DGKtfgKN10Xocu3EPOnRsHMsmgxDsZHMLQA53r/YJWi5/WK8ESm5hm7SCdgFMVbbJMuY2K3Cmqch8LswGfCgTM30mtFv+hGA4tnHKFze3VGyNP39ecjcCq2ri+c3HvPCJBLYH9nCGMNUhazG20EKHrs+zz4aN1ItrEMTbttkY+OSFRfPt8zvYWLQbyspe1G+ItMRGzkkdMUboic3mGqnrAbvhENO2C9yzKYE/KRmIb1+VsMzno8pzcdiezUrONXCZRT8BzqyUsOHXxLWtQR9nCz4awWoJ5inWYHm1xGU4X9kBy9c2Bha0SxbYmOFNmpV9rfomA6BoAfZkhUJpdzvQI7chuKT74KgYxDe7pdl5MXDO8AzbZJ+1qiM3W1F+Fgt/CfFEIB8+qHQeNcUz0amklYoZBtlFsNGCp65gWRbzV6gfqydextk5sN1qQWtPfXPZM2EVW55jT35TgWem4iSt6WA9zqrnUz1/D4e/rVMPWI3kc0sCv4VtFscdZC6CTe092NLwXXCXMd60qXWytrFhKfwlmdwQbMp0pjjd5nyXLkihe1Zi9gFmWfEqMdsCO1mLtmNO1b9j2V+T0XkPnEXHfgoHyd0J/uJhvE11jWxWLVK0aoHwV9JqtKvziO4rNuWaTXyn+Tsd9rIlYPgV38V50nBQ9LxpCNv1VZiCswJtINWWhsDyPg1t7r41Lsqbm2JX07NN3sxkRsxO86HN7lgHjDGKZ6xtCzxPtuhbsMk+BAkPx9hHrTAb9Bj3PKuFe1cbApeZzcNunMRcvMiePG0o1rSzSFqNNidD0bp8RUvzUugTyDvbdoTPW020+edmhXFPj6C5EgJWC1njp0T/5UMaF8MZfQ9Gmey4kRBfBDJQnSU5I7RxWSr9rgtWIgxibAnMSxkwH6y4D2P2e5El8xgqm6Wejd45JiMLyvVG6A5LskXQJq2gzUp36d72zpXYaQjzua8EbWkGYHZAru2wNuV3rWzA9/Mx6+fhr6ERwJbIR0hLiC8CjOmKRankgVbL6/2HYKKyZ942MmYpx6dyzmDIhGK9FW3rTpjnMpNWyoxWALq55Ays0a1Aj/sghE0h1ggk09iZFedNaAQPrlaUY/fQNknYjWXdPIwUtq8h+kYxCg3Mkyag7EvRpv5krWGflY5cjymSpvrHFTQbQmbrckXfLlY0H6ZTFr6zPaRDuyjBKl/v7ViRWeAivpeQGASYn9bCF/CDW8O04hZF6UlgouEy56Itbb2V6H7Y/3Oz5DRc5q4kEC0TN6J0lL4YWu3DdxCVlcBxAaHDmshsDWymW5yr6IfrwrRtFRoEJj2ItpG42ma/EzvFHljtosqvuzBxHw1uFrc4bjvsYN1cHKad6xSxwzlDOnLNYLO42idvQMwYGVgqefdyF/38PqKVcAxl8FB68lcdF4Mb+Fz4SO661UV/jka/DHMbZ3OncrNUEOO+Ms9FP8Vq64oNELyzeOTEiso8rPKt2uSiTcuMEeJsbEvT4a2kFrQMGAsb9rrfA8ao+9Yw3Q4vKQ/xbJoFM506u+F3eDg3F9rr5lKiv9tM9PVCFxwU0gRuGMhpvMAos1bH2t1P3WHyrFeUxSOJWdTyuK1koM3cgjb0q+1E5ejMc+bAZDANvGbrK6LYo2a1ZgtnxQO3pdIVNIB/wIyYj89h+iFWMdq6mCEBXMZly8bMgnvh+Hr6m5hpAY2DG7k0ggSAPUGSjDXXA9vE/2aLiz7DAoZ3sTDw80tgr/AELzno5zkwj6wuUPTX34Q9+jbuxGeXohKPqnAphHgk5PQ0GAQ+fuOLK0S/7iZqxnHJJ7pcdOmyc48hZzNIERac3Q9N9scbFN3Bmuws09adxHfMX4MQsn/AdK+XOxS99j4WCPa7aHAIpWAGdFhIg3LCppB7VhM9BP56oARaLebMsoYrHfnYyhSN1sSDGYMdQ4tgx6xYo2gxhnfLMdz7tz9g2Tg2Q+LuyAldEpeDtScXanZtoaK/LCP603UuKoGdUDTZscxv9x0LoDmoFx5VzNukqGi+i5pPYhuCj8FbWNCgecxuoqaRH/MXlyUbm4P92YYwPeROoU1LXdoEx79LGI+AaLQxmLBiwQzPh+t9Cm22vQfa7TuKfvORi4Zucu2WGwDbl3kxwg/WE1Visjw36oXoPHiXLmkDMZU9Q7fMX6zZ9l81tNv/fF/h6Hec3YYOfdgUuDNE2qTZshY7J4vobmivj2C2zr3waRRA4GaB73QHP2kKyRlBBO116l2f5AnG78RRHP/iT0NjQOPAcl0+Ppr3ytYaCEvmGQyWdsENIJ1nFSwdoR/flUrfXYutE2A746WgImBnsIKukzWzDm84E+gfgbkqlf7Rh60JevEbzFcscJn/mMdmMlj8xaMhXmy2EsvWKzEH+0dlLmjkELrgL9FiJ68hEbSTYMTMbgnc92BbO/xHRb+G7bbnAoQuGgSfs0gz5dAA88+BiSN/AcwE0FzLVxN9Z9kwbShMxRDVtJWJlJ2khmf2MQtS5q9hfM5jxPQf6Mz/C46yzgD8BXCWXUWnrvkLz20P4B3e7GsRNNbCW4i+vRKrCVeG6S7MLliIjYhY+IqQnVqtiKCdGk7aV8Ebg1wYCNP751PoLTQE/pzrVThF1kUDlhbCmi7SjLcmEtEsWHOFZpGH4dtS2JBXLcYOXEWKvoG5wGuw7DEbDSMNDYDjS3AWAnyQ4aWQojMYNf2u10X/A/7q+gT8ddFF5yF0h2FqsDr+ePMXD3tYaLKfgg9inocOvAAaa0E+0bZlitxFRHdg1sRC8J0eJSEe/kuYIgIiaKcIVHQ0FqSXwPQ9Xyq9YcjvP3WRH43iw/M4URZC9yI0E30iTYwWEnMbneSY6zEMzDc8PJuDVV3w8JZgJdvKhQpaK+xkRS5agcaweK6iuRmGs2tMQnLjSASYT66iU/8MfHT6fJjeRcfuY6GLz9mL8B18CdMVz1TgEMVUUZfGs+v8jfAYX+DjAn9lQ4iWYHTE/LUGGuwm8FcpBG3RPEXZeM6LeyRMDwERtNPDTWsWbKcNokEMYHj3OXb/6ukL07kvUyBsif4PpoVzfSN0+lIKhS7jRFQ0DJjjIkeCsUaitRJmcqYBf6CIaq2Ch2uZmPs6H1pFIYTrejB7/rwRunVJKq2EYL0FJyIsxPEzC/CctVe9jNZKh9OS4HgEWGjy4QhXwTSXwV/sOPsEQrYHn3PQbru+wOdzRR9dDMPkkEoj4L8R8EJk9kIUfzEYzGN6p0R882q1FPBXPvhnAez6vB9D0fwwhGsKFeO6AM94M3jep4CdXMxfPELiNCRMDwERtNPDbdxbPKRjwcvDvysQqufB+BcuhenSsItCgy46hwbxv4ERGsJi8EHEGRgYgf0tTAqcnMmMPzhIi/PSaCEOSsyHhpqTFqbF2KU/f54LR81A28B99pwUPXuAh3jC+OOqYFb/wJ0y75nM/MUzFvpC4LEBRZ9fCVMonKr9Be99eJWu4uDPq4gXhAni8uVhGsZ8MrbXp+EIm5zUMC3JS6dF6Lz5zDye83pLToo2ByzICKNjd8EsgLjgR+Gv+LKTCNr44impCQKCgCAwDgH0XRIEAUFAEBAEEomACNpEoitpCwKCgCAABETQChsIAoKAIJBgBETQJhhgSV4QEAQEARG0wgOCgCAgCCQYARG0CQZYkhcEBAFBQATtMCYkYtFBdOh9t41a3/ATnsQ9+N9spZbX2qk/Js+4Z+TQBEM9HdRypI16EwF+NCb9fmo90kLtp/qjf7X/+mahw/6SJ1WOyStoL3TQszvLyJWehQ+O3XBXUNNbvaj8Xqp3b6eKB9eRP+6NPUQnnq+gyu/XUfdsFLShXvK/330DHVSIut/3U38Uzid+WUaV3u3UfCrqxwQ0yVDPCarwVtLjb3QnIPWpJ3mz0DF1iiXmdBBIWkHb8kwZ1b7SQbTRQ95yN84WaSX/eYawgKrfPkqHX/dRKZYoxjtkYVUOFtji3+wLHQc8tG5DJfmn2ImE3m2ikg3rqPnMqFDdssdHzYeO066vJRihNCy3QyjOTHA+k1WzRQcfScxhitgZkeWvUxBIUkEbopAeMXrI1w6h2uqj4PkA1ZUXoN5C5DvWQk0HWrXWGTrTQmWuSmo6coiq3XxGvYvK9hyC5tY2er/zBfIPGFXefaQW2nE1zANNVIG4HL/2XyHQJwjdb47G4/daJxjKhs60Ua0HGriZ5u7n24wUQ93UtKdy9PdfHKJes7HGlfZhP9Wi/BXPtJgaa4hanqlAWWu1YO1+cz9VPcnl7MApqGVUsYfj9VPbgVqqMHFzucroWRMLLs8T7id0GZ54ZAuVcTqQt4GONmp+eT+d6DGF7xTLV+sx62bns9RxwYTmFDB7DDSamJXxs17j2fX+jsUaGvbOSvBAGR1C3bTswf3zrdT+2gv4DceIH/BjPbWfmp7Zre91Xu5KOvSOmZGJW/WBFjrEeDEtnlrqiLFYML9U78QzjK40nWYZrkenPHMQAnxmWPKFoGreYexmSOU16ri/LwoC65lX+YJKBf3NWDluxHXv8CrovpF7Kvcqz0bj3vOiT6fRedAbee4p90SuG08iMTWadien3dFgPN9YpRperFMenbZH+aLJ4VQv+cxnpJgGjufedwIP+lSjmT/T4rWudzQjpzjTPtSpvExfuZF2dFl8waA6/NQoLh7QWLXvqKbhKP9evlc1vFQfoa/ZH1RdLXsj2Gjad9SpziGlLPwMvKZePiqvitQFPX2cUVPq7FGdx97nGlT902a9mPRb9ep9qdOIG/kbUHW6Htyq8dXjqsHkE+++wypwyaq/0bLWvBpQaqhL1eAdz1N1quG5GpNHvLo8ysJNp+kZpTGGDs1j1ypDhC65cDIC2EEqScP5E6pKM7/ZaB5tVAE09GgBooWhJWgfNYXX25ZwbICYQzhpCmKz4XQerNKNWzdAPO58yWjgHt2grYaKRghJePhRI++qgz7V1xdQzeZ9YweLydFgCSXPcyxczcC0nrbyNmkZgpDQwhbC+lKUoI0H7RAYGi9TiMfixALFwNMUMBE6gypwNoBPlzq8z+h4DCGqIp1ds9+KzILWwE/HmWr5LJpOHzaEd3mjFvKcajDAeQdUV8dho7OKEXDjBG3Q7NQQj0NfW51O03uQBbJVf6RqDuFe84uOhs6wzyjnaZ+qK+d6NTrqUVxqVBfHR/q6wzKfWwKfImWw6nS0DGYO8uVgBJLUdAD9IX8zNQ4FyfdqA0FLJTqwm6r+GcPACYL3XrdhV83GPnIInp9sIWwNSyEctqeDtr2a1/hat5afEpVurdTf4y2BlvmCqAknKOblFdKuAzrqOGdSaMAYZ2YWGGnqWMg3ZJk2j5kXaQVUvJafwuxhvKKjxp92JDvcT52v6OTH/QlZdsYLbVQJZ2Ph8kJ8SqjyZ61RcS3ieavJ0euoCFMv3/fMullVShD2xsaq+Gr/VSVlFXLehVSC4bzOPaaeovPT15nF5N2Bq2O7qPr5/VS3p1b/XLmpOCqql3btKMUelcZPvW/tJ1dOnlHOtbD9HzN+H1PnO9ZRMcfPdFMlp8+Xxpf+642UwT2mDFFR5NLBCCSnoEXD7u2BJErLJPf3HqcTJxt1Fbb6uyeuyhhZkBnrRDFttFYCnWcNSed/27ClQqxaj8Z917zaRdCO8AlSsK+Pqm6PboIcvU+/E4p2z0OYZeaagrc812y0/dR3mqN69D62+iX+E5P1V6LdKudwgMZ0S6DHoBJ0mQLIf2Q/tSB7977jPHIiaPcRkqIvslAP1wrTLZ9OK+Sn+id17nQcG7KrIR9dO/fYnHNp2w9hnEHoPg2bc3k9HT/ZR38R65xDeY0QorZ9T+jLurY+lDNIjeXWs6jvV7oxnwUBNts2s4MaUy1jbqLek8tZgYDZJGZFWaZeCDC7Z3kZdWDGwd7yUuo+9oJ+1+uO1lqmnty1Yj77II5A2FdDrT9r0o+3bYhNO5M8e+qIXqmlZ79fTYWHdlHeQDc1PwYBEWyk0qiaKd26C2m0UOuTZbQ7UEcFZ+BMuddHR/9qC9XjSfWx3VS5p5e2DBym2nfxA8pVyjJYt2x832C4Nu0BQ5BC03viFwHKbYfDz0xXywhogh4ImBY4Emv/tppKC7fRw0WG9t9xsp1a4ASrfMx6g19EJ/cABNorrdT8y2ryZRdT1d8/PpbSoq9QPuBn5k7toKnjvysj9I7NZPxdB+Y6o3vA6GAzZp6EyN/eSllpHtocK2ytV00t2ffbVjjB2mi3qdFaj43vWircGaSa3FbSHLFxG2Y8jI0hd7MYAQebPaZPOmyZDY+6DXueaaetgrOjb4yNtkrbUS0bmmGjg75i2mytexVjw7VsjGiokfS9z5nOmYiNz0ibC9DZUh/jYKs3bcVji9f1esOYeNCCjQjnfapG2wRNW/OOetVpOtNiaY29vzHalfIdrImUieC8qn+Kba5RZXnVsGeiuShtc+zzqb2Wgw541MMhBjONsmy0Qf/RiJOPbZpst7bwa9bOQxTxBsoXsYea9k7fwVGHm/upetXwFOok1karba9RWIM3oJGOljNix2fbs2WjHS0zv9nX0TxaNxv3qsYXOV+jPBGakI47goVXHT9r5DmuTixbt2WzjSJNLp2LQPI6w7jOIFiD8JiPcWp8xbqMCIrTZrrRDpOJ0tZ0GPRMFEX/fj16IQS4KF8lTIn2yfKxyhJFyGQYT/ZcJzVZvlH5jbnk96ZSB+ZL1qyHutcxm0CHPtNJCQfj9fC9Rrn167GC8wZoMQmQr1mAQNQAdRar7RMVDaXPnMA+ONErk/9uWCqDPJ6eKrqajslT5vQmpBflsGyjU0hpgihToH2yfK5RlnE24ZjcJ3uuo0+Wb0yakVt+L3Iz+UVeAZxcCIcPNFDBh8XU62+lWnZSwhxz3aH+NcqtE8Ifjapl20Y8CcmHQHI6wxJYz5nZ3FA9sOklMJMEJe1k2uMFScHWajp+sJ5gwaf9/8QLJ/KoASvV+t5+XM8ymU4+pRvBERPZd6eToLzjtr/A7gAAASRJREFUOATkzDDHVZkQLAgIAk5DQDRap9WY0CsICAKOQ0AEreOqTAgWBAQBpyEggtZpNSb0CgKCgOMQEEHruCoTggUBQcBpCIigdVqNCb2CgCDgOARE0DquyoRgQUAQcBoCImidVmNCryAgCDgOARG0jqsyIVgQEASchoAIWqfVmNArCAgCjkNABK3jqkwIFgQEAachIILWaTUm9AoCgoDjEBBB67gqE4IFAUHAaQiIoHVajQm9goAg4DgERNA6rsqEYEFAEHAaAiJonVZjQq8gIAg4DgERtI6rMiFYEBAEnIaACFqn1ZjQKwgIAo5DQASt46pMCBYEBAGnISCC1mk1JvQKAoKA4xAQQeu4KhOCBQFBwGkIiKB1Wo0JvYKAIOA4BP4fMEfMdfwF94QAAAAASUVORK5CYII=\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='computational_graph.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The benefits of using a computational graph is that each node is like its own independently functioning piece of code (once it receives all its required inputs). This allows various performance optimizations to be performed in running the calculations such as threading and multiple processing / parallelism. All the major deep learning frameworks (TensorFlow, Theano, PyTorch etc.) involve constructing such computational graphs, through which neural network operations can be built and through which gradients can be back-propagated.\n", "\n", "When using autograd, the forward pass of your network will define a computational graph; nodes in the graph will be Tensors, and edges will be functions that produce output Tensors from input Tensors. Backpropagating through this graph then allows you to easily compute gradients.\n", "\n", "This sounds complicated, it’s pretty simple to use in practice. We wrap our PyTorch Tensors in Variable objects; a Variable represents a node in a computational graph. If x is a Variable then x.data is a Tensor, and x.grad is another Variable holding the gradient of x with respect to some scalar value.\n", "\n", "PyTorch Variables have the same API as PyTorch Tensors: (almost) any operation that you can perform on a Tensor also works on Variables; the difference is that using Variables defines a computational graph, allowing you to automatically compute gradients." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n", "[[ 0.]\n", " [ 1.]\n", " [ 2.]\n", " [ 3.]\n", " [ 4.]\n", " [ 5.]\n", " [ 6.]\n", " [ 7.]\n", " [ 8.]\n", " [ 9.]\n", " [10.]]\n" ] } ], "source": [ "x_values = [i for i in range(11)]\n", "print(x_values)\n", "x_train = np.array(x_values, dtype=np.float32)\n", "x_train = x_train.reshape(-1, 1)\n", "print(x_train)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]\n" ] } ], "source": [ "y_values = [2*i + 1 for i in x_values]\n", "print(y_values)\n", "y_train = np.array(y_values, dtype=np.float32)\n", "y_train = y_train.reshape(-1, 1)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create Model" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class LinearRegressionModel(nn.Module):\n", " def __init__(self, input_dim, output_dim):\n", " super(LinearRegressionModel, self).__init__()\n", " # Applies a linear transformation to the incoming data: :math:`y = Ax + b`\n", " # Args:\n", " # in_features: size of each input sample\n", " # out_features: size of each output sample\n", " # bias: If set to False, the layer will not learn an additive bias.\n", " # Default: ``True``\n", "\n", " self.linear = nn.Linear(input_dim, output_dim) \n", " \n", " def forward(self, x):\n", " out = self.linear(x)\n", " return out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Instantiate Model Class" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "input_dim = 1\n", "output_dim = 1\n", "\n", "model = LinearRegressionModel(input_dim, output_dim)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Instantiate Loss Class" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "criterion = nn.MSELoss()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Instantiate Optimizer Class" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "learning_rate = 0.01\n", "\n", "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the Model" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch 1, loss 272.38092041015625\n", "epoch 2, loss 22.21832275390625\n", "epoch 3, loss 1.813330888748169\n", "epoch 4, loss 0.14894899725914001\n", "epoch 5, loss 0.013178667984902859\n", "epoch 6, loss 0.002092757262289524\n", "epoch 7, loss 0.0011771840509027243\n", "epoch 8, loss 0.001091274549253285\n", "epoch 9, loss 0.0010731515940278769\n", "epoch 10, loss 0.0010606897994875908\n", "epoch 11, loss 0.0010488062398508191\n", "epoch 12, loss 0.001037083100527525\n", "epoch 13, loss 0.0010255005909129977\n", "epoch 14, loss 0.0010140512604266405\n", "epoch 15, loss 0.0010027230018749833\n", "epoch 16, loss 0.0009915299015119672\n", "epoch 17, loss 0.0009804584551602602\n", "epoch 18, loss 0.0009695058106444776\n", "epoch 19, loss 0.0009586845990270376\n", "epoch 20, loss 0.0009479772415943444\n", "epoch 21, loss 0.0009373932844027877\n", "epoch 22, loss 0.0009269207366742194\n", "epoch 23, loss 0.0009165690862573683\n", "epoch 24, loss 0.0009063404286280274\n", "epoch 25, loss 0.0008962156716734171\n", "epoch 26, loss 0.0008862058166414499\n", "epoch 27, loss 0.0008763184305280447\n", "epoch 28, loss 0.0008665226050652564\n", "epoch 29, loss 0.0008568512857891619\n", "epoch 30, loss 0.0008472850313410163\n", "epoch 31, loss 0.000837819476146251\n", "epoch 32, loss 0.0008284652139991522\n", "epoch 33, loss 0.0008192143868654966\n", "epoch 34, loss 0.0008100772392936051\n", "epoch 35, loss 0.0008010237943381071\n", "epoch 36, loss 0.0007920682546682656\n", "epoch 37, loss 0.0007832296541891992\n", "epoch 38, loss 0.000774485757574439\n", "epoch 39, loss 0.0007658368558622897\n", "epoch 40, loss 0.0007572844624519348\n", "epoch 41, loss 0.0007488163537345827\n", "epoch 42, loss 0.00074046291410923\n", "epoch 43, loss 0.0007321959710679948\n", "epoch 44, loss 0.0007240191334858537\n", "epoch 45, loss 0.0007159364758990705\n", "epoch 46, loss 0.0007079294300638139\n", "epoch 47, loss 0.0007000433979555964\n", "epoch 48, loss 0.0006922181346453726\n", "epoch 49, loss 0.0006844911840744317\n", "epoch 50, loss 0.000676840718369931\n", "epoch 51, loss 0.0006692878669127822\n", "epoch 52, loss 0.0006618083571083844\n", "epoch 53, loss 0.0006544170319102705\n", "epoch 54, loss 0.0006471142987720668\n", "epoch 55, loss 0.0006398847908712924\n", "epoch 56, loss 0.0006327409646473825\n", "epoch 57, loss 0.0006256707711145282\n", "epoch 58, loss 0.0006186874234117568\n", "epoch 59, loss 0.0006117727607488632\n", "epoch 60, loss 0.0006049504154361784\n", "epoch 61, loss 0.0005981938447803259\n", "epoch 62, loss 0.000591517542488873\n", "epoch 63, loss 0.0005849075969308615\n", "epoch 64, loss 0.000578372972086072\n", "epoch 65, loss 0.0005719144246540964\n", "epoch 66, loss 0.0005655293352901936\n", "epoch 67, loss 0.0005592152010649443\n", "epoch 68, loss 0.0005529685295186937\n", "epoch 69, loss 0.0005467943265102804\n", "epoch 70, loss 0.0005406942218542099\n", "epoch 71, loss 0.0005346568068489432\n", "epoch 72, loss 0.0005286796949803829\n", "epoch 73, loss 0.0005227777874097228\n", "epoch 74, loss 0.0005169393261894584\n", "epoch 75, loss 0.000511168094817549\n", "epoch 76, loss 0.0005054617649875581\n", "epoch 77, loss 0.0004998166696168482\n", "epoch 78, loss 0.0004942359519191086\n", "epoch 79, loss 0.000488717167172581\n", "epoch 80, loss 0.00048325269017368555\n", "epoch 81, loss 0.0004778570728376508\n", "epoch 82, loss 0.00047252766671590507\n", "epoch 83, loss 0.00046725181164219975\n", "epoch 84, loss 0.00046202458906918764\n", "epoch 85, loss 0.00045686637167818844\n", "epoch 86, loss 0.00045177023275755346\n", "epoch 87, loss 0.00044672589865513146\n", "epoch 88, loss 0.0004417405289132148\n", "epoch 89, loss 0.0004368059162516147\n", "epoch 90, loss 0.0004319269210100174\n", "epoch 91, loss 0.000427103164838627\n", "epoch 92, loss 0.0004223263531457633\n", "epoch 93, loss 0.0004176150250714272\n", "epoch 94, loss 0.0004129531735088676\n", "epoch 95, loss 0.0004083385574631393\n", "epoch 96, loss 0.0004037777835037559\n", "epoch 97, loss 0.000399271200876683\n", "epoch 98, loss 0.00039481467683799565\n", "epoch 99, loss 0.00039040533010847867\n", "epoch 100, loss 0.0003860442084260285\n" ] } ], "source": [ "epochs = 100\n", "for epoch in range(epochs):\n", " epoch += 1\n", " # Convert numpy array to torch Variable\n", " \n", " inputs = Variable(torch.from_numpy(x_train))\n", "\n", " labels = Variable(torch.from_numpy(y_train))\n", " \n", " # Clear gradients w.r.t. parameters\n", " optimizer.zero_grad() \n", " \n", " # Forward to get output\n", " outputs = model(inputs)\n", " \n", " # Calculate Loss\n", " loss = criterion(outputs, labels)\n", " \n", " # Getting gradients w.r.t. parameters\n", " loss.backward()\n", " \n", " # Updating parameters\n", " optimizer.step()\n", " \n", " # Logging\n", " print('epoch {}, loss {}'.format(epoch, loss.data[0]))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Parameter containing:\n", " 2.0053\n", "[torch.FloatTensor of size 1x1]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.linear.weight" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Parameter containing:\n", " 0.9635\n", "[torch.FloatTensor of size 1]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.linear.bias" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Variable containing:\n", " 4.9740\n", "[torch.FloatTensor of size 1]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = [2.0]\n", "np_arr = np.array(arr, dtype=np.float32)\n", "model(Variable(torch.from_numpy(np_arr)))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<generator object Module.parameters at 0x113474258>" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.parameters()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "object of type 'method' has no len()", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-19-7ed7187bd83a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: object of type 'method' has no len()" ] } ], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }