{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![Python logo](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Python_logo_and_wordmark.svg/320px-Python_logo_and_wordmark.svg.png)\n", "\n", "# Python fundamentals\n", "\n", "This notebook gives the basics of Python 3.\n", "\n", "The best resource for beginners is [The Python Tutorial](https://docs.python.org/3/tutorial/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Examples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "You can quickly do lots of things in Python, such as manipulate an image.\n", "\n", "Excellent packages exist for almost anything reasonable a computer can do." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# You need to install Pillow for this first: conda install -c anaconda pillow\n", "\n", "import urllib.request\n", "import io\n", "import PIL.Image\n", "\n", "URL = 'http://www.gmit.ie/sites/all/themes/gmitpublic/images/gmit_logo.png'\n", "\n", "with urllib.request.urlopen(URL) as url:\n", " imagefile = io.BytesIO(url.read())\n", " image = PIL.Image.open(imagefile)\n", " imagebw = image.convert('L')\n", "\n", "display(image, imagebw)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Many plotting packages exist, such as matplotlib." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsvXd4nFeZ/n+fGWlm1Huz2mhU3ZtsybZsjW3JcQmxEwKkEAIbyA8Iu8vuskv4EkpYSMLSNgsBErJAYIGQipO4xJblkYuKLdtxkaw66pLVuzSa9vz+mBmjkSVLoynvkfR+rmsuTXnL7fF553nPc5/zHEZEEBERERERsSERWoCIiIiICF+IgUFERERExA4xMIiIiIiI2CEGBhERERERO8TAICIiIiJihxgYRERERETsEAODiIiIiIgdYmAQEREREbFDDAwiIiIiInZ4CS1gPoSHh5NSqRRahoiIiMiC4tKlSz1EFDHbdgsyMCiVSpSXlwstQ0RERGRBwRhrmst2YipJRERERMQOMTCIiIiIiNghBgYRERERETvEwCAiIiIiYocYGERERERE7HBJYGCM/ZYx1sUYuzHD54wx9j+MsTrG2DXG2IZJnz3OGKu1Ph53hR4RERERkfnjqh7D7wHsvcvn+wCkWh9PAvgVADDGQgF8B0AWgM0AvsMYC3GRpjsoKSnB888/j5KSEnedYn6UlADPP2/5K7JgEduXiDvxaPsiIpc8ACgB3Jjhs5cBPDzpdTWAGAAPA3h5pu1memzcuJEcpbi4mGRyGTEJI5lCRidOn3D4GK5mdMJA5X/5gPRyBZkkEjLKFTRUWCS0LBEHmTBO0P+89T/kLfe2tC+5jN47+Z7QskhvNNG1N46Rwdq+DHIFdX14WmhZIg5iNpvpN3/7ze32pfBRUHFx8byOBaCc5vB77imPIRZAy6TXrdb3Znr/DhhjTzLGyhlj5d3d3Q4L0Gg00Bv0IDNBP6HHvh/sw1NHnkL3qOPHcpZxvQk//rAaWc+dwqlfvQGm10NiNoP0erzyvd/i6bevoWtY53FdIo5hNBvxs5KfIeFnCfinX/0TDHqDpX3p9bjvhfvw8Tc+jpreGo/rMpkJfyhpxI7/Oo1jv/gLYG1f0Ovxu+d+hyd+fxF1XSMe1yXiGESEtyrfwopfrsAXfv6F2+3LoDdAo9G49dyeCgxsmvfoLu/f+SbRK0SUSUSZERGzzui+A7VaDR+5D6RSKeRyOQ7sOYBXLr+CNb9eg8KGQoePN1+qbg1h34tn8IvTddiRGoF7nnoIUoUcJJVCIpcj4J48vH25FXt+dgaa6i6P6RJxjNahVuT8Ngf/euJfsSpyFV544gUoFIrb7eszBz+DE/UnsO7X6/DbK7/1mK7u4Qk89EoJvn24AvGhvtj+hQft2lfC/ftxsbEP+148gz+WNtl66iKcMaIfwSff+iQ+8eYnIJPK8Mxjz9xuXzKZDGq12r0C5tKtmMsDnKeSiCzppOeee+52N+zqrau0/BfLyft73vT69dfndUxHKK3voZXfPk6bvn+Sztd1TxZG9Nxzlr9EVNc1TPf8rIiSnv6A3ipvcbsuEceo6q6ihJ8lUMBzAXbtZmr7ah9qp92v7SZ8F/Ss5lkym81u1dXcO0pbnz9F6c8cpbfKW/5+vintq2dYR5/73QVK/PoH9NzRSrfrEnGM/vF+2vjyRpI8K6Hnzz5PBpOBiO5sX/MBc0wleSowHABwDJYeQjaAC9b3QwE0AAixPhoAhM52rvkGhunoH++n7b/dTtJnpXS89rjLjjuV660DtPLbx2nXj09TW//YrNuPThjo0d+UkvLpD+iDq+1u0yXiGC2DLbTsJ8so8keRdLn98qzbG0wGevzdxwnfBf34/I/dpuvW4Dht/2Ehrf7Ocbra0j/r9iaTmZ559zolfv0D+smJarfpEnGM4Ylhyn41m7y/503vVbnep/JoYADwFwAdAAyw+ARPAPgigC9aP2cAXgJQD+A6gMxJ+/4DgDrr43NzOZ8rAwMR0ZBuiNb9eh35P+dPV29ddemxiYg6h8Zp43+epK3Pn6L2gdmDgo1xvZEe+OV5Sn/m6JwudhH3MjwxTGt/tZYCnguga7euzXk/k9lEn3jjE8S+y+idyndcrktnMNJ9vzhHy791jC439c15P7PZTP/+5keU+PUP6PBHbS7XJeIYZrOZHnzjQZI8K3FLOyESoMfgyYerAwMRUdtQGy37yTJK/3k6jUyMuOy4RpOZHnq5hNKfOUpVHUMO7989rKOtz5+iLc8V0MCY3mW6RBznc3/7HEmelcyrZzmmH6Os32RR4POBpO3TulTXt/5mufM/dr3D4X0nDCZ68FfnKe2bR6n6luPtU8R1/KT4J4Tvgv7r3H+57RxzDQzizGcrywKW4Y/3/xE1vTX46vGvuuy4vy6qR4m2F98/tBrp0QEO7x/uL8dLj25A5/AEnn2vwmW6RBzjzYo38buPfof/l/P/cE/KPQ7v7+Ptg9cffB0A8Ni7j8FoNrpEV2FVJ/5Q0oTP5yRh76poh/eXeUnw0qMb4Cf3wr++8REMJrNLdIk4RkVXBZ4ueBr3Z9yPr239mtByxMAwmV1Ju/DvW/8dr155FacbTjt9PG33CF48VYv9q6Px4Ma4eR9nXXww/nFXCt650oYTFbec1iXiGH3jffjy0S9j07JN+Hbut+d9HGWwEr/c/0ucbzmPn5f93GldwzoDvvnuDaRF+ePf96bP+ziRAQr84NAq3Ggbwi9P1zutS8QxTGYTPv/+5xEoD8TL974MxqYbrOlZxMAwhe+qvwtViApfOvIlTBgn5n0cIsI33rkOhZcE371vpdO6ntqZgvSoADz7fiXG9Sanjycyd54pfAb94/149b5X4S31dupYj6x+BPtS9uE7mu+gfbjdqWP95EQNbg3p8MOPr4HcS+rUsfatjsG9a2LwkqYOLX1jTh1LxDFeuvgSSltL8eLeFxHh5/hQfHcgBoYp+Hj74KX9L6G6txovlr047+N8WHELZQ19+I+9GYgMUDity1sqwbMHV6JtYBy/0tQ5fTyRuXGp/RJ+Xf5rPLXpKayJWuP08Rhj+Pm+n0Nv0uNrJ+afMqjvHsEfS5vwyOYErE9wTRWZZw6sgJeE4ftHKl1yPJHZ6R3rxbdPfxt7kvfgkdWPCC3nNmJgmIa9KXtxIPUAnj/3PPrH+x3e32Ay44fHq5ES6Y+HNsW7TFe2KgwfW7sMr5zVomtInBntbogI/3bi3xDhF4Fndz7rsuMmhybja1u/hr/c+Asud1ye1zF+eKwKPt5S/Et+mst0RQcp8NTOFHxY0YlSba/LjisyM8+dfQ7D+mH8ZM9PuEgh2RADwww8t/s5DOoG8cPzP3R439cvNKOhZxTf2JcBL6lrv+J/y0+D0UR46bTYa3A3pxpOoaipCN/a8S0EK4Jdeuyvbf0aQhQh+GbhNx3e90JDH05UduJL6mSE+8tdquuJnCREBcrx0xM1tuHkIm6icaARv7j4C3x27WexKnKV0HLsEAPDDKyJWoNH1zyKF8tedCgXrDOY8D+FddicFIpdGZEu16UM98MnMuPx5wvNaO0Xc8HugojwTOEziA+Mxxc2fMHlxw9WBOPpnKdxvO44zjSdcWjfn52sQWSAHP+wLcnluhTeUnxlZwouNPbhbG2Py48v8ne+V/Q9SJjEpb1RVyEGhrvwrPpZGEwG/LTkp3Pe581LregensBX81Ld1jX8p90pYIzhF4Vir8FdHKs7hrK2Mnxrx7cg93LtXbmNr2z+CmL8Y/BdzXfnvM+lpj6UaHvx5A4VfGTOGc4z8clN8YgN9sFPToq9BnfRPNiMP177I76w4QuIC5z/iEV3IQaGu6AKUeFTqz6Fly+9PCevwWAy4+WieqxPCMYWVZjbdMUE+eBTmfF453Kb6DW4iRfOvYCEoAR8dt1n3XYOX29f/Ev2v+B042mUt5fPaZ9fFNYh1E+GR7IS3KZL7iXFUztTcLVlACWi1+AWflz8YwDgYs7CdIiBYRa+vu3rGNGP4JcXfznrtu991I7W/nE8pU5xu5H0RE4SDGYzfl/c6NbzLEUutl3E2eaz+GrWV50enjobT258EoHyQPyo+EezbnujbRCnq7vxRE4SfGVebtX1wIZYhPvL8OrZBreeZynSNdqFVy+/isfWPIaEIPcFeGcQA8MsrIlag30p+/Bi2YsYN4zPuB0R4dVzDUiPCsDu5a73FqaiDPfD3pXR+L/SJoxMuGYWrYiFn5b+FIHyQDyx4Qm3nytIEYQvZX4Jb1W+hfq+u08u+935RvjKpPh0dqLbdSm8pXgsW4nCqi7UdQ27/XxLiV9d/BXGjeP4j23/IbSUGREDwxz42tavoXusG29UvDHjNuVN/bjZMYTHtyo9NuzsyR0qDOmMeLO8ZfaNReZE82Az3qx4E09usNzJe4J/zvpnSJkUP78w82zo3pEJvH+tHR/fEIcgH/f2Ymw8tiURci8JfnNG7DW4CoPJgJcvvYy9KXuREZ4htJwZEQPDHNip3ImM8Az8snzmdNIfSpoQoPDCofXLPKZrfUII1sUH4//EBVdchq1UxT9m/aPHzhkTEIMHlj+A166+hjHD9CPNXr/YAr3RjM9scX9vwUaonwwPbIjD3z5qw+CYwWPnXcy8W/UuOkY68JVNXxFayl0RA8McYIzhy5lfxoW2C7jUfumOz7uGdDh2vQOfzIx3e+53Ko9mJaC+exRlDX0ePe9iZMI4gd999Dscyjjk8dzvlzK/hAHdAP564693fGY0mfGn0iZsSwlDapTjhRid4dGsBEwYzXjnSqtHz7tYeeniS0gKTsLelL1CS7krYmCYI59Z+xn4evviV+W/uuOzP19ohtFMeMwDud+p3LtmGQIVXvhTWbPHz73YeLfqXfSO9+LJjU96/Nw7EndgRcSKadtXwc1OtA/q8PgWpcd1rYoNwtq4IPy5rFnslTrJtc5rONN0Bl/e9GVIJe4ZauwqXBIYGGN7GWPVjLE6xtjT03z+M8bYR9ZHDWNsYNJnpkmfvecKPe4gSBGER1c/ij9f/7Pd0FWTmfDXiy3YkRYBZbifx3X5yKT4+MY4HL/RgZ6R+Rf9EwF+c/k3UAYrkafK8/i5GWP44sYv4mL7xTt6pa9fbEFMkAK7l0d5XBcAPJKVgNquEZQ3OV4eRuTvvHLpFcilcvzD+n8QWsqsOB0YGGNSWFZn2wdgBYCHGWMrJm9DRP9CROuIaB2AnwN4Z9LH47bPiOg+Z/W4ky9mfhHjxnH85cZfbr9XXN+DjkEdPpXpuppIjvJoVgIMJsJbl8Tu/nyp66tDYUMhPr/+85AwYTrStl7pK5deuf3erUEdztR044ENsZBKhKml87G1yxAg98KfxV7pvJkwTuDP1/+M+5ffj1CfUKHlzIorroDNAOqISEtEegCvAzh4l+0fhmUp0AXH+uj1WB25Gq9dfe32e29fakWgwssjQ1RnIiUyAJuUIXjrUqvY3Z8nr15+FVImxefWf04wDUGKIHx8+cfx14q/Qme0TFx850orzAQ8uFG4Gw9fmRcOrY/FkesdGBwXTej58EHNB+jX9eOzaz8rtJQ54YrAEAtg8njJVut7d8AYSwSQBKBw0tsKxlg5Y6yUMXbIBXrcBmMMj699HBfaLqCqpwpDOgOOV9zCfeuWQeEtbM7wgQ1xqOsawfW2QUF1LERMZhP+cPUP2J+6H8sCPDeqbDo+s/YzGJwYxPvV74OI8FZ5KzYpQ5AkQJpyMh/fGAe90YzjNzoE1bFQ+f3V32NZwDJB0pTzwRWBYbr+7Uy3rQ8BeIuIJq80k0BEmQAeAfDfjLHkaU/C2JPWAFLe3d3tnGIneHTNo5AyKf5w9Q84eq0DOoMZH98gfK2T/atjIPOS4J3LbUJLWXBoGjXoGOnAp9d8Wmgp2KncibjAOLx29TVcbu6HtmcUnxCwt2BjbVwQVOF+YvuaB50jnThWewyPrXmMe9PZhisCQyuAyS03DsBM5UgfwpQ0EhG1W/9qAWgArJ9uRyJ6hYgyiSgzIkK4VY6i/aNxT8o9+OO1P+KtS01IjvDDunjXlmSeD0E+3shfHoX3r7aL6/Y6yJ+u/wkBsgB8LO1jQkuBVCLFp1d/GsfrjuMPZdfg4y3F/jUxQssCYwz3r49FWUOfWNXXQf50/U8wkQmPr31caClzxhWB4SKAVMZYEmNMBsuP/x2jixhj6QBCAJRMei+EMSa3Pg8HsA0A98tHfWbNZ9A61IqzLWfw4MZ4bhbYuH99LHpH9ThTI1yPaqGhM+rw9s238cDyB+Dj7SO0HADAY2sfg4lMeOvm68hfEQV/uWfnxszEofWWDPHhj5xbknSp8drV17A5djOWRywXWsqccTowEJERwFcAfAjgJoA3iKiCMfY9xtjkUUYPA3id7N3R5QDKGWNXAZwG8AIRcR8YDmYchELqhzHpGdy3Ttic9GRy0yMQ6ifDO1fE7v5c+aDmAwxNDOHR1Y8KLeU2KyJWIC1kLXrMhfjYWn7aV3yoLzYpQ/DulTZxkMMcqeyuxLXOa/j0auHTlI7gklsRIjoK4OiU97495fV3p9mvGMBqV2jwJAovBUIkW9HrXYrIAD7u5gDLutD7V0fj7UttGNeb3FavfzHxp+t/QrR/NHYl7RJaih1R3jtRI/lvxEcOAxBm/sJ0HFofi2++ewOVHUNYuSxIaDnc82bFm2BgeHDFg0JLcQhx5vM8qO8egXEkG3oaQmFD4ew7eJD9q2MwbjDhdHWX0FK4p3+8H0drj+KhlQ9xZQpOGE3ovLUOAPBe9TuzbO1Z9q6MhlTCcOz6LaGlLAjeqHwDOxJ3ICZAeJ/IEcTAMA+OXuuAj3k9AmSBd624KgRZSWEI95fhyHVxWOFsvF/zPvQmPR5e/bDQUuwoqu7GxEQ4MkLX483KN4WWY0eYvxzZqlAcvd4hppNmoaKrApXdlfjkyk8KLcVhxMAwDz641oHNyigcyjiId6vehd6kF1rSbaQShntWRqPwZhfG9abZd1jCvH3zbcQFxmHTsk1CS7Hj/WsdCPWT4bPrH0Z5ezm0/VqhJdmxb1UMtD2jqO4U12m4G29UvAEJk+CB5Q8ILcVhxMDgILWdw6juHMaB1TH45MpPol/Xj1PaU0LLsuOANZ2kEdNJMzKiH8GHdR/igYwHuBlVBgA6gwkFlZ3Yuyoan1r1CQCWPDVP3LMyGhJm6TmLTA8R4Y3KN5CbmIto/2ih5TiMGBgc5Mj1DjAG7Fsdg3xVPoLkQfhrxZ2lkoVkc1IowvzEdNLdOFZ7DBOmCe7u5s7W9mDcYML+VTFQBiuxOXYzd+mkiAA5NieF4ugN0WeYiRtdN1DVU7Ug00iAGBgc5sOKTmQmhiAqUAG5lxwHMw7iver3YDDxU0PGSyrBPauiUVjVBZ1BTCdNx9s330aEbwRyEnKElmLHiYpbCFB4IUtlKbT2iRWfwKWOS9ylkw6sjkFd1whqxHTStLxz8x0wMNyfcb/QUuaFGBgcoKVvDDc7hpC/4u/DBw+mH0S/rh/nW84LqOxO9q+KwZjeJE52mwadUYcjtUdwKOMQV6ORjCYzCm52YldGJLyllkvT9sPyfvX7Qkq7g3tWRYMx4KjYK52Ww9WHsTV+K6L8+Rlq7AhiYHCAgpudAID8FX/PGe5J3gO5VI7DVYeFkjUtWapQBCi8cOqm6DNMpUBbgBH9CHdppEtN/egfM2DPpPaVHJqMlRErcbiar/YVGaDAhoSQ29eEyN9pGWzBlVtXcF8616sI3BUxMDjAycpOpET621W69Jf5Y7dqNw5XH+Zq+J63VAJ1eiROVXXCbOZHFw+8ffNtBMmDuJvUdqKyEzKpBLnp9rXA7ku/D2eaztgtEMUDu5dH4kbbEDoGx4WWwhXvVVsqAh1Mv9vqA3wjBoY5MjhmQFlDn10aycbB9INoGGhARXeFAMpmJm95JHpG9PiodWD2jZcIJrMJ71W/h3vT7oVMKhNazm2ICCcqb2FbStgdtZHuS78PJjLhWN0xgdRNT751RTmxV2rP4erDSA9LR3p4utBS5o0YGOaIpqYLJjMhb5rlFW1VOXlLJ6nTIiGVMBRUit19G6Wtpegb7+Oum191axgtfePYs/LOoY2bYzcjyi/q9p0oL6RE+iMh1BenxHTSbQZ1g9A0arhrX44iBoY5cqKyE+H+cqyfpsR2TEAMNsduxns1fF24Qb7e2KwMFe/oJnGk9gikTIo9yXuElmLHiYpOMIZpVwKUMAk+lvYxHKs7xtVkSsYYdi+PxPn6XozpjULL4YLjdcdhMBsWdBoJEAPDnNAbzSiq7kbe8khIZlh392D6QVxou4D2Yb5KEuetiEJ15zCae8Ua+oClmmpOQg6CFcKvoTGZgpudWB8fjMgAxbSf35d+H4YmhlDUWORhZXcnf3kU9EYzztb2CC2FCw5XH0aEbwSy47KFluIUYmCYA6XaXoxMGKf1F2zY7hB4G1aYZ70DFUePAM2DzbjedR0HUg8ILcWO7uEJXG8bxK6MmdcNz1PlwcfLh7t00qYk2+g3sX0ZTAYcrT2Ke9Pu5WoY9HwQA8McOF3dBbmXBNtSwmfcZkXECiQFJ+FI7REPKpudxDA/pEX5i4EBwNFaS2X4e9PuFViJPUXWuSbq9JkDg4+3D/Yk78F7Ne9xOfqtsKpryY9+O99yHoMTg1ysBOgsYmCYA0XV3chWhUHhPfNdAGMM+1L2obChEBPGCQ+qm53dy6NwoaEPwzp+ZmcLwZHaI0gKTkJGeIbQUuw4Xd2FiAA5Vi4LvOt2+1P3o3mwGVU9VR5SNjfE0W8Wjtcdh5fEC7tVu4WW4jQuCQyMsb2MsWrGWB1j7OlpPv8sY6ybMfaR9fH5SZ89zhirtT64WxS1uXcM2p5RqNNnX2d6b8pejBpGca75nAeUzR11WgSMZkJxfa/QUgRj3DCOU9pTOJB6gKuieUaTGWdruqFOi5hV196UvQDA3bDV3LQISJjlBmopc6zuGHISchAov3uAXwg4HRgYY1IALwHYB2AFgIcZYyum2fSvRLTO+njVum8ogO8AyAKwGcB3GGMhzmpyJUU1lhE9d+vm29iVtAsyqYy7C3dDYgj85V63UxZLEU2jBuPGcRxI48tfuNIygCGdcU7tKyEoASsiVuB43XEPKJs7wb4yrI0PXtLtq22oDdc6r2Fv8l6hpbgEV/QYNgOoIyItEekBvA5grmO17gFwkoj6iKgfwEkAXH2zmupuJIT6QhnmO+u2fjI/7Ejcwd2F6y2VYFtKGIqqu7nKT3uSD2o+gK+3L9RKtdBS7NBUd0EqYchJndm/msze5L0oairCqH7UzcocY0dqBK62DqB/lJ/htJ7kw/oPAQD7UvcJrMQ1uCIwxAJomfS61freVD7OGLvGGHuLMRbv4L6CoDOYUFzfC3X67N18G3uT96KiuwItgy2zb+xBctMi0TYwjvpuvn5QPAER4UjtEexO2g2F1/TDQYXidFU3NiaEIMjHe07b70vdB71JD02jxr3CHCQ3PQJEwLm6pTls9VjdMSwLWIbVkQtuCftpcUVgmO4Xc+pt6fsAlES0BkABgNcc2NeyIWNPMsbKGWPl3d2e6bKWN/Zj3GCak79gw3bHwFuvYUea5Y50KXb3a3pr0DTYhH0pfN3NdQ7pUNkxBHXG3NtXTkIOfL19uWtfa+OCEeTjvSTbl9FsxMn6k9ibvJcr/8oZXBEYWgHET3odB8BulhcR9RKRbajObwBsnOu+k47xChFlElFmRMTcLyRn0FR3QSaVIFsVNud9locvR3xgPHc+Q1yIL1Ii/ZfkhXtSexIAuJvtbDNr1Wmz+ws2FF4K7FTu5K59SSUM21PDUVSz9NKVpa2lGJwYXDRpJMA1geEigFTGWBJjTAbgIQB2s3AYYzGTXt4H4Kb1+YcA9jDGQqym8x7re1ygqelGlioUvjKv2Te2Yhu2WqAt4Kp8AWAZPVKm7V1yi/ecqD8BVYgKyaHJQkuxQ1PThahAOZbHBDi0376Ufajvr0ddX52blM2PHWkR6B6ewM2OpbV4z7HaY5AyKfJUeUJLcRlOBwYiMgL4Ciw/6DcBvEFEFYyx7zHGbJWk/okxVsEYuwrgnwB81rpvH4D/hCW4XATwPet7gtPaP4a6rhHkpjneO9mbshfD+mGUtJS4Qdn8yU2LwITRjFLt0hm2ajAZcLrxNPJV+UJLscNkJpyr7UHuHIapTsU2bJW3dJLtWllqvdLj9cexJX4Ld2VWnMEl8xiI6CgRpRFRMhH9wPret4noPevzbxDRSiJaS0Q7iahq0r6/JaIU6+N3rtDjCs7UWEw0R/wFG7tVu+El8eKuu785KRQKb8mSunBLW0sxoh/hLo10vW0QQzojclIdb1/JoclICU3hrn1FBSqQER2wpFYN7BzpxOWOy9z5V84iznyegXN13VgWpEByhL/D+wbKA7ElbgsKtAVuUDZ/FN5SZKvCltREpJPak5AwCXeL8py3jt7Zmjx3/2oye5P34nTDae5m2eemR6C8qQ8jE0uj2uqphlMA+POvnEUMDNNgts4S3poSPu9RBnmqPFzuuIzeMb7SNjtSI6DtGUVr/9Kotnqi/gQ2x27mrpt/rrYHK2ICEe4vn9f++cn5GDeOo7S11MXKnCM3NQIGE6FkicyyL9AWIEQRgvXR64WW4lLEwDANlR1DGBgzIOcuRfNmI0+VBwLhdONpFypzHlshwOK6xX/h9o/342L7RexR8XU3N6434VJT/5wntU1HbmIupEzKXa90ozIECm/J7R7RYoaIUKAtwK6kXQu+mupUxMAwDbZJOltT5tfNB4BNyzYhQBbA3YWbFuWPcH85ztcv/gu3sKEQZjIjP5kv4/lCYx/0JvNdq/XORpAiCJtiN6Ggga/2JfeSYpMydEkEhrq+OrQMtWB30sIvmjcVMTBMw/m6HqRF+c+4aMpc8JZ6Q61U385B8gJjDNtSwnC+rnfRjzc/UX8CAbIAZMVmCS3FjvN1PZBJJdisDHXqOHlJebjYdhGDukEXKXMN21LCUds1gq4hndBS3Irtpm8xDVO1IQaGKegMJlxs7HPqbs5GnioPdX11aBxodF6YC9mWEo6ekQnUdI635b7LAAAgAElEQVQILcVtEBFOaE9gZ9JOeEvnVm7CU5yt7cHGxBD4yJxLP+Sp8mAiE4qa+FrVbVuyNV25yH2GUw2nkBCUgJTQFKGluBwxMEzhcnM/dAazU/6CDdudxCktX70GW9BbzN39+v56NA40cucv9IxM4GbHkFP+go3suGz4ePlwl65csSwQwb7ei7p9mcwmFDYUYnfS7kVTBmMyYmCYwvm6HkglDFkOlMGYieXhyxHjH8NdHjg22AdJ4X6L+sI9Wc9nGQzbXbQrbjzkXnLsSNzBXbpSKmHYogrD+bqeRZuuvHLrCvp1/YsyjQSIgeEOztX1Yl18MPzlcy+DMROMMeSp8nBKewpmMrtAnevYmhyGsoY+GEx86XIVBQ0FXHbzz9V2I8jHG6tig1xyvDxVHiq7K9E+PG2JMcHYmhKO9kEdGnsX57BoWxZgMRrPgBgY7BgcN+B664BL/AUbeao8dI9143rndZcd0xVsSwnHyIQR1xbhcoxmMqOosQi7knZx1c0nspTB2JocBqnENbpsP0y8pStzFnm6sqChAKsiVyHKP0poKW5BDAyTKNX2wkyu6ebbuH3hctbd36IKA2PA+UU4n6GiqwK9473ITcwVWoodDT2jaB/UufTGY230WoT5hHGXrlSG+WJZkALFi3BYtM6ow7nmc8hLWpxpJEAMDHacr+uBr0yKdfGumyUbGxiLjPAM7gzCED8ZVi4LXJQLq9gWseFttTbb3bMrbzwkTILdqt04pT3FVT7fMiw6HMX1vTCb+dHlCopbiqEz6hatvwCIgcGOc3U92JwUCpmXa7+WvKQ8FDUVcVeGe1tKOK4092NMv7jq2hQ1FSExKBHKYKXQUuwo1fYhNtgHiXNYJtYRdiftRttwG6p7q116XGfZlhKOgTEDKjuGhJbiUgq0BfCSeGFH4g6hpbgNMTBY6Rgch7Z71KV3czbyVHkYM4xxV9dmW3I4DCbChQYuKp27BDOZUdRUxF1vgYhQ1tCLrKRQl/setjtX3nqltgKBi81nONVwClmxWQiQO7aOxkJCDAxWbLn2rcmuDwy5ylwwMO7W6d2kDIVMurjq2lR2V6JnrIe7wFDfPYKeEb1DqwHOFVWICspgJQobCl1+bGeIDFQgLcof5xfRRLcB3QDK28sXdRoJEAPDbUq1vQjx9UZGtOvvAoIVwVgfs567gno+MinWJwSjVLt4egy8+gsl1u/YHYEBAHYqd6KoqYjDYdHhuNDQC72RL13z5WzTWZjJjJ3KnUJLcSsuCQyMsb2MsWrGWB1j7OlpPv9XxlglY+waY+wUYyxx0mcmxthH1sd7U/f1FKXaXmQlhUHiomGEU1EnqlHSUgKdka/6MdmqMFS0D2Jw3CC0FJegadQgISiBQ3+hFzFBCsSH+rjl+GqlGn3jfbjRdcMtx58vW5LDoDOYF82waE2jBnKpHFlxfNXfcjVOBwbGmBTASwD2AVgB4GHG2Iopm10BkElEawC8BeC/Jn02TkTrrI/7IACt/WNo7R9Hlsq5omZ3Y2fSTkyYJlDWWua2c8yHbFUYzASUNy78XgMR8esvaPuQrQpz27wK27+Zt3SlxVPBollOVtOkwZb4LVB4zb/A5kLAFT2GzQDqiEhLRHoArwM4OHkDIjpNRLYpkKUA4lxwXpdR5uZuPgDkJORAwiTcpZPWJwRD5iVZFBfubX8hUS20FDvqu0fRMzKBbDfeeCQEJUAVouIuMAT7ypARHbgo0pUDugFc6bjCXftyB64IDLEAWia9brW+NxNPAJi8WK2CMVbOGCtljB2aaSfG2JPW7cq7u127NGWpthfBvt5Ij3LfKINgRTDWR6/n7sJVeEuxYZH4DLz6C7agm5XkvhsPwJKu5NFnyFaForypb8H7DGebzoJA3LUvd+CKwDBd33jaGS2MsU8DyATwo0lvJxBRJoBHAPw3Yyx5un2J6BUiyiSizIgIxxdQvxtlDX3YrAx1m79gY6dyJ0paSzBuGHfreRxlsfgMmiY+/YWyhj5EBypcPn9hKjafgbfyK9mqxeEzLBV/AXBNYGgFED/pdRyAOyp6McbyAHwTwH1EdHsFcyJqt/7VAtAA8OjiqW0D42juG3NrGsmGWqmG3qTnbj6DzWe4uIDnMxARNI0aqJVq7uojlWp7ka1y/fyFqeQqLSVAeOuVLhafYan4C4BrAsNFAKmMsSTGmAzAQwDsRhcxxtYDeBmWoNA16f0Qxpjc+jwcwDYAlS7QNGfKrI3VE4HB5jPwduGui1/4PoPNX+CtPpK2ZxTdwxMuKeM+G7d9hiaN28/lCIvBZxjQDeCjWx9x177chdOBgYiMAL4C4EMANwG8QUQVjLHvMcZso4x+BMAfwJtThqUuB1DOGLsK4DSAF4jIo4GhVNuLIB/3zF+YSpAiCBtjNnJnQN/2GRoWbmDg1V/wxMCGyexU7kRRo+gzuJpzzedgJjN37ctduGQeAxEdJaI0Ikomoh9Y3/s2Eb1nfZ5HRFFTh6USUTERrSaitda//+sKPY5Q1tCHzUnu9xdsqJVqlLWVYczAV516i88wtGB9hqKmIsQHxiMpOEloKXaUansRFSiH0s3+gg21Uo1+XT+udV7zyPnmykL3GWz+QnZcttBSPMKSnvncPjCOpl7P+As2ePYZaIH6DLz7C1lJ7pu/MBVbqoO3dKXNZyhZoOUxNI0aZMdlLwl/AVjigaGsweYvuG98+VRyEnIgZVKcbuArnbQuPhjyBeoz3Oy5ie6xbu66+Y29Y+ganvDojUd8UDySQ5K5Cwy3fYYFmK4c0A3gyq0r3LUvd7K0A4O2D4EKL2REB3rsnIHyQGxctpE7g9DiM4QsyAuXV3+hVOv5Gw/A8j2caTrDpc9wqakfE0aT0FIcYqn5C8ASDwyl2l5sTnLdMotzRZ2oRlmr6DO4Ck2jBnGBcVz6CxEBciSF+3n0vDuVOzn3GQaFluIQmkYNZFIZsmIX//wFG0s2MHQMjqOxd8zjd3OApW6SwWxAcUuxx899N7JVoQvOZ+DdX3BnfaSZsM1n4C1deXs+wwLzGYqaipAdlw0fb/cUQOSRJRsYPD2McDLb4rdByqTc5YHXLkCf4ba/wFn9mqbeMXQOubc+0kzEBcYhJTSFu3TlQvQZBnWDuNxxmbv25W6WbmBo6EWAwgvLYzznL9gIkAcgc1kmp/MZQlCygAJDUWMRAH79BXfXR5oJdaLFZzCZ+crnLzSfYSn6C8ASDgyl2j5kJYV63F+woVaqcaHtAkb1o4KcfyayVWGo7BjC4NjC8Bk0TRZ/QRWiElqKHaXaXoT7y5Ec4Vl/wcbOpJ0Y0A2IPoOT2PyFpTJ/wcaSDAydQzo09IwKkkayoVaqYTQbUdJaIpiG6bD5DBcWwPoMPPsLZQ19HqmPNBO2+Qy89UoXms+gadIsOX8BWKKBQehuPsCvz7AuweIzLISJSFU9Vega7eKufk1z3xg6BnUeqY80E7GBsUgNTUVRU5FgGqbD5jMshHSlzV/grX15giUaGPoQIPfCimWe9xdsBMgDLPMZOAsMci+Lz1C2AAxC3ucvbBHAeJ5MbmIulz5DVlIoLjfz7zMsVX8BWKKBoUzbi80C+gs21IkWn4HH+QyVHfzPZ9A0aRAbEIvkkGmX8BCMMm0fwv1lSI7wF1SHWqnGgG4A17t4XZ+Bb5+hqKloSfoLwBIMDF1DOmh7Rt26vvNcUSvVMJgNKGnhy2fIWgDzGYgIRY1FXPoLnq6PNBM8r88A/L3kPa9oGjXIis2Cr7dnCiDyxJILDKUNws1fmMq2BE59Buv6DDynk6p7q9E52sldN7+lbxztgzpB5i9MJS4wjsu6SSF+MmREB3C9PsPQxBAudVzirn15iqUXGLS9Fn9BgPkLUwmUB2JDzAbuJiIthHWgufUXGjy38NNc4LduUhguNfVzuz7DUvYXABcFBsbYXsZYNWOsjjH29DSfyxljf7V+XsYYU0767BvW96sZY/e4Qs/dKNX2IlMZAi8pHzFRreSzblJWkmUd6CEdnz6DplGDZQHLuPMXSrW9CPOTISVSWH/Bhm19Bv7WgQ7FuMGE6218rs+gadTAW+K9JP0FwAWBgTEmBfASgH0AVgB4mDG2YspmTwDoJ6IUAD8D8EPrvitgWQp0JYC9AH5pPZ5b6BrSQdst7PyFqdh8Bh7XZzATUM7hfAZe5y8AFuM5S8D5C1PhdX2Gzdah4rz2SouairA5dvOS9BcA1/QYNgOoIyItEekBvA7g4JRtDgJ4zfr8LQC7meXKOQjgdSKaIKIGAHXW47mFmr+dwJdL3sCu/np3ncJhchJywFoZvv/c91FSwo8JvT4hGJs7qsFeeAHgSBcAvH78dXQe70T8YLzQUuzo/PA0Dh57DfeONgkt5TbxQfFYNrAMr7z4ClftK9RPhkPjTYj4xU+5a18FRQW4+PpFpIymCC3FnpIS4PnnPfN9EZFTDwAPAnh10uvHAPxiyjY3AMRNel0PIBzALwB8etL7/wvgwdnOuXHjRnKY4mKakCnIwCRk9vEhKi52/BhuoLi4mJg3IzCQj48PFXOii4qLSectJyOTEHH2fXnLvQkMpFAouPq+DHJL+zIp+Pq+pDIpl+2L1+tRrpATGEiukHP1fZkUPmSUONe+AJTTHH7XXdFjmK7PTHPcZi77Wg7A2JOMsXLGWHl3d7eDEgFoNJAa9fAiM5heD2g0jh/DDWg0GsAEgAC9Xm95zQMaDbxNBkjJDOLs+zIYDAABBoOBq++LGazty8DX90VG4rJ9eRkN8CIzwFn70uv1AAFGg5Gr7wv6CUjNnmlfrggMrQAm9+njALTPtA1jzAtAEIC+Oe4LACCiV4gok4gyIyIiHFepVkMqlwNSKSCTAWq148dwA2q1Gt4yb4ABXt5eUHOiC2o1SCaDkUlg9vbm5vvKzc0FpACTMMhkMq6+L4PUGyaJFIyz9iWTywAGSLwkXH1fTG5pX0YvftqXWq0GkzJAAi7bl5FJPNO+5tKtuNsDgBcALYAkADIAVwGsnLLNUwB+bX3+EIA3rM9XWreXW/fXApDOds55pZKILN2v557jpttq48TpE8R2M/rczz8ntBQ7dEVn6cfqx+m1H/9ZaCm3qequIjwBOvTUIX66+UTU3DtK93/6R1T+/32Nu/ZVXFxMwQeCKfc/c4WWYk9xMb26/wv07DdeFVrJbUYmRkj6eSnl/kMuV+1LbzTRw5/7KZ349D871b4wx1SSlwsCi5Ex9hUAHwKQAvgtEVUwxr5nFfEeLN7BHxljdbD0FB6y7lvBGHsDQCUAI4CniMh9BVS2bLE8OCNfnY8NNRtQL+PHFAcA+Y4clH1KigmTGZ8RWowVTaMGiAd++JUfIi0sTWg5tylr6MPl2OXw++qTgAfXEJ8LW7ZswaEvHML71e/DTGZIGB9DtbFlCxq/EIB3LrfiGyYzvDkYQl7SWgJTnAlPP/o0tqTw81txo20QxZFpeOSRTwFrlrn9fC75nyCio0SURkTJRPQD63vftgYFEJGOiD5BRClEtJmItJP2/YF1v3QiOuYKPQsRtVKN0tZSjBvGhZZiR5YqFDfaBjHMyXwGTZMGMf4xSA1NFVqKHaXaXoT4eiMtMkBoKdOiTlSjd7wXFV0VQkuxI0sVilG9CTfa+KibVNRYBCmTYlv8NqGl2FFmrdjgqYrQwodoEQCWwKA36VHWVia0FDuyVWEwmQnlTf1CS+F7/kKDpTCjRODCjDNhq5vEWxlu2w9dGSd1uTRNGmyI2YAAOV8Bvkzbi+QIP0QEyD1yPjEwcEJOQg4kTMLdRKQNCSHwlrLba2QLSW1fLW6N3OKuTEFr/xha+sa5mjg5FWWwEolBidy1r4gAOVIi/blYZ3zcMI4LbRe4W3/BaDLjYmO/R9f3EAMDJwQrgrEueh13F66PTIq1ccFcXLi81keyBU2eAwNg+d6KmopsA0K4ISspFBcb+mA0CVs3qbS1FHqTnrv2VdkxhJEJo0fblxgYOEKdaPEZdEad0FLsyFaF4XrbIEYmjILq0DRqEO0fzZ2/UNbQi2Bfb6RH8ZV+mEpuYi56xnpQ2V0ptBQ7slVhGNWbUNE+JKiOoqYiSJgEOQk5guqYyu0bjyTPVewVAwNHqJVqTJgmUNbKp89wSUCfgWd/oVTbh01Kfv0FG7Y7Yd56pba1UYTulRY1FWFd9DoEKYIE1TGVsoZeJIX7ITJQ4bFzioGBI7YnbgcD4+7C3ZAYDC8JE/TCre2rRcdIB9SJasE0TEfbwDia+8awhfM0EmDxGRKCErgr8x4ZoIAqwk9QA1pn1KGkpYQ7f8FkJpQ19N1e3MhTiIGBI277DJxduL4yL6yNF9Zn4Ndf4Gv9hbvBGENuYi6KGvnzGbJVYYL6DBfaLmDCNMFdYLjZMYRhnWf9BUAMDNyhVqpR0lLCnc+QlRSK662DGBXIZyhqKkK0fzRXk9oAS/ojyMcbGdF8+ws21Eo1use6cbPnptBS7MhKCsXwhBGVHcL4DEWNRWBg2J64XZDzz8Tt+QseXhFQDAycYfMZLrRdEFqKHdmqMBgF8hmICKcbTiM3MZdLfyGL4/kLU+HVZ7DdEQs1LLqoqQhrotYg1Ef4JVknU6rtRUKoL2KCfDx6XjEwcMb2BD59ho2JIYL5DDZ/Yadyp8fPfTds/sJCSCPZSApOQlxgHHcT3aICFVCF+wnSvvQmPYpbirlLI5nNhIuNfYKsHy4GBs4I8QnB2ui13AUGP7kXVscFCWIQnm44DQDYmcRXYFhI/oINxhjUSjU0jRrufIYsVSguNPbBZPasrvL2cowbx2/PDueF6s5hDIwZPFYGYzJiYOAQdaIaJa0lmDBOCC3FjmxVGK62DGBM71mfgef6SAvJX7ChTlSja7QLVT1VQkuxI1sVhmGdETc97DPYbsJ2JO7w6Hlnw3bj4Wl/ARADA5eolWrojDrRZ8Df/YWdSTtFf8FF8F43ydPppKKmIqyKXIVw33CPnnc2SrV9iAvxQVyI59edFgMDh/A6n2FjYgikEs/WTarurUbnaCe38xcWUhrJRnJIMmIDYrlrX9FBCijDfFHqwfZlMBlwvvk8d/4CEeFCY58gaSRADAxcEuoTijVRa7ibz+Av98Lq2CCP3tGJ/oLr4dlnyFaF4UJDr8d8hssdlzFqGOUuMNR2jaBvVC9IGgkQAwO3qJVqFLcU8+kztA5gXO++9ZQmo2nSIDYgFskhyR4531xZqP6CjdzEXHSOdqKmt0ZoKXZkqUIxpDOi6pZnfAZbOo03f8F28yXUjHqnAgNjLJQxdpIxVmv9GzLNNusYYyWMsQrG2DXG2KcmffZ7xlgDY+wj62OdM3oWEzaf4WL7RaGl2JGlCoXBRLjc7H6fwVYfSfQXXA+v8xn+7jN4Jp2kadQgIzwDUf5RHjnfXCnT9mFZkAJxIZ6dv2DD2R7D0wBOEVEqgFPW11MZA/AZIloJYC+A/2aMBU/6/N+JaJ318ZGTehYNOxJ3cOkzZFp9Bk+kk2723ETXaJfoL7iBlNAULAtYxl26clmwDxLDfD3SvoxmI841n+MujUREKGvoRZYqTLAbImcDw0EAr1mfvwbg0NQNiKiGiGqtz9sBdAGIcPK8i55Qn1CsjlrNXWAIUHhj1bJAj1y4vPsLW5IXbmDguW5SVlIoLjT0wexmn+FS+yUM64exO2m3W8/jKDWdI+gZ0QvavpwNDFFE1AEA1r+Rd9uYMbYZgAzA5FXvf2BNMf2MMeaZdesWCOpEi8+gN+mFlmKHZT7DoNt9Bk2TBvGB8UgKTnLreRylVLsw1l+YDbVSjY6RDtT21QotxY5sVRgGxw2oujXs1vMUNhQC4K8wY3F9DwBgK8+BgTFWwBi7Mc3joCMnYozFAPgjgM8Rka2E4jcAZADYBCAUwNfvsv+TjLFyxlh5d3e3I6desKiVaowbx3GxjS+fIVsVBr3JjCtu9BnMZBb9BTfDrc+g8sx8hsLGQqyJWoMIP74SGCX1lvpIQsxfsDFrYCCiPCJaNc3jMIBO6w++7Ye/a7pjMMYCARwB8AwRlU46dgdZmADwOwCb76LjFSLKJKLMiAi+/iPdhW2kBG8XbqYyBBLm3gu3srsSPWM9Yn0kN5Iamopo/2juJrrFBvsgPtQHZQ3ua18Txgmcaz6HXcpdbjvHfDCZCaXaXkF7C4DzqaT3ADxuff44gMNTN2CMyQC8C+APRPTmlM9sQYXB4k/ccFLPoiLMNwyrI1dzZxAGKLyxKjYIpW6sm2TzF3jr5i/k+QtT4Xo+Q1IYytzoM9iW0N2VxFdgqGwfwpDOKLh/5WxgeAFAPmOsFkC+9TUYY5mMsVet23wSwA4An51mWOqfGGPXAVwHEA7g+07qWXSolWqcbz7Ppc/wUfMAdAb3+AyaJg2UwUoog5VuOf58KalfHP6CDXWiGu3D7ajrqxNaih1ZqjAMjBlQ0+Uen6GwoRASJuFu/oLNX1jQgYGIeoloNxGlWv/2Wd8vJ6LPW5//HxF5TxqSentYKhHtIqLV1tTUp4loxPl/0uLC5jOUt5cLLcWOrKRQ6E1mt8xnsPkLvPUWiAjF9b3ITgpb8P6CDX7rJlnXga53TzqpsLEQmcsyuVvfubi+F6mR/ogM8Nz6ztMhznzmHH59hlBImHsWVrnRdQN9433c+QtNvWNoGxjHtpSFn0aykR6Wjii/KO7aV3yoL+JCfNwy0W1UP4rS1lLu/AW90YyLjX2C+wuAGBi4J9w3HKsiV3F34Qb5eGPlMvfUTeJ1GOF5azd/WwpfVTidgWefISspDGUNvS73Gc41n4PRbORufsy11gGM6U2Cp5EAMTAsCNSJapxvOQ+DySC0FDuyVaG40uz6ukkF2gKkhqYiISjBpcd1lvN1PYgJUiAp3E9oKS4lNzEXbcNt3PkM21LC0D9mcPk60IUNhfCWeGNb/DaXHtdZiut7wRgEq6g6GTEwLADUSjXGDGPc+QzbUsKhN1m6v67CYDJA06hBnirPZcd0BWYzoaS+F9tSwrmbV+Esu1WWmb8F2gKBldiTY+2Zna/rcelxCxsLkR2XDT8ZXwG+uL4HK2ICEeInE1qKGBgWAjafwZZi4YXNSaGQSSU458ILt6ytDKOGUe4CQ2XHEPrHDIvKX7Bh650VNPAVGCIDFUiL8ndp++of78fljsvcDVPVGUy43DzAhb8AiIFhQRDhF4F10etwUntSaCl2+Mq8sCExGOdqXXfhFmgLIGES7oxn213r1uTF4y/YYIwhLykPhQ2FMJk9U059rmxLCcfFxj6XDYs+03QGZjJzFxguN/VDbzRz077EwLBAyFflo7ilGCN6vkb0bk+NQGXHEHpHXLNuRIG2AJnLMhHic0cFd0E5bx1GGBUo7DBCd5GfnI8B3QAudVwSWoodOSnh0BlcNyy6sKEQPl4+yIrNcsnxXEVxfS+kEoZNScIszDMVMTAsEPJV+TCYDShq5Gu8uW2EznkXjDcfmhhCaWsp8pL4SiNNGE242NC3qEYjTcV2B82bz5ClCoNUwlzWKy1sLMS2hG2Qe/FVr/N8fQ/WxAXBX+4ltBQAYmBYMOQk5EAulXOXTlodG4RAhRfOu+DCLWosgolM3PkLV5oHMG4wLerAEOkXyWW60l/uhfXxwS4xoDuGO3Cj6wbyVfkuUOY6BscNuNoygO0ctS8xMCwQfLx9sCNxB3cXrlTCsDU5HOfqepweB1+gLYCPlw+2xG9xkTrXUFzXAwmDYOvveoq8pDwUtxRjVD8qtBQ7clLDca1tEINjzg3XPlF/AgCwJ3mPK2S5jJL6HpgJ2JHGT3FQMTAsIPJV+ajsrkTbUJvQUuzYlhqOtoFxNPaOOXWcgoYCbE/cDoUXX3n8c3U9WBMXjECFt9BS3Ep+cj70Jj3ONp8VWoodOSnhIAJKtM71Gk5oTyDSLxJrota4SJlrOFPbgwC5F9bGB8++sYcQA8MCIj/Z0gXmLQ9sG2/uzLDC9uF2VHZXcucvDOsMuNo6ePvfuJjJSciBTCrjrn2tjQ+Gn0zqVPsykxkn608iX5UPCePnZ4+IcKamG1uSw+At5UcXP0pEZmVN1BpE+EZwl05ShvkiNtjHKZ/hlPYUAHDnL5Rp+2AyE7YuwvkLU/H19kVOQg537ctbKkG2Kgzn6+Y/wOHqravoHuvmLo3U2DuG1v5xbOcojQSIgWFBIWES5KnyUKAt4KquDWMMOSnhKK7vgWmedW0KGgoQ5hOGtdFrXazOOc7UdsPHW4qNiXwNn3UXeUl5uNZ5DZ0jnUJLsWNbSjgaekbR2j+/dKXNX+DNeD5ba1mNckcqXz1SMTAsMPJV+egc7cT1rutCS7FjW2o4hnRGXG8bdHhfIkKBtgC7Vbu56uYDQFFNN7Ymh0HuJRVaikewpStPNZwSWIk9OanOlcc4oT2B1ZGrERMQ40pZTnOmpgcJob5IDOOrPAdfV6HIrNgu3JP1fHX3t1mn8p+rdXw97htdN9A+3M7d3VxjzyiaeseQm85XN9+drI9ejxBFCHc+g2VyoRxn5pGuHNWP4lzzOe7SSAaTGSX1PdjOWW8BcDIwMMZCGWMnGWO11r/T9rcZY6ZJq7e9N+n9JMZYmXX/v1qXARW5C3GBccgIz+AuDxzmL8eq2EAU1TgeGI7VHQMA7E3Z62pZTnHGGuRyOcv/uhOpRIo8VR4+rP+Qu3TljtQInK3phtFkdmjfM01noDfpuQsMV5oHMKo3YXsqf+3L2R7D0wBOEVEqgFPW19MxPmn1tvsmvf9DAD+z7t8P4Akn9SwJ8lX5ONN0BjqjTmgpduxMj8Slpn6Hx5sfqzuG1ZGrERcY5yZl86OouhvKMP66+e5mX8o+tA+341rnNaGl2LEzIxJDOiOutAw4tN+J+hNQeCmwPWG7m5TNj7O13ZBKGBfrL0zF2cBwEMBr1uevATg01x2ZpXbxLgBvzWf/pczelL0YN47jTNMZoaXYoV0PpJ4AAB+ISURBVE6PgJmAs3Vz7zUMTQzhXPM57EvZ50ZljjNhNKG4vndJ9RZs2Hputp4cL2xLCYdUwqCp7nJovxPaE9iRuAM+3j5uUjY/ztT2YF18MIJ8+Jsf42xgiCKiDgCw/o2cYTsFY6ycMVbKGLP9+IcBGCAio/V1K4DYmU7EGHvSeozy7m7H0xWLCbVSDYWXAkdqjggtxY518SEI8vGGpnru/z+ntKdgNBuxL5WvwFDe2I9xg2lJ+Qs2YgJisD56PY7WHhVaih1BPt7YmBDiUPtqHWpFZXcl9qj4SiMNjOlxrXWAS38BmENgYIwVMMZuTPM46MB5EogoE8AjAP6bMZYMYLrVTmZMahLRK0SUSUSZERFL72KdjK+3L3Yl7cLROr4uXKmEYUdaBDTV3XNejvFY3TEEyAK4W02rqKYbMuv4+aXIvpR9KG4pxoDOsbSNu8lNj0BF+xC6hueWRj1Wa+n13JNyjztlOUxRTTeI+PWvZg0MRJRHRKumeRwG0MkYiwEA699p+3hE1G79qwWgAbAeQA+AYMaYrZxgHIB2p/9FS4T9KftR11eHmt4aoaXYoU6LQM/IxJyWYyQiHKs7hjxVHrylfHWni6q7sTkpFL4yPqpdepr9qfthIhN3o9/U1h5c0Rx7DR/UfoCEoASsjFjpTlkOU1jVhTA/GdbG8VMGYzLOppLeA/C49fnjAA5P3YAxFsIYk1ufhwPYBqCSLEMeTgN48G77i0zP/tT9AMBdd99WCOx01ex54IruCrQOtXLnL3QMjqO6c5jbuzlPkBWXhRBFCHe90hUxgYgMkEMzh9FvOqMOBdoCHEg9wNVyrCYzoaimG7npEZBI+NE1GWcDwwsA8hljtQDyra/BGMtkjL1q3WY5gHLG2FVYAsELRFRp/ezrAP6VMVYHi+fwv07qWTIkhSRhefhyHKnly2eICJBjTVzQnC5cWzefN3/BdjfKU7VLT+Ml8cKe5D04XnccZnJseKg7YYwhN21uw1aLGoswZhjDvWn3ekjd3LjS3I+BMQN2Z0QJLWVGnAoMRNRLRLuJKNX6t8/6fjkRfd76vJiIVhPRWuvf/520v5aINhNRChF9gohcswzYEmF/6n4UNRZxt6qbOi3C2vj1d93uWN0xrIpcxd0w1YKbXYgN9kFalL/QUgRlf+p+3Bq5hY9ufSS0FDvU6ZZhqx/NMmz1g5oP4OPlw90ysaequuAlYdiexqfxDIgznxc0B1IPwGA2cDdLVZ0RCTPhrrNUhyeGuRymOq434VxdN/JXRHGVfhCCe5Ithq2tZ8cLOamWYaun7zJslYhwpPYIdiXt4m6Y6umqLmQqQ7gu4y4GhgXMtoRtCJAFcOczrI0LRoiv9119huN1x2EwG7jr5p+v64HOYMbu5TONvF46RPlHIXNZJnfpyiAfb2QmhuDUzZnb182em2gYaOCufbUNjKPq1jB2ZfDdvsTAsICRSWXYk7wHR2uPclW+QCph2JURhcKqLhhmyAMfrj6MMJ8wbI3f6mF1d+dUVSf85V7ISlqaw1Sncm/qvShtLeWu2mr+iihU3RpG8wyLQ9nm+NgGafCC7WZpF8f+AiAGhgXPgdQDaBtuw5VbV4SWYkf+iigMjhtwsaHvjs8MJgOO1B7BvWn3wkvCz3BQs5lQcLMLuWkRkHmJlwYAHMo4BALh/Zr3hZZix54V0QCAE5W3pv38SO0RrIlag4SgBE/KmpXCqi4khPoiOYLvMiti61/g3Jt2LyRMgndvviu0FDt2pIVD7iXBico77zTPNJ3BgG4AhzL4qoByvW0Q3cMTyFvBdzffk6yJWgNlsBJ/q/qb0FLsSAjzRXpUAE5O0756x3pxrvkcDqQeEEDZzIzpjThf14NdGZHc+1diYFjgRPhFYHvCdrxbxVdg8JV5YXtqOE5Wdt6R5jpcfRgKLwV3ZbYLbnZCKmHYmS4GBhuMMRxKP4QCbQGGJ4aFlmPHnpVRuNjYh75R+9Fv79e8DxOZcH/G/QIpm56i6m5MGM24Z2W00FJmRQwMi4D7M+5HRXcFantrhZZix54V0WgbGEdF+99nQRMRDlcfRr4qH34yvrrTJys7sTExBMG+YvX3yRzKOIQJ0wQ+rP9QaCl25K+Igpks6ZnJvFv1LuIC45C5LFMgZdNzvOIWQv1k2KTkfzVAMTAsAmwpGd56DbuXR0LCYNfdv9p5Fc2DzTiY7kipLffT0jeGqlvDyBNHI93BtoRtCPMJ4y6dtDo2CNGBCpyc5DOM6EfwYd2HeCDjAa7SNXqjGYU3u5C3PBJeUv5/dvlXKDIricGJ2BizEe/cfEdoKXaE+cuxMTHEzmc4XHUYDAwfS/+YgMru5NiNDgDA3pV8Lf3IA14SL3ws/WM4UnsEBpNja224E8YY8lZE4kxND3QGEwDLMOgJ0wTuX85XGqm4vgfDE0bsXcV/GgkQA8Oi4f6M+1HWVoa2oTahpdixZ0U0bnYMoaXPMqzwb9V/w9b4rYj04+vO/Mj1W1gVG4iEMF+hpXDJofRDGNANcLcGyJ4V0Rg3mHDWOpnynZvvINw3HDkJOQIrs+fDilvwk0mxNZnf2c6TEQPDIsF2h3S4mq86hHtWWsZrH7vRgZreGnx06yM8uOLBWfbyLK39Y7jaMoD9q8XewkzkJ+fDx8uHu15ptioMQT7eOHq9AxPGCRypPYKD6Qe5GgZtMhNOVnZCnREJhbdUaDlzQgwMi4Tl4cuRFpbG3YWbGOaH1bFB+OBaB96oeAMAuAsMx29YctQHxMAwI77evrg37V68dfMtGM3G2XfwEDIvCe5Z+f+3d9/xUdX5/sdfn3RCLyG0QAgdAkGJ0hUQliJSVulgsC243FWWqyh3eezFu4j1uirqIhcFXERRUQHBpQSClRIgJCAthBBCsoQACYSE1M/vjwz8Ekr6zMkk3+fjMY9MOTPnfWBmPvM953u+X1+2/naOf0Vv5XLm5UrXG2nf6Uskp2UxzAl6I11nCkMVISI80ukRwmLDKt1Zqg8FNSUyPpVVBz+jX8t+lW7QvI1RiXRpVqfaze1cWhMDJ5J0NYmw2DCroxQyslsz0jJzeG/XP6nrWZfBAYOtjlTIhoMJeLq5MLCSD4NRkCkMVcjkrpPJ1Vy+/O1Lq6MU8mC3ZmRJHMcu/saELhOsjlNIQkoGB+LMbqSSGN52OLU9avP5oc+tjlJInzYNqeet7DyzkYc7PYynm6fVkW7Izs1jY1Qigzv7Usuz8uzeKo4pDFVIl8Zd6Nq4K58d+szqKIU0r1eDug32Ai6VbjfSpqj83kimMBSvhnsNxnQcw9oja8nKLXpIdUdyc3UhoOVxsvOuMrbjeKvjFPJzdDIXr2YxKqiZ1VFKxRSGKmZy18n8cuYXYlNirY5yg6qSyg945gaSll65dtesP5hA56Z1aN2ocuWqrCYGTiTlWgpbTm6xOkohF/O246L1yL3W2eoohaw/mEBtL7cbU5I6i3IVBhFpICJbReSE7e8tp/SJyEARiShwuSYiY2yPrRCRUwUe616ePEb+BxeoVM39yHORJKafpFZefzYcTLQ6zg3RSWlExqfy+7ubWx3FaQwOGEx9r/qsObzG6ig3pF5LZVfCNhq5DGBTZOU5vnYtO5fNh/7N8MAmeLo5R2+k68rbYngRCFXVdkCo7XYhqrpDVburandgEJAOFPy58fz1x1W1ck0V5YT86/nTx68Pq6NWWx3lhk8OfoK7izv3tRjJuoizlWaI8G8OxOMiMKq7czXzreTh6sHDnR7m26PfcjXrqtVxgPwz/jNzMxnVfjw7jp4vduZAR9l+NImrWbmMCnK+Hx7lLQyjgZW26yuB4obLfAT4XlVvP4i6USEmBU4iKimKQ0mHrI5Cdm42q6JW8VCHh5gU3IXYC+nsO33J6ljk5SnfHkigfzsfGtf2sjqOU5kWNI20rLRK0zV6ddRqAuoH8Gz/4WTl5rHhYILVkQD49sBZGtXypHcb55vbo7yFwVdVEwFsf4vrjzURuPnI6MsiEikifxeRO3YnEJE/iEi4iISfP1/8RPPV2YQuE3B3cWf5geVWR2Hzyc0kXU1ietB0RnRtireHK1+Gx1sdi72xFzmbkmF2I5VB/5b9aVO/DR9HfGx1FOJS49gWs40pXacQ2LwenZrW4at91r+/ktMy2X40iTHdm+HqUnnGbCqpYguDiGwTkUO3uZRqFDQRaQp0BQoO0TgP6AjcAzQAXrjT81V1qaoGq2qwj49zHchxNJ+aPozqMIpPIj+xvPfIiogVNK7ZmGFth1HT040Huzblu8gE0rOsPUnq6/1nqenhemPCF6PkRITp3acTFhtGzKUYS7OsiFgBwON3PQ7AIz1acDA+lePnrB0i/Jv9Z8nJUybc42dpjrIqtjCo6mBVDbzNZR1wzvaFf/2L/86TsMJ44BtVvTEKl6omar5MYDlwb/k2x7juybufJDk9mfXH1luW4UL6BdYfW8+UrlNwd82f+PyRHi24mpXL91G3n3nLEa5cy2ZDZAIPdmtKDQ/nOihYWYQEhSAIKyNWFr+wneRpHh8f+JgHAh7Av54/AGO6N8PNRVhrYatBVVkTfoa7W9ajnW9ty3KUR3l3Ja0HQmzXQ4CiBuqZxE27kQoUFSH/+IT1O8WriCEBQ/Cr48ey/cssy7AqchXZedmEBIXcuO/e1g1o1dCbL/edsSzXtxEJpGflMqVnK8syODu/un4MaTOEFQdXkKe3n9fb3kJjQjmdepon73ryxn0Na3kyqGNj1u4/S1aONbn2x10iOinNaVsLUP7C8CowREROAENstxGRYBG58Y0kIv6AH7Dzpud/KiJRQBTQCFhYzjyGjauLK491f4wtJ7cQlxrn8PXnaR4fhH9Arxa9CGoSdON+EWF8sB+7Yi4SneT45r6qsnp3HF2a1aFbi7oOX39V8nj3x4lLjWNztDUT+Hx04CMa1GhwyxSxk3q2JDktk82HrWmVrtl7Bm8PVx7s5ry93cpVGFT1gqo+oKrtbH8v2u4PV9UnCywXq6rNVQv/tFDVQara1bZraqqqppUnj1HYY3c9BsDSfUsdvu7QmFCOXzjOrHtm3fLYhHv88HB14ZNfTzs814EzKRxJvMzkni0r1UQuzmhsp7E0qdWExXsWO3zd59LO8c3Rb5jadeotQ2Dc386HVg29+eTXWIfnSk3PZsPBRB7q1syphsC4mTnzuQrzr+fPqA6j+HDfh2RkZzh03e/vfR8fbx/GdR53y2ONankysltT1u6L58o1x078snp3HDU9XBnd3fRGKi8PVw9m9pjJ99HfO3xa2SXhS8jKzWLWvbf+8HBxEab1asXe2EscSbx8m2fbz5rwODKycwnp4+/Q9VY0UxiquNm9ZpOcnuzQE95Op5xmw/ENPHX3U3cc0Cykjz9Xs3L5er/jJhZKunKN9REJjL27uVP/mqtMZgTPwN3Fnff3vu+wdWbmZPKP8H8wot0I2jdsf9tlxvXww8vdsa3SnNw8Vv5ymp6tG9C5WR2HrdceTGGo4u5vdT9BvkG8vftth51xfP1LYkbwjDsuE+RXjyC/eqz8NZa8PMfk+uevp8nOy+Pxvq0dsr7qoEmtJozrMo7lEctJy3LMnuAvDn/BuavneLbns3dcpq63O6ODmvPtgbNcuuqYLtvbjpzjbEoGj/X1d8j67MkUhipORJjdazaHkg6x/dR2u6/vUsYlloQvYVzncbSs27LIZR/v60/M+atsO2L/8W3Ss3L4567TDOnkS4BPLbuvrzp55t5nuJx52SHHslSVt3a9RadGnRgSMKTIZZ/o35qM7FxW/hrrkFzLfjxF83o1GNzJ1+7rszdTGKqBiYET8a3pyys/vWL3db2/932uZF1hXr95xS77YNemtGzgzfs7ou3emvlqXzwp6dn84b4Au66nOurZoicD/Qfy5i9vci3nml3XtfHERiL+HcHzfZ4vtvNAe9/aDOnsy/KfY7maad8TKn+NuUD46Uv84b4A3Fyd/2vV+bfAKJaXmxdz+84l9FQoP8X9ZLf1pGen887udxjRbkShLqp34ubqwtMD2nAwPpWfopPtliszJ5clYSe5u2U9erS6ZQBgowLMv28+iWmJdh2GRVX52w9/w7+eP1O7TS3Rc/44oA2pGdl8tse+XbYXh0bjU9vTqc9dKMgUhmpiZvBMGtdszEs7X7LbOj7Y+wHJ6cklai1c9/u7m9OkjheLQ+3Xavh8zxkSUq8xZ0gH00XVTgb6D6R3i968+vOrdhuGZWvMVvac3cO8fvNunElfnLta1qdPm4Z8+EOM3YZhCY+9yK8xF5hxXwBe7lXjTHpTGKoJb3dvXuj7AttitvHj6R8r/PUvZVxi0Y+LGNZ2GP1a9ivx8zzdXJk1sA17Yi+y/WhRI6qUTUZWLu/tiKZn6wb0bet8o1w6CxHhr/f/lbjUOJaEL6nw18/TPP6y/S/41fErdCZ9Sfzn79pz/komH/14qsJzqSqvbz5Gw5oeTO5Z9DE1Z2IKQzUyM3gmzWs3Z86WORU+jMErP71CyrUUXhv8WqmfO/HelgQ0qsmiTUfIya3YXMt/OcX5K5k8N9S0FuxtaJuhDA4YzEs7X+JSRsUOrb46ajXhCeG8POjlUs/p3KNVA4Z28eXDH2JITsus0FybD59jz6mLzB7SHm+PqtMF2hSGasTb3ZvXBr9GeEJ4hQ5+FpsSy7u732Va0DS6+XYr9fPdXV2YO6wjJ89f5fO9FTeGUmJqBu9tj2ZIZ1/u8W9QYa9r3J6I8OaQN2+0HitKenY680LnEdwsmCndppTpNeYO60hGdi5vbzteYbmycvJ49fsjtG1ci0lV5NjCdaYwVDOTu06md4vezAudR+q11HK/nqryx41/xM3FjYUDyz7U1dAuvtzbugFvbD7G+SsV86tu0aaj5OQpfx1ZueYBrsqCmgQxvft03tn9ToVNFPXKj68Qfzmet373Fi5Stq+sNj61mNarFZ/ujmN/XMW0Zpb9FEPshXT+MqJTleiJVFDV2hqjWCLCu8Pf5Xz6eeZsnlPu1/vi8Bd8H/09CwctxK9u2X81iQiLxnYlIyuXlzYcLneurb+dY8PBBJ6+vw1+DbzL/XpGyb02+DXqetXlifVPkJuXW67XOpB4gFd+eoVHgx6lf6v+5Xqt54Z2oGkdL15cG1nukVejk67w9rYTDOvShAEdqt78MKYwVEPBzYJ5oe8LfBzxMRuObSjz68SlxvH0xqcJbhbMn+79U7lztW1ciz8Nast3kYmsL8f0jBfSMpn3dSSdmtZh1sC25c5llI5PTR8WD1/MnrN7eP3n18v8OhnZGUxfNx2fmj78fejfy52rlqcbC8cGcvxcWrl2KWXl5PHcl5F4e7jyP2O6VMljV6YwVFP/ff9/0823G9PXTS/TLFzZudlMXjuZ7LxsVv9+Na4uFdNNb+aANvRoVZ95ayM5eb70Qyzk5OYxe00ElzNy+PuEIDzczFvcChO6TGBi4ETm75jPjlM7Sv18VWXWpllEnotk2UPLaFCjYo4RDeroy4RgPz4IO8n2o2U7437RpiNEnElh4ZjAKjtfuPnUVFOebp6sHb8WVWX056NLdbxBVXlqw1P8fOZnlo5cSruG7Sosl7urC+9NvgsPNxeeWhleql4kqsrCjUf48UQyC8cE0rGJcw9k5sxEhP976P9o37A9478az7HkY6V6/uI9i1kesZz5/efzYPsHKzTbS6O70LlpHWZ/HlHq0VfX7I1jxS+xPN63NSOdeL6F4pSrMIjIOBE5LCJ5IhJcxHLDROSYiESLyIsF7m8tIrtF5ISIrBERj/LkMUqnbYO2fDHuC44mH+V3q35HyrWUYp+Tp3nM2TyHlQdXsuD+BUzqOqnCczWtW4OljwaTkJrBox/tKdEgaKrK/245zopfYnmiX2vGV7FeIs6olkct1k1chyAM/ufgErdMl+5byrP/epYxHcewYMCCCs/l5e7Kh9N64O3hxrSPdhOdVLKW6bqIs7z4dRT92zVi3oiOFZ6rUlHVMl+ATkAHIAwIvsMyrsBJIADwAA4CnW2PfQFMtF1fAjxdkvX26NFDjYqz7ug6df8fdw38IFCPnj96x+VSMlJ0wpcTlAXoM5ue0by8PLvm2nH0nLb7r016/+vb9Wji5Tsul56Zo39ec0BbvfCdvrj2oObm2jeXUToRiRFa/9X66vO6j+44teOOy2XnZuu8bfOUBejwVcP1WvY1u+Y6ce6K9vjbFu22YLOGHUu643I5uXn67rbj6v/idzrhw180PTPHrrnsCQjXEnzHilbAMAQiEgY8p6rht3msN7BAVYfabl8fL+FV4DzQRFVzbl6uKMHBwRoefsuqjHLYFrONSWsnkZaVxuyes5kRPIPEI4mEhYXRo3cPTtU6xcIfF5JwJYFFgxYxt+9chxx0C4+9yMxV+0jNyCaktz/Terei1fFICAsjo08/Nnj7807oCRJSM3hmUDuefaAdLi5V72CgszuWfIyHPnuIExdPML37dP7c68+knUxj586d9OnXh+SGyby08yWikqJ48q4neW/Ee6U+ka0s4i6k89Qn4Rw7d4XR3ZvxZL8AAuMOIzt3kt3vPsIatuXd0BNEnU1lTPdmvPpwN6ce9kJE9qnqHffu3FCS6lHchaJbDI8Aywrcnga8R/4cz9EF7vcDDpVkfabFYB/xqfE6Ze0UZQHKEyjuKILiln/7nqX36K4zuxyeK/nKNZ2zJkID5m3UsVPf0Aw3T80WF01389CxU9/QYW//oLtOJjs8l1E6VzKv6HObn1OvhV63fX/5v+2va39ba/eW6M0ysnL0jX8d1Q7zN+nYqW9o+k3vr54vb9NvD8Q7PJc9UMIWQ0m+9LcBh25zGV1gmaIKw7jbFIbFgM9tCkNUETn+AIQD4S1btrT3v1+1FnMxRkfMHKHiIgqouIjOmDvD8g9G/KV0DZ/xnOa4uKiC5rq46pnn51ueyyid5KvJOnbW2ELvr5A5IZqTa+0umpSrWXrwj3NvvL9yXFz1+Oz/0qycXEtzVaSSFoZiDz6r6mBVDbzNZV2xzZF88bYv/etaAAlAMlBPRNxuuv9OOZaqarCqBvv4VL0TSiqT1vVbM//R+Xh5euHq6oqXpxchY0Is76/dvF4NeoT8HldPT3B1xcXTgxZjR1ieyyidht4NeX7K84XeXzMemVFhXZ7Lqq63O92mjrnx/nL19KDd+JG4V7GzmkvCEaM+7QXaiUhr4CwwEZisqioiO8jf1fQ5EAKUtNgYdta7d29CQ0MJCwtjwIAB9O7d2+pI+Xr3htBQCAuDAQPybxtOx7y/KrdyHXwWkbH8/91CKUCEqg4VkWbk7z4aYVtuBPA2+T2UPlbVl233B5BfFBoAB4Cpqlpsx3Vz8NkwDKP0SnrwuUJ6JTmaKQyGYRilV9LCUP12nhmGYRhFMoXBMAzDKMQUBsMwDKMQUxgMwzCMQkxhMAzDMApxyl5JInIeOF3Gpzci/+Q6Z+Xs+cH5t8HZ84Pzb4Oz5wdrtqGVqhZ7hrBTFobyEJHwknTXqqycPT84/zY4e35w/m1w9vxQubfB7EoyDMMwCjGFwTAMwyikOhaGpVYHKCdnzw/Ovw3Onh+cfxucPT9U4m2odscYDMMwjKJVxxaDYRiGUYRqVRhEZJiIHBORaBF50eo8pSEifiKyQ0SOiMhhEXnW6kxlISKuInJARL6zOktZiEg9EflKRI7a/i+calxmEfmz7f1zSEQ+ExEvqzMVR0Q+FpEkETlU4L4GIrJVRE7Y/ta3MmNR7pD/Ddt7KFJEvhGRelZmvFm1KQwi4gq8DwwHOgOTRKSztalKJQf4T1XtBPQCZjlZ/uueBY5YHaIc3gH+paodgSCcaFtEpDnwDPmzLQaSPwz+RGtTlcgKYNhN970IhKpqOyDUdruyWsGt+bcCgaraDTgOzHN0qKJUm8IA3Ev+VKIxqppF/jwQoy3OVGKqmqiq+23Xr5D/hdTc2lSlIyItgAeBZVZnKQsRqQPcB3wEoKpZqppibapScwNq2GZO9KaIWRMrC1X9Abh4092jgZW26yuBMQ4NVQq3y6+qW1Q1x3ZzF/kzWFYa1akwNAfOFLgdj5N9sV4nIv7AXcBua5OU2tvAXCDP6iBlFACcB5bbdoctE5GaVocqKVU9C7wJxAGJQKqqbrE2VZn5qmoi5P9oAhpbnKc8Hge+tzpEQdWpMNxuYmCn65IlIrWAtcBsVb1sdZ6SEpGRQJKq7rM6Szm4AXcD/1DVu4CrVO5dGIXY9sOPBloDzYCaIjLV2lTVm4j8hfzdxJ9anaWg6lQY4gG/Ardb4ATN6IJExJ38ovCpqn5tdZ5S6guMEpFY8nfjDRKRVdZGKrV4IF5Vr7fUviK/UDiLwcApVT2vqtnA10AfizOV1TkRaQpg+5tkcZ5SE5EQYCQwRSvZeQPVqTDsBdqJSGsR8SD/oNt6izOVmIgI+fu2j6jqW1bnKS1VnaeqLVTVn/x/++2q6lS/VlX138AZEelgu+sB4DcLI5VWHNBLRLxt76cHcKKD5zdZD4TYrocA6yzMUmoiMgx4ARilqulW57lZtSkMtgM9/wFsJv/D8IWqHrY2Van0BaaR/0s7wnYZYXWoauhPwKciEgl0BxZZnKfEbC2dr4D9QBT5n/9Ke/btdSLyGfAr0EFE4kXkCeBVYIiInACG2G5XSnfI/x5QG9hq+ywvsTTkTcyZz4ZhGEYh1abFYBiGYZSMKQyGYRhGIaYwGIZhGIWYwmAYhmEUYgqDYRiGUYgpDIZhGEYhpjAYhmEYhZjCYBiGYRTy/wCX9Zn8cdvgAwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as pl\n", "\n", "x1 = np.linspace(0, 4 * np.pi, 1000)\n", "y1 = np.sin(x1)\n", "y2 = np.cos(x1)\n", "\n", "x2 = np.linspace(0, 4 * np.pi, 9)\n", "y3 = np.sin(x2)\n", "y4 = np.cos(x2)\n", "\n", "pl.plot(x1, y1)\n", "pl.plot(x2, y3, 'r.')\n", "pl.plot(x1, y2, 'g')\n", "pl.plot(x2, y4, 'k.')\n", "\n", "pl.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Python is an excellent choice for data analytics." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as pl\n", "\n", "pl.hist(np.random.normal(10, 2, 1000))\n", "pl.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Philosophy\n", "\n", "***\n", "\n", "One reason Python is popular is because of its philosophy.\n", "\n", "There's an Easter egg you can find as follows." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "source": [ "import this" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Offside rule\n", "\n", "***\n", "\n", "Python uses the [*offside rule*](https://en.wikipedia.org/wiki/Off-side_rule) instead of curly braces and semi-colons.\n", "\n", "Its purpose is to improve the readability of code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Comments\n", "\n", "***\n", "\n", "Comments come after a hash character, #." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# This section of code\n", "# does\n", "#### absolutely nothing." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print(1) # Print the number 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Variables\n", "\n", "***\n", "\n", "Python doesn't require the declaration of variables or their type.\n", "\n", "You can just start using a new variable, and Python won't complain." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Whole number literals, like `123`, are of type int. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "123" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 123\n", "i" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "You can assign two or more variables at once using commas." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 11\n" ] } ], "source": [ "m, n = 10, 11\n", "print(m, n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, you can do this:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 2\n", "2 1\n" ] } ], "source": [ "a = 1\n", "b = 2\n", "\n", "print(a, b)\n", "\n", "a, b = b, a\n", "\n", "print(a, b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "You can check the type of a variable using the built-in type function." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "int" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Placing a full stop, followed by optional digits, creates a `float` instead." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.0 1.5\n" ] } ], "source": [ "f = 3.0\n", "g = f / 2.0\n", "print(f, g)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Strings and lists\n", "\n", "***\n", "\n", "Strings can be enclosed in either double or single quotes.\n", "\n", "The characters can be indexed as usual.\n", "\n", "You can also access slices of strings using colons." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H\n", "world\n" ] } ], "source": [ "s = \"Hello, world!\"\n", "print(s[0])\n", "print(s[7:12])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Lists are created using square brackets and commas.\n", "\n", "There is a related concept called tuples - they are immutable.\n", "\n", "They can be indexed in the same way as strings, even with negative indices!" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "cow\n", "[1, 3, 4, 'cow']\n", "(1, 2, 3, 4)\n" ] } ], "source": [ "x = [1,3,4,\"cow\"]\n", "t = (1,2,3,4)\n", "print(x[2])\n", "print(x[-1])\n", "print(x)\n", "print(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Note that it's really the commas that matter.\n", "\n", "Here's a tuple without brackets." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 2, 3)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = 1,2,3\n", "v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Conditions\n", "\n", "***\n", "\n", "We can make hard decisions using `if`, `elif` and `else`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Yes\n" ] } ], "source": [ "if 2 == 1 + 1:\n", " print(\"Yes\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the whole shebang." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H is first letter\n" ] } ], "source": [ "s = \"Hello, world!\"\n", "\n", "if s[0] == \"H\":\n", " print(\"H is first letter\")\n", "elif s[1] == \"e\":\n", " print(\"e is second letter\")\n", "else:\n", " print(\"H is not first letter and e is not second letter\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can write shorthand if statements on a single line as follows.\n", "The `if` comes after the value to return if the condition is true." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 4\n" ] } ], "source": [ "i = 3\n", "j = 4 if i == 3 else 0\n", "print(i, j)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Loops\n", "\n", "***\n", "\n", "Python likes to loop over lists." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "4\n", "9\n" ] } ], "source": [ "for i in [1,2,3]:\n", " print(i**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "If you want to loop over an integer you can use the built-in `range` function.\n", "\n", "With one argument it returns the integer values from 0, including 0, up to, but not including, that number." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "4\n", "9\n", "16\n", "25\n", "36\n", "49\n", "64\n", "81\n" ] } ], "source": [ "for i in range(10):\n", " print(i**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "You can create inline lists also, using an inline for loop." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "squares = [i**2 for i in range(10)]\n", "squares" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Here's an example of using a loop and a conditional together." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "3\n", "5\n" ] } ], "source": [ "for i in range(10):\n", " if i % 2 == 0:\n", " continue\n", " elif i == 7:\n", " break\n", " else:\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Functions\n", "\n", "***\n", "\n", "Functions are defined using the def keyword." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 1\n", "1 0\n", "2 1\n", "3 4\n", "4 9\n", "5 16\n", "6 25\n", "7 36\n", "8 49\n", "9 64\n" ] } ], "source": [ "def f(x):\n", " return x**2 - (2 * x) + 1\n", "\n", "for i in range(10):\n", " print(i, f(i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "In Python, you can define one-line (anonymous) functions (that you can give a name if you want)." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "g = lambda x: x**3 - 10 * x**2 + x + 5" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[5, -3, -25, -55, -87, -115, -133, -135, -115, -67]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[g(i) for i in range(10)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Python can automatically generate documentation for your code if you include docstrings.\n", "They come in triple quotes just inside your function and should describe the function." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def gcd(a, b):\n", " \"\"\"Calculate the Greatest Common Divisor of the integers a and b.\"\"\"\n", " while b:\n", " # a % b is a modulo b.\n", " a, b = b, (a % b)\n", " return a" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "20" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gcd(-100, 60)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Slices\n", "\n", "***\n", "\n", "You can slice strings and lists as follows." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, world!\n", "w\n", "world\n", "13\n", "Gobe optr\n", "!retupmoc ,eybdooG\n" ] } ], "source": [ "s1 = \"Hello, world!\"\n", "s2 = 'Goodbye, computer!'\n", "\n", "print(s1) # Print s1\n", "print(s1[7]) # Print the 8th characters of s1\n", "print(s1[7:12]) # Print characters 7 to 11 of s1\n", "print(len(s1)) # Print the length of s1\n", "\n", "print(s2[::2]) # Print what?\n", "print(s2[::-1]) # Print what?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## End" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.2" } }, "nbformat": 4, "nbformat_minor": 2 }