Skip to content

Instantly share code, notes, and snippets.

@davegreenwood
Created October 26, 2018 13:59
Show Gist options
  • Save davegreenwood/820d51ac5ec88a2aeda28d3079e7d9eb to your computer and use it in GitHub Desktop.
Save davegreenwood/820d51ac5ec88a2aeda28d3079e7d9eb to your computer and use it in GitHub Desktop.
implement and compare the 'Exact formula for inverse radial distortion'
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## An Exact Formula for Calculating Inverse Radial Lens Distortions\n",
"\n",
"* Pierre Drap, Julien Lefèvre. An Exact Formula for Calculating Inverse Radial Lens Distortions. Sensors, MDPI, 2016, 16 (6), pp.807. <10.3390/s16060807>. <hal-01458821>\n",
"\n",
"Notebook implementing the formula for just two radial distortion parameters."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def grid_2d(row, col):\n",
" pts = np.zeros([2, row * col])\n",
" cx, cy = (col - 1) * .5, (row - 1) * .5\n",
" for i in range(row * col):\n",
" pts[:, i] = i % col - cx, i // col - cy\n",
" # pts in interval [-1,1]\n",
" return pts / pts.max()\n",
"\n",
"def apply_distortion(pts, k1, k2):\n",
" r2 = np.square(pts).sum(0)\n",
" f = 1 + k1 * r2 + k2 * r2**2\n",
" return pts * f\n",
"\n",
"def remove_distortion(pts, k1, k2):\n",
" # as described in the paper\n",
" b1, b2 = -k1, 3 * k1**2 - k2\n",
" return apply_distortion(pts, b1, b2)\n",
"\n",
"def remove_distortion_iter(points, k1, k2):\n",
" # as used in e.g. matlab calibration tookit\n",
" pts = ptsd = points\n",
" for _ in range(5):\n",
" r2 = np.square(pts).sum(0)\n",
" f = 1 + k1 * r2 + k2 * r2**2\n",
" pts = ptsd / f\n",
" return pts\n",
"\n",
"def plot_compare(ax, a, b, arrow=True):\n",
" ax.scatter(*b, marker='x', c='b')\n",
" ax.scatter(*a, marker='x', c='g')\n",
" error = np.sqrt(np.square(a-b).sum(0).max())\n",
" print('error: {:0.2f}'.format(error))\n",
" if not arrow:\n",
" return\n",
" for (x, y), (bx, by) in zip(a.T, b.T):\n",
" ax.plot([x, bx], [y, by], color='r', lw=0.5)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"k1, k2 = 0.05, 0.01\n",
"\n",
"pts = grid_2d(15, 15)\n",
"fig, ax = plt.subplots(1, figsize=[6,6])\n",
"ax.axis('equal')\n",
"ax.set_title('Grid of Points')\n",
"ax.scatter(*pts, marker='x', c='g');"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"error: 0.20\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAF1CAYAAAAA3+oBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXmcU9X9ht8TdkUZVGzdcNfWFWUZUBBcgHFf6oYbIsoimEyGfZtkQAS1zhCsrdpaikvFamVxYdEK1NY6ivtWf3VDUVBEBlBZ57y/P25ucnMnmbnLySRMzvP5RLkzyZNzk3O+996TzHkFSWg0Go2msAjkugEajUajaXx08ddoNJoCRBd/jUajKUB08ddoNJoCRBd/jUajKUB08ddoNJoCRBd/TV4jhLhfCDEl1+1wghAiKoR4NAveD4QQfVR7NYWNLv6anCGE+EIIsVUIsUUIUSOEeEUIMUwIkeiXJIeRnObQdY6C9vhy1OPuI4SQQogf4/v7sRBikJPHkjye5AqHz5O1fdA0LXTx1+SaC0nuBeBQADMBjAPwUGM2QAjRvJGe6huSbQHsDWM//yiEOK6RnlujSUEXf01eQHITyUUArgIwUAhxAgAIIf4ihLg9/u/9hBDPxq8SfhBCvCyECAghHgHQEcAz8TPrsfH7XxSfMqkRQqwQQvzafL74GfI4IcS7AH4SQjyewdE9fkVSI4R4xzr9IoQ4XAixMn4m/wKA/RzuK0kuALARwHEO23pO/N9RIcTfhBAPx5/3AyFEl/jv6rwOQojWQohHhRAb4u7XhRC/8PAWaZoYuvhr8gqSrwFYA6BXml+Piv+uA4BfAJhoPITXA/gSxlVEW5J3CSGOAfA4gNL4/Z+HURRbWnwDAJwPoIjkgDSOgwA8B+B2APsAGA3g70KIDvHH/xXAGzCK/jQAA53sY/yAdSmAIgDvOWyrlYsAzIs/fhGA38VfuzqvQ7xN7QAcAmBfAMMAbHXSTk3TRhd/TT7yDYxia2cngAMAHEpyJ8mXmXlxqqsAPEfyBZI7AfwWQBsAp1nuM5vkVyQzFcPrADxP8nmSkuQLAFYBOE8I0RFAVwBTSG4n+U8AzzSwXwcKIWoAfA8gAuB6kh87bKuVf8XbVAvgEQAn1/OcO2EU/aNI1pJ8g+TmBtqpKQB08dfkIwcB+CHNz+8G8AmAZUKIz4QQ4+txHAhgtblBUgL4Ku42+aqBdhwK4Ir4dElNvHD3hHEAOhDARpI/We6/Op3Ewjcki0juQ7ITyXku2mplneXfPwNoXc/nFo8AWApgnhDiGyHEXUKIFg20U1MA6OKvySuEEF1hFL1/2X9HcgvJUSSPAHAhgDIhxNnmr213/wZG8Ta9AsbUx9dWpf0pbNtfAXgkXrDN254kZwJYC6C9EGJPy/07OtvLOjhpq1NS9iF+hVRB8jgYVxIXALjBYzs1TQhd/DV5gRBibyHEBTDmsh8l+V6a+1wghDgqXhw3A6iN3wDgWwBHWO7+NwDnCyHOjp/pjgKwHcAr9TTD7ngUwIVCiP5CiGbxD0/7CCEOJrkaxhRQhRCipRCiJ4wDkhe8tNXRPgghzhRCnCiEaAbjNduJ5GumKWB08dfkmmeEEFtgnGVPAlAJINP3348G8CKAHwH8B8DvLd9/nwFgcnx6ZnR8Lv06APfCmGO/EMYHoTvqaYvd8RWAi2F8sLw+3sYxSI6bawAUw5iiigB42O3OA4DHtjraBwC/BPAUjML/EYCVMA5qmgJH6DAXjUajKTz0mb9Go9EUILr4azQaTQGii79Go9EUILr4azQaTQGii79Go9EUII21mqFr9ttvPx522GG5boZGo9HsVrzxxhvfk+zQ0P3ytvgfdthhWLVqVa6bodFoNLsVQoiGlhkBoKd9NBqNpiDRxV+j0WgKEF38NRqNpgDRxV+j0WgKEF38NRqNpgBpcsXfvk6dXrdOo9HsLjRm/WpSxT8aBcLh5AtGGtvRaC5bpdFoNA3T2PWryRR/EqipAWKx5AsYDhvbNTX6CkCj0eQvuahfeftHXm4RAqiqMv79ZuyfODR2GL5CR4RCxs+FUPM8ZKrLvq3RaJou2Rr/1vr1SexZ7BM7HTVor7x+WWkyZ/5A8gWsRjFG4R4cgi+VvnB6WkmjKVyyPf6FAKr6LMRB+Bo1aA8ge4UfaGLF33wzdqAVxuIujMI9qBj8pZJLpsa4LNMfVms0/sjWGGqU8b9gIZ68dx0exNDEz6wHG+WQzMtb586d6QYpyVCIBIz/S0mWjdjGWQgyMmg1pXSlq/c5WuNn9sFLKc/ll0gk1WU+VyTi363RFALZHkNSkqGgZAmep1GS1Y1/OX8Bnzjr/hSnvZ45BcAqOqixTebMXwigqAgpc2S/vbcVvhxxF0o+uAfiqy+VPEdVFbANbXAaXsHJeFvJZVm2zyr0FYUm31DdJxvjzFwIoOqYP2Ar2iR+pmRaZuFCiG/X4cNeQ1PqV1WVUc+KirI09ePkCJGLm9szfxP7EVJKktu2kcEguXq1J6fVZR6NBWp5D8IsH7xG6VUFQDbDTmVnFfqKQpNvZKtPZmsMJfwLFvLh/o8kzvqV+BcsIO+/P/kc6eqXS+DwzD/nRT7TzWvxz4jPA0C6y7DRI37mfRjOMcO3KDsAtMB2zkKQgPTtTNdmr5eSmfz1bWuaBirf58bokwfga05BBQGFhf/1VVx02gy17bYVflXo4p8OnweAdGcsk25ex/90C5K7dvlqmrUzdUU1h+H3ygaD4ZXcE1vy+ooiGwcT1c5C82XrfTb7uso+KSVZGqxlDLdxD/yo7sz/yy/JUaMYKZfqXossFX5SF//MKLgCqLP9wQe+RkO6s4j5ve7hCXhX2aBohp2sQihvryiyUWRUOwvNl82zdCnJ/bGOkzFVyRm62bYRuJd3D3hDXVs3byZvvZXcujXxPPbndU0WCz+pi3/9KPoMIIUXXvD1htYZuDt38Z8njeC0iT/7apZ1EPTDEp6PZ5ReUVyDR33Pf2ajyKh2FprP7t0P37Efligr/KEQeTsmsh02KjtD/8PQt/j33jF1JxA7d5K33UZ+952/hlnJcuEndfFvmGwcAObMIZ97zvPD65xVrP6SLC/35bMXgOWnhNkC25UdAAZiDk/Au77P3sy2BrCLV2Ke0iLTFpuVfEBnfT1V+ppjB1thq9L2DcBjSqdTRuFu/hLfKHufT8ZbnHfWA+rO0H/6iRw5knJXbZ3n89zQyZPJ//7XoyANjVD4SV38nZGNA8D06eRbb6nzPfmkrwNKnSuKDz/ik33uVfbNilbYymmYpKxYA8YZoaoP66QkoyhPFGsVhRAwDnqqfKfhX+yLpcp8+2I9w7hHmS88cgdnYJyyb7hEyiVXdApS7tiZeA7f3/aZNIlcs8aHwMZ995HLl6vzNVLhJ3Xxd47qA0BtLRkOq+2I48eT69Z5fnidK4ryCLl+vS9fytnatNs5YegGZdM0Y3An22GjsjP/EKrYHv7aZ29jBBFlvoGYw8PxqTLfADzG4/GeMt/l+Bsrr3pV3Vn6009TvvBinefyzMKF5NNP+xCk8T3yiDpfIxZ+Uhd/d6g+APz8s/Eh0ZYtanxbthjtU3EqTJIbNpBTpvhSpFxRfPUVZWWV57O3OkXljTf55/P+puxg8sBFz1K+Wq12Tr08osz3fPcKyh07lfmWdp1IWSuVFOpIhPzHqaPUzaNv22acHKni66/JiRPV+VatImfOVOdr5MJPOi/+TWZVT1+0agXcdRcwdiwwahTQsaM/X5s2QCQCTJ4M3HMP0KyZP1/btsC11wL33w8MH+7PBQD77AMccADw/vvACSd4UkSjxiSAEAAOPhhi3VpU/bYWorn7fa3z19nohBtPfgrvHH2F579utDpvGXYUxBurUFXVDYC3v5is08aK5CqMfn0le9dCtGiuxFcalOjbVkAEhC+fSfTit8AjOyUeb/7lqee/OFXVhwFASmDmTGDGDDW+r74C5s0zaoEKFi4E1q0Dhg5t+L65wMkRIhe3Rj3zN7FcAUjbqZJ92xGWr4Aq8d1zD/nuu2pcO3aQoRBlrf0DMo+niC+/TGm79Hbrst5dTphAWSstv/PWLilJuW0bOW1actvHFVSt2ab4+1pb690lZfxrt/EP9RPbHl0kKatfM6ZVzG1PV02WB02YQBn/mqOfdpEk162jjEbVuEjK2bPJN95Q49q0KeUrnb5cUubkjN8Ejbm2jxDiz0KI74QQ72f4vRBCzBZCfCKEeFcIcaqK51VO/Arg1fAVqHhksDEvBuMAGV4aRnRF1J3vuOOAnj3xzKgLEV4a9u8LhVAdGYyxi27z72rRAo8c+D3+OO0S/y4A0Z0vYPmjt/tymWeT0RVRzMXbwDtv+25XxcoowsvHgTt2xH/iYx9XRFG2LPV9LFvm3RVeGgYoE67w0jAqVnp3kYT4x4vgWWcl9tHtGbrVhfXrwb32QnjFeF/7mHi9YjFMPH6dGtdbb2H+h39HdPMi/66dO/Hy9Wfgrr57AK1b+3OReCh6EZ5Z+cf8PeOPo2pht78AKKnn9+cCODp+GwLgD4qeVzls2RJPDuyK9r+fkzgAhJeGEauOoWZbTeJNduw7+2xswXb83yOxRCfx6mMggMWXnog9q+7z7yLxxkn74aclz2D0s0Hfrprtm/Bw7Zu484Hr/bu21SAsF+OZ392mxBWrjmHZJ0uVuVS89qZryhNDwQ4d1LVr82aE/xNR4/rLXxA59DM1rrfewt9+rMbMD+737/rpJ7wcGYTL91/p3yUllg3siVs6voNvWu/03Sceil6E1998Fv/od5TrWtHoOLk8cHIDcBiA9zP87gEAAyzbHwM4oD5fTqZ94kgpWbZwBGcVg4eUgoiCocUhH1MPks8M7MGThhkuPz4pJf888Tyee40a1/QHr+eIc9W4Ri0cwWm91LhCi0O8XaGr4gx1LkTBSG81rtNuAvtdp8a17xgw3E+Nq/kUcMbpil6vCDirGGw2Rc1rP60XeGCZGtfw88DeA9W4LroaHHKBv1qhAjic9hFUdHQSQhwG4FmSdT5BFEI8C2AmyX/Ft/8BYBzJVbb7DYFxZYCOHTt2Xr16tZK2eYEkWpcHcOlHwBMnArJcQvhYV5W1tbjmquaYd6Kx7cdHElddGcCTJ6hxXX51AE8fp8Z16YAAFv4KgPDvuujaAJ47GmDAv6vkhgCWHwbsbO7fFZgawMC3gLmn+Hd1GRbA2rbA2r39u44fGcDOZsAn+/p3HR4OoP024O0D/Lt+OTaAozcA/z7Uv6toYgA9vgKWHu3ftceUAM79HzD/OP+ulpEArvgAePwk/7XCL0KIN0h2aeh+jbWef7pXos5Rh+SDJLuQ7NKhQ4dGaFZ6GL+k39HcKPwAUub1PPleGJUo/H58ZtuetBxi/brMwq/CtfDXSLzbfl3PHmsUfhWuZUcZhV+FCzAKvwrXmwcahV+F66P9jcKvwrW6vVH4Vbi+a2sUfhWuza2Nwq/Cta2FUfhVuHY1Mwq/H1ej4+TywMkNeTjtU+ePmxxciVkv48zLN/u2uzao82mXdmlX03N5qVP1gTz7nv8iACOFEPMAFAPYRHJtNp8wGjUSfMzvJJNGsk9RUf2By0IIFLUuQqg4hKr+VRBCoKq/8YXpotZFri/nVPq0S7u0q2m5vNYpJTg5QjR0A/A4gLUAdgJYA2AwgGEAhsV/LwDcB+BTAO8B6NKQ08+Zf7o/Q3f7145KvkufJZ92aZd27f4uFXUqHWjsD3xV06VLF65atarhO2bAPII+Gvsem7E3dqJlSj6mCshUl31bo9Hs/mRznJt1al5sHb7D/iACvutUvn3g2+iYf4a+J35CJcpQhI1KC380mgyKBpJvYtYv1TQaTaOR7XEuBFA14DWUoRLNsQuA2hPU+miyxd98k77EoZiM2zEV5bh90KdQcaFDGvN0sViyY4TDxnZNDXw/h/3xeXpxptHkFarHTbbHOQDw6flYOOZljMOd2ImWAFIPNlnFydxQLm6q5/zDI3dwOiZw1hX/8v1puvU5rsLj7IgvlKxzTmYnztBE9bcKNBovZKMfZmvcmJ6LsIDH4iNl45xSUs6K8S8lj+dszr9JnvnXWYFRAPfMboHvgtNxzOZVEE/+TclzVFUB83EpylCJjljt+3Itm2ca2bp81VcpTRvV7282+mE2x40QQFWfhfgl1uFj/AqAgmmZnTuByZMhOp+Kz4uvTqlTVVVG3fKzEqtjnBwhcnHL6vf8n3rKWCHT1yf8yaN0S2zjLAQZHfSF7zMC09saP3M47lNyppGtbxVk42xL9Vlhvl/t5PP+7m6B8GUjtnEE7qVR7hVFWM5fwCfOuj/h9O2tqSFHjiT/97+Utqc8ZyN9zz/nRT7TLetr+7z6KjluHLl9u+uHpuu0ZSPUHgAAI0HpN3hS6TTVAfiagPTdibMxkFUXm3w/OOXz/marUJuevVHDPfCj2mmUMWN5CFYnirTKwq/kNfjiC3LECCNMKYvo4u+Ezz4z3owffnD90HQDrWzENv6nW9B4kz1i7WAAORp38e6rVyk7AJyDZbwCT6gZHDKZ4+v3rEh1scn3g9PusL+mQ6CWLbFN3dm0JGdiLIvwg5J+SJJyVoxVV76i7gw9vh6/sve8upocO9bIDMkyuvg7ZeNG4zLsk09cPzTtWaAZCOPhAJB2AAclf4syThn8tbKpn2mYxA74VtlAnojbuQ++9z2QzTb+AmvZFpuVXp3k28FJdfusvsPxKQPYpWw65VL8nafjZWUnDH+8YAHPxzPKpmfkwkWc2/8xde+NLYjF99Xe00+Tv/1to8056uLvhh07yAkTyH//W43PxwEg3ZnG6Ft/4mtdhpM//eSpOXUGQ80mvnRKGQGppNh0wLccjzuUFZtj8RFvwF+UFZuuqGYXvKbs4KTs7DLuND7bkcr29w6MV+KTkiwN1vIehJUdnCYM3cCZGKtuKumdd8jp09WdoatM4JKSnD2bfPxxNT6H6OLvFinJWbPIJ56Ib0rbr132TNsBwI0v7ZnGmjVkWZkxt+mhbXUGx9JlnHPuEyyPeNvPOgN36jSOH7I+ZSB7iXE0nXdgnC+X1XcQvuQteCDh8xO9WFtrFNWBmEPAvysUIiswJV5cvR+MzQjIMcO3cBKm+fpcx3SFQsZZf+zyFZ4Ltf19e/m0MRw/9AdPRbpOv1+71nxDE67U+7twSem58Kd17dhhBMu//LJrn1908ffKU09xyfB+DD0fTLyp5mp9keURd674AaDy8VDKKn+efa+/zqXD+np22QfDimt7cdLjt3hul/WActfTo7noxtMYDElGIu5d1uJSPC7ChYNO57hhxpxwMCQZdPl6JXx9Iuw0Lkg5eXLcL9lpfIjlLzl3mZS/FGGn8SECkhFElLmWdJvC2lrDhT4R1wU7sjzC4OIQgyHJq/A477zmTQYXh1g8LuK6WEeWRxL9K1pey5dOKU289m7Ppq0ukpTz5/OB6IV1Xi8nbavj2rqV/7zgJE5/foKzxtTnkpJ/LL+Ai8LnK3GNe2oYX720a8o3ehoTp8W/SX7P3w+87DJ8eHQRfjl9tu94Q7RqBd55J06dtxLzlyqI/+vcGV/v0wJr/uzNlbo+CfH8pcej/ew/Iryk1FO7olHje8kA8XWbnahe/Qr2OG0YIhH3LvNvM4IhorhPDcbu8W+csMdVCIaI6qIwZrt8vYQA2hURnbrX4O02s7Hs02WorCQ6jQ/j7dYxbNru7rWXkli0rAZvt46h0/gwIuVJ16JlNZDSxftIYtN2w9W9bCT6XroHypYZrk7da9CuiI6/400aUYKzq2OoLgpjcJe38fV1f8Hs6hiK+9QgGKLj74ybLjOWsPyk+XhvwJrEaw8QVVXOvpNvd3HDBrz02O0YimfqvPYNta2OS0q8dH1PXHvUu/hO/OxuDNld9B69mM419eHBOPjO+7Hw6lPAI4907MoJTo4QubjlOsaxYs6NvLcrWDROQYzj1q1ccXEndixVEyW4YHBPnjpEjeu+6ZfwisvVuCY9fgvHn+3PZU7xhBaHeEdP/+2qrVUX41geiZ+dR5Mxjp3Gh+pMnTnB3MfOt4AXXp1sl5dpJNO15wRw0pmp++hlyie0OERRDt7TXV3s5czTjbGkwhUsAbsPzo/oRaur683GfpYtHOG5VqgAhb6qp19Iov2EAC7+GHi4k4IYx23bMPiqNphzqrHtKzZOSgy+tJkaF4kbfhPAoyercV1zRQDzToCSGMcrrgrg6V9DSYzjJdcEsPgo/zGOUhLNpiVjHGunSAQC3tvVfUgA3+wFrGnnfx9PHBEABfDh/v5dR4QD+OWPwKuH+Hf9YmwAp6wDlh2lJsax36fAU8eriXG86n01cZwtIwHc/CZwfxdARnSM424L41Mgm9oYhR9QEOO4YnyiWPvxkUR4WZk619JwovCrcM07EcpiHP9+PJTFOC76lZoYx7JlqTGOZcv8teu1g43C77dd4aVhfPALo/CrcH3R3ij8Klzr2xqFX4Vrc2uj8KtwbWuhLo5zVzPg/q4ARAHGOKq+5WraR2XMm2qfdmmXdjVNl0qQZzGOuw06xlG7tEu7GtuVC/ScfwZIprx59u1c+rRLu7SrabpUoOf8fWJ/8/y+mSp92qVd2tU0XY1JQRR/+8VNnl7saDSaAiEfalKTL/46a1ej0eQT+VKTmnTxJ7OfwWk+T33bGo1m9yMb47qxapITmvS3fcxYNMB4cR+NfY8N2C8lNs0v0ajxppk+880sKtJXFxrN7kq2xnVj1CSnNOkzfyD1xb4BD+Nm/BFVlc7XTqmPbB/F9RWFRtMwqsdJtse1EEDV1C2YiXE4Ge8AaPzCD6Dp/5GXdbVIgOyOV7iiU4jy2++U+n+Jb5St8U5mJ4LQ9NS3rdFkE9X9L5vjJBQysrTNxDElcZMk5Sv/4YpOQXbAt0prhgn0ks7pwyJCIXIvbOKLncdSLlnq+znM5zkbLzCCCJthp+83MVO7/XaSfM+0zYavkMj392J3CoQnSfn1N/wdbo3nXivoi7t2Ud51dzwXWGalzaQu/gnq7XCPP05WVPjK1bS+ecfiI87GSI4ftlHZAeA8PMuO+EJZxJ/KgZLPAeQm+VwQVbry/b3IVqE2PRdiIQ/CV+oK/6o3uPyUMNvgJzVn52Z4+/vvZ+1qxUQXfwv1DrLPPzfelA8+8OS1d+AJQzfwXozgtIH/U1JoWmIbZyHIjvhC2QHlV/gwMU2VL5m2hXZwKrQweKu3J/7JFtiurlDPX8AhuD9RpH37nvo7F55+JwVq1ez/vHnGG7t1a/I5sniFq4u/G3buJO++m3zwwcS74DQqMd0gDo/cwZW9JpEvvZTx8Q0t+mTtcOYBIDrIOAD4iZiUkmyDn3gvRrAFttdZP96ty2zjRVhQJ4bQT4wjUJsy2Py4giGZdtubz3657j56UaXLxIyENF476ctljXFsg5/YF0t8HEhSH1D7wYecjKmeCnW6fi/nL4hPo5BuztDTjiEpjaD1J55wdXDOOB43bybHjiUXL3a+kwrQxd8Lr7xChkK8c/5oV1GJGY/iDzxAPvRQ2qi3hnz2M42yEcYB4OJhIQZ9xDia3kPxOad17MVO45MBIl7iJaU0fDf86mIWd7/Slyvh6xNh9MhuBGoThd+rq3hchIH+t/F8LEoUfreRkCbW6EWzyKqIcbwQC325zP5VWyt5JP7H6zCXKPHnMg8A43AHD+k9iOgTcV347f2+9oeNfPzUk9nsjCmuCnU6l5SSD5ZfwBn9z3d9hZLONXrBCP7rqh7ka68l7ufk7DzT2P7jfYONDO9vv2145xTjtPg3+a96uqJHD7CiAp0fW44PH3MelWj/ilZie8gQ8OCD0f1PS/C7V9z5ioqQ8t3f397bCqtH3IkBb67EAg+RkLR8XS0UAj6rPRRrTtsPnT6KofOkMKR0H71oOgHikUMPxbXyb+g6IeTJZfpKwwRa1+DNrq/htOKrURomSr3GaMKIhJQ97kXxkbcDIFDiPhLSaFsyehElYQzEHKDEWySk1RXoH0JnrPLlMqMEO08KYwD+ioXn/Afo7i1e0nSVLg1j+o3/hx3HLsZXZ84BWtegNEw4bZrVFV4ahtxVi8f7nYkR57yDE0/bjNpaIhRK/TqlUxdpRC+uevNZLOh+FIIhJsZJVZXRvzNFV6ZzRR4fgsOm34dlFxwHdkmuh5ZxXNfjKns+hOaVMez938/Bqipg//2dvWC5wMkRIhe3XMc4zh1XwvI+YMvJCmIcP/yQKy88me3GuYsSTHfm4ScS0n4pW1srOaNvH3Yf7N5lP8uqrZW86sYBvOUCb3GJ9mmZ0mdvS4lxDHp4/aU0XCgJceoZ/lwkkyHr0dQYRy/Ri6br17eCAy5T42oxGby9V9LlbUrKuDJCBKwqNvq/GQ7vdurHur796L7gyUNhu9J0/jlHfdGLbufPra5ThhhxlaPn3+qpT1hdHUvBe7uCM+6/znOtUAH0tI8/pJQ8NAQOvtAYTH7fTPn99xx2frIA+fHJrVs54lxvLvtda3fVcvh53lzpDiY3XQQi4m0frT4pJa+7FBTl3lz2g8kVl4Mt4gdyv3P+iIIDL46/Zj7n/E+7CTw86N1lUh6RPGG4UcwQReIzAG8fIEseFgLPvj752rsp1HZXh9Hg5Vck25X6e3euvcerGZNSSraeBIb6G33Mr6vZFHDc2WCrSf5rhV+cFn897ZMGxqdTVrcHHups/Mx3jOPr04yYN/jzkUYk5H3F3lzWS1eSKHuhDH/o5s0VjVr//N2IOPzzqfAc42j6gGS8pNcYR3PqLBgypnqePCEZ41hdFAbg7rUXAmhXRHQanxrj2Gl8GO2K3P3FuNX1Skfg8328u4D4NFL3MN7/BfDWgcbPypaFUVlJ10sRmH3/i/bAP440fhZearxeVVXuljYwXevbJqMX7bGXTvfVdG1u7X9Mmq5tLYBYD6OP+XXVNgPu7AVsb6FjHHfbM38d49i0XEHbY+3bTWEftWv3d6kEOsbRGzrGsWm52ttcs/pXQeRBu7RLu3KNjnHMAKljHLVLu7SrcV0q0DGOPtExjtqlXdrV2K7GRBd/jUajKUB08ddoNJoCRBd/jUajKUAKqvjbP9s3z3jNAAAgAElEQVTO08+6NRpNEyWfalDBFP9oNHUNEcbXpdE5uxqNpjHItxpUEMWfzG4mp/kc9W1rNJrdB9XjuTFqkFsK4o+8rCHusRgwN7YRNWifsmqmH6JR4w1MLnVgvLFFRf6P6qR9SYYcBD1rNHlKNsZHNsZztmuQFwrizB9IvvgCEsNwP0bht6i6Y6vvFz2bR/RsXSZm46xGpU+TH+R7P8nG+MjmeBYCqCpdjbswBr3wMoDcFX4AhbO2j3WVR4A8DJ/xH6eOpnx8nu8MNdPdGj8zhCo2xw7f8XTpginyMcQ933N3VbpU+/K5bfneT7I1Pkz35JvX8hY84Dp0JiNbtlBOv4MLet6lLhc4A9BLOiepr6PELv8n5W3BlAQfr88BJEPc5TvvKmv3sfiIR+H/fHcW1QMmGwMwX3NyC6ltu0M/sXpL8DybY4eaYiol+de/Uk6cxLbYnCjSnp21teTcuZRjx7H8pq+ycrCyo4u/jXoHR20tOWcOOW4c+fXX8d/b1x3P/O7YryoC2MW/945R3v1bcscO1z67uxl2shxRnovnKKV3l7Wtp+Ff7Igv6qwh7y93NzXwI5e5uypdqb78y/CVknXCVryEryR9st731a3LbGMoRJ6HZ7g3ajz56vT7nTspb5/OS/F310U67Rhau5YsLaV84cWU8dxQWzOOx5dfNqIcq6tJZucqOR26+KehwcvizZvJ6dO5dFhfjl4wwtJxM2fI1ndWM/36jyhvHcH7HhrmKsM3nRsgB+AxzjqzH4PPB1277N6W2MbYQd3YsfcgJbm7+542hqOO7UlAJgq/n9zdY3tez32wPlGsveTumi6UhLgvvvPlIrOX4bsfvvPliiyPJNK2OuN1tsA2oiTE4nER18U6JcN323ZWYDJRElKT4fv0fA497kyiT8T12XSdrNwNG7jiopN59U3DHRfpjK7aWs4dV8KV1/Wi3LTZ1VVKugzf6F8GGXnAf/1rnQeonupLh9PiXzAf+AINZ3Jir73ACRPwavFB2P+u+/DwxPNBKevNozVDQ6yf2ps5ojuO+BUQm4Vfvv4RmlXFMOq5IEhn+bZkauaulECH0ADM3bYvDp06G+Pmj3DsSufdgZYYc3xXjNo6BxeMHOw7d3fD3jvw/a/+hTO7Xq4kd/eH7o9g6NEXAT5yd00XusdQesT5vlxkdjJ8D+pzM67A33xn+M6ujkH0K8U1eAw7S8YB3WPGvrsIrTFdZobv4j4zMPeMr4DuMf8ZvvMXYMYDs/HAlcuB1ka7GsruzeTie+/hn4POwiW/fgfzvmmJYIiQEo4ygeu41q7Fyt90xty1S/D0tacCe7XNOJ7tucB1XFu24LmbeuLHx+ZgwdWngFdfXafINFiDGhMnR4hc3HKd4RtaHGLPQeDNFzrLo63viC6l5PQHr+dtJe7ybdNdJgZDkv1H38Kyfmpyd7uOHsEx56jJ3Q0+H2Rp/2SMo9/c3SEXJGMc/bquv8QS45hHGb49B4HHjPTnMkNqThgOnj4o/l6WhDxObxmujqXgZVcmXy8/Gb4dRhuZu9Z9dDvfbbr2Gg+OPQcMlIPFkdR9dDqNYrpaTwKjvcG2E+r2e6dn6Kar2RRw6hngQeHcBrmQzs/89Xr+GSCJwNTkhZEsl77X8/fiY5rvMQPe22b/DrOURLNp3vfT6vPTLiD1aicYIma3T7qCGyVmVQnHZ0oqXak+AtEABr4Vj3KMSoRCwtVX9uyuBB5cpq80XHcfZ8eEp++Rp+urgPD0XXe7q3aKRCAgEq+BG1+mdnn5nr/K8a26VvhFr+fvA8anU6z4zvD16Kvbh/y1LV3urleX1ee3XUDd3F0rbnN3VbpMXzYyfK14zfAFGN8nCyVhBEOsM1XRoClDX4WPDF8rZoavOZ3ipvBnapcVp4Vf1fhWXSsaFSeXB7m46QzfwnWpzN0tpAzfoM3ldnprd9jHpupSCXSGrzd0hm/uXSpzd3WGr3btDq5coOf8M0DqDF/t0i7talyXCvScv090hq92aZd2NbarMVFS/IUQJUKIj4UQnwghxqf5/Y1CiPVCiLfjt5tVPK9Go9FovOF7zl8I0QzAfQD6AlgD4HUhxCKSH9ru+gTJkX6fT6PRaDT+UXHm3w3AJyQ/I7kDwDwAFyvwajQajSZLqCj+BwH4yrK9Jv4zO78RQrwrhHhKCHFIOpEQYogQYpUQYtX69esVNE2j0Wg06VBR/NN9umH/CtEzAA4jeRKAFwHMTSci+SDJLiS7dOjQQUHT0mP/glOefuFJo9E0IfKt7qgo/msAWM/kDwbwjfUOJDeQ3B7f/COAzgqe1xPZDFHOtzdXo9G4I1tjON/C2wE1xf91AEcLIQ4XQrQEcDWARdY7CCEOsGxeBOAjBc/rGnL3i1w0XfVtazSFiOpxkc3Y1HwLb483zP9SDADOA/B/AD4FMCn+s6kALor/ewaADwC8A2A5gF815MzW8g72NfLdrlTYkFN1Sk++xyRm06nJHarfT9W+3SkW0u5XVXcyAR3mkhkpyf5YzHJEeST+p6z47Q4HlWwcTLIxEOvbzqWvEFz5HDFpfbzqQp3VAi0l5Qsv8k6MiSfoZe8ESRf/DFjf4D2xhUNwvxHkvmSpEeeYuF+GaLYG3IBkFOU8HS+nvLl+YhzNiD+zQ9rXafey/n6muL9cRi+SyUKRTBcztssj3kZKJMI6a74HQ9Jz7m5Td6XrE34iIe1r93tZyz/ZttT19o12SU+FOtN4lNt3cBAe4lV43HGBrnds//gj+cADlKNG8w8XL6ZArT7zb+iWrRjH9GcMkvddsoxy9Bjy97/n9OfGu45dtLoFankZnuLyU8KUK/+ZNurNTcShlOTpeJlTMZlFp49NWa3Ri8ts53Fdh6eEfviNXkRJMuLQS1xiom19IrbQD28Rh9Z2mftohru4jTgsBBeZGglpFCl/rtDi5PvYCj/zyF4DiT4R14Uv3Ria+ftrGDuoWyIT2KkvnSv8zEjOH3MR/3HqaJ6IdxwX6Exju+qvQbKigoxEKP/7cVanlOw4Lf4FtbaPucZ73Yg2ge9O7gtx911g37445fHlKJoZw/Q5g0A2HG9IpkYu1soADgn9Bme99VvMufNb9J69CG/8LZZY59tNXKLp/jd6IoYgRq9djk33xxBeXOraZb4G5vr7B8u1mP5jDC3OvA2AtxjHeCtR3KcGwwMxdOw9GPAYlygEUFlJdOpegw+ax3BW9ysQixnr3nuJODTbhe4xLHnjRgQCxOyPw54iDq2u2R+Hlbn+9MFIdAx8qaxd/QLLPLvIZCQkSsK4EAvRvfhq35GQZcvCqLz1f7inY3fs6DwXaF2DykrnuQVWV3hpGKypwZLre+Dz5/6KsuOLsRl7A6g/vjGja8cOzCvrhwNm/A5/3dAWZ795F84KneQoFrKOS0r8fuZvcNC0GA7+17tgKAREoxDHHuM4GrJRcXKEyMUt23P+9W9Ljnl6OIdcAA66yFm8YX3zmnLXLj406TyOPNddXGKmaZqu3a/i6L7+oxcByQP7DObkM725rM5gSLJlvxGc0sdfjCNpTA2gJMTRfY24Pj/ro5tr+A+5wH+MozUPYODFaly9bgRPGqbGddyt4PkD1LgOKU1GL/qJhDRjHCefCTafgsTVoZcpn9DiEPceD97RE+wwOrVdbs6krTGOd54GnjjM6F/lEZlxDDfkajYFnHE6WHItWPpcMO1rr/JzmfqAjnH0B+k+mo2sG7lobnvxAXVjF8m6kX1uIiGtVyhVVd5d6ZzZiEs0MeP/3JLu9fLSLrvLjHFU4VLZrmy5vEZCSltMaO0UibIykdIH3VwBWMeQdR/NfuM0FjLTeKxvDLt15Qq9pLMPSG/RbPb321r4vUa9WWMX47Y6sYRuIiGtl59+XHanirhEa+G3Rxx2nhSGlO5OVBKF7ONU1+yPwygNs8EpgvpcZoyjCpfKdvlxxY1KIyHtMaFly8KorKTrKY90Y8job8YOmlMpTgt/pvGYaQx7ceU9Ti4PcnHTMY7Zc1k/3E0X/5fLuMTyiPHhrvnY2trUbbftKo6k7qPZruKIdqVzZSsSsra27rZXVz6MIdUulUDHOHpDdTRbPsbGGXfLz+jFiqgAlheh9/ak643pVShb5q1dJX2KULwtZLQn3i4AaK9daV2N1VfdTOHl4xhS7coFes4/A6SOcdQu7dKuxnWpQM/5+0R1NFu+xsZpl3ZpV/64GhNd/DUajaYA0cVfo9FoChBd/DUajaYA0cVfo9FoChBd/DUajaYA0cVfo9FoCpCCLf72P2/I0z930Gg0TYB8rDcFWfx3t7zdfOw4Gk0uydaYyIY3H8PbgQIs/uTuFeKezVDp+rZz6SuUtuWrK9992RoT2fBms974xskCQLm4ZXs9/1CI3AffM4BdadcBdxu7mDklLDWW0Kmvfqd93XF3C0hZswekTK6HHom4d1l9KqIXdYxjbl0k66xrbyZxeYuFlPX2N7cu65jwspa/1WUlXbykU29DtcJ07YEf2QY/ZS3BywQ6xrF+pCS7oppTMZm3YyLlI4+S69eTzBzN1lAkofWg8hs8yTb4yShcL3mPcUwNX2FKxKFbl91XPC41si/X0YsqXaYvH+MS89VFGn210/hk4EpiVVWP0Yvp+lfxuIjrAmgdk9Z9RB9/LjI5hspfirB88BpegScS481rjGNkecR44EcfkVVVlBMmcgKmc3+sI5C9wk/q4l8vdQoqJGdc9z7lPZWUEybwmYE92O1msPTZ21wv0yql4euM1zkZUynHjuWfJ57HNhO9L/tqOMkQKjn2mNN5YJn/JZ2DIcmje93AnoOSiUhel2E2C0S7cWDzfiMTxdqPC1EQ/YO+XNbljRP5wiXelyjePVy1vlxmf+o0PsR98Z3xHsS3vS7DHFwcYunI7bz2pP5GMpvLZLA6/by2lr+ddRWn9wT7drmEgA+XlCx/ZDBHnAu+cGUX1sZiPAhfJWpDQ2f8dteY+bfyggHgkgHdKCdMIB9+mHLdt7Z6o8/8c1L8G5qekZKUmzbxj+UXcOoZ4A2XeItdTLzJQcna6tf4/HXdOfR893GJdud++JZ3nX0GS/v7j14U2MXLOp3HiWf5c5FG0T78jBt5e69kjKMfF0pCHHuOuhjHKy/PzxjH4sHgUbepcR07Arz0Sv+u0OIQO5aCU88AW042irWbwm937T8avCsel2ge7Nw2zXS1G2e4fnMF2CJ+ouFlyseMcZxxOjjyXLD84ZtSpn6cFmlrjOPtvcAJZ4FVlVdS7twZ/33D9UY1uvjXQ315uyZSykRBRBSuCn+mOX83vvqd7l2ZvH5dqb5Ul7eCoc5l+oKhVJeXPFq7K1H8FbhUtsuvi6zbV71k7ibbVtfltfDZXX7n/O39y8+cf31jyEm9UYnT4l9w3/YB6kYj2iPgSPfRbPaIRNMZCgHtiurG2TmNhbQ7KyvrRhy6iY0jUzN3g4tTXaUuI+iSPv/Riypdpk/HODp3AUbmbudJqa5O48OIxZjyTRhnbSNKbeMouNiIhLR++8WpK1OMoznOnMZCpnOVLQujXRHTjt/6vE5qRUP1Jmc4OULk4ra7xjjaf22Pr/M656+ibSbmt0PMKQzzQzkzDjCX0Ys6xjE/YhwTH7hbtt1848rqKo6E0vY3p2e+6fq5/fMpP3P+9cVLup3z1zGOuzF+o9nsvw4E/Ee9Jc8Y1MTGRaMAKVCxMulCfwGgCuGluY1e1DGO+RHjWNmvCoFAsn+1a1WEijO9RxwCRv8yoz0jVcLRWXo6l5+YULfxkvWpdYxjltAxjtqlXdpVaC4V6BhHn+gYR+3SLu1qbFdjoou/RqPRFCC6+Gs0Gk0Boou/RqPRFCC6+Gs0Gk0Boou/RqPRFCC6+Gs0Gk0Boou/RqPRFCAFW/ztf9uWp3/rptFodnPytdYUZPHPdqZmNt5s1c5892lyi8r3c3cYD9ly5mt+L1CAxZ8OMzXty144XQYj05sdiXrzpXNKyZQO5HaJDqvPWOQp2SG9LPdh+sxVNzPtsxvsK3i6XdFTu7y7IlHW299y5TL7Zqb+5sZp7+f2drpxZqoVTmtNznCy+lsubo2b5JW63rbfGEerzx5L6MaXzpkuZq+pxDia9I6kvl7myp69PSyArl3uUBnjqDoS0lx1096/3K7nbx/f6drl1NlQrWio1mQD6PX8M2Oupw0QUzAVFShH1SGVEM8+A370EbZs/h6x6lhiXe7w0jBi1THUbKup98zYugb4R7GlOCfwD8yLrUWn4o14u3UMZcvc+ezOubEfcOeM7/F26xg6jQ+jstLICXDqsvqCIaL6nRrMro5h9sfGGusoCWO2C5fpq6wkOnWvwdutY2h2fjixHv/brWPYtN25CzDO5jZtN1zmGv6dJyVdbs5otcudi0y6zDX8m51vuDp1r0FlJR2vxKnaVbOtBrFqYwyZmRarZQwzZm5ALJa6Dr9Tlzm+y5aF8W7LGC465nN8EZuP4wMfIhZDg850LnNsb9vwLfj66xBPzEPVftNRgXJciScAOGtno+DkCJGLW2Of+Y8f+gNl9WvkY49RTpvGJQO6seIM8LpL3ccISknui/U8Ays4HPdRTp7MJQO6cfCF3uMSpSSPx3uchKmcemQ3jjzXf4xjM+zgtCO6clRfNTGO+511CyefqSbGsdP4EK+5DBTxGEe3GbJ215k3JGMc/bqsqU1+XZ2GgvuPVuM6ZiTY7WZ/LmuMY1k/JLKB/bh+MQqc1iuefubTVTTOiJecegZY+qtebIcfCLg7kzZdbSaCFWcYt+evK2btX+byVKxia/zs2Gm6AuVJ15IB3SjvvptcsIDy/Q84asTWvDzzz3mRz3TLZYavcT9v8YaZLvO8xDhmdjbdGEcT++vl2xXR7fLq8hPj2BiRkF4Kan0xjm6dmWqF01qjGqfFv+CmfeqLWzTj2kj3MY5A6gc6oRAgpfH/WKxuNJ7T6EW7s7a26cY4mphTF0pdlsts3S53Lq8xjipd6cZkp/Fh1NYyPsacx0Kmc3WeFE5MHyXHbcPO+mqFk1qTU5wcIXJxy3aMo/2oaz3j9xPNZg9rThdD6DbqzXSmi9VrajGO1seaUxf2be3KjitbMY4qXaHFobT9zWkgen3jO/VLGQ2HrDutFZlqTbaAjnGsH/tRV1VUovF1yaQvEBC4qF9qLKHbqLeks27MHtm0YhwDAYF2rYrQaVsIb0w39vGN6VXoPMmIErTH7GmXOle2YhxVR0KKEoGITPavQEA4/hC1vvFtfb3Ms3QVMY6Zak2u0TGOGSB1jGMuXVIypXDZt7Ure6587ROF4FKBjnH0iY5xzK3LXri8FjLtck++9olCcDUmuvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKk+AshSoQQHwshPhFCjE/z+1ZCiCfiv68WQhym4nn9YF/Vou6299jFdG4/PrvTWJjJu8vqMx9r3/bisz423T67IV8jDgvBla5/eX0rVbuS/6677dWVqV1OnQ2Nba/ebOO7+AshmgG4D8C5AI4DMEAIcZztboMBbCR5FIAqAHf6fV4/NBSqHF0RTVkmmfFlW6Mrop7cPSZE0aPCm8/ujK6IonRpGKVhJjJ33bisvshyYz9lPFc1EnXvMn09JkQTy0GTQGmY6FHh3gUAfaLRlCWJzaWB+3gIftUud0RXGH21NMxEgS1dGkaPCVHXubuqXeaYjEaN/lUa76v28evGBRjt6lFhtCtTTXDjso6hhmpNLlFx5t8NwCckPyO5A8A8ABfb7nMxgLnxfz8F4GyRowUwyPpDlaXMHM3WULxhOndp2IhLrBaxRHF0E+NodZaGiY3bktGLG2uMAeAmxjHpIxYtM/bTXMt80XZ3LtO3sSYZCWkemGZ/HEa1iGGjCxeQvxGHheAijf5VLYz+ZRbY2dUxVL9Tg401zs/aVbvMMVm61Oj3sz82XBu31aA0TMeh6FaXOb5Llxp9tfqdmsSByknQejqXdWxLyaYd4A7gcgB/smxfD+B3tvu8D+Bgy/anAParz5vLAHfrutxu4w3Tua1r57v11XVKosS7K9Xn32X6gqG6rqDPGEerK5+iF5uyS8q6fRUlRt6D27dStcs+JlFihMPbx68Xl5lpkakmuHHZ1/LP1wB330s6CyGuANCf5M3x7esBdCN5m+U+H8Tvsya+/Wn8PhtsriEAhgBAx44dO69evdpX2+qDBAIBYCD+gsPwBSLlqetsk0TFyqn4ogiYewogy6Xj1frSuQHvvrrOz4He3l2pvjk4rPdNvlxJHzHwYuNi0o8LMM5om01LXpjWTpG+ljvWLueQRGBqAAPfMrbnLpSQUnhahz5brsNqAKwsxxc4HHNxI6R0t06+3RXpXQ5AoGIq8AUOc+VM50pd4hmevF5xuqSzijCXNQAOsWwfDOCbDPdZI4RoDqAdgB/sIpIPAngQMNbzV9C2tJiXXwAwFzcCAGo2JcMbaF6+WSbFwkvDicAGt+6NmwiUhDHbg6+ucyBQEga6e3Ol+oi5Je/4cpm+0rCxj3NPSf68dGkYs1y6AEv8X+vkzzpPCifCSrQrey7Gp0EAJN/L7WGUhqswq8pd0VbtCttdbTYBSwYCMPqz00CXdK6NxZuAJVWYbcnVdOJM56op3pQYQ4mpHstj3LQ1qzi5PKjvBuMA8hmAwwG0BPAOgONt9xkB4P74v68G8LeGvLkKcLfGzbmNXUzntk6HBF367M6U6aP45XPQhSvVlxr3Z912OyVl38d0++yUfI04LARXyjSNrX+5na5R7TLHTLr+ZU7XuJ2mMft5unY5CVpvKMbRGgqfjwHuvs/8Se4SQowEsBRAMwB/JvmBEGJqvBGLADwE4BEhxCcwzviv9vu8XskUqgwYPw8EvMc4pnPPqhKonlAEMJQ4C3YT45jqNKIXg8UhYGMV2hcJRPpXQTh0pfoE2sXjJSv7VaFsq0C7VlXoXewuelEIoH2RQPHJRSguNvYR/QUQrkI1gfY6xnG3cQkh0L51EYoZQvGxxtm58eU8oHprEdq3dn62rtplHZMVrwoEj60Cio3+FakSxhhwEIqeLnpxVv8qVL8K4OQizJoh6tSETM6GYhwDAVFvrcn1mX/BxjiS9jn+unP+XqPZ0rkBf1FvVqfxnomUbS9z/uYUl3l5at12i30f0+2zG/I14rAQXOn6l3U7l65M/cs+5ty4MrXLqbOhWtFQrVFNY87575Y0FKrsJ5otvdtf1Jv17ipi48yH2EOmvRZr+z6m22c35GvEYSG48jXi0PrY9P1NbbvcXJnUv+3Nm2308g4ajUZTgOjir9FoNAWILv4ajUZTgOjir9FoNAWILv4ajUZTgOjir9FoNAWILv4ajUZTgOjir9FoNAWILv4ajUZTgOjinwH7shd+l8Hw67Pe3ViYybvL6jMfa9/24rM+1r7tlnyNOCwEV7r+5fWtVO1K/rvutldXuu1cuRqTgl3eob71NqIroqjZVmNZltVYtrWodRGifaKu3ZHlUWza7t0XjRrJP1VVQMXKKDZuqwGWxBd2i7hzWX3tLjbaVdmvCmVlAu2KiE3d3blM35JtURT3qTEWdoMwEsyKwijp484FGLGEm7bXJBYqM5csbteqCCtc5t9plztXdEUUS1bUoLjGXIwtnnS1ogglrd3FL6p2mWOyokJgY42xhHj71kWI9I4iHDYWS3PizDS+27UqQsWZSYGTNXic1IrGXtvHKQV55l9fribpPcYxnVvKZFyiFx+pYxzzIeKwEFxkYcY4muNx0bLk62WtCV5c5hjK5wzfBtd8ztUtV+v5S0nKjRt59+yredVvwCsudx5vmM5VetsuHo3/svSyC3jNZf5jHNvje57T5RLecIn/GEeBXezc42reeLGaGMc9zxnOQReBiKiJcbxgACjK1UQcnnYT2GJy/sQlmq7jh4MdRqtxHXUbeNytamIcO5aCF1+lJsbxF6PAgReDHUv9xzgWjQOHng92uQVs1XcE/cQ4tpkI3lYCnnUDeM7ImwnUul5333QFysHS/uAFA8DpD15PuXWro1qTDdBYMY7ZIptLOptH31iMuApP4Eh8ijO6bUe//vElXffeGzzqKBy/7BJ81h7Y3sJ5JKHpXh97DL/Cf1GLZji63xEYcPtx2GtBV/zc0riflxjHXoF/oStexxs4FW9N6IMfW3lzmb7mgVpciEV4eexl+GEP7y7Tt2fgJ+wTbouv2/lzAcYZbdGkALbE06n8RhzuUR7A9hZqXCqjF1tHAtgVABjw72peEcCeO4EfWymIcawI4MgfgE/3BRD1Gb0Ydx2yGVgx17/rwC1A52+Ak+ZNxYMYivXY33OM434/Acd/B7zU9Xd44eFv8dprxAJcgjfROWUdfieuoq3AUT8Ar/V5DOLzz4Ht20ECy5YBS18rwn/QA6+ih2OvV5wu6VyQ0z7JUAWBt3AK7sEo9Ht1KsTUCqCiAiwrQ7jVcny0PxIFw7ysc+r+K65FOaahAlEMWHw9yjY8mij8bnxA8oDyb/TELJTi5ZL5icLv1mX1SQSwsGRlovB7cZm+0jCxtWRSovADRoyjl5MLc+piiy2W0MuHmKbLfB9VuKz4de1sbhR+FS4GkOgXXl1kPHpRxAs/AJQY0zZePlS1ulYc7s8Vjru+2Rt45lfA9JINWI8OAFKnVhy7AHy/J7DycKDsyP+h738qUI5peBOdATgv/Karpg2w6iAgvM9r4MSJwNSpENOmot+rUzEHg/ANDnTsbRScXB7k4pataR8y9fLLvCWmfBqIZnMz9WPc6sYj6hjHzORrxGEhuAo1xtHcNseBvSZ4cZnb9dWabIHGinHc3UhO+STj1cxtwIhK9BrjmN4tEHu1CJ26G3GJOsaxfvI14rAQXIUa41jZrworVwJvv1qEUEikqQnpvQ3FODuAI5MAACAASURBVAKigVqT2yuAgpzzt3510oguRJ2vipHeYhczudsVERVR977k/XWMYz5EHBaCK13/auoxjpEosalG1FsTnLqs205qjWqczvkXZPEH6nYWt50nV26NRpMdsjVuG7se6A98GyCbuZr5mtmp0Wgyk61xm6/1oGCLv0aj0RQyuvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLfwbsf/ns9y+hVfry0cU0sXr54ALyNy4xX13Gwl+Zt9266tvWrtyhi38aoiuiKUsbM75sa3RFNCc+a1+KroimLJXstW1karvMAuvFFY0CPSYk28X4Es89KnLrAoyIQ+vyxubyx308LKxSCK7oiih6VCSXXSaNZZl7THAXu2i6MvUvt/XRPoakTO2rbnwqx7fqWtGYFGzxt3cWc5v0F+No/7WU6mIhyWSMY48K9y6r04yEjFmiF3tU5DbGUaULyN+4xHx1mf1LdfSieTAxI0fN6EWnBxP7mIxEjX00+6qUdByN2ND4tr9e9e2vm1qRqd7kFCfrPufils31/COR1DW1zTW3IxFzWzL0fJDHjgBLrnUeb5jJWx6RLH9kMM8f4C4uMV3sWzAkuffZw3jh1f4jIYMhydJnRvICS7u8RC8m1vTvH2T/a/3FOFrzAXrdCAbK1URCdr4lP2McjxkJ7jNWjevwYDwq0YfLXIf/oDB4wnA1MY4dRoOnD4Kn9fetrtDiEPceD557jdEvzH10G41oulpPAn9zBdhmojGGyiOy3rpQn6vZFHDAZeC+Y+qOx4bqjWrgcD3/nBf5TLdcZPiOufVHyoWLyMmTKSdM4PWXgPvH81W9FOrywWs4AvfyhS7jWRuL8aBwsmh4KdZd8Bpvx0Q+22Mqjwi6d9mdx+C/vAujeOIw7y6r8xSs4pk3qHEBMlEw/LhIozgeeVvS5aUoWl3W4u/X1X4s2H6sGlfLyUa2rV+XlJKBcnD4eWDLySDgvvBbXaIcvOxKcObpYAA7PQeaSCmJCNh7IDjjdHAsZvBArPHkM12nDgEnnwnKceP45/OeZBv85CnHFxEjP7m0PygnTCCnTydffZVy565Gz/F1WvwLbtrHjFkMhYwM318H/gvEZmFZl4m488AYRIf9wEgE4TN+xiOdgO/aGo9rKN7Q6n0ktgEzAxPww0NPY9+bLsFZ1Xeg7JjPUiIO3cZCAkBL7EAFyrGsfAM+28e9y+78PxyNsSW78N4vvbsA4xK2NEy8VfIIlh+R/LmXGEfThZIw/n2oPxeQnP9ORBIiv2IcN+4BbNxDjWtHcyNG0I+LNKZnZAD4QzdgR3P4jl5kAHj6OGD8OYAsGQ2AroNMTBeEEbs4oS/w57M+Q3v8AMBdMIrV9eaBwO29gXDvrRgYPQxPdb8HgVglAoHUEJZMbqvrw/2BWT2A8Bk/gyNHAuvWQUQjqNpjEh7u/xgejX3v2NsoODlC5OKWzWkf0jji9sdiXo+53B/rLJdk/mMczRl6wDgjUxcLWTce0Y3L6rRG4XmNhEzn8hPjqNJF5m9cYr66Git60Y8rtDh1H1FiRC+6nfLJNB5ra2XK+G3ojN/R2JaS8r33WYpKHorPG/T6BTrGMTOk8SHqUpQkfhYOm0di/zGOVsrKBNpdrCoWUqDHhCJUv2rEOKK/u0hIq3N2TKB4nBG9iI1VmB0TCKIKwZLcxTjqSMimFeNY1DoeObok3r9CRvRi9dYizL7TiF50cvZrHZOV/apQVibwdqwKncYDF40twqZjheNoxPrGd7tWRSgrS31wsi64c1nHECEQ/tPxiOF4R95Gw8kRIhe3XMz5p34oI22Pcz/nb922n4E5PYNN92FRMCRTPixyOx9udVpDpiMR965kG1Ifa9/OlYus+9r7nVtv6i6zT2Taduuqr7+5dZHJ/mvuoxefvT+l++DYzZx/pm2n9UYlcHjmX5AxjtnK1cyWl1QfA5cNp0aTCdX9LRv9d3erC5nQGb4NkK3ip4uqRrP70hTqgs7wbYBCy+vUaDQNU0h1oWCLv0aj0RQyuvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhrNBpNAaKLv0aj0RQguvhnwP7Hb37/GE6lT7vcYV/d0stql/nuytfXXrvyF13805BvMY6qXWbfNF1m0fHTrsjy+mP2cuXK17hE1dGL9mjPUp/9y94nIsu9u4y1ZFL7l9v6mG9jKBuuxkYXfxukv9jFbPjMu6hwmbGQ0hIv2XmSEY3ndT8jUWLRsmS7zEKWa5fM07hElS6SWLIiGXtpFv7Z1TEsWeHu9bL2L7NdZp9YtKwGkag3l+oYx0z93smuqhzfqmtFo+Nk9bdc3LK9nn99mOty7zExGT/ndO39dNtSSoafGcleN7qPXrSv6llbK9lpXJA9B7l3pVtptNP4EHvc5C0SMtVpuLrenIxxdL+efKqr09BkjKPfiMPjbs3PGMfDg+De4727rBkIB4fBDqP9RS+a7frFKPAQSySkmzXzk20z8gD2GQseO0JNjGPbCeApQ+q+Xm5W9jRdLSeDp92U2u8zjeGGXIFy8KwbQFHufgypBjrGMTMNvsGffUYZjTLSGzx6pLMYwUw5nRWTd5APPUQ5yn1cYrrlX2de8w5jGJlSsL0Va7IVtnIaJqZk+HrptKbzIszn0PP9RRyarhbYxqlnqItLHHRR8qCUTzGOx4xMnmB4dZkHgL3GgxPPihdZD4Xf2q6Wk8FZxfFMYA+FP9k2yWZTwAlnGRm3gPvCb3UFysGbLwSnngEWYYPnZZKt8ZL3dAflypWes3bNGMdzrgfvPA2U991Hbt6c5n71b6vCafEvuGkfc9ojOZVibEcjBP7xD2DsWPD55zH+hHWoOBP4337G/eqLNySNJVtjsaR7VHAnNsf+jJ7PT4Q8tTPC57iPS7RGQ86JbUJFIIrP//pvPDxW4D8d3bnsTgAYjD/hwd5r8eyx3lxWZ2Ul8d4ZC/FA1+TPy5Z5d+0sGYfyM/25gORc+pxTAcQX08qnGMf/2w+JuEqvLoBASRhbWgN39Ir/qCRs/NytiUTZMiMScmxfoFYYrspKul6MjPFpkNpmwIwzgB/aAGd2vRzwEeMoA8CfOgOxYuDuHiWoic1Bs4B0FY1ousx4ydH9gDnL7kTvRWG8EXs5MYbNIKWamsxTSqYLAnjxSGBcP+D21q+B99xjFJtPPgFQT92JOn8NlOPkCJGLWzbO/NOdIYy59Ufeggf4j1NHUz6/mHLXLk+xi9Ypi0F4iHdhNGde847vGEfTfQLeZQesS0Th+XGZ7TRd5uWzl0hI0jYdEo/VM7fzxZVPcYnZjF5MF/XpxmX2AXOqx95HvLhUxzhat7t2v4p7oYaAghjH54J86LwnWYlSFuM/DV5JNBjjuHkz+Yc/UI4azd9fspQCtY0S6AId41gX61nvgtgX2Dv2MPaARLsbrsGZfxmSOGPwEuNoumMxgRXogzm4CfJR4+deYyGB5BnC+zjR+ME2I7Kvsp93l3GWZMRLLloWwtszq1C2VaCy0l0kpOksKxN4+50idOoewhvPGTF7sZlGzF67VrlxAfkbl6jSBQhUrygC3gkheGwVZj0vUBquwuxXjbhE9HcX42i26+2ZVQiFjD7ReRLw9qtGxKHTM/ZsxTiaY6iyXxVWrgReb10EoB0AZ9GIDUUvDnr2cjQLXIZDsRpooH0NxjjutRcwbBgEiWEvvIhjvxyHJ2NHoG3sBvyMPXMf4u7kCJGLW7bn/H+ND7gXNmU8Y/AT42je/MRC2p2pZwyyXnd9pPsA2Tqv6WXOP1OsXnkkty6TfI1LVOWKRJhyJm1+BuA2JtGkPCLr7SNuyEaMY7px4GXO377d0Bh240p/P/IIfMJ9sd7xlYoXoD/wTY/XN9ipU/VlndcPoRpqb33buXY21gdjTQnVr1m++1SPi2yOYbtfVd3JRKMUfwD7AHgBwP/i/2+f4X61AN6O3xY5cTfWnH8+F2lru+vb1mgKkXw/oFjb1Zgh7k6Lv68MXyHEXQB+IDlTCDE+XvzHpbnfjyTbunFnK8M3m2HKpM7v1Wh2Z7I1hhszxL1RAtyFEB8D6ENyrRDiAAArSB6b5n55U/wBXaQ1Gk3j01h1p7EC3H9Bci0AxP+/f4b7tRZCrBJCvCqEuCSTTAgxJH6/VevXr/fZtMzkY5iyRqNp2uRb3Wnwq55CiBcB/DLNrya5eJ6OJL8RQhwB4CUhxHskP7XfieSDAB4EjDN/F36NRqPRuKDB4k/ynEy/E0J8K4Q4wDLt810Gxzfx/38mhFgB4BQAdYq/RqPRaBoHv9M+iwAMjP97IICF9jsIIdoLIVrF/70fgNMBfOjzeTUajUbjA7/FfyaAvkKI/wHoG9+GEKKLEOJP8fv8GsAqIcQ7AJYDmElSF3+NRqPJIb6WdyC5AcDZaX6+CsDN8X+/AphrE2g0Go0mHyi4VT2dYv8KrJ+vxKr2aZd2aVfTdDUmuvinoanHOBaSS2UkpOq4RNXRi/n22mtXfqOLvw0y/2Ic890lZapLSn/t2mhrV6lHl8pISFJtXGI2ohdLbe/jRp99wv4+uskayNe+mq+unFDf2g+5vOVDjKMoB08e6i3esI7v+SBPsiR5efWZbTthuL/oRavreB8u6yqcocVGXKKZmOVlH80VKoOLQzx2hBGLhyhYHPEXL3nUbWDzKWriEq1JXl7iEq2ug8Ng2wn+ohellCyOhPjLUWDRuNS4RC8rZ4YWh7jvGHD/0cn30cvKnqZr7/HgweG6fcLda2a42kwEjwiqGUMtJoO/vlWNK1COxPjWMY67cfEnSfnPf3JWMYxM2qi3eMMEa9dSlpbyrBvcxyXWWbxq5y7K6dN56ZXeohfrLOn89HwOucB/JGQoRNZ++pmv6MUUX3AX7+medHkriskDwLRe/mMcE0U7Cg682F9counqdjMSMZp+XR1GG3GJpsvrwmG1tZJ7TgBndzMylM3C78UnpREJGetmREJ6ydy1uppPASO9wXOvQWIZ5tT7OHcFysGR54Jl/UC5fbvzhqRxiXLwhkvAGaeDcs0azy4VOC3+etrHzurV4OjReOS5O1BaArx+sPHjhuIN7b8i4/+ZNw+87z6M77UdLx2R/L2TuMQ60W8/bMQ/u5TimjUfYf5x7lxmm6xxk3L+AtzxwL140LIKiJdIyFAI+H1sO/5w5iWY3iv5e7fRi6YvGCJWVV+N+b+2/NJDLKEZCYmSMF47CIkYR6+RkIjHJabgMS7RdL15ACDNP/P36VrfFtjeHGixC5j9cRjBkLe4xLJlYfzUCnigM1D2H6DZ+WHEYnQdPsL4NMiO5sCYfsCoV4ALRg42ppMcRCSmc+1qBlScCbTfBswu6Y1waW1yfNBZNKLpkgHgd8XAc0cDL1/eDXz3Xct97I+p38UA8HAnYPoZwHOTrgDvvhvYurXhHcslTo4Qubhla0nnjNtbtpB33EF5550cPf9WV1GJ6ZaCnXzzWr7SPUz54os+YyHj7nff44qTR7Lo7KEpEX1eYxx7YQWHHHeWshjHvc8eZoR9l/hzpYslDPpol6pISNVxidmIXgwuVucyp3pOOP3aRDu9xjiarq6jRzDWDdzrnGF0Ewqfrp8HF4d4yhCw8tBOHDN8k+NlkjNFLwbKwaeG9aa8+25WTN7haGnn+mIcK+bcSDlqFDlvXkpjGmN5dugYx1QyLanavp1E5MhHgQ8/BEaOhDj4YOy5Iuo4dtF6Ng0AVZXEI+fPQ4slH2H+8KnoflZbFK182XMsJAC8GHsfE2LP4m7MQtdx01BcHMIsD5GQVm/zWE+8vH8v4NUT8cZzRpSgW5e5/2Vl4v/bO/P4qKq7jT8nCIlFJaAUxYpL9dXaWqkgERBFKouKUK206surIhbQSIYMW0IgC4sUAoSAC/CigLbVFH1JsLK4IEtbQaKCShUFFZUlsiSAQALJfd4/7tyZO5NJMnPvuTOTzPl+PveT3Mnkmd+c5XfOPXPnPDhW0w7HPtct+9xua5aQngi9toRYUwBAAGsKkNYvevaSgXHZtUuUbb1otks0yguwruVK0W1C3W6BT//1EnDuBUClNRtHc7vfPGM+mt+ZAK2qDQB7WnP7FmAUgLWJzdF3fg5aPDcT1Wje4NVJfdaLnyQl4952/dHzATdStw9DOq5DQYHZ+lRvV4Z2fVpaUjLEI7nApk3AqFHA4MHIfePGiG3rHBKhjBDROGTO/OsyU+iOTVzfMY3a5i1B/ic0azazfhJOcjbSeRveqTX7sGLjaGgD+vot4LPCs6JljtXQs2MJWWvNP2Bt2M6av7H+HXgeDrItIWXaJcrU8n4WYWrfdtf866vXcNf8jRiNz1+MtmdVy3werH9Y1fL+fqaar946j8PxXEixNtgfa2qovbCEb3Uaz4uw13FDF6gPfP0xF3YHfMOZGMNl/f5GzYYHa6A+oPFsnAirETakKdP6ra5B0I6ubPcjJ+z56juPpp5MrViuByfaXaCujP4RqG30ZWn9+egxvt51Gkcjn0k46UjiJ1XyD4qmkQI1fAJP82yckFboTjRCpzpMY/AEjsS6aFMkluuhMXnuOj2oXIqvOQhF0gaVQFTyD8CpCnWyETrpKVrfuULhBLLbnVMTmcY4qJhRyd+EkxVKKvN2hSJaONE/GtugEkioyT8u7vYRQv9E3XwngHEnTXKyfTu13NzAuwDCux+6PmLN+k2hiCWc6B9O9Genc5ClmPSBIvZwwsDdXKHBzhUKhcJJIpGDImXg3qhQs2iFQhFNYikHxVXyVygUCoWOSv4KhUIRh6jkr1AoFHGISv51EPhBuN0PxmXqKS2lpbSaplYkUck/CMrGUWkpLaUVaa1Io5J/AKSycVRaSktpRVYrKoTyTbBoHLFg44hc+5ZxZj1DS4Zt3OUStaTHlWNdS9N8Wpe6fDaOVuMyvAUuGQU2m2T/PXr34c+FpT3zA7XajQbPnmBfy7BePDfD33rRqlbyeLD1ODltomWmvyWkHa3ELLC9W47WWZN0dzEZWiIb3j7ZWGwc4+pLXuHAY8cw885WWHc58OaVgJathbn/u1mM4OzZ+OOWsVj+K/0hO3osKcGIxb/zOnDZ0vrsM2SnXoupt1rToulLKjxxAnN6n4Mxfa1pmT0XACL/5gSM7w1AWHuPht6cOcTU2xKQ2xNgApBNDXm54ZdXbi5QXkHMa52Ahz8Clv0GSCvX0DpZhL0fu6H1cUUCEgisu8K6FqCb1S89moC7dwLPpAA1kzS43cLSXvEk0SYzAWP/BWTd7it7c12Ho9VyYgLy3wLcfYHKyTbaKomk7ATMfAuY3RXYM8eeVoucBOSsB965Ali3xJ7WWbkJSH8POJoELCqugUiI3qKK+pKXDbh5MzY+dCtmd9UTPxCevaEfp06BY8ZgTvNSb+K3o8eSEix/Z55l60Xz01hRgY0ZD2D6zda0zDaTJPGPkX1QmGI9LsMUZ1Q6MXXJEOzWPT8AAKPCLC+fHtEpKx0CeuIHgJVV6dC0cJfvPIl/p27jeFmF/vi8nekoryDCqUqz1ocXATfst64FAJpGrKxKx7fJQIejAAh0ytKtF0O1SfTFpi9dVJwN7LwASPlOr0fNY70YzkBiaJ1qAeR3A7I31K7HUGMztE6fBYzrDYx+D8h7aai1PkSfJeSkXsB/HQZecfexpaUlALO7A5/+FNjw+07gDz+ErRVxQrk8iMYRlWWf6mpq+fl8ZWQvIic828Wg7NtHbcQIZr80NGwbR7L2Zk81K4pZNLKXJS3Sf8Mqrbqa7w7syDbjwJSc8LXMG1OluTROWfwQ0/vodn9pLmvWi5rmMSHp5+LE23S7P6tapM/GMSEbzPl5CmXaOOYgW5qN42RkSbFe7Jjh4kD8H7ulDPKz57SqJVDNv3W6ngnZ+rld68XU/7mHQwb43mOoG6YF03KXpHJuCpizbEit91hffHVZL/YeDK5+sAu106cbfnMNaJ2bAb41qBO1NWtC1pIJ1MZuYbJnD5CfD/H44/js4I9wVV4Xsu1i4OUwCYiPPgT+8heI2bMh3p8J1wXh2TjWsp0sWYlX5x/Asz16wJUSemzmmPzsJtvPweI2KTjy8a1IuVq3/wvHxtG8MVVhocD0S3bjmV+k6raEBQJAAUSIWmbNuQUC83olY3XV/Tj+3rOY+6Y1LQBISBAY0CcZ22a6MG33TAACH0wrgPvN8LWEEGjtsUucl1uAb7AMWPMw0lxAa5tak1ENrDnLspbZerHFn2vwqy2XAa3bY8C4ZCQk2LBxPCUws/AF/PfpTLx0fjJcLuvWi4BAszav4SelvXDir8eBvqJOe8SGtIQQmHX3fIwB0HXaVkxe/x1ynu8QkjViXdaL6QB2/VCNfm43MGUKkJwcvF+LhrUA4J99k3H7gXJg8mRg/HggMTHEWoggoYwQ0TgiOvMvKiJzc8lTp7wPhWqVGGz71+fveo1v3j6DrKkJW8/Q8NvutbiERb0WeM9rz3RCn1m7XORv8AH/gFe8s3bzv1v5gBYgE1BNwL6Wb79zfxtCax/GBbcOtPJBqKFn2CMahxV7SdlapL/VolF+VrcKNlsv6nV7hoA9LUMvLa2GU5DF5qjyq99wtUj9PbtTKzkXacwZsiesbZLr7I+HD5OpqSwc+WXI2zrX27e//pp88klyx47Q3qQEoPbz91Hnnt/HjpHjxpGrV1vW9WtsNRpX9JjFQSiSZvzQF6s5DAvC7ij16ZoTTqyYU8je7zyW9WI5tmCadus2UFdW+zP0jAGgHfZLiVOrOs21N2axJ9bJKc8zZ8j8fHLRIu8/15mTJKCSv4e6jBkWDd2s/1JWZkvf0EvCSc6Cm53xfsz6iMZysiZj24dWtl4sx+ZE3Qbqyh5QWqCSzWxcodTSrNFY1GsBH8ViebH++9+ky8UZY35wzPyJVMmfZPBGO2pkNd2YxVd6LZRq3n4f/s72+F5e45PcURpDsjY06jtvSnqxHFtj8dx1akAxtHtjLa/Fp/L6dcVRvt1pHHtjrWOOXir5ezAXbgd8w/lI5fTBn0q7zHKi8TnVURpDslbEDrLrtrEMKIHaTgwqS/u9zGzksgUqpWqTKvn7YawzDsMCJuKUI4lfduNT5u2KpkisDyhmDSf6tfk1LsXXHIBiaVcVBqEm/yZ/qyc9t34BwCIMB6Cfy/DYddKX0ylf4FhyElLEH7LbX2P02zVy0h5chj24DIC8nBRmINGf5Qc7nFrzlz2CG69T37lCoWh8ONGvI5GToGb+zo/g5tep71yhUDQ+nOjXkcpJIcWiDxSxh8yN3cyXhcHOFQqFIpI4mZPUxm4m1MxcoVDEErGQk+Ii+Vsh8IrI7hWSTD2lpbSUVtPUiiQq+QdB2TgqLaWltCKtFWlU8g+AVDaOSktpKa3IakWFUG4JisYRKzaOF46WZ+NoaMmwjZOpdZFbslaOPC27No6GVrvRYIIkLbONo12tNuPAxCw5Wq3Ggz+ZIEfrnEx/S0g7WklZ8iwhm08Ezx8rRyshG2wryV4SOXJyhQygvuFrD62mhk/eAf7hPr1C7VamtmIFh/X3JQ07etq2bczsJUnr0CFO7y5Jq7qas2+SpKVpfOpm30BiVyvnVl/yt6uFXPDhgXK0+gwGuw+Ro3VNqry42o4BJ/SSo3VuBjirq16XdrXOngA+01n3Pbar1XwiODcFvGSUfa1mk8BpN4NdH7WfK+wSavJXyz5B4OnTeOvBm/DRhcDfPdaLlm0cAbC4GMvXzbdsveindeAANuY8gj9btF700yKxbkRfzJCktSR3IIqvsadlTEjGF6fixxbw2jhajUvT9EtxAUBLsKdFEqPW+ts4hmsvadZKX5uOHW2Baw/64tLCtJc0a33eFrj6sE9L7+TWtA6eAzTTgDYn7ZVX+tp0HE8C1lwJDNphX+tUC2DaLcCUd4H0NaNsaZ2RaAlZ0wzI+i1w4z5gWdZdsb/kA6iZfyBaeTk33H09fz5Sgo0j9Rm/HetFP61Tp7ix/6/ZMlOClqbxf7P7864H7Glpmq416o00zr7JZ9FnRSsnh17bxj/+Hpzx9INMc2lMybH2HrNzfLaNax7o4rV1tFpeRhxpq13UsrO9VoyGDWY4Wl67xPFp1CZO9LNPzM6xppWS4+LKbk9x/PIR3jjTXFrI+9zUqrcDB/j6Q139yivUtxmsDaz944386RhrZR+oNavwfo7uLUfLbAlpV8u12sV7/wCu+FMPaiYzp0gC9Q1fC+zZA5Gfj/eG9kH/xJ5hWyXWoqQEoqwM/7m3R1i2kEEhIbKzUTq4Fx5rdZslLZr3QCkvx9VflOPKh8OzlzTjs5oUuKn0AMruvQ9YU4C8zQIFOeFpkbrWvEKBlKRkTGnWGf/44iXMmyeQ5ipASr/wyosEjlYIbNuejJtueAK9f30J3G6BbYUF6JgBtEoMsy4hgMpkYLsLKC8AWuUBawqAnQCuT4b3EiUUJSHQKjEZHStd2DajAG92ycGcvAJs2ABs25yMW68XfnXVkFayxxISawow7t+fI6vlFqS5E7FlfTK2FIoGbRIDtQxbwrw8gS5f9EXGXdchMUl/j/VZJNanJYRA74Vv4ZVHb8P6O1r5lX1DsQXTco/8G5aWHUPLLfsg+lmzqgy0hBy0bCtEz++ADh0saxmWkIe++hFiwgTdxrFFi5DjiyihjBDROCI+89+yRXf1qqwkyVozgLDX8YqLyQUL6vz/sPXmztXNICxq1dr9cOw4Zgw/UmuWGa4lJECOSquhNirda0tovI5VG8eWOM4JmGJLy6zXCe/zbpR49WTYOOYgh4Ac68U8TPJsG2zPetF4v08hg4E2mFa12qKMr3edYnkPmsB6Wzp4LZfcUeRrh2Hswhm03c+cSZaWhhZMQ1qVlWRaGrlnj30tkvzqKzI1lTxyJOz47AD1gW8YvPYaOWuWvB3ZAhJ/8nbUZQAAEWBJREFUuASGoRWXkH/5iy09v467opgL737d9mZShu49eI09sEHK5lSaRnbCVv4KH0vZ6lbTyPNxkOehQpoeQD6MJdL0Lsdub7KWoTcYL3o8leXsaT8JeWyDQ9Lay1RMYNZjBywPKLVE3W5y797a/caKnsUBoE7Ky3UP31275OiFgEr+oaBpZGEh+fLL8jRtJv5aM/Rt2/l612lS9vF3ucjWOMzpGC9tF0FNI2/HmzQ+qpWRbAwtWclG6VnTMzTboozX4yNpg9O4EUc5C25bVyd+nDjBLZ2f4JjUk5auKGohewA4fZrMyCD/+U85eg2gkn9DnD5NTphAbtpkWaLWTGOF/Rm/30xo/wGu7+iiQI20RH0XXmcyjkjryLKSTbBZoJ1ZodKzP6t2YjAxdG/DO7wY30lrh5OG7mU+RtOVpkl57+YBQMoVhabpS7dFRRb+OTxU8q+Pigr9UuzLLy1L1JqhryhmUa8F0mboLVDJp/EEW+K4tA7n1CxTVrKJZVPzeNNzon4DdWUPKLPu38rRyJenW1nJ97qkMWfIHml1xOXLydmz5S0xB0ElfwaZmWskv/6afOIJ8tAhW7qBa+hFvRZIbcgJqOb5OCh9hi6zIzcGT2ClZ12rMXnuGvptUSZlCdLQc6dWci58A4CUeN97jxw/nqyq8r5O4OvaIe6Tf7CGO/uPW/jPbmO9d/TYwWgI/bGSwyA38TsxM1KewAoryK5fJ9uhU1cUxgBgLFNJcdzy3Ak0fdwR6eUR18k/2Aj9/F2vcTTyvWuCMtA0/QNUmTMNp2dG9Z0rFJHAiasdp/tNC1SyJY5L6ede3SPl3PjrVF6BXVLjDjX5N8kveZmt0QoLCa1wPg6iLdq5xkgzSSZ10+VytPE+ZteE2WmLt1gwkFAoZLdDJ/uN0c9PIxGnkQhAntm6aJ2Mm7cWYGH3bOQU9kdCYXcA/u/DUUIZIaJxyFrzvwGlvBkb5Y7YaoauUMQcje2Kwvs6NRpH4Fm2QKWUPIV4nvkDvhH7Q3TyPiZtxFYzdIUi5mhMVxQGJJDuFliAx72PycpTIbx49Gf5wQ7Za/7hjtihbKEQzkzD9vYOSktpKa2oaDXUz63G5dSVBSKxpbMQYpAQYocQQhNC1OkWL4ToJ4TYKYTYJYTIsPOaocUVfMR2uUIbsUO1Zgt1phGrtnFKS2kprYa16uvnduKym6fsYnc//08B3AtgY11PEEI0A/AMgDsAXAvgASHEtTZft0Fyc/0vnYyCbWg3QlLZOCotpaW0IqNlNU9JIZTLg4YOAOsBdK7jb10BrDWdZwLIbEgzVmwck8fLs3E0tGTYxsnUMiz2ZNkSyrJxlKnVelxs2jiemwE2nyhHq2WmPEvIpCx5lpDNJ4LnZMqzXjxPkr2kyAZb2ezf3jaRIydXyACRvM+/geR/H4DFpvP/AfB0Hc8dBqAUQGmHDh2cLJ8G0TSNA+4HH7tbko3j1q0ce7ski8O9ezm1hyStU6ekWi/O7CZPa2oPeTaO2T3BZpNiz8bxzgfBLo/J0eo4HLxvkByti9NBV185Wq3HgXm3yNFqmalbL8qwhEzMAuffCLbMlGPjWNgF7GDTElIGoSb/Bpd9hBBvCyE+DXIMDPHiItjKVdDrIZKLSHYm2blt27YhysuHJJ7PHYALfwQWe24WsmXj+O23eHf6cOR39z1m2c6upgabHr8TT/WQoEVixai+eO5GOVqznh2MbRfK0XKvHqU3Eps2jvRcijfTgJpmcrQAn42jXa1dbYArj8jR2nYh0PGAHK29rYCLfgQSNPta5T8B9p8L/LLMvtaJROCv1wEjSu1rVTUHJt8KTF0HuFe5bGnVNAPG9gFG/xuY/KI1S8iIE8oI0dCBJrTso2m6veGw/pJsHI8e5cb+v2ZilhzrxeWP9+RvhsnRyvrbY5zUU46Wa7WLU3uA7pVPStHq/Cdw8cS7pGgZNo6ytFweG0cZWu6VT1KbPFleXJmZdK1Kk6O1cSMXT+ovR6uqiusHdiRy5FgvrvhTD/7qcTlaTy0YzOyecrTcJaks7ALmLg3PElImiKH7/LcCuEoIcTmAvQDuB/BgBF7XEmLlSrQ7Tpydat3e0Et1NcTEiXhvaB+MSLJmvegX2/btaNksCbcMsB+bEAJ9Vu3E6tQRUrTaV7XAL67shv7959nWSk5KRnZ1N/Qf81cpWq4uaehTfZ4cLcOyb3OeFK1ZfQsgtubIi+v4qyi48EogRdjXAvBocTE+6e2yryUEbhn+FBa+/xz2SdAa+Ow6nH9vJ2wQLW1rZQx7Ec8dOYHOb+2WZgn5h6VbIXp+C1x6ach6ESeUEaKuA8A9AL4HUAWgDJ4ZPoD2AFaZnncngC8A7AaQFYp2VGb+JiMW2/cUaxo5cSL5+edy9E6cIEeOJGtq5NzvvG0buWiRvHunZ82itnevHC2SWmamFC1NI7X9+8mnn/ad24jLawHp2XnLqiWkHotnn6nsbP9zi1okdeeoGTPk3QO/ZAm1jz+Wo0VSc7m8u1na1tqzx1t2trU0jVyyhHzjDTlalZV6f/3mG0vx2QGRuM+f5AqSPyOZSLIdyb6ex/eRvNP0vFUk/4vkz0lOs/OajlFSAhw4AAwfDgC1ZhPhmX0DeO454Le/Ba6+Wo7e9OnA+PFAQoJ9LRJ44QVgyBD7WgBQXQ0cPAjRvr0tLe8y6aFDEBdc4Du3GFdurv5tSezaDVx1Fej51ndenrUbqHNzAbdbeOMi9XOrt+Xl5emG6L73qZ9b0TPKh62SgaNHfecWlp79yvr++yGKisIXCaYFQIwYASxcKEerQwfguuuAVavsawkBPPIIsG0bsH27fa3ERCA/H5g9G9izJ+z4IoHd+/ybBgGJ3zYrVwLnnQf07ClP74YbgIsvlqNXUgIMGACcZW/Vz5tYiouBe+6xlGgMjERNAnjzTbB3H8uJ0IitogIoLARenvwl+PMrkZ6un1dUhJ8UzXpGnLL0ije0Bg8fsaUHmMrwvFZARYU3Rlv3jCclgUlnA0eO+MVumWuuAQ4d0g8Z3HcfsGkTUFYmRy8jA1i2DNi7175WrA8AoVweROOI2LKPTc/dWpSWktOny9Pbu1e3m7SB31VpZSW1dLe9mBiwL/uYMd6vpktxjcqcQFeafX9XQ3cS8tgMZ6TpAWQOcqTp3Yl/8EZssaVnjm3mAx9SK/q7NMOe7Ee/ozanwO91bO2/f/gwtayJteK3zPHjuuWirA9YT57UDZ+OH5ejF+ElIMTzfv4hIzvxf/stOXq0vEZYU6PbTf74o2WJWuYZBXM55aEvbLtt+SWaF1+S5hcrUMMpyJK6Q2pvrJXquQCQD2OJNL32+J6/xCe29Xz1onEqJkgd7N7uNI7amWppA8rfb3uW2sef+L2OrQHl/ffJZ5+1IRBAWZkeVHW1HL0IDgAq+TeE7MR/7Jg+Wzh1yrJEYGfS5s0nP/jAlp5fZ91/gKtuypOSWA3tacj0bkUrQxPQeC6OSkusTvkWx6KeoQmQ56FCahl2xyYOxApp7/ksnOb6ji5qNZq8bZLnzKG23f/DaVt6O3aQubk2BAKI0ACgkn99yE78Z87olfrDD5Ylas3QP/yIr91aKNXebgqy2Arl0vYi1zTyHByTMqt2MrHK2DEx1vUCNWUNJoYuoHnrWtaA0hereRdelxZn7qRqbrj+SWonTvq9jq0+9Pbb5MKF9gIzE4EBQCX/upCd+ANu6bQq4dfxfzzBDdePpECNtM7bDGfYF6uldN7AmO0mGicSISnfLzaW9ZwqQ2cHFHqTv6wB5Wf4lqu7ZEt7/yTJpUst3QJaJw4PACr5B0NC4q+1NPP0M+S779rSNHSNxjoZE9ke30vrZE4sLchONI3FYD6W9WSXYWMcUFwu8vdYzjvwhjRdkuS0aeS2bfLqy8EBQCX/QCQk/lqdq7iEL/Z9yXaCMtA0sjmqpNlOOtV5SWeStezEGo/ILsPGMqCY9QHyNrwj7SqXJFlTw3/d5Gb20O/ltXmHBgCV/M1ImvH7NdKtpVzZbbr0WYvs2ZBTM2pDq75zRdMg1gcUc1xO9CFDe0zqST6NJzj28ePyBi0HBoC4Tf61GuoKeWv8RoUn4ST/jHEENOmJ36nZUH3nCkWkcWL5zMk+ZLxG1p/KOBGT5Q4upgFARrmEmvyF/tzYo3PnziwtLQ3rf3Jz9W9HGs44LC7B8vkH8J8ew6U545BAQgIAEICApsmxW6sVu+fbmcnJEXL1USgaOZHoQ3r/1/s+AGn9H1VV2HLLWKz55WhkP3+prfiFEB+QrNNW10soI0Q0jnBn/rVG+hXFLOq1QPrI79RlpaFf37lCoagfJ/uQ08tK7tRKFmIkc4d8Y+vKBfG47GMUWE+s4zA4l/iduqxUKBSxSaSWlYwBIBlHLGuHmvyb1LIPoI/HzROqUeOxKpB2WQa1NKNQxDORWlbS81czWF1WDnXZp0klf6MyCgt9j7lcvsqSAemvFXiuUCiaLk72f1n5K9Tk32S2dDYXnMulz/hdLv8teGUQWAkq8SsU8YNT/T9S+ctMJGwcI4IQ+uWXeaQs0J3xkJyskrRCoYhdopG/mtSyD6CWZRQKReNFRv6Ku2UfA7Uso1AoGiuRzF9NLvkrFAqFomFU8lcoFIo4RCV/hUKhiENU8lcoFIo4RCV/hUKhiENi9lZPIcRBAHuiHQeACwAcinYQMYIqCx+qLHyostCJlXK4lGTbhp4Us8k/VhBClIZyz2w8oMrChyoLH6osdBpbOahlH4VCoYhDVPJXKBSKOEQl/4ZZFO0AYghVFj5UWfhQZaHTqMpBrfkrFApFHKJm/gqFQhGHqOQfgBBikBBihxBCE0LU+cm9EKKfEGKnEGKXECIjkjFGCiFEGyHEW0KILz0/W9fxvBohxDbPsTLScTpJQ/UshEgUQhR5/r5FCHFZ5KN0nhDK4REhxEFTO3gsGnE6jRDiBSHED0KIT+v4uxBCzPOU08dCiBsiHWOoqORfm08B3AtgY11PEEI0A/AMgDsAXAvgASHEtZEJL6JkAHiH5FUA3vGcB+MUyY6eY0DkwnOWEOt5KIByklcCKAAwI7JROk8Y7b3I1A4WRzTIyLEUQL96/n4HgKs8xzAAz0UgJkuo5B8Ayc9I7mzgaV0A7CL5FcnTAF4BMND56CLOQADLPL8vA/C7KMYSDUKpZ3MZvQrgt0I0uY3E46W9NwjJjQCO1POUgQBe9HipbwaQLIS4KDLRhYdK/ta4GMB3pvPvPY81NdqR3A8Anp8/reN5SUKIUiHEZiFEUxogQqln73NIVgM4CuD8iEQXOUJt77/3LHW8KoS4JDKhxRyNJjc0GRvHcBBCvA3gwiB/yiJZEopEkMca5W1T9ZVFGDIdSO4TQlwBYJ0Q4hOSu+VEGFVCqecm0xbqIZT3+DqAl0lWCSFGQL8a6uV4ZLFHo2kPcZn8Sd5uU+J7AOaZzc8A7LOpGRXqKwshRJkQ4iKS+z2Xrj/UobHP8/MrIcR6AL8B0BSSfyj1bDzneyHEWQBaof5lgcZIg+VA8rDp9H/RBD/7CJFGkxvUso81tgK4SghxuRCiBYD7ATSpu1w8rATwsOf3hwHUuioSQrQWQiR6fr8AQHcA/4lYhM4SSj2by+g+AOvY9L4802A5BKxrDwDwWQTjiyVWAnjIc9fPTQCOGkunMQdJdZgOAPdAH72rAJQBWOt5vD2AVabn3QngC+gz3Kxox+1QWZwP/S6fLz0/23ge7wxgsef3bgA+AbDd83NotOOWXAa16hnAZAADPL8nAVgOYBeA9wFcEe2Yo1QO0wHs8LSDdwFcE+2YHSqHlwHsB3DGkyeGAhgBYITn7wL6nVG7Pf2hc7RjrutQ3/BVKBSKOEQt+ygUCkUcopK/QqFQxCEq+SsUCkUcopK/QqFQxCEq+SsUCkUcopK/QqFQxCEq+SsUCkUcopK/QqFQxCH/D8Vh+RsHHLX7AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"d = apply_distortion(pts, k1, k2)\n",
"a, b = pts, d\n",
"\n",
"fig, ax = plt.subplots(1, figsize=[6,6])\n",
"ax.axis('equal')\n",
"ax.set_title('Distorted Points')\n",
"plot_compare(ax, a, b)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"error: 0.04\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAF1CAYAAADshk1SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXucHHWZ7/9+OiEZuaUHCHKNXEQUFUYSmWRRySKS8YqXXQVBES+IClPpWV0SI5lOXM7B/Z2TTufo2V337Oru6npZd/e32XUhcYWsu3vMSNAEBIxcBIkECDANKEyEqef8UVXd1c1M0l31raSLft6vV79mvtXVn36e6qrv09/vd6Y+oqoYhmEYRkRhfwdgGIZhdBdWGAzDMIwmrDAYhmEYTVhhMAzDMJqwwmAYhmE0YYXBMAzDaMIKg4GIfEhE/jPW/rWInLQ/Y2oXEblPRM5zrPl6EdnuUtPIntbz2EiOFYYcIiIqIi9t2VYWka+50FfVg1X13r3EsFhEdqR5Hxcae9H/qoj8Nix0j4vI90Tk5Xt7nar+h6qe2uZ7ZJ2Dishvwhyixx9m+H577VxFZJOITLTEtCirmIx9jxUGY78gIjP30Vv9saoeDBwHPAJ8dR+9r0vOCIt19Pjj/R0QcGVLTD/s5MUSYP1Pl2IfzAuQ6FusiPyBiDwiIjtF5LLY84eLyHoReVJEfgSc3PL6+ohERN4iIneIyFMi8isR+bSIHARcDxwT+8Z4jIjMFpG1IvJg+FgrIrNbYrpaRB4CvjGNRkFElonIPSLymIh8W0QOi8X2ARG5P3xuRbvHRFWfBv4WeFWos9dYY+95X5j3rSLyhIh8S0T69nAczhKRLeHxfVhE1nT2CbaHiPyriPzPWPtbIvKX4e8ni8iN4XF6VES+LiLF2L7Hi8g/iMiucJ8visgrgD8FFoW51BLE9DsicnN4nG4Wkd+JPbdJRK4Vkf8CngZOCrf9kYj83/A9/zk8P78eHr+bReSE8PUnhOfmzBbNj04TS1VEHgh1bhGR13eaT69iheGFy1HAHOBY4CPAl0SkP3zuS8AEcDTw4fAxHX8BfFxVDyHoVG9U1d8AbwYejH1jfBBYASwEBoAzgLOAz7XEdBjwEuCD02gMA+8EzgGOAcbDeBGR04A/AT4QPnc4wUhgr4jIwcDFwE/CTXuLtZX3AkPAicDpwIf2cByqQFVVDyUout9uJ8YEfBj4gIicKyIXA68FvPA5Af47wXF6BXA8UAYQkRnAvwD3AycQnCPfVNU7gSuAH4a5FOmAsIB/F1hH8NmsAb4rIofHdvsAcDlwSPj+ABeG248lOF4/BL5CcK7cCYx2EkeMmwk+38MIvhT8nYj0JdTqLVTVHjl7AAq8tGVbGfha+Pti4BlgZuz5Rwg6whnAs8DLY8/9N+A/p9IHfgl8HDi05f0WAztatt0DvCXWXgLcF9v/t0DfXjTuBN4Yax8dxjsTWEnQgUXPHRRqnjfNcfoqQQGsAQ8B64GT24x1R+y5+4BLYu0/Bv50Dzn8AFgFHOHos34yzCF6LIk9/27gAeBR4HV70Hkn8JPw90XArvj5EdvvQ/FzYRqtTQTf+KN4fhxu/wDwo5Z9f0hQRKPXrZ5Ca0Ws/T+B62PttwNbw99PCI/HzJbXf7Sd2Am+ZJyR9fX5QnjYiCGfTAIHtGw7gKADjXhMVZ+LtZ8GDgbmEnSyD8Seu5/peQ/wFuB+Efl32fMi4zEtWveH2yJ2qerEHl4PwWjiH0WkFk5l3EmQ74tDrXrcGnxjf2wvev9DVYuqepSqvkNV72kz1lYeiv0eHcvp+AjwMuBn4VTI26baSUSuj01BXbwHvTPDHKLHhthz/0JQ7Leravwvy44UkW+G039PAl8DjgifPh64v+X86JThWDxnhttajylh+9hY+wGez8Ox35+Zor2nYz0tEkyl3hlOa9UIRtBH7O11hk0l5ZVfEnx7inMie+7gI3YBzxF0DhHzpttZVW9W1QuAI4H/n8a0yFS35X2QoGOP6z4Yl2uVn0LjAeDNLR1hn6r+CtgZj1tEDiSYskjC3mJtl+floKp3qepFBMfsC8B3wvWI1v3erI0pqK8neG+AawmK59EiclFs+38PYztdgymtSwimlyA4xvNk6j8ASHO75dZjCsFx/ZUj/d+EPw+MbTtqqh3D9YSrCaYA+zWYFnuCxjEw9oAVhnzyLeBzInJcuFh7HsGQ+zt7e6GqTgL/AJRF5MBw3v7SqfYVkVkicrGIzFHVZwmmNCbDpx8GDheRObGXfCOMa66IHEEw9bOnP6GdSuNPgWtF5CVhDHNF5ILwue8AbxOR14nILGA1yc/hTmNtOwcRuURE5qqqTzDVAo3j5gwReQNwGcF6zQeB/yUi0bfzQ4BfA7Vw22diL/0RQZG9TkQOChfSz47lc1x4fDvlX4GXicj7RWSmiLwPOI1gVJMaVd1FUGQuEZEZIvJhWv5wIsYhBF+AdgEzRWQlcKiLOHoBKwz5ZDXwf4H/JJg3/WPgYlX9aZuvv5JgeP4QwTz8V/aw7weA+8LpiCsIvnmiqj8j6FzvDad9jgH+CNgC3ArcBvw43DYl02hUCdYCNorIU8BmYDDc/3bgUwQLiTvD3JP+D0FHsXaYwxBwu4j8Osznwjam0PbENmn+n4G1InIo8NcEfzb6q3Aa6S+Ar4iIEKxxnEnwLfm7BF8GopgnCb5IvJRg9LkDeF/49I3A7cBDIvJoJ0Gq6mPA24A/IJji+0Pgbarakc5e+BhBkXsMeCXBdTAVGwj+YuznBCPpCaaexjKmQMJFGcMwDMMAbMRgGIZhtGCFwTAMw2jCCoNhGIbRhBUGwzAMowkrDIZhGEYT++oOl0454ogj9IQTTtjfYRiGYeSKW2655VFVnbu3/XJZGE444QS2bNmyv8MwDMPIFSLSzt0RbCrJMAzDaMYKg2EYhtGEFQbDMAyjCSsMhmEYRhNWGAzDMIwmrDAYhmEYTVhhMAzDMJroycLQeqtxF7cez0IzK928aGalmxfNrHTzopmVbi9rtouTwiAifykij4jIlEYxErBORO4WkVtF5MzYc5eKyF3hY0onMZeUN5UpbSjVD7KqUtpQoryp3FWaeYo10vT9Zs3Rm5JrRrpLW2Jd6iDWPGgCjN7U/Fn5vpvPKi/55+3873bNTnA1YvgqgWvVdLwZOCV8XA78CYCIHAaMEjh0nQWMiki/o5ieh6pSm6hRHavWD3ppQ4nqWJXaRC1RRc5Cs1V3aYvuuINYs9Ccv6JU77yqY1XWb6wxWk6e/w2baqyLxbp0Q4l1Y1Vu2JQ81jxoAoyWlfUbG+eV7yvzV6Q/V/OSv6oy3nJdLXVwrWahmZc+peMgXDwIzOl/Os1zfwZcFGtvB44GLgL+bLr9pnvMnz9fk+L7vnrXe0qZ+sO73lPf9zPRTCGrvu/r4Giz7vD1ng57vo6Odo/m5KSvA8uaNQeWeQq+ep4mOga+rzrs+cpQsy5DQawvdE3PU4Wpj+vkZLKTKi/5q6qOjga6wy3X1eBo8ms1C03f3/d9ShqALdpOf97OTm0J7bkw/Avwulj7+8AC4NPA52LbrwE+PY3G5QQevVvmzZuX6uD4vq8nX4Ve/K7ggKc92JEmo+jVb0QZpV4UPE9TdOLBifzhd6DFq8NO3PMVNHWHe/oV6Bs+5EZTNSgOshL9+FvDEzlFUWiN9WNvixWxFJ1NXHPxpejJV7nVpIxeeoE7zag4fPTtjfyTFoXWWN/3HvTQZW7zP34p+raL0ms2clf1hp/TT705/ecf1xz2fP3kW9C+Fek0R0cb14zv+3r2ZejrP+S2T5n7afQTb3Gn2W5h2FeLzzLFNt3D9udvVP2yqi5Q1QVz5+715oDTouGw7J7DQQXefytN86PBPp1rLt1QAoHvnQyf+a9Ac2lJqVahVutcM1SGoRL/+HJY8YOguW57iWFPqVRApjp6bWre+mIYeCjYklZTVRnZWEILcEf00QyVWLNGE8bYHOv3TwLxG7rTnCIdad5yNOw8xK1mEyk1RWDNmkD3n1/W2D6ysflc7ZxAc8sx8GSfm1gjzeIE/Oe89JoiUKnAsKeMjb2fm4+NPZlQN665ZfP7mJgJEwck11QNrutqFZaWlD/6ymW85S74j5cEz7f2Ke1qNn5XPvetjzP67/DXZwTbSgk0E9NO9WjnQQ6mkuLDs2hYtvJdS/T97w6mU5J8y49rRlMybz/z7fr+d6cdojfrnsZtOvP8K+vtJN8eWjWhMQXgQjOaPoo00017xIb8Q+5izYOmasv0XKgbtZNOKeQp/6l0h693k//pV6AsGU6tGY2U+s/9uK47C515/pVNU1WdaLaOPj77jY/pF1+LLl7+iSn7raTQZSOG9cAHw79OWgg8oao7gQ3A+SLSHy46nx9uywQRodhXxBv0qCypAEJt3vVw9xKKX/olIJRKdPQtP665dkmFtRXhn3/8T4ztuhQmiqytSKJvzZHu8KAHN1S4g1fx3MZ1sNljbFORqQdbnWmCBD9Tas6ZXWRgwmPrdRU8T5j8biVoby4yMiIJR0sSxLTZY/jUCr4vDJ+aLta8aKrCyIiwdXNwXCe/GxzXrdcFx3XO7CKSaCiWj/xbdePn6vCgR7EvXf633ufBhrWpNUVgbUWYOXEInzvkCp7buI61FWHtkgpeB5rx0UepBDyyi9f88U+4es4nOP3pLwFCpUPN1LRTPfb2AL4B7ASeBXYAHwGuAK4InxfgS8A9wG3AgthrPwzcHT4ua+f90iw+q2pTxY2q/kV8XV/FrYnn2uOjjeCjTj9vX5+7jum4WmNwqamqunK0eU1hctJPtb6i2lgsjDSjWHtF0/O0PuKKzq2Vo+nmmfOQf+t6wFTtbtNsvd6TjD4irc/yR3oQTz0vrn25xuBsKmlfPtIWhlZ8P/pwg0fakyQ6OVrbSYgPMePv46LTcakZ6eypbZr7XzMrXdea3X7eZ3G9u+iH9ka7hUE02Th/v7JgwQJ15eCmSn36KMLzSLQQWy4HQ8LotZF2sRg8lybGeCyt7W7RNAyXdPt57/J6d9kP7QkRuUVVF7QR0P4fAXT6cDViyKrq76ltGMYLBxfXe1azDVNBmyOGXHo+u0IkqO7xylypBM8Vi8kqdetr7Fu4YbxwcXG9Z9EPpaXnp5LAplUMw9j/7It+qN2ppJ68u2or9i3fMIz9TTf1Q1YYDMMwjCasMBiGYRhNWGEwDMMwmrDCYBiGYTRhhcEwDMNowgqDYRiG0YQVBsMwDKOJniwMrf/U5+Kf/LLQzErX93WP7W7RzEo3L5pZ6eZFU7X5fG9tJ9fNx/WfVZ/SDj1XGMqbyk1OSKqBo1t5U9mJZnTyRpppPsvypnKTE5Rq4BSXJtbF5TLzV5TqF64fmswvTnGXvyw08xSr5e9es1yGRcsb579q4JS2aFW683/0pubr3/fTX/9ZaGbRT3VCTxUGVaU2UaM6Vq0f9KUbSlTHqtQmavUTMKnmolWBnWekOT5RY2lJE91ZVVW5YVONdWPV+sWxdEOJdWNVbthUS/TtwfeVJ3bX2NpXrV/I81eU2NpX5YndtUTf8rLQzFOslr97TVUYrylj2xrn/9KSsm57iTEJrqsk5/9oWVm/sXH9R7HGr/9u0PT95n4qKjRpNDumnTvtddsjzd1VI5u8Ezz05Z+iyYIw6f3Z6zaEo+h5H6DJ5jO58U9ooDPk6eJL0cJK6jaHaYzWI8vIl16FHlsitQVnXFNWomdf5kYzrhtpuoz11E+hh/2hW80oRtf5/86H3ed/xsfRg5e71XzRZ9H5H3OjGT//z7m0kX9yC9LojqWNY9q3Il2srZpzP42e8fF0mnGDJu96Twsr0fMvwYmtp2r7d1fd7518kocLB7cZ16Dlc9DFl/I8R6ekDm6U0fe/G734XTh1cHvlJ9B3XBheGCmKQsTkpK8v+myjE0/bgUWalNFXfsKdZqQ7b2mjY3AVa/Fq9EWfdZ+/yzgj3aNH3Od//FJUVrrV7P9D6rG60PR91QOY0MWxwpCmY4yu8QOY0E+/yc0xjTTn8pB+8bXoQcuTa7b2QZNPPKlrB9FXfNLdMW23MPTUVBI05uomZ0D5d+HUR+HxG4coFJRqNZk5RqQJ8Lenw9ajgKESoCmNNhSGStz+Ylj/8nBTqJuUaKj7zCz4r5cE2+Lzw2k0AW5/sRvNuO4vi41trmKtvQiemeVWM47L/Hce6k430nygCFpwqzl+IPVY02pquKbw7NDVbDqxsT2+5tYpIrBmTaD5P85ubB/ZmF7zoDcs4+rz4Dezk2tGt9v2PPh29Vf8yatfx397Pdx5ZPo4O6ad6tFtj6QjhmgaKT4sG77e0+NKwRQNdP5tPK5Znz4a8lJP+9Snp8qN2CLdpMPp+JRHNNRtbXeDZp5itfzda8ankaa6rlyc/9E1FbWTTtNkpXn4uZcHU11DXn1aycV0EmbU83xEhGJfEW/Qo7KkAgjcUGHHdmCiCAilUmcjhkhzeNCDGyqsqwrDXgUGYeyZIuu+IAhJLPqEsU1F2OYxfGqFtf8qLC1VWLc50GVJ58OQQkGYM7vIwITHLddWKBSEW66tMH8FzJldpFDoDs08xWr5u9cUgf6iMHhGkcFBj7VLKsH5XqowptDfV0Q6HIarwsiIsHVbkYGFHrd8t8LIiFC9rsLAsiDWbtJ8zD8abgn6lJERYc2awLmnmCD3RLRTPbrt4WKNIT6f52qNIW42nmYxO2J0VJtGHNE3qTSG6Kr6vG9xruaYXWtmpZsXzax086IZXUfTtTslvrAb6Xme6srR7tB83hrDpP+8dlpoc8TQ0w5uLs28I9SxC5NrPcPoZbK4nlxqZtEnxWnXwa2nCwNYx2sYRneRZZ9k1p5t0k12eoZhGN3QJ/V8YTAMwzCascJgGIZhNGGFwTAMw2jCCoNhGIbRhJPCICJDIrJdRO4WkWVTPF8Rka3h4+ciUos9Nxl7br2LeAzDMIzkpP7PZxGZAXwJeBOwA7hZRNar6h3RPqpaiu1/FfCamMQzqjqQNg7DMAzDDS5GDGcBd6vqvar6W+CbwAV72P8i4BsO3tcwDMPIABeF4VjggVh7R7jteYjIS4ATgRtjm/tEZIuIbBaRdzqIxzAMw0iBi5voTfXvF9P9O/WFwHdUdTK2bZ6qPigiJwE3ishtqnrP895E5HLgcoB58+aljdkwDMOYBhcjhh3A8bH2ccCD0+x7IS3TSKr6YPjzXmATzesP8f2+rKoLVHXB3LlzUwXcehsQF7cFyUIT8mPcnoVmVrp50cxKNy+aqs3XUWu7WzQDnfz0Ke3gojDcDJwiIieKyCyCzv95f10kIqcC/cAPY9v6RWR2+PsRwNnAHa2vdUncZDs6KSKT7aTHPdKMLoZIc/SmcqpY82LcnoVmnmK1/N1rlsuwaHm5bsyjoXHPolXBtdotmgCjNzX6FKDu0dxtmp2QujCo6nPAlcAG4E7g26p6u4isFpF3xHa9CPimNpe9VwBbRGQbcBNwXfyvmVyj2jDZXrQqMBhfGppsj0/UWFrSju9gGNeMLo7IuHv9xhqjZTODT0JeYrX83WuqwnhNGdtWY91YlaUbgmt13fYSYxJcq51+e85CE2C0rKzfGFz/0ZfD+SuC67/WRZod0869ubvtkcaPIXJGe9Fn0QM+R7NDVEIvhriL06HLGmbg4KfyfI50I03Xxu0zr3GryWhz/mnvHx/pzrnaff4HLW98/s7yL7uLM65bzCD/Q5ahM7r484+7uMXP/6Tuba2ahyxDGU2n2fBPCPKXlQS6Kd3r4pqtfUracwrzY5geVeW4TxdY/h/wvwbh51/0AUnk9xzh+8qM1QWu/T58dQDu+qKP50lKz+dA98L3FfjBS+DhQ2DyGj+xK1hc85RSgQOfhZ++2J3mzFUFXvdL+I8T3GhGumdfXmBzuIrlKtZTlxZ49ECovcid5ozPNwbgLvMfvKLAlmPd6fq+MvCpAvccBk/PcqdZXFHglMfhx8e40VSFQkF5x4WFuue5v9JP5WAWaX7sbQX+5gyYOCCdZuSXUK0qo+cU+M5pge95mvwjzS9Wn+UPzpvFrw6Br5/h5pjabbenQcP5/wcPhdIQvGYnMFQCNHEnrqqMbCyBwIo3wt2HBZpr1mjqojB/RYm/e1VQFMCdcfu9hwVFwaWmFoKi4EIzrrs59qcNrmK9+/CgKLjUjOMy/y2xP/52FettRwVFwaXmU31BUXChGc3/M1SqFwWgvj6QVvPPFwRFIa2mCKxZE2iuPicoCgAjG9NrDiz6IOtPDYpCWs1O6anCEBWF6liV4UGPTz7p863feLCwCkPBnGOnxz2uOTDhwSof/VGgmebiiM/VDkx4TF7jMzDhNc3lvlA18xSr5e9eM+rA120vwcLgWh0e92GzV18f6LSDzEITYl8KFlaD674c5B+tD6TRvGXJN/nZPW40O8XF/zHkBhGh2FdkeDAw2V5XFYa9CgzC2DNF1n1BEDqbThJpmKFvva6C5wXG3fNXwNbNRUZGkk0n5cW4PQvNPMVq+bvXFIH+ojB4RpHBQY+1SyqwRKBUYUyhv6/Y8dRPFpqqMDIibN1WZGChxy3frTAyIlSvqzCwLMi/GzST0LNrDKtWSd1bNfh/PEnlrTpaVp6oNYqA7ysjI5Laq9X3teniam2/kDWz0s2LZla6edEMuiatd4St7W7QjDya16wJ8o3WB+YUlVXl7tGMMM/nNmj1Um1t7289wzC6nyyu+6z6Elt8bgPX3qrd4NVqGMa+JYvrfn/3JT1dGAzDMIznY4XBMAzDaMIKg2EYhtGEFQbDMAyjCSsMhmEYRhNWGAzDMIwmrDAYhmEYTVhhMAzDMJqwwmAYhmE0YYXBMAzDaKInC0Pr/aFc3C8qC82sdLPQbL29clovgix186KZlW5eNCE/539eNNul5wpDeVO57qMKDT+F0ZvKXaUZ6cbvE68aeFSnMQTPQjMLM/isdPOimadYs8p/9KZyk/+A7wfXVbed/1loZpF7J/RUYVBVahOByXZ0IkcmO+s31hgtJzEVca8Z6d6wqdZkIrJ0Q4l1Y1Vu2JTMEDwLzSzM4LPSzYtmnmLNKv/RsrJ+Y61uThPpVseq1Ca65/zPQjOL3Dul5267HT9xI+ImO0lMdbLQbHWcqrPZY/jUCmsr0hWaMH3+kXFLUrLQzYtmnmJ1rRn3UR5Y5la326+prHKPMD+GPeD7ysuWFrj4NqgOwhNf8BN34HHNGasLlDfB6nPAX51eMzrpHt5R4B9eAc/OhOFxP3EHHtf8t2cLPDMTfnFYek0I8p+5qsDv3gc3nuTGuDzSfdNlBW48KWi7Mq4f+FSBnYfAowe505zx+cYA3GX+511W4CbH+S/8eIGfHQFP9bnTPPiaAmfuhP96SXrNeAf5tosK/MupwXYXuktLyoMPFviXlwW+z66uqXsfKbDrQBg7Pp1mPPe3XlTgmKfgzxe4+ZzMj2EaVJWRjSXuORz+ZAHMngSGSqxZoylOjEATgVXngF9Irxkqw1CJb706KAoQ6AaOc+k07zgyKAouNKNvjFqg3oGnNYOP60aaLnQjzduOCoqCS804LvO/KYP8bz4uKAouNZ+ZFRQFF5oigYMZQ6V6UQAY2ZjW8zjQ/M4rg6IAOLumvntKUBTSasZzv78YFAVwkXsHqGruHvPnz9ck+L6v3vWeUkYHlnkKvjLUaE9O+l2hGekOh7oMNesOX++p7yeL1bXm5KQf5B3Lt7WdhCx086KZp1j3Rf7RuRq1vS46/7O+plzlHgFs0Tb62J4aMYg0jMuj+f/J71aC9uYiIyNCpwU5C81QmbFNxfpcpe8Lw6dWYLMXbCfJUMS95nRm8AMTXmIz+Kx086KZp1iz0FSFkRFh6+ZAd/K7wXW19bqGbjKP5u6/prLLvTN6co1htKw8UWvM//u+MjIiFIuBEXe3aJbLMF7T+lxlNJfZX5Su0oRszOCz0s2LZla6edAsl6FWC6ZUCgWpz7vPKSqryul0u/2ayip3sMXnvaI5MfDOi6ZhuCar8zQP11RWudvi817Ii4F3XjQNwzVZnad5uKb29zXas4XBMAzDmBonhUFEhkRku4jcLSLLpnj+QyKyS0S2ho+Pxp67VETuCh+XuojHMAzDSM7Mve+yZ0RkBvAl4E3ADuBmEVmvqne07PotVb2y5bWHAaPAAoI/+r0lfO142rgMwzCMZLgYMZwF3K2q96rqb4FvAhe0+dolwPdU9fGwGHwPGHIQk2EYhpEQF4XhWOCBWHtHuK2V94jIrSLyHRGJ/j+w3dciIpeLyBYR2bJr1y4HYRuGYRhT4aIwTLVe3vo3sP8MnKCqpwP/BvxVB68NNqp+WVUXqOqCuXPnJg7WMAzD2DMuCsMO4PhY+zjgwfgOqvqYqu4Om38OzG/3tYZhGMa+xUVhuBk4RUROFJFZwIXA+vgOInJ0rPkO4M7w9w3A+SLSLyL9wPnhNsMwDGM/kfqvklT1ORG5kqBDnwH8pareLiKrCW7YtB4YFpF3AM8BjwMfCl/7uIh8nqC4AKxW1cfTxmQYhmEkp2dviWEYhtFr2C0xDMMwjET0ZGEI7jk+fbtbNIHnmZ2kNX/Jk2ZWunnRzEo3L5qqNBnTtLaTkpf8szqn2qHnCkN5U5lFq0osLWn9RFu6ocSi5eXkt93NQBNgcbnc5IQVOWUtTiGaF808xWr5u9csl2HR8jJLN5TqX7KWlpRFq0qUN3VXrHnR7ISeKgyqyvhEjTGpsm570JEv3VBi3ViVsW01xmudf8vPQhOCE+GJ3TW29lXrJ0hkuP7E7lqibw950cxTrJa/e03VwN9gbFuNdWNVlm4Irqt120uMSZXxiVqikUNe8s/qnOqIdmzeuu2R1NpTtWHFd9Iw+taLUEYD+7xhz9ekjnl1e79R9L2/R92SL42masPi7/xLUFlJarvEuOapn0KPHnGrWViJvu4yN5px3dd/KDymDmM97ZPo4Z9xqxnFmIf8Bz6OHrzcrebsFehZH3Wj6fuqw15gk7n40kb+Se0yW2N9w4fQvhVu83/pVeiZl7vVPK6Evuu97s4p2rT27Mm/SlJVCqsKLNwBm48DVvn4vqQ01lAKqwv0Pw3jBwLl9JoQfHsJIr9oAAAgAElEQVQ4cGWB3aFx+eQ1vhO3rQNWBYNFv+BOc8bnC8yYhMkZbjQj3VnlApMzgrbL/P2CW80Zn28MwF3mn0Wss8oFJguAdO/nrwqFgjLzmgLPhZ+/v9JPbW2Z1TXVv6LAbw5wl7/vK6+6qsCDh8ATL3KjaX+VNA0azv8jsPl4gptyDDXWB1JpEhYF0mtCY14xOoGBpnnHNJp+gXpn40oTqHfgaTXjupGmC914/q4147jMP4tYJ2dQvyFNN37+0ZoCQ6V6UQDqaw5pY83imnqyz13+keadRwZFwYVmJ/RUYYg68HVj1cC8e9xneNCDhY31gSRrDK41oXFibO2rBqbg1/gMTHhN844vVM08xWr5u9eMisK67SVYWGV4MLiu2OzV1xySFIe85J/VOdUJqf/zOU+ICP19RQbVY/DUCmsrAlQAGHumSH9f51M/WWgCFArCnNlFBiY8brm2QqEg3HJthfkrYM7sYqIhZV408xSr5e9eUwT6i8LgGUUGBz3WLqnAEoFShTGF/r5ioumkvOSf1TnVCT27xgCNDru13S2aEHx7iJ8Ire0XsmZWunnRzEo3L5pB16T1ItDaTkpe8s9Cs901hp4aMUS0nlhpT7SsNIHnnQguOpu8aGalmxfNrHTzohlcQjJtOyl5yT+rc6qt995n72QYhmHkAisMhmEYRhNWGAzDMIwmrDAYhmEYTVhhMAzDMJqwwmAYhmE0YYXBMAzDaMIKg2EYhtGEFQbDMAyjCSsMhmEYRhNWGAzDMIwmerIwqDbfCru1nYTWW+G6ujVuFrp50cxKNy+aWenmRTPyT5+unZS85J/VOdUOPVcYypvKLFrV8EmI/BQWLS+T1GfbzOAtf8vfrWa5DIuWl+veC5FHw6JVJcqbuivWvGh2Qk8VBlVlfKLGmDRMdCKTnbFtNcZrnY8cfN/M4C1/y9+lpiqM15SxbbW6MU9k3DMmVcYnaomNevKQf1bnVCf0nB9DNEL4ix9UKSg81UfgvBaa7CS5W3b8gzvqKXjoEJpMNpIS6T74XJVHDgIkvW6keQ9VfjsDdh/gTnNrX5XDfwOPHeQ2/wcmqzx2ULDNZawR3aiZdaz3aZUnZwf2rq40t82q0j8Bjx+YXjPu4jb3VVV2HRxsHw6Ne5Le1j6KdcdklcdeBOow/ztnVDnw2cDe1+UxPerXsPNQN+dUu34MPVcYICgOR/1hgTfeC984HSj7+H46Ux3fV2asLnDuL+DGk9yawb/2EwV+fEzQdmUyfvxnCkzMDC5iV5ozVxV4xaNwx5Fu8z/jygI/fXHQdmlcH9Gtmlnp+r5ySqnAzoPhmVnuNPtGC5xYg58f4UZTFQoF5dVXFLjtqPB9VvpOjHpefVWBe/qDL0au8j9ppMBMH+453J3mq68qcOyT8L2XutFstzD01FQSNEYMjxwcFgWAoeTezBAzQ5egKIBbM/ioKLjQrY9CDg2KgktNLQRFwYVmXDcqCi5jjdONmlnpRpr3HhYUBZeaz84MioILzWjEwFCpXhSAxH7PrbHecWRQFFzEGmne3x8UBZeadxwZFAUXmp3gpDCIyJCIbBeRu0Vk2RTPj4jIHSJyq4h8X0ReEntuUkS2ho/1LuKZjqgorBurBtNH4z7Dgx4sbKw5JFljMDN4y9/yd6cZn0ZiYZXhweBaZbNXX3NIusaQh/yzOqc6IbW1p4jMAL4EvAnYAdwsIutV9Y7Ybj8BFqjq0yLyCeCPgfeFzz2jqgNp42gzVvr7igyqx2C4pgAVAMaeKdLf1/l0kpnBW/6Wv1tNEegvCoNnFBkM1xRYIlCqMKbQ31dMNJ2Ul/yzOqc6IfUag4gsAsqquiRsLwdQ1f8+zf6vAb6oqmeH7V+r6sGdvKeLNQZoFIHWdhJ838zgLX/L36Vm0DVpvQi0tpOSl/yz0NyXawzHAg/E2jvCbdPxEeD6WLtPRLaIyGYReed0LxKRy8P9tuzatStVwCLNRaC1nQQzg7f8XWtmpZsXTRGaikBrOyl5yT+rc6odUk8lAVNFO+UwREQuARYA58Q2z1PVB0XkJOBGEblNVe95nqDql4EvQzBiSB+2YRiGMRUuRgw7gONj7eOAB1t3EpHzgBXAO1R1d7RdVR8Mf94LbAJe4yAmwzAMIyEuCsPNwCkicqKIzAIuBJr+uihcV/gzgqLwSGx7v4jMDn8/AjgbiC9aG4ZhGPuY1FNJqvqciFwJbABmAH+pqreLyGpgi6quB/4/4GDg78I5wl+q6juAVwB/JiI+QZG6ruWvmQzDMIx9TE/+57NhGEYvYv/5bBiGYSTCCoNhGIbRhBUGwzAMowkrDIZhGEYTVhgMwzCMJqwwGIZhGE30ZGFovW2ti9vYZqGZlW5eNLPSzYtmVrp50Yw82adrJyUv+Wd1TrVDzxWGPBl35yVWy9/yd61ZLsOi5eW690Lk0bBoVYnypu6KNS+andBThcH382PcnZdYLX/L37WmKozXlLFttboxT2TcMyZVxidqiY168pB/VudUJ/Tcfz7HD3JEL5rBd7tmnmK1/N1rtrq4RQyHxj1Jb7+dl/yzOqfa/c/nnisM0DBDP+tX8M1XuzWDf8/t8PevdGsGP3Rpoe776irW04YLPDkbdh7qTnPmqgJvuB/+/US3+c/4fGNg6/Kz6nbNrHSz0jxwZYEzd8IP57nRVIVCQfndDxa4KfRS91f6Tox63vDRAj8+OvC9dpX/ySMFDn8abjnWneaJfxBcU187w42m3RJjGqJKfO9hQVEAt2bwf/9KN5px3agouNCNNLfPDYqCS00tBEXBhWZcN47Lz6qbNbPSzVJz9wFBUXChGY0YGCrViwKQ2O+5Ndb/eklQFFzEGmne1x8UBZeavywGRcGFZif0VGGID8+63bg7L7Fa/pa/a83WaaThQY/hcR82e/U1h6RrDHnIP6tzqhNcOLjlhjwZd+clVsvf8netKQL9RWHwjCKD4ZoCSwRKFcYU+vuKiaaT8pJ/VudUJ/TsGkMejLuz0s2LZla6edHMSjcvmkHXpPUi0NpOSl7yz0Kz3TWGnhoxROTJuDsvsVr+lr9rzaD/l2nbSclL/lmdU2299z57J8MwDCMXWGEwDMMwmrDCYBiGYTRhhcEwDMNowgqDYRiG0YQVBsMwDKMJKwyGYRhGE1YYDMMwjCasMBiGYRhNWGEwDMMwmrDCYBiGYTRhhcEwDMNowklhEJEhEdkuIneLyLIpnp8tIt8Knx8TkRNizy0Pt28XkSUu4tkbrfczd3F/8yw0s9LNi2ZWunnRzEo3L5pZ6fayZrukLgwiMgP4EvBm4DTgIhE5rWW3jwDjqvpSoAJ8IXztacCFwCuBIeB/h3qZsbhcbjK7iEwxFpfLXaWZp1gtf8vf8u9+zU5wMWI4C7hbVe9V1d8C3wQuaNnnAuCvwt+/A7xRgpuqXwB8U1V3q+ovgLtDvUzwfeWJ3bUmJ6TIKemJ3bXEbkuuNfMUq+Vv+Vv+3a/ZKamNekTk94AhVf1o2P4AMKiqV8b2+Wm4z46wfQ8wCJSBzar6tXD7XwDXq+p39vSeaYx64gc5Iu6U1C2aeYrV8rf8Lf/u14T2jXpcFIbfB5a0FIazVPWq2D63h/vEC8NZwGrghy2F4V9V9e+neJ/LgcsB5s2bN//+++9PHLPvKzM+3xgsTV7jO3Fbcq2ZlW5eNLPSzYtmVrp50cxKt5c12y0MLqaSdgDHx9rHAQ9Ot4+IzATmAI+3+VoAVPXLqrpAVRfMnTs3cbBRJY6T1mA7C82sdPOimZVuXjSz0s2LZla6vazZCS4Kw83AKSJyoojMIlhMXt+yz3rg0vD33wNu1GCosh64MPyrpROBU4AfOYhpSuLDs4EJj8lrfAYmvKa5vG7QzFOslr/lb/l3v2anpC4MqvoccCWwAbgT+Laq3i4iq0XkHeFufwEcLiJ3AyPAsvC1twPfBu4AbgA+paqTaWOajkJBmDO72DRXd8u1FQYmPObMLiYapmWhmadYLX/L3/Lvfs1OSb3GsD9Is/gMQUWOH9zWdrdoZqWbF82sdPOimZVuXjSz0u1lzX25xpA7Wg+uixM4C82sdPOimZVuXjSz0s2LZla6vazZ9nvvs3cyDMMwcoEVBsMwDKMJKwyGYRhGE1YYDMMwjCasMBiGYRhNWGEwDMMwmrDCYBiGYTRhhcEwDMNowgqDYRiG0YQVBsMwDKMJKwyGYRhGEz1ZGFpvW+viNrZZaGalmxfNrHTzopmVbl40VSF+k8/WdlLykn9W51Q79FxhyJNxd15itfwtf9ea5TIsWl5m6YYSqooqLC0pi1aVKG/qrljzotkJPVUYfD8/xt15idXyt/xda6rCeE0Z21Zj3ViVpRtKLC0p67aXGJMq4xO1RCOHvOSf1TnVCT3nxxAd5Hup8pIa3HaUW+PuUx6Fu45wa4b+2ESVB4rBNlex3qdVfjsDnp7lTnPbrCpH/Rp2Hmpm8L2Yv8vPPxohrNte4thXVPnVnGD78KDH2iUVRNLF+vBvq+w6CJ6b4S7/X2iVWZOw62B3mvf7VY55Cm5/sZtzql0/hp4rDBAc9BcvK/DiXwcH3KVx9+kPwa1HuTVDP224wPbQ5tpVrEdfXWBiJjzZ5zD/1QVOeSwojGYG33v5940WOOYpuL/fjaYqFArKKVcWuOuI8H1W+omLQjzWU0oFfjknKAyu8j9ieYGDfwsPFN1pFlcUeOnj8JNj3GiaUc80RJX40YOCogBujbtvPcqNZlw3KgoudCPNRw4OioJLTYT6BWxm8L2X/7Mzg6LgQjMaMTBUqp9TQH3NIW2s9x4WFAUXsUaa4wdSH9m70nyqLygKLjQ7oacKQ3wY3e3G3XmJ1fK3/F1rxqeRWFhleNBjeNyHzV59zSHpGkMe8s/qnOqEmZm/Qxcxncn2/BU4N+5Oo5mnWC1/y9+1pgj0F4XBM4oMhmsKLBEoVRhT6O8rJppOykv+WZ1TndCzawx5MO7OSjcvmlnp5kUzK928aAZdk9aLQGs7KXnJPwvNdtcYemrEEJEn4+68xGr5W/6uNYP+X6ZtJyUv+Wd1TrX13vvsnQzDMIxcYIXBMAzDaMIKg2EYhtGEFQbDMAyjCSsMhmEYRhNWGAzDMIwmrDAYhmEYTaQqDCJymIh8T0TuCn/2T7HPgIj8UERuF5FbReR9see+KiK/EJGt4WMgTTyGYRhGetKOGJYB31fVU4Dvh+1WngY+qKqvBIaAtSJSjD3/GVUdCB9bU8ZjGIZhpCRtYbgA+Kvw978C3tm6g6r+XFXvCn9/EHgEmNu6n2EYhtEdpC0ML1bVnQDhzyP3tLOInAXMAu6Jbb42nGKqiMjsPbz2chHZIiJbdu3alTJswzAMYzr2WhhE5N9E5KdTPC7o5I1E5Gjgb4DLVNUPNy8HXg68FjgMuHq616vql1V1gaoumDs33YAj8pCdrp2E1lvhuro1bha6edHMSjcvmlnp5kVTlabba7e2k5KX/LM6p9phr4VBVc9T1VdN8fgn4OGww486/kem0hCRQ4HvAp9T1c0x7Z0asBv4CnCWi6T2RHlTmUWrAg/Z6ERbuqHEouVlkvpsmxm85W/5u9Usl2HR8nLdeyHyaFi0qkR5U3fFmhfNTkg7lbQeuDT8/VLgn1p3EJFZwD8Cf62qf9fyXFRUhGB94qcp49kjqsr4RI0xqbJue1Aclm4osW6syti2GuO1zkcOvm9m8Ja/5e9SUxXGa8rYtlrdmCcy7hmTKuMTtcRGPXnIP6tzqhNS+TGIyOHAt4F5wC+B31fVx0VkAXCFqn5URC4hGA3cHnvph1R1q4jcSLAQLcDW8DW/3tv7pvFjiEYI68aqHPAcPDsT2OwxfGqFtRUhya3e4x8cCkhvmsG71MxTrJa/e81WF7eI4dC4J6knQ6b5z67W7wruSvOnB1R5roCzPqVdP4aeNOpRVV66tMA598FXzgTKPr6frChE+L4yY3WB998Gf3u6WzP4t36wwA0vBcSdyfgrhws8MRt2HupOc+aqAq//JfzgBLf5n/vhAv9+YtB2FeuMzzcGy92qmZWu7ytnXVFg+xHw69nuNA9cWeDMnfDDeW40VaFQUM79YIEbTwrfZ6XvxKjn3A8XGDsOJg5wl/8rvAKH7oYtx7rVHNwBfzPgRrPdwtBz//kcjRjuPSwsCgBDjTWHJETVHQmKArg1g7/hFOrfRFyZjP9sblAUXGpqISgKLjTjulFRcBlrnG7UzEo30rzl2KAouNTcfUBQFFxoRiMGhkr1ogAk9ntujfXfTwyKgotYI82fHxEUBdeafzPgRrMTeqowxKeR2BwYjA8PerCwseaQZI3BzOAtf8vfnWbrNNLwYHCtstmrrzkkXWPIQ/5ZnVOd0FPWniJCf1+RQfUYDNcUoALA2DNF+vs6n04yM3jL3/J3qykC/UVh8Iwig+GaAksEShXGFPr7iommk/KSf1bnVCf07BoDNIpAazsJvm9m8Ja/5e9SM+iatF4EWttJyUv+WWi2u8bQUyOGiNYTK+2JBmYGb/lb/q41g8tSpm0nJS/5Z3VOtfXe++ydDMMwjFxghcEwDMNowgqDYRiG0YQVBsMwDKMJKwyGYRhGE1YYDMMwjCasMBiGYRhNWGEwDMMwmrDCYBiGYTRhhcEwDMNowgqDYRiG0UTPFobWewfm8F6ChmG8gNmffVRPFobRslIqNQ607wftND7bkWH5dO2ktN573cW92POimZVuXjSz0s2LpipNvgut7aTkIf9ymSZ/mMijIk0f1Qk9VxhGbyqzfneJajUoBpEpRnVbmVotWVUubyqzaFXD6CcyBFq0vJzqg1xcLjcZc0SxLk4hmhfNPMVq+bvXLJdh0fJy3ZQn6hgXrSpR3tRdsbrWVIUbJspN5mGRcdENE+V9MnLoqcKgqjyxuxY4Iy0LisOMt4ZOSQtrrFmjHXsyqCrjEzXGpOECF7nEjW2rMV5LNnLw/Uas0UkXuTo9sbuW2BkqD5p5itXyd6+pCuM1ZWxbre7YFnWMY1JlfKKW2MEtD/mDMri4VneWLBQabnaDi2vAPqgMQTXO12P+/PmaFN/31bve05OvQle/AWUUZcjTyUk/lebw9Z4yil7xVpRyoDns+eonl9XJSV8Hlnn69gtRWRnoDixLF2uk+fJPoceW3GoWVqLnXOpGM667ONR0Geurr0AP/4xbzSjGPOQ//2Powcvdas5egS76sBtN31cd9nxlyNPzPtDIf/h6T/0UF1UU65suQftWuM3/zMvR137UVf5Bn/KmS9DL3uEmd1VVYIu20cf2pIOb7yszVhcanh9lH88TKhUSu7ipKoXVhaCYS6Dp++lc4aaKdfIa34kzVCaan2/k70Iz81jpbs2sdPPy+atCoaAw2ojVX+k7cXDr9vzr00f9Dc3hcZ+1lXR9SrsObj01lQSN+b+4EVQ0rRRfkO4EDdcUgIbuUKlp8chVrGnNwDPVhLquC9PyzGPtYs2sdPPy+UcdI0PNsUZrDqlj7eL842sKcc34mkPW9FRhUFVGNoZrChMek9f4eINefc1hTjHZGkO0psBmj+Fxn+FBrz4/mPSDjM9VRrEOTHhNc5kvVM08xWr5u9ds6hgXVhkeDK4rNnv1NYckxSEv+YMyVmzk7q9s9CljxRL7Yo2hpzyfRYRiXxFv0GPN+RUKBaGypALAnNlFVv1u52M0EaG/r8igegyeWmFtRYBAc+yZIv19yYZ+hYIwZ3aRgQmPW64NYr3l2grzVwSxJhmm5kUzT7Fa/u41RaC/KAyeUWRw0GPtkgosEShVGFPo7ysmmk7KT/7C0OIigxNB7iISHAOS595xDL24xqCqTQe3tZ1UExpFoLWdFN/XppOrtf1C1sxKNy+aWenmRTPomhrXZms7KfnJ330/1e4aQ0+NGCJaD66LCpyFJvC8k8tFZ5MXzax086KZlW5eNINLSKZtJyU/+WfTp7RDT60xGIZhGHsnVWEQkcNE5Hsiclf4s3+a/SZFZGv4WB/bfqKIjIWv/5aIzEoTj2EYhpGetCOGZcD3VfUU4PtheyqeUdWB8PGO2PYvAJXw9ePAR1LGYxiGYaQkbWG4APir8Pe/At7Z7gslmDA7F/hOktcbhmEY2ZC2MLxYVXcChD+PnGa/PhHZIiKbRSTq/A8Haqr6XNjeARw73RuJyOWhxpZdu3alDNswDMOYjr3+VZKI/Btw1BRPrejgfeap6oMichJwo4jcBjw5xX7T/u2sqn4Z+DIEf67awXsbhmEYHbDXwqCq5033nIg8LCJHq+pOETkaeGQajQfDn/eKyCbgNcDfA0URmRmOGo4DHkyQg2EYhuGQtFNJ64FLw98vBf6pdQcR6ReR2eHvRwBnA3eEd/q7Cfi9Pb3eMAzD2LekLQzXAW8SkbuAN4VtRGSBiPyfcJ9XAFtEZBtBIbhOVe8In7saGBGRuwnWHP4iZTyGYRhGSnrylhiGYRi9iN12ey/sT6NtwzCMPbG/+6eeLAyj5WbvBd8P2mkselWbb6/d2k5K6217097jP0+aWenmRTMr3bxoRv7p07WT0u35l8vU/eghyLtUCvqtfUXPFYbRm8qs390w5onup17dVqZWS1aZy5vKLFrV8F6IPBoWLS+nKjZ5MC7PSjNPsVr+7jXLZVi0vFz3Xog8GhatKlHe1F2xutRUhVoNqtsamqUSVKvK+t0lRm9KHmcn9FRhUG0Yd0eubTPeGppsLKyxZk0yo57xiRpj0jDmiYx7xrbVGK8lN+rJg3F5Fpp5itXyd6+pCuM1ZWxbrW7MExn3jEmV8YlaYqOebs9fBNasUQYWBpoz3hr0UwPLGpr7Yl245xafVZXShhJ/fVOV0mb42unw87s9Jr9bSXyr3LqL2+Yql26FvzkD/B95DIfGPUnvlhudZLMerfKTo+DZmTQZgqTR/NVzVQB2HexOc+vsKi99HO4+PL1mXPeJp6v84rBgm6tYH3yuyq9nwdOzHObfV61vc5l/7Zkq9/W70Y00H91d5eGD3J5Td8ysctSv4ZfF9JpxF7fTTqpyR3hPheHBhnlNmlhnPVrlx0fDczPc5T93R5WfHQEPOMjf94MvrVc/W+XmY+HGk8Ab9KikyB3aX3zuucIAwUE/YnkwWBo/ECj7eJ5QqZC4E1dVCqsKnDQO9x4WaPq+G6Oek0cK3FfEmcm67ytHXV3g6QPgN7Pdac5cVeD4J4OOwYVmpHvySKHeMbqK9eirCzw1C56Z5dgMHndxRrpZ5H/sHxYY74PdB7jTPGBVgWOfDDpGF5qqUCgoJ3iN/P2VvhOjnhP+oMCDh8DkDHf5H7SyQP8zsPPQdJrRmkK1qjDa6FNcxGl/lTQNUXUfPzAsClCfVoovSHdCNGJAwqIAMJTeuDuK9b5+nJmsR5q7Dg6KgktNLQRFwYVmXPe+2M3cXcX6yMFBUXCpGafb83/okKAouNT0C0FRcKEZjRgYas4/qd9za6wPFIOi4CLWSHPigKAopNGMF4WBZc19iotzql16qjCoKiMbm427vUGvvuYwp5hsjSFaU2BzYFoeGXdHaw5J1xjyYFyehWaeYrX83WvGp5FYWGV4MLiu2OzV1xySrjF0e/4iMKfYWFPwBps1RzamK4zt0lPWniJCsa+IN+ix5vxg/q8SmmzPmV1k1e8mM+7u7ysyqB6D4ZoCBJpjzxTp70s2nZQX4/IsNPMUq+XvXlME+ovC4BlFBsM1BZYIlCqMKfT3FRNNJ+Ul/1VlgZuKnLO7saZwy7UVRjZCMWHundKTawxZmGwHx7FRBFrbSfH9fBiXZ6GZlW5eNLPSzYtm0DU1rs3WdlLyk7/7fqrdNYaeGjFEZGGynZVxd16My7PQzEo3L5pZ6eZFM7iEZNp2UvKTfzZ9Sjv01BqDYRiGsXesMBiGYRhNWGEwDMMwmrDCYBiGYTRhhcEwDMNowgqDYRiG0YQVBsMwDKMJKwyGYRhGE1YYDMMwjCasMBiGYRhN9HRh2N+G24ZhGFOxv/umniwMqlo33I48mqP7oCe1fo00pmsnpfW2vS7ux54Xzax086KZlW5eNKNrc7r2C1Uz6puiYxj1TaPlfVcdeq4wlDcFBuPjNaVape7RvGh5mWo1MOLu9DMtbyqzaFXDeyHyaFi0vJy40ED3G5dnqZmnWC1/95rlMixaXq57L0QeDYtWlShvSqabB03VoA+qbmsc08i4Z/3uEqM3JYuzU3qqMKgqtYnAYJyhEsOe8uU7rmLdWJWxbTWGPe3Y3lNVGZ+oMSYNY57IuGdsW43xWnKjnm43Ls9KM0+xWv7uNVVhvKaMbavVjXki454xqTI+Uev4G3leNEVgzRplYGGNn82oMuMtS+tubtEx3RdWCT3nx6CqlDaUqI5VuehWOPYp+B8zPLihQlKP5riL22t3wBN98PO7PYZD456kd8uNLrIdk1UmZsKvZ7szLr91VpVZkzBxgDvNrX1VZkwGlolpNeO622ZV0fArjLNYZ1frd3B2mX+Ey/yziHXbrCoqgHTn5x93cTvwzCpPhzasw6FxT5JbUMc1T3xZlV8c5lbzwoOqfPuV4BfSaUJwTF/z+ku41P9brn0DPH4geIMN456ktOvH0HOFAYKO/BSvwAk1+P7JQNkHBM+j4xFDXLOwqsAHt8FfnwGs8hMXmji+r7zr4gLfPzHwaHZlXP6qqwqowM/mutOcuarAknvghlPcaEa6b/lggQ2nBG1XsZ75ycAMftfB7jRnfL4xAHeZ/9ClBb73Une6vq+87mMFfnokPNXnTrO4osDAQ/AfJ7jRVIVCQXnXewv842nh+6z0U3WMkea731vgX08Jvhi50jztkwUO/i386Lh0mnHf5zlXFxi6G771ajfHtN3C0FNTSdD4dn/P4WFRAIavD6aVqtXGgnQSTQT+eoDg291Qcr/niOib2PqXB0UB3BmX33lkUBRcamohKAouNOO6UVFwGeu2o4Oi4FIzjsv8o6LgQm9k/b8AABW0SURBVDfS/OG8oCi41HyqLygKLjSjb+IMlepFAUjs99yq+Q+nBUXBpeYdRwZFIY1mvCgMLCvxxIuCogBuzql2SVUYROQwEfmeiNwV/uyfYp/fFZGtsceEiLwzfO6rIvKL2HMDaeLZG9E00rqxKoMaGIwPD3pNaw7FYudrDNE0EpsbmixsrDkkXWPoduPyrDTzFKvl714zPj3DwirDg8F1xWavPpefZD0gD5oiMKfYWFPwBpuP6cjG5EWsE9Jaey4Dvq+q14nIsrB9dXwHVb0JGICgkAB3Axtju3xGVb+TMo62EBGKfcX6XF3w1b6CEJhsjyZYDxAR+vuKDKrHYLimABUAxp4p0t+XbDopL8blWWjmKVbL372mCPQXhcEzigyGc/UsEShVGFPo7yt2PE2TF02AVWWBm4qcs7uxpnDLtRVGNgb91L6w+Ey1xiAi24HFqrpTRI4GNqnqqXvY/3LgHFW9OGx/FfiXTguDizUG1ybbwXFsFIHWdlLyYlyehWZWunnRzEo3L5pB19S4NlvbL2TNQMd9P7Wv1hherKo7AcKfR+5l/wuBb7Rsu1ZEbhWRiojMThlPW2Rhsi3SXARa20nJi3F5FppZ6eZFMyvdvGiKNF+bre0Xsmag476fape9TiWJyL8BR03x1IpO3igcUbwa2BDbvBx4CJgFfJlgGmr1NK+/HLgcYN68eZ28tWEYhtEBey0MqnredM+JyMMicnRsKumRPUi9F/hHVX02pr0z/HW3iHwF+PQe4vgyQfFgwYIF+fsbW8MwjJyQdippPXBp+PulwD/tYd+LaJlGCosJEoyR3gn8NGU8hmEYRkrSFobrgDeJyF3Am8I2IrJARP5PtJOInAAcD/x7y+u/LiK3AbcBRwB/lDIewzAMIyWp/lxVVR8D3jjF9i3AR2Pt+4Bjp9jv3DTvbxiGYbin5/7z2TAMw9gzVhgMwzCMJqwwGIZhGE1YYTAMwzCa6PnCsL+9VQ3DMOJ0Q5/U04Uh7vsMjVvepnFk7IYP1TCMfYfLaz6LPikJPVsY6t6qMQ+G4D7oyXyfIT+FJi+aWenmqXjnJf9e1XR5zWfRJyUmMLDO12P+/PmaBt/3w5+qnqcKvgaHPWiHT3fE5KQfagUare0kmqOjqsOeX3+t7wft0dHOtfKmmbdYJyf9PbaTkJf8s9KMrqNI0/NUV44mP66uNRv9RyP/1nYazahfivoPP4lgC8AWbaOP3e+dfJJHmsIwetOoetd79YM8+cAO9V7+BmXxqELCDjzUbBQDXxnylMWjiYuC76sOXj2qDHn1k2zYC3QHrx59QWvmLdZzRkd1YJlX73AmJ30dWObpOSl6xrzkn5Wm56myuHFco+tqYJmnK28c7QrNSDfKP+rIhz1fh6/3dPSm5JqvWnCFXvLq8xX8elHwUmhGtFsYemoqSVWpTdSojlUpbSjh/2QrX3/32/mz9/wA+mqAdmztGdcc2VhizbKHWXHK2bCwCn011qzRhLffVgYX12Bhlf995zCnF26tO0UNLg5iTaO5bnuJvsKEc81CQR1oZqXrXtP3lSd215ocyyJHsyd211JYMeYj/yw0RWDNGmVgYXBcX/Tmq+pWl9Fx1U4u0hbN22dWOf0NH0itGRDk/9rjqlx8+puBwOZz3ViV2kTnmhq6wv30iNnUXrWRZae8jtLSSZZuKFFNqJmIdqpHtz3SjBiiynvyVeiyN6KykpZvEJ1P/USajKLXnY0etJz6N4ikI4ZId/h6Tz/+VvTkq1DK6HBstJNG89VXoO96r1tNWYle/jY3mnHd97870HQZ68KPoMeV3GhGI4QoRso0jSDSxvqe33ef/9suQg9d5lbzmBH07Re6+/wnJ3094Pwrdfm5jfw9B58VS4Z19RvQvhXpNeMjpPe/Gz37suT5t05FDV/v6cDH0eEhd8eUNkcMqRzc9hcuHNwKqxuDpclrfAoFQcPFnmKx88Uj31dmfL5Zc2REqFbB86BS6cxLOogz9JTtb+gOj/usTWBBmjfNvMU61efvwsEsD/lnpRksvCqU3RxX15oNPRj23ORfLgcLzZUKQHM/5a/0c+PgljtUldKGUtO2yGBbJPhAOi0KqsrIxudrrlmjeF5QaBIXhe3Nuuu2l1ha0o6mu/KmmbdYo+mjONG0UlLykn9WmlEHPrDMzXHNQlMkuLaHvWD6KM5YsUSSabRyuVEUWvup0obSvplGoscKQ1QUqmNVvEEPf6WPN+jV1xyi4pBGc/KahmZUHJL9uaoGJ9fCKsNhrMODHiysJj7p8qOZn1jjawoDE8HnPzDhNa05JCMf+WehKQJzio35/+i6io5r9EVuf2sCjI421hS8WP5jUk3Rke+9n8qaVLfdzhsiQrGviDfoUVlSQUSoLKkAUOwrJhqm7U0z6bBXRBhaXGRwwmNtqLs21O1PEWseNPMUa6EgzJldZGDC45ZrKxQKwi3XVpi/AubMts8/6ee/qixwU5Fzdjeuq1uurTCyMfm1moWmiNDfcv2vXVJByK5P2Rfezz27xhA/uK3tbtHMSjcvmlnpZqHp+9pUBFrbSclL/r3++edF09YY9kDrwXVxAmehmZVuXjSz0s1Cs7UIuCgKkJ/8e/3zz4tmu/RkYTAMwzCmxwqDYRiG0YQVBsMwDKMJKwyGYRhGE1YYDMMwjCasMBiGYRhNWGEwDMMwmrDCwPNvs53D//kzDCPndFM/1POFwbUdZzd9uIZhZIur671bvJ4jerowqGOP1aw+XCs2huEGl9eSq+vddT/khHZMG7rtkdbzOU5kjjGXh/VE7kns0Rw32Yhen9bzWbXhUxv30/U8Te1R3BqPAzvZ3Gj2Onn5nFxruryWXF/v8defxebU/cZ0YJ7P09PqgjS58yH9Ip/Ug3gqse+z7zebgbcaeSeLM3SHium0tpOwcrTZWS5yr0tTbLLQzMJkPoptT+1u0Ww1gHdhCJ/FMc1K0/MaxzG6tlaOJndai7ujTdVOo9l6vSf5nHw/0Ho/X9OL+ZvnnUNpP3vVfVQYgN8Hbgd8YMEe9hsCtgN3A8ti208ExoC7gG8Bs9p53zSFYfSm0SYrv8mdD+k3zzxdD3rd8vAD7rzTjWv6vmo/j+rSl79eWZzcYD7SHb7eqxcDSG9cv/LGwAw9sh2t21IuHk1cbLLQzMJkXlX1nNHRJtvNKNZzUvRiWWiOjgb5D8fOq2HP18HRdCbzro9pVpqep8ri0Rbb3eC4rrxxtHPRllijjjyy0ExzTF921qf04tOXKPj1ouB1qNlcZFTf/4p36WfftiRWGDvXnIp2C0PaNYafAu8GfjDdDiIyA/gS8GbgNOAiETktfPoLQEVVTwHGgY+kjGePqCq1iVrd8MJ/6GH+7q3n85Elt3LK655mcjJwXIvP9XWiuXRDiT+4aoLV887lL9/5H9BXS+FiFeiuG6vCUIlVXMPM84dTmayrNozrB5aVuKm6lRlvDU1mFtZYsyaZUVFc84vVZ1NrhsrOTeZ9vxFrZKITmew8sbuWyFQnC01VGK8pY9uCz3/phlLdJW1MqownNoR3f0zjml+606NQ8FNrisCaNcrAwhpPPF2luOSTdee16Limyf/Ds6qc/PrLgthCk51agmOqoXvdzw+byaHHbeCc1/4+S0vK0tBkp11Nja0peB5MTip3XDCP+2Zt4JoL3ozvN4x7ksSZiHaqx94ewCamGTEAi4ANsfby8CHAo8DMqfbb0yPNiCGqvHM/jX7xtehBy5uN25PMO0Zm6Iyi152NzltK0zf95N+aA90L34Oe94HQED32zSwJUf7zlqKfflNDM83UR6QZ5e9CM9Idvt7Tq4ZQWenGED36Nv87H0ZfdmWgGf/802hGhvUuNOPfvD90QUM3bf7RMb38bWjfCrea51+CnvtBd8b1k5O+HrX4o/rZcxv5eyl0o2N6wPlX6rqz0JnXJI+1dSpq+F+HdfUbGudUp5qt6x/ROfX/2jvbGDuqMo7//neXLgJpt4UiLVBoY0WJxgINJZqIIKG1Hyho1YpoUQgBjV23IbFYE7aaRvGDy4smCATxJQJSQqjRphRa4heKlMg7KV0gRGilyFsF6YLdxw9zpnvu3Xt3p3Nnbm+7zy+5uTNnZp75n+ecmWfmzNz7XPhF7OsXNF/3FDLeMRSSqEfSg8CVZjYie46kxcACM7s0zH8DmAf0AZvN7COh/HhgnZl9osE+LgMuA5gxY8ZpL730Um69Zkb3DyvsEbzbNTIZuFmeHM1GZVWFaf+BHROTxN0genuTvLB53kxKr0jWdFTYPjEpW/bmENdfJ3p6ktywea7Gh4aMo66qsLsT3psA9A3R06Pc9lKbnasqHPNOUv8ibKb1v7tS4ZVJSVmzSeZTrUevqPDuBNh9SHMJ5mObHT8pJml9ihlUKsaxvcP1bzYhfOrTP06osKsL3u9s3qepzRsmDbd/ETbTHM3Tlw/3/7x+ja/Kl/UYdxxS4fUPwZ6O/Fr7+pK3htIczYdcXeHI92DnEfnaqfa8k/ap6btg+8Tm2x4KTNQj6X5JT9X5LMqqpU6ZjVJeFzO7yczmmtncqVOnZtx1XTv0ru9l16FJUABG5HvNm/cZhZMihETeRn9/M6+rJvl004MCgAW9LOsxurvzB4XTVvby5mEhKABzVvRy3XWWefiskU2rDNe/WZvpyeb6rb17T4rQXJL5WOvrhydBAfIng6+1GdOszbT+LKiu//ebyPkb+/TfhydBAZrzaWwzbv9mbaZBYc6K6v6f169ScoG2rCfx6c4jkqAA5M5N3dc3HBR61/eypyMJCkCu3Mzx8WxmLL8v6VPbo3NKERfymchyWzHWhwNkKGnvkEd0W1Y73w42a+0uq7Gb9zY9trH3oV40n+eNjzJspnbnXV1d32XB7ryr89U/HvJJtdbOt4PNeBgprX/tfN72L9qnZdg0S94+Sv3Ys67ar80cq8tqjs3a+Tw2D5Rziln2oaTOFsSeR4DZkmYCrwBLgAvNzCRtAhYDdwBLgXvLFFJGku2yEneXrfUX5yaJ61Obk7q6WXVWe9hM7RadZL5SEZO6upmzu4dHVydaH13dz2krE615hijKsCnB5G4x71PdzJuX1J/5gt5+Hrb89S/Dp2XYBFjVJ9jUzZmDw/3/0dX9LL+vuf4/ueaYunZ+P6K9jv+yzin7pMGauDWRdAFwAzAVeAt4zMzmS5oO3GJmC8N6C4FrgQ7gVjNbHcpnkQSFKcA/gIvMbHCs/c6dO9e2bBnxOCMzZgdG4u6y7B4oNsuyOzRkVSfs2vl2sZkcmsP1rZ3Pb3d8t/94tpn1GUMhD59bTbOBwXEcZzxS2MNnx3EcZ3zhgcFxHMepwgOD4ziOU4UHBsdxHKcKDwyO4zhOFR4YHMdxnCo8MDiO4zhVeGBwHMdxqjggf+Am6TUg/9+rDnMUyf81tRPtqAnaU5dryk476nJN2ShS0wlmNua/kB6QgaEoJG3J8ivAVtKOmqA9dbmm7LSjLteUjf2hyYeSHMdxnCo8MDiO4zhVjPfAcNP+FlCHdtQE7anLNWWnHXW5pmy0XNO4fsbgOI7jjGS83zE4juM4NRz0gUHSlyU9LWlIUsMn+5IWSNoqaUDSiqh8pqSHJW2TdKekCQVomiJpQ7C5QdLkOuucJemx6LNb0vlh2W2SXoyWzWmFprDenmi/a6Pywv2UVZekOZIeCu38hKSvRssK81WjPhIt7wp1Hwi+ODFadlUo3yppfl4NOTQtl/RM8MsDkk6IltVtyxZouljSa9G+L42WLQ1tvU3S0qI0ZdTVH2l6TtJb0bKyfHWrpJ2SnmqwXJKuD5qfkHRqtKw0XxWS87mdP8DHgZMYPS91B/A8MAuYADwOnByW/QlYEqZvBK4oQNPPgRVhegVwzRjrTwHeAA4L87cBiwv2UyZNwDsNygv3U1ZdwEeB2WF6OrAD6C7SV6P1kWid7wA3huklwJ1h+uSwfhcwM9jpaJGms6J+c0WqabS2bIGmi4FfNujnL4TvyWF6cqt01az/PZJsk6X5Ktj9LHAq8FSD5QuBdYCAM4CHy/aVmR38dwxm9qyZbR1jtdOBATN7wczeJ0k3ukiSgLOBNWG93wLnFyBrUbCV1eZiYJ2Z/beAfRelaS8l+imTLjN7zsy2hentwE6SdLNFUrePjKJ1DfD54JtFwB1mNmhmLwIDwV7pmsxsU9RvNgPHFbDfpjSNwnxgg5m9YWZvAhuABftJ19eA2wvad0PM7G8kF32NWAT8zhI2A92SplGurw7+wJCRY4F/RvMvh7IjgbfM7H815c3yYTPbARC+jx5j/SWM7KSrw61lv6SuFmo6VNIWSZvToS3K89O+6AJA0ukkV4TPR8VF+KpRH6m7TvDF2yS+ybJtWZpiLiG5+kyp15at0vSl0CZrJB2/j9uWqYsw3DYT2BgVl+GrLDTSXaav6CzK0P5E0v3AMXUWrTSze7OYqFNmo5Q3pSnL9pGdacAngfVR8VXAv0hOgDcBPwB+3CJNM8xsu6RZwEZJTwK76qyX+XW3gn31e2CpmQ2F4ly+qme+TlltHQvvR2OQ2a6ki4C5wJlR8Yi2NLPn621fsKY/A7eb2aCky0nuss7OuG2ZulKWAGvMbE9UVoavstDqPgUcJIHBzM5p0sTLwPHR/HHAdpL/J+mW1BmuANPypjRJelXSNDPbEU5mO0cx9RXgHjP7ILK9I0wOSvoNcGWrNIWhGszsBUkPAqcAd5PTT0XpkjQR+Avwo3DLndrO5as6NOoj9dZ5WVInMIlkmCDLtmVpQtI5JEH2TDMbTMsbtGWzJ7sxNZnZ69HszcA10bafq9n2wSb1ZNYVsQT4blxQkq+y0Eh3mb7yoaTAI8BsJW/WTCDpGGstecqziWSMH2ApkOUOZCzWBltZbI4Y6wwnyHRs/3yg7hsNRWuSNDkdipF0FPAZ4JkS/ZRV1wTgHpKx2LtqlhXlq7p9ZBSti4GNwTdrgSVK3lqaCcwG/p5Txz5pknQK8GvgPDPbGZXXbcsWaZoWzZ4HPBum1wPnBm2TgXOpvlMuVVfQdhLJw9yHorKyfJWFtcA3w9tJZwBvh4udMn01Lt5KuoAkug4CrwLrQ/l04K/ReguB50iuAlZG5bNIDuIB4C6gqwBNRwIPANvC95RQPhe4JVrvROAVoFKz/UbgSZKT3B+AI1qhCfh02O/j4fuSMv20D7ouAj4AHos+c4r2Vb0+QjIsdV6YPjTUfSD4Yla07cqw3VbgCwX277E03R/6feqXtWO1ZQs0/RR4Oux7E/CxaNtvB/8NAN8qSlMWXWG+D/hZzXZl+up2krfoPiA5T10CXA5cHpYL+FXQ/CTRm5Vl+sp/+ew4juNU4UNJjuM4ThUeGBzHcZwqPDA4juM4VXhgcBzHcarwwOA4juNU4YHBcRzHqcIDg+M4jlOFBwbHcRyniv8DxV4jFs8sVpEAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"u = remove_distortion(d, k1, k2)\n",
"a, b = pts, u\n",
"\n",
"fig, ax = plt.subplots(1, figsize=[6,6])\n",
"ax.axis('equal')\n",
"ax.set_title('Undistorted Points - Exact Formula')\n",
"plot_compare(ax, a, b)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"error: 0.00\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ui = remove_distortion_iter(d, k1, k2)\n",
"a, b = pts, ui\n",
"\n",
"fig, ax = plt.subplots(1, figsize=[6,6])\n",
"ax.set_title('Undistorted Points - Iterative')\n",
"ax.axis('equal')\n",
"plot_compare(ax, a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Inversion of single value"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0 1.1500000000000001 0.8879057101562501\n"
]
}
],
"source": [
"k1, k2 = 0.05, 0.1\n",
"b1, b2 = -k1, 3 * k1**2 - k2\n",
"\n",
"# distort\n",
"r = 1.\n",
"r2 = r**2\n",
"r4 = r2**2\n",
"f = 1 + k1 * r2 + k2 * r4\n",
"r_prime = r*f\n",
"\n",
"# undistort\n",
"r_p1 = r_prime\n",
"r_p2 = r_p1**2\n",
"r_p4 = r_p1**4\n",
"f_prime = 1 + b1 * r_p2 + b2 * r_p4\n",
"\n",
"rr_prime = r_p1 * f_prime\n",
"\n",
"# not actually inverting values...\n",
"print(r, r_prime, rr_prime)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment