{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "wound-approach", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from numpy import exp, sin\n", "from scipy.integrate import solve_ivp\n", "from time import process_time\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "perfect-helping", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .2\n", "x = np.linspace(0,2, num=int(2/.2)+1)\n", "y=exp(x)\n", "\n", "def m_y(t, x):\n", " return x\n", "\n", "yv3 = solve_ivp(m_y, (0,2), (1,), method='RK45', t_eval = x, max_step=h).y[0]\n", "xv = []\n", "yv1 = []\n", "yv2 = []\n", "\n", "y0 = 1\n", "xv.append(0)\n", "yv1.append(y0)\n", "yv2.append(y0)\n", "ya0 = yb0 = y0\n", "for ii in np.arange(h,2+h,h):\n", " ya1 = ya0 + h * ya0\n", " yb1 = yb0 + h * (yb0 + h)\n", " xv.append(ii)\n", " yv1.append(ya1)\n", " yv2.append(yb1)\n", " ya0, yb0 = ya1, yb1\n", "\n", "\n", "# plot results\n", "plt.plot(x,y,'r-',linewidth=2, label='Actual')\n", "plt.plot(xv, yv1,'bo',linewidth=2, label='Euler')\n", "plt.plot(xv, yv2,'go',linewidth=2, label='Heun')\n", "plt.plot(x, yv3,'k.',linewidth=2, label='RK45')\n", "\n", "plt.grid()\n", "plt.title(\"Comparison of ODE methods\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d2119885", "metadata": {}, "source": [ "Comparison of SciPy ODE methods" ] }, { "cell_type": "code", "execution_count": 4, "id": "df8e3774", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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6NChAx06dGDatGn+ZU8++SStWrXyDzU+d+5cAL7++mv69evnv+9i/vz5gDP8eN26df3Did9xxx3+bV155ZV069aNzp07c8cdd1BcXBzV8zKm0knlzoEksdNNXj/4Adx4I8yZA/36OQnCNx8F37AcAHv27GHo0KEcPnyYRx99lF27djF06FD+/ve/07NnT/bu3cuAAQNo1aoVP/rRjwC45557uO+++9i4cSMXX3wxe/bs4YknnuDGG2/kzjvvZMOGDVx99dXk5eUBcPbZZ/vb85ozZw6nnXYaqsoNN9zAm2++yZAhQ6J6bsZUKqncOZAkdiTh1a+fkxBuvBEefrh0woiR5s2bM23aNF544QX/OE4jR46kZ8+eADRr1ozJkyczadKkU9bt2LEj6enp7N27FxHh8OHDABw6dIgzzzyz3LZPO+00AE6ePMnx48eDjgdlTJWXmQljx1qCiBFLEoH69YM774THH3f+xjBB+LRv357i4mL27NnD+vXr6dWrV6nlvXv3Zv369aest2LFCmrUqMHpp5/OhAkTmDFjBq1bt+bqq6/m+eef99fbunUrPXr04NJLL+XDDz8stY0BAwbQvHlzGjZsyA033BDz52aMSS2WJAItXQpTp8JDDzl/A/sokmDKlCl0796d++67jzfeeAMRYdasWYwcOZLt27czf/58hg8fTklJCS1btuTrr7/m448/5tlnn/Wf2vJZuHAhO3fu5NixYyxZsiSJz8oYUxVYkvDy9kE89th3p55inCi2bNlCWloazZs3p1OnTqxZs6bU8jVr1tC5c2f//D333MPatWv58MMP/YMC/vnPf+ZG9ydVMzMzKSoqYu/evdSuXZumTZsC0KtXL84++2y+/PLLUtuvU6cOgwYN4t13g/38hzHGfMeShNeqVaX7IHx9FKtWxayJb775hjvuuIMxY8YgIvzyl79k+vTp/o7mffv28cADD3D//aeMoF5KmzZtyM7OBmDjxo0UFRVx+umn88033/ivWtqyZQubNm2iffv2FBYW+n9n++TJk7z//vt06NAhZs/LGJOa7Oomr2AfzP36Rd0v4ftluhMnTpCens7w4cO59957AWjZsiUzZszg9ttvp6CgAFXl17/+Nddcc02Z23zmmWe4/fbbmTJlCiLC9OnTERH+9a9/8fDDD/uHEn/55Zdp0qQJu3fvZuDAgRw7doyS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ciSDBw+OV1jGGFMuu+PaGGNMSJYkjDHGhGRJwhhjTEiWJIwxxoRkScIYY0xIliSMMcaEZEkiARo0aHBK2RdffEFWVhbdu3enY8eOjB492r/so48+ok+fPnTo0IFevXqVGgV2woQJtGrViu7du3Puuedy/fXXs2HDhlLbXrt2LSLCggUL4vekjDHVgiWJIHJz4amnYj4AbCl3330399xzD2vXrmXjxo3+u6x37drF0KFDefnll/n888/54IMP+MMf/sD777/vX9e33qZNm7jpppu47LLLSg3zMWvWLC666CJmzZoVvydgjKkWLEkEiPNI4X47d+6kdevW/vnzzjsPgBdffJGRI0fSs2dPAJo2bcrkyZOZNGlS0O3cdNNNXHHFFfz1r38FnDu633zzTaZPn86iRYsoKiqKzxMwxlQLliQC5OTA8eNQXOz8jdeIwPfccw+XXXYZV111FVOmTOHgwYMArF+/nl69epWq27t3b9avXx9yWz179uTzzz8HYNmyZbRr146zzz6brKysUkcgxhgTKUsSAbKyoFYtSEtz/mZlxaedW2+9lY0bN/KTn/yEnJwc+vbty7Fjxyq0LWekX8esWbMYMmQIAEOGDLFTTsaYqFiSCOAbKfzxx52/cRgI1u/MM8/ktttu49133yU9PZ1169bRqVMn1qxZU6remjVr6Ny5c8jt+IYXLy4u5u233+axxx4jIyODu+66iwULFoT1o0vGGBOMJYkg4jhSuN+CBQs4ceIE4HRW79u3j1atWvHLX/6S6dOn+38Te9++fTzwwAPcf/8p4yAC8Pbbb/PBBx9w8803k52dTdeuXdm2bRt5eXnk5+czePBg3nnnnfg9EWNM8uXm0mbmzLh0okY7VLgJw5EjR0p1Ut97771s376dX/3qV9SpUweA3/3ud5xxxhkAzJgxg9tvv52CggKKi4u59957ueaaa/zrT5kyhRkzZvDtt9/SpUsXlixZwumnn86sWbO47rrrSrU9ePBgpk6dyi233JKAZ2qMSTj3apt2x47BzJkxPwViSSIBSkpKgpY/++yzQcsvueQSVq1yfn6joKCAhg0b+pdNmDCBCRMmBF3vL3/5yyllAwcOZODAgRFGbIypMtyrbaSk5LurbWKYJOx0kzHGVGXu1TYlNWrE5WobSxLGGFOVuVfb5N12W1yutqkWp5tUFRFJdhiVnvdS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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .2\n", "x = np.linspace(0,2, num=int(2/.2)+1)\n", "y=exp(x)\n", "\n", "methods = ('RK45','RK23', 'DOP853','Radau','BDF', 'LSODA')\n", "colours = ('bo','ro','rx','k-','r.','b.')\n", "def m_y(t, x):\n", " return x\n", "\n", "timings = {}\n", "for c, meth in zip(colours, methods):\n", " initial = process_time()\n", " y = solve_ivp(m_y, (0,2), (1,), method=meth, t_eval = x, max_step=h).y[0]\n", " final = process_time()\n", " timings[meth] = final - initial\n", " y2 = exp(x)-y\n", " plt.plot(x,y2,c, linewidth=1, label=meth)\n", "\n", "\n", "plt.title(\"Error Analysis of ODE methods for exp(x)\")\n", "plt.legend()\n", "ax = plt.gca()\n", "ax.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "id": "ad911ad0", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RK45 0.0070961399999998065\n", "RK23 0.004194486999999469\n", "DOP853 0.004711676999999526\n", "Radau 0.00950889900000007\n", "BDF 0.0054532229999999515\n", "LSODA 0.0014728649999984356\n" ] } ], "source": [ "for k in timings:\n", " print (k, timings[k])" ] }, { "cell_type": "code", "execution_count": 14, "id": "d74f88de", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "meth,timetaken = zip(*timings.items())\n", "plt.title(\"Length of time taken per method\")\n", "timems = map(lambda x: x*1000, timetaken)\n", "plt.bar(meth, list(timems), width=0.4)\n", "plt.xlabel('Method')\n", "plt.ylabel('Milliseconds')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 16, "id": "17efc931", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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6FDWr1/PjTfeyMiRI6murmbRokUMHz688Xzzww47rLG+ZLW1tey///64OyNGjOC+++7j3HPPzem9icieK5LzyN19gbtXuftR7v51d3+v5aVyUIDr2Hbv3p0pU6bwy1/+svG6K6NHj+boo48GoFu3bkycOJGbbrppl2X79+9Pu3bt2LBhA2bG5s2bAdi0aROHHHJIi3Xvv//+AGzfvp1PPvlE/wgVkWbF8i/6eb+ObejQQw9lx44drF+/ntdee43Kysom06uqqtJenvb555+nTZs2HHTQQVx77bVMmzaNXr16MXz4cG677bbG+ZYuXcqQIUM44YQTeOqpp5qUccopp9C9e3c6derEiBEjIn1fIrJniWciz9d1bHN08803M3jwYC6//HJ+//vfY2bce++9jB49mlWrVjFz5kxGjRrFzp076dGjBytWrOCll17iF7/4RWM3ToPHHnuMNWvW8PHHHzN79uwivisRKXXxTOT5uo5tiiVLltC2bVu6d+/OEUccwfz585tMnz9/PgMGDGh8fdlll7FgwQKeeuophg4dCsBvf/tbRo4cCQR3Hdq6dSsbNmxgn332abwaYmVlJYcddhhvvPFGk/I7dOjAWWedxYMPPhjp+xKRPUs8E3m+r2MLvPvuu1x88cWMHTsWM+P73/8+U6dObTw4uXHjRq688kquuGLXi9Un6927N7NmzQJg8eLFbN26lYMOOoh333238WyUJUuW8Oabb3LooYdSX1/PmjVrgKCP/JFHHqFfv36RvS8R2fPE8+qHDWenRHzWSsMdgrZt20a7du0YNWoUP/rRjwDo0aMH06ZN46KLLmLLli24Oz/84Q8544wzmi1z0qRJXHTRRdx8882YGVOnTsXMePLJJ/nJT35C+/btadOmDXfccQddunRh3bp1nHnmmXz88cfs3LmTRCLR5NREEZFU8UzkkJfr2LZ0vvawYcOYOzf9/f3GjRtHp06ddhl/xBFH8Mwzz+wy/uyzz+bss8/eZXx5eflu6xARSSeeXSsiItJIiVxEJOaUyEVEYk6JXEQKauIzE6lbWtdkXN3SOiY+M7FIEcWfErmIFNQxhxzDyBkjG5N53dI6Rs4YyTGHHFPkyOIrvmetiEgsJfomqB1Ry8gZI6muqmbyvMnUjqgl0TdR7NBiS3vkSRouYztw4EDOOOMM3n///ayWP/HEE5k3b15+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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .2\n", "x = np.linspace(0,2, num=int(2/.2)+1)\n", "y=exp(x)\n", "\n", "methods = ('RK45', 'DOP853','Radau')\n", "colours = ('bo','ro','gx')\n", "def m_y(t, x):\n", " return x\n", "\n", "results = []\n", "for c, meth in zip(colours, methods):\n", " y = solve_ivp(m_y, (0,2), (1,), method=meth, t_eval = x, max_step=h).y[0]\n", " y2 = exp(x)-y\n", " plt.plot(x,y2,c, linewidth=1, label=meth)\n", "\n", "\n", "plt.title(\"Error Analysis of ODE methods for exp(x)\")\n", "plt.legend()\n", "ax = plt.gca()\n", "ax.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "85c088dc", "metadata": {}, "source": [ "Now look at y'' = -y for which we expect solutions of sin(x) or cos(x).\n", "We set this up as a coupled system of first order equations as:\n", "y' = -u and u' = y" ] }, { "cell_type": "code", "execution_count": 17, "id": "268b884a", "metadata": {}, "outputs": [], "source": [ "def m_y(t,x):\n", " # x is a vector for (u, y)\n", " y = (x[1], -x[0])\n", " #print(x,y)\n", " return y\n" ] }, { "cell_type": "code", "execution_count": 18, "id": "cbee4d08", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEICAYAAABS0fM3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABld0lEQVR4nO2deXwV1fXAv+clJOwh7EtIgIgQkkBYBBEXKKgIAq07UpdWi9raVvuzqWJd6m5ata3aWle0UtRqFSyoFQRUkFVDNmTNyr4kgQCB5L37+2NmksnjZX3LvJc3389nPu/NnTv3nndn3py59557jiilsLGxsbEJXxxWC2BjY2NjYy22IrCxsbEJc2xFYGNjYxPm2IrAxsbGJsyxFYGNjY1NmGMrAhsbG5swx1YENl4jInNE5H9Wy2EgIu1E5GMRKReRf1stT6AQkfki8piPynpYRN72RVm+RkQ+EZGbmpH/NhH5cxPyRYvI9yLSwysBQxBbEQQRInK9iGwUkQoR2avf8OdbLVdjKKUWKKUusVoOE1cBvYBuSqmrPWUQkWEislhXFsdEZIWInGc6PkBElH4tKkRkv4j8V0QudiunQEROmvJViMgL/v15ICI3i8jX/q4nGFFKXaaUerMpeUUkCvg98McmlHsKeB241zsJQw9bEQQJIvIb4M/AE2gPsXjgb8AsC8VqFBGJtFoGDyQA25RS1Z4OikgisBrIBgYCfYEPgf+JyHi37F2UUh2BEcDnwIcicrNbnhlKqY6m7U4f/hYb75gFfK+U2t3E/P8CbhKRaD/KFHwopezN4g2IASqAqxvIE42mKPbo25+BaP3YRKAESAcOAHuBHwLTgG3AEWCeqayHgfeBd4FjwLfACNPxe4Gd+rE84EemYzejPUSfAw4Dj+lpX+vHRT92ADiK9rBNMf3Ot4CDQCHam5rDVO7XwJ+AUiAfuKyB9kgCVgJlQC4wU0//A3AaqNLb9BYP5/4TWOoh/e/Al/r3AYACIt3y3APsN8ldAExp4nV+GPg38LbettnA2cB9ensVA5e43Rev6ddzt97WEfpvrwSc+m8s0/PPB14ElujlrwMSTeWdB2wAyvXP80zHBgKr9PM+B14A3taPtdVlPqy39wagV3OuS1Pkcyun3jr18m9tyn2D9ob/e9P+tXqezvr+ZcA+oIcpz3bgIqufC4HcLBfA3hTAVKDa/aHjlucRYC3QE+gBrAEe1Y9N1M9/EGgD/AztYfsvoBOQDJwEBur5H0Z7UF6l579H/3O00Y9fjfaW7ND/OMeBPvqxm/W6fglEAu2oqwguBTYBXdCUQpLp3LeARbpMA9CU1C2mcqt02SOAO9AUnnhoizbADmAeEAX8QH+wDDH9vrcbaMt9wE88pE9Ce7i2o35FMEhPT9L3C2ieIqjU2yhSb4984H7Tdcs35f8Q+AfQQb/u64HbTO31tVv589EenGP18hcA7+jHuqI9KG/Qj83W97vpx78BnkV74bhQb09DEdwGfAy016/NaPQHaTOvS73yeSir3jo5UxHUe9+gKZCr3cpeoMvSTc97udvxxcCvrH4uBHKzXAB7UwBzgH2N5NkJTDPtXwoU6N8noj3oI/T9TvrDapwp/ybgh/r3h4G1pmMOtLfOC+qpOxOYpX+/GShyO17zUNL//NuAc9HfmvX0CLQ39WGmtNuAlaYydpiOtdd/Q28P8lyA9jA3l78QeNj0+xpSBNXAVA/pQ/U6+1G/Imirp0/Q9wvQ38pN28/qqfdh4HPT/gz9XPfr1gVtePAU0M6Ufzawwr3NTcfnA6+a9qehDYuApgDWu+X/Ri8nXm+TDqZj/6JWEfwU7cVjeCP3aGPXpV75PJRVb52cqQjqvW/Q3u6nup3fBShC65H9w0P5C4AHffHfDpXNniMIDg4D3RsZb++LNpxiUKin1ZShlHLq30/qn/tNx08CHU37xcYXpZQLbWipL4CI3CgimSJSJiJlQArQ3dO57iilvkAbVngROCAiL4tIZ/38Nh5+Qz/T/j5TOSf0r2aZDfoCxbrc9ZXVEIeAPh7S+wAutDfl+jDqOGJK+6FSqotpe6WB892vySEP160j2jxHG2Cv6Tr8A61n0BD7TN9PUNt+7vcP1LZZX6BUKXXc7ZjBP4HPgHdEZI+IZIhIGw91N+W61CefO02ts06ZHu6bUjQFiylPGdoQXQrwjIfyOqEp9LDBVgTBwTdob38/bCDPHrSHg0G8ntZS+htfRMQBxAF7RCQBeAW4E23YoAuQgzbMY6AaKlgp9Vel1GhgGNoY+G/RHr5VHn5DUyfxzOwB+utyt6SsZWjDX+5cA3xjeph44kdo4/lbm1hXSylGuye6mxRMZ6VUsn68wWvgAff7B2rbbC8QKyId3I5pFSlVpZT6g1JqGNo8w+XAjfXU4c11qaEZdTZGFto9WIOIpKH1OBYCf/VwThKwuQV1hSy2IggClFLlaOP7L4rID0WkvYi0EZHLRCRDz7YQ+L2I9BCR7np+b+y8R4vIFXov5C60h85atPFohTbHgIj8BO3NqUmIyDkiMk5/ezuONibu0t963wMeF5FOusL5TQt/wzq0t8l0vZ0mog2zvNPE8/8AnCcij4tIV12eX6I9aH5Xz+/qJSJ3Ag8B97m99focpdRe4H/AMyLSWUQcIpIoIhfpWfYDcbp5ZFNYCpytmyhHisi1aIr6v0qpQmAj8AcRidJNlmcYJ4rIJBFJFZEINAOAKrSekzveXpcamlFnYywFjDZDRIxJ6HnAT4B+IvJz0/F+aPMpa1tQV8hiK4IgQSn1DNqD8fdoD+FitLfyj/Qsj6H9WbPQxja/1dNayiK0iWBjAvEK/S0sD627/A3awyYVzUqoqXRG61GUog0LHKbWhvuXaMphF5qlx7/QrDqahVLqNNoD5jK0nsbfgBuVUt838fztwPloJqEFaG/EVwKXKqXcf2uZiBxHa/NpaBOP7jJ/7LaO4MPm/qZ6uBFt0jUPrT3fp3ZI6ws0q5x9InKosYKUUofR3qr/D+2apKNNkhrnXg+MQxvyeghtItugt173UWALmnXRPz3U4dV1caNJdTaBj4GhImIMoz6JNnz1d6WtG/gx8JiIDNaPXw+8qR8LG4yZdZswQkQeBs5SSv3YallsbPyNiMxFM1K4q5F80WhDQhcqpQ4EQrZgIRgXA9nY2Nj4DKXUy03MdwrNcizssIeGbGxsbMIce2jIxsbGJsyxewQ2NjY2YU5IzhF0795dDRgwoEXnHj9+nA4dOjSe0SKCXT4IfhmDXT4Ifhlt+bwnGGXctGnTIaXUmW62rV7a3JJt9OjRqqWsWLGixecGgmCXT6nglzHY5VMq+GW05fOeYJQR2KhsFxM2NjY2Nu7YisDGxsYmzLEVgY2NjU2YE5KTxTY2NuFFVVUVJSUlVFZWAhATE8OWLVsslqphrJSxbdu2xMXF0aZNfQ5b62IrAhsbm6CnpKSETp06MWDAAESEY8eO0alTp8ZPtBCrZFRKcfjwYUpKShg4cGCTzvHJ0JCIvC4iB0Qkp57jIiJ/FZEdIpIlIqNMx24Ske36dpMv5LGMjAyyZ91PSeQAXOKgJHIA2bPuh4yMxs+18T0ZGSy7fwUDBoDDAQMGwLL7V9jXIwSprKykW7duiEjjmcMcEaFbt241vaem4Ks5gvlo4Rbr4zJgsL7NRYsNi4h0RfN0OA4tfN1DIhLrI5kCTvbqclIWP0GcsxAHijhnISmLnyB7dbnVooUly8rPYdwTs9hU2JVqJWwq7Mq4J2axrPwcq0ULX+q8LAnlEkO5xOASafTFyVYCTae5beUTRaCU+pK6EZvcmQW8pZuyrgW6iEgftHCLnyuljiilStGCZjekUIIP042dsvgJBM2Zv+G4Q4DYJQusky+MWfyPPURRSVdKEaArpbSjghFPXG332Cyi7ssSxHCUGI7iAPvFyUICNUfQj7rhDUv0tPrSz0B3JTsXoFevXqxcubJFglRUVLT4XE+oRTuZuEZzbliMFiD1IrSGVWiKoJ+zkOKIeHacexnxKVA8e3bA5PMHwSxj/4ULqd5cTfGGG/mLq1iLioMWMLka2IQihcM1D55+i59gxaG5yNiVAZUzmNsQ/Cdf4n//STW118SI0dkG7a1UgC7//ScrV15c57yYmBiOHTtWs+90OuvsB4IuXbqQnJxMdXU1CQkJvPzyy3Tp0oXCwkKuueYa1q1bB8D8+fN5/fXX+fDD2rAUzz//PPfffz/5+fl069aNr776itmzZ5OQoAWNmzFjBvfee69P5a2srGz6NfS0yqwlG1qw75x6jv0XON+0vxwYA9wD/N6U/gBwT2N1BdPK4uKIBFUN6iSoKn1zgXKCOgEqG5TSNxeorJnzAiqfPwhmGbNmzlMuvb33gZoH6pTe9tWgXgR1XN83rktxRELA5QzmNlTKf/JVg/pAvxbGf8K4Fs6aTznjvLy8vDr7R48ebbCet99WKiFBKRHt8+23vZe9Q4cONd9vvPFG9dhjjymllMrPz1fJyclKKaXeeustlZqaqg4ePFgjY1FRkbrkkktUfHy8OnjwoFJKa9/p06d7L1QDuLeZUtavLN6NKUYuWnzc3Q2khwx9nUVsROsBGJugvd0UA4nUxtezh4n8T+ySBQjam2Y3tJiUUWhtHwH8HGir7xvDd32dRRZIGia4GVA8j/AfasekRd9caLFS9wKC8mrYbsECmDsXCgs1zVJYqO0v8OFfb/z48ezeXfdR9d577/HUU0/xv//9j+7du9ek33333WRkZAT1HEegFMFi4EbdeuhcoFxpMVk/Ay4RkVh9kvgSPS1k2Ozox8Oc2ZAKLWJ2W/2Y/dAJDH2dRTVzNIZidkfQhomMYYk9EfEectn4AvOcwC4Un6N4BO0amHGgPSTSgdN4N19w//1w4kTdtBMntHRf4HQ6Wb58OTNnzqxJKyws5M477+R///sfvXv3rklftGgR/fr1Y8SIEWeU88033zBixAguu+wycnNzfSNcC/GV+ehCtBi3Q0SkRERuEZHbReR2PctStDi1O9Di2f4cQCl1BHgU2KBvj+hpwYvbG85Trv2kULchFXCUzgA1b6dV+jH7oeNf9kTE8w1ae5sjbSjgdNvONfM2u4ErgDKgr7PQnjj2E0YPTaGNHS8GBgHVROACyulMOdp1uQZ4lVrl3dIedFE971r1pTeVkydPkpaWRu/evdm/fz8XX1w7j9GjRw/i4+N57733atJOnDjBE088wSOPPHJGWaNGjaKwsJDNmzfzy1/+kh/+8IfeCeclvrIamq2U6qOUaqOUilNKvaaUekkp9ZJ+XCmlfqGUSlRKpSqlNprOfV0pdZa+veELefyJ+Q0nH0UVVTyEdkO7EEoiEsiZOY8TSaNrHkTH0CJ6HwRKp8+xTPZw4Mi067kbWEPtW6cCcmbOI+oP95Mzcx4lEQn0B3oBr4FtseJHjB6w0UOL0NMduHAoRYwqJ0aVoxAEbRgvAu960PH1vGvVl95U2rVrR2ZmJoWFhSilePHFF2uOtW/fnqVLl/LSSy+xQB+Dys/PJz8/nxEjRjBgwABKSkoYNWoU+/bto3PnznTs2BGAadOmUVVVxaFDh7wT0AtsX0PNxPyGkwD8G+gIHIuIxaFcxFUXkLrocfrcPLXmodMZoad05L6zxpM6IcZS+Vs7u7vv40C7WAY74uso5tQJMZCeTuqix4mrLmBPRALPoHVNbVNf/7EnIr5m/F+5pbvng9oedHU9+ZrC449D+/Z109q319J9Qfv27fnrX//KM888Q3V1dU16z549+fTTT5k3bx6fffYZycnJHDhwgIKCAgoKCoiLi+Pbb7+ld+/e7Nu3zzCQYf369bhcLrp16+YbAVuArQiaSX1vOGe8uZgeOo6nn+KGyTfxwY51HPjd7+xhCF+jD9cVRyTw8BtvkF7poPzyH+N4+qkaxUx6ep1T+jqL6AxEU3e82p7D8S2l0+fwKXCHKU1xZs+4dPqcGkWxH7gabXivJT3oOXPg5ZchIQFEtM+XX9bSfcXIkSMZPnw4CxcurJM+cOBAFi9ezE9/+lM2btxYz9nw/vvvk5KSwogRI/jVr37FO++8Y+lksu1rqJnsiYgnzllIFbW2zzXp9ZyTvbqci5e9yH3At8BU3X49m3mkBkLoVo4xXLcOmA3cpg4jjbSvcR1Be+AY1l4NXUeb5pM6IYY7153FjAOlKHWE3RHxlE6fc0bPOHVCDNnMI3bJAvo6i9hNFC+eczl3tbAHPWeObx/8oK2tMPPxxx/XfM/JqfWuM2LECHbv3n3GOoeCgoKa73feeSd33nmnbwX0ArtH0ExKp8/hKHA5cFJP8/SGY8YYTroHmELtQjN7GMI3GO2bBvyK2oVJDbWv8QbqAF4Hvqbx62jTREw+nuR3V/H1wTKG3vPPBnto7j3oi2fdw33ZZTjuTWfAAKgsq4R9+6z4NWGBrQiaSeqEGP6adjnQjnbuY9D1YAw3OKhdcWxOt/GOvs4iTqK1rcMtvT5SJ8TUzOEo4GnaN3odbZqG2cfTEhJ50nWMi/54bZN9PC0rP4ffLPoLkyq/YK/uIyqq/ABHne0bP9mmRdiKoLmkp7OqeyU/e3d+ncnhM95wTJgnvFzYpqS+Zk9EPCuoXRdgTq8X0xvotUeO8FXnSPq/+dsGr6NN0zD7eLoEuIdTRFHJ4n/safL5nTjFRyi6A90oRVCUHaxq9FyblmErgmaye/duNm3axIwZM5p8jnki7CiaB77T2MMQvqJ0+hxeBr4wpTVnmCc2NpYpU6bw/vvv+0O8sOM3h+8nmqoagwoHEE0VvznctBVdxvltqDUlFaBXdUg5HQgpbEXQFEyLyBbExXFpWRU7rnusyVY/5mGIzgj7iOLN8bPtYQgfMXBMW5ZHRtPfEYcLodjRv3nDPBkZXFgsvPqzO22vpD4gHm1Iropa9yrm9Kaeb6wAN8qI4rSvRLRxw7YaagKGVYqgmRv+VlVoi4+aavWTnq7n0wyZr3vqKb4rKrKHIXzEp0lJTJg8kZRPPwVg58qVTJw4scnnZ68u5/YNH/AJUE6tV1LbqqtlnOrck+ij+/kR8DbQ1ZTeronntzu6H4AVwDbgB4CKaHOGawob32D3CJqAYZXiAn4BjMQ7q58rrriCDz/8EJfL1Xhmm0b54IMPuOKKK1p8fuySBUSjuT8w+hC2VVfLaTdtEusj2lBArRJwRkbTbtqkJp/vjIwGoBPwEqAQHDHWhqaMiIggLS2NlJQUZsyYQVlZGaCZhaakpNTke+WVVxg9ejSlpaX89re/ZejQoQwfPpwf/ehHNeesX7+etLQ00tLSGDFiRB2X1VZgK4ImYLY+MezN3dObw9lnn0337t1Zu3at98KFOZWVlXzyySfMmjWrxWUY17E5Vkc2DbBwIZ/NmsG0zp1rVnRFzH8N3BZfNXR+xPzXICGBc4C9DgfO2C4waFDTZViwgDoxSn3getRwMZGTk0PXrl3ruJgw+Oc//8nzzz/PZ599RmxsLBdffDE5OTlkZWVx9tln8+STTwKQkpLCxo0byczM5NNPP+W2226rs0o50NiKoAkY1ienqTvm2WKrn4wMzj/dhfnnT7XHpFuKPm/zbod4hpeXU9VvXIvb0OzewOyszrbqajlLS0qY9uGH4HJBQUHzV3fNmQMFBUQoxdTZsznZnFW3AfBD3VQ31JdccgmRkdoI/LnnnktJSQmguakw0isrKy13UW0rgiZQOn0OJ4HpaD5TwLvFR9mry7l929ccUscQO7ZxizDmbXa7DvIk3jmNM6y6BG1x2TrsxWXecODAAb7//nvOP/98n5Q3bdo0Tp482XhGAz/7oW6OG2ozr7/+OpdddlnN/rp160hOTiY1NZWXXnqpRjFYga0ImkDqhBj+dd71lBJFdBMXkTVE7JIFDAfM7yf2mHTzMNrqbuA8Pa2lbWi26toHzJfO9uIyL/jss8+YPHkyUVFRPinv0ksvpbKysulzan7yQ91cN9RmHn/8cSIjI5lj6hmNGzeO3NxcNmzYwJNPPkllZaVX8nmDrQiaQno6+ZMGctm8e5q8iKwh+jqLalzu2g7PWkZfZxEH0Pw9ed2GpsVlU77+mnUjBnl1fcOdpUuXMm3aNJ+V161bN6Kios7w9VMvfvJD3Vw31Abz58/nv//9LwsWLPA4BJSUlETHjh3r+CsKNLYiaCLLli1jypQpPinLGHtW1F0Na49JN509EfGsppmriZvA2LFj2bVrl6W+4UMSfc6mICKB/73zDmm3Pey7ea+MDKJccGTbDtTGjZzemIXafaR+30N+9kPdVDfUAJ9++ikZGRksXryY9iaZ8vPza84tLCzk+++/Z8CAAT6RryX4KkLZVBHZKiI7ROReD8efE5FMfdsmImWmY07TscW+kMfXlJWVkZuby/jx431SnjEmfQh4CmpCK9pj0k2ndPoc/g18bkrzRRu2adOGCy64gC+++KLxzDY1GHM2R11FPAyMce322bxX9upyOladwolL70mfplPFQU5UuL8G6ATAD3VT3VDfeeedHDt2jIsvvpi0tDRuv10L2vj1118zYsQI0tLS+NGPfsTf/va3OnGOA43XsxMiEgG8CFwMlAAbRGSxUirPyKOUutuU/5dopvgGJ5VSad7K4U9WrVrF+PHjadu2rU/KM7vcfcVZyARHX7pdfjOpE2JY6ZMaWj8p53Vm+Wcd+UVVZ1yuvewxuTde6WXZU6ZMYfny5VxzzTW+EDUsMNbaDAWS9bTaORvv3sRjlyzg6B0XMJBadxMCRJYdBvp5PskPfqhb4oZ6x44dHsu64YYbuOGGG3wqnzf4Ypp6LLBDKbULQETeQXOnk1dP/tnAQz6oN2D4clgIqLPS+KKbbmLbhAnMnTtXO7Zype/qacXsvPJKop5/ngnFxYgIcVAbR8DLNpw8eTLPP/+8lxKGF8bcTAS1wZrM6d6WfYxaBWDQxnY54TN8oQj6AcWm/RJgnKeMIpIADKSuf7C2IrIRza3IU0qpj+o5dy4wF6BXr16sbOGfvaKioknn9l+4kKIcOGvtJyx3FfNH6cWKRTuJT4Hi2bNbVLcnevbsyXvvvcfZZ5/dLPmsJBhkXLp0KUOGDGHVqlVnHPNGvv4LF3IwW3F0VwE7RYhy9GfHuZf5/LoHQxs2RHPlS3TE0cdVzGmgHbUP7N2OOHZ6+TsTHZqKN4cUBagiilNuwV+CCafTeUZwmkBSWVnZ9GuolPJqA64CXjXt3wC8UE/e3wHPu6X10z8HAQVAYmN1jh49WrWUFStWNClf1sx5ygXqAKhHQFWDcoHKmjmvxXV7Yvv27apfv37K5XI1Sz4rCQYZb7zxRvXSSy95POaNfMZ1fxDUem05kl+uezC0YUM0V76smfPUBlDX623my3bLmjlP5X3yiTqxYYPat2GDUhs2KNeGDer49hKvy/YnR48etbT+vLy8M9KAjcrDM9UXk8W7gf6m/Tg9zRPXAXVmV5RSu/XPXcBK6s4fWIYx5hkLzEPr7vrD1j8xMRGXy0V+fr5Py23tfPnll1x44YU+L9e47g8Ao/Q0e41H46ROiOGDlIsR6YjLB2tt3Ms+3S4GB1HsBk4SxbGOPWjfMaLRc22ahi+GhjYAg0VkIJoCuA643j2TiAxFe65+Y0qLBU4opU6JSHdgAhAUfhaMsU3B92OeZkSEiy66iC+//JJBzfGlEsYUFRVx/Phxhg4d6vOyzWPd9hqPZpCeTv6333LZPS/guOmmunM2Pig7assWopOSaP/991T17avZ43ey1glda8LrHoFSqhq4E/gM2AK8p5TKFZFHRGSmKet1wDt698QgCdgoIpvRPM4+pUzWRlZi9i+kPKT7kgsvvNDjWLeNZ4zegD/8s5ivr9mfvr3Go3HWrFnDeeed13hGL+jYsWPTF5bZNBmfrCNQSi1VSp2tlEpUSj2upz2olFpsyvOwUupet/PWKKVSlVIj9M/XfCGPLyidPodjwDRqFy35xdY/I4Pe733HF/PfxiUOEiffaDug84QpONCqG25g+H++8Es7mf0OLQC+wl7j0RSKi4uprKzkrLPO8ms9ViqC+txQN5WJEyeyceNG/wjnJfbK4npInRDD++fN4ShROHw85mkme3U5s1a+wjCqOYaiv6vYdkDnAWPBUpyzkKHAbFXql3Yy+x0qAN6z/Q41CaM34G8vmh06dOD48ePUHVhwIyMDVqyom7ZihdcvDU1xQx2q2IqgPtLTOThrOBf8+g6f+Beqj9glC3AAH6EF4QB7ctITxiSuAn4NnIWf2snkd2jc0qXkXTTK9jvUBAIxLATayu82bdpw6tSp+jOdcw5cc02tMlixQts/5xyfyWF2Q71+/XrGjx/PyJEjOe+889i6dSugOam77rrrSEpK4kc/+lEdD6p33HEHY8aMITk5mYceql1WNWDAgBr3Jhs3bmxWpD1vsENVNsC6deu46qqr/FqHMQnZBjsoSkMY7WEERHdP9wdjx45l06ZNOJ1OIiJsC5WGWLNmDX/+858DUlfHjh0b9tQ5aRK895728L/jDvj737X9SU2LkNYYhhvqW265BYChQ4fy1VdfERkZybJly5g3bx4ffPABr732Gu3bt2fLli1kZWUxatSomjIef/xxunbtitPpZPLkyWRlZTF8+HCfyNcS7B5BA6xbt45x4zyujfMZZgd01R7SbTSM9nASOEd93bp1o1evXmzZssVvdbQGjh8/Tl5eHqNHjw5IfR06dGg8PsGkSZoSePRR7dMHSqA+N9Tl5eVcffXVpKSkcPfdd5ObmwvA6tWr+fGPfwzA8OHD6zzo33vvPUaNGsXIkSPJzc0lL89aGxlbEdTD7t27OXXqFAMHDvRrPcbk5AngUTRlYE9OnonRTvcB3+tpgWincePGsW7dOr/WEbLoE/hLOycy/MQJDnUc6n9Dh337aHPkBJVHj9Z4Ij2xY/eZnkhXrNB6Ag88oH26zxm0gPrcUD/wwANMmjSJnJwcPv7440bjCuTn5/OnP/2J5cuXk5WVxfTp02vOiYyMrIm7EMj4BLYiqId169YxduxYv09+GZOT5REJLARWSi97ctIDqRNiyJ5xH2/hoCP4bfLeHVsR1I8xgX/CtZ/f412UuKZyosJJzLGDtEUz7Y3iNO3K9tb1RGrMCbz3HjzySO0wkQ+UAZzphrq8vJx+/TTnd/Pnz6/JN2HCBP71r38B1MQtBjh69CgdOnQgJiaG/fv388knn9ScM2DAADZt2gTABx984BN5m4KtCOohEMNCQJ3JyTGzZ7Ms/WZ7ctIT6el0/dvPkZ7diXf5b/LenXHjxrF+/Xq/1hGqGBP41wFGAEZ/GzpElh1G0IwFjIdXrSdSnQ0b6s4JGHMGGzb4TA6zG+r09HTuu+8+Ro4cWSc+wS233EJFRQVJSUk8+OCDNUNnI0aMYOTIkQwdOpTrr7+eCRMm1Jzz0EMP8etf/5oxY8YEdF7Kniyuh3Xr1nHfffcFtM4xY8bw1VdfBbTOUGLjxo2MGTMmoIG+R4wYwfbt2zl+/DgdOnQIWL2hgHkVdqAMHQyPow16IvX0cjBpktfzBA25od62bVvN98ceewzQhpLeeecdj2WZew5mLrjggjplBQq7R+ABp9PJpk2bGDt2bEDrHTNmTI3pmc2ZGIogkERHR5OSklLTXbepZU9EPIcIzOp7gypq4yCretJtmo+tCMzok19fRPWnb0UFx3uMDOgq35EjR5Kfn09VVVVA6gs1rFAEZGRw1kEX/5s4C5c4KIkcYK/81imdPoe1aBP4xtu5vyfwq7t0q7Gw20dtdL/qLt38Vmc4YCsCE8bk10nXXh4lMJNfZjp16kSvXr1qzM9salFKsXHjxoCZKBpkry7nsvyNKFWGAxXweyKYSZ0Qw6dDLqRaOvvc42h9tO8YwckufXARxX7gBG042aWP7YnUS+w5AhPG5NdUahvGV+H2msrZZ5/Nxo0bSUtLC0h9oUJhYSHR0dH07ds3oPXGLlnAROBKU1qg74mgJT2dPWvXct0jr+C45hrfehytj969aQ8cO9aZ9nv3UtWzJ126dPF3ra0eu0dgwpjkcmDdKt+hQ4cGrWMqK9mwYUPgh4XQrn0/tJXf7uk28O233zJypDUhRNq3b8+JEycsqbu1YSsCE3si4qkisJNf7gwZMsRWBB6wZH4A7doL2pi0yy093Dl8+DBHjhwhMTHRkvptReA7bEVgonT6HPKAWwjc5Jc7iYmJ5OXlNexUKwyxShEYK5pfAr7W0+yV3xqZmZmMHDkSh8Oax0igFYHhhnrEiBGMGjWKNWvWAFBQUEC7du0YOXIkSUlJjB07to556Pz58+nRowdpaWmkpaVx4403BkzmpmLPEZhInRDD48UzOJm5HJc6yZ6IeEqnzwncKt+MDKIX7WTAyWo2t21L34iE2vrDcYFZRgbZq8uJ+e/bbHIV0WflNrIvvzGg7ZE6IYZs5uH6+B+8pA4zyHxNwhwrh4VAM+11Op1UVVXRpo374J3vMVxMAHz22Wfcd999NQGlEhMT+e677wDYtWsXV1xxBSdPnuSOO+4A4Nprr+WFF17wu4wtxSeqXESmishWEdkhIvd6OH6ziBwUkUx9u9V07CYR2a5vN/lCnhaTns7hiWcx/skH/ep6uj6yV5czcc3L/JgqFIG3Wgo2DCsucRVxH5DmKgl8e+grv3/w7TI2DxsW8HsimPn222/reNQMNCJC+/btG3dA5weOHj1KbGysx2ODBg3i2Wef5aWXXgqwVC3Ha0UgIhHAi2irzIcBs0VkmIes7yql0vTtVf3crsBDwDhgLPCQHsfYMjIzMy2z2DGsln4LGIMg4RybwGiPPsA9eppV7TFs2DDy8/MteegEK1YrAgjs8JDhfXTo0KHceuutPPDAA/XmHTVqVJ0Vwu+++27N0NAbb7wRCHGbhS+GhsYCO5RSuwBE5B1gFtAUv6qXAp8rpY7o536OZr250AdyNRullKWKwLBEicQOnA61v1vQ3Bi4pweSqKgoBg8eTG5uriVzFcHGsWPHKCkpYejQoZbU37lzZ5+X2WDUM+oODX3zzTfceOON5OTkNKmsYB8a8oUi6AcUm/ZL0N7w3blSRC4EtgF3K6WK6zm3n6dKRGQuMBegV69erFy5skXCVlRU1HvugQMHEBG2bNliiQ/6REcc/V1ac1RRqxB2O+LY2cLf6w8aakNfYrRHFVo7GN3XxtrDX/L17t2bd9991ycxcwPVhi2lMfmys7OJj4/n66+/rjePL4mJieHYsWM1+6WlpURERHDq1Cn27NnjE3fx5vIby5OSksLBgwfJz8/nxIkTuFyuOuevXr2as88+m2PHjlFZWcnp06ebVL4vqaysbPI9FqjJ4o+BhUqpUyJyG/Am8IPmFKCUehl4GWDMmDGqpSHcVq5cWW/4t48//pixY8cGLDycO9mX30Dc4icQ4M/ANUA8UHb5DZbJ5ImG2tCXGO1xDTAf6IpmsdNYe/hLvu+++46dO3f6pOxAtWFLaUy+rKwsJk6cGLDfsGXLFjp16lSzf+zYMTp16kTHjh0pKiqiffv2AfHWacjw/fff43K5SEhIoLi4GIfDUXOsoKCABx98kNtvv51OnTrRtm1boqKi6sgfCNq2bdvkyXxfKILdQH/TfpyeVoNSyuQjllcBw1HLbmCi27krfSBTi8jMzGTEiBFWVU/qhBhWHJrL4HWfsdpZSEfpzvkz5oathUrqhBi+On0XKz79C51RlFhssZOWlsZ//vMfS+oOGnRLrq8//gs/UMcpeeUT6yzb9u3jZIWTti7Fie++I5ooqrt009xN9O7t8+qMOQLQhn7efPPNGuWzc+dORo4cSWVlJZ06deJXv/oVV155ZQOlBRe+UAQbgMEiMhDtwX4dcL05g4j0UUrt1XdnAsa4y2fAE6YJ4kvQfFhZQmZmJldffbVV1UN6OjJ2JXET/8GIhx5it9NJqu7SNixJT8c5diXDj64ncvXqwLgwaIARI0awefNmXC6XZbbzVmNYckUDl6NZtvVb/ATZzCM1wLKcqHDSrmwvXdGGDqM4TZuyvZygD+39UJ/T6fSYPmDAAI9GBMZQ0M0338zNN9/sB4l8h9d3s1KqGrgT7aG+BXhPKZUrIo+IyEw9269EJFdENgO/Am7Wzz2CFqFxg749YkwcW4GVE8XuDB8+vCaiUThjdVBvM127dqVLly7k5+dbLYplxC5ZQBXwD2on86yy5DKC1PQCjEgRZwSpsWkSPpkjUEotBZa6pT1o+n4f9bzpK6VeB173hRzecPToUfbv38/gwYOtFgWwFYFBVlZWUFnppKWlkZmZaZlbBavp6yxiP9AD6y3bzMFo6g1SY9MkwrN/64GsrCxSUlICGh6uIRITEzl06BDl5eG5mMwgmHoEoCmCzZs3Wy2GZeyJiGcz4D5IYoXvJXMwGhe1/sHsIDXNx1YEOlZPFLvjcDhISUkhOzvbalEsw+l0kpubS0pKitWi1GD0CMKV0ulz+AL4lynNKt9LRpAaAQ5Q6yzSDlLTfGxFoEclW/2r+xj+8stBFYEq3IeHduzYQa9evfyyeKhFZGTQ9m/L2PTx0rCNVpY6IYZveibicvQIWDCa+jCC1JwmimPAUSLtIDUtJOydzhlWEO2w3grCneHDh4f1MESwDQtlry7n0uV/Jwk4SXDdKwEjPZ2C559n0va1OAYNstaSSw9SA/1ov3s3p4Ee/TyuR7VphLDvEcQuWYATeAFt8RYEj3+fcO8RZGVlBdVwXeySBUQA/wXa6WnBcq8EitLSUsrKyhgwYIDVotShXbt2fvcDZbihTk5OZsSIETzzzDO4XLVRKr7++mvGjh3L0KFDGTp0aB2fQg8//DD9+vUjLS2NlJQUFi9eDEBRURGTJk1i5MiRDB8+nKVLNZsbw7W14Z/o9ttvrylr6tSpjBgxguTkZG6//fZ6zVqbQ9j3CPo6izgMxGK9FYQ7w4cPJycnJ2zt1rOysoLKd7txT7TBugh2VpOTk0NycnLQ3Y+BUARmX0MHDhzg+uuv5+jRo/zhD39g3759XH/99Xz00UeMGjWKQ4cOcfHFF5OYmMj06dMBuPvuu7nnnnvYsmULF1xwAQcOHOCxxx7jmmuu4Y477iAvL49p06ZRUFAAaAYjnuaj3nvvPTp37oxSiquuuop///vfXHfddV79tuC6mhawJyKeHILDCsKdLl260LVr17C1Ww+2oSHjnnBR934JhnslUGRnZ5OaGnwDYdHR0VRVVdV9O/7mG3jySe3Tx/Ts2ZOXX36ZF154AaUUL774IjfffHONN9bu3bvzyCOP8NRTT51xblJSEpGRkRw6dAgR4ejRowCUl5c3KSa3MWdWXV3N6dOnEZFGzmicsFcEpdPnsAowO4YNpghU4To8VF5ezsGDBxk0aJDVotRgRCvLAV7R04LpXgkEOTk5QakIHA4H0dHRVFZWagnffAOTJ8MDD2ifflAGgwYNwul0cuDAAXJzcxk9enSd4yNHjiQ3N/eM89atW4fD4aBHjx48/PDDvP3228TFxTFt2jSef/75mnz5+fmMHDmSiy66iK+++qpOGZdeeik9e/akU6dOXHXVVV7/lrBXBKkTYljTZyjV0t1yK4g66NZMA5Z8yeYrrggfCxX9d3/RdQjJx4+zNzoxaH536oQYcmbOI8IRx71AsSM+OO6VABKsPQJwGx5auRJOnwanU/sMAk+vzz33HGlpadxzzz28++67iAgLFy7k5ptvpqSkhKVLl3LDDTfgcrno06cPRUVFfPfddzz77LM1w1AGn332GXv37uXUqVN88cUXXssW9nMEpKdT/MYbXPTZFzhSUy33Z2NgWDPNAvYRPhYqxu/eBvyOIPvd6em6DI/TtndvZONqUuOC4W4JDEopsrOzg2pdh5k6imDiRIiK0pRAVJS272N27dpFREQEPXv2ZNiwYWzatIlZs2bVHM/MzCQ5Oblm35gjMPPaa6/x6aefAjB+/HgqKys5dOgQPXv2JDo6GoDRo0eTmJjItm3b6qyyb9u2LbNmzWLRokVcfPHFXv2WsO8RnDp1ioKCAoYMGWK1KHUwonP9AM2LH4SHhYrxu2cAP9TTgvF3p6Sk1BuUpLVSUlJC27Zt6dGjh9WieKRO2Mrx42H5cnj0Ue1z/Hif1nXw4EFuv/127rzzTkSEX/ziF8yfP79mcvfw4cM8+OCDpDfikTU+Pp7ly5cDmqvtyspKevTowcGDB2vmO3bt2sX27dsZNGgQFRUV7N2r+e+srq5myZIlPgkOFPY9gq1btzJo0CCiooJrWbo5Olck1KygbO0WKsbvcxDcljmGIpg6darVogSMYB4WAg+WQ+PH+1QBGG6oq6qqiIyM5IYbbuA3v/kNAH369OHtt9/mZz/7GceOHUMpxe23386MGTMaLPOZZ57hZz/7Gc899xwiwvz58xERvvzySx588EHatGmDw+HgpZdeomvXruzfv5+ZM2dy6tQpXC4XkyZNqmNa2lLCXhHk5OQEZVd3T0Q8cc5CBKhGeyiKkW6taH5lT0Q8/ZyFnEYLTymm9GD63SkpKQGLzhUsBLsiaNOmDS6Xi6qqKtq0aePz8huz17/wwgvZsGFDzb45ItnDDz/s8Zxhw4axevXqM9KvvPJKj/EMevXqVacOXxH2Q0PBqggMCxWA99F8fIeDhUrp9DnsBa6kVgkE4+9OTk4Ou6GhYFcEIhKQ9QStEbtHkJPDT37yE6vFOIPUCTFkM4/YJQvY7ixkn3Qmbsadrd5CJXVCDK8cnE3ZN//BxWn2RMRbGpWsPpKTk9myZUvrX+ynRySLXbKAbGchsxcuJ/ujHdZEJGuIffs4UeEkuuIEJ7dto62fo5W1NnyiCERkKvAXtN78q0qpp9yO/wa4FW2U4yDwU6VUoX7MCRguNouUUjMJIMHaIzBbqKR8+CHrX3+d1EWPWyxUAEhP50T0Xxg1MhbHiy8GjRWXO507d6Z79+7k5+e36tgEhhWXEy204GTXPqItsuJSStW7eMqIVtZF3/d3tLJgRynVeCYTXr/KiEgE8CJwGTAMmC0iw9yyfQeMUUoNRxvpMBuFn1RKpelbQJVARUUF+/btC6pFS55ITk72uDCltZKbm1vH7C5YCQfLIcOKywE8BLTFGiuutm3bcvjw4XofcEa0si76BuEbrUwpxeHDh2nbtm2Tz/FFj2AssEMptQtARN4BZgF5JsFWmPKvBX7sg3q9Ji8vj6FDhwZNMJr6SExMZN++fRw/fpwOHTo0fkKIk5OTw5w5wTUn4AlDEZhtx1sbZmutyHrSA0FcXBwlJSUcPHgQgMrKyjoPOnVoD576CgqQLb6fOG4K7jIGkrZt2xLXjDUuvlAE/YBi034JMK6B/LcAn5j224rIRrRho6eUUh95OklE5gJzQZs5X9nClYIVFRU15y5dupTu3bu3uCx/YJbPTN++fXn77beDYr1DfTL6AqUUWVlZlJWV+eQa+xOHw8EXX3zBhAkTmn1uoGRsKYZ8iY44+ruKcaI9VI1Xpt2OOHZaKH9FRQUdO3as2U+cPpf+Lu0xVIUmpwModvRn5/K3gkLGQFNYWNj0zEoprzbgKrR5AWP/BuCFevL+GK1HEG1K66d/DgIKgMTG6hw9erRqKStWrKj5fvfdd6unn366xWX5A7N8Zq6//no1f/78wApTD/XJ6AuKi4tVz549vSrDn/KZ2bRpk0pJSWnRuYGSsaUY8mXNnKdcoOaBygSlQLlAZc2cFxTyGRhyKlCvgvomCOQMxmsMbFQenqm+6BHsBvqb9uP0tDqIyBTgfuAipdQpkyLarX/uEpGVwEhgpw/k8kj/hQvJfu7zGiuINEdPsleXB58VhBvhMk8QKvMDZGSw99BwcnN3IFJFQkIbXp2zgikxG4L6PmouhvXa+4v/yFVUURKREJRWXGYru83OQgoklg4z7gg6OYMVXyiCDcBgERmIpgCuA643ZxCRkcA/gKlKqQOm9FjghFLqlIh0ByZQdyLZ5xTlwMQ1T9S4b7jEdYBeweLLpgGSk5N5+eWXrRbD74SKIlhWfg4X/nEWV3CaF4iiTWEsUU9Us2zeIqZYLZwvSU9naFUVRZ2fJan0qDb2bLVMnjBZ2SX/4x+sX7+e1NfCwMrOR3htNaSUqgbuRFvztAV4TymVKyKPiIhhBfRHoCPwbxHJFJHFenoSsFFENgMr0OYI8vAjZ639BEEb7/wt0Ivg9GXjTjj1CILSnNeNxf/YQxSVLMBFT6AbpURRyeJ/7LFaNJ+zfft2+vfvb9nEZ3MJl/+KL/HJOgKl1FJgqVvag6bvHl+SlFJrILAv4v1cJTXfrbSCaC4DBw7k4MGDlk9A+Zvc3NygXODnzm8O3080VTipfZuKporfHL4fCH6Lp+aQl5cXEr00g2HDhpGXl9fgugOburTiJZGe2e3QOrbVhFaUqYiICIYMGUJenl87TJailAqZh0482ouDQruX3NNbE7m5uQwb5r40KHjp2rUrHTp0oKSkpPHMNkAYKoId516GQgtWv0ZPC0ZfNp5o7V3e4uJiOnbsSGxsrNWiNMqpzj0BzczteQ/prYlQUc5mjF6BTdMIO0UQnwI5M+fxH9pyDIInIlkTaO2KIFQmigHaTZuEMzKaOOA+4DTgjIym3bRJFkvme0KtRwCt/7/ia8JOERTPnk3qosfZ2SeWlMJC4qoLNB8+wW7yl5FBhw+/ZeMzL+ISR+sKXamHp1w9/XqGLVsWGr9t4UIi5r9G24QE4oEdffoQMf81WLjQasl8SlVVFTt37gyKhYzNwe4RNI+wUwQApaWlVFRU0L9//8YzBwnZq8uZtv7fxFCJA0Wcs5CUxU+QvbrcatG8xnBs1laVMQdC57fNmQMFBQybNYu8v/5V229l7Nixg7i4ONq1a2e1KM3CVgTNIywVwZYtW0hKSgopi4LYJQsYCCyEmjgFoWD22hQMx2b3AOfoaaH021rzQycU5wegdmhINdMLZ7gSloogLy8v5MY8+zqLcABRUMe5VrCbvTaFvs4iFJo5byj+ttauCELtvwLQrVs32rZty549rW9dhz+wFUGIYJi3OgGXh/RQZk9EPPvRnIW5p4cCrVkRhNIEvjv2hHHTCUtFEIpWEEboyneBT/W0UDF7bYzS6XPIBMzT9aH024YOHcr27duprq5uPHOIEYovTQatWUH7mrBUBKF4c6dOiCFn5jyqHD14gdAye22M1AkxfJE8hePSCRcScr+tffv29OnTh127dlktim/IyEDdv5CCiAS2Z2fTccys4Lficicjg4gdkTzwQC4OBwwYAMvuXxFavyGAhF3M4uPHj3PkyBESEhKsFqV56E612m6/mccuuYS4/PzgdP7VEtLTKd2+nbF3Xonj9tuDNjxlQxhvn2effbbVonhN9upyJq55mSLgUWCwqxgVAo4ZzSwrP4epn02ngtO8wquUtlangD4i7HoEhYWFDB06NGQDjg8cOLAmWllrIhR7aWaSk5NbzTCEYcXVD7hbTwslKy7QnAKOpIrncSK0bqeAviA0n4ZeUFhYGLKTXwCRkZGcffbZfP/991aL4jMMH0OhrAiGDRvWaiYmDWstB7URyczpocBvDt9Pb6rrWNnVOgW0cSfsFEFBQUFIP3BAe+hs2bLFajF8xr59+2jTpg3du3e3WpQW05omJg1rrSpC10LNcP5XTd3f0BqdAvqCsFMEhYWFIa8IkpKSWs1DB0J/WAg0y6GtW7fidDobzxzkGBZqPwP26mmhZMUFtc7/nkeLjeueblOXsFMEraVHYCuC4KJTp0706NGDgoICq0XxmtQJMSwffyv/RuhMaFqoGU4B2wFG6PrW6hTQF/hEEYjIVBHZKiI7ROReD8ejReRd/fg6ERlgOnafnr5VRC71hTxnoDs12xoRz9H9+2kzZHLomcOZsBVBkKHfX4OKDpBz1lmh4TSvIdLT2f+LifQekEAnpULHMaMZ3SngsJ49yQNISAhdp4D6/VUSOcBvDie9VgQiEgG8CFwGDANmi4j7v/oWoFQpdRbwHPC0fu4wtBjHycBU4G96eT7FcGrmchXzFJDgKgoNp2b1cNZZZ1FUVERlZaXVoviELVu2hLQiMO6vH1FJF0LIaV4DtIYhVObMYdjmzeR16wYFBSHrFNC4v+KchX5zOOmLHsFYYIdSapdS6jTwDjDLLc8s4E39+/vAZNE8vs0C3lFKnVJK5QM79PJ8imEONxj4hZ4WauZwZqKiohg0aBDbtm2zWhSfkJeXR1JSktVitBjj/vo5cL6eFsr3F7QSRQD06tULp9PJwYMHrRalxRj3l6J24tvX95cvFpT1A4pN+yXAuPryKKWqRaQc6Kanr3U7t5+nSkRkLjAXtIu7cuXKJgt4ockczqz5+jqLmlVOIKioqGiSTD169OD999/nyJEj/hfKjabK2BTKyso4efIk33//PVu3bvVJmb6UrykY91cEZzrNq0+OQMvYXHbs2MHo0aODVsbmtF+/fv1YsGABaWlpfpXJHV9d4wtNZrt+e34ppbzagKuAV037NwAvuOXJAeJM+zuB7mgRI39sSn8NuKqxOkePHq2aQ3FEglJwxlYckdCscgLBihUrmpTvgQceUA888IB/hamHpsrYFFatWqXOO+88n5WnlG/lawrG/eUCdVr/bOz+CrSMzWXIkCHqm2++sVqMemlO+916663qb3/7m/+EqQdfXWPj/qrSN2+eX8BG5eGZ6ouhod2AOcJLnJ7mMY+IRAIxwOEmnus1hjmcmVAzh3OntawlCPmJYmrvLwH+BOwjtO8vl8tFYWFhSA/XmQl14wrj/noDWKGn+fr+8oUi2AAMFpGBIhKFNvm72C3PYuAm/ftVwBe6dloMXKdbFQ1EG8Zf7wOZ6mA4bCuJSAhJp2aeCPWb26A1KALz/fUFsMzRM6Tvr+LiYjp27EhMTGjK706o/1eM+2sR7TmIf8x5vZ4jUNqY/53AZ2jDpK8rpXJF5BG0bshitCGff4rIDuAImrJAz/cekIe2CPAXSinfr8jRHbbB46xcuZKJEyeGnFOzOmRkcPrLw+zMy+OUCAcjEiidPke7MULBxC8jg+zV5cQuWUCes5Cxjp5krzwUOvK7Y7q/ku+6iwP9+5P6f/9nsVAtJy8vjwEDBlgths8IdUVg3F/5yR+RsnAhccOH+/z55RPvo0qppcBSt7QHTd8rgavrOfdx4HFfyBEuZK8uZ/SSDGYA5Wjmiv1CyDukYQ4nwA+Ai10H6BlC8jfEsGHDWLt2beMZg5i8vLzQ887bAHFxcTVeh7t27Wq1OC3i9OnT7Nq1iyFDhvil/LBbWdwaMMzJ3kabcYfQMlc0m8OlAz0JLfkbIuTfPml9ikBESEpKCuk5tR07dhAfH090dLRfyrcVQQhieIGM5ExzslDALKc5TnGoyN8Qhh8oFcJB01vb0BCEvoL291yarQhCEMMLpEKLYeyeHuyY4y+HovwN0a1bN9q3b8/u3T43fgsISncJHh8f+tfCjK0IGsZWBCGIYU62E20hBoSWuaIh/wvAaj0tlORvjFB+6Ozdu5d27dq1Goshg1C+JmArAhsPGOZkDkd/7gUKHPEhZa5oyP8f2nKU0PRu2RAh+dDRHZut6j+SpP37SZx8Y2g7zjOTkYHjuSXk/G+535y2+Rt/K4Kwi1ncKjCZK/ZNTOTU0qWk+smawC/o8u+Ke5PU1auJS0gIbXNeN4YNG0ZmZqbVYjQLw5JrC3AX0N9VTFwrseTKXl3Oxcv/zmDgNKFnZVddXc327dv9ZjEEdo8g5ElOTg7JEIllZWWUl5fTv3//xjOHGKHYIzAsuX4IzNDTWoslV+ySBUQCnwKGzU0o/bZdu3bRt29f2rdv77c6bEUQ4oTiQwc019NJSUk4HK3vFjSuSShZDvVtwDFjqGP8hjac6RQwFAjE6vvW9y8MM0I1aHprcC1RHz169MDhcLB//36rRWkyeyLiUWhDJ8otPdQxfoOL0LRSy83NJTk52a912IogxElOTg7JHkFubm6rVQQiEnLXpXT6HPYCV1L71txaLLkMK7W11IatDKXfZvcIbBpl6NChbNu2jerqaqtFaRZ5eXl+f8uxklDrqaVOiGHJ+NmUEY0LodjRv9VYchlWauLoy0OEnpVaIBSBbTUU4nTo0IE+ffqwa9cuzj77bKvFaTKttkegO9Tr+/G75KpSSu5+JjQcAqancyL6L4waGYvjxRfZqTtnbBXoVmou16Mc7tSJznuziOvc2WqpGka/jzr/9222uoroNO4Ksi+/wW/3kd0jaAWE2tvn0aNHKS0tbVX+bAwMM8ypqpRRhFb84kCMRVuJw+Fg6NChITFkZ9xHEa4iHgaGuIr9eh/ZiqAVEGrj0Xl5eQwdOrRVWgwZZpijgZ/qaaFiqtjaFQGEjrm1cR/1AQyH5v68j1rfPzEMCbUeQWueHzBMEgVt3FW5pQcrSilbEQQR5vsowkO6r7EVQSsg1HoErXZ+gFqTREGLtORySw9W9uzZQ3R0NN27d288cwgTKorAuF+qqL2HzOm+xitFICJdReRzEdmuf8Z6yJMmIt+ISK6IZInItaZj80UkX0Qy9S3NG3nCFcNyyOn0fXA3f9CaewTm+NhLgA8IDVPFcOgNgKYIcnJyrBajUYz76GfAXj3Nn/eRtz2Ce4HlSqnBwHJ9350TwI1KqWRgKvBnEeliOv5bpVSavmV6KU/4kZFB/pwn6XbyNDsiI4PXoZbu1KwkcgC5n35K7KzbglNOLzHHLy4GFknHkDBVzMnJCQtFkJCQQHl5OWVlZVaL0iCpE2LIvPxe/o0Qg/9NXr01H50FTNS/vwmsBH5nzqCU2mb6vkdEDgA9gDIv67ah1rrgGrRVk8HqUMuQ8wTwE2C8aw8ShHJ6jckhYOqqVfzrvvtIXRT8kVhzc3M555xzrBbD7zgcjpo5tQkTJlgtTv2kp9Nu5vfEff8+HbdvpyP41TGjeOMPRUTKlFJd9O8ClBr79eQfi6YwkpVSLhGZD4wHTqH3KJRSp+o5dy4wF6BXr16j33nnnRbJXFFRQceOHVt0biBornyJk2+kv6uY09SNWFbs6M/O5W81cGbLaUkbGnI60bq4xhuIP+QMlmtcXl7OnDlz+Pjjj9H+HrUEi4wGP//5z7n99tsZPnw4EHzyueONfE8//TTDhg1jxowZjWf2Am/bcNWqVSxbtoxHH33UZzJNmjRpk1JqzBkHlFINbsAyIMfDNgsoc8tb2kA5fYCtwLluaYLmFPBN4MHG5FFKMXr0aNVSVqxY0eJzA0Fz5XMiSoFyglKmzYn4R0DVsjYMpJzBdI179+6tioqKzkgPJhldLpfq1KmTOnz4cE1aMMnnCW/k++Mf/6h+9atf+U6YevC2DR966CF1//33+0YYHWCj8vBMbXSOQCk1RSmV4mFbBOwXkT4A+ucBT2WISGe0ubP7lVJrTWXv1eU7BbwBjG1MHpu6mK0IqutJDwYMeaoJTcdfLSUlJSXoJyeLi4vp0KEDXbt2tVqUgBAqlkM5OTmkpKQEpC5vJ4sXAzfp328CFrlnEJEo4EPgLaXU+27HDCViuEIP7n9MEGJYF1QBf0B70AajlYoh5/8BO/S0YJTT14SCIsjNzQ3YAycYsBXBmXg7WfwU8J6I3AIUAtcAiMgY4Hal1K162oVANxG5WT/vZqVZCC0QkR5ow0OZwO1eyhN2pE6IIZt5xC5ZwHvOQi5y9KHX5T8JOisVQ853Fj/Fb3FREpFQ64OnFZOcnMxXX31ltRie0f3ZrP74bwxTZZREDqi9JmNbaec8I4Oyr8uo2LefQyJUmu/DIPIFVVlZSWFhYcD8h3mlCJRSh4HJHtI3Arfq398G3q7n/B94U78NdaxUUq68koNXXcWU2bMtFsoD6en0OnCA6i//Rv8jRxCRVhWesj5SUlJ46aWXrBbDI4Yl1yJgJnUtzlrrIG326nJSP36Sa4FjwMAgtbLbunUriYmJREVFBaQ+e2VxKyI1NTWohyGys7NJTU09w4KmNTNs2DC2bNkSlIv9DH829wCG4Wio+EVqKcZvfhEwXB4G428O5LAQ2IqgVZGamkp2drbVYtRLTk4OqanB9N7lfzp37kyPHj3Iz8+3WpQz6OsswoU2LBCKIRxbgjlsZTCH5Az0Aj9bEbQigl0RGD2CcCNYJ4z3RMSzB83QwD29tWL8NkVwW9nZPQKbFpOYmMiBAwc4duyY1aJ4xFYEwUXp9DmsBx4wpbV2Sy7Deq0ceALt9wbjb7YVgU2LiYiIICkpKSgfOi6XK2wcm7kTrOaKqRNiWDbkAk5JZ1xIyIVwbAmGL6gTEQn8Hdjg6Bdcv3nBAo7Fx7O/oIBBU6bAgsDMXdihKlsZxtvn+PHjrRalDvn5+XTt2pUuXbpYLUpgycggeulWvlv1Aa53HOyJiKd0+hz69z4EVoeCTE9n/7p1XPOHl3Fcey1xmPzZrFxpnVz+xGRlN/zSSznwy19y+eWXWyyUzuzZON//kLzqUyQBEUVFOG++hYj//hcWLvRr1XaPoJURrPME4ToslL26nMtXvU5vqnChakJXFgVJp23z5s2MGDHCajEsYfjw4WRlZVktRg0nl64govoUB6h14xxRfYqTS1f4vW5bEbQybEUQXMQuWUB74BNqI00JcNbaT6wTSqeiooK9e/dy1llnWS2KJQSbIog+qnnouRS40kO6P7EVQSvDUATKC6+y/iBcFYFhlhhFXRPNfq4SS+Qxk5OTQ1JSEpGR4TlCHGyKoAjNcimCug9mI92f2IqgldG7d28A9u3bZ7EkdQnHNQRQa5booq6zvd0O69dVZ2Vl1bidDkeSkpLIz8+nsrLSalEAeLbb41QSySlqY12fog3PdvN/PAtbEbQyRCTohodOnTpFfn4+Q4YMsVqUgGOYK65H87MO2p98x7mXWSeUTrgrgqioKAYPHhw08b5n3taXfKK5GkEBh4nlNG2ZeVtfv9dtK4LWhB4OcsCqTWRfeqn1YSt1eVa2H8igykoOdhjSKsNTNoRhrhjl6Me9QLEjnpyZ84gPAmef4a4IQBse2rx5s9ViADAlZgPvX30fX7S9hEhRjE44wrp5i5gSs8HvdYfn4GArxXAiNgtt1aTVYSsNeUqA3weBPJagmysq9RiqZ08is9aS2qcPK1euJNFCsZRSZGVlheVwnZmgmidIT4dHH+XXg9J46ikjcZK++Re7R9CKMBxqzUAL7gDWOtQy5JkMXBsE8liJiDBixAgyMzOtFgXQgtG0b9+eHj16WC2KpYwYMSJ4FAGQmZlJWlpawOu1FUErwrBQcaB19ZRbulXyuFtBBJuDr0CRlpYWNIognNcPmDGGhoLFym7z5s2hpwhEpKuIfC4i2/XP2HryOUUkU98Wm9IHisg6EdkhIu/q0cxsWohhoSLURiozp1shj4I6VhBWymM1waQI7PkBjd69eyMiQWFld/ToUfbu3cvgwYMDXre3PYJ7geVKqcHAcmoXxLlzUimVpm8zTelPA88ppc4CSoFbvJQnrDEsVAA+QFvEZKVDrdLpcyhCC1Fn2NAHo4OvQJGWlmbtxKQ+eV8SOYDNv/89cX98Lewm7+uQkUHOD3/PkEMVZPbta7lxRVZWFikpKURERDSe2cd4qwhmUWsV9ya1Q9ONoscp/gFgxDFu1vk2Z2JYqJREJFAMfCCdLHWolTohho/OuZITtA0bp2YNMWTIEIqKijh+/Lgl9RuT93HOQs4FpqnDpCx+guzV5ZbIYzVGe1xFJR2gxv2HVe1h1fwAgHgzNiYiZUqpLvp3AUqNfbd81WgxiauBp5RSH4lId2Ct3htARPoDnyilPBrWichcYC5Ar169Rr/zzjstkrmiooKOHTu26NxA4Cv5vv32W9544w2ef/55H0hVl+bI+MYbb+ByubjllsB19oL5Gs+dO5e77rqL+Pj4gMuYOPlG+ruKUWiL2yLQemrFjv7sXP5WnbzB3IbgG/mM9qhGawfjPdxTe7SE5sr4pz/9icGDBzNr1iyv666PSZMmbVJKjTnjgFKqwQ1YBuR42GYBZW55S+spo5/+OQgoABKB7sAOU57+QE5j8iilGD16tGopK1asaPG5gcBX8h05ckR17NhROZ1On5RnpjkyXn755eqDDz7wuQwNEczX+Kc//an6+9//bomMTkQpUC5QyrQ5kTPyBnMbKuUb+ZrTHi2huTKOGTNGrV692id11wewUXl4pjY6NKSUmqKUSvGwLQL2i0gfAP3To3ckpdRu/XMXsBIYCRwGuoiIsZYhDtjdmDw2TSM2NpYePXqwfft2S+X49ttvGTlypKUyBBNWzhMYk/TV1HV3Ea6T9+bfXYW1xhXV1dXk5uZatq7D2zmCxcBN+vebgEXuGUQkVkSi9e/dgQlAnq6dVgBXNXS+TcsZOXIk3377rWX179+/nxMnTjBgwADLZAg2rLQcMowJ/ggYa1XDefLeaA8BXgaysa49tm3bRlxcHJ06dQp43eC9IngKuFhEtgNT9H1EZIyIvKrnSQI2ishmtAf/U0opw7nH74DfiMgOoBvwmpfy2JgYNWqUpYrgu+++Y9SoUWjTRzZkZBDx5EdkrV3HhEmTAm6lYhgTLKANAmE/eW82rsgGPpLYwLeHbsm1POUihm/fbpnlklcuJpRSh9EWjrqnbwRu1b+vAc8eBfShorHeyGBTP6NGjeKZZ56xrH57WKgu2avLGf/Js0wFyrDA5UZ6OmedPEl+t+dIKz1GdHQ01vtAtRBTtLJzXnuNVatWkfqW/z19mjEsl1YBv8A6Nyz2yuJWjDE0pCxaNWn0CGw0DJcb/0Lr/kLgXW5s3ryZpKQkoqOjA1ZnKDBmzBg2btwY8HqNe+JW4CI9zQo3LLYiaMX07t2btm3bUlhYaEn9do+gLoZrjTZY53Jj48aNjBlzpvVguDNs2DAKCws5duxYQOvt6yxCoQ3NWOmGxVYErZxRo0bx3XffBbzesrIy9u/fz9lnnx3wuoMVwxpFoVnuuKcHAlsReKZNmzYMHz484P+VPRHxlKBZLbmnBxJbEbRmMjLot72MlVf+BJc4AjMRpU9+fd5tKCOOH2dvdGJ4uzEwYVipnAAeo9YfVCCtVGxFUD9WDA+VTp/DSrT7wcAKyyVbEbRisleXc+m21USqchyogCyhNya/ql37+R3WL9sPJgwrlfKIBN4BvnD0CaiVSkVFBfn5+SQnJwekvlDDCkWQOiGGTweOQaSLpW5Y7MA0rZjYJQsYD5iDItZORPnHOsKY/LoCbSw8EHWGDCYrlYRLL6Xgyiu5ZO7cgFWfmZlJSkoKUVG2k19PjBkzhscfD/A9mp7Ojg8+4Lb5i3BceCFxYIkll90jaMX0dRbRm9oHsjndn3WCHYOgMZKSkli3bl1A67SHhRpm6NCh7N27l7KysoDVeerUKXJychg9enTA6vSErQhaMXsi4hE0dwIut3R/1lkOnMaOQdAQtiIIPiIiIkhLS2PTpk0BqzMzM5PBgwfToUOHgNXpCVsRtGKMycl30WITgP8nokqnz+FLtCXjdgyC+klMTCQ/P9//5oqmGAQbFywg7tb77cn7+sjIYMCeUyy/+KqAGVesW7eOcePG+a38pmIrglaMMTnZztGLRwmMS4HUCTEsGnwekRJjxyBogMjISNLS0vw+OWlM3sc6C7kWmOTaa0/e10P26nIu3bUBUWUBM64IFkVgTxa3ZvTJycQT93Nzjx50O7SFuHbt/F7njqVLue/5d3Fceqllk1+hwNixY1m3bh2TJk3yWx3G5H1b4AFq//D25P2ZxC5ZwAXAlaY0fxs6rF+/nnnz5vml7OZg9wjCgPbt25OcnBwQ07iqqio2btwYFG85wc64ceP8Pk9gTNILdd/67Mn7M+nrLKI/gTOuOHz4MPv372fo0KF+Kb852IogTDjvvPNYs2aN3+vJzMxk4MCBdOnSxe91hTqGIvCnLyhjkv40gTMYCFX2RMTjQFvoF4i2Wr9+PWPGjLEkRrE7tiIIEwKlCNasWcOECRP8Xk+o03/hQo79+hVO791PkcN/E5Ol0+dQDcxAW9EM9uR9fRjGFe8DS/Q0n7eVafJ+7bRpDFu5KSgm721FECYYisDfnkjXrFnDeeed59c6WgNFOZD68ZPcjIuj+G8FduqEGD648KcU0ob29uR9gxjGFZ0dvXkA/xhXGJP3cc5CBgBXq6NBMXlvTxaHCXFxcbRv354dO3YwePBgv9WzZs2awK/ODEHOWvsJAjxJ7duYXyYm09PZG/VnJg+7Bcff/25P3jeEblwxtOph5nTtSoei74iLjfVpFcbkvQJuQLv2wbDy3qsegYh0FZHPRWS7/nlGq4nIJBHJNG2VIvJD/dh8Eck3HUvzRh6bhjnvvPNYvXq138ovKiri9OnTJCYm+q2O1kI/VwmgrcA2jxD7Y2Jy1apVXHjhhT4vt7XSpk0bzj33XL7++mufl22+vmbX01ZP3ns7NHQvsFwpNRhYru/XQSm1QimVppRKA36ANlT5P1OW3xrHlVKZXspjUx8ZGQzIOcznP/2lbxfLmMY8v05IYOSBY+T88PeWj3kGO7sd2nu54N/A6S6Xi6+++spWBM3koosu4ssvv/R5ucb1rUZb8e+ebhXeKoJZwJv69zeBHzaS/yrgE6XUiUby2fiY7NXlXJnzOagKny6WMY95dgJu4GRQjHkGOzvOvawmcPpbwNf4ZxJ3y5YtdOnShX79+vm03NbOhRdeyKpVq3xerjEhPQ/I0dOCYfJevJk8FJEypVQX/bsApcZ+Pfm/AJ5VSv1X358PjAdOofcolFKn6jl3LjAXoFevXqPfeeedFslcUVFBx44dW3RuIPCXfImTb6SPq5jTQDtq3T8UO/qzc/lbzSrLLGPi5Bvp7yoGtLccQRvqaEm5viLYrzFArzffZN+2KM5a+wlvu4rZTkduOO964lOgePZsn9Xz0UcfsXXrVn73u98167xgb0N/y3f69GlmzZrFBx98QPv27VtUhicZ+y9cSH62iyu/eY2tKKoc/dlx7mU+v+71MWnSpE1KqTMdTimlGtyAZWjKy32bBZS55S1toJw+wEGgjVuaANFoPYoHG5NHKcXo0aNVS1mxYkWLzw0E/pLPiSgFqhqUMm1OpNllmWU0ynXp5bm8KNdXBPs1VqqujOvXr1fDhg3zSz3XXnuteuONN5p9XrC3YSDku/DCC9Wnn37a4vPrk3HNmjVqxIgRLS7XG4CNysMztdGhIaXUFKVUiodtEbBfRPoA6J8HGijqGuBDpVRNVDal1F5dvlPAG8DYxuSxaRnGGKQL345NGuc7qe0R+KLccGLUqFHs3buXvXv3+q7QBQtQCQmsevddLrr/flgQ2GDorYGLunbly2uuAYcDBgzwWRsuX76cyZMn+6QsX+HtHMFi4Cb9+03AogbyzgYWmhNMSkTQ5hdyzjzNxhcYY5OFwLNo45K+GJs0yv0TYDhLCIYxz1AiIiKCiRMnsnz5ct8UOHs2zptvYUdREZHAgD17cN58CwRg6KHVMHs2ExYvYdXRo1oft7DQZ224bNkypkyZ4gMhfYe3iuAp4GIR2Q5M0fcRkTEi8qqRSUQGAP0B99mXBSKSDWQD3akbutPGhxiLZaId8fwF+MrR1yeLZVInxJA94z7+QgTdCIyH09bIlClTfKYITi5dQUT1KbagKWgBIqpPcXLpCp+UHw6cXLqC811VRFEbWN4XbXj8+HE2btzIBRdc4LWMvsSrBWVKqcPAGX0cpdRG4FbTfgFwhtmCUuoH3tRv0wxMYRKnzZ3Lt8OGcdddd/mkXKZm0T73XYbs2IGI2AuWWsCUKVN48sknUUqhdZBbTvRRbYT2Uuo6UDPSbRon+ugBHMBS6q7z8LYNv/76a0aNGhV0E/G2i4kwZNq0aSxdutRn5S1dupRp06Z5/QALWzIyqLxnPs6SvWz1gd+hIuJxcma40CLseZumYrRVFD5oQ9Nam8+nTuWcr7OCwr+QGVsRhCGTJ0/mm2++oaKiwiflGYrApmVkry4n9eMn+TlOyvDe79Cz3R7nGyKoNqWdog3PdrNdfzSVZ7s9zim9P1WNNu/V0jY0r7VJAG5S5UG31sZWBGFIp06dGDduHF988YXXZZWVlZGZmcnEiRO9FyxMMfzP3Auco6fV+p9pPjNv68t8HLxFO1zAYWI5TVtm3tbXNwKHATNv68tp2lJKLH8F1tKpxW1o9i90B5CKd9fXH9iKIEzx1fDQ559/zgUXXEA7f0c+a8UYfmYMv0PKLb25TOq0jv906Mgf+m4mUhSjE46wbt4ipsRs8Im84cCUmA2sm7eI0QlH+D/mMbXzz1vchsZ1VGiTsuKWHgzYiiAcycjgrP9u5eN/vIpTpNlj0v0XLqwZ81xyzTWM/2Rt0I15hhLGmguhrg+alq7F+Ob884kbFMfu3YNxuaCgAKY8Pkmb2LdpGunpTHl8EgUFsGnTlfTs+QGTH5vYojYMheBAtiIIQ7JXl3P5ipc5FycHaf6YdFEOpCx+gr7OQgYDP1FHgm7MM5Qw1mIAZAL3491ajP/85z9cccUVvhHOhpEjR1JVVUVOTsuWOZVOn8MeYCbUzNsE21obWxGEIbFLFuBAW93XU09rzpil4UtfAb9DswsOtjHPUMJY41ESkcBZwEsIX0+9q/lrMfTVxP957jmufPllezWxjxARrkhK4j8XXNCiVcapE2J4LnkyXaQDkUEaHMhWBGGIMTbZBu0GaO6YtOFLH+yA6D4hPZ3URY8TV11AF6WYdt21ZM8Y3LxhCH018XdFRbQBUvbutVcT+4rZs5n1+XI+KC9v2Srj9HSWtTnM7csW41Au4qoLSF30eFAN1dmKIAwxj02aA3U3dcxytyOOY2guY82+a4NpzDOUueGGG/jnP//ZrHOM1cQbgL9iryb2JSeXruACZxXxwCE9rTltm5OTw6FDh4Lass5WBGGIMSYtwHdowzvNGbPcce5lvIrmT8SwgAi2Mc9Q5pLNm9n+XTZfRfRrchCh6KMHcAE3AlPd0m28w1hl/B+gq1t6vWRkoO5fSEnkAP6ZmsqM3UfJ/dEDQWtQYSuCMMQ8Jp0EvI6DTyf/vMljlnHJir906MpIRy9cQTrmGcpsWVvBnFPH+d61p8lBhIqIJw9tuE/c0m28w2hD96HUhto2e3U5E9e8TF9nIbHA/wVJkPr6sBVBOGIak+749NPMGDSGj794G9fv7q3/7dO0TH7nK6/Q4fgxEqf/FMfTTwXlmGcoE7tkAXcAP6b2odPYZPwzXR+t00MDezWxrzBWGRvmvdU03rbmRWT3AIkEt0GFrQjCnOzV5fx+13ry1VGcDbx9mpfJHwCeoIrUj58M2jecUKavs4ghnPl239BkfLdJ+eThoJRYezWxjzFWGR8mlgPADxHKiG6wbfs6i2qUeCgYVNiKIMyJXbKAwcCH1HpZ9PTmYrzhuIDr0Wyig/kNJ5TZExGPULvAzGNge1MPrVqEDz74A7P7nM8rXe61VxP7GPMq47/wNMWOs/kH8IMnflBvD3pPRDxfoC0iCwWDCq/cUNuEPsYbiuFl0ZhEdn9zMd5wjGXy7ufb+I7S6XPot/gJIoB/A7uBXwN9nYWURA6gdPocum//hpQtKxAgFxiNi//b+yW5M8/nvprwUJP0zcYr0tOZAhQ8Dtmzypm9eCu/R1PScc5C+i1+gmzmkZqRQfbqcmKXLKCDs5AbgU+A4XoxhkFFMLpptxVBmLMnIp44ZyFCbbjJNoALB4hwjM4AdEbxHlpPoC11Q1IG440dyqROiCGbecQuWcBFzkJSgcuAIdQ+eICaMeghwGtoilzrodnzAv4idskC4oAPqH14CpC0+GnUYicp+v5i4JdoDuZcwJ6IBEqnzwlagwqvhoZE5GoRyRURl4iMaSDfVBHZKiI7ROReU/pAEVmnp78rIlHeyGPTfMympArtzfNBIBInDiCGo8RwlB3AW0AZtsmo3zFN5p+OSOBVIIG6E8dCre+aSGr/yHYPzb+496CNNTiROGuuixOYhmaWLWhKINgNKrydI8gBrgC+rC+DiEQAL6K91AwDZovIMP3w08BzSqmzgFLgFi/lsWkmZlNSB8KDOMiDOr7sXcBAtLecPmgPJNtkNDD0dRYxnVqvlS59K0Vbx2HMIZh7aDb+w+wgUItRoMUArwYqgG8Jbi+j9eFtqMotQGORqcYCO5RSu/S87wCzRGQL8AO0uUeAN4GHgb97I5NNMzGFsAToLQ5eNB02PGGabxSFEFddYA8JBQDz0J2L2vi5nYD7qPvACeYx6NaCMX9jnswvRrsubdGGgtzfrkNh+DQQcwT90NrKoAQYB3QDypRS1ab0M+IaG4jIXGAuQK9evVi5cmWLhKmoqGjxuYHAavkSHXH0dxXXTAx76jLudsSx025Dr2iqjGrcpfRb83LNgyeauj0A9P0SR392nHsZ8b0P+eS3B3sbWiVf/96HWHneXM5a+wn9XCW0w8Ez+uuSp/+KAraPu5QdQdyWACilGtyAZWhDQO7bLFOelcCYes6/CnjVtH8D8ALQHa2nYKT3B3Iak0cpxejRo1VLWbFiRYvPDQRWy5c1c55yaa61PG4uUF+cN9dSGRvD6jZsCk2W8emnVdbMeao4IkE5QTndrkclbdQvu71tnXwWESzy/bLb26qSNnWuiXGdihz9VdbMeUo9/bTVYtYAbFQenqmN9giUUlO81DW79Ye8QZyedhjoIiKRSusVGOk2FmK2WOnrLKyxGurE0RrLh/jehxopxcZnmIbult2/gnFPzOI0kcRSSimxRFFtLxqzkJm39eX0E22poGOda7Ju3iIiL5agdjRnJhALyjYAg3ULoSjgOmCxrp1WoPUYAG4CFtVThk2gMFmsOJQiRpUTo8pxKFVj+VBsuza2BPPCJnvRWHDQWq6JV3MEIvIj4HmgB7BERDKVUpeKSF+04aBpSqlqEbkT+Axt8errSqlcvYjfAe+IyGNojjBf80YeG5tWjWlhUy32ojFLaeiaBPu8gAlvrYY+RPNO4J6+B82U1thfCpwRKV1plkRjvZHBxsbGxsY7bF9DNjY2NmGOrQhsbGxswhxbEdjY2NiEObYisLGxsQlzRLPiDC1E5CBQ2MLTu1MbgzoYCXb5IPhlDHb5IPhltOXznmCUMUEp1cM9MSQVgTeIyEalVL2eUq0m2OWD4Jcx2OWD4JfRls97QkFGA3toyMbGxibMsRWBjY2NTZgTjorgZasFaIRglw+CX8Zglw+CX0ZbPu8JBRmBMJwjsLGxsbGpSzj2CGxsbGxsTNiKwMbGxibMabWKQESmishWEdkhIvd6OB4tIu/qx9eJyIAAytZfRFaISJ6I5IrIrz3kmSgi5SKSqW8PBko+kwwFIpKt17/Rw3ERkb/qbZglIqMCKNsQU9tkishREbnLLU/A21BEXheRAyKSY0rrKiKfi8h2/TO2nnNv0vNsF5GbAijfH0Xke/0afigiXeo5t8H7wY/yPSwiu03XcVo95zb4n/ezjO+a5CsQkcx6zvV7G7YIT9FqQn1Dc3e9ExgERAGbgWFueX4OvKR/vw54N4Dy9QFG6d87Ads8yDcR+K/F7VgAdG/g+DTgE7TIiecC6yy83vvQFstY2obAhcAoTNH2gAzgXv37vcDTHs7rCuzSP2P177EBku8SIFL//rQn+ZpyP/hRvoeBe5pwDzT4n/enjG7HnwEetKoNW7K11h7BWLQwmLuUUqeBd4BZbnlmAW/q398HJouIEACUUnuVUt/q348BW2ggXnMQMwt4S2msRYs418cCOSYDO5VSLV1t7jOUUl8CR9ySzffam8APPZx6KfC5UuqIUqoU+ByYGgj5lFL/U7Wxw9eCdbHW62m/ptCU/7xPaEhG/RlyDbDQH3X7i9aqCPoBxab9Es580Nbk0f8E5UC3gEhnQh+SGgms83B4vIhsFpFPRCQ5sJIBWuzt/4nIJhGZ6+F4U9o5EFxH/X88q9sQoJdSaq/+fR/Qy0OeYGnLn6L18jzR2P3gT+7Uh65er2doLVja7wJgv1Jqez3HrWzDemmtiiAkEJGOwAfAXUqpo26Hv0Ub6hiBFgXuowCLB3C+UmoUcBnwCxG50AIZGkS08KczgX97OBwMbVgHpY0PBKXNtojcD1QDC+rJYtX98HcgEUgD9qINvQQrs2m4NxCU/6nWqgh2A/1N+3F6msc8IhIJxACHAyKdVmcbNCWwQCn1H/fjSqmjSqkK/ftSoI2IdA+UfHq9u/XPA2iR6NyjyTWlnf3NZcC3Sqn97geCoQ119htDZvrnAQ95LG1LEbkZuByYoyurM2jC/eAXlFL7lVJOpZQLeKWeei2/F/XnyBXAu/XlsaoNG6O1KoINwGARGai/MV4HLHbLsxgwLDOuAr6o7w/ga/RxxNeALUqpZ+vJ09uYsxCRsWjXKpCKqoOIdDK+o00o5rhlWwzcqFsPnQuUm4ZAAkW9b2BWt6EJ8712E7DIQ57PgEtEJFYf+rhET/M7IjIVSAdmKqVO1JOnKfeDv+Qzzzv9qJ56m/Kf9zdTgO+VUiWeDlrZho1i9Wy1vzY0i5ZtaJYE9+tpj6Dd7ABt0YYTdgDrgUEBlO18tOGBLCBT36YBtwO363nuBHLRrB/WAucFuP0G6XVv1uUw2tAsowAv6m2cDYwJsIwd0B7sMaY0S9sQTSntBarQxqlvQZt7Wg5sB5YBXfW8Y4BXTef+VL8fdwA/CaB8O9DG14170bCm6wssbeh+CJB8/9Tvryy0h3sfd/n0/TP+84GSUU+fb9x7prwBb8OWbLaLCRsbG5swp7UODdnY2NjYNBFbEdjY2NiEObYisLGxsQlzbEVgY2NjE+bYisDGxsYmzLEVgY2NjU2YYysCGxsbmzDn/wEV8Zqat2NGyQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .2\n", "xdist = 6*np.pi\n", "x = np.linspace(0,xdist, num=int(xdist/h)+1)\n", "y=exp(x)\n", "\n", "methods = ('RK45','RK23', 'Radau','BDF', 'DOP853')\n", "colours = ('bo','ro','rx','k-','r.','b.')\n", "\n", "timings = {}\n", "for c, meth in zip(colours, methods):\n", " initial = process_time()\n", " y = solve_ivp(m_y, (0,6*np.pi), (-1,0), method=meth, t_eval = x, max_step=h).y[1]\n", " final = process_time()\n", " timings[meth] = final - initial\n", " #y2 = exp(x)-y\n", " plt.plot(x,y,c, linewidth=1, label=meth)\n", " #print(y)\n", "\n", "\n", "plt.title(\"Comparison of ODE methods on sin(x)\")\n", "plt.legend()\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 20, "id": "fb4d88ca", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "meth,timetaken = zip(*timings.items())\n", "plt.title(\"Length of time taken per method\")\n", "timems = map(lambda x: x*1000, timetaken)\n", "plt.bar(meth, list(timems), width=0.4)\n", "plt.xlabel('Method')\n", "plt.ylabel('Milliseconds')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 33, "id": "7b130b87", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .2\n", "xdist = 6*np.pi\n", "x = np.linspace(0,xdist, num=int(xdist/h)+1)\n", "y=exp(x)\n", "\n", "methods = ('DOP853', 'RK45', 'Radau')\n", "colours = ('b', 'r', 'k')\n", "\n", "\n", "for c, meth in zip(colours, methods):\n", " y = solve_ivp(m_y, (0,6*np.pi), (-1,0), method=meth, t_eval = x, max_step=h).y[1]\n", " y2 = sin(x)-y\n", " plt.plot(x,y2,c, linewidth=1, label=meth)\n", " #print(y)\n", "\n", "\n", "plt.title(\"Comparison of ODE errors on sin(x)\")\n", "plt.legend()\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "2965340d", "metadata": {}, "source": [ "So in conclusion, with the above methods, the errors are very small but they do eventually get amplified." ] }, { "cell_type": "code", "execution_count": null, "id": "c304ec35", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }