{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "b87765e8-3137-4c80-bb38-9daada6c54bc",
"metadata": {},
"source": [
"# 2025-11-19 PDE Exercise\n",
"\n",
"We will implement a PDE simulation of the [heat equation](https://en.wikipedia.org/wiki/Heat_equation).\n",
"At various points in this exercise, you will have the ability to modify the code to explore different variations on the project.\n",
"\n",
"## The math\n",
"\n",
"We will consider a perfectly insulated rod of metal with various conditions along each end.\n",
"We will only consider the temperature change in 1D for this exercise.\n",
"\n",
"The partial differential equation which governs the movement of the heat through this rod is given by\n",
"\n",
"$$ \\frac{\\partial u}{\\partial t} = \\frac{\\partial^2 u}{\\partial x^2} $$\n",
"\n",
"where $u \\left( x, t \\right)$ is the function giving the temperature of the rod at location $x$ and time $t$.\n",
"\n",
"Note that $\\Delta u$ or $\\nabla^2 u$ is sometimes used in place of $\\partial^2 u / \\partial x^2$.\n",
"\n",
"For this to work, we also need an initial condition $u_0 \\left( x \\right) = u \\left( x, 0 \\right)$ and boundary conditions.\n",
"For simplicity (and [without loss of generality](https://en.wikipedia.org/wiki/Without_loss_of_generality)), we assume $x \\in \\left[ 0, 1 \\right]$.\n",
"That means we have boundary conditions $u_L \\left( t \\right) = u \\left( 0, t \\right)$ or $u_L \\left( t \\right) = \\partial u / \\partial t \\left( 0, t \\right)$ and $u_R \\left( t \\right) = u \\left( 1, t \\right)$ or $u_R \\left( t \\right) = \\partial u / \\partial t \\left( 1, t \\right)$.\n",
"\n",
"### Extension\n",
"\n",
"For simplicity, we consider boundary conditions that do not vary with time, but this is an area for exploration."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8f83a408-a789-4f2d-87b9-4aa59bf84ff0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"maximum(u_0) = 1.0\n"
]
},
{
"data": {
"image/png": "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VaFChY4dO8oax40bN3LkSDVmIyAwEDY26NRJdA4i0i4rVsDXF2/eiM6hERQXwvnz5/v5+X3//ff+/v7yxjZt2uzcuTMjI0Nd2XReUhL8/LBkiegcRKR1atRA165YtEh0Do2goBBmZWWtXLlywYIFS5cubdKkiby9Tp06ycnJT548UWM83bZwIdq14yxnIlIJPz8EBeH+fdE5xFNQCOPi4t6+fduhQ4c87bIVhG94Ka0ez54hMBDz5onOQURaysYGY8di9mzROcRTUAgtLS319PRevHiRp/3mzZsA7Ozs1JGLZszADz+gXDnROYhIe02ejLNncfGi6ByCKS6EjRs39vX1TUlJkfy7v3NSUtL06dNdXFzK8VezGly7htBQTJkiOgcRaTUzM8yfj/Hjods7pSieLLN69erLly/XqFEjICAgKSlp2LBh1atXv3Dhwpo1a9ScT0dNnox582BpKToHEWm7QYOQloYDB0TnEElxIaxTp87ff//duHHj8+fPJyYm7tq1q3bt2n/++WezZs3UnE8XHT6Mp08xdKjoHESkA/T0sHAhpk1DZqboKMLku0zbyclp9+7dALKysgy4mlttZCvolyzhCnoiUpN27VChAv77X4waJTqKGIqvCL///vvIf7d4llfBqKioPn36qCmXztq6FaVKoXNn0TmISJcsWYL585GYKDqHGIoL4R9//PH69es8ja9fv/71119VH0mHpabC1xdLl4rOQUQ6xsUF7drp7PYdH9trNI/nz5+XKlVKdVEIS5agaVPUry86BxHpHn9/bNgAndwy5b0Pog4dOvTTTz8BePv27ezZs3OXvfT09D///LNRo0bqDqg74uKwZg0uXBCdg4h0UpkyGD4cc+diyxbRUdTtvUL49u3bBw8eAMjOzn727Nnbt2/l3zIxMenTp8+sWbPUHVB3zJmDQYNQpYroHESkq2TPr79xA7VqiY6iVu8VQnd3d3d3dwBff/31hg0b6tatKyiV7omKwu+/484d0TmISIcVK4aZMzF9Og4dEh1FrRR/RhgeHs4qqFbTp2PaNJQsKToHEem2kSNx9y5OnBCdQ60KMVmGVCU8HBERGD1adA4i0nmGhvDzw+TJyMkRHUV9WAg1wKRJ8PWFiYnoHEREQO/eMDVFcLDoHOrDQija3r1IToa7u+gcREQAAIkEAQGYORPp6aKjqAkLoVDZ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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Plots\n",
"\n",
"# Our points x\n",
"n = 101\n",
"h_x = 1 / (n - 1)\n",
"x = LinRange(0, 1, n)\n",
"\n",
"# An initial condition\n",
"u_0 = sin.(x * π)\n",
"u_0[end] = 0 # just cleaning up here\n",
"@show maximum(u_0)\n",
"\n",
"# And let's see it\n",
"plot(LinRange(0, 1, n), u_0, xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\", title=\"Initial condition\", color=:red)"
]
},
{
"attachments": {
"ed0b63f2-ffa7-463a-a22d-4e15bc8eff97.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAJTCAYAAAD+J+RBAACEl0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1S/4r3cCeDOuuuqqq6666qr/KAT/9d4J+ECuuuqqq6666qr/KIj/er8PvBJwM3APV1111VVXXXXVvxfBf60HA68KVOBduOqqq6666qqr/iMQ/Nd6T0Bc8b5cddVVV1111VX/ERD/tZ4APIpnexngr7nqqquuuuqqq/49CP7rvDrwKJ7TB3DVVVddddVVV/17If7r/C7wGjynCdgEBq666qqrrrrqqn8rgv8aFXhpnlcF3oSrrrrqqquuuurfg+C/xpsA2zx/78VVV1111VVXXfXvQfBf4915wd4cOMNVV1111VVXXfVvRfCfbwd4C16wDngXrrrqqquuuuqqfyuC/3zvACx44d6Lq6666qqrrrrq34rgP9+78y97WeCluOqqq6666qqr/i0I/nPdArwmL5r35Kqrrrrqqquu+rcg+M/1bkDwonl3oOOqq6666qqrrvrXIvjP9a686K4B3oirrrrqqquuuupfi+A/z8sCL86/zntx1VVXXXXVVVf9axH853l3/vXeEjjNVVddddVVV131r0Hwn6MA78K/Xg+8E1ddddVVV1111b8GwX+ONwCu49/mvbjqqquuuuqqq/41CP5zvDv/dq8AvARXXXXVVVddddWLiuA/3ibwVvz7vAdXXXXVVVddddWLiuA/3tsBW/z7vCdQueqqq6666qqrXhQE//HenX+/a4E35KqrrrrqqquuelEQ/Me6AXhd/mO8F1ddddVVV1111YuC4D/WuwKF/xhvCZzgqquuuuqqq676lxD8x3p3/uPMgXfmqquuuuqqq676lxD8x3kx4KX4j/VeXHXVVVddddVV/xKC/zjvyX+8VwIew1VXXXXVVVdd9cJQ+I8RwHcCOzyvu4FfBP4OeAme0yHw+cA+cBLY5HkdAL/OVVddddVVV131giD+Y7we8Os82xOBbwZ+AXgyV7wV8NM8p13gBM/2KOAdgA8AbuGKO4EHAY2rrrrqqquuuur5IfiP8e5c8UvA6wOPAb4aeDLPljwv8ZyeCHw+8FDgLYA/B24EXp+rrrrqqquuuuoFIfj3WwCvBLwX8KbAbwDmeZnnJZ6/Bvw88ErAewFvxlVXXXXVVVdd9YIg/v1OAWvggBfuzYCf5zkdANv8y44Bl7jqqquuuuqqq54fKv9+53nRJM9LvGgucdVVV1111VVXvSBU/uuY5yWuuuqqq6666qp/Lyr/dczzCq666qqrrrrqqn8vKv91kuclrrrqqquuuuqqfy8q/3XM8xJXXXXVVVddddW/F5X/OuZ5BVddddVVV1111b8Xlf86yfMSV1111VVXXXXVvxeV/zrmeYmrrrrqqquuuurfi8p/HfO8gquuuuqqq6666t+Lyn+d5Kqrrrrqqquu+s9A8F/HPH/BVVddddVVV13170Hlv455/sRVV1111f8PG8BDgVNAA+4A7gIG/n1OA+f477EBHHHVfzeC/zrJ8yeuuuqqq/7vOgF8LPBHwC7wd8BvAb8HPB24D/g8oPCv9wjga4Bv4b/P5wOvyVX/3Qj+65jnL7jqqquu+r+nBz4FuB34CuCVgUvAewIbwKdyxTHg04Ev4kX3cODHgCcCbw98Mf99Hgx8J7DFVf+dCP7rmOdPXHXVVVf933Iz8CfAFwKbXHEn8MrA9wEr4FV5Th8G9LxwO8BXA/8AvD3wu8DLAn/Gf58fAx4GfDFX/XdC/Nd5BeBPeV4LYMVVV1111f8NLwX8EnA9zzYCrw78KVfcDNwKBM/pGuAsz98bAt8G3MIVPwO8M7Div9cGcA+wAbwy8Odc9d+B4L+Oef6Cq6666qr/Gx4M/BJwPc/p04E/5dmOAcFzOgec5Xl1wNcDvwzcwhU/CLwdsOK/3xHwq0ABvhEQV/13IPivY54/cdVVV131v98W8IvA9TynJwNfyXN6HPDbPJuBT+d5nQZ+BfgwQFzx68D7AI3/OX6DK14BeHuu+u9A5b9O8vyJq6666qr//b4WeAzP67OBieeUwBsB7w7cCPwm8Ac8p4cDvw48iGd7AvC2wMD/LL/Js30O8JNA46r/Soj/Oi8N/BXP6xiwx1VXXXXV/15vD/wYz+tW4GFA8q/zaOA3gBt4tiPglYC/53+eAuwDC654R+DHuOq/EsF/HfP8iauuuuqq/722gK/m+ftuIPnXeXHgt4EbeE6fA/w9/zM14Ak824dz1X81gv86yfMnrrrqqqv+9/o04Eael4Hv41/nOuAXgGt5Tn8HfBX/s93Js70m8BJc9V+J4L+Oef6Cq6666qr/nR4DfAzP358DT+NFNwd+CriF55TABwAj/7Nd4jm9C1f9VyL4r2OeP3HVVVdd9b9PBb4dmPH8/TL/Ot8KvDLP60eAP+F/viXP6e256r8Slf86yfMnrrrqqv9LBLw08BjgB/mXPQp4fWAD+DngCfzPdz3wDcCr8oL9Mi+6dwTeg+fVgM/lX68DHgm8GNCAn+BFE8DrAS8FTMBvA3/Ni2bOc3oE8CjgiVz1X4HKfx3z/AVXXXXV/3ZbwOsDbwq8KXAjVyyBn+IFez/gG4GeKz4P+Gjgm3m2vwe2+K/32cB382wngJ8HTgKPBIIX7vOBxhWXgLfn+TsNfB3P3/cDT+AFE/AQ4MWBFwNeEngs8Gig54o18NfAU3nhXhb4QeBRPFsCHwZ8M/+yTZ7XqwNP5Kr/ClT+65jnT1x11VX/Gz0ceDPgzYDXBGY8ry8GfhZoPK+HAd8A9DzbDPh64K+AP+GKBwFb/Nfb4Tm9IfCqvOheh2f7EV6wrweu4XkZ+EJesFcAfgvY5IWbAV8KvB0v2JsCPwnMeE4BfCnwbUDjhdvieb0a8B1c9V+B4L9O8vyJq6666n+jPwO+GngDYMbz90jgFXn+XgeY8bwK8BH8z/NG/Nv9PM/fywHvyPP3K8CTeMGeAjwSKMDLAX/BC/Y2wIvx/L0W8OPAjOdvG7iRf9kNPK9Hc9V/FSr/dczzF1x11VX/G10HbADvBXwp0PH8vQHwRzyv4AW7nmf7LWCD/3q38Zz+DvgSrtgGPpQX7OuAI57tF3n+Ph8Qz9838MJdBC5yxV8CbwQ8ATjN8xLw8cD78JweCvwUsOAFWwJ38y+7ief1CK76r4L4r/Mw4Ck8r5uAO7nqqqv+N/sC4FN5/n4VeCOe1xngL4CbeV7fA7w3/3O9OfBzPH93AzfwL3s14Pd5/p4OPAJo/Ot8FPDVPH9HwHXAPlcsgD8EXporEgie16cAX8wLtwkc8PzNgTVX/Wcj+K+TPH/iqquu+t/uG3nBHsbzdxZ4NeDPeV7/wP9sr8ML9pu8aD6SF+z7gMa/3ncCBzx/G8Db8mxfBbw08AfAKwMz4KHA2wOfCnwZ8CbAF/MvezQv2BZX/Veg8l/HPH/BVVdd9b/dncAdwE08rwcBFZh4XrcDrwP8IvAaPNtP8j/b6/CC/Rb/slPAW/GC/Rj/NvvAjwDvx/P3tsD3AG8OfCDws8A7AANXPB14Ov96L84Ltgmc56r/bAT/dczzJ6666qr/C/6O568CN/KCHQAfw7P9GfBU/uc6CbwUL9hv8S97N2DG8/d44O/5t/t+XrDXBq4Hvh14EvDuwMC/34vzgh1x1X8Fgv86yfMnrrrqqv8LbuUFO8kLV3i2L+J/ttcCgufvduBp/MvejBfsR/n3+X3gIs/fDvBrwDXABwL7/Md4GV6wPa76r0Dlv455/oKrrrrq/4JDXrCTvHAvyRV/Dvw0z+l3gE3+630Z8CM8r9fhBfst/mUL4DV4wX6Of58J+CXgXXn+Xgz4duB3+Y9RgVfm+TsABq76r0Dlv455/sRVV131f8EhL9hJXrj344pPA8xzellgi/961/L8vS4v2G/xL3tVYMHzdx74K/79fg54V56/FfBJ/Md5WWCT5++JXPVfheC/jnn+xFVXXfV/wQEv2AlesNcDXhn4JeBX+Z/tGuCxvGC/zb/sJXjBfgNI/v1+CRh5/ubANfzHeTVesMdx1X8VKv91kucvuOqqq/4vOOQFO8nz1wNfCyyBj+D5+1tgk/96Z3lerwOI5+/pwK38yx7LC/Zr/Me4BPw+8Do8f28NfDH/Md6cF+yvueq/CpX/Oub5E1ddddX/BYe8YCd4/j4ReCzw6cBTef5ejf85XocX7Ld40TyMF+wP+Y/zc8Dr8Py9DfDF/PudAl6TF+xXueq/CsF/HfP8iauuuur/ggNesBM8r4cDnwY8Afhy/nd4HV6w3+JFc4zn7wB4Iv9xfpYX7BWAm/n3e0ug8vzdA/wDV/1XIfivkzx/wVVXXfV/wSEv2CbP6xuBOfDhwJr/+W4AHskL9ru8aLZ5/v4aaPzHeUleMAFvxb/fW/OC/SRgrvqvQvBfxzx/4qqrrvq/4JAXbJPn9K7AGwDfCfwG/zu8Di/Yk4HbeNFUnr+/4j/OI4HvBswL9tb8+2wBb8AL9h1c9V+J4L+Oef7EVVdd9X/BAS/YJs92GvhK4BnAx/C/x+vygv0aL7pDnr8n8B9jE/hJIIH34gV7LeA6/u3eCVjw/P0t8Jdc9V+J4L9O8vwFV1111f8Fh7xgGzzbtwFngPcB9vjf43V4wX6dF90ez98z+PcT8B3AY4B3A74feBrPXwXej+dvDjyKF+5DeMG+lKv+qxH81zHPn7jqqqv+L1jygm1yxfsDbw18HfBb/O9xC/AQnr8G/DYvumfw/N3Kv6wDXhx4FM+rAN8GvBPwacAvAgZ+lBfsg4A5z+trgB8Dgufv1YCX4/n7B+CHuOq/GsF/HfP8iauuuur/ghUv2CbwUOArgScCn8L/Lq/HC/ZnwEVedE/h+buNF+5VgacAfwc8AXgc8FHASwJvDPwO8H7ADwBfwrN9Py/YzcAn8Jw+AHg/4AOB5Pn7MF6wzwCSq/6rUfmvkzx/wVVXXfV/wZIXbBv4PmABvBew5H+X1+EF+1n+df6W59WAfV6wLeDHgBt4tscAX81z+k3gfQHzbP8A/Cbwujx/nwWsgJ8D3hL4IuCzgD/m+bsOeDuev98Cfpqr/jsg/utsAgc8r5cH/oKrrrrqf7sCTLxwnw98Bv/73A7cxPP3WODxvOiuBe7hOe0Bx3jBXgP4XV64vwFeE9jjeb058HO8aH4KeDvAPH9fAXwsz+sQeCngqVz134Hgv455/sRVV131f0EDBl6wPwE+j/99HgHcxPP3FODx/OvcCzyR53TECydeuD8H3gDY4/n7eeAX+Jf9CvAugHn+HgR8GM/fJwBP5ar/LgT/dZLnL7jqqqv+r1jz/J0H3hkY+N/ndXjBfox/m5/mOQ28cH8OPJ3n72eB1wXO8sK9P/A4nr8Evh54C2DNC/Y5wIzn9ZPAN3PVfyeC/zrm+RNXXXXV/xVrnlcD3hG4lf+dXpcX7Hv5t/lxntMmL9wR8GbArwH7wHngN4B3At4K2Odfdg/wGsAXAE8AVsAF4MeAlwU+Ahh5wV4CeHee118B7wmYq/47If7r9MCa5/UqwB9z1VVX/V+wB2zznD4J+FL+dyrAvcApntcfA6/Cv42AvwceyxUjMAPM/0wCfg14PZ7TXcArAndy1X83gv86yfMXXHXVVf9XzHlOPwN8Gf97vQJwiufvW/m3M/ANPFsH3MT/XB8GvB7P6R7gjYA7uep/AoL/Oub5E1ddddX/BQXoeLYnAe8FmP+93oTn707gB/j3+T5gl2d7Mf5nehjwRTyn24HXBP6eq/6nIPivY54/cdVVV/1fMOfZLgJvDVzif7c35vn7CmDg32cf+Eqe7WX5n2cB/ACwxbM9CXgt4Mlc9T8JwX+d5PkLrrrqqv/JTgHfCvwD8BvAG/P8neGKFfBWwOP53+008PI8rycD38h/jK8C7uOK1+N/lg74UeCVeLZfAl4ZeDpX/U9D8N9PXHXVVf9TbQJ/BHwA8FjgdYFfBD6U53Qt8PNAA94V+D3+d3hJ4M2BR/O83ggInlMCHwCs+Y9xAHwOV7wasMn/DAX4fuDNuWIEPhN4c+AiV/1PRPBfK3le4qqrrvqf6sOAR/CcBHwd8IGAgNcH/hR4DPDBwE/xP99x4LeAvwF+Dngc8Jk8p7fleX0+8Dv8x/pm4E+BGfCW/PfbAn4MeEeu+BvgFYHPA5Kr/qdC/NeagMJzej3gN7nqqqv+J/ph4J14wVbAHGjA+wDfx/8O3wR8MM9pBewAI/AywJ8DwbP9MPDuQOM/3isAfwj8GvCm/Pd5KPDTwEsAF4DPB74eGLnqfzqC/1rmeYmrrrrqf6p7eeHmwD7wDsD38b/Hy/K8GpDAJvCtQPBs3we8B9D4z/FnwBcArwMU/ns8FvhT4KHAVwAPB74KGLnqfwOC/1rJ8xJXXXXV/1Q/AEy8YH8FvBzwU/zv8ns8ry8CtoEfBV6eKy4BHwa8JzDxn+vzga8GGv893gL4euBBwMcDF7nqfxPEf60VMOM5vRHwq1x11VX/U70/8LXAgme7F/gs4DuAif995sBPAG/Ks10CFkAP3A18D/BVwH38/yDAXPW/FeK/1hKY85zeGPgVrrrqqv/JHgS8LnACeDzwm8Ca//1eCnhJ4DqgAWeBvwQeDyRXXfW/B+K/1iGwwXN6E+CXueqqq6666qqr/q2o/Ncyzyu46qqrrrrqqqv+Paj81zLPS1x11VVXXXXVVf8eVP5rJc9LXHXVVVddddVV/x5U/muZ5xVcddVVV1111VX/HlT+a5nnJa666qqrrrrqqn8PKv+1kuclrrrqqquuuuqqfw8q/7XM8wquuuqqq6666qp/Dyr/tczzElddddVVV1111b8Hlf9ayfMSV1111VVXXXXVvweV/1rmeQVXXXXVVVddddW/B5X/WuZ5iauuuuqqq6666t+Dyn+t5HmJq6666qqrrrrq34PKfy3zvIKrrrrqqquuuurfg8p/LfO8xFVXXXXVVVdd9e9B5b9W8rzEVVddddVVV13170Hlv5Z5XsFVV1111VVXXfXvQeW/lnle4qqrrrrqqquu+veg8l8reV7iqquuuuqqq67696DyX8s8r+Cqq6666qqrrvr3oPJfyzwvcdVVV1111VVX/XtQ+a+VPC9x1VVXXXXVVVf9exD81zLPK7jqqquuuur/qwVX/Ucg+K9lnpe46qqrrrrq/5PXAn4GOACOgCXwK8BbcNW/FcF/LfO8xFVXXXXVVf8fCPhK4LeBNwM2uWIOvB7ws8D3Az1X/WtR+a+VPK/gqquuuuqq/1N+68VebOsw9rvNfl7asNoBeK9/uOMT7sz8YK4oPKfCFe/20KrrvvYxN38LV5zgXyBCJs39rAl5nwdIdBB45H6pRniPZ3Kpe4s2tRVcjI2+vemfPGWP/12o/Ncyz0tcddVVV131QNcCHwy8IXAjsAv8HvCtwN/xH+i3XuzFtpZlfbzg4ykfzzYdt1gAJ+xYhFg487gVC9kL5OOgDZu55OOgDcwC+ZitCt4GOGAfEg5WKwDuGSbuzORF8bTJr/eEw/XrPWox40VhkudkMM9BGPNAhuTZcmLJFe1g4Ode7BZAg+RDm6XEyuhAeLR1CXkSXLI1Ch9YumS4VMWltHftcqkPLjm55M6XWstLb/53t13kPw+V/1rmeYmrrrrqqqvu947AdwELrhDwIODFgQ8DvgT4NCB5pj9/uZfrznF0ug3r0852GnQt+GSI4w2OyxxHPg6cAI7bHAeOSxw/8H6lQeMBzDMlaa5wYgADGAAbwABgAPOC/OalXf41fu3sRR51y3X893Jv0wMnbABjAAwGA2AMYCOgmWdqDMkVI5f93IvdgqRLNpckX7K5ZGl3FvVT3uhvn/r3/PtQ+a+VPK/gqquuuuoqgLcCfhgwIJ5T4YpPfp3t/u0/7kHX34s5g3zm7tXZEzwHA9DMZQYwz8Pmv8xTLq3513jC0cj/RbaPAcdsLpPN6PGz+fej8l/LPC9x1VVXXfX/xM+/xC0navQ3TDlcH1luyGjX23HDQWs3v+fjb3/zEQSIF+K39oeHv8XR+uGPWPRg/lc4auZf4yj5f2PW17P8+1H5r2Wel7jqqquu+l/On/3Z8fM/9YPXq60fhHWL5JsFNxs/GOsmw/Xga51ozAGARoMESP5k74CRF90v3HeBj37QdfxvcWZWYEpeVNfX4P+Lulpc4N+Pyn+t5HkFV1111VX/w/3NS77k5t06evDUxgcL3dzwzQG3YD8IdPMv/Ph33YjdGQBj8wDmX/K4vUP+Nf7ucOR/k5c7sc1vH17gRfVyJxf8fxBo/Tr/8A8H/PtR+a9lnpe46qqrrvof4Gde5uYb+uwe6skPTfww5IcKHprwsNva7rU8kzECzP0M5t9lb0z+Nc7b/E8mMGIXwHDw6se2pu++8+JN5+0KiBfMBcY3OHniF0Ps2ax4IYwGpJRzzrNIyMd5DtoAz3gmWyH5GM8kOG6rIu8Avc0m/wUSn+c/BpX/WuZ5iauuuuqqf52HAx8HvDlwHXAA/CnwbcBPAOb5+POXe7nu3uniQ9zaI8APRTxU5mFpHop4KAOLiYlnMZj/Gsf7gBUvsmsl/iNIHGLtgQ8Qe6C9hEPhQ5lLSPtYh0EeZrArdAA6NHkIXCwqB53bWPr53uGwaie3bly96h/90ZLn76WB3wfmQOF5NSAbvOm7Pv723+C/2R++yqssLhzcOZ/1dVvDVJfS8dpKaTEdM+qFNyPLIuVNw3E5jwEnLI6FdSzFMZljyMeA4zabPBeJ8/zHoPJfK3lewVVXXXXVi+59gW8GAihccRx4PeANgV/46Acf//A33Ny5MaVHW3qkMh9l6dH3rM891HbH/Qzmmcx/q5fc2eaX987zonrpnZ7nIO0KXwAuGC4IXQAuBFxs4kKgC5YuFOmCY7oQsXkxrxkvvOkvPWXNf6jbeCH+GnhF4HuBl+N5PRV4b+CP+B/gVf/oj5bAErjIf4Dfeu3Xru3onmMsj46t4ERIx4pj4j8Glf9a5nmJq6666qoXzdsB384V4jkVrniz3797/81e9+E7yAYbA9iY/7leeWeDM7rAWZsXQT5ka/G+Xe3/XPbZN3zb9zinz/7s5H+HxwGvALwG8NPACWAFvBXwm8DE/1Gv89u/PQHngfP8x0P81/pD4FV4Tp8CfDFXXXXVVc/Hb732a9fVhWc87J5hfLn3e8Id35qwAYh/wSfdfIpX39nkf5pAa+Q7DHeCbrN0V8A9ie/77nvuO/UTZ5dfAQgoPC8DAj4e+Ar+93sa8BDgInCSq/49qPzXSp5XcNVVV10F/MzL3HxDmfRYO15MzscivdjBuae9DGbjcQdLkhfdL9+zy6vvbPJfKdDacAH5LuBpJu6W8i7gaSXq3V1Od73e273Prfrsz05esL8Cfhi4ATAgrjCwAj4e+Eauuuo5UfmvZZ6XuOqqq/5f+a2XfvDxg4mXlnlpyJdCvDjwGA9sGoDEADb3e9LhIf8afzs2/hMcID1N9tNBT0N+ul1uLTXvKK53vtHfPvU+/iV/99n8C34PeDjwLsCXASe54lOA7wXu5qqrnheV/1rmeYmrrrrq/6yfeZmbb4ihvpyiPdbWi8m83OGYjwFknsn8i5ZT8q9hoBmK+FeRuAg8DXga5mkETwOeNoenvd7fPuPpksx/viXwncCHACe54ksBc9VVzx+V/1rJ8wquuuqq//V+67Vfux6dv+0xeHpprJdOeCnhl/HASWg4AYz5tzk5r7A/8KLaEhTxfGhAPA14AtKTRD4VeFq4f/o1s2O3vfxf/MXICyJx1X+obwFOAUdc9e9F5b+WeV7iqquu+l/Fn/3Z8Us/852PVotXmJpfXvAKh2ef/lLGcy4zAOY/zstubfPDZ494Ub3CRnck6U+xn4T0JOAJruVJW8dvefrr/PZvT1z1P8GXcNV/FCr/tczzElddddX/aL/+Erc8dOl4BeGXF7zCz//Yd70ssA0JgPnP95iNGY+tweOm5F9gIH/rcHyF3/r7ZzyO5/E0rrrq/yAq/7WS5yWuuuqq/zF++eUec/24Wr088ssZv5zgFZfpayAxYP7rSUzAbR/2kOue/hFPvutVEuZA8LwSCOCjgcfxv9/fAANXmKuuesGo/Ncyzyu46qqr/qP1wLsBbwbcAiyBPwe+F/gbnum3Xvu16/riHY+acng1W68u83Lj6vCxABjEfz2hu5H/wcTjivUXGe0fTm7d+LhX/aM/WnLFg4EfAF4VMCCe7RLwEcAP8H/D+3PVVS8aKv+1zPMSV1111X+klwZ+Cngw0IACGHh14GMeWvULX/6omx/fi1c6OPe0l8dsAIAx/6XOSfyVrL+z+Ifi8nc3lK3HvdTf/u0hz+M2HuBW4NWA1wS+C3goV3wE8L3AHldd9f8Plf9ayfMSV1111X+UxwC/Byy4onCFAAE8bfKbf90z7n7zj33Q9fxXEbo7xV+E/Q9BeVzU8hdv9NdPfpwk82/3u8CTgIdyxQ8De1x11f9PVP5rmecVXHXVVf9uv/gmD5+99S895ccH2ACCF+K3DkZedX/JK28v+A+WSE8W/FXYf5XBX84XG3/1+n/6hPM8N4mrrrrqPwyV/1rmeYmrrrrqX+3PX+7lNu4bz71yS72m8Gs9/kkHrzLAjBfRz9x1nld+1E38W0lMWH+P+MsQf0X6rxZs/83r/P0/HHDVVVf9V6PyXyt5XuKqq676F/3Wi73Y1mHsv7Idry7y1e5dnXuNxDMwBv7+4IB/jb+fkmYo4kUidHeKvxD6Cyl//7r+zB++/F/8xRFXXXXV/wRU/muZ5xVcddVVz+MXX+nhO+2gvZaivS7mNQ7Yf2mSAokBYx7o0jTxr3WYyU4JnpukS+A/C/QnGfGnmzP/6ev82a338Bxu43+AXwLuAraBNVdd9f8Xlf9a5nmJq666it967deuh+ef9lLA62Nevx2MrwnunbxIdmrlX2szAokJ60kWfwH6Cyl//83e7n3+Sp/92cn/fF/LVf+bvQawAYzAb3LVvweV/1rJ8xJXXfX/kD/7s+MXfuI7XyaS12vi9Q7OPe3VMRs8i/nXeLGNTeCAF5GvlW7txXsc377xL1/1j/5oyQP93Wdz1VX/Bb4HeAhwETjJVf8eVP5rmecVXHXV/xO//hK3PHQFr495/Z//se98XeBUAzD/bo/amPHwIp7SzItA99qf8Kb/cNsfwG1cddVV/+tR+a9lnpe46qr/o37t5R56bFi110e8ceI3WiY3859EwEc/+Lr8iKfejUGAeMF+BPhJrvqfbg4UrjjkqqteMCr/tZLnJa666v8I2/r5l3rwy5TkjdN+4/V6ehVDxfznEMtAf5ri91L6g4ee3vxDP5VHAj8J3AwYEFckIOBbgY8EzFX/0/0e8PJcEYC56qrnj8p/LfO8gquu+l/s11/x0adWy6PXJXn9X3iJB70Z5sbGM5n/UBIT8DeYXyf49c1T8fuv89u3rnhOfw48EngP4DOBm7jih4CvBv6cq6666v8aKv+1zPMSV131v4g/+7PjF37iO18GeH3M66+Ojl7bpgJg/mOJJvhrzK+b8gexWX7nTf/kKXv8y1bAtwGvDbwrV3wu8CSuuuqq/4uo/NdKnpe46qr/4X7t5R56bFj7jUy+xc//2He+CXCK/xwZ6G+A37L4zXZs/rtv9QdP3Oeqq6666oWj8l/LPK/gqqv+a/XA2wCvA1wDXAR+D/hx4IBn+qWXfvCDW8s3TOstVqv2huCe/wQST8P8OsGvzxcbv/n6f/qE81x11VVX/etQ+a9lnpe46qr/Oq8G/CBwC9C4wsD7Al/2yovuCz/tYTceE/nmbcyXNUiY/2DnJX4T8eudu196o79/6u1cddVVV/37UPmvlTwvcdVV/zVeA/gNILii8JxO//Fy/Mrfv7TPq+9s8h9GNMFfY36d4Nc3Tz30t1/nt3974r/G04G/ALaAkf97HgNsAJeAp3DVVf9/UfmvZZ5XcNVV//kWwI8AARReiC+7/Twv8ag5x2rh30x6OvhXKvpVb3a/8aZ/8pQ9nuU2/gt9OvDp/N/1A8DLAA2oXPW/zTlgE7jIVf9eVP5rmeclrrrqP9m1ER94b+b1vAgS+IWLF3nXM6d5kYkjwR8ifh349Tf/u2f8BVddddW/5BW56j8Klf9ayfMSV131n+AXX/zhDzPj2ya87Zc97c5XvvcoeVH99YUV73qGF0rwZKGfU+EXHvSord9/sR/7h4Grrrrqqv8eVP5rmecVXHXVf5BffqmHv9iUw5tjvUV6eFWDAC6O5l/jXDPPQzTBX5v4eSl/7s3/7ra/4H5/y1VXXXXVfycq/7XM8xJXXfXv8Isv9aCXaZPfUehtx2l4JJeZB9osgpEX2VZwhbQr+GWJnytbW7/8xn/0Dxe46qr/Om8DzLnCXHXVC0blv1byvMRVV/0r/eLL3PLYNsY7gt+pTX40gDEvyKOPzfnj1QEvqmu68g9QPuWhj9n4lRf7sX8YuOqq/x53cNVVLxoq/7XM8wquuupF8OsvcctDB+udG7xTG/ySkLyoXuf4Mb7n3gPMiyT/ZDW961v8w9P/ln/gqquuuup/Ayr/tczzEldd9QL84ks+/KaW09sJv8Mq/arG4t/gZC184HU7fMs9e7wIvhT4W6666qqr/veg8l8reV7iqqse4Ndf8dGnhsP1m6Xae7Q2vC4Q5t/vLU6dWN03Dk//qfOrRwEGCs/WgAC+Evh0rrrqqqv+d6HyX8s8r+Cq//f+5iVfcvP23H0b4N2XR0evDxTMv5vQHvALgp+4dn76l37q/DOOgEcDHwW8DzDjiu8HvgH4M6666qqr/veh8l/LPC9x1f9L/uzPjl/+qe991TZN73Fbu/QuwDb/ASQuGv285J+7Wcd+8aX+9m8PAeAZPNMTgA8BXgF4Oa54b/5v6oCR/7tGrrrqKgAq/7XM8xJX/b/yCy/x0Jew23v+/I9957sCN3CZ+fcQugfxU8g/uXnqob/9Or/92xOX3cb/c78IvD4wANcAl/i/5ZW4YsZVV/3/RuW/VvK8gqv+z/vll3vM9eN6+Y7C75A5vRr/EaRd4Odw/NjmmQf90uv89m9PAHAbVz2PHhD/d6256n+jPwEeBFwEHsNV/x5U/muZ5yWu+j/pb17yJTdvz923MbzHuD58PUwx/z4Sh1g/a+KHHvqYjV95sR/7h4HLns5VV131v84Z4Fqg56p/Lyr/tczzElf9n/LzL3HLy9nxnre33Xc3nOTfKdC6iV+rjh8bj/U/9VZ/8MR9AP6Bf697gTu56qqrrvrfj8p/reR5BVf9r/fzL3HLCeAdSH2I0y8Nifl3SUl/ZPRj6uoPvuVfPeUs//HejKuu+p/ti4GHc8Xbc9VVLxiV/1rmeYmr/lfyZ392/MJPfOfr2npP22+PWYD59xB6HOHvrf3m977xXzz+bq666v+31wNenisEmKuuev6o/Ncyz0tc9T+NgNcF3gC4AbgI/BHwc8Dhr7/ELQ9dovf5hR//zve2uQnMv0eIpwLfV0Pf+0Z/+4ync9VVV1111b8Wlf9ayfMKrvqf5NHADwIvAySQgICPFOx91I0nnrFKXhws828ntJfix/qI73mjv3na70syV1111VVX/VtR+a9lnpe46n+KxwJ/BGxyRQDBMxl2vvrOiy8RiNc5vsW/QUr6I+TvvVnHfuCl/vZvDwGQuOqqq6666t+Fyn8t87zEVf8TBPCjwCZQeCG+6s4LvNjmnGu6yotEegLoR2rlu9/kr2+9lctu46qrrrrqqv8wVP5rJc8ruOp/gjcFXowXgYGfO3eB97v+Gl4gaVf2j5Zav+9N/uZpv89VV1111VX/mQj+a5nnJa76b+PP/uz4mZd88Bu/xkb3Nfwr/PnumuchWoifq9LbPvQxW9e++T/c9kFv8jdP+32u+u/0nsDLAy8P7PN/z88Cfw78CVdd9f8blf9a5nmJq/7L/dZLP/j4wcR7/cKPf+dHhnnolOZf4+4095O4E/P96so3vdlfPf0ZAPw9V/3PcDdwN/93PQh4SWDgqv+N3hvYAAau+vei8l8reV7BVf9lfuHFH/rySfvIo9HvCJ6ZKzZq8K+xJUD6KYtve/O3e59f0Wd/dnLVVf/1giuSq/43+l2u+o9C5b+WeV7iqv9U/uzPjp//se95M6l9ZHp6fYDkOT1qe8FvHAy8iPLQ/NJb/P0z3haAv/tsrrrqv0lwRXLVVf+/UfmvZZ6XuOo/xa+93EOPrdb53j//Y9/1seBbbF6gVzu2zbfcfYnGiyQm+Br+9/t14KW54jRX/W8UXJH83/TtwC9zhbnqqheMyn8t87yCq/5D/cJLPfSR2fLDVuvp/TEbvAh2SvChNxzn6+7a5V9g4AeAX+N/v+PAKa763yy4Ivm/6Vu46qoXDZX/WsnzElf9u/mzPzt+4Se/583d8iNzml6Pf4M3PLHDMlt++z37AgwEz9aAAvwo8AFcddX/DMEVyVVX/f9G8F/LPC9x1b/Zz7zao7Z//sUe/NG/+OPf+SS39jPg1+PfQrqvSF/wttdc+yDgxYHvAtY8268Dbwa8M7Diqqv+ZwiuSK666v83Kv+1zPMKrvpX+/UXf8i1S/wh2l1+hOGkzb+JxF8gvvXk1g3f96p/9EdLnu39gVuAN+CKdwUucNVV/7MEVyRXXfX/G5X/WsnzEle9yH7mZR/28BjaRyxpH4BZmH8LDZJ/BvGtb/53t/06l93GVVf9LxRckVx11f9vVP5rmeclrvoX/dJLPfTVW5s+0sP4tpjCv4HQ3eDvdZ193Zv/zZPu5Kqr/vcLrkiuuur/Nyr/tczzCq56vvzZnx0//2Pf82YoP2Waplfh30jiL8Lla6+Zn/yhl/+Lvxi56v+TzwAeDqyAjwaW/N/yIcAZYOSqq/5/o/JfK3le4qrn8Ocv93Ib96zOvfcv/vh3fizwMMy/mtBK4vuD+Lo3+fun/y0APJ1/pQYkV5ir/jd6HeB1uOLj+b/n57nqf7NPBE4BR8DncNW/B5X/WuZ5iasu+62XfvDxw+aPuHd97iOMz9j8W5wT+qa54hte/++ffi//Pm/CVf/bBc+WXHXV/ywfDDwEuAh8Dlf9e1D5r2WeV/D/3G+93CNPH6yHDz+Y/FHYx82/nsTTTHztLbHz7S/1t397yFVXXRE8W3LVVVf9X0Xlv1byvMT/U7/ykg+7Zsj2oYer9ceAd/g3kPiLcPnag8e8/A+844/9WOOqf40PAXb4vy14tuSq/21eAzjOFT/HVVe9YFT+a5nnJf6f+bWXe+gtq3V+3JDjB2AW5l8tLf1itb/4Tf/+tj8A4B+ezlX/an/G/33BsyVX/W/zlcDLc0UA5qqrnj8q/7XM8wr+n/iVl3zQQ4bURw+r9kHgGf9KQiuLH6sRX/Amf/v0J3LVVf+y4NmSq6666v8qKv+1kucl/o/75Zd6+IuN0/ipQ/qdsEvyryN0T4ivi+2tb37jP/qHC1x11YsueLbkqquu+r+Kyn8t87zE/1G/8pIPe/Ehp88ep+FtgMD8qwjdCnzZ5hl95+v89q0rrrrqXy+4woC56qqr/q+i8l/LPK/g/5ife4kHPxr7U4cc3xVT+FeSeJqJr42b6ze/6S89Zc1VV/3bBVckV1111f9lVP5rJc9L/O/UAy8JHAfOA3/7Sy/94JvbmJ+C831tKv9KEn8XLl9+8JiX/4F3/LEfa/w9V1317xVckVx11VX/l1H5r2Wel/jfZRv4DOBDgC2eKWD4/rvO1rc9fTJ6xL9GoL9y+Ive7G+f8eOSzD88nauu+g/yXcBNwAb/N30YMAfuBb6fq676/4vKfy3zvIL/Pa4DfhN4NCAeIKH/gfsO+dPzR3zeI25kswT/Ekl/YMeXvNk/PP3nAJC46qr/YF/D/22fBlwP3Al8P1f9b/OzwLXAAVf9e1H5r5U8L/G/g4CfBB4JiBfgyc189a338GkPu4EXROLXi/SZb/J3z/gj/mf7FuBVueLVgD2uuup/luCK5Kr/jT6aq/6jUPmvZZ6X+N/hbYBX4UXwx6uJfzha82IbM+4nMOLHq8sXvPHfP/1v+N/hIcCLc0Xlqqv+5wmuSK666v83Kv+1zPMK/of785d7uY13/Ju//KynTeZF9XsXdnmxjWsBkPh1hz7pLf72GX/JVf+TfAZwAtgHPour/jcKrkj+b7oHuJ0rzFVXvWBU/mslz0v8D+XP/uz4hZ/4zre7Z3XuS8fkwfwr3HY0IfHrxfVT3+Tvn/ZnXPU/0QcCNwH3AZ/FVf8bBVck/ze9BVdd9aKh8l/LPC/xP9DPv8Qtr//zP/5dX4F5STD/Wk+Z2t+++d/f9gZcddVV/5mCK5Krrvr/jcp/LfO8gv9BfvElH/zKmfklTl4TzP1u6gu3ryZeRG1p/pirrrrqP1twRXLVVf+/UfmvlTwv8T/Az7/4gx4D/pzW8h14Pl719A5/dMcFXkQF+HGuuuqq/2zBFclVV/3/RuW/lnle4r/RL77kw29qOX6u8XtiCi/Aax7b4ifvvsjTm/kXJPCbwK9x1VVX/WcLrkiuuur/N4L/WuZ5Bf8N/vzlXm7j5178wZ/dcngi9vtgCi9EAJ/+sOs5I/FCGHgi8K5cddVV/xWCK5Krrvr/jeC/VvK8xH8h2/r5l7jlHe5ZnXsczs/CbPAiuqar5z7/Edd9GvAdwMhzWgNfDbwScJarrvqf4ZWB1wdekf+bfhP4deDvuOqq/9+o/Ncyz0v8F/mlF3voK/ziSzz4q21eFcyLSuIQ8/Wx1X/hB/3JbXtc8bHAM4DjwH3AQ4Ajrrrqf5ZvA14cWAIb/N/zplz1v9nDgR5owBO56t+Dyn8t87yC/2S/+JIPv6nl+IXN07vbiBeRpBH7uzYX8Vmv82e33sNz2gMGrlgBR/zf88XA93LFAVf9bxRckVx11f88vwo8BLgInOSqfw8q/7WS5yX+k/z5y73cxt3r85/YcvhEzMK86Cz9PLV87Fv89dOezP9fv8lV/9sFVyRXXXXV/2VU/muZ5yX+g9nWL7zkg97+7tW5Lwffwr+G9MddxCe+8d8+/fe46v+6HwdOAZf4vyu4Irnqqqv+L6PyX8s8r+A/0C++5INf+Rde4kFfb/NyYF5Ukh5PxCe/+d8+/We56v+Lj+H/vuCK5Kr/jX4deFmuOMlVV71gVP5rmecl/gP81ss98vT+ev3FreX7AMGLSOgehz9z89RDvut1fvu3J/513gHogRVXXfU/U3BFctX/RseAE1whwFx11fNH5b9W8rzEv4Nt/dKLP/Q9jtbrL5d9hheRpNHom2Kzfsab/slT9uA2/g1+l6uu+p+tcEVy1VVX/V9G5b+WeV7Bv9HPveSDXvbnX+LB3wB+ZcyLTOLXo/NHvelfPeNxXHXV/23BFclVV131fxmV/1rmeYl/pZ9/iVtO2PHZZH4YpvAiEnoS4mPf/O+f8QtcddX/D8EVyVVXXfV/GcF/reR5iReRbf3iiz3kPWU9EedHYgovCmlXwSc/5LFbL/Hmf/+MX+Cqq/7/CK5Irrrqqv/LqPzXMs8reBH84ks96GV+/iUe/A3gV8G8qBLpB/qoH/9Gf/vU+/g7rrrq/5v7gDmwz/9N1wFrYAAOueqq/7+o/Ncyz0u8ED/zao/ajkvrz29TfjgQvIgkfrev8VFv+Ne3/jVXXfX/10vzf9ttQAf8DfDSXHXV/19U/mslz0u8AD//4g96M3ZX32D8IF5EEneGy6e+yd897fskmav+Pd4TuAZI4Cu56qqrrvqP9ShAgLnq34vKfy3zvILn8luv8ODrDpf5tbbfgReZBosvv352+gte/i/+4giJq/7dPhZ4KaABX8lVV1111X+skav+o1D5r2Wel3gm2/qlF3/oexwcta8ETvEiEvxerd2HvPHfPOUf4BlcddWL6DFAD4zA47jqqquu+t+Lyn+t5HkJ4Gde9mEP//kXf/A3g1+PF5HgAsGnvNnfPuPbJJmrrvrX+VXgJuA+4Fquuup/ng8GdrjCXHXVC0blv5Z5LoL4uZe45ZNYT59tPOdFILCl79+czT72df7iSeeQ+G/y6cAWsAt8MVddddVV/7H+gquuetFQ+a9lHuDRNfjIB19bnHwxmBeFxN+BPvgt/v4Zf8h/v48ArgFuA76Yq6666qqrrvrvQeW/VgIIeK9rt3ib0ycJEC8KcQTxZQ95zOYXvtiP/cPAVVddddVVV111Pyr/tfzoGnzUg6/lplnHi8rSz5cuPvzN/urpz+Dvueqqq6666qqrnhOV/yK/9doPnj/+juGDb5xVgheVblOJj3iLv336z3LVVVddddVVV70gBP8FfuElH/xKh+f8lzfP6jsF/zKBBd+ax+cv/uZ/+/Sf5aqrrrrqqquuemGo/Cf685d7ue7u9flPy8xPxxReFNLTI3j/N/3bZ/wmV1111b/XE4EK3AW8Bv/3XAccBwauuur/Nyr/SX7pxR/ykveszn0P+KV5EQgMfNumtz7udf72Hw646n+CPwLOAo2r/rc6CZwGgv+bLgAXuOp/q58GbgQuAa/PVf8eVP6D/fnLvVx3z3D2Y6fMzwX3vAgknpaK933Lv7v1d7jqf5IP4ar/7YIrkquu+p/nJYGHABe56t+Lyn+gX36ph7/YPetzP2DzUmD+Jc3w0+cv0G92L/utT7t4iauuuuo/WnBFctVVV/1fRuU/gG39wks+6AOmNnylzSYvgmesR77m6ffw5GaANVdd9V/vZkCA+b8ruCK56n+jjwFu4YqP4aqrXjAq/06/+DIPP/OLL/Gg77B5C14EzfDT5y/wPfceYJ4l+N/pZ4FjwDmu+t/K/N8WXJFc9b/RuwIvzxUfC5irrnr+qPw7/NxLPOhN2zh+J+ZaXgSr5Imf9KTbH/W0Zp6L+N/pA7jqqv/ZgiuSq6666v8yKv8Gv/XaD54fnONLlPkRBvEvSxRf/+FPufOH7m3+I56XuOqqq/4zBFckV1111f9lVP6VfvmlHv5iB+fGH8R+SfMvE3pGht7rLf/u1t8BXobnL7jqqqv+MwRXJFddddX/ZQQvItv6uRd/8Ee1afwL7JfkRSDxY4Rf5i3/7tbf4Qrz/ImrrrrqP0NwRXLVVVf9X0blRfBbr/Dg637hJR70vZg3SP5lggsufNCb/+1tP85zMs+fuOqqq/4zBFckV1111f9lVP4FP/fiD37twyP/oOF6XgQSvx7Rv8+b/u1T7uB5Jc9fcNVVV/1neCNgEzjk/55t4CeBA+AvgM/nqqv+/6LyAtjWL7zkgz7Rzi8wFP4FQivCn/1mb/e+X6bP/uzk+TPPn7jqf6ITQAUMnOOq/41+nf+7OuD1uWKDq/43+hRgB1hx1b8X4vn4xZd5+BkP4/cmfmNeFOLvO5d3f+N/ePrf8MK9GPD3PK8zwDmu+p/mr4GXAhpQueqq/1lOAue54leBN+L/nj8DXp4rAjBXXfX8ETyXX3mJh7xmG4a/TvzG/AsERvG15eb+5d/4H57+N/zLkucvuOqqq6666qqr/q2oPJM/+7Pjl378uz55dPscoPIvELonCu/2pn9762/y97yozPMnrrrqv94vA9cB54HX46qr/uf5OeAfuMJcddULRgX4rZd75Omf/7Hv+l7wm/AikPTbdbbxrm/8F4+/m38d8/yJ/50eBBRgAm7jqv9tXgy4CbiPq676n+lzueqqFw3xcy/1kFc8XK3/DPwm/AsEFnzJ0WNe8fXf+C8efzf/esnzF/zv9KfAU4Hf46qrrrrqqqv++1DV8rOMH8y/QOieKLzbm/7tM36Tf7iNfyPz/ImrrrrqqquuuurfiqjbW++B9HReCEm/XecbL/umf/uM3+Tfxzx/4qqrrrrqqquu+rci3viP/uHCrOptEUuei8CCLzl6zCu+/hv/xePv5t8vef6Cq6666qqrrrrq34oAeMO/vvWvJT6aBwjpbCHe5M3/4bZPfscf+7HGfwzz/Imrrrrqqquuuurfisozvfnf3fatP//iD3ol2+8r6bfLbONd3/gvHn83/7HM8yeuuuqq/wxfBCTwJOB7+L/lCPhkoAL3cNVV/79ReYCT2zd8+MWDu/7y8NGv+M3v+GM/1viPlzx/wVVXXfWf4ZMAAX8BfA//t6yAL+Gq/83eAzgGrIBv56p/D8R/rZuA23leDweeyv8+9wLXALcBD+L/njNABxi4m/97bgduAu4DruX/pgQE/AXw8lx11f8sTwMeAlwETnLVvweV/1rm+RNX/U90lquuuuqqq/43oPJfK3n+gquu+q/3scAmsOSqq/5neiSwwRV/zVVXvWBU/muZ509cddV/vR/jqqv+Z/sB4OW5IgBz1VXPH5X/Wub5E/87PQoQkFx11VVXXXXVfx8q/7WS5y/432mXq6666qqrrvrvR+W/lnn+xFVXXXXVVVdd9W9F5b+Wef7EVVddddVVV131b0Xlv1by/AVXXXXVVVddddW/FZX/Wub5E1ddddV/hh8BCnAX//ccB96AK54I/C1XXfX/F5X/Wub5E1ddddV/hnfh/67rgB/liu8H3oOr/rf5M+AuYI+r/r2o/Ncyz19w1f9EXwc8DGjAW3DVVVdd9R/rnbjqPwqV/1rJ8yeu+p/oNYCXAhpXXXXVVVf9T0blv5Z5/sRVV/3Xe39gGzgEvpWrrvqfxzybueqqF4zKfy3z/AVXXfVf77OAm4D7gG/lqqv+53lFrrrqRUPlv1by/In/nX4VOAncA7w5V1111VVXXfXfg8p/LfP8if+dXgq4BriNq6666qqrrvrvQ+W/lnn+gquuuuqqq6666t+Kyn+t5PkTV1111VVXXXXVvxWV/1rm+RNXXXXVVVddddW/FZX/Wub5C6666qr/aBV4NHAEHAH38H/LCvgHYAGc5aqr/n+j8l8ref7EVVdd9R/tBPB3XPGLwJvxf8utwItz1f9mm0AABg646t+Dyv8M4qr/ib4WuBZIrrrqqqv+4/0d8BDgInCSq/49qPzXSyB4TsFV/xN9J1ddddVVV/1vQOW/nnle4qqr/uv9IXANcIGrrrrqqv/dqPzXM89LXHXVf7134qqr/mf7AeDFueKluOqqF4zKf73keQX/O308sAAOuOqqq676j/dI4CW5QoC56qrnj8p/PfO8xP9O38dVV1111VVX/fej8l/PPC9x1VVXXXXVVVf9W1H5r5c8r+Cqq6666qqrrvq3ovJfzzwvcdVVV1111VVX/VtR+a9nnpe46qqrrrrqqqv+rQj+6yXPK7jqqqv+o50FBJwE3on/e14TmIALwOdz1VX/v1H5r2eel7jqf6I3BE4ACfwYV/1vdZH/uwpwAlhw1f9GrwV0QOOqfy8q//XM8xJX/U/0pcBLAQ34Ma666qqr/mPdzlX/Uaj810ueV3DVVf/1jgEFSGCXq6666qr/vaj81zPPS1x11X+9vwduAu4DruWqq/7n+SzgNFeYq656waj81zPPS/zv9PbASaAB38FVV1111X+sX+Sqq140VP7rJc8r+N/ps4AXB1bAd3DVVVddddVV/z2o/Nczz0tcddVVV1111VX/VlT+65nnJa666qqrrrrqqn8rKv/1kucVXHXVVVddddVV/1ZU/uuZ5yWuuuqqq6666qp/Kyr/9czzElddddV/tIcBPwIsgZ8Fvoz/W/4SeHlgE7iHq676/43Kf73keQVX/U/0dGAOTFz1v9ECeDmueAr/9xwAf8FV/5t9I3AdsA+8F1f9e1D5r2eel7jqf6K34aqrrrrqP88bAw8BLnLVvxeV/3rmeYmrrrrqqquuuurfisp/veR5BVdd9V/vlYAKNK666n+mdwWu44qv5KqrXjAq//XM8xL/Oz0OWAMDV/1vdBdXXfU/28cAL88VXwWYq656/qj81zPPS/zv9E5cddVVV1111X8/Kv/1kucVXHXVVVddddVV/1ZU/uuZ5yWuuuqqq6666qp/Kyr/9czzElddddVVV1111b8Vlf96yfMKrrrqqquuuuqqfysq//XM8xJXXXXVf7S7gA8CAriN/3seAXw8MAG/CPwCV131/xeV/3rmeYmrrrrqP9oF4Fv5v+sm4AO54hD4Ba763+ZrgJPAEVf9e1H5r5c8r+Cq/4n+BHgpYAK2uOqq/1mCZ0uu+t/oa7jqPwqV/3rmeYmr/ieaATOgctVV//MEz5ZcddX/b1T+65nnJa666r/edwJngIvAe3LV/zbBsyX/N/0psMcV5qqrXjAq//XM8wr+d9oBCmBgl6v+t3kD4CbgPq763yh4tuT/pg/jqqteNAT/9ZLnJf53+gPgAnA3V1111X+14NmSq676/43Kfz3zvMRVV1111b9O8Gzmqqv+f6PyX888r+Cqq6666l8neLbkqqv+f6PyXy95XuKqq6666l8neLbkqqv+f6PyX888L3HVVVdd9a8TPFty1VX/v1H5r2eeV3DVVVf9R3sQ8CZAAn8B/AX/tzwJ+BZAwN9x1VX/v1H5r5c8L3HVVVf9R3sY8E1c8aXAX/B/y98BH8xV/5u9PrAJDMAvcdW/B5X/euZ5iav+J3p3YBMwV1111VX/8b4VeAhwETjJVf8eVP7rmecVXPU/0d9z1VVXXXXV/wZU/uslz0tc9a8RwEOBlwIeCvw08GT+7zgJvCTwYsBZ4Ef5z/FlwDHggP86HfBo4CWAm4FvBi7xf8eNwIsDjwX+Gvgt/u/YAF4MeElgB/gq/vMdAypXnOc/j4CHAC8JPBz4JeAfuOp/Eyr/9czzElf9Sx4GfArwksCLARtcYeAH+N/vU4DXAl4cuJFn+1z+83wt/zVeDfhQ4MWBxwAdV9wLfBn/u3XAVwAvAbwkcJJnewf+93sH4J2AlwQeBgRX/CbwVfzn+3Xg5bkiAPMf50bgs4CXBF4M2OLZfo6r/rch+K9nnpf43+lNgIcBj+U/3wXgx4EbgA2e7a+Bu/jf75eB+4AbeU6/xP9+Twd+DngU0PFsvwwk//v9CBDASZ5tBH6d//3+EvgT4BFA8Gy/xP9++8CPAqeBLZ7tqcATuep/G4L/esnzCv53ugN4GvB0/vNdBH4ZeBLP6Zf4v+GvgJ/jOZ0D/oz//e4CfhjY5zn9Ev/7jcAfAL/Nc/pDYJf//Z4KfD/P6xf5328P+HXg73hOv8RV/xtR+a9nnpe46kUh4KV5Tr/I/x0vw3P6FaDxf8PNwGmebQJ+lf87Xpbn9Ev83/EyPKdbgcfxf8fL8Jx+kav+N6LyX888L3HVi+JlgBM820XgT/i/43V4Tr/I/x2vy3P6I+Ai/zdU4NV5Tr/I/x2vw3P6Rf7veAjwIJ5tCfwOV/1vROW/XvK8gqteFG/Kc/plYOL/htPAK/BsDfgV/u94U57TL/F/x6sBx3m2O4C/5/+ON+M5/RL/d7w5z+k3gSOu+t+Iyn8987zEVS+KN+U5/RL/d7wJUHi2PwHO839DAV6f5/SL/Oe7APw+sADu5D/Pm/KcfgEw//muBR4OrIA7gXv4j/cQ4DE82xr4bf7veFOe0y9x1f9WBP/1zPMSV/1LTgGvyLMl8Cs8Ww+8D/CjwPcBD+N/lzfhOf0Sz+llga8HfhZ4L/53eTXgJM92J/C3PNsx4OOAnwa+HjjJf4y/Bl4DeHnga/nP86Y8p1/iOb0R8J3ATwGvz3+c1wZ+H/hz4D34z/EmPKffBg54tpuAzwN+DvhsoOd/jw3gtXlOv8SzVeDdgB8Gfgh4LP/x7gCeAdzGVf9eVP7rJc8ruOpf8sZA4dn+HLiPKx4B/AjwMjzbywGP5d/n04GbgQZ8KP95CvBGPKdf4ooCfCHw8UBwxVsAtwG/xf8Ob8Jz+iXAXPEawA8CN/FsZ4B34n+HW4AX59nWwG9wxTbwHcA78GxvBDwSuIN/v+DZkv8cb8pz+kWe7d2AbwK2ueLNgQZ8Hv87vC4w59meADyNK24Bfhh4FZ7tVYGHAyP/cV6Tq/6jUPmvZ56XuOpf8iY8p1/iikcBvwVcz3N6DHAtcC//dm8PvBTQgA/lP88rAyd5tnuAvwQC+E7gPXlerwn8Fv87vCnP6Ze44vWBnwUWPKfX4n+PN+U5/R5wAGwDvwS8Gs9pAbwScAf/fsGzJf/xFsDr8Jx+iSs+BPgGQDyn1+R/jzflOf0SVzwI+G3gwTynW4AHA0/mqv+JCP7rmeclrnphCvDGPKdfBE4Cvwr8BvDDPKcE9vnf4U15Tr8MGPgi4JWBTwQaz2mPf783Bd4eeHP+89wMvCTPNgC/DrwY8BPANwK/z3Pa43+PN+U5/RIg4Ee44ot4Xrv8xwieLfmP99rABs/2ZODJwFsBXwh8OvB0ntMe/3u8Kc/pF4Et4FeAvwC+i+d1iav+pyL4r5c8r+CqF+YVgVM8233AnwPfBnwx8B7A3/Cc/h444n+HN+U5/SLwhsArA68IfBsQPKc/5d/vW4AfA76D/zxvynP6A2AEvgt4O+Djgdt5Tn/K/w5z4HV5Tr8IfAxwH/DawC/xnBL4C/5jBM+W/Md7U57TLwE3AZ8PvArwhcABz+lP+Y/1ZsDNwM2A+Y/zYsCDeLYD4PeArwe+C3h74M94Ts8A7uOq/6mo/Nczz0v87/QVwM3ACLwb/3nelOf0K8AHAX8GfBNXvDbP6Vf53+FG4KV4tgn4W+AbgLcELgFvBYhn2wX+lP8d3pTn9IvAlwGfB/w6IOA1eU6/yv8OrwVs8mxPBzaBVwHeGWjAa/Oc/gTY5T9G8GzJf7w35Tn9CvBNwLsATwDOAC/Gc/pV/mPdx3+ON+U5/QbwdsDdwJdwxWvznH6Vq/4no/Jfzzwv8b/TGwIvDqz4z/VmPKdbgdcD3oErNoHX4jn9HP87vCkgnu0Pgc8FPhK4xBVvynP6ZWDkf74Z8Lo8pxmwD/wcV7w0cCPP1oBf5H+HN+U5/Q7wxcA7AY0r3pTn9PP8xwmeLfmP9RjgoTzbEnhN4EeAv+eKNwGCZ7sT+Gv+d3hTntMTgHcB3porKvCGPKef46r/yaj810ueV3DVC3I98NI8p3cGXgswV7weMOfZLgJ/yP8Ob8JzegTwi8DjuELAm/KcfoH/HV4L2OLZVsBbAK/Js70pz+lPgHP87/CmPKc3At4PuMAVp4FX4Dn9PP9xgmdL/mO9Kc9pH3gU8Mk825vwnH4eMP/zHQNejef0TsDrA40rXg04zrMtgd/gqv/JqPzXM89LXPWCvCkgntP3AHfzbG/Kc/pFYOJ/vh54fZ7TCvhqnu0lgZt4tgb8Ev87vCnPaQ58ITDwbG/Kc/o5/nd4FPBwntM/AL/Es70xUHi224C/5T9O8GzJf6w35TmdAD6ZZyvAG/Kcfo7/Hd4Q6HhOPwo8lWd7U57TbwBHXPU/GZX/euZ5iatekDflOd0OfBXP6Y15Tr/A/w6vCWzznD4BWPNsb8pz+kPgPP87vCnP6TeBn+XZTgKvxHP6Of53eFOe0wR8DM/pTXlOP8d/rODZkv8428Cr85y+Hngiz/aqwEmebQn8Fv87vAnP6T7gC3lOb8Zz+gWu+p+O4L9e8ryCq56fDnh9ntMnAUc820sCD+LZJuBX+N/hTXhOvwv8BM/pTXlOv8D/Do8AHsGzJfAxPKc3AQrPdivwD/zHqcAJQPzHexOe07cCf8+zFeCNeE6/yH+sAdjlCvMf5w2Anme7AHwez+lNeU6/DhzxP5+AN+E5fRZwiWd7EPBiPJuBX+Cq/+kI/uuZ5yWuen5eHdjh2XaBH+c5vSnP6Q+BC8DLAWf4n+1NeU7fznM6Cbwyz+nngDnw2vzP9qY8pz8B/pbn9CY8p5/nitcG5vz7vTZwAUjgi/mPswW8Js/p23hOrwyc5NkOgd8EbgBegv8Y3wGcAAR8J/9x3oTn9OPARZ7Tm/Kcfp4r3pj/2V4WuI5nWwHfx3N6U57T3wK3Ay8J3MBV/1MR/Nczz0tc9fy8Kc/pl4GR5/RaPKdfB24Cvh4Y+ff5EeCbgG/iP95DgUfzbA34RZ7TqwGVZ7sLeBzwNcCN/M/2pjynn+d5vTbP6deBVwY+BRj49wuerfEf5/WAGc92O/A3PKfX4jn9AZDA9wAd/3MJeFOe08/znE4CL8Fz+nXgPYG35H+2N+U5/RZwyHN6LZ7TrwNngG8FJv5j/TWwCzydq/69qPzXS55XcNXz86Y8p5/jeb0Mz+ka4GeAjwV2+ff5Iv7zvBnP6Y+A8zynl+E5HQBfCmwDP8D/XJvAa/Gcfo7ndA1wI8/pxYAvBd4QSP79gmdL/uO8Kc/p5wHznF6W5/V9wG8Cf8n/XC8N3MCzLYHf4Dm9NCCeLYE3BT4AeBX+Z3tTntPP8bxehud0DPgZ4POB+/iPtQMcA5Kr/r2o/Nczz0tc9dweDDyWZ5uAX+Y5BbDFc/og4D2B3+F/tjfhOf08z2uH5/RI4LHA2/Mf41ZgDZzjP9brATOe7RnA3/GctnleHw+8CfAM/mMEz5b8xxDwpjynn+d5bfOc3hD4auCL+Z/tTXlOvwEc8Zx2eE4BfCTw+sAR/3OdBl6BZzPw8zyvbZ7T+wAfDPw8V/1PRuW/nnle4qrn9srA03i2vwQu8JwS+HDgK4AN4PeAzwT+mP/ZOuBBwNN4tp/leX0N8BrAKwBPA74B+Hpg5D/Ga/Cf42WAp/FsP8TzeirwhcDHACPwi8CnA0/lP454NvMf42HAADyNKwbgN3lenwE8FHgI8PfAlwA/xP98LwY8jWf7MZ7XLwA/CrwNsAv8EPC5wHn+430l8EiueHP+fV4ZeAbP9mTgdp7XRwFfDxwH/gj4LOB3uOp/OsR/ve8G3ovn9N3A+/C/z8cA1wIT8On89wog+b8pgOT/JnGF+Y/3FsDPcsVnAZ/Lf70Akv+bAkj+c/0Z8PJcEYD5rxNA8p/racBDgIvASa7696DyX888L/G/01fxP0fyf1fyf5f5zxM8W/LfI/m/K/m/LbnqfxMq//XM8xJXXXXVf7Tg2ZKrrrrq/zIq//WS5xVcddVV/9GCZ0uuuuqq/8uo/Nczz0tcddVV/9GCZ0uuuuqq/8uo/Nczz0tcddVV/9GCZ0uuuuqq/8sI/uslzyu46qqr/qP9AvAw4CWA7+P/nncHngr8DfAWXHXV/29U/uuZ5yWu+p/opYBNwMAf8aKbAWv+e82ANf95ZsAAmP8+M2DNC3YAHPB/1zHgoVxxmqv+N3pnYAGMXPXvRfBfzzwv8X9fB7w28M789zsFfCDwCF647wH+APg9/mWPBj4d+G3gjfnvdwz4aeB7gTcE5vz7PRj4aOA3gPcEzH+vCnwf8GPAWwNb/NttAW8NvA7//R4LvCdwDf9xjgPvALwK//1eDnhn4CT/cU4D7wq8NP/9Xg14O+AY/7I/BX4H+EOu+vei8l8veV7B/003AW8BvBvw0sBdwKvw3+88cAfwOOAs8NvA9wG/DSx50RwH3gB4R+AVgRlwEvgw4NeBTf57HQIfDfwh8I7AJeAO4MeBnwEex79sA3hd4B2AVwcWwGngS4AfBDb57/dxwG8BPwxcAs4DPw38OPCXvHAvBrwd8HbAo4FfAd6W/36PA94JuAd4CvBLwA8Dfwo0XjQCXgp4B+CtgEcBPwC8D//9/gJ4H+D7gScDPwv8GPCXQPKiCeDlgHcC3gx4JPDVwA/y3++PgO8Hfhh4AvDTwI8Df8NV/5kQ//W+DvhwntNPAG/P/34FeGngY4E3BjpgARTgAvC9wJL/OR4OvDmwAQzAABwB3wT8HPAdwEsBDajAQ4E3A94NeDFgi/+dErgTOAF0wN3AQ7jiwcCbA+8AvARwgv+dDNwD/C3wncCvACPwqsCnAS8LBLAJNOB24EeA5H+O1wBeAZgDa2AA7gO+EvgZ4K2Br+eK9wV+FHh94FOBRwEV2AAm4KnATwHmf443Al4C6IE1MAB3AV8L/CRwD/A+wA1c8c3A6wOfADwCqMAGMAD/APwS/7O8FfAIoAeWQANuA74c+Clgl6v+IyH+630t8BE8p58E3o7/fV4ZOAm8DvCKwIsDAk7wv1sDzgMngQok8BXAhwId0PN/ywi8DvBawCcAG0DP/w0TUIA1MAAF2OR/tzVwCajASa64B6jABrDB/25L4ADYA34BCOBNgW1gG5jzv9sRcAScBb4P+F7gTq7696LyXy95XsH/Tt8GvDiwBj4UeFfgUUAAx/jf6yJwBHTACcDAJwKfArw08B7AOwEngQoE0ID7gCfzP8sW8OJAzxUTMAB/DrwkcBy4CPwB8AfAFwIvBrwz8A7Ag4EOCCCBS8DfA+Z/jjnwUsCMKyagAX8HfB/wN8ArAu8IXA90QM//TgYuAReAO4HX44o/Bh4CnAI6oON/pwZcAi4CPw38KCDgEvCWwABcBxT+d5qAfeAc8OPAzwB3ctV/BMR/va8CPprn9DPAW/O/z98BLw6sgAVXFODNgPcDXg6YAzvABHwW8Lf8z/GxwGsDCSyBs8BvA18E3Ar8NfBSQAMqz+t64C2BdwUeClwLfDvwofzP8PLA7wEDcC/w88APA38OJHA7cBNwH3Atz98p4I2AdwNeArgW+A3gLYDGf7+HAn8OdMBZ4DeA7wf+AJh4XhvAewDvALwY0APHgUvARwJn+Z9hBnwl8GBgBayBZwA/A3w9cB74MODrueJ9ge8CtoH3B94OeARQgBPAOeDDgT3+Z9gCvga4ATgEVsCtwI8D3wxc4vk7Dnww8FbAQ4EKHAfuBD4SWPI/wwnga4AzwD4wAE8CfhT4DuCAq/6jIf7rfSXwMTynnwXeiv99/g54cWAFLHj+rgXeHHgP4NHA2wO/z3+/rwLeAfh14PuB3wPWPKe/Bl4KaEDlhavAqwBvBfwp8KP897oF+CTgj4FfAs7xvG4HbgLuA67lXxbAywJvCdwDfBNg/vucAj4NeDLwM8Bd/Os9Enhb4J2BBfB6wB3899oAfh64Gfhp4EeAvwSS5/RhwNdzxfsC38XzenHg7YG3Bybg9YFz/Pc6DvwqsAX8JPBjwN/wryfgpYF3AN4WOA+8MbDPf69rgV8HDPwY8BPA47jqPxviv95XAB/Lc/p54C343+fvgBcHVsCCf1kBXgz4O8D89zkFbAO38sL9NfBSQAMq//fcDtwE3Adcy1UbwIOAx/Pf68HAPnCeF+7DgK/nivcFvosXbhu4HngS/70eDpwFLvEf6zhwEnga/70eBdwJHHDVfyUq//WS5yX+f2jA3/Lf7zxwnquuek5HwOP573cr/zn2gX3++z2F/xy7wC7//Z7IVf8dqPzXM89LXHXVVf/RXgP4CMDAtwG/zv8tvwS8I1CAv+Kqq/5/o/Jfzzyv4Kr/iZbAETBx1f9GtwDvwBV/BPw6/7c8DXgaV/1v9hnAaeAQ+FSu+veg8l8veV7iqv+JXoWr/jcLni256qr/ed4HeAhwEfhUrvr3oPJfzzwvcdVVV/1HC54tueqqq/4vo/Jfzzyv4Kqr/uu9DTADBv5vCp4tuep/o9cDTnLFj3HVVS8Ylf96yfMS/zvdAWwAa6763+jP+b8teLbkqv+Nvhh4ea4IwFx11fNH5b+eeV7if6c34aqr/ucKni256qqr/i+j8l/PPK/gqquu+o8WPFty1VVX/V9G5b+eeV7iqquu+o8WPJu56qqr/i+j8l8veV7iqquu+o8WPFty1VVX/V9G5b+eeV7BVVdd9R8teLbkqquu+r+Myn8987zEVVdd9R/tD4EvBgT8A//3vAHwslzxo8DTueqq/7+o/NdLnpe46qqr/qP9BfAX/N/1asBnccXfA0/nqv9tfgw4Axxw1b8Xlf965nkFV/1P9DPAY4EJeAxXXXXVVf+xPomr/qNQ+a9nnpe46n+iBwEPBxpXXXXVVVf9T0blv17yvMRVV/3X+wLgBLAHfDJXXfU/zzOAY1xhrrrqBaPyX888r+Cqq/7rvSdwE3Af8MlcddX/PG/PVVe9aAj+65nnJf53+gPgAnA3V1111VVXXfXfh8p/veR5if+ddoATwIqrrrrqqquu+u9D5b+eeV7BVVddddVVV131b0Xlv555XuKqq6666qqrrvq3ovJfL3le4qqrrrrqqquu+rei8l/PPK/gqquu+o/2COAxwBHwD8Dd/N/yOODngAVwjquu+v+Nyn8987zEVVdd9R/tzYGv5Ip3B36A/1t+FPhRrvrf7MWAGTABf8tV/x5U/uslz0tc9T/RxwPHgeSq/42CZ0uuuup/np8DHgJcBE5y1b8Hlf965nkFV/1P9Otc9b9Z8GzJVVdd9X8Zlf965nmJq676r/cDwElgj/+bgmdLrrrqqv/LqPzXS56XuOqq/3qfzP9twbMlV/1v9HvAy3HFBldd9YJR+a9nnlfwv9MHAFtActVV//MEz5Zc9b/RHFhwhQBz1VXPH5X/euZ5if+d/pirrvqfK3i25Kqrrvq/jMp/veR5iauuuuo/WvBsyVVXXfV/GZX/euZ5BVddddV/NPFsyVVXXfV/GZX/euZ5iauuuuo/WvBsyVVXXfV/GZX/esnzElddddV/tF3gacAJYOD/ntPANrAL7AGNq676/4vgv555XsFVV131H+0rgYcBJ4Hf4P+ezwOeBlwAXoar/jdqQAKNq/69qPzXM89LXPU/0fsD1wEJfCFXXXXVVf+xHsFV/1Go/NdLnpe46n+iDwdeCmjAF3LVVVddddX/VFT+65nnFVx11X+9lwZmwAj8JVddddVV/3tR+a9nnpe46qr/ej8H3ATcB1zLVVf9z/O+wBZXmKuuesGo/NdLnpf43+mjgeuACfh0rrrqqqv+Y/0dV131oqHyX888r+B/p/cBXhIYgE/nqquuuuqqq/57UPmvZ56X+N8puSK46qqrrrrqqv8+VP7rJc9L/O9krgiuuuqqq6666r8Plf965nkF/zslVwRXXXXVVVdd9d+H4L+eeV7if6fk2cRVV1111VVX/fcg+K+XPC/xv1PybMFVV/3P8unABeBO4DX4v+fjgJPATcDfcdVV/79R+a9nnlfwv1PybAE0/m/5HeB2oHHV/0Zz4ARwAtjg/54j4Ai4yFX/W/0icDNwCXh1rvr3oPJfzzwv8b9T8mzB/z0fxVVXXXXVf55HAw8BLnLVvxeV/3rJ8xL/OyXPFlz1v80aGIA1V1111VX/u1H5r2eeV/C/U/JswVX/2zycq676n+2TgAdzxYdw1VUvGJX/euZ5if+dfhZ4Ilc0rrrqqqv+Y7098PJc8aGAueqq54/Kfz3zvMT/Tl/JVVddddVVV/33o/JfL3lewVVXXXXVVVdd9W9F5b+eeV7iqquuuuqqq676t6LyX888L3HVVVddddVVV/1bUfmvlzyv4Kqrrrrqqquu+rei8l/PXHXVVf8VvhX4bSCAv+X/nk8A3hBowIcCT+Oqq/7/ovJfzzx/ASRX/U9yHdADBm7nqv9tbgNu4/+uRwCvzxXHuOp/o48BtoE1V/17Ufmvlzx/4qr/aX4ZeCmgAZWrrvqfJXi25Kr/jX6Gq/6jUPmvZ54/cdVVV131ogueLbnqqv/fqPzXM89fcNVV/7V+C7geOAe8Olf9bxM8W/J/008Af8EV5qqrXjAq//WS50/87/NIYJsr/hpoXPW/ycOBm4ATXPW/UfBsyf9NX8xVV71oqPzXM8+f+N/nm4DX5YpjwB5XXXXVf5Xg2ZKrrvr/jcp/PfP8BVddddVVL7rg2ZKrrvr/jcp/veT5E1ddddVVL7rg2ZKrrvr/jcp/PfP8iauuuuqqF13wbMlVV/3/RuW/nnn+gquuuuqqF13wbMlVV/3/RuW/XvL8iauuuuo/0nsALwk04GuBu/i/5VuAPwUEXOSqq/5/o/Jfzzx/4qqrrvqP9BrAB3DFDwN38X/LrwG/xlX/m70/cBxYAt/AVf8eVP7rmecvuOp/mtcEKmCuuuqqq/7jfSrwEOAi8A1c9e9B5b9e8vyJq/6n2eOqq6666qr/Daj81zPPn7jqqv9aHwZsACuuuup/ppcAtrjij7jqqheMyn898/wFV131X+tnueqq/9m+E3h5rgjAXHXV80flv17y/In/fV6Pq6666qqrrvrvR+W/nnn+xFVXXXXVVVdd9W9B5b+eef6Cq6666qqrrrrq34LKf73k+RNXXXXVVVddddW/BZX/eub5E1ddddVVV1111b8Flf965vkLrrrqqv9Ivwd0wCawy/89bwBcDyyBXwCOuOqq/7+o/NdLnj9x1VVX/Uf6PuD7+L/rQ4G35oqbgSOu+t/m94GnAntc9e9F5b+eef7EVf/TfBvwcKABr89VV/3PEjxbctX/Ru/JVf9RqPzXM89fcNX/NK8AvBTQuOqq/3mCZ0uuuur/Nyr/9ZLnT1x11X+tDwN2gEPga7nqf5vg2ZL/m1bAiivMVVe9YFT+65nnT1x11X+tTwZuAu4Dvpar/rcJni35v+k1uOqqFw3Bfz3z/AX/+3wT8OfAnwObXHXVVf+VgmdLrrrq/zcq//WS50/87/NI4OW4onDVVVf9VwqeLbnqqv/fqPzXM8+fuOqqq6560QXPllx11f9vVP7rmecvuOqqq6560QXPllx11f9vVP7rJc+fuOqqq6560QXPllx11f9vVP7rmedPXHXVVf+RHgYcBy4CzwAa/7c8GdgCjgPJVVf9/0blv555/oKrrrrqP9JXAm/JFTcCd/F/y/tz1f92J4ECJHCeq/49qPzXS54/cdX/NF8GXAMkV1111VX/8f4ceAhwETjJVf8eVP7rmedPXPU/zQ9w1VVXXXXV/wZU/uuZ509cddV/rd8CzgAXueqqq676343Kf73k+Quuuuq/1nty1VX/s/048JJc8UiuuuoFo/Jfzzx/4n+frwJ+hCtWXHXVVVf9x3oQ8AiuEGCuuur5o/Jfzzx/4n+fn+eqq6666qqr/vtR+a+XPH/BVVddddVVV131b0Hlv555/sRVV1111VVXXfVvQeW/nnn+xFVXXXXVVVdd9W9B8F/PPH/BVVdd9R/J/N8mrrrqqvsR/NdLnj9x1VVX/Ud6a0DAJnAP//f8HmDgAJhx1VX/v1H5r2eeP3HV/zRvCZwEEvhervrf6oj/mwpXbAKNq/43emWgAslV/15U/uuZ5y+46n+azwVeCmjA93LVVf+zBM+WXPW/0X1c9R+Fyn+95PkTV131X+taoAANuJer/rcJni256qr/36j8zyGuuuq/1p8DNwH3Addy1f82wRXJ/12fApzkCnPVVS8Ylf8eCQTPKfjf552BB3HFVwNrrrrqqv8qwRXJ/12/zlVXvWio/Pcwz0v87/MBwOtyxTcBa6666qr/KsEVyVVXXUXlv4d5XuKqq6666kUXXJFcddVVVP57JM8ruOqqq6560QVXJFdddRWV/x7meYmrrrrqqhddcEVy1VVXUfnvYZ6XuOqqq6560QVXJFdddRWV/x7J8wquuuqq/0jfCLwiYOCNgAv83/JmwDGuuuoqACr/PczzElf9T/NErpi46n+jW4CX44qO/3uewlX/230HcD2wD7wTV/17UPnvYZ6XuOp/mnfiqv/NgmdLrrrqf57XAR4CXOSqfy8q/z2S5xVcddVV/5GCZ0uuuuqq/8uo/Pcwz0tcddV/rZcGCpD83xQ8W3LV/0bvA9zAFV/AVVe9YFT+e5jnJf73+UsguWLiqv9tzvN/W/BsyVX/G30o8PJc8YWAueqq54/Kf4/keQX/+3wCV131P1fwbMlVV131fxmV/x7meYmrrrrqP1LwbMlVV131fxmV/x7meYmrrrrqP1LwbMlVV131fxmV/x7J8wquuuqq/0jBsyVXXXXV/2VU/nuY5yWuuuqq/0jBsyVXXXXV/2VU/nuY5yWuuuqq/0ifDjwEKEDj/56vATaAQ+Cjueqq/9+o/PdInldw1f9EAsxV/xv9Jv+3vQnwCOAS8NFc9b/RlwIngCVX/XtR+e9hnpe46n+avwZeCmhA5aqrrrrqP9Y3c9V/FCr/PczzElddddVVV1111b8Flf8eyfMKrrrqv9YPANcAF4F35Kqr/uf5feA+rjBXXfWCUfnvYZ6X+N9nG6hcsQuYq/43eU3gJuA+rrrqf6aP4aqrXjQE/z3M8xL/+/w0cAG4AGxz1VVXXXXVVf89qPz3SJ5XcNVVV1111VVX/VtQ+e9hnpe46qqrrrrqqqv+Laj89zDPS1x11VVXXXXVVf8WVP57JM8ruOqqq6666qqr/i2o/Pcwz0tcddVV/5HeAzgNHALfBpj/W74VuImrrroKgMp/D/O8xFVXXfUf6cOBV+SKbwfM/y1fzlX/270ZsAWsgZ/mqn8PKv89kucVXPU/zTsCC8Bc9b9R8GzJVVf9z/N1wEOAi8BPc9W/B5X/HuZ5iav+p3kSV/1vFlyRXHXVVf/XUfnvYZ6XuOqq/1qfD+wAh/zfFFyRXPW/1TVAzxV3cNVVLxiV/x7J8wquuuq/1rfwf1twReOq/61+AXh5rgjAXHXV80flv4d5XuJ/n3cHFlxxwFVX/c8SXJFcddVV/9dR+e9hnpf43+durrrqf67giuSqq676v47Kf4/keQVXXXXVf6TgiuSqq676v47Kfw/zvMRVV131Hym4Irnqqqv+r6Py38M8L3HVVVf9RwquSK666qr/66j890ieV3DVVVf9R/oj4FYg+L/ptYEC3Av8PVdd9f8blf8e5nmJq6666j/Se/J/208Dx4AnA4/kqv+NngoMwC5X/XtR+e9hnpe46n+azwMeBDTgfbjqqquu+o/1Blz1H4XKfw/zvIKr/qd5C+ClgAa8D1ddddVVV/1PReW/R/K8xFVX/dd6G2ATWAI/wVVXXXXV/15U/nuY5yWuuuq/1tcCNwH3AT/BVVf9z/P6QMcV5qqrXjAq/z3M8wr+9/lM4MW54r2AJVddddVV/3EucdVVLxoq/z2S5yX+93kt4HW54v2BJVddddVVV131X4/Kfw/zvMRVV1111VVXXfVvQeW/h3le4qqrrrrqqquu+reg8t8jeV7BVVddddVVV131b0Hlv4d5XuKqq676j3QSMLAEVvzfcx5IYM1VV11F5b+HeV7iqquu+o/0F8CDgbPANfzf8zCuuuqq+1H575E8r+Cq/2m+D/hNoHHV/0bBFeaqq/5nejzwEOACcANX/XtQ+e9hnpe46n+ar+Cq/82CK5KrrvqfaQbMgDlX/XtR+e9hnpe46qr/Wk8AdoHz/N8UXJFcddVV/9dR+e+RPK/gqqv+a70B/7cFVyRX/W/1DcCjueL1uOqqF4zKfw/zvMT/Pt8G/CpXrLnqqv9ZgiuSq/63ekXg5blCgLnqf5prgA8Hfgh4PP99qPz3MM9L/O/zw1x11f9cwRXJVVdd9Z/lPmATeBzwOOB7ge8C7uO/FsF/j+R5BVddddV/pOCK5KqrrvrP9NnAncBjgS8G7gJ+DXhPYMF/DYL/HuZ5iauuuuo/UnBFctVVV/1n2ge+mGcrwOsD3wPcDnw98Er85yL472Gel7jqqqv+IwVXJFddddV/tu8B9nlep4APA/4YeALw2cBD+Y9H8N8jeV7BVVdd9R8puCK56qqr/rPtAz/CC/co4LOAJwO/D3wgsM1/DCr/PczzEv/7XAfcCBwBTwYm/u/YBF4VuA64CPwxcI7/O04CrwZcB9wL/CFwjv87rgE+HLgRuBs4AVzk/445cDuwAv4CeGv+73lZ4Dqe7Q2B3wRG/u8oXBH83/B9wPvzLwvg1YBXA74S+Enge4HfBJJ/G4L/HuZ5if893gn4O+Bu4M+BxwHngK8ETvK/2ybwlcB54FeB7wV+DrgX+GHgRv53OwV8J3Af8LPAtwI/A9wLfB9wLf+73QD8CHAP8N3AFwDfCdwHfAtwgv/dNoDPAJ4OnAZuAt4K+Dvg3QDxv9+DgN8C/gK4iWf7ZeDxwGvzv1sAHwA8EbiFK44BzwA+Duj53+tPgBX/OpvAewC/BtwOfA3w0vzrIf57/DDwTjynbwE+mP/ZBHwL8AFAAsFzMnAb8PrAU/jf5wTw28BLAOJ5NeA88NrA4/nf50bg94FbgOB5JXA38BrA0/nf55HA7wKngcLzSuBpwGsA9/C/z3XArwIvARgQz5ZAAD8AvBfQ+N/pocAfAyeBwvNqgIG3BX6O/33mwI8Bbw4kEDybAQF/BLwpsMv/Tr8PvBr/fo8Dvhf4LuA+/mUE/z3M8xL/830q8AFcETwvATcBvwQs+N/ne4EXB8TzV4BTwM8BM/53EfATwM1A8PwFcB3w00Dhf5cO+FngNFB4/gJ4CPAj/O9TgJ8GHssV4jkFV7wb8IX87yTgR4GTQOH5K0AAPwhcw/8+Xw+8GVcEz0lc8UrAD/K/1x/zH+OxwBcDdwA/DbwtMOMFQ/z3+AHgXfnfYQmsgAB2APGiWQIr/veowDYvuiNgzf8eHbDFi+4+4ID/PbaBM7zo7gaW/O+xBVzDi8bAPwBr/nfZAR7Bi+4e4E7+99gAHsOL7q+A8/zv8yDgEfznmIAfBb4L+A3APBviv8f3A+/GVVddddVVV131b/FE4IeB7wWeBhD890iuuuqqq6666qp/q0cBnwU8GfhN4O0q/z3WXHXVVVddddVV/x4J/BHww8CvVP57rLjqqquuuuqqq/4tHg/8KPDdwK1cgfjv8UjgFv53uRH4LkD8ywz8KPDt/NfYAQr/Pg8CvowX3dcDv8v/Ho8BPocX3RcAf8N/nx7Y5EX30sCH8KL7IuBW/vd4E+CtedF9CfA0/uc5Dojnbxv4RKDjRfPdwBP43+MxwHvxovtJ4E/5n28OLHi2VwFek/94K+AJwMcAv83zQlz1r/EdwPsA4gVrwAHwCOAs/7t8F/BegHjBGvDXwCsBjf9dfhJ4KyB4wRL4VeBN+N9FwG8BrwEEL5iBHwLejf9ddoAnA6eAwguWwC8Db8b/Th8DfCUvXAI/C7wN/7sI+GPg5YDCC9aAZwCPBdb87/PtwPvxH2MF/CzwfcAvAxMvGOKqf41N4NeBVwLE82rAALw58Jv877MAfg54PcCAeE4GngK8LnAH//vsAL8IvBpgQDybAQF/DrwhcJH/fc4Avwa8FM/LgIDfBt4cOOR/n1cGfh2YA4XnlcBTgVcFzvG/1+cBnwYkUHi2BAL4JeAdgQP+97kZ+EPgBiB4Xg3YA14T+Hv+d3oi8Ej+ff4C+D7gB4BzvGgIrvrXOAReB/hSYM3z+iPglYDf5H+nJfDGwMcC9/Kc9oGvAF4euIP/nfaA1wU+EbiX53QO+HTgNYCL/O90FnhV4LOBczynu4GPBd4AOOR/pz8GXgH4PZ5XAt8JvAJwjv/dPgN4deDngSOuaMAfA+8OvDlwwP9OtwMvB/wIYJ7XrwAvC/w9/zudAR7Bv83twJcAjwBeHvga4BwvOsRV/1bbwGsCtwD7wJ8AT+b/DgGPBm4ALgB/D4z83yHgEcC1wFngSUDyf0cAjwJOA/cCTwbM/x2PBF4FOA3cCfwmcB//Nx0D9oHk/5YbgNcGrgPOAr8PPJ3/3d4V+AFedLvAjwLfC/whYP7tEFddddVVV1111X+E3wFekxeuAb8FfB/w48AR/zEQV1111VVXXXXVv9djgb8HxPP3OOB7ge8G7uU/HpWrrrrqqquuuurf62MA8ZzuBH4A+F7gH/jPhbjqqquuuuqqq/49Xg74E6AAK+DngO8DfgmY+K+BuOqqq6666qqr/q0C+H0gge8FfgjY578e4qqrrrrqqquu+rc6DSyA2/nvhbjqqquuuuqqq/63o3LVVVddddVVV/1vR+Wqq6666qqrrvrfjspVV1111VVXXfW/HZWr/iUBPBh4CeCxwCngEwDzgl0PvC/wGOAe4GuB2/ifbxt4LPASwE8AF3nhHgu8FpDALwPP4H+2CjwSeDHgGcCf8sKdAN4MOAP8KfAH/M+2A7wY8OLAiwM/C/wGL5iANwXeEtgAfhP4HiD5n+1G4MWAU8AP8cIV4PWBxwJ3Az8FrPmfawY8Fngs8BLA44Hv4YV7BeCdgeuAvwS+HljzP9dp4CWAFwNeHPgS4Om8YD3wzsBrAQn8GPCrXPXcEFc9t+uBdwVeDHhx4LHAJs/p3YAf5Pl7S+B7gOM8223AY4Aj/ud4KeDFgZcAXgx4ceBBgLjia4CP5vnbAL4OeF+e7QB4ReDx/M9wA/DywIsBLwE8FngM0HPFU4AXB9Y8f+8NfD2wybN9NPA1/M/x5sBrAC8OvBjwIJ7Tk4CXAAae1xbwfcBb85w+DvhK/mdYAK8IvBjwEsCLAS8OnOAKA68J/D7P32OAHwFegmf7Q+A1gcb/DK8MvDHwYsBLAA8DKs+2DzwKuJvnFcCXAB8HiGf7LuB9+Z/jfYGXBF4ceHHgWp7TjwPvwPP3IOAngJfj2Qy8DvA7XPVABFc9txuACXgScBzY5Hl9LlB4Xm8J/DhwnOd0C/Cy/M/RA58JvD7wDsCbAw8GxLN9KPAQntcM+BngfXlOW8D78D/H+wNvBbwp8C7ASwE9z/Zw4IN4/j4a+C5gk+f0EfzP8iDgqcCdwC08r0cC783zmgM/A7w1z+ut+Z/jVYD3B14XeHfgNYATPJuAL+X5ezHgd4GX4Dm9KvBy/M/xIOA+4FbgFqDynLaBT+F5Cfh64OMB8Zzemv85ZsB1wFOANXAtz+vtgZfled0A/AbwcjwnAW/FVc8NcdULcwr4C+BBPK93An6UZ3tp4I+AOc/fSwJ/x/88m8DPA6/N8/p64CN4Tj8CvCPP31cCH8f/PJ8MfBHP6xnAI4CRZ3tn4AcB8byeDjyU/5k+AvhanteTgMcAybN9H/DuPH8/B7wl//O8JPC7wDGe12sBv8uzXQf8BXADz9+rAn/E/zyvC/w6IJ7TIfAg4DzP9gnAl/L83Qo8hP95BHwX8F48rx8B3plnmwF/BLwMz99nA5/DVQ9EcNULcx74DJ6/D+DZNoEfAubA7cC9PKcfAv6O/5kOgQ8GJp7XewObPNsHA+/I87cGvpf/mb4U+Cue14OAN+PZHgZ8CyCev2/jf65vBP6B5/VI4LV5tvcC3h1YAo8HBp5tD/hC/mf6W+CLeP4+jGcL4HuBG3j+/gr4c/5n+k3gJ3hem8C78WyvCHwBMAFPAo54tgn4DP5nMvCJwCHP622BUzzblwIvA1wCngKYZ7sN+Bauem6Iq/4lPXAHcIbn1ICbgbuB7wDeHngX4Be54kbgUcAh8KeA+Z/tp4G34nm9G/CDwIsDfwr8DvCJwO3ASwOPBk4APwv8A/9zvSfwPTyvnwDeHuiAPwCuAz4M+G3gocBLAA8B/hr4Of5n+zDg63le3wm8H/BI4C+AXwE+ELgA9MAjgRuAvwbu43+uY8BdwAbPaQlcB+wBnwR8IfA5wDcDM+BlgUcCR8D3Avv8z/VawG/zvP4EeGVgB/gr4ALwTsDTgAo8DHgI8CTgafzP9p3A+/C8PgT4ZuAtgJ8BvgT4bGAN7ACPAo4Dfwzsc9VzQ1z1ovgK4GN5Xu8LLIHvAd4U+A3+93oz4Od5Xj8KvDfwp8DdwJsDA//7LIC7gOM8p0PgJPD5wPsArw48kf+djgN3A3Oe0z3Ag4E/BM4Dbw4M/O/03cB78bzeAbgd+D3gY4Gv538nAU8CHs5zMnAt8DXAywGvDpzlf6dXA36f5/XzwAcDfw18H/CxXPWvQeGqF8UR8L48r+PA+wNfBHwP/7s9A/hIYM5zuhZ4EPASwOsAR/zvNAEvAbwkz6kHKvAJwNsAf8r/Xivg1YBH8Jy2gJcBXgx4XWCf/71G4F15Xg34KOBngU/nf7dbgFflOQl4NPBWwBsBT+V/rzuBDwK2eE7XA68CHALvBJir/jUQV70oCnAPcJrn9Q/AywID//v9CPCOPH9vA/w0/7u9E/DDPH/fC7wX//t9CPCNPH/vBXwv/7stgLPAJs/rHPAY4Bz/u70m8Ds8f18OfAL/+30H8L48rwl4ReCvuOpfi+CqF0UDfonn74uAgf8bfo7n79eBn+Z/v18BRp7XAHw8/zf8PGCe163A9/G/3xL4DZ6/TwfO8b/fHwLneV4JfD7/N/wcz9/PAH/FVf8WBFe9qH6O5+8V+de7Fvhm4E7gEvAHwHsBwX+vXwQmnteN/Pv0wHsBP8J/r13g93hePXCaf50OeDfgh4HfBX4K+BjgJP+9bgf+huf1IOBG/nW2gU8H/gY4AvaA3wbekv9eP8fzdyP/MV4X+HPgm/jvMQG/xPMK4OX51+mBbwS+BfgW4FuAbwG+BfgW4FuAbwEezH+tXwWOeF6vDIh/v5cDPg/4ZeCvgK8HTvF/G+KqF9UOcBboeU53ALcA5kXzxsCPAAvgjYG/Br4JeEfg14C3Apb89/ld4DV4Xo8BnsC/zjbwvsDHATcDtwEP4r/XRwNfxfP6NOALedHcAvwU8LI8r3uBdwR+l/8+nwt8Bs/rQ4Fv4kXzEsDPAQ/i+ft04Av473EtcBcQPKe/B16Cf58zwF8DNwC/Abw+/z3eEfgRntc3AB/Oi+4tgZ/hhbsDeDDQ+K/1C8Cb8rxeAfhz/m3eHPhs4OWAJwCfDfwUMPB/H8FVL6o94Hd5XjcBL8uL5tHATwA7wC8AvwlcAD6PK94A+AH+e/0cz99b86K7Dvhs4BnAVwM38z/Hz/L8vQ0vmm3gN4CX5fm7FvgZ4KH89/k5nr+34UVzE/BrwIOAQ56/zwVejv8e9wJ/wfN6ceCR/NsJ+E7gBv77/TIw8LzeGhAvunfjX/YdQOO/3s/x/L0N/3ongB8Dfg54WeBzgBcHfgQY+P+B4KoX1RZwI8/f2/Ci+Uxggyv+lmd7AjBwxdsAr8t/n4Hn72140Xwa8E3ASwE7/M8jYOB5vRxwM/+yzwYeDvwt8JPA3/G8jgOfyX+fx/D8vTZwgn/ZlwO/BDwI2AJuAL6P5xTA2/PfI4Alz99b8W/3CcCb8z/DY3j+bgRekRfNNvDmvHAJfBf/PR7N8/c2/OvcBPw+8PZc8b7AZwON/18IrnpRfQdwHDDP6234lz0IeEeebZ9nm4B7ebaP47/HywFfDKx5Xq8A3MS/7AuBtwHeBvgq/mdZAD8OmOcl4K154Y4B7w68FfBSwNsBLwm8J9B4Tm/Jf4+XAr4ZuIvn1QFvxgv3ssDdwPsAt3HF3cB7A7/Dc9rgv8dnAq/E8/c2/Nu8AvB5/M9wBvgx4BzP31vzonlbYAW8IvDywMsDLw+8PPDywMsDLw08g/967wR8OHAvz+sxwKN50RwDfgl4LFd8E/Dd/P9EcNWL4mOBtwDeEvgzntdjgVfghXtDoPBsezyn5NleG+j5r3UK+HHgJ4Gv5HkJeGf+ZebZnsz/LN8MnATejufvXXjhXgb4OOBneU7fB3wzz2kBBP+1jgM/AfwS8N48f+/JC/eXwMfxvBL4SZ7TH/Jf702BTwfeDXgyz+uVgIfyr3Mc+FHgt/nvF8D3A+eB1wQaz+vdgcq/7N2AHwT+DPgL4C+AvwD+AvgL4C+Av+O/3qOAbwU+Hfgqnr/35EXztcCLc8Uh8Fn8/0Vw1f0EzHle7wR8MfC+wJ8DP8Lz92E8r28F3oYrXoPntOY5TTzbBvCK/NfZBH4cuAC8P/AjPH8fDATP6cWAz+b5O+B/jk8G3gF4G+AXgKfyvF4FeBmeUw98I3AM+G3g+3n+fobn9HQg+c+xAYjntA38LHAAvCfwm8C9PK/XBx7Nc3oU8LtA4Yrk+et4tj8FfpL/Wi8DfD/wBcBPAD/C8wrgg3leHwK8Ls/fNwFPB76C/zo9UHhOAXw78NLAWwNPBX6P53UT8JY8p+PAHwKnueI64HWBtwZ+G/gB4GOAlwfEf40Fz+shwC8DvwR8CfCjgHle7wfMeU5vAXwnz/bqwHvybN8FnOX/L4KrAD4RuAQcAr8CvCPwisBXAD8AfBnww1zxI8DE83p34GV4tg8GXhn4Ja54RZ5T8pyS5/Sy/Me6GfhB4B+AHwReGyjASwC/CTwGeBtgCfwN8Die18OA9+LZjgE/DvwD//064LOBvwJ+E3hfYAs4CXwt8IXA+wF/yRU/xPP3eTynrwKOA5d44c7znH6T/3gPAf4IOADuAb4EeHXgbYA/Bh4JvDVwCDTgh3leAr4MEFecAH4C+Hag8YIF8C5c8ZvAWwAj//HeCPgt4G+ALwAeChTgXYDfAH4H+Byu+CGevw8BbuDZXhv4NOAfeF4fCrwO8K5A8p9vG/hJ4BC4CHwr8DrAWwK/Crwr8A7AM7jiB3j+vgCYc0UFvg/4A+AcV7wzUICbgNcC3hX4SuDPgL8D3hcQ/zleHXgycAQ8Afg44BWB9wX+GDgPvC9g4OnAH/K8rgE+iWd7FPBtwDfwbJ/Gc/o54GWBdwbeE3gx/n9BXPWawO/wgn0/8J6AebYfBd6B53U38LnAg4EPB14J+Aeu2AWO8WzvDvwAz/YE4FE82+cDn8F/DAF/AbwMz8mAgAPgdYA/59k+HPg6ntc+8H7ArcDXAv8AvD/P37sCP8Cz3QY8iP8cnw58Hs/JgLji04Av5NluBp4GVJ7XlwPfDbwf8DbASwOXeOHeHvgxnu0lgb/jP9YvA2/E83cAvA7w5zzbI4EnAOJ5/Qjwq8BHAI8D3o0XrABfAnwcV/wo8NHA3fzHegzw10DPczIg4E+A1wWOeLbfAl6b5/VnwIcCDwa+HXgX4Jd4Ti8O/DHwNsCvAa8P/BrP9hvA6/Mf68uAj+f5S+BdgR/h2TaAO4ATPK/fBr4beCfgGuBVgYEr/hR4BV643wDeFbiP/zgVuB24jufv6cCrAvfwbO8M/BDPK4EvA54BfDrwVcCXc8X1wB1A8GxPBB7Fc/ol4D2Bc/zfR3DVK/KC/SLwvoB5Tl8CNJ7X9cA3AZ8AfADwD1xRgR2eU/Kckud0mv84NwIvw/MSMADvAPw5z+l7gLM8r23gR4E/BWbAR/E/w5vzvMQV3wB8Ic/pduBHeP4+Hvh74AOBdwYu8S97WZ7th4G/4z/eK/D8rYC3B/6c5/Qk4Md4/t4J+A6gAR/C83cC+EzgicDH8WzvCPw58Aj+Y70R0PO8BDwReHPgiOf0FTx/rwD8GfBjwDcAv8Rz2gR+FPhq4Nf4r/NKPH8GPhr4EZ7TEfBVPH+vDXw38FLAOwIDVzwSeAX+Za8H/BqwzX+cW4DreP7uBt4YuIfn9BPAE3leAXwS8I3A7wJfybO9MRA8273AZwCvBPwAz/YmwK8DC/7vI7jq8Tx/PwS8DTDyvP4C+CKevyXwrsAP8WzbgHhOyXNKntMm/3F2gZHndQi8BfDLPK994CMB8/z9GfCGwCH/M5zj+fsK4CN4/j4BOM/ztwu8BfAn/Msq8J5ccQ/wUfzneDzPaxd4Y+BXeP4+GriT5++3gTcE9njBBmDked0A/AQQ/Mc5y/P318BrAed4Xj8P/AQv2JcCn8bz+gZgD/gc/ms9juc1Au8PfB3P35cCf87z9yTgdYCn8WwFeF/gg4BPBb4beDzP30sCn81/nLuASzyvpwCvDjyJ5zUC7wssef6+HXgPIHm2l+E5PQn4MeBPgfcE/p5neyngY/i/j+CqXwC+GNgHJuCvgPcC3hUYeME+A/gI4ElAA84C3wu8OPAjPKcDwDyn5DkVntMF/uMcAJ8ATFxh4LeBVwR+lRfsh4EPBM7xbHvAZwOvCZzjf47PAO7h2W4H3hX4eMA8f3cDrwP8Dc9m4MeAlwd+ixfN2wE3AiPwDsB9/Of4QODPgAacB74HeHHgd3jB7gZeA/hRYBcYgb8B3g94feACL9hF4IuBFwM+GDjiOb0E8Ib8x/kx4Nd4tiXwdcBrAPfygr0H8D3AxLM9Hngr4JN4Xu8EvCXwzsDIf63PAH4FGIEj4BeAVwS+kxdsDbw+8M3AWcDAU4FPB14WeBLP6fHAdwHfCnwR8D7AY4HHAt8BTDyn9wfm/MdYAe8CPJ0r7gC+DHgZ4Gm8YH8IvAHwW8AKWAK/B7wJ8AHAxHO6ged0xLMl8P08p/fk/z7EVQ8UQPKvF0Dywu0DWzzbOwI/xrM9AXgUz/ZZwOfyH+sa4CHAbcDdvOhmwMOBDngcMPCieVfgB3i224AH8Z9nA3gMcAg8CUhedA8BzgBPAnZ50Z0G/g64Fng/4Lv4zyfA/NsIMP82rwf8EtDxbJ8IfBn/cQQ8EtgGngAc8KI7CTwMOAc8nefvEcBfAh8J/DTP6bWAn+LZfhd4a2AFLPmPFUDybxNA8m/3qsCPATfwbC8P/AX/sQJI/m0CSF6wXwDelGf7GeCtebbXA36dZzOwDRzyfxeVqx4o+bdJ/mVPAF6eZ+t5ToXn9DT+490H3Me/3hr4B/7nOwL+gn+bpwNP51/vG4DrgE8Avov/Gubfzvzb/QbwpcCn8WzH+I9l4In821wALvDCvQGwBXwn8J28cK8JXAC+DPhE/mMl/3bJv88fAm8G/CGw4Ipj/MdL/u2SF+4cz2nBczrHcxJwDDjk/y6Cq/6r/BnPqfKcCs/p97nqf7p3Bt4R+HTgy3leL8v/PV8JTDzbnVz1v9FfA9/Ls93K/y6385yO8Zwu8JwMnOf/NoKr/qv8Os9pxnMKnu1O4Fau+p/s0cC3AF8NfAHP6xbgS/m/5wLwDzzbb/C/yxq4CFwELgIXgYvAReCA5zQBF4El/zf9JlfcBtzK/y6/ynN6KM/pIs/pdmDN/21Urvqv8ovABeAkV1zDc+p5th/k/wbxnCr/N5wAfhbYB+4BPolnmwEngHcCfpr/fa4BXgX4Q+Asz9+aK34ZeBL/u3wH8B08f68P/BrP9jvA6/O/04sBDwX+CDjH89e44uuB5H+XPwDuBG7kijPANcB9XLHgOf0E//dRueq/ygr4EuBLuOImnm0DuJYr9oGv4/+GBc/pOP/7BfD9wCO44ot5wf6S/11mwJ8BtwBngXcFfp3ndAx4DHAR+Eiu+p/oxYG/BDpgD/gM4BuAxnN6K+BPga/jf58GfCLwAzzbGwLfzxVneLZD4Bv4v4/gqv9KXwH8Gle8LlC44s2AABL4EOB2/m94CM9pA9jmf7cvBN6UF81f8r/LDnALV5wBfhn4SmCLK+bANwED8NbAk7nqf6IHAR1X7ABfA/wl8EZAABvAZwIvCbwNsOJ/px8Evodn+1BAXPFGXJHARwFP5f8+gqv+KzXgbYAfAR4B/DLwZcA3ALvAOwM/wP9utwCvBHwo8GE8rx8AXg94DP/7vC3wibxoBuAf+N/lLPAlgLmiAB8DnAX+FLiVK14O+F2u+p/ql4FvAcyzvSTwy8AB8FSgAq8E3MX/bu8DfBZwALwK8MPAJwOfC9wFvB3wHfz/gLjqv8vLAm8AHAOeAvwksMv/fq8BPIZ/2Vngp/jf5a2Aa3nR7AM/xP9OjwJeC7ge2AF2gScBvw3cy/9dNwJvxrPdCfwC/3s9Anh14GZgAdwNPB74bWDk/5YTwJsBjwQG4B+AXwAG/v/gHwFdyajxIGKPxQAAAABJRU5ErkJggg=="
}
},
"cell_type": "markdown",
"id": "290a1e11-9a89-4a6e-b66a-8ad2eb18d5eb",
"metadata": {},
"source": [
"###### New wrinkle\n",
"\n",
"We have handled temporal derivatives before with time steppers, but not spatial derivatives.\n",
"\n",
"We will use the [finite difference method](https://en.wikipedia.org/wiki/Finite_difference_method) here.\n",
"\n",
"We have seen the finite difference approximations of derivatives before.\n",
"For this exercise, we will need a forward and backward difference for the first derivative and a centered difference for the second derivative.\n",
"\n",
"$$ \\begin{split}\n",
" f' \\left( x \\right) &\\approx \\frac{f \\left( x + h \\right) - f \\left( x \\right)}{h} \\\\\n",
" f' \\left( x \\right) &\\approx \\frac{f \\left( x \\right) - f \\left( x + h \\right)}{h} \\\\\n",
" f'' \\left( x \\right) &\\approx \\frac{f \\left( x - h \\right) - 2 f \\left( x \\right) + f \\left( x + h \\right)}{h^2}\n",
"\\end{split} $$\n",
"\n",
"In the finite difference method, we pick a finite number of evenly spaced points $x_0, x_1, \\dots, x_n$ to simulate our function at.\n",
"\n",
"\n",
"\n",
"We then make a matrix from the system of equations generated from the this finite difference approximation of the second derivative with respect to $x$\n",
"\n",
"$$ u'' \\left( x_n \\right) \\approx \\frac{u \\left( x_{n - 1} \\right) - 2 u \\left( x_n \\right) + u \\left( x_{n + 1} \\right)}{h^2} $$\n",
"\n",
"Note that this equation can only be used on the points $x_1, x_2, \\dots, x_{n - 1}$, as we need points to both the right and left of the target point to compute the derivative.\n",
"This is where our boundary conditions come into play."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "6ffb42b1-72e3-40a4-b0b1-146eba40a810",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Matrix A without boundary conditions:\n"
]
},
{
"data": {
"text/plain": [
"101×101 Matrix{Float64}:\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 10000.0 -20000.0 10000.0 0.0 0.0 0.0 0.0\n",
" 0.0 10000.0 -20000.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 10000.0 -20000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" ⋮ ⋱ ⋮\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 -20000.0 10000.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 -20000.0 10000.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Let's make a matrix representing this system\n",
"A = zeros(n, n)\n",
"\n",
"for i in 2:n-1\n",
" A[i, i-1:i+1] = [1 -2 1] ./ h_x^2\n",
"end\n",
"\n",
"println(\"Matrix A without boundary conditions:\")\n",
"display(A)"
]
},
{
"cell_type": "markdown",
"id": "802549a1-7ace-40ca-9ecb-87154e1fd715",
"metadata": {},
"source": [
"## Boundary conditions\n",
"\n",
"We will start with simple boundary conditions, $u_L = u_R = 0$.\n",
"\n",
"This means that $u \\left( x_0 \\right)$ and $u \\left( x_n \\right)$ never change, so we will encode this by putting $1$ in the entries for those points."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2db917ea-63ee-4a69-9265-14ec314ba14d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Matrix A with fixed boundary conditions:\n"
]
},
{
"data": {
"text/plain": [
"101×101 Matrix{Float64}:\n",
" 1.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 10000.0 -20000.0 10000.0 0.0 0.0 0.0 0.0\n",
" 0.0 10000.0 -20000.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 10000.0 -20000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" ⋮ ⋱ ⋮\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 -20000.0 10000.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 -20000.0 10000.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 1.0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Boundary conditions\n",
"A[1, 1] = 1\n",
"A[n, n] = 1\n",
"\n",
"println(\"Matrix A with fixed boundary conditions:\")\n",
"display(A)"
]
},
{
"cell_type": "markdown",
"id": "46fa6c9c-937f-4476-a50d-a18fabca2e6b",
"metadata": {},
"source": [
"## Time Stepper\n",
"\n",
"Now we need to pick one of our for advancing our solution forward in time.\n",
"This is the area where we can experiment the most.\n",
"For now, let's use a simple [forward Euler](https://en.wikipedia.org/wiki/Euler_method).\n",
"\n",
"$$ x_{n + 1} = x_n + h \\, dF \\left( t_n, x_n \\right) $$\n",
"\n",
"where $t_n$ is the current time, $x_n$ is the current solution, $h$ is our step size in time, $dF$ is our differential equation, and $x_{n + 1}$ is our new solution.\n",
"\n",
"Let's code up forward Euler and take a single step."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8f13f041-eb52-4db7-b2d2-541c48c2525f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"maximum(u_1) = 0.9999901312073146\n"
]
},
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Forward euler\n",
"function euler_forward(x, h, dF)\n",
" return x + h * dF(x)\n",
"end\n",
"\n",
"# And take a single step\n",
"h = 1e-6\n",
"dF(x) = A * x\n",
"u_1 = euler_forward(u_0, h, dF)\n",
"@show maximum(u_1)\n",
"\n",
"# And plot\n",
"plot(LinRange(0, 1, n), u_1, xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\", title=\"Single step\", color=:red)"
]
},
{
"cell_type": "markdown",
"id": "089a4598-cf31-4662-b74a-f029312366b4",
"metadata": {},
"source": [
"### Exploration\n",
"\n",
"Implement backward Euler for this system instead.\n",
"And maybe the $\\theta$ method."
]
},
{
"cell_type": "markdown",
"id": "342abc5b-9bae-4215-b3df-d9cbd67f6238",
"metadata": {},
"source": [
"## Building it out\n",
"\n",
"Ok, now it seems like we need two things right now.\n",
"\n",
"1) Something to take our time stepper (`euler_forward`) and our finite different matrix (`A`) and create a series of outputs.\n",
"\n",
"2) Something to automate and animate the plotting process.\n",
"\n",
"Let's start with 1).\n",
"We'll make a basic function `run_simulation` to produce our values $u_n$ via our PDE and time stepper."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "33149a77-4311-4a03-aba6-cfc85ac655de",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"maximum(u[end, :]) = 5.1739984397879245e-5\n"
]
},
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function run_simulation(u_0, h, dF, time_stepper, t_f)\n",
" # Setup\n",
" num_steps = Int(ceil(t_f / h))\n",
" u = zeros((num_steps + 1, maximum(size(u_0))))\n",
" u[1, :] = u_0\n",
"\n",
" # Simulate\n",
" for i in 1:num_steps\n",
" u[i + 1, :] = time_stepper(u[i, :], h, dF)\n",
" end\n",
" u\n",
"end\n",
"\n",
"# And run it\n",
"h = 1e-5\n",
"t_f = 1 # s\n",
"u = run_simulation(u_0, h, dF, euler_forward, t_f)\n",
"@show maximum(u[end, :])\n",
"\n",
"# Plotting the final u as a sanity check\n",
"plot(LinRange(0, 1, n), u[end, :], xlims=[0, 1], ylims=[0, 1], xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\", title=\"Final step\", color=:red)"
]
},
{
"cell_type": "markdown",
"id": "c4a803db-3895-4a6a-a8c4-2fc905335ebb",
"metadata": {},
"source": [
"It looks like the temperature went to $0$ on the whole rod, which I would expect given the boundary conditions.\n",
"\n",
"## Pretty pictures\n",
"\n",
"Lets make an animation now!"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "312d2054-6871-481f-a4a7-26d7ef0920ce",
"metadata": {},
"outputs": [],
"source": [
"# We wrap the plotting in an annotated loop\n",
"animation = @animate for i in 1:Int(ceil(t_f / h))\n",
" plot(LinRange(0, 1, n), u[i, :], xlims=[0, 1], ylims=[0, 1],\n",
" xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\",\n",
" color=:red)\n",
"end every 100;"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ec0e6934-9050-42a6-9f2b-aa7058556672",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to /home/jeremy/Documents/csci-3656-fall-2025/source/notebooks/heat_fixed.gif\n"
]
},
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Plots.AnimatedGif(\"/home/jeremy/Documents/csci-3656-fall-2025/source/notebooks/heat_fixed.gif\")"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gif(animation, \"heat_fixed.gif\", fps=30)"
]
},
{
"cell_type": "markdown",
"id": "418c7304-b1d5-4ebe-9f4f-5eaa41bbab1d",
"metadata": {},
"source": [
"## Other boundary conditions\n",
"\n",
"This looks great, but boring.\n",
"What happens if we want to insulate the ends of the rod?\n",
"What does our intuition tell us should be the outcome?\n",
"\n",
"Insulating the end of the rods would be equivalent to stating $\\partial u / \\partial t \\left( 0, t \\right) = \\partial u / \\partial t \\left( 1, t \\right) = 0$.\n",
"We can encode this with finite difference approximations of the first derivative."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "423e88c2-1ea2-4300-845f-9f455112ce66",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Matrix A with insulated boundary conditions:\n"
]
},
{
"data": {
"text/plain": [
"101×101 Matrix{Float64}:\n",
" -100000.0 100000.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 10000.0 -20000.0 10000.0 0.0 0.0 0.0 0.0\n",
" 0.0 10000.0 -20000.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 10000.0 -20000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 10000.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" ⋮ ⋱ ⋮\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 0.0 0.0\n",
" 0.0 0.0 0.0 0.0 -20000.0 10000.0 0.0\n",
" 0.0 0.0 0.0 0.0 10000.0 -20000.0 10000.0\n",
" 0.0 0.0 0.0 0.0 … 0.0 100000.0 -100000.0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Update boundary conditions\n",
"A[1, 1:2] = [-1 1] ./ h\n",
"A[end, end-1:end] = [ 1 -1] ./ h\n",
"\n",
"println(\"Matrix A with insulated boundary conditions:\")\n",
"display(A)"
]
},
{
"cell_type": "markdown",
"id": "2cf5df59-0976-465d-9ebd-2106d4b421ae",
"metadata": {},
"source": [
"And let's try the simulation again!"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "07259ff0-7e8e-4ffb-8537-6d2b6207757b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"maximum(u[end, :]) = 0.6417010197871675\n"
]
},
{
"data": {
"image/png": "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e/cvv/wyLy+Puf6BiHJyclavXu3h4eHo6KjfCgEAAHRI+xHsHTt2eHl5tWrVqnXr1jk5OXPnzr106VJaWlpAQICe6wMAANAp7ZdPtG/f/t69e927d799+3Z2dvaxY8fatWv3999/M5fAAwAAvDfKPKe5RYsWv/32GxHJ5XKc+gwAAO8r7VuEH3zwwdOnT5nX6i747Nkz3OcMAADeM9ob4blz59LS0jQWpqWlnThxQvclAQAA6E8V7uWakJDAfrgSAADAe6DEwb8LFy788ssvRJSVlfXZZ5+x215RUdHff//drVs3fRcIAACgSyUaYVZWVnR0NBEpFIr4+PisrCz1W0ZGRuPHj1+7dq2+CwQAANClEo1w8uTJkydPJqIuXbr85z//6dChQy1VBQAAoCfar4sIDg7Wcx0AAAC1Ag8+BgAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAATkMjBAAAThPqburQ0NC9e/cWFxdPmTKlb9++Gu+mpqaePHkyJCREIBD4+PiMHj2ax+PprhgAAACtdLVFGBUV5e3t7ezs3L179zFjxty4cUMjcOjQob/++svT07Nt27bLli3btGmTjioBAAAoh662CHfv3j1u3LgVK1YQUWpqqq+vr7e3Nzvw0Ucf8fn/34YtLCzWr1+/bt06HRUDAABQFl1tEd65c0fd+by9vW/fvq35wfz/fXRKSoqNjY2OKgEAACiHrrYIk5KSrKysmNfW1tbp6elFRUWGhoalkzExMV9++eWRI0fKmioqKurJkychISHMkM/n+/r6qieHCuXl5eH4a03gC6yJgoICkUgkFOrwdIT3G1a/mlAqlSKRSCQSlR/T1dppZGRUXFzMvC4qKhIKhVpLSU5OHjBgwKpVqwYOHFjWVLa2tgYGBqNGjVLPbGdnh7+rylMo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xhdob2/PPIuGiIyMjLp27YoHbquZmppKJBL1f9+Sk5M1vj0i+u6776ZOnbp8+fKJEyceP358+/btSUlJeq+0vtL4A9doH3WoEXp7e1+7do3p0tevX2/YsKGzszMR5ebmMnvG27VrJ5fL79+/T0SFhYWBgYF9+vSp3ZrrFG9vb/VhrYCAgF69ejHbhVlZWer7m69Zs+bGjRsXL15kjsWCWrdu3V6/fv3q1SsiysjIuH//PvOYsKKioqysLCLy9PT08/Pr379///79XV1drayssPqxeXt7BwQEMEf+AgIC2rZtK5VKiSgnJ6egoICIPD09zczMXrx4weSjoqJwK3M2NeqqAgAACGJJREFUjb9fb29vIlKpVGlpacw+ZIFAoD6uX1xcrFKphEKd3Cz6faJuH506dUpPT3/8+DGzMCgoqMTfrz5O6KkchULRuXPn4cOH+/n5OTk57d69m1k+adKkxYsXM683btzo6uq6detWHx8fnLanIT093dHRce7cud98841UKr1y5QqzvEOHDrt27VKpVEeOHCGisWPHfvhWQUFBrZZctyxdurRdu3bbtm3r3r37lClTmIW7du3q0KGDRtLPzw+rn4b8/HxXV9fJkyd///33DRo08Pf3Z5b369dv48aNzOsNGzZ4eHjs2rVr+vTpzs7OOTk5tVdvnfPf//5XIpF8+eWXzNURiYmJKpUqMzOTiCIiIlQq1dWrV83MzNauXbtr16727duPGzeutkuuQ2Qy2Ycffjh58mQimj179pIlS5jlI0eO/OSTT5jXq1evdnNz27p1q5eX18iRI9k/XrfuLJObm3vw4MGEhARvb+8BAwYwC69fv25kZNStWzdmeObMmTt37jRt2nTGjBl4xp6G5OTkX375JScnZ8SIEcyDkYno9OnTrq6ubm5ujx49CgoKYudnzZqFI15qKpXK398/NDS0VatWU6ZMYf65HRkZ+ezZs5EjR7KTDx8+jI2NHTJkSC1VWkelp6cfPHgwPT190KBBPXv2ZBZevHjRzs6uffv2zPDcuXO3b992dHScOnUqbi+sISws7NSpU8bGxtOmTWPOPJLJZAcPHhw3bhxz+4vIyMhz587l5eV5eHioTxEHIlIqlfv371cPRSLRrFmziOjq1avm5uadO3cmIpVKderUqZCQEGdn5+nTp7P/01e3GiEAAICe1aFjhAAAAPqH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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Statistics\n",
"\n",
"# And run it\n",
"h = 1e-5\n",
"t_f = 1 # s\n",
"u = run_simulation(u_0, h, dF, euler_forward, t_f)\n",
"@show maximum(u[end, :])\n",
"\n",
"# Plotting the final u as a sanity check\n",
"scatter(LinRange(0, 1, n), u[end, :], xlims=[0, 1], ylims=[0, 1], xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\", title=\"Final step\", color=:red)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ff437577-3c85-44fa-933f-57566d321025",
"metadata": {},
"outputs": [],
"source": [
"# We wrap the plotting in an annotated loop\n",
"animation = @animate for i in 1:Int(ceil(t_f / h))\n",
" plot(LinRange(0, 1, n), u[i, :], xlims=[0, 1], ylims=[0, 1],\n",
" xlabel=\"position\", ylabel=\"temperature\", label=\"\\$u\\$\",\n",
" color=:red)\n",
"end every 100;"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "1ec29ef7-1bec-4f90-a16e-0184f2029372",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to /home/jeremy/Documents/csci-3656-fall-2025/source/notebooks/heat_insulated.gif\n"
]
},
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Plots.AnimatedGif(\"/home/jeremy/Documents/csci-3656-fall-2025/source/notebooks/heat_insulated.gif\")"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gif(animation, \"heat_insulated.gif\", fps=30)"
]
},
{
"cell_type": "markdown",
"id": "acbb0400-6f38-4f9f-8825-22a73b7d654c",
"metadata": {},
"source": [
"### Exploration\n",
"\n",
"Another popular boundary condition is periodic.\n",
"In this case, the left and right ends of the rod are joined.\n",
"Can you implement this?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.11.6",
"language": "julia",
"name": "julia-1.11"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}