{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "57457292",
   "metadata": {},
   "source": [
    "# Checkpoint 4 Step-by-step guide to Writing a Computer Program\n",
    "\n",
    "This checkpoint is different from the others to give you a break. You just have to work through it and make sure you understand and can run it. Then ask a demonstrator to check you off when you have completed it. \n",
    "\n",
    "## The first problem\n",
    "We want to write a program to display trignometric functions (sin, cos, tan, cot) and their first derivatives over their fundamental periods. The user should be allowed to choose interactively which function to plot.\n",
    "\n",
    "## First steps\n",
    "Before writing any computer code, it is worth first thinking about how the logic of our program should work. \n",
    "\n",
    "For this task, one may do the following:\n",
    "\n",
    "- Prompt the user to choose between sin/cos/tan/cot\n",
    "- For the function the user has chosen, determine fundamental period.\n",
    "- For the chosen function, calculate derivative.\n",
    "- Plot chosen function and derivative.\n",
    "\n",
    "The logic of this whole program will look as below:\n",
    "\n",
    "```python\n",
    "1. User chooses function, and we assign a value to each choice: sin=1, cos=2, tan=3, cot=4.\n",
    "\n",
    "2. Calculation and Plotting\n",
    "if user chose 1:\n",
    "    determine fundamental period of sin(x)\n",
    "    cos(x) is derivative of sin(x)\n",
    "    plot sin(x) and cos(x) over the fundamental period\n",
    "else if user chose 2:\n",
    "    determine fundamental period of cos(x)\n",
    "    -sin(x) is derivative of cos(x)\n",
    "    plot cos(x) and -sin(x) over the fundamental period \n",
    "else if user chose 3:\n",
    "    determine fundamental period of tan(x)\n",
    "    1/cos^2(x) is derivative of tan(x) #we worked out math separately\n",
    "    plot tan(x) and 1/cos^2(x) over the fundamental period \n",
    "else: #this is the only possible remaining option for the user, that is to choose 4\n",
    "    determine fundamental period of cot(x)\n",
    "    -1/sin^2(x) is derivative of cot(x) [we worked out math separately]\n",
    "    plot cot(x) and -1/sin^2(x) over the fundamental period \n",
    "    \n",
    "3. Done!\n",
    "    \n",
    "````\n",
    "\n",
    ">***Note***: For more complex programs it is worth doing this structure pen-and-paper before starting to write down any code in ```Python```. This style is called ***writing in pseudocode***, that is a universally understandable human-readable version of the logic of the program. There is an entire field called algorithmics which deals with this! \n",
    "\n",
    "Let us now attempt to implement the above algorithm in ```Python```, below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2da1b363",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \n",
      "\n",
      "Please select your desired function: \n",
      " 1. sin(x) \n",
      " 2. cos(x) \n",
      " 3. tan(x) \n",
      " 4. cot(x) \n",
      " User choice: 1\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import necessary libraries and make our axes fonts and labels bold for a visually pleasing plot\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams[\"font.weight\"] = \"bold\"\n",
    "plt.rcParams[\"axes.labelweight\"] = \"bold\"\n",
    "\n",
    "# Allow user to choose which function to plot and also print a short description of what the program aims to achieve\n",
    "print(\"This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \\n\")\n",
    "user_choice = int(input(\"Please select your desired function: \\n 1. sin(x) \\n 2. cos(x) \\n 3. tan(x) \\n 4. cot(x) \\n User choice: \"))\n",
    "\n",
    "# Calculate and plot\n",
    "# Choice of sin\n",
    "if user_choice == 1:\n",
    "    # Determine fundamental period of sin(x)\n",
    "    period = np.arange(0, 2*np.pi, 0.001)\n",
    "    # Calculate sin(x) over the period\n",
    "    function = np.sin(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = np.cos(period)\n",
    "    # Plot the results\n",
    "    plt.figure(figsize=(10,6))\n",
    "    plt.plot(period, function, label='sin(x)')  \n",
    "    plt.plot(period, derivative, label='cos(x)')\n",
    "    plt.title(\"sin(x) and its derivative\", fontsize='large', fontweight='bold')       # Add title/lables\n",
    "    plt.xlabel(\"Angle (radians)\")\n",
    "    plt.ylabel(\"f(x)\")\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show()  \n",
    "\n",
    "# Choice of cos\n",
    "elif user_choice == 2:\n",
    "    # Determine fundamental period of cos(x)\n",
    "    period = np.arange(0, 2*np.pi, 0.001)\n",
    "    # Calculate cos(x) over the period\n",
    "    function = np.cos(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = -np.sin(period)\n",
    "    # Plot the results\n",
    "    plt.figure(figsize=(10,6))\n",
    "    plt.plot(period, function, label='cos(x)')  \n",
    "    plt.plot(period, derivative, label='-sin(x)')\n",
    "    plt.title(\"cos(x) and its derivative\", fontsize='large', fontweight='bold')       # Add title/lables\n",
    "    plt.xlabel(\"Angle (radians)\")\n",
    "    plt.ylabel(\"f(x)\")\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show() \n",
    "    \n",
    "#Choice of tan\n",
    "elif user_choice == 3:\n",
    "    # Determine fundamental period of tan(x) [note this is different from that of sin & cos]\n",
    "    period = np.arange(0, np.pi, 0.001)\n",
    "    # Calculate tan(x) over the period\n",
    "    function = np.tan(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = 1/np.cos(period)**2\n",
    "    # Plot the results\n",
    "    plt.figure(figsize=(10,6))\n",
    "    plt.plot(period, function, label='tan(x)')  \n",
    "    plt.plot(period, derivative, label='1/cos^2(x)')\n",
    "    plt.title(\"tan(x) and its derivative\", fontsize='large', fontweight='bold')       # Add title/lables\n",
    "    plt.xlabel(\"Angle (radians)\")\n",
    "    plt.ylabel(\"f(x)\")\n",
    "    plt.ylim([-10,10])  # Note tan has a discontinuity, so in order for \n",
    "    # the plot to look meaningful, we restrict the plotting range for the y-axis\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show()  \n",
    "    \n",
    "#Choice of cot\n",
    "else:\n",
    "    # Determine fundamental period of cot(x) [note this is different from that of sin & cos]\n",
    "    period = np.arange(0, np.pi, 0.001)\n",
    "    # Calculate cos(x) over the period\n",
    "    function = 1 / np.tan(period)       # Note NumPy does not have a cot function, but it is just 1/tan\n",
    "    # Calculate derivative over the period\n",
    "    derivative = - 1/np.sin(period)**2\n",
    "    # Plot the results\n",
    "    plt.figure(figsize=(10,6))\n",
    "    plt.plot(period, function, label='cot(x)')  \n",
    "    plt.plot(period, derivative, label='-1/sin^2(x)')\n",
    "    plt.title(\"cot(x) and its derivative\", fontsize='large', fontweight='bold')       # Add title/lables\n",
    "    plt.xlabel(\"Angle (radians)\")\n",
    "    plt.ylabel(\"f(x)\")\n",
    "    plt.ylim([-10,10])  # Note cot has a discontinuity, so in order for \n",
    "    # the plot to look meaningful, we restrict the plotting range for the y-axis\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show()  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "004db4eb",
   "metadata": {},
   "source": [
    "## Some afterthoughts\n",
    "\n",
    "Our program uses the simplest possible logic to perform the required tasks, without much thought. There are of course ways to optimise this, and so reduce the amount of code needed. However, this way of doing things gives one a very good and practical example of ***code reusability***, that is copy-pasting a part of code several times and only needing to perform minor alterations to change the results.\n",
    "\n",
    "> Our program above has a **small bug**, which a user can easily detect while playing with the program. You should always be careful about situations like this, as any program should be bug-free, which is especially important given that some bugs can actually cause the program to halt and so fail to fulfil its intended purpose.\n",
    "\n",
    "Let us attempt below some minor changes to our code, that aim to achieve 2 things:\n",
    "1. Reduce the amount of code and make it more efficient.\n",
    "2. Eliminate the annoying bug."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "5fe8788b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \n",
      "\n",
      "Please select your desired function: \n",
      " 1. sin(x) \n",
      " 2. cos(x) \n",
      " 3. tan(x) \n",
      " 4. cot(x) \n",
      " User choice: 4\n"
     ]
    },
    {
     "data": {
      "image/png": "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UF5eHnQp7S41NZUFCxYEXcYexcXFkZubS3R0dKufoyAXonolxwKwobhcQU5ERDrcmjVrSE5Opn///ph1rRUTtm/fTnJyctBltMg5x5YtW1izZg0DBrT+IlU6ZheictK8Ebn1RV3vf0YiIhJ6ysvLSU9P73IhLlyYGenp6Xs9IqogF6L6+KNwawvLAq5ERES6C4W4YO1L/yvIhajU+GgSYiJZV6gRORERkabMmDGDG2+8kS+//HKXx6+88kpyc3Oprq5u8fnnnHMOY8aM6cAKO56CXIgyM3JS4ygo0oiciIhIU2bMmMHvf//7XYJccXEx9957L5MnTyYqquWpAFOnTuXLL7/kvffe6+BKO46CXAjrnRbPOh1aFRGRbuTRRx9lv/32Iz4+nkGDBrF8+XL+/Oc/069fP5KTk5k0aRLz5s0jPz+fa665BoApU6ZgZqxYsYIXX3yR0tJSTjvtNACuvfZaUlJSeOONN1ixYgWJiYkcd9xxOOeYOHEiycnJPPXUU0F+5DbRrNUQ1ictngUF24MuQ0REupnfvzyP+euK2/U1R/ZO4YZv79dim/fff58LL7yQoUOHcvvtt7NixQreeustrrvuOk499VSOP/54fvOb33D66afz0Ucf8f3vf5/HH3+cH//4xxx99NFkZmby4YcfEhUVxejRowH44x//yEsvvcSll17KoEGDiIyM5MEHH8TM6tv973//a9fP2pkU5EJY77R4NpdUUFFdQ2xUZNDliIiIdKhXXnkFgL///e+ccsopAJx99tn1jw0ZMoRPP/2UJ554gs2bNzN69Ggef/xxDj30UM4991wAVq1aRUZGBjExMQDExsbyr3/9i2OPPZYVK1Zw77330rdv3/r37N27N51x/fWOoiAXwnJSdy5B0i89MeBqRESku9jTyFkQmprR2dwsT+fcLvc3bdpEbW0tAAUFBbu1DefZujpHLoRpCRIREelOvv3tbwNw1VVXcd9993Hddddx4okn1j92xx138NJLLzFo0CCGDh1Kjx49AHj99dd5+umnAejbty9btmyhosK7Xvm2bdv42c9+xqhRo/jud7/Ln/70J+bMmVP/nuvWrdtlhC7cKMiFsLorOmgJEhER6Q4mTJjAI488QmRkJD/5yU948sknOe644/jjH//InDlz+PWvf824ceN48cUXiY6O5rTTTmPs2LE8++yznH/++QAceeSRVFdX14e1n/3sZ2zcuJEHHniAu+66i9TUVC666CKqqqrq202YMCHIj90mOrQawrL9Q6sFGpETEZFu4oILLuCCCy7Y5bHrrruO6667bre2GRkZu53fdsYZZ5CYmMhLL73EIYccwiOPPMJdd91Vf4muTZs21bd955132L59e/35deFII3IhLC46koykGB1aFRERaaXk5GSmTp3KQw89tMcFge+9915Gjx7NpEmTOqm69qcgF+L69EhgzTYFORERkdb6+9//zpo1a/a4IPDTTz/N7NmzO6mqjqEgF+L69Uxg5dYdQZchIiIiIUhBLsT17ZnAusJyqmpqgy5FREREQoyCXIjrm55ATa3TpbpERERkNwpyIa5fzwQAVm4pDbgSERERCTUKciGu7ooOK7cqyImISPdy8803k5eXh5mx//7777b/r3/9KxdeeGGzz7/xxhsxM1544YVWv+dll12GmXHzzTfv8vj999/PfvvtR0JCAjk5OVx77bW7XEHixRdfxMyYP39+i69/9913Ex8fz/r161tdU0sU5EJcr+RYYqMiWK0gJyIi3UxVVdVua8o19MYbb3DyySc3u//ss8/mySef5OCDD27V+91666088sgjXHbZZdxwww31V4sA+Pzzz5kwYQK33347ubm5/PWvf+WRRx6p3/+3v/2N8ePHM3LkyBbfo+7z3H333a2qaU8U5EJcRISR1zOBlVs0c1VERLqX66+/nptuuqnJfSUlJXz88ceccMIJfPTRRxxwwAHExcWRmZnJeeedB8AzzzzDeeedx+effw5412YdMmQIU6ZMITU1lRNOOIHSUm+g5IUXXuDuu+9mxowZ3HXXXbzxxhv84he/YMaMGQDccccd3HPPPfzoRz/i+uuvB2DevHkArFq1ig8//JDTTjsNgNdeew0z41e/+hXV1dUceOCBZGVlsXnzZpKTk5k4cSJPPfVUu/SRruwQBvr1TNA5ciIi0nle/xWsn9u+r5k9Ck7+S4tNSktL64NVXFwcSUlJzbZ99913GT16NOnp6dxyyy0sW7aM2267jcrKShYtWtTs85YsWcKZZ57J4Ycfzptvvsmzzz7LBRdcwBlnnMEZZ5xR3+6YY45h9erV9fdjYmLqf37zzTcB6i/t9dFHHwHUj/x961vfYsqUKdx6660UFBTw1Vdf8dxzz5GRkVHf7o033mDD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uhwRERFpRwpy3cAlRw+ioKicl+as23NjERERCRsKct3AxKGZjMhJ4c73FlNVo1E5ERGRrkJBrhswM646figrtpTy7Bdrgi5HRERE2omCXDdx3IheHJiXxu3vLqaiuibockRERKQdKMh1E2bGNScMY11ROU9qXTkREZEuQUGuGxk/OJ3DB6Zzx3tLKC6vCrocERERaSMFuW7EzPjtKSPYWlrJ7e8sDrocERERaSMFuW5m/z6pfG9cHg/NWMGSjSVBlyMiIiJtoCDXDV194jDiYyL54yvzcc4FXY6IiIjsIwW5bigjKZafHzeU9xdt4rW564MuR0RERPaRglw3ddHh/RjVJ5UbXvqabTsqgy5HRERE9oGCXDcVFRnBLWcfQGFpFX94ZX7Q5YiIiMg+UJDrxkbkpHDZpME8P3st7y7YEHQ5IiIispcU5Lq5yycNYnh2Mtc+8xUbi8uDLkdERET2goJcNxcbFckd541hR2U1Vz09h9pazWIVEREJFwpywpCsZG749n58uGQz//5gWdDliIiISCspyAkA5x6cxymjcrj1rW/4ZNmWoMsRERGRVlCQE8C7fNfNZ42iX3oClz0+izXbSoMuSURERPZAQU7qpcRFc9+F46iqqeXiR76gtLI66JJERESkBQpysouBmUnccd4YvllfzJVPfUmNJj+IiIiELAU52c3EYb343akjeXPeBn734te6HquIiEiIigq6AAlNU8YPYOP2Cu7JX0qvZO/arCIiIhJaFOSkWdeeOIzN2yv45zuLSY2PZsr4AUGXJCIiIg0oyEmzzIybvzOK4vIqfv/yfGod/PBIhTkREZFQoXPkpEVRkRHcef5BnLx/Nn98ZT73/08LBouIiIQKBTnZo+jICG4/bwynjMrhT68u4LZ3FmsChIiISAjQoVVplejICG47dzSx0RH8451FrC8u44+n709UpP4vICIiEhQFOWm1qMgIbv3ugeSkxnHX9KVsLK7gjvPHkBCjr5GIiEgQNJwie8XMuObE4fzx9P1475uNnH3Px6zeqst5iYiIBCEkg5yZDTGz6Wa2xcy2m9nbZjaombau0e2FTi63W7rg8P48OPlgVm8r5bQ7P+SjJZuDLklERKTbCckgB/TBq+0G4D/AccD9LbR/FjjPv/2tw6sTACYN68VLVxxJRlIsFzzwKf96fym1uqSXiIhIpwnVk5tmOOeOrrtjZt8H9muh/XzgZefcjg6vTHYxICOR5y8fz7XPzOEvry/koyWbufW7B9IrJS7o0kRERLo8C/VlJMxsHPA58Kxz7uwm9jvAAQasAi53zr3SRLupwFSArKyssdOmTevQugFKSkpISkrq8PcJBc453l9TzRMLKomNhB+OimV0r7b9P6E79V9HUR+2nfqw7dSHbac+bJtw779JkyZ94Zwb19S+kA5yZjYMeA+oBI5wzhU00eYvwCdAJnArXqDLcs41ewb+uHHj3MyZMzum6Aby8/OZOHFih79PKFmysYSfPjmb+QXFnHVQLr87dQRpCTH79Frdsf/am/qw7dSHbac+bDv1YduEe/+ZWbNBLlTPkcPMRgLvA9XAMXUhzszizKw+GTjnfuWce8E5dx/wNpAE5AVRs8DgXkk8f/kRXD5pEC98uZbj/v4+r35VoAWERUREOkBIBjkzywPygQzgHuBQMzvX310GzPLbfcvMnjCzqWb2S+BkYBOwvPOrljqxUZFcc+JwXrpiPNmpcVz+xCwufuQLVm3RMiUiIiLtKSSDHDAI71BpJHAz8KR/a2wlkAPcAlwHzAROcc5VdlKd0oL9eqfywmXj+fXJw/loyWaO+8f7/PXNheyoqA66NBERkS4hJGetOufy8c51a2qfNfh5HjCpk8qSfRAVGcElRw/i9NF9+H9vLOSu6Ut55os1/PKk4Zw+ug+REU3+MYuIiEgrhOqInHQx2alx/ON7o3n20iPITonjqqfncPJtH/DG1+t1/pyIiMg+UpCTTjW2Xw+ev2w8d54/huoax48f+4LT7/qI9xdtUqATERHZSwpy0ukiIoxTD+jNW1dO4JazD2BLSSUXPfgZZ9z1Ea/PLaBGV4cQERFplZA8R066h6jICM4Zl8fpo3vz35lruPeDZVz6+CwGZiQydcJA0hXoREREWqQgJ4GLjYrkB4f147xD+vL61wXck7+UXz03l9RY46Lqbzj/0H5kp+qSXyIiIo0pyEnIiPQPuZ4yKocPl2zmry99wR3Tl3BX/lJOGJnFBYf34/CB6ZhppquIiAgoyEkIMjOOGpJJzdg4Bow6mMc/XcXTM1fz+tfrGdwribPH5nLmmD5kpWiUTkREujdNdpCQ1i89kd98awSf/PpYbjn7AFLiovjL6ws5/OZ3mfyfz3h5zjrKq2qCLlNERCQQGpGTsBAXHck54/I4Z1weyzaV8OysNTw3ay0/eXI2KXFRnLx/Dt86IIcjBqUTHan/n4iISPegICdhZ2BmEtecOJyrjh/Gx0u38OysNbw6t4CnZq4mLSGaE0dmc8oBORyuUCciIl2cgpyErcgI48ghGRw5JIPyqho+WLSJ1+YW1Ie6HgnRHDM8i2NH9OKoIRkkx0UHXbKIiEi7UpCTLiEuOpIT9svmhP2y60Pd61+v550FG3h21hqiI41DB6RzzPBeHDcii77pCUGXLCIi0mYKctLlNAx11TW1zFpVyLsLN/Dugo384ZX5/OGV+QzKTOSoIZkcOTiDQwf21GidiIiEJQU56dKiIiM4ZEBPDhnQk1+fPIKVW3bw3sKNTP9mE9M+X8VDM1YQGWGMzktj/OAMjhycwei8NGKidG6diIiEPgU56Vb6pScyZfwApowfQEV1DbNWFjJj6WY+XLKZO99bzO3vLiYhJpKD+vbg4P49OXhAD8bk9SA+JjLo0kVERHajICfdVmxUJIcPSufwQen84oRhFJVV8emyLXy0ZDOfrdjGP99dhHMQFWHs3yeVg/t74W5c/570TIwJunwREREFOZE6qfHR9efWARSVVTFr5TY+X7GVz1ds5eEZK7nvf8sBGJCRyIG5qRyYl8aBeWmMzEkhLlqjdiIi0rkU5ESakRofzaThvZg0vBcA5VU1zF1bxGfLtzJndSEzlm7hhS/XAd6o3YicFA7MS+WA3DRG56UxKDOJyAhdF1ZERDqOgpxIK8VFR3rnzfXvWf/Y+qJyvlxdyJw1hcxZXciLs9fx2Cer/PYRDM9OYWTvFEbmeNvh2ckkxOivnYiItA/9RhFpg+zUOE5Kzeak/b3DsbW1jmWbdzBndSHz1hUzv6CIV+as44lPvXAXYd5h2ZG9U+vD3bCsZLJSYjHT6J2IiOwdBTmRdhQRYQzulcTgXkmcNdZ7zDnH2sIy5q8rZn5BMfPXFTN71TZenrOu/nkpcVEMyUpmaFYSQ3olM9T/OTNZAU9ERJqnICfSwcyM3B4J5PZIqJ9IAVBUWsX8gmIWb9zOog3bWbShhDe+Xs+Tpavr26TGRzOkV9IuIW9AZiI5KXFE6Pw7EZFuT0FOJCCpCdH1y5/Ucc6xuaSSxRu8cLd4YwmLN5Tw+tcFPPlZVX27uOgI+qcnMjAzkQEZiQzISGJgZiIDMxJJS9DSKCIi3YWCnEgIMTMyk2PJTI7liMEZ9Y8759hUUsHSjTtYvnkHyzaVsHzzDhYWbOeteRuornX1bXskRDMgI5GBmUlQXMmOngX0S08gr2cCqfG6FJmISFeiICcSBsyMXslx9EqO22UED6CqppbVW0tZvtkPeX7Q+9/iTWworuKZxbPq26bGR9eHur49E+jnb/N6JtA7LV7LpYiIhBkFOZEwFx0ZwcDMJG8ErpHX35lOv5FjWbW1lFVbd/jbMuatLeLNr9fvMpIXFWHk9ojfGfLSvfP6+qTFk9sjnp6JMZp4ISISYhTkRLqw+Cjz1rHrnbLbvppaR0FRGau2lPoBr5SVW0tZvbWUV+cWUFhatUv7uOgI+qTF06dBuPPue9uslDiN6ImIdLJWBzkzywCcc25LB9YjIp0kMmLnbNojmthfVFbFmm2lrN1WxtrCsp3bQm9Eb8uOyl3aR0UY2alx9eEutz7kJZCTFkdOapwWQxYRaWfN/qtqZjHA+cD3gPFAov/4DuAj4ElgmnOusrnXEJHwlRofTWp8Kvv1Tm1yf1llTX2w80LeztD3ydItrC8up8GR2/rXzEn1Ql12ary/jaN3ajzZ/uOJsQp7IiKt1dK/mCuAbGAh8DywDjCgNzAOeAi4GejToRWKSEiKj4msX/y4KVU1tawvKmdtYRkFRWUUFJWzvqicdYXlrC8uY+7aIjaX7P7/wOS4qF2CXeOgl50aR3KcZt+KiEDLQe5R4F7n3NKmdprZYODiDqlKRMJedGQEef6M2OZUVNewoaiCgqIy1heXU1BUTkGhH/qKy5m3rpjNJRW7PS8pNqo+1PVKjiM7NZaslLqf48hKiSUjKZboyIiO/IgiIoFrNsg5534JYGbRzrldzno2sxTn3BLglx1VmJmNB+4BhgHzgB8552Y10e4M4G9ALvAJMMU5t7yj6hKR9hMbFUnf9AT6pjcf9iqra9lQ7AW7dYVlrC/yA19RGeuLK1iycTMbt1dQ0+g4rhlkJMWSlRJLVnIcWalx3jYldpefNRtXRMJZa05GmWVmF9WFKDM7GbgXyOuooswsDngWKAOuBH4LPGNmQ5xzNQ3aZQPTgPnANcBNwMPAhI6qTUQ6V0zUnkf2amodW3ZUsLG4oj70bSiuYGNdACwq58vVhbtN0ACIiYwgM9kLfDtH+OLqA2BBSS0lFdUk6dw9EQlBrfmXKR34xMz+H5AD/B/eeXMd6WQgC7jWOXe3H9h+B0wE3m3Q7jwgFrjZOfdfMzsYuMDMBjV3SFhEup7IiJ0LJu/fp+nJGeAdyt20vYINfuDb4Ae+up+/Wb+dDxZtpqSiepfn/frDN0mMiWxmVM87tNsrOY5eKbHERkV29McVEanXmiA3HLgf+I1//y7g6g6ryDPA3671t2v87UB2DXIttVOQE5FdxEZF1i+50pKSiur60bz8T78kvc8A1heX14/4zVy5jY3FFVTW1O723J6JMWSlxO16SDclluyUOP/xONITY4jQmnsi0g5aE+TOBY4HduCNfp0JvAO82IF1NVb3L55rsVUL7cxsKjAVICsri/z8/HYrrjklJSWd8j5dlfqv7dSHbXdASjlJbjXDkoFk/Hn6ETgXR0kVFFY4tpXXsq3CUVju2FZRS2H5DpYXlDB7haO4wu32D1KkQWqskRZr9Ijbue0Ra/SIiyDN3xcfRZc4f0/fw7ZTH7ZNV+6/1gS5f+EFtx8BPfGWHXkO6MjjB3WTFXL9bd0SJ8v98+dq/fXrmm3X+AWdc/findvHuHHj3MSJE9u75t3k5+fTGe/TVan/2k592HZt7cPqmlo2lXiHc9cXlbNxu7cMS8NDuos2lrO9vGq35ybERO4c3UuJIzsljl7+tu6xcDicq+9h26kP26Yr919rgtzlzrl7/J9Xmdk4vPPVOtLrwEbgUjPbDvwQb127fKAabxbr/ngTHf4C/NLMsvBGCz/U+XEiEiqiIiPISY0nJzW+xSlipZXVjc7dK2d9UQUbtpezsbicWau2saG4gsrqpg/n9kreGfYansOXneqFvYzEWB3OFemCWrqyQ5pzrrBBiAPAOVcN3NCwTXsX5ZwrN7Pv4p2PdxtecLvYOVfT8DCDc67AzM4D/oq3BMmnwJT2rkdEpKMlxEQxICOKARmJzbZxzlFYWsUGf1RvY3GFP0N358SN+QXe2nuu0fHcqAjzZ+fuPGevV0ocvdPiyEmNr190OSZKa++JhJOWRuTWmtkzwMvA5+x+ZYfTgO8ATS/r3kbOuQ+AUU08bo3uP4d3qFdEpEszM3okxtAjMYbh2SnNtmt4OLfxCN/G7eUs27SDj5duobi8erfnZibH0jvVC3c5ad5VNXL8sNcnLZ7M5FgiNbInEjJaCnK/wVvD7QJ2nzxgwErg1x1Ul4iI7KNdDue2oLSymnWF3uLKBYXlrGuwXbxxOx8s3kRpZc0uz4mKMLJSvMul5aTF+6HP+7lPmnf9XC2yLNJ5Wgpy6cCpwBl456X19R9fhXce2ocdW5qIiHSkhJioFq+X65yjuKzaC3hFZawr9K6uUVDkbeesLuTNr8t3W4YlNiqCPj3iye2RQF6PeCq3VVLSc52/9Es86Qp6Iu2mpSD3W2AR8HvgXOfcXzqnJBERCQVmRmpCNKkJ0YzIafpQbm2tY8uOSj/o7Qx7awvLWL2tlK/WFFJYWsV/F82uf058dCS5PeLJ7RFPXk8v3OX56/vl9ognLSFaQU+klVoKclvwJhsYcKd/ZYc6zjk3qEMrExGRkBfhT6LITI7lgNy0Jtu8/s50+u83ljXbylizrZTVW73tmm1lzFy5je2NztVLio2qD3n90xPol55I//RE+mckkJMar3P0RBpoKcjdhHeeXDKQArS8FLqIiEgT4qOMETkpzY7qFZVV7Rbw1mwrZeWWHXywaBMVDZZciYmMIK9nPP3TE72Al+EFvQHpifROiyMqUrNupXtpNsg55/4J/NPMpgN/cM5N77SqRESk20iNjyY1PpX9eu9+ndzaWsf64nJWbNnByi2l3nazt52xdAtlVTsnY0RFGHk9E+iXnsCgzCQGZSbVnwPYMzGmMz+SSKfZ44LAzrlJnVGIiIhIYxERRu+0eHqnxXNEoxN6nHNs3F7Bis0NQt6WUpZt3sEny7ZQXrVzJK9HQjSDe+0Md4N6JTE4M4k+afFaKFnCWmuu7CAiIhJyzMxf4DiOQwem77KvttaxtrCMJZtKWLqxhKWbSli6cQdvzd/AtM9X17eLjYpgYGYSQ3olMTwnmRHZKQzPSSY7JU4TLiQsKMiJiEiXE+EfZs3rmcCkYb122bd1RyVLN5WwZKMX8pZsKuGLldt4ac66+jYpcVEMz0lhRHYyw/xwNywrmcRY/dqU0KJvpIiIdCs9E2PomdiTg/v33OXxorIqFm3YzsKCYhas97bPfLGGHQ0WRe6XnsCI7BRG5aYyqo9366Hz7yRACnIi0jXU1kBVmX8rbXBr+Fg51FT6tyqordr5c03Dnyv9fVWMKFgLmx8B58DVAv7WOe+2y/26/Q4sAiIiwSLBrMHPDR6PiPDuW6T3WGSMd4uKg6gYiIyFqNgmHqvbxkFMAsQkQnSiv4333k/2Wmp8NAf33zXg1R2iXegHu4XrtzNvXRFvzFtf3ya3R7wX6hqEu7QEhTvpHApyIhIs56CyBEq3QNk2KC+GiuImtkVQsX3Xxyp37Axr1eVtq8PqglS0f/N+TimvhOq1fuAyb4s1uG+N7vvLX7haL1w6B67G/7m20c91bfzHaqqgpsILkvv+QbxAF5MI0QkQk+Tf9wNfbCrEpUJ8mreNS2v6vgIhsOsh2uNHZtU/XlRWxby1RXy1toi5a4uYu6aI17/eGe7yesYzOq8H4/r1YGy/HgzPTtbSKNIhFOREpH055wWukg2wvQBKNsKOzV5QK90CZVv9n7fufGxPwSU6EWKTIS4FYlO8bWouxCZ5YSU63t82/LnBtm6kKiquQVhrsI2I9kbHmvBpfj4TJ05s/35qSW2tPzpYAdV1Wz/g1W/LvZ+rSr1A2/hW1fB+iRd+i9d5fzZlhd7+lkTGQHwPSMiAxAxIzPS3/s8JDR/L9P58ulHwS42P5ojBGRwxOKP+scLSSr5eW8zctUV8taaQz5Zv4WX/vLv46EhG56Ux1g92Y/qmadRO2oWCnIi0Xm2NF84KV0PRai8Y1AW27RugZD1sX++Fi92YHwzSvVtaP+g9xr/f09vG9/BGg+rCWqx/i+xm/1RFREBEHETHddx71FR5o5zlRV6wK6+71d0v8kL3ji2wYxOsm+UF8oripl8vKh5SciClD6T0huS6n3NILl4PxcMgqZd3CLmLSkuI4cghGRw5xAt3zjnWFZXzxcptzFq5jS9WbuOe95dSU+sAGNwricMG9uSIQRkcNjBda93JPulm/zqKSItqa2H7OtiyFApX7gxshauhaJUX3Gp3vZwSMUmQlOX94u49BpKyITnL32Z7+xIzvUN3XfiXeNiJjN45wrY3qsqhdLMX7upC3o6N3shr8VooLoCVH3vhvrYKgLEAs672Dl+n9oEe/b1bWj//5wHeNqFnlxrVMzP6pMXTJy2e0w7sDcCOimrmrClk1sptfL5iG8/NWstjn6wCYHh2MocPSueIQRkcMqAnqfHRQZYvYUJBTqS7cc4bWdmyBLYu9bZblnq3rcugumxnW4uA5N6Qlgd5h3nb1Dx/29cbeYlNCu6zSOeLjvMOa6fmttyuttYLfMXrmDvjLUb16+n9R6BwNWxbAd+84QXAhmKSvEDXcyBkDoOMYZAxxLvFJHbUJ+pUibFRHDEogyMGeQG6qqaWr9YU8fHSzXy8bAtPfLqK/3y0ggiDUX1SOXpYLyYNy6TWuYArl1ClICfShUVWl8Lqz2DDPNi4ADbO934u27qzUUSUNyKSPhgGTYL0QdBzkPcLNaW3N3IjsrciIrxDqUm92JJRCAdP3L1N5Q7YttIb/d22wrttXe59Rxe+4s8C9qX29QJd5jDIHA7Zo6DXyI49/NwJoiMj6s+bu+KYIVRU1zB7VSEfL93C/xZv4s73FnP7u4tJiobjNsxm0vBeTBiSqSVPpJ6CnEhXsWMzrJsNa2d52w3zOKpoFXzo749Jgl4jYMSp3i/A9MFeaEvt2/3OQZPQEJMIWSO9W2PVFd4I8aZvYPMif/sNrJyxc9TYIr1glz0Ksg/wt6O8Q7RhKjYqksMGpnPYwHSuPH4o23ZU8sHiTTz1wdd8sHgzL3y5DjMYk5fGSftnc/L+OeT1TAi6bAmQ/vUWCUcVJbB25s7Qtm62dy4bAOaNXOQdzLKeExh42KlegEvt2+zMTJGQExXrfW97jdj18dpa2LYc1s/deVv+P/jqqZ1tegyA3IO9W97BkLV/2I4s90iM4fTRfUgtXMyECUczd20R7y3cyDsLNnDTawu56bWF7Nc7hZP3z+ak/XMY3EunOnQ3CnIi4aBkE6z6GFZ9AqtmQMFX3tpj4P3SyjsEDr3Em2yQc6C3FASwKj+fgcMmBle3SHuLiPBGktMHwX5n7Hy8ZBNsmAsFc2DtF7D8A5j7tLcvKt77u5E7DvofCX0P92ZFh5mICOPAvDQOzEvjyuOHsmpLKW/OW8/rXxfwt7cW8be3FjGkVxKnj+7NGWP6kNtDI3XdgYKcSCgqK4QV/4Ol73m/kLYs8R6PjPV+GR15pffLqM9BYX0YSaTdJGVC0jEw6BjvvnNQtAbWfAZrZnrnin5yD8y43Tsk23sMDJgAA47yJvLEhF/o6ZuewMUTBnLxhIGsLyrnzXnrefWrnaHukAE9+c6YPpw8KkczYLswBTmRUFBT7Y0iLH3Pu639whtxi0mCfkfAmB9A3yOg92jvkJOItMzMm12dlgf7n+U9VlXmBbrlH3j/UZpxO3z4d29B6L6HwZATYOiJkDE07JZByU6N46Ij+nPREf1ZvbWUF79cy3Oz1/Kr5+Zy/UvzOH5kFucf0pcjBqVjYfbZpGUKciJBqSz1QtvCV2HRG/5MUvNG2Y66yhtZ6DPOu66miLRddDwMPNq7gXeu6apPYPn73t/Ft3/n3Xr0hyEneqGu/5Fh95+nvJ4JXHHMEC6fNJiv1hTx/Oy1vPDlWl79qoCBGYmcf2hfzjooVzNfuwgFOZHOVFboBbeFr3q/OKrLvCsZDDkRhp0MAyfqUKlIZ4lNgiHHeTf+6K1xt/gt7zbrYfjs396VRYZ9C/Y701ueJ4xCndnOc+p+dfJwXv+6gMc+WcWfXl3ALW9+w6mjcpgyfgCjclODLlXaQEFOpKNVlcPiN+Grp71fEDWVkJILB10Aw0+BfuPDdkadSJeSlgcH/9C7VZV5h2AXvAQLXoGvpkFsqrd8z35nwsBJYbVsT1x0JGeOyeXMMbksKCjmiU9X8fxs7/DrEYPSmTphIEcPzdRh1zAUPt9CkXDinHfIZvZj3i+CimJI7AXjfgijvusdPtU/mCKhKzreO7Q69EQ45R+wLB/mPe+Fui8f9y49d+C5MPoHkDk06Gr3yoicFP54xv5cc9IwnvSvJDH5P58zPDuZi48ayGmjexMdqaWKwoWCnEh7KtsGc6bBFw/BpoXeZIURp8Gos2HA0WH1P3gR8UXFwNATvFt1BSx+2wtzM+6Ej26DvEO9CUn7nxVWlxJLiYvmkqMHMWX8AF6es457P1jGL/47h9vfW8zPjh3C6aP7EBmh/3CGOv1WEWkP676ET//l/Y+9uhz6jIXT7gi7f9hFZA+iYr3DqyNOhe0bvEOusx+Dl34Cb10HB10IB18MPfoFXWmrxURFcNbYXL5zUB/eXbCRv7+9iKuensNd05fw8+OGcsqoHCIU6EKWgpzIvqqt9c55+/hObymDmGQY/X0YOxlyDgi6OhHpaMlZMP5ncMRPvVMpPvs3fHw3fHyXN0HisEu9c2DD5DQKM+O4kVkcM7wXb85bzz/eWcRPnpzN3flLuf7UkRw+KD3oEqUJCnIie6umyjt8OuN27xqQKblwwp+8/4nHafaXSLdjBv0O925Fa+DzB7zTKxa+4i02POEaGHxs2AS6iAjj5FE5nLBfNq98tY5b3viG8+77hBP3y+K33xpJ3/TwWzy5K9PZjCKtVVPtHUK5cxy8dIV3MvRZD8DPvoQjfqIQJyKQmgvH3QBXzYdv/c0Ldo+fBfdN8pYdqq0NusJWi4wwTh/dh3d/cTRXnzCU/y3ezHF/f5+/vL6QssqaoMsTn4KcyJ7U1sCXT3oB7sXLIS4Nzn8apr7vTWLQ0iEi0lh0PBxyMfx0tne+bNk2mHY+3DfRmwEbRuKiI7nimCFMv3oi3z6wN/96fykn/vMDPly8OejShBAMcmZ2p5mtMLNyM1tkZt9voe1DZuYa3dI6sVzp6pZ/APceDS/82LsQ/blPwtR8b0mCMDlMIiIBiorxTru44gs44x4o3QqPnA6PnQXrvw66ur2SlRLHreccyLSphxEZYfzggU+5+r9z2LajMujSurWQC3LAwcDDwFVAGvCwmQ1sof1m4LwGtx0dXaB0A5uXwJPnwcPf9q7GcNYDcMkHMPxbCnAisvcio2D0+XDFTDj+j7Dmc/jXkd4o/47wGtk6bGA6r//sKC6fNIgXZq/l+H98wPuLNgVdVrcVipMdjnLOVQKY2SC8QDccWNZM+x3AK8AO55zrnBKly6oqhw/+6q0NFRULx14Ph13mHSYREWmr6DgY/1Nv3bn/3eotW7TgFe+8uoMmQ0Qojq/sLi46kmtOHM4po3rz86dmc9GDn/F/4wfwy5OHERsVGXR53YqFavYxs2jgU2AYMNA5t6GJNg8BFwIGlAMPAD91zu12NqmZTQWmAmRlZY2dNm1axxXvKykpISkpqcPfp6vq7P5L2/YVQxfdTUJZAeuzJrJ00BSqYtI67f07gr6Dbac+bDv1YfMSdqxi6KJ/k1b0NcXJQ1g09DJKknc/CBXKfVhZ43jqm0reXVVNXnIElx0YS05SaAXSUO6/1pg0adIXzrlxTe0LJMiZ2RqgTxO7pjjnHjKzKOBx4LvAD5xzTzTzOnUhrhC4GjgSuNA592hL7z9u3Dg3c+bMNnyC1snPz2fixIkd/j5dVaf1X1khvPFrmPME9BgAp/7Duzh2F6DvYNupD9tOfbgHzsHc/8Kbv4WyrTDhWjjqql0mUoVDH05fuJGr/zuHiupa/vG90Rw/MivokuqFQ/+1xMyaDXJBHVo9Gmhqql+BPxI3DTgTuKRhiPP3RQIVzvNIg321eEFuZIdWLl3L8v/B8z+G7QVw1C+89Z50GFVEOpMZHHAODD4OXr8W8m+Cb16DM/8FvUYEXV2rTRrei5d/ciQ/fuwLLn5kJj89dgg/P3aIrgrRwQIZ+3TOLXXOLWziVgQ8CnwHeA3YbmbnmtkA/6n3AWXAWAAzm25m15rZ/wE3+m0+7dxPI2GpugLe+p03mSEqFn74tnc+nEKciAQloSecdT+c8wgUrYZ/T4BP/uWN2IWJ3mnxPH3J4Zw9Npfb313M1Ee/oLSyOuiyurRQnOxwmL89xb8BTAGWN9F2MfATIBNYC1zlnHuhowuUMLdtBTx9IRTMgbFT4MQ/63qoIhI6Rp4OfY/wFh5/45ew8kOiep4bdFWtFhcdyV/PPoD9e6fwh1fmc959n/LgReNIT4oNurQuKeSCnHOufwv7JgOTG9yf2vEVSZey+G149kfe/3DPfQKGn7Ln54iIdLakTDhvGsy4A965kbGxn8HI3tDnoKAraxUzY/L4AeSkxfPTJ2dz1j0zePj/DqFfuv7T3N5Ca1qJSEeprYX8v8Dj3/UuoTN1ukKciIQ2M2+pkimvY64GHjwJvvpv0FXtlRP3y+aJiw+lsKyKs+75mMUbtgddUpejICddX1UZPDMZ8m+GA77nnQ+XPijoqkREWqfvoXwx9h+QOw6e+xG8+4ewumbr2H49eebHh2MG5933Cd+sV5hrTwpy0rXt2OxNaJj/EpzwJ28WWExC0FWJiOyVqpgUuOAFGHOBt5Dw0xdAZWnQZbXa4F7JTJt6GBFmnHffJywoKA66pC5DQU66rs2L4f5jYf1cbxbYET/R5bVEJHxFxcBpd8CJN3vLkzx6JpRtC7qqVhuUmcRTlxxOTGQEFzzwKSs264qa7UFBTrqm9XO980kqSuCiV2DkaUFXJCLSdmZw+GVw9n9g3Sz4zymwfX3QVbXagIxEHr/4UGodXPDgp2wsLg+6pLCnICddz5ov4KFTvfXh/u9NyDs46IpERNrXfmfA+U97yyk9eCJsbWqFrtA0KDOJ/0w+mC0llVz44GcUlVUFXVJYU5CTrmXlx/DI6RCXClNeh4zBQVckItIxBk2Ci16G8iLvXOBtK4OuqNUOzEvj3xeMZemmEi5/fBbVNeEzeSPUKMhJ17H6c3jsLEjOhv97A3r0C7oiEZGOlTsWLnwJKrbDw6dC4eqgK2q1o4Zk8uczRvHhks3c9NrCoMsJWwpy0jWsnwuPnwVJvWDyK5DSO+iKREQ6R84BcOELUOaPzBWtDbqiVjvn4DwmH9GfBz9aztMzwyeEhhIFOQl/m5d4s7dikuDCF70RORGR7qT3GLjgOW/Jpce+E1azWa87ZQTjB6dz3fNfM3dNUdDlhB0FOQlv29fDo2d4l9y68EUdThWR7it3HJz3BGxZCtO+D1XhMSM0KjKCO887iJ6JMfzkyVmUVFQHXVJYUZCT8FVZCk+eC6Vb4QfPQsaQoCsSEQnWgAnewucrP4IXfhw2V4DokRjD7eeNYdXWUn77/Fycc0GXFDYU5CQ81dbC81Nh3Zdw9gPQe3TQFYmIhIZRZ8Pxf4R5z8O7vw+6mlY7ZEBPfn7cUF78ch3Pzgqf8/yCpiAn4em9P8CCl+HEm2DYyUFXIyISWo74CYz7P/jon/D1s0FX02qXTxrMIf178vuX57G+KDwODQdNQU7Cz7wX4MN/wNgpcNilQVcjIhJ6zOCk/wd9D4cXLvdm9oeByAjjlrMPoKqmVodYW0lBTsLL5iXw4hXQZxycfIuunSoi0pyoGO860/E94MnzYceWoCtqlf4ZiVx9wjDeXbiRF77UIdY9UZCT8FG5A56+wP/H6WFvKyIizUvqBec+BiUb4IVLvRn+YWDK+AEc1DeN3788n207KoMuJ6QpyEn4ePVq2LgAzrofUnODrkZEJDz0GQsn/AkWvwmf/ivoalolMsK4+TsHsL28mr+99U3Q5YQ0BTkJD18/B3OegKOvhUHHBF2NiEh4OeRiGPYtePt6KJgTdDWtMiw7mQsO68cTn63i67VaKLg5CnIS+orXwStXeufFTbg26GpERMKPGZx+FyRkwH+neKeqhIErjx9Kz4QYbnxpniY+NENBTkJbbS28cBnUVMJ37oXIqKArEhEJTwk94Tv/hq1L4d0/BF1Nq6TGR3PtScOYuXIbr81dH3Q5IUlBTkLb5/fDsuneenHpg4KuRkQkvA2YAIdMhU//DSs/DrqaVjl7bB5Ds5K49a1vqK4JjytVdCYFOQlZseWbvFXJBx0LYycHXY6ISNdw7A2Q1hdevNy71GGIi4wwrj5hGMs27+CZL9YEXU7IUZCT0OQcQxbfC64WTv271osTEWkvsUlw2h3eIdbpfw66mlY5fmQWY/qmcdu7iymvqgm6nJCiICehacHLZGz5DCb+Gnr0D7oaEZGuZeDR3pGOT+4Oi6s+mBnXnjicgqJypn22KuhyQoqCnISe8iJ47Rq2Jw2Awy4LuhoRka7puBu9qz68dk1YLBR8+KB0Du7fg/v+t5wqnStXT0FOQs8Hf4WSDSwaerlmqYqIdJT4Hl6YW/UxfPVU0NW0ymUTB7O2sIyXvlwXdCkhQ0FOQsuWpfDJv2DM99meMiToakREurbRP/DW6Hzrd97RkBA3cVgmw7OTuef9pdTWhv4oYmdQkJPQ8tbvICoWjrk+6EpERLq+iAg45W+wY5N3NCTEmRmXThzEko0lvLNgQ9DlhAQFOQkdy/Lhm1fhqF9AclbQ1YiIdA+9x8CB58Gn90Lh6qCr2aNTRuXQJy2ehz9eEXQpIUFBTkJDbS28eZ23tpEmOIiIdK5Jv/G2028Kto5WiIqM4PuH9eWjJVtYsnF70OUETkFOQsP852HDXO+QanRc0NWIiHQvaXlw6FSY8yRsmBd0NXv0vXF5xERF8MjHK4MuJXAhF+TM7EYzc41uo5tp29vMXjezcjNbaWY/6ORypT3UVMP0m6HXSNj/rKCrERHpno68CuJS4J3fB13JHqUnxXLqATk8+8UatpdXBV1OoEIuyDVwXoPbimba3AMcA/wGWAk8bGaDO6U6aT9zn4Yti72h/YhQ/kqKiHRhCT29MLf4TVj9WdDV7NGFh/dnR2UNL3TzpUhC+bfmS8B/nXPTnHOFjXeaWU/g28A7zrm/AzfifZ6LOrNIaaPqSsj/C+QcCMNPDboaEZHu7ZCLISEd3r8l6Er26MDcVIZnJ/NsN7/+aiivtloCVJvZ88AU51zjK/v2BwxY69+v+5Mc2NSLmdlUYCpAVlYW+fn57V3vbkpKSjrlfcJZzrq3GFa4kq/yLmLr++/vsk/913bqw7ZTH7ad+rDtOrMP+2Z9i4FLHuWLl+4L+fU8D0yt4qlvKnnilffondT82FRX/g4GEuTMbA3Qp4ldU4BZwCVAAfB/wDnA18Af9/Sy/rbJFQKdc/cC9wKMGzfOTZw4ca/r3lv5+fl0xvuErdoauPNK6H0QB3znKjDbZbf6r+3Uh22nPmw79WHbdWofVoyFf7zM2B3vwWkXd8577qORY8t55ub3WBXZm/MnDm+2XVf+DgY1Inc0EN3E4wXOufqlpc1sBXAGMNK/Hw1EAhV45805INdvXhcMl3dEwdIBFrwEW5fBOY/uFuJERCQgsclw+OUw/c9QMMc79SVE9UqO4+ihmTw/ew3XnDiMyIju97skkHPknHNLnXMLm7gVmdl/zex6M5sM/MN/yqf+9j6gDBjrnNsKvAIca2ZX4Z0jVws80rmfRvaJc/DhPyB9MAw/JehqRESkoUOmQmwKfHR70JXs0dljc9lQXMFHSzYHXUogQnGywwJgMvAvYCjwF+COZtpeCuQDN+GdMzfFObe4wyuUtluW7/1P74ifQkRk0NWIiEhD8Wlw0IUw73koCu3JBMcM70ViTCSvflUQdCmBCLkg55y73jk30DkX55zr65z7tXOuxt832TlnzrmZ/v21zrkTG7TVaFy4+OifkJQNB54bdCUiItKUQy8BHHx2b9CVtCguOpJjR2Tx5vz1VNXUBl1Opwu5ICfdwMaF3ojcoZdAVGzQ1YiISFPS+sKI02DmQ1BREnQ1LfrWqBwKS6v4eOmWoEvpdApy0vk+vw8iY+EgLfknIhLSDr8CKorgyyeCrqRFE4dlkhgTyWtzu9/hVQU56VzlRfDlk96luBLTg65GRERakncw5B4Mn9wNtaF72DIuOpJjRmTx5rz1VHezw6sKctK55kyDqh3e6uEiIhL6DrkEti2H5flBV9Kik/fPZltpFV+s3BZ0KZ1KQU46T22td9Jsn3HQ56CgqxERkdYYeRrE94SZ/wm6khYdOSSDqAjjvW82Bl1Kp1KQk86z/H3YssRbn0hERMJDVCyMPh++eQ22bwi6mmalxEVzyICeTF+oICfSMWY/BnGpMPL0oCsREZG9MXYK1FbD7EeDrqRFxwzvxaINJaze2vjy7F2Xgpx0jrJtsOBlGPVdiI4LuhoREdkbGYOh/1Ew6+GQnvQwaXgvAKZ3o8OrCnLSOb5+FmoqYPT3g65ERET2xdjJULjKO00mRA3MSKRfegLvdaPDqwpy0jlmPw69RkLvMUFXIiIi+2L4Kd71V796KuhKmmVmTByaySfLtlBZHbojh+1JQU463sYFsG6WNxpnFnQ1IiKyL6LjvXOc578ElTuCrqZZRwzOoLyqli9XFwZdSqdQkJOON/sxiIiCA74XdCUiItIWB57nrQW68NWgK2nWYQPSMYMZSzcHXUqnUJCTjlVbA3OfgSEnQFJm0NWIiEhb9D0cUvt6i7uHqNSEaPbvncqMbnLdVQU56VirPoaS9d4luUREJLxFRMAB58Cy6bB9fdDVNOuIQenMXrWNssqaoEvpcApy0rG+fg6i4mHoSUFXIiIi7eHAc8HVeqsRhKjDB6VTVeOYuXJr0KV0OAU56Tg11TD/RRh2EsQmBV2NiIi0h4whkD3K+/c9RB3cvydREdYtDq8qyEnHWfEBlG6G/b4TdCUiItKeRp4Oqz+F4nVBV9KkxNgoRuWmMnOFRuRE9t3Xz0JMMgw5PuhKRESkPY08w9sueDnQMloytm8P5qwp6vLrySnISceoqYIFr8Dwb3lrD4mISNeRMcRb5D2ED6+O7deDyupa5q0rCrqUDqUgJx1j5UdQXggjTgu6EhER6QgjT4eVM2D7hqAradJB/XoAMGtVYbCFdDAFOekYC1+DqDgYNCnoSkREpCOMPB1wsOCloCtpUlZKHH3S4pm1clvQpXQoBTlpf87BN6/BwEkQkxh0NSIi0hEyh0PG0NA+T65fD2au3IpzLuhSOoyCnLS/DV9D0Wrv/DgREemazGDYyf6pNMVBV9Oksf16sKG4gq3lCnIirbfwNcC0CLCISFc39CSorYal7wVdSZPG9E0DYGlR1525qiAn7e+bVyHvEEjqFXQlIiLSkXIPgbg0WPRm0JU0aVh2MlERxkoFOZFWKloLBXNgmA6rioh0eZFRMPg4WPwW1IZeWIqNimRoVjIri0OvtvaiICfta8nb3laHVUVEuoehJ3lX8Vk3K+hKmjSqTyori2u67IQHBTlpX0vehZRcyBwWdCUiItIZBh8LFgGL3gi6kibt3yeF7VWwrqg86FI6hIKctJ+aalj2vrd2nFnQ1YiISGdI6Al5h4VwkEsF4Ou1XfMKDwpy0n7WfgEVRd7/zkREpPsYfAysnws7NgddyW5G5KQQYTBPQU5kD5a+6w2vDzg66EpERKQzDfSv4rMsP9AymhIXHUnvRGOugpzIHix9D3of5A2zi4hI99F7DMSmhmSQA+iXEsm8daG5aHFbhVyQMzPXxO3GZto+1ETbtM6tWAAo2+YdWtVhVRGR7iciEgYc5QW5EJwdmpscwcbtFRSWVgZdSrsLuSAHnNfglu8/1tKc5s2NnrOjI4uTZizLB1cLgxTkRES6pUGTvMszblkadCW76ZPkTcBbtKEk4EraX1TQBTTmnJsGYGaxwJ3AGuDVFp6yA3gF2OG66iIx4WBZPsSmQJ+xQVciIiJBqD9PbjpkDA62lkZyk71xq282bOeQAV3r9J+QC3INnA2kA9c752paaNcX2A6Um9kDwE+dc7st4WxmU4GpAFlZWeTn57d/xY2UlJR0yvuEgkPmv01Z4lDm/u/DdnvN7tR/HUV92Hbqw7ZTH7ZdWPShcxwW24vtn/2XeaVDgq5mF9FVpcRHGdNnLSSvfHnQ5bSrQIKcma0B+jSxa4pz7iH/50uAauD+Fl7qPWA6UAhcDVwOfAo82rihc+5e4F6AcePGuYkTJ+5b8XshPz+fznifwG1fD/lrSTjyEiaOn9huL9tt+q8DqQ/bTn3YdurDtgubPiw+kbj5LzFxwlHeeXMhIj8/n/36xFASYUyceHjQ5bSroEbkjgaim3i8AMDMRgJHAc865wrqdppZNBAJVDjPIw321QJHAiM7snBpwsqPvG3/I4OtQ0REgtX/SJj9KGycD9mjgq5mF0Ozk3ltbgHOOawLLVofSJBzzu3pTMhL/O2/Gj1+H3ARcDAw08ymA6/jTXi43G/zaXvVKa204kOISYbsA4OuREREgtTvCG+7ckboBbleSTxRWsWm7RX0SokLupx2E3KzVs0sHrgAWAK8u4fmi4GfAHcDacBVzrkXOrI+acKKj6DvYRAZyqdciohIh0vrC6l5XpALMUOzkwFvwkNXEnK/eZ1zZUCTU0qcc5OByQ3uT+2cqqRZJRth8zcw+rygKxERkVDQ9/Cd68mF0CHMwb2SAFi2aQdHDckMuJr2E3IjchJm6s+POyrYOkREJDT0OwJ2bAy59eQyk2JJio1i2aautZacgpy0zYqPIDoRcnR+nIiIAP3Ge9tVoXV41cwYmJnIss1d67oBCnLSNqs/hdxxENnUJGQREel2MoZAQkZInic3ICOR5QpyIr7KHbBhHuQdEnQlIiISKsy8w6t1p96EkAEZiawtLKO8qqXrDIQXBTnZd2tngauBXAU5ERFpoO/hULgKigv23LYTDchIxDlYtbU06FLajYKc7Ls1n3nb3HHB1iEiIqGl7vfC2pnB1tHIwIy6matdZ8KDgpzsu9WfQ/oQSOhaFyAWEZE2yj4AIqJhTWgFuQGZiQBdasKDgpzsG+e8ETmdHyciIo1Fx3lXdlj7RdCV7CIpNopeybEs36QgJ93d1mVQugVyDw66EhERCUW547xzqWtDa2JBV5u5qiAn+2bN595WI3IiItKU3IOhagdsXBB0Jbvo2zOB1ds02UG6u9WfQUwyZA4PuhIREQlFfcZ627r/+IeI3B4JbCiu6DJLkCjIyb5Z+wX0GQMRkUFXIiIioajnQIjvGXIzV/N6xgOwtrAs4Erah4Kc7L3qStg4H3JGB12JiIiEKjPvPLk1oTXhIa9nAgCru8hacgpysvc2zoeaSug9OuhKREQklPUZB5sWQnlx0JXUy+vhB7ltGpGT7qrgS2+rETkREWlJn4MAB+vnBl1JvV7JscRERbBGI3LSba37EmJTvfMfREREmpNzoLctmBNsHQ1ERBi5afGs0YicdFsFX0LOAd75DyIiIs1J6gVJ2SEV5AByu9ASJApysneqK2HDPJ0fJyIirZNzIKz/KugqdpHbI16THaSb2rTAm+ig8+NERKQ1cg7wJjxUhk5wyuuRwLbSKkoqqoMupc0U5GTvrPvS2/YeE2gZIiISJnIOBFfrrXgQIurWkusKo3IKcrJ3Cr6E2BToMSDoSkREJByE4ISHPmlekCsoCv8JDwpysncK5nh/KSP01RERkVZIzYO4tJAKcjmpdUGuPOBK2k6/jaX1amtgw3zIHhV0JSIiEi7MvAGAEApymcmxREYY6xXkpFvZtgKqy6DXyKArERGRcJJzoH9VoKqgKwEgMsLolRyrETnpZjZ87W2zFORERGQvZO3vrXiwZUnQldTLTo3TOXLSzWyYDxhkjgi6EhERCSd1AwAb5gVbRwM5qXEakZNuZuM877JcMQlBVyIiIuEkYyhYJGxcEHQl9XJS41lfVI5zLuhS2kRBTlpvwzzI2i/oKkREJNxExUL64JBaSy4nNY7SyhqKy8N7UWAFOWmdyh2wdbmCnIiI7JuskSEV5LJT4wDCfuaqgpy0zqaFgNOMVRER2Te99vNWP6goCboSwBuRg/BfFFhBTlqn7gRVjciJiMi+6OVPlNu0MNg6fNn+osAakdsHZnaymc01s1ozc2aW0WBfspk9aWY7zGy9mV3dwuv0NrPXzazczFaa2Q865xN0QxvmQ3SCLs0lIiL7pm7maogcXu2VHIsZrFOQ2ycJwAfA0ib2/Qk4F/gr8DHwVzM7ppnXuQc4BvgNsBJ42MwGt3+5wsZ5kDlcl+YSEZF9k9bfGxDYEBpBLjoygvTEGDZtrwi6lDYJ5Leyc+5Z59zlwNomdl8EzHfO3Qj8wn9sSuNGZtYT+DbwjnPu78CNeJ/noo6oudvbMF8LAYuIyL6LiPAGBEJkRA4gIylWQa49+eEslZ0Bb42/HdhE8/6AtbKttEXpVijd7P0FFBER2VchNnM1MzmWTSXhHeSiOuqFzWwN0KeJXVOccw+19mX8bWtW62uxrZlNBab6d0vM7JtW1tAWGcDmTnifzvH7nwI/7cx37Fr9Fwz1YdupD9tOfdh2XasPr7U9t2lfLfafXdGJleybfs3t6LAgBxwNRDfxeEFzT3DObTWzIiDXf6guCC4HMLNoIBKoAFbghbYm2zbx2vcC97a+/LYzs5nOuXGd+Z5difqv7dSHbac+bDv1YdupD9umK/dfhwU551xTExkAMLMheEEvx3/oB2a22Dn3KvAI8BMzuwEY7e9/yN/eh3cO3MHOuZlm9gpwopldBZwB1PrPFxEREenyOnJEriXj8UJZnX8A7wOvAtcBWcAvge3Ar5xz7zbzOpcCDwI3ARvxDtsu7qiiRUREREJJIEHOP0fuoWb2FQPfa2bfZGByg/trgRPbu7521KmHcrsg9V/bqQ/bTn3YdurDtlMftk2X7T9zrjXzCEREREQk1ITU8iMiIiIi0noKcm1gZuPN7CszqzCzWWZ2UDPtzjCzJf6lxPLNTNe58u1FH7pGtxc6udSQZGa3m9kGv09eaaGdvoPN2Is+1HewGWY2xMymm9kWM9tuZm+b2aBm2uq72Mhe9p++h80ws0/9/is1s5lmNqGZdl3qO6ggt4/MLA54FkgGrsSboPGMmUU2apcNTAOKgWuAscDDnVttaGptHzbwLHCef/tbpxQZHqa1tFPfwVZpsQ8b0HewaX3wfp/cAPwHOA64v3EjfReb1ar+a0Dfw6bNwFvs9I94q150j++gc063fbgBZ+KtY3eNf/8P/v1jG7W70n/8u/79R/z7g4L+DEHfWtuH/j7n708Muu5Qu+Fd5cQBrzSzX9/BNvah30bfweb7JqbR/S3Axiba6bvYhv7z9+l72Hw/Gt7Cv4cAO4CFTbTpct9Bjcjtu7qh2D1dIqy17bqjve2b6/CuyrHSzE7t0Mq6Fn0H24++g01wzlXW/Wxm44CewAdNNNV3sQl70X919D1sWiqwCfgUqAR+1ESbLvcdVJBrP629nNjeXHasu2mpb/4f8B28y6z1AJ40s4TOKqyL0Xdw3+g7uAdmNgx4Ee/KOz9pzVP8rb6LtLr/9D1sXglwAt7h1Ti8kcs9CfvvYFALAncFdZcC2+0SYf65X7X+/7KabdfxJYa81vYhzrlf1T3JzE7C+4csD+iMa+aGHX0H207fwb1jZiOB9/AuoXiMc67Af1zfxVZoZf/pe9gC51w18DbwtpmdDUwyswy8gNdlv4NaR24f+X+5VgKlwC14Q92VwGCgGpjnnNvfzHLw/nf1Nd4iyDcBXzrnjgqg7JCyF334LeAHQD7e/0BvwPuLmdvwkER3ZGanAPsDfwG+Au7Au0rKIvQdbJVW9qG+gy0wszzgC7xDgtfhfd9wzk0zM4e+iy3ai/7T97AZZnYicA7ehIc84Ld45xrm4F2+s+t+B4M+SS+cb8AEYC5e+JgNjPMfd8DXDdp9B1iK9z+tDwjjkyqD6ENgP2A6UIh32bYP8K63G3j9Qd/w/kF3jW6T9R1s3z7Ud3CPfTixiT50/j59F9up//Q9bLEPD8YLZ2V+/0yv65uu/h3UiJyIiIhImNJkBxEREZEwpSAnIiIiEqYU5ERERETClIKciIiISJhSkBMREREJUwpyIhIWzOwKM3P+bVg7vaYzs6/34XlZZlZqZpe2Qw1n+3Xc6N/P9+9ntPW1m3ivy8yszL9wuIh0AQpyIhIuzsFb2LPu5yBdgXdpn0eb2mlmbblqzh+A84DiNrxGc+rqvawDXltEAqAgJyIhz8x6A+OBp4F1NAhyZjbZH8F62Mxmm9k2M/uZv8/M7FYz2+qPdD3vt53YxHukmtmDZrbRzDab2b0tXMPyfGC6c67Ef27dKNptZrYZONXM/mlmm8yswsyWmdklDd7rfDMrMLOFwKRGr3098CSQYmb7m9l8f/Sv0MxeM7M+/mvc6L/nnWa2yH+v7/r7xpvZV2ZW7j/+JIBzbjveAsjf27s/AREJVQpyIhIOvov379V/geeA/f1rUzZ0InA/3irufzGzGODbwFXAPOBZ4PgW3uOfwAV4l+25H/ghTVx027/Ez0Dg8yZeYwzwS7zrXi7Au0zQ1cAG4C4z62dmWcADeKOLfweObqGmSuBhvIuA3+l/xhsbtTkOuAtIxbvMGMC1fo0/8z/D5gbtPweG+nWISJhry/C/iEhn+R5eqFkIJOAd2jyHXUPNg865u8zs23iBJ4udo12/d869Y2aH4Y2mNeVUvH8Tr2nw2AlNtOvrb9c1se8K59xX4I0U+nU2HNUbAcQCcX6995pZDV5wbEqsX+8BDR4b1ajN3/3XuRQY4j+22P88JwCz8IJenbq6++EFTBEJYxqRE5GQ5l9Q/DAgBm9kre48r8aHB7f622p/G9lgX2uvRbgeb9Su7nZ5S6U18dg6v+bheKNii4AzgQf9/XGtfJ06v8ULcTfghdOqJl6j4eeu+zf9Wv99F+ONLM40s7RG76frM4p0ARqRE5FQdw5e+LgZ+Mx/7Id456E1Hp1qbDrwc+B6/1Ds6S20fQWYDJwGzAHG4h3+/F+jdqv8be8WXqsuLMXjjQwe12DfJ0A5MMXMVuMdNt3T6yThBbPoFto29Bu8C4LPA1YDA4AUvIuJ19W9qslnikhY0YiciIS6c/BGj/7hnHvBOfcCzY/KNfYy3nloBwBn4wU78AJNYz/HO8R5DnAb3ijgR40bOecKgGXAuObe1Dm3APgHXmj6EfB6g30b8IJoJN75dPkt1P8nvMPJU4AtQFELbRuqxQuIDwBDgRucc3XBbRywyK9DRMKcOafRdRHpuszsKuArIBsvoJUBg5xzFW14zT/gnUuXWTdzNRyYWTKwEbjFOXdD0PWISNtpRE5EurrTgZfwZn3OBr7dlhDnuwtvlPCCNr5OZ7sA73DtPUEXIiLtQyNyIiIiImFKI3IiIiIiYUpBTkRERCRMKciJiIiIhCkFOREREZEwpSAnIiIiEqYU5ERERETC1P8HbpzYK5sryGQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import necessary libraries and make our axes fonts and labels bold for a visually pleasing plot\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams[\"font.weight\"] = \"bold\"\n",
    "plt.rcParams[\"axes.labelweight\"] = \"bold\"\n",
    "\n",
    "# Allow user to choose which function to plot and also print a short description of what the program aims to achieve\n",
    "print(\"This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \\n\")\n",
    "user_choice = int(input(\"Please select your desired function: \\n 1. sin(x) \\n 2. cos(x) \\n 3. tan(x) \\n 4. cot(x) \\n User choice: \"))\n",
    "\n",
    "# Calculate and plot\n",
    "# Choice of sin\n",
    "if user_choice == 1:\n",
    "    # Determine fundamental period of sin(x)\n",
    "    period = np.arange(0, 2*np.pi, 0.001)\n",
    "    # Calculate sin(x) over the period\n",
    "    function = np.sin(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = np.cos(period)\n",
    "    #Define labels and bounds to use for plotting\n",
    "    fn_label = \"sin(x)\"\n",
    "    deriv_label = \"cos(x)\"\n",
    "    y_bound = 1.1\n",
    "\n",
    "# Choice of cos\n",
    "elif user_choice == 2:\n",
    "    # Determine fundamental period of cos(x)\n",
    "    period = np.arange(0, 2*np.pi, 0.001)\n",
    "    # Calculate cos(x) over the period\n",
    "    function = np.cos(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = -np.sin(period)\n",
    "    #Define labels and bounds to use for plotting\n",
    "    fn_label = \"cos(x)\"\n",
    "    deriv_label = \"-sin(x)\"\n",
    "    y_bound = 1.1\n",
    "    \n",
    "#Choice of tan\n",
    "elif user_choice == 3:\n",
    "    # Determine fundamental period of tan(x) [note this is different from that of sin & cos]\n",
    "    period = np.arange(0, np.pi, 0.001)\n",
    "    # Calculate tan(x) over the period\n",
    "    function = np.tan(period)\n",
    "    # Calculate derivative over the period\n",
    "    derivative = 1/np.cos(period)**2\n",
    "    #Define labels and bounds to use for plotting\n",
    "    fn_label = \"tan(x)\"\n",
    "    deriv_label = \"1/cos^2(x)\"\n",
    "    y_bound = 10\n",
    "    \n",
    "#Choice of cot\n",
    "else:\n",
    "    # Determine fundamental period of cot(x) [note this is different from that of sin & cos]\n",
    "    period = np.arange(0.001, np.pi, 0.001)\n",
    "    # Calculate cos(x) over the period\n",
    "    function = 1 / np.tan(period)       # Note NumPy does not have a cot function, but it is just 1/tan\n",
    "    # Calculate derivative over the period\n",
    "    derivative = - 1/np.sin(period)**2\n",
    "    #Define labels and bounds to use for plotting\n",
    "    fn_label = \"cot(x)\"\n",
    "    deriv_label = \"-1/sin^2(x)\"\n",
    "    y_bound = 10\n",
    "\n",
    "# Plot the results\n",
    "plt.figure(figsize=(10,6))\n",
    "plt.plot(period, function, label=fn_label)  \n",
    "plt.plot(period, derivative, label=deriv_label)\n",
    "title_choice = fn_label + \" and its derivative\" #Build the title of the plot to match the chosen function\n",
    "plt.title(title_choice, fontsize='large', fontweight='bold')       # Add title/lables\n",
    "plt.xlabel(\"Angle (radians)\")\n",
    "plt.ylabel(\"f(x)\")\n",
    "plt.ylim([-y_bound, y_bound])\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66c48d22",
   "metadata": {},
   "source": [
    "## More afterthoughts\n",
    "\n",
    "Now we seem to have removed the bug that existed (so one aim is checked - ***please read carefully the 2 codes to see the difference***) and have also reduced the amount of code that needed writing. We achieved the latter by decoupling the calculation and the plotting of the results, having devised a way in which the calculations produce standardised outputs that can then be used in a general way to plot them irrespective of the user's choice.\n",
    "\n",
    "Let us try now to improve the code even further, trying both to reduce the written amount and to make it (slightly) more efficient and general."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "fea833cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \n",
      "\n",
      "Please select your desired function: \n",
      " 1. sin(x) \n",
      " 2. cos(x) \n",
      " 3. tan(x) \n",
      " 4. cot(x) \n",
      " User choice: 4\n"
     ]
    },
    {
     "data": {
      "image/png": "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UF5eHnQp7S41NZUFCxYEXcYexcXFkZubS3R0dKufoyAXonolxwKwobhcQU5ERDrcmjVrSE5Opn///ph1rRUTtm/fTnJyctBltMg5x5YtW1izZg0DBrT+IlU6ZheictK8Ebn1RV3vf0YiIhJ6ysvLSU9P73IhLlyYGenp6Xs9IqogF6L6+KNwawvLAq5ERES6C4W4YO1L/yvIhajU+GgSYiJZV6gRORERkabMmDGDG2+8kS+//HKXx6+88kpyc3Oprq5u8fnnnHMOY8aM6cAKO56CXIgyM3JS4ygo0oiciIhIU2bMmMHvf//7XYJccXEx9957L5MnTyYqquWpAFOnTuXLL7/kvffe6+BKO46CXAjrnRbPOh1aFRGRbuTRRx9lv/32Iz4+nkGDBrF8+XL+/Oc/069fP5KTk5k0aRLz5s0jPz+fa665BoApU6ZgZqxYsYIXX3yR0tJSTjvtNACuvfZaUlJSeOONN1ixYgWJiYkcd9xxOOeYOHEiycnJPPXUU0F+5DbRrNUQ1ictngUF24MuQ0REupnfvzyP+euK2/U1R/ZO4YZv79dim/fff58LL7yQoUOHcvvtt7NixQreeustrrvuOk499VSOP/54fvOb33D66afz0Ucf8f3vf5/HH3+cH//4xxx99NFkZmby4YcfEhUVxejRowH44x//yEsvvcSll17KoEGDiIyM5MEHH8TM6tv973//a9fP2pkU5EJY77R4NpdUUFFdQ2xUZNDliIiIdKhXXnkFgL///e+ccsopAJx99tn1jw0ZMoRPP/2UJ554gs2bNzN69Ggef/xxDj30UM4991wAVq1aRUZGBjExMQDExsbyr3/9i2OPPZYVK1Zw77330rdv3/r37N27N51x/fWOoiAXwnJSdy5B0i89MeBqRESku9jTyFkQmprR2dwsT+fcLvc3bdpEbW0tAAUFBbu1DefZujpHLoRpCRIREelOvv3tbwNw1VVXcd9993Hddddx4okn1j92xx138NJLLzFo0CCGDh1Kjx49AHj99dd5+umnAejbty9btmyhosK7Xvm2bdv42c9+xqhRo/jud7/Ln/70J+bMmVP/nuvWrdtlhC7cKMiFsLorOmgJEhER6Q4mTJjAI488QmRkJD/5yU948sknOe644/jjH//InDlz+PWvf824ceN48cUXiY6O5rTTTmPs2LE8++yznH/++QAceeSRVFdX14e1n/3sZ2zcuJEHHniAu+66i9TUVC666CKqqqrq202YMCHIj90mOrQawrL9Q6sFGpETEZFu4oILLuCCCy7Y5bHrrruO6667bre2GRkZu53fdsYZZ5CYmMhLL73EIYccwiOPPMJdd91Vf4muTZs21bd955132L59e/35deFII3IhLC46koykGB1aFRERaaXk5GSmTp3KQw89tMcFge+9915Gjx7NpEmTOqm69qcgF+L69EhgzTYFORERkdb6+9//zpo1a/a4IPDTTz/N7NmzO6mqjqEgF+L69Uxg5dYdQZchIiIiIUhBLsT17ZnAusJyqmpqgy5FREREQoyCXIjrm55ATa3TpbpERERkNwpyIa5fzwQAVm4pDbgSERERCTUKciGu7ooOK7cqyImISPdy8803k5eXh5mx//7777b/r3/9KxdeeGGzz7/xxhsxM1544YVWv+dll12GmXHzzTfv8vj999/PfvvtR0JCAjk5OVx77bW7XEHixRdfxMyYP39+i69/9913Ex8fz/r161tdU0sU5EJcr+RYYqMiWK0gJyIi3UxVVdVua8o19MYbb3DyySc3u//ss8/mySef5OCDD27V+91666088sgjXHbZZdxwww31V4sA+Pzzz5kwYQK33347ubm5/PWvf+WRRx6p3/+3v/2N8ePHM3LkyBbfo+7z3H333a2qaU8U5EJcRISR1zOBlVs0c1VERLqX66+/nptuuqnJfSUlJXz88ceccMIJfPTRRxxwwAHExcWRmZnJeeedB8AzzzzDeeedx+effw5412YdMmQIU6ZMITU1lRNOOIHSUm+g5IUXXuDuu+9mxowZ3HXXXbzxxhv84he/YMaMGQDccccd3HPPPfzoRz/i+uuvB2DevHkArFq1ig8//JDTTjsNgNdeew0z41e/+hXV1dUceOCBZGVlsXnzZpKTk5k4cSJPPfVUu/SRruwQBvr1TNA5ciIi0nle/xWsn9u+r5k9Ck7+S4tNSktL64NVXFwcSUlJzbZ99913GT16NOnp6dxyyy0sW7aM2267jcrKShYtWtTs85YsWcKZZ57J4Ycfzptvvsmzzz7LBRdcwBlnnMEZZ5xR3+6YY45h9erV9fdjYmLqf37zzTcB6i/t9dFHHwHUj/x961vfYsqUKdx6660UFBTw1Vdf8dxzz5GRkVHf7o033mDD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uhwRERFpRwpy3cAlRw+ioKicl+as23NjERERCRsKct3AxKGZjMhJ4c73FlNVo1E5ERGRrkJBrhswM646figrtpTy7Bdrgi5HRERE2omCXDdx3IheHJiXxu3vLqaiuibockRERKQdKMh1E2bGNScMY11ROU9qXTkREZEuQUGuGxk/OJ3DB6Zzx3tLKC6vCrocERERaSMFuW7EzPjtKSPYWlrJ7e8sDrocERERaSMFuW5m/z6pfG9cHg/NWMGSjSVBlyMiIiJtoCDXDV194jDiYyL54yvzcc4FXY6IiIjsIwW5bigjKZafHzeU9xdt4rW564MuR0RERPaRglw3ddHh/RjVJ5UbXvqabTsqgy5HRERE9oGCXDcVFRnBLWcfQGFpFX94ZX7Q5YiIiMg+UJDrxkbkpHDZpME8P3st7y7YEHQ5IiIispcU5Lq5yycNYnh2Mtc+8xUbi8uDLkdERET2goJcNxcbFckd541hR2U1Vz09h9pazWIVEREJFwpywpCsZG749n58uGQz//5gWdDliIiISCspyAkA5x6cxymjcrj1rW/4ZNmWoMsRERGRVlCQE8C7fNfNZ42iX3oClz0+izXbSoMuSURERPZAQU7qpcRFc9+F46iqqeXiR76gtLI66JJERESkBQpysouBmUnccd4YvllfzJVPfUmNJj+IiIiELAU52c3EYb343akjeXPeBn734te6HquIiEiIigq6AAlNU8YPYOP2Cu7JX0qvZO/arCIiIhJaFOSkWdeeOIzN2yv45zuLSY2PZsr4AUGXJCIiIg0oyEmzzIybvzOK4vIqfv/yfGod/PBIhTkREZFQoXPkpEVRkRHcef5BnLx/Nn98ZT73/08LBouIiIQKBTnZo+jICG4/bwynjMrhT68u4LZ3FmsChIiISAjQoVVplejICG47dzSx0RH8451FrC8u44+n709UpP4vICIiEhQFOWm1qMgIbv3ugeSkxnHX9KVsLK7gjvPHkBCjr5GIiEgQNJwie8XMuObE4fzx9P1475uNnH3Px6zeqst5iYiIBCEkg5yZDTGz6Wa2xcy2m9nbZjaombau0e2FTi63W7rg8P48OPlgVm8r5bQ7P+SjJZuDLklERKTbCckgB/TBq+0G4D/AccD9LbR/FjjPv/2tw6sTACYN68VLVxxJRlIsFzzwKf96fym1uqSXiIhIpwnVk5tmOOeOrrtjZt8H9muh/XzgZefcjg6vTHYxICOR5y8fz7XPzOEvry/koyWbufW7B9IrJS7o0kRERLo8C/VlJMxsHPA58Kxz7uwm9jvAAQasAi53zr3SRLupwFSArKyssdOmTevQugFKSkpISkrq8PcJBc453l9TzRMLKomNhB+OimV0r7b9P6E79V9HUR+2nfqw7dSHbac+bJtw779JkyZ94Zwb19S+kA5yZjYMeA+oBI5wzhU00eYvwCdAJnArXqDLcs41ewb+uHHj3MyZMzum6Aby8/OZOHFih79PKFmysYSfPjmb+QXFnHVQLr87dQRpCTH79Frdsf/am/qw7dSHbac+bDv1YduEe/+ZWbNBLlTPkcPMRgLvA9XAMXUhzszizKw+GTjnfuWce8E5dx/wNpAE5AVRs8DgXkk8f/kRXD5pEC98uZbj/v4+r35VoAWERUREOkBIBjkzywPygQzgHuBQMzvX310GzPLbfcvMnjCzqWb2S+BkYBOwvPOrljqxUZFcc+JwXrpiPNmpcVz+xCwufuQLVm3RMiUiIiLtKSSDHDAI71BpJHAz8KR/a2wlkAPcAlwHzAROcc5VdlKd0oL9eqfywmXj+fXJw/loyWaO+8f7/PXNheyoqA66NBERkS4hJGetOufy8c51a2qfNfh5HjCpk8qSfRAVGcElRw/i9NF9+H9vLOSu6Ut55os1/PKk4Zw+ug+REU3+MYuIiEgrhOqInHQx2alx/ON7o3n20iPITonjqqfncPJtH/DG1+t1/pyIiMg+UpCTTjW2Xw+ev2w8d54/huoax48f+4LT7/qI9xdtUqATERHZSwpy0ukiIoxTD+jNW1dO4JazD2BLSSUXPfgZZ9z1Ea/PLaBGV4cQERFplZA8R066h6jICM4Zl8fpo3vz35lruPeDZVz6+CwGZiQydcJA0hXoREREWqQgJ4GLjYrkB4f147xD+vL61wXck7+UXz03l9RY46Lqbzj/0H5kp+qSXyIiIo0pyEnIiPQPuZ4yKocPl2zmry99wR3Tl3BX/lJOGJnFBYf34/CB6ZhppquIiAgoyEkIMjOOGpJJzdg4Bow6mMc/XcXTM1fz+tfrGdwribPH5nLmmD5kpWiUTkREujdNdpCQ1i89kd98awSf/PpYbjn7AFLiovjL6ws5/OZ3mfyfz3h5zjrKq2qCLlNERCQQGpGTsBAXHck54/I4Z1weyzaV8OysNTw3ay0/eXI2KXFRnLx/Dt86IIcjBqUTHan/n4iISPegICdhZ2BmEtecOJyrjh/Gx0u38OysNbw6t4CnZq4mLSGaE0dmc8oBORyuUCciIl2cgpyErcgI48ghGRw5JIPyqho+WLSJ1+YW1Ie6HgnRHDM8i2NH9OKoIRkkx0UHXbKIiEi7UpCTLiEuOpIT9svmhP2y60Pd61+v550FG3h21hqiI41DB6RzzPBeHDcii77pCUGXLCIi0mYKctLlNAx11TW1zFpVyLsLN/Dugo384ZX5/OGV+QzKTOSoIZkcOTiDQwf21GidiIiEJQU56dKiIiM4ZEBPDhnQk1+fPIKVW3bw3sKNTP9mE9M+X8VDM1YQGWGMzktj/OAMjhycwei8NGKidG6diIiEPgU56Vb6pScyZfwApowfQEV1DbNWFjJj6WY+XLKZO99bzO3vLiYhJpKD+vbg4P49OXhAD8bk9SA+JjLo0kVERHajICfdVmxUJIcPSufwQen84oRhFJVV8emyLXy0ZDOfrdjGP99dhHMQFWHs3yeVg/t74W5c/570TIwJunwREREFOZE6qfHR9efWARSVVTFr5TY+X7GVz1ds5eEZK7nvf8sBGJCRyIG5qRyYl8aBeWmMzEkhLlqjdiIi0rkU5ESakRofzaThvZg0vBcA5VU1zF1bxGfLtzJndSEzlm7hhS/XAd6o3YicFA7MS+WA3DRG56UxKDOJyAhdF1ZERDqOgpxIK8VFR3rnzfXvWf/Y+qJyvlxdyJw1hcxZXciLs9fx2Cer/PYRDM9OYWTvFEbmeNvh2ckkxOivnYiItA/9RhFpg+zUOE5Kzeak/b3DsbW1jmWbdzBndSHz1hUzv6CIV+as44lPvXAXYd5h2ZG9U+vD3bCsZLJSYjHT6J2IiOwdBTmRdhQRYQzulcTgXkmcNdZ7zDnH2sIy5q8rZn5BMfPXFTN71TZenrOu/nkpcVEMyUpmaFYSQ3olM9T/OTNZAU9ERJqnICfSwcyM3B4J5PZIqJ9IAVBUWsX8gmIWb9zOog3bWbShhDe+Xs+Tpavr26TGRzOkV9IuIW9AZiI5KXFE6Pw7EZFuT0FOJCCpCdH1y5/Ucc6xuaSSxRu8cLd4YwmLN5Tw+tcFPPlZVX27uOgI+qcnMjAzkQEZiQzISGJgZiIDMxJJS9DSKCIi3YWCnEgIMTMyk2PJTI7liMEZ9Y8759hUUsHSjTtYvnkHyzaVsHzzDhYWbOeteRuornX1bXskRDMgI5GBmUlQXMmOngX0S08gr2cCqfG6FJmISFeiICcSBsyMXslx9EqO22UED6CqppbVW0tZvtkPeX7Q+9/iTWworuKZxbPq26bGR9eHur49E+jnb/N6JtA7LV7LpYiIhBkFOZEwFx0ZwcDMJG8ErpHX35lOv5FjWbW1lFVbd/jbMuatLeLNr9fvMpIXFWHk9ojfGfLSvfP6+qTFk9sjnp6JMZp4ISISYhTkRLqw+Cjz1rHrnbLbvppaR0FRGau2lPoBr5SVW0tZvbWUV+cWUFhatUv7uOgI+qTF06dBuPPue9uslDiN6ImIdLJWBzkzywCcc25LB9YjIp0kMmLnbNojmthfVFbFmm2lrN1WxtrCsp3bQm9Eb8uOyl3aR0UY2alx9eEutz7kJZCTFkdOapwWQxYRaWfN/qtqZjHA+cD3gPFAov/4DuAj4ElgmnOusrnXEJHwlRofTWp8Kvv1Tm1yf1llTX2w80LeztD3ydItrC8up8GR2/rXzEn1Ql12ary/jaN3ajzZ/uOJsQp7IiKt1dK/mCuAbGAh8DywDjCgNzAOeAi4GejToRWKSEiKj4msX/y4KVU1tawvKmdtYRkFRWUUFJWzvqicdYXlrC8uY+7aIjaX7P7/wOS4qF2CXeOgl50aR3KcZt+KiEDLQe5R4F7n3NKmdprZYODiDqlKRMJedGQEef6M2OZUVNewoaiCgqIy1heXU1BUTkGhH/qKy5m3rpjNJRW7PS8pNqo+1PVKjiM7NZaslLqf48hKiSUjKZboyIiO/IgiIoFrNsg5534JYGbRzrldzno2sxTn3BLglx1VmJmNB+4BhgHzgB8552Y10e4M4G9ALvAJMMU5t7yj6hKR9hMbFUnf9AT6pjcf9iqra9lQ7AW7dYVlrC/yA19RGeuLK1iycTMbt1dQ0+g4rhlkJMWSlRJLVnIcWalx3jYldpefNRtXRMJZa05GmWVmF9WFKDM7GbgXyOuooswsDngWKAOuBH4LPGNmQ5xzNQ3aZQPTgPnANcBNwMPAhI6qTUQ6V0zUnkf2amodW3ZUsLG4oj70bSiuYGNdACwq58vVhbtN0ACIiYwgM9kLfDtH+OLqA2BBSS0lFdUk6dw9EQlBrfmXKR34xMz+H5AD/B/eeXMd6WQgC7jWOXe3H9h+B0wE3m3Q7jwgFrjZOfdfMzsYuMDMBjV3SFhEup7IiJ0LJu/fp+nJGeAdyt20vYINfuDb4Ae+up+/Wb+dDxZtpqSiepfn/frDN0mMiWxmVM87tNsrOY5eKbHERkV29McVEanXmiA3HLgf+I1//y7g6g6ryDPA3671t2v87UB2DXIttVOQE5FdxEZF1i+50pKSiur60bz8T78kvc8A1heX14/4zVy5jY3FFVTW1O723J6JMWSlxO16SDclluyUOP/xONITY4jQmnsi0g5aE+TOBY4HduCNfp0JvAO82IF1NVb3L55rsVUL7cxsKjAVICsri/z8/HYrrjklJSWd8j5dlfqv7dSHbXdASjlJbjXDkoFk/Hn6ETgXR0kVFFY4tpXXsq3CUVju2FZRS2H5DpYXlDB7haO4wu32D1KkQWqskRZr9Ijbue0Ra/SIiyDN3xcfRZc4f0/fw7ZTH7ZNV+6/1gS5f+EFtx8BPfGWHXkO6MjjB3WTFXL9bd0SJ8v98+dq/fXrmm3X+AWdc/findvHuHHj3MSJE9u75t3k5+fTGe/TVan/2k592HZt7cPqmlo2lXiHc9cXlbNxu7cMS8NDuos2lrO9vGq35ybERO4c3UuJIzsljl7+tu6xcDicq+9h26kP26Yr919rgtzlzrl7/J9Xmdk4vPPVOtLrwEbgUjPbDvwQb127fKAabxbr/ngTHf4C/NLMsvBGCz/U+XEiEiqiIiPISY0nJzW+xSlipZXVjc7dK2d9UQUbtpezsbicWau2saG4gsrqpg/n9kreGfYansOXneqFvYzEWB3OFemCWrqyQ5pzrrBBiAPAOVcN3NCwTXsX5ZwrN7Pv4p2PdxtecLvYOVfT8DCDc67AzM4D/oq3BMmnwJT2rkdEpKMlxEQxICOKARmJzbZxzlFYWsUGf1RvY3GFP0N358SN+QXe2nuu0fHcqAjzZ+fuPGevV0ocvdPiyEmNr190OSZKa++JhJOWRuTWmtkzwMvA5+x+ZYfTgO8ATS/r3kbOuQ+AUU08bo3uP4d3qFdEpEszM3okxtAjMYbh2SnNtmt4OLfxCN/G7eUs27SDj5duobi8erfnZibH0jvVC3c5ad5VNXL8sNcnLZ7M5FgiNbInEjJaCnK/wVvD7QJ2nzxgwErg1x1Ul4iI7KNdDue2oLSymnWF3uLKBYXlrGuwXbxxOx8s3kRpZc0uz4mKMLJSvMul5aTF+6HP+7lPmnf9XC2yLNJ5Wgpy6cCpwBl456X19R9fhXce2ocdW5qIiHSkhJioFq+X65yjuKzaC3hFZawr9K6uUVDkbeesLuTNr8t3W4YlNiqCPj3iye2RQF6PeCq3VVLSc52/9Es86Qp6Iu2mpSD3W2AR8HvgXOfcXzqnJBERCQVmRmpCNKkJ0YzIafpQbm2tY8uOSj/o7Qx7awvLWL2tlK/WFFJYWsV/F82uf058dCS5PeLJ7RFPXk8v3OX56/vl9ognLSFaQU+klVoKclvwJhsYcKd/ZYc6zjk3qEMrExGRkBfhT6LITI7lgNy0Jtu8/s50+u83ljXbylizrZTVW73tmm1lzFy5je2NztVLio2qD3n90xPol55I//RE+mckkJMar3P0RBpoKcjdhHeeXDKQArS8FLqIiEgT4qOMETkpzY7qFZVV7Rbw1mwrZeWWHXywaBMVDZZciYmMIK9nPP3TE72Al+EFvQHpifROiyMqUrNupXtpNsg55/4J/NPMpgN/cM5N77SqRESk20iNjyY1PpX9eu9+ndzaWsf64nJWbNnByi2l3nazt52xdAtlVTsnY0RFGHk9E+iXnsCgzCQGZSbVnwPYMzGmMz+SSKfZ44LAzrlJnVGIiIhIYxERRu+0eHqnxXNEoxN6nHNs3F7Bis0NQt6WUpZt3sEny7ZQXrVzJK9HQjSDe+0Md4N6JTE4M4k+afFaKFnCWmuu7CAiIhJyzMxf4DiOQwem77KvttaxtrCMJZtKWLqxhKWbSli6cQdvzd/AtM9X17eLjYpgYGYSQ3olMTwnmRHZKQzPSSY7JU4TLiQsKMiJiEiXE+EfZs3rmcCkYb122bd1RyVLN5WwZKMX8pZsKuGLldt4ac66+jYpcVEMz0lhRHYyw/xwNywrmcRY/dqU0KJvpIiIdCs9E2PomdiTg/v33OXxorIqFm3YzsKCYhas97bPfLGGHQ0WRe6XnsCI7BRG5aYyqo9366Hz7yRACnIi0jXU1kBVmX8rbXBr+Fg51FT6tyqordr5c03Dnyv9fVWMKFgLmx8B58DVAv7WOe+2y/26/Q4sAiIiwSLBrMHPDR6PiPDuW6T3WGSMd4uKg6gYiIyFqNgmHqvbxkFMAsQkQnSiv4333k/2Wmp8NAf33zXg1R2iXegHu4XrtzNvXRFvzFtf3ya3R7wX6hqEu7QEhTvpHApyIhIs56CyBEq3QNk2KC+GiuImtkVQsX3Xxyp37Axr1eVtq8PqglS0f/N+TimvhOq1fuAyb4s1uG+N7vvLX7haL1w6B67G/7m20c91bfzHaqqgpsILkvv+QbxAF5MI0QkQk+Tf9wNfbCrEpUJ8mreNS2v6vgIhsOsh2uNHZtU/XlRWxby1RXy1toi5a4uYu6aI17/eGe7yesYzOq8H4/r1YGy/HgzPTtbSKNIhFOREpH055wWukg2wvQBKNsKOzV5QK90CZVv9n7fufGxPwSU6EWKTIS4FYlO8bWouxCZ5YSU63t82/LnBtm6kKiquQVhrsI2I9kbHmvBpfj4TJ05s/35qSW2tPzpYAdV1Wz/g1W/LvZ+rSr1A2/hW1fB+iRd+i9d5fzZlhd7+lkTGQHwPSMiAxAxIzPS3/s8JDR/L9P58ulHwS42P5ojBGRwxOKP+scLSSr5eW8zctUV8taaQz5Zv4WX/vLv46EhG56Ux1g92Y/qmadRO2oWCnIi0Xm2NF84KV0PRai8Y1AW27RugZD1sX++Fi92YHwzSvVtaP+g9xr/f09vG9/BGg+rCWqx/i+xm/1RFREBEHETHddx71FR5o5zlRV6wK6+71d0v8kL3ji2wYxOsm+UF8oripl8vKh5SciClD6T0huS6n3NILl4PxcMgqZd3CLmLSkuI4cghGRw5xAt3zjnWFZXzxcptzFq5jS9WbuOe95dSU+sAGNwricMG9uSIQRkcNjBda93JPulm/zqKSItqa2H7OtiyFApX7gxshauhaJUX3Gp3vZwSMUmQlOX94u49BpKyITnL32Z7+xIzvUN3XfiXeNiJjN45wrY3qsqhdLMX7upC3o6N3shr8VooLoCVH3vhvrYKgLEAs672Dl+n9oEe/b1bWj//5wHeNqFnlxrVMzP6pMXTJy2e0w7sDcCOimrmrClk1sptfL5iG8/NWstjn6wCYHh2MocPSueIQRkcMqAnqfHRQZYvYUJBTqS7cc4bWdmyBLYu9bZblnq3rcugumxnW4uA5N6Qlgd5h3nb1Dx/29cbeYlNCu6zSOeLjvMOa6fmttyuttYLfMXrmDvjLUb16+n9R6BwNWxbAd+84QXAhmKSvEDXcyBkDoOMYZAxxLvFJHbUJ+pUibFRHDEogyMGeQG6qqaWr9YU8fHSzXy8bAtPfLqK/3y0ggiDUX1SOXpYLyYNy6TWuYArl1ClICfShUVWl8Lqz2DDPNi4ADbO934u27qzUUSUNyKSPhgGTYL0QdBzkPcLNaW3N3IjsrciIrxDqUm92JJRCAdP3L1N5Q7YttIb/d22wrttXe59Rxe+4s8C9qX29QJd5jDIHA7Zo6DXyI49/NwJoiMj6s+bu+KYIVRU1zB7VSEfL93C/xZv4s73FnP7u4tJiobjNsxm0vBeTBiSqSVPpJ6CnEhXsWMzrJsNa2d52w3zOKpoFXzo749Jgl4jYMSp3i/A9MFeaEvt2/3OQZPQEJMIWSO9W2PVFd4I8aZvYPMif/sNrJyxc9TYIr1glz0Ksg/wt6O8Q7RhKjYqksMGpnPYwHSuPH4o23ZU8sHiTTz1wdd8sHgzL3y5DjMYk5fGSftnc/L+OeT1TAi6bAmQ/vUWCUcVJbB25s7Qtm62dy4bAOaNXOQdzLKeExh42KlegEvt2+zMTJGQExXrfW97jdj18dpa2LYc1s/deVv+P/jqqZ1tegyA3IO9W97BkLV/2I4s90iM4fTRfUgtXMyECUczd20R7y3cyDsLNnDTawu56bWF7Nc7hZP3z+ak/XMY3EunOnQ3CnIi4aBkE6z6GFZ9AqtmQMFX3tpj4P3SyjsEDr3Em2yQc6C3FASwKj+fgcMmBle3SHuLiPBGktMHwX5n7Hy8ZBNsmAsFc2DtF7D8A5j7tLcvKt77u5E7DvofCX0P92ZFh5mICOPAvDQOzEvjyuOHsmpLKW/OW8/rXxfwt7cW8be3FjGkVxKnj+7NGWP6kNtDI3XdgYKcSCgqK4QV/4Ol73m/kLYs8R6PjPV+GR15pffLqM9BYX0YSaTdJGVC0jEw6BjvvnNQtAbWfAZrZnrnin5yD8y43Tsk23sMDJgAA47yJvLEhF/o6ZuewMUTBnLxhIGsLyrnzXnrefWrnaHukAE9+c6YPpw8KkczYLswBTmRUFBT7Y0iLH3Pu639whtxi0mCfkfAmB9A3yOg92jvkJOItMzMm12dlgf7n+U9VlXmBbrlH3j/UZpxO3z4d29B6L6HwZATYOiJkDE07JZByU6N46Ij+nPREf1ZvbWUF79cy3Oz1/Kr5+Zy/UvzOH5kFucf0pcjBqVjYfbZpGUKciJBqSz1QtvCV2HRG/5MUvNG2Y66yhtZ6DPOu66miLRddDwMPNq7gXeu6apPYPn73t/Ft3/n3Xr0hyEneqGu/5Fh95+nvJ4JXHHMEC6fNJiv1hTx/Oy1vPDlWl79qoCBGYmcf2hfzjooVzNfuwgFOZHOVFboBbeFr3q/OKrLvCsZDDkRhp0MAyfqUKlIZ4lNgiHHeTf+6K1xt/gt7zbrYfjs396VRYZ9C/Y701ueJ4xCndnOc+p+dfJwXv+6gMc+WcWfXl3ALW9+w6mjcpgyfgCjclODLlXaQEFOpKNVlcPiN+Grp71fEDWVkJILB10Aw0+BfuPDdkadSJeSlgcH/9C7VZV5h2AXvAQLXoGvpkFsqrd8z35nwsBJYbVsT1x0JGeOyeXMMbksKCjmiU9X8fxs7/DrEYPSmTphIEcPzdRh1zAUPt9CkXDinHfIZvZj3i+CimJI7AXjfgijvusdPtU/mCKhKzreO7Q69EQ45R+wLB/mPe+Fui8f9y49d+C5MPoHkDk06Gr3yoicFP54xv5cc9IwnvSvJDH5P58zPDuZi48ayGmjexMdqaWKwoWCnEh7KtsGc6bBFw/BpoXeZIURp8Gos2HA0WH1P3gR8UXFwNATvFt1BSx+2wtzM+6Ej26DvEO9CUn7nxVWlxJLiYvmkqMHMWX8AF6es457P1jGL/47h9vfW8zPjh3C6aP7EBmh/3CGOv1WEWkP676ET//l/Y+9uhz6jIXT7gi7f9hFZA+iYr3DqyNOhe0bvEOusx+Dl34Cb10HB10IB18MPfoFXWmrxURFcNbYXL5zUB/eXbCRv7+9iKuensNd05fw8+OGcsqoHCIU6EKWgpzIvqqt9c55+/hObymDmGQY/X0YOxlyDgi6OhHpaMlZMP5ncMRPvVMpPvs3fHw3fHyXN0HisEu9c2DD5DQKM+O4kVkcM7wXb85bzz/eWcRPnpzN3flLuf7UkRw+KD3oEqUJCnIie6umyjt8OuN27xqQKblwwp+8/4nHafaXSLdjBv0O925Fa+DzB7zTKxa+4i02POEaGHxs2AS6iAjj5FE5nLBfNq98tY5b3viG8+77hBP3y+K33xpJ3/TwWzy5K9PZjCKtVVPtHUK5cxy8dIV3MvRZD8DPvoQjfqIQJyKQmgvH3QBXzYdv/c0Ldo+fBfdN8pYdqq0NusJWi4wwTh/dh3d/cTRXnzCU/y3ezHF/f5+/vL6QssqaoMsTn4KcyJ7U1sCXT3oB7sXLIS4Nzn8apr7vTWLQ0iEi0lh0PBxyMfx0tne+bNk2mHY+3DfRmwEbRuKiI7nimCFMv3oi3z6wN/96fykn/vMDPly8OejShBAMcmZ2p5mtMLNyM1tkZt9voe1DZuYa3dI6sVzp6pZ/APceDS/82LsQ/blPwtR8b0mCMDlMIiIBiorxTru44gs44x4o3QqPnA6PnQXrvw66ur2SlRLHreccyLSphxEZYfzggU+5+r9z2LajMujSurWQC3LAwcDDwFVAGvCwmQ1sof1m4LwGtx0dXaB0A5uXwJPnwcPf9q7GcNYDcMkHMPxbCnAisvcio2D0+XDFTDj+j7Dmc/jXkd4o/47wGtk6bGA6r//sKC6fNIgXZq/l+H98wPuLNgVdVrcVipMdjnLOVQKY2SC8QDccWNZM+x3AK8AO55zrnBKly6oqhw/+6q0NFRULx14Ph13mHSYREWmr6DgY/1Nv3bn/3eotW7TgFe+8uoMmQ0Qojq/sLi46kmtOHM4po3rz86dmc9GDn/F/4wfwy5OHERsVGXR53YqFavYxs2jgU2AYMNA5t6GJNg8BFwIGlAMPAD91zu12NqmZTQWmAmRlZY2dNm1axxXvKykpISkpqcPfp6vq7P5L2/YVQxfdTUJZAeuzJrJ00BSqYtI67f07gr6Dbac+bDv1YfMSdqxi6KJ/k1b0NcXJQ1g09DJKknc/CBXKfVhZ43jqm0reXVVNXnIElx0YS05SaAXSUO6/1pg0adIXzrlxTe0LJMiZ2RqgTxO7pjjnHjKzKOBx4LvAD5xzTzTzOnUhrhC4GjgSuNA592hL7z9u3Dg3c+bMNnyC1snPz2fixIkd/j5dVaf1X1khvPFrmPME9BgAp/7Duzh2F6DvYNupD9tOfbgHzsHc/8Kbv4WyrTDhWjjqql0mUoVDH05fuJGr/zuHiupa/vG90Rw/MivokuqFQ/+1xMyaDXJBHVo9Gmhqql+BPxI3DTgTuKRhiPP3RQIVzvNIg321eEFuZIdWLl3L8v/B8z+G7QVw1C+89Z50GFVEOpMZHHAODD4OXr8W8m+Cb16DM/8FvUYEXV2rTRrei5d/ciQ/fuwLLn5kJj89dgg/P3aIrgrRwQIZ+3TOLXXOLWziVgQ8CnwHeA3YbmbnmtkA/6n3AWXAWAAzm25m15rZ/wE3+m0+7dxPI2GpugLe+p03mSEqFn74tnc+nEKciAQloSecdT+c8wgUrYZ/T4BP/uWN2IWJ3mnxPH3J4Zw9Npfb313M1Ee/oLSyOuiyurRQnOxwmL89xb8BTAGWN9F2MfATIBNYC1zlnHuhowuUMLdtBTx9IRTMgbFT4MQ/63qoIhI6Rp4OfY/wFh5/45ew8kOiep4bdFWtFhcdyV/PPoD9e6fwh1fmc959n/LgReNIT4oNurQuKeSCnHOufwv7JgOTG9yf2vEVSZey+G149kfe/3DPfQKGn7Ln54iIdLakTDhvGsy4A965kbGxn8HI3tDnoKAraxUzY/L4AeSkxfPTJ2dz1j0zePj/DqFfuv7T3N5Ca1qJSEeprYX8v8Dj3/UuoTN1ukKciIQ2M2+pkimvY64GHjwJvvpv0FXtlRP3y+aJiw+lsKyKs+75mMUbtgddUpejICddX1UZPDMZ8m+GA77nnQ+XPijoqkREWqfvoXwx9h+QOw6e+xG8+4ewumbr2H49eebHh2MG5933Cd+sV5hrTwpy0rXt2OxNaJj/EpzwJ28WWExC0FWJiOyVqpgUuOAFGHOBt5Dw0xdAZWnQZbXa4F7JTJt6GBFmnHffJywoKA66pC5DQU66rs2L4f5jYf1cbxbYET/R5bVEJHxFxcBpd8CJN3vLkzx6JpRtC7qqVhuUmcRTlxxOTGQEFzzwKSs264qa7UFBTrqm9XO980kqSuCiV2DkaUFXJCLSdmZw+GVw9n9g3Sz4zymwfX3QVbXagIxEHr/4UGodXPDgp2wsLg+6pLCnICddz5ov4KFTvfXh/u9NyDs46IpERNrXfmfA+U97yyk9eCJsbWqFrtA0KDOJ/0w+mC0llVz44GcUlVUFXVJYU5CTrmXlx/DI6RCXClNeh4zBQVckItIxBk2Ci16G8iLvXOBtK4OuqNUOzEvj3xeMZemmEi5/fBbVNeEzeSPUKMhJ17H6c3jsLEjOhv97A3r0C7oiEZGOlTsWLnwJKrbDw6dC4eqgK2q1o4Zk8uczRvHhks3c9NrCoMsJWwpy0jWsnwuPnwVJvWDyK5DSO+iKREQ6R84BcOELUOaPzBWtDbqiVjvn4DwmH9GfBz9aztMzwyeEhhIFOQl/m5d4s7dikuDCF70RORGR7qT3GLjgOW/Jpce+E1azWa87ZQTjB6dz3fNfM3dNUdDlhB0FOQlv29fDo2d4l9y68EUdThWR7it3HJz3BGxZCtO+D1XhMSM0KjKCO887iJ6JMfzkyVmUVFQHXVJYUZCT8FVZCk+eC6Vb4QfPQsaQoCsSEQnWgAnewucrP4IXfhw2V4DokRjD7eeNYdXWUn77/Fycc0GXFDYU5CQ81dbC81Nh3Zdw9gPQe3TQFYmIhIZRZ8Pxf4R5z8O7vw+6mlY7ZEBPfn7cUF78ch3Pzgqf8/yCpiAn4em9P8CCl+HEm2DYyUFXIyISWo74CYz7P/jon/D1s0FX02qXTxrMIf178vuX57G+KDwODQdNQU7Cz7wX4MN/wNgpcNilQVcjIhJ6zOCk/wd9D4cXLvdm9oeByAjjlrMPoKqmVodYW0lBTsLL5iXw4hXQZxycfIuunSoi0pyoGO860/E94MnzYceWoCtqlf4ZiVx9wjDeXbiRF77UIdY9UZCT8FG5A56+wP/H6WFvKyIizUvqBec+BiUb4IVLvRn+YWDK+AEc1DeN3788n207KoMuJ6QpyEn4ePVq2LgAzrofUnODrkZEJDz0GQsn/AkWvwmf/ivoalolMsK4+TsHsL28mr+99U3Q5YQ0BTkJD18/B3OegKOvhUHHBF2NiEh4OeRiGPYtePt6KJgTdDWtMiw7mQsO68cTn63i67VaKLg5CnIS+orXwStXeufFTbg26GpERMKPGZx+FyRkwH+neKeqhIErjx9Kz4QYbnxpniY+NENBTkJbbS28cBnUVMJ37oXIqKArEhEJTwk94Tv/hq1L4d0/BF1Nq6TGR3PtScOYuXIbr81dH3Q5IUlBTkLb5/fDsuneenHpg4KuRkQkvA2YAIdMhU//DSs/DrqaVjl7bB5Ds5K49a1vqK4JjytVdCYFOQlZseWbvFXJBx0LYycHXY6ISNdw7A2Q1hdevNy71GGIi4wwrj5hGMs27+CZL9YEXU7IUZCT0OQcQxbfC64WTv271osTEWkvsUlw2h3eIdbpfw66mlY5fmQWY/qmcdu7iymvqgm6nJCiICehacHLZGz5DCb+Gnr0D7oaEZGuZeDR3pGOT+4Oi6s+mBnXnjicgqJypn22KuhyQoqCnISe8iJ47Rq2Jw2Awy4LuhoRka7puBu9qz68dk1YLBR8+KB0Du7fg/v+t5wqnStXT0FOQs8Hf4WSDSwaerlmqYqIdJT4Hl6YW/UxfPVU0NW0ymUTB7O2sIyXvlwXdCkhQ0FOQsuWpfDJv2DM99meMiToakREurbRP/DW6Hzrd97RkBA3cVgmw7OTuef9pdTWhv4oYmdQkJPQ8tbvICoWjrk+6EpERLq+iAg45W+wY5N3NCTEmRmXThzEko0lvLNgQ9DlhAQFOQkdy/Lhm1fhqF9AclbQ1YiIdA+9x8CB58Gn90Lh6qCr2aNTRuXQJy2ehz9eEXQpIUFBTkJDbS28eZ23tpEmOIiIdK5Jv/G2028Kto5WiIqM4PuH9eWjJVtYsnF70OUETkFOQsP852HDXO+QanRc0NWIiHQvaXlw6FSY8yRsmBd0NXv0vXF5xERF8MjHK4MuJXAhF+TM7EYzc41uo5tp29vMXjezcjNbaWY/6ORypT3UVMP0m6HXSNj/rKCrERHpno68CuJS4J3fB13JHqUnxXLqATk8+8UatpdXBV1OoEIuyDVwXoPbimba3AMcA/wGWAk8bGaDO6U6aT9zn4Yti72h/YhQ/kqKiHRhCT29MLf4TVj9WdDV7NGFh/dnR2UNL3TzpUhC+bfmS8B/nXPTnHOFjXeaWU/g28A7zrm/AzfifZ6LOrNIaaPqSsj/C+QcCMNPDboaEZHu7ZCLISEd3r8l6Er26MDcVIZnJ/NsN7/+aiivtloCVJvZ88AU51zjK/v2BwxY69+v+5Mc2NSLmdlUYCpAVlYW+fn57V3vbkpKSjrlfcJZzrq3GFa4kq/yLmLr++/vsk/913bqw7ZTH7ad+rDtOrMP+2Z9i4FLHuWLl+4L+fU8D0yt4qlvKnnilffondT82FRX/g4GEuTMbA3Qp4ldU4BZwCVAAfB/wDnA18Af9/Sy/rbJFQKdc/cC9wKMGzfOTZw4ca/r3lv5+fl0xvuErdoauPNK6H0QB3znKjDbZbf6r+3Uh22nPmw79WHbdWofVoyFf7zM2B3vwWkXd8577qORY8t55ub3WBXZm/MnDm+2XVf+DgY1Inc0EN3E4wXOufqlpc1sBXAGMNK/Hw1EAhV45805INdvXhcMl3dEwdIBFrwEW5fBOY/uFuJERCQgsclw+OUw/c9QMMc79SVE9UqO4+ihmTw/ew3XnDiMyIju97skkHPknHNLnXMLm7gVmdl/zex6M5sM/MN/yqf+9j6gDBjrnNsKvAIca2ZX4Z0jVws80rmfRvaJc/DhPyB9MAw/JehqRESkoUOmQmwKfHR70JXs0dljc9lQXMFHSzYHXUogQnGywwJgMvAvYCjwF+COZtpeCuQDN+GdMzfFObe4wyuUtluW7/1P74ifQkRk0NWIiEhD8Wlw0IUw73koCu3JBMcM70ViTCSvflUQdCmBCLkg55y73jk30DkX55zr65z7tXOuxt832TlnzrmZ/v21zrkTG7TVaFy4+OifkJQNB54bdCUiItKUQy8BHHx2b9CVtCguOpJjR2Tx5vz1VNXUBl1Opwu5ICfdwMaF3ojcoZdAVGzQ1YiISFPS+sKI02DmQ1BREnQ1LfrWqBwKS6v4eOmWoEvpdApy0vk+vw8iY+EgLfknIhLSDr8CKorgyyeCrqRFE4dlkhgTyWtzu9/hVQU56VzlRfDlk96luBLTg65GRERakncw5B4Mn9wNtaF72DIuOpJjRmTx5rz1VHezw6sKctK55kyDqh3e6uEiIhL6DrkEti2H5flBV9Kik/fPZltpFV+s3BZ0KZ1KQU46T22td9Jsn3HQ56CgqxERkdYYeRrE94SZ/wm6khYdOSSDqAjjvW82Bl1Kp1KQk86z/H3YssRbn0hERMJDVCyMPh++eQ22bwi6mmalxEVzyICeTF+oICfSMWY/BnGpMPL0oCsREZG9MXYK1FbD7EeDrqRFxwzvxaINJaze2vjy7F2Xgpx0jrJtsOBlGPVdiI4LuhoREdkbGYOh/1Ew6+GQnvQwaXgvAKZ3o8OrCnLSOb5+FmoqYPT3g65ERET2xdjJULjKO00mRA3MSKRfegLvdaPDqwpy0jlmPw69RkLvMUFXIiIi+2L4Kd71V796KuhKmmVmTByaySfLtlBZHbojh+1JQU463sYFsG6WNxpnFnQ1IiKyL6LjvXOc578ElTuCrqZZRwzOoLyqli9XFwZdSqdQkJOON/sxiIiCA74XdCUiItIWB57nrQW68NWgK2nWYQPSMYMZSzcHXUqnUJCTjlVbA3OfgSEnQFJm0NWIiEhb9D0cUvt6i7uHqNSEaPbvncqMbnLdVQU56VirPoaS9d4luUREJLxFRMAB58Cy6bB9fdDVNOuIQenMXrWNssqaoEvpcApy0rG+fg6i4mHoSUFXIiIi7eHAc8HVeqsRhKjDB6VTVeOYuXJr0KV0OAU56Tg11TD/RRh2EsQmBV2NiIi0h4whkD3K+/c9RB3cvydREdYtDq8qyEnHWfEBlG6G/b4TdCUiItKeRp4Oqz+F4nVBV9KkxNgoRuWmMnOFRuRE9t3Xz0JMMgw5PuhKRESkPY08w9sueDnQMloytm8P5qwp6vLrySnISceoqYIFr8Dwb3lrD4mISNeRMcRb5D2ED6+O7deDyupa5q0rCrqUDqUgJx1j5UdQXggjTgu6EhER6QgjT4eVM2D7hqAradJB/XoAMGtVYbCFdDAFOekYC1+DqDgYNCnoSkREpCOMPB1wsOCloCtpUlZKHH3S4pm1clvQpXQoBTlpf87BN6/BwEkQkxh0NSIi0hEyh0PG0NA+T65fD2au3IpzLuhSOoyCnLS/DV9D0Wrv/DgREemazGDYyf6pNMVBV9Oksf16sKG4gq3lCnIirbfwNcC0CLCISFc39CSorYal7wVdSZPG9E0DYGlR1525qiAn7e+bVyHvEEjqFXQlIiLSkXIPgbg0WPRm0JU0aVh2MlERxkoFOZFWKloLBXNgmA6rioh0eZFRMPg4WPwW1IZeWIqNimRoVjIri0OvtvaiICfta8nb3laHVUVEuoehJ3lX8Vk3K+hKmjSqTyori2u67IQHBTlpX0vehZRcyBwWdCUiItIZBh8LFgGL3gi6kibt3yeF7VWwrqg86FI6hIKctJ+aalj2vrd2nFnQ1YiISGdI6Al5h4VwkEsF4Ou1XfMKDwpy0n7WfgEVRd7/zkREpPsYfAysnws7NgddyW5G5KQQYTBPQU5kD5a+6w2vDzg66EpERKQzDfSv4rMsP9AymhIXHUnvRGOugpzIHix9D3of5A2zi4hI99F7DMSmhmSQA+iXEsm8daG5aHFbhVyQMzPXxO3GZto+1ETbtM6tWAAo2+YdWtVhVRGR7iciEgYc5QW5EJwdmpscwcbtFRSWVgZdSrsLuSAHnNfglu8/1tKc5s2NnrOjI4uTZizLB1cLgxTkRES6pUGTvMszblkadCW76ZPkTcBbtKEk4EraX1TQBTTmnJsGYGaxwJ3AGuDVFp6yA3gF2OG66iIx4WBZPsSmQJ+xQVciIiJBqD9PbjpkDA62lkZyk71xq282bOeQAV3r9J+QC3INnA2kA9c752paaNcX2A6Um9kDwE+dc7st4WxmU4GpAFlZWeTn57d/xY2UlJR0yvuEgkPmv01Z4lDm/u/DdnvN7tR/HUV92Hbqw7ZTH7ZdWPShcxwW24vtn/2XeaVDgq5mF9FVpcRHGdNnLSSvfHnQ5bSrQIKcma0B+jSxa4pz7iH/50uAauD+Fl7qPWA6UAhcDVwOfAo82rihc+5e4F6AcePGuYkTJ+5b8XshPz+fznifwG1fD/lrSTjyEiaOn9huL9tt+q8DqQ/bTn3YdurDtgubPiw+kbj5LzFxwlHeeXMhIj8/n/36xFASYUyceHjQ5bSroEbkjgaim3i8AMDMRgJHAc865wrqdppZNBAJVDjPIw321QJHAiM7snBpwsqPvG3/I4OtQ0REgtX/SJj9KGycD9mjgq5mF0Ozk3ltbgHOOawLLVofSJBzzu3pTMhL/O2/Gj1+H3ARcDAw08ymA6/jTXi43G/zaXvVKa204kOISYbsA4OuREREgtTvCG+7ckboBbleSTxRWsWm7RX0SokLupx2E3KzVs0sHrgAWAK8u4fmi4GfAHcDacBVzrkXOrI+acKKj6DvYRAZyqdciohIh0vrC6l5XpALMUOzkwFvwkNXEnK/eZ1zZUCTU0qcc5OByQ3uT+2cqqRZJRth8zcw+rygKxERkVDQ9/Cd68mF0CHMwb2SAFi2aQdHDckMuJr2E3IjchJm6s+POyrYOkREJDT0OwJ2bAy59eQyk2JJio1i2aautZacgpy0zYqPIDoRcnR+nIiIAP3Ge9tVoXV41cwYmJnIss1d67oBCnLSNqs/hdxxENnUJGQREel2MoZAQkZInic3ICOR5QpyIr7KHbBhHuQdEnQlIiISKsy8w6t1p96EkAEZiawtLKO8qqXrDIQXBTnZd2tngauBXAU5ERFpoO/hULgKigv23LYTDchIxDlYtbU06FLajYKc7Ls1n3nb3HHB1iEiIqGl7vfC2pnB1tHIwIy6matdZ8KDgpzsu9WfQ/oQSOhaFyAWEZE2yj4AIqJhTWgFuQGZiQBdasKDgpzsG+e8ETmdHyciIo1Fx3lXdlj7RdCV7CIpNopeybEs36QgJ93d1mVQugVyDw66EhERCUW547xzqWtDa2JBV5u5qiAn+2bN595WI3IiItKU3IOhagdsXBB0Jbvo2zOB1ds02UG6u9WfQUwyZA4PuhIREQlFfcZ627r/+IeI3B4JbCiu6DJLkCjIyb5Z+wX0GQMRkUFXIiIioajnQIjvGXIzV/N6xgOwtrAs4Erah4Kc7L3qStg4H3JGB12JiIiEKjPvPLk1oTXhIa9nAgCru8hacgpysvc2zoeaSug9OuhKREQklPUZB5sWQnlx0JXUy+vhB7ltGpGT7qrgS2+rETkREWlJn4MAB+vnBl1JvV7JscRERbBGI3LSba37EmJTvfMfREREmpNzoLctmBNsHQ1ERBi5afGs0YicdFsFX0LOAd75DyIiIs1J6gVJ2SEV5AByu9ASJApysneqK2HDPJ0fJyIirZNzIKz/KugqdpHbI16THaSb2rTAm+ig8+NERKQ1cg7wJjxUhk5wyuuRwLbSKkoqqoMupc0U5GTvrPvS2/YeE2gZIiISJnIOBFfrrXgQIurWkusKo3IKcrJ3Cr6E2BToMSDoSkREJByE4ISHPmlekCsoCv8JDwpysncK5nh/KSP01RERkVZIzYO4tJAKcjmpdUGuPOBK2k6/jaX1amtgw3zIHhV0JSIiEi7MvAGAEApymcmxREYY6xXkpFvZtgKqy6DXyKArERGRcJJzoH9VoKqgKwEgMsLolRyrETnpZjZ87W2zFORERGQvZO3vrXiwZUnQldTLTo3TOXLSzWyYDxhkjgi6EhERCSd1AwAb5gVbRwM5qXEakZNuZuM877JcMQlBVyIiIuEkYyhYJGxcEHQl9XJS41lfVI5zLuhS2kRBTlpvwzzI2i/oKkREJNxExUL64JBaSy4nNY7SyhqKy8N7UWAFOWmdyh2wdbmCnIiI7JuskSEV5LJT4wDCfuaqgpy0zqaFgNOMVRER2Te99vNWP6goCboSwBuRg/BfFFhBTlqn7gRVjciJiMi+6OVPlNu0MNg6fNn+osAakdsHZnaymc01s1ozc2aW0WBfspk9aWY7zGy9mV3dwuv0NrPXzazczFaa2Q865xN0QxvmQ3SCLs0lIiL7pm7maogcXu2VHIsZrFOQ2ycJwAfA0ib2/Qk4F/gr8DHwVzM7ppnXuQc4BvgNsBJ42MwGt3+5wsZ5kDlcl+YSEZF9k9bfGxDYEBpBLjoygvTEGDZtrwi6lDYJ5Leyc+5Z59zlwNomdl8EzHfO3Qj8wn9sSuNGZtYT+DbwjnPu78CNeJ/noo6oudvbMF8LAYuIyL6LiPAGBEJkRA4gIylWQa49+eEslZ0Bb42/HdhE8/6AtbKttEXpVijd7P0FFBER2VchNnM1MzmWTSXhHeSiOuqFzWwN0KeJXVOccw+19mX8bWtW62uxrZlNBab6d0vM7JtW1tAWGcDmTnifzvH7nwI/7cx37Fr9Fwz1YdupD9tOfdh2XasPr7U9t2lfLfafXdGJleybfs3t6LAgBxwNRDfxeEFzT3DObTWzIiDXf6guCC4HMLNoIBKoAFbghbYm2zbx2vcC97a+/LYzs5nOuXGd+Z5difqv7dSHbac+bDv1YdupD9umK/dfhwU551xTExkAMLMheEEvx3/oB2a22Dn3KvAI8BMzuwEY7e9/yN/eh3cO3MHOuZlm9gpwopldBZwB1PrPFxEREenyOnJEriXj8UJZnX8A7wOvAtcBWcAvge3Ar5xz7zbzOpcCDwI3ARvxDtsu7qiiRUREREJJIEHOP0fuoWb2FQPfa2bfZGByg/trgRPbu7521KmHcrsg9V/bqQ/bTn3YdurDtlMftk2X7T9zrjXzCEREREQk1ITU8iMiIiIi0noKcm1gZuPN7CszqzCzWWZ2UDPtzjCzJf6lxPLNTNe58u1FH7pGtxc6udSQZGa3m9kGv09eaaGdvoPN2Is+1HewGWY2xMymm9kWM9tuZm+b2aBm2uq72Mhe9p++h80ws0/9/is1s5lmNqGZdl3qO6ggt4/MLA54FkgGrsSboPGMmUU2apcNTAOKgWuAscDDnVttaGptHzbwLHCef/tbpxQZHqa1tFPfwVZpsQ8b0HewaX3wfp/cAPwHOA64v3EjfReb1ar+a0Dfw6bNwFvs9I94q150j++gc063fbgBZ+KtY3eNf/8P/v1jG7W70n/8u/79R/z7g4L+DEHfWtuH/j7n708Muu5Qu+Fd5cQBrzSzX9/BNvah30bfweb7JqbR/S3Axiba6bvYhv7z9+l72Hw/Gt7Cv4cAO4CFTbTpct9Bjcjtu7qh2D1dIqy17bqjve2b6/CuyrHSzE7t0Mq6Fn0H24++g01wzlXW/Wxm44CewAdNNNV3sQl70X919D1sWiqwCfgUqAR+1ESbLvcdVJBrP629nNjeXHasu2mpb/4f8B28y6z1AJ40s4TOKqyL0Xdw3+g7uAdmNgx4Ee/KOz9pzVP8rb6LtLr/9D1sXglwAt7h1Ti8kcs9CfvvYFALAncFdZcC2+0SYf65X7X+/7KabdfxJYa81vYhzrlf1T3JzE7C+4csD+iMa+aGHX0H207fwb1jZiOB9/AuoXiMc67Af1zfxVZoZf/pe9gC51w18DbwtpmdDUwyswy8gNdlv4NaR24f+X+5VgKlwC14Q92VwGCgGpjnnNvfzHLw/nf1Nd4iyDcBXzrnjgqg7JCyF334LeAHQD7e/0BvwPuLmdvwkER3ZGanAPsDfwG+Au7Au0rKIvQdbJVW9qG+gy0wszzgC7xDgtfhfd9wzk0zM4e+iy3ai/7T97AZZnYicA7ehIc84Ld45xrm4F2+s+t+B4M+SS+cb8AEYC5e+JgNjPMfd8DXDdp9B1iK9z+tDwjjkyqD6ENgP2A6UIh32bYP8K63G3j9Qd/w/kF3jW6T9R1s3z7Ud3CPfTixiT50/j59F9up//Q9bLEPD8YLZ2V+/0yv65uu/h3UiJyIiIhImNJkBxEREZEwpSAnIiIiEqYU5ERERETClIKciIiISJhSkBMREREJUwpyIhIWzOwKM3P+bVg7vaYzs6/34XlZZlZqZpe2Qw1n+3Xc6N/P9+9ntPW1m3ivy8yszL9wuIh0AQpyIhIuzsFb2LPu5yBdgXdpn0eb2mlmbblqzh+A84DiNrxGc+rqvawDXltEAqAgJyIhz8x6A+OBp4F1NAhyZjbZH8F62Mxmm9k2M/uZv8/M7FYz2+qPdD3vt53YxHukmtmDZrbRzDab2b0tXMPyfGC6c67Ef27dKNptZrYZONXM/mlmm8yswsyWmdklDd7rfDMrMLOFwKRGr3098CSQYmb7m9l8f/Sv0MxeM7M+/mvc6L/nnWa2yH+v7/r7xpvZV2ZW7j/+JIBzbjveAsjf27s/AREJVQpyIhIOvov379V/geeA/f1rUzZ0InA/3irufzGzGODbwFXAPOBZ4PgW3uOfwAV4l+25H/ghTVx027/Ez0Dg8yZeYwzwS7zrXi7Au0zQ1cAG4C4z62dmWcADeKOLfweObqGmSuBhvIuA3+l/xhsbtTkOuAtIxbvMGMC1fo0/8z/D5gbtPweG+nWISJhry/C/iEhn+R5eqFkIJOAd2jyHXUPNg865u8zs23iBJ4udo12/d869Y2aH4Y2mNeVUvH8Tr2nw2AlNtOvrb9c1se8K59xX4I0U+nU2HNUbAcQCcX6995pZDV5wbEqsX+8BDR4b1ajN3/3XuRQY4j+22P88JwCz8IJenbq6++EFTBEJYxqRE5GQ5l9Q/DAgBm9kre48r8aHB7f622p/G9lgX2uvRbgeb9Su7nZ5S6U18dg6v+bheKNii4AzgQf9/XGtfJ06v8ULcTfghdOqJl6j4eeu+zf9Wv99F+ONLM40s7RG76frM4p0ARqRE5FQdw5e+LgZ+Mx/7Id456E1Hp1qbDrwc+B6/1Ds6S20fQWYDJwGzAHG4h3+/F+jdqv8be8WXqsuLMXjjQwe12DfJ0A5MMXMVuMdNt3T6yThBbPoFto29Bu8C4LPA1YDA4AUvIuJ19W9qslnikhY0YiciIS6c/BGj/7hnHvBOfcCzY/KNfYy3nloBwBn4wU78AJNYz/HO8R5DnAb3ijgR40bOecKgGXAuObe1Dm3APgHXmj6EfB6g30b8IJoJN75dPkt1P8nvMPJU4AtQFELbRuqxQuIDwBDgRucc3XBbRywyK9DRMKcOafRdRHpuszsKuArIBsvoJUBg5xzFW14zT/gnUuXWTdzNRyYWTKwEbjFOXdD0PWISNtpRE5EurrTgZfwZn3OBr7dlhDnuwtvlPCCNr5OZ7sA73DtPUEXIiLtQyNyIiIiImFKI3IiIiIiYUpBTkRERCRMKciJiIiIhCkFOREREZEwpSAnIiIiEqYU5ERERETC1P8HbpzYK5sryGQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import necessary libraries and make our axes fonts and labels bold for a visually pleasing plot\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams[\"font.weight\"] = \"bold\"\n",
    "plt.rcParams[\"axes.labelweight\"] = \"bold\"\n",
    "\n",
    "# Allow user to choose which function to plot and also print a short description of what the program aims to achieve\n",
    "print(\"This is a short program to calculate and plot sin/cos/tan/cot and their derivatives over the fundamental period. \\n\")\n",
    "user_choice = int(input(\"Please select your desired function: \\n 1. sin(x) \\n 2. cos(x) \\n 3. tan(x) \\n 4. cot(x) \\n User choice: \"))\n",
    "\n",
    "#Define matching labels and bounds to use for plotting\n",
    "fn_label = [\"sin(x)\",\"cos(x)\",\"tan(x)\",\"cot(x)\"]\n",
    "deriv_label = [\"cos(x)\",\"-sin(x)\",\"1/cos^2(x)\",\"-1/sin^2(x)\"]\n",
    "y_bound = [1.1, 1.1, 10, 10]\n",
    "title_choice = fn_label[user_choice-1] + \" and its derivative\" #Build the title of the plot to match the chosen function\n",
    "\n",
    "# Define appropriate periods and calculate functions and matching derivatives\n",
    "periods = [np.arange(0, 2*np.pi, 0.001), np.arange(0, 2*np.pi, 0.001), np.arange(0, np.pi, 0.001), np.arange(0.001, np.pi, 0.001)]\n",
    "functions = [lambda x: np.sin(x),lambda x: np.cos(x),lambda x: np.tan(x),lambda x: 1/np.tan(x)]\n",
    "derivs = [lambda x: np.cos(x), lambda x: -np.sin(x), lambda x: 1/np.cos(x)**2, lambda x: -1/np.sin(x)**2]\n",
    "\n",
    "# Calculate for the user's choice (note array are numbered 0-> n-1, while user has a choice of 1->n)\n",
    "period = periods[user_choice-1]\n",
    "function = functions[user_choice-1](period)\n",
    "derivative = derivs[user_choice-1](period)\n",
    "\n",
    "# Plot the results\n",
    "plt.figure(figsize=(10,6))\n",
    "plt.plot(period, function, label=fn_label[user_choice-1])  \n",
    "plt.plot(period, derivative, label=deriv_label[user_choice-1])\n",
    "plt.title(title_choice, fontsize='large', fontweight='bold')       # Add title/lables\n",
    "plt.xlabel(\"Angle (radians)\")\n",
    "plt.ylabel(\"f(x)\")\n",
    "plt.ylim([-y_bound[user_choice-1], y_bound[user_choice-1]])\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4a0e13b",
   "metadata": {},
   "source": [
    "## Final thoughts\n",
    "\n",
    "In the final code example above, we made use of the fact that the program has a very rigid structure. This begins from the limited user choice, and the fact that each choice is independent of others, which can allow us to produce matching arrays that make use of anonymous functions to calculate the desired function and its derivative and plot the result. You will see more detailed examples of all the concepts used in this section as you advance through the course.\n",
    "\n",
    "> Please note that the final code is significantly less human-friendly than the very first iteration we tried, and this is to be expected. **Programming is generally not a linear process**, and one never aims to write the final version of a code on the first try. It is best practice to adopt a trial and error approach (which most programmers do), where you interatively improve on the code, rather then hope to produce the final version from the first attempt. This practice also turns out to be significantly faster and more efficient than the alternatives.\n",
    "\n",
    "\n",
    "## The second problem\n",
    "\n",
    "Write a `Python` program to read in data from a text file in a specified format, perform some simple processing and display the output using pyplot.\n",
    "\n",
    "More precisely, we want to write a `Python` program to read in data from the supplied file for voltage, V(t), and current, I(t), and to plot the log power, being, p(t)=log(V(t)I(t)) where log is natural log to base e.\n",
    "\n",
    "From a computing viewpoint this problem demonstrates how to read data from a text file into suitable lists, perform some processing on these lists and then graphically display the results.\n",
    "\n",
    "\n",
    ">### Dataset\n",
    ">The voltage and current in an electronic circuit are sampled at a rate of 25kHz and the sampled data are written to a text file with the following format:\n",
    ">- The first three lines are comments detailing the equipment used and are not useful for plotting, these lines start with the \"#\" character.\n",
    ">- The following (several hundred) lines contain the data in the two floats separated by a \" , \". The first data entry being voltage and the second the current.\n",
    "\n",
    ">### Input files\n",
    ">For this exercise there are 2 input files with which to test, and then run our code.  \n",
    ">These are [short.txt](short.txt) for testing and [sample.txt](sample.txt) for the real run.  \n",
    ">Both of these are in the current folder, so they can be read in and executed upon directly here. ***Be very careful not to WRITE into these files, as you may lose the measured data and will have to go to great lengths to recover it!***\n",
    "\n",
    "## First steps\n",
    "Let us think how our program might be structured:\n",
    "\n",
    "```python\n",
    "1. User is prompted for the filename to be read.\n",
    "\n",
    "2. Read in the required data from the file.\n",
    "\n",
    "3. Create a function of the form logpower(voltage,current) to form the p(t).\n",
    "\n",
    "4. Display p(t) over the supplied range of t with suitable titles and axis labels.\n",
    "    \n",
    "5. Done!\n",
    "    \n",
    "````\n",
    "\n",
    ">### Background\n",
    ">- To successfully complete this we should read carefully [Parsing Input](../CourseNotes/ParsingInput.ipynb).\n",
    ">- Think carefully about what we are reading from the file and what we want to plot. Also, to deal with the comment line, we have to remember that comment lines start with a ```#``` which we can test for. Look up on the web what the string function ```str.startswith()``` does, it may be useful! "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d7786a8f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define function to calculate logpower\n",
    "def logpower(voltage,current):\n",
    "    p = math.log(voltage*current)\n",
    "    return p\n",
    "\n",
    "# Construct our program to read in the data and plot it appropriately\n",
    "# Note we do this by creating a function that takes a filename as its parameter\n",
    "def PlottingProgram(filename):\n",
    "    print('Plotting file: {}'.format(filename))\n",
    "    filein = open(filename,\"r\")\n",
    "    voltage_data = []\n",
    "    current_data = []\n",
    "    logpower_data = []\n",
    "    for line in filein.readlines():\n",
    "        if not line.startswith('#'):        \n",
    "            tokens = line.split(\",\")\n",
    "            voltage_data.append(float(tokens[0]))\n",
    "            current_data.append(float(tokens[1]))\n",
    "            logpower_data.append(logpower(float(tokens[0]),float(tokens[1])))\n",
    "    \n",
    "    filein.close()\n",
    "\n",
    "    # Now go on and process time_data and voltage_data as two lists\n",
    "    time_s = np.arange(len(logpower_data))/25e3 \n",
    "    time_ms = time_s * 1e3\n",
    "\n",
    "    # Plot the results\n",
    "    plt.plot(time_s,logpower_data,\"r\")          # Plot in red\n",
    "    plt.title(\"Power vs. time\")       # Add title/lables\n",
    "    plt.xlabel(\"Time (s)\")\n",
    "    plt.ylabel(\"Power\")\n",
    "    plt.grid()\n",
    "    plt.show() \n",
    "\n",
    "file_name = input(\"Filename: \")\n",
    "    \n",
    "PlottingProgram(file_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "744ab8ea",
   "metadata": {},
   "source": [
    "Below, we can test automatically for both files we are interested in. ***Building tests for all posibilities of a program is a useful practice when dealing with multiple inputs and use cases!***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "690f1836",
   "metadata": {},
   "outputs": [],
   "source": [
    "PlottingProgram('short.txt')\n",
    "PlottingProgram('sample.txt')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7bbdc86",
   "metadata": {},
   "source": [
    "## Next steps\n",
    "1. Make sure you have fully understood all of the above (that is all you have to do for this checkpoint).\n",
    "2. Get Checkpoint 4 checked off by a TA.\n",
    "3. Please continue with the [Week4](../WeeklyTasks/Week4.ipynb) tasklist."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63a15de4",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}