{ "cells": [ { "cell_type": "markdown", "id": "8b00f10a", "metadata": {}, "source": [ "# Large-Scale GP with SKI\n", "\n", "Structured Kernel Interpolation (KISS-GP) turns matrix-vector products against\n", "the kernel matrix into **FFTs**, dropping the cost from O(N²) to O(N log N) per\n", "matvec. On Apple Silicon LightGP uses Accelerate's vDSP DFT; on NVIDIA it uses\n", "cuFFT.\n", "\n", "Restrictions:\n", "\n", "- Only practical for **D ≤ 3** (the grid size explodes in higher dimensions)\n", "- Approximation quality depends on grid density\n", "- Best for stationary, well-conditioned kernels (RBF / Matérn on smooth data)" ] }, { "cell_type": "code", "execution_count": 1, "id": "dff50bbd", "metadata": { "execution": { "iopub.execute_input": "2026-05-15T06:51:11.733170Z", "iopub.status.busy": "2026-05-15T06:51:11.733013Z", "iopub.status.idle": "2026-05-15T06:51:11.942577Z", "shell.execute_reply": "2026-05-15T06:51:11.942171Z" } }, "outputs": [], "source": [ "import os\n", "import sys\n", "\n", "# Make the locally-built lightgp importable. Real users install via 'pip install lightgp'.\n", "sys.path.insert(0, os.path.abspath(os.path.join(\"..\", \"..\", \"..\", \"python\")))\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import lightgp as gp\n", "\n", "rng = np.random.default_rng(0)\n", "plt.rcParams.update({\"figure.figsize\": (8, 3.5), \"figure.dpi\": 90})" ] }, { "cell_type": "markdown", "id": "36270aba", "metadata": {}, "source": [ "## Fit 50,000 points\n", "\n", "`Solver.SKI` + `Backend.CPU` selects the vDSP path on macOS." ] }, { "cell_type": "code", "execution_count": 2, "id": "4fed7b6d", "metadata": { "execution": { "iopub.execute_input": "2026-05-15T06:51:11.943878Z", "iopub.status.busy": "2026-05-15T06:51:11.943758Z", "iopub.status.idle": "2026-05-15T06:51:12.326250Z", "shell.execute_reply": "2026-05-15T06:51:12.325803Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SKI fit at N=50000: 374.3 ms\n" ] } ], "source": [ "import time\n", "\n", "N = 50_000\n", "X = np.linspace(-10, 10, N, dtype=np.float32).reshape(-1, 1)\n", "y = (np.sin(X[:, 0]) + 0.15 * rng.standard_normal(N)).astype(np.float32)\n", "\n", "model = gp.GPExact(gp.RBF(), solver=gp.Solver.SKI, backend=gp.Backend.CPU, noise_var=0.05)\n", "t0 = time.perf_counter()\n", "model.fit(X, y)\n", "fit_ms = (time.perf_counter() - t0) * 1000.0\n", "print(f\"SKI fit at N={N}: {fit_ms:.1f} ms\")" ] }, { "cell_type": "markdown", "id": "919a10ba", "metadata": {}, "source": [ "## Predict and plot a slice" ] }, { "cell_type": "code", "execution_count": 3, "id": "94a9551d", "metadata": { "execution": { "iopub.execute_input": "2026-05-15T06:51:12.327275Z", "iopub.status.busy": "2026-05-15T06:51:12.327215Z", "iopub.status.idle": "2026-05-15T06:51:24.956698Z", "shell.execute_reply": "2026-05-15T06:51:24.956244Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SKI predict at M_test=600: 12556.3 ms\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3oAAAE7CAYAAACLyPOYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAN1wAADdcBQiibeAAAsixJREFUeJztnQd8U+X6x39ZnemmUKDsDYIouBXce6DiAhXn1ev2uhUHbq/zqvd/9br3uopeL+69RVQUGbJHGYXupmmbdf6f33ua0pG2SZtxkjxfP7EkOUlOTs553/dZv8ekaZoGQRAEQRAEQRAEIWEwx3oHBEEQBEEQBEEQhPAihp4gCIIgCIIgCEKCIYaeIAiCIAiCIAhCgiGGniAIgiAIgiAIQoIhhp4gCIIgCIIgCEKCIYaeIAiCIAiCIAhCgiGGniAIgiAIgiAIQoIhhp4gCIIgCIIgCEKCIYaeIAiC0CXPPvssJk2ahKysLOTl5WGnnXbC3/72t1bbmEwmPProo60emz9/PnJycnDooYeisbERX3zxhdrujz/+6PIzV69ejb/85S8YPHgwUlNT1fvsueeeuO++++BwOJq3u+WWW9R7+m/9+vXD8ccfj1WrVvX4l3399dfVdw8G7ic//5VXXmn1OPeVjwf7Pl29f8tbUVFRu+2WLFmCAw44ABkZGepY3HTTTfB6vV2+f3V1Nc4880z1+/JYz5w5E+Xl5e22e+eddzB+/HikpaVh7NixeO2117r9XoIgCELkEENPEARB6JS77roL55xzDg455BC89dZbeP7553HMMcfgv//9b6evW7hwoTLwaCDOnTtXGWvB8s0332DixIlYsGABbrjhBnz00Ud4+eWXsccee+DWW2/FPffc02p7GhPff/+9utEQ5GfT2Kmrq4uaoefnzjvvhKZpiAQzZsxo/p68vffee62er6ysxIEHHqiMQBpkNPLuv/9+3HzzzV2+94knnqgM8SeffFJ9559++gnTpk1r97vQiN5vv/3w/vvv44gjjsApp5yifp9Q30sQBEGIMJogCIIgdEK/fv20Cy64oN3jPp+v1X1OKY888oj69x9//KH16tVL23vvvTWHw9G8zeeff662W7RoUYef53Q61WcedNBBmsvlavf8pk2btHfeeaf5/s0336wVFBS02ubrr79Wn/P666/36Lc9/vjjtalTpwa17aBBg7R9991Xfe7cuXObH6+trVWPPfPMMz3aF77/FVdc0ek2d955p5abm6tVV1c3P3bPPfdo6enprR5ry3fffaf28csvv2x+7Mcff1SPffzxx82PHXzwwdp+++3X6rWHHXaYttdee4X8XoIgCEJkkYieIAiC0ClVVVUBUwQZNQrE8uXLVVRp6NChKuKUmZkZchRt06ZNePDBB2Gz2do937dvXxx99NGdvgejiGTt2rUdbsPI5N577438/HyVYsgoFSOIfs444wy8+eab+PLLL5tTJZkm2tXnMop5xx13IBYwysbIa3Z2dvNjJ598Murr69X36Ox1ffr0wZQpU5of23XXXTFkyBD1HGHq7eeff66idS3h+zO6yHTNYN9LEARBiDxi6AmCIAidsvPOO+ORRx7Bc88912Wd1Zo1a1TKJI2xDz/8UNX0hcpXX32F/v37Y9y4cd3+ZfwGXiADteU2p59+Ot544w2VFjpgwADss88+qjaQ3Hjjjcr4Yz2iP1WSKaxdMXv2bGUwfvDBBx1u4/P54PF4Or0Fqqt76qmnkJKSolJVp0+fjnXr1rV6ftmyZRg9enSrxwYOHKjq9fhcRwR6HRkzZkzz61jz6Ha7223Hbfh9aOAH+16CIAhC5BFDTxAEQeiUf/7zn7Db7SrCVVhYqAww1n7V1NS02/aBBx5QxiAjebm5ud06sozm0ehqS1dGkP85GhwXXHCBMjIZWewIfgeKvdAwZRTs6aefxqBBg/Diiy+q54cNG6aifYyO7b777upWXFzc5f7vtddemDp1aqdRPdYZMlrZ2Y2f3xLWRf7f//0fPv30U9x7773K8KRh6o+k+Wv0Ah13Riz5XEcE8zr/37bbcZuWz3d3HwRBEITwYg3z+wmCIAgJxoQJE7B06VIluMEo3WeffYbbbrsNr776Kn755RdlBPqhYcXnr732WjzzzDMdpnd2RdvXlZWVKSOzZYpkyzRLGpct0zwZxaIaJCOLHcHvdP311+O7777D1q1bmx/3R6Z6AqN6Bx10kEqX9KeRtoQG5pFHHtnpe7QVr/nHP/7R/G8aeFQgpWANj/Nll13W430WBEEQEgsx9ARBEIQuodFx1FFHqZs/hZBpjPx76aWXtoo6UV3xoosuQu/evfH3v/895KPLlgCLFy9u9RgjRFRuJHPmzMHmzZtbPc9Uxk8++aS55QDfozMjs7a2FgcffLCqJWMUkpE8tgvgd2poaEBPocG72267qagelUrbwn3k8emMrozkHXbYAaNGjVLGdsuoWcsInx9G0vyRt0DwuW3btnX6Ov/ftu/vj9K13K6r9xIEQRAij6RuCoIgCCFz9tlnq7TGQDVXF154oapvY3ohjahQoYjHhg0bVMTNj9VqxeTJk9WtoKCg3Wv8zzN6xvq+rowkpj2WlJSoNE32eKMoC18fyEjqLmwL8fHHH6teguFI3QyEXyTGD2vj2v4mPJZOpzNg3Vxnr2tbb8f94X613Y73zWYzRo4cGfR7CYIgCJFHDD1BEAShU1qmNfphxIZGESNigaAhw/TEK6+8srnmLVio6siIHBuyU/wjElCFsm16JFM426p0UvikuxE+Rj933HFH3H777e2e47FhhLKz27vvvtvp+7PpPI2nlqmhhx12mEqvZcTSD1NY09PTVd1gR/B1W7ZsUX3y/DA1lsI0fM5/rChOQ/GalvD92d+QUdVg30sQBEGIPJK6KQiCIHTK+PHjVUomUx2ZbkilRzYlp5LjrFmzOnzdv/71L2UQnnXWWaq+joInwUCjhPV/bMZNAZTzzz9fpSjS4Fq0aJESIwkm2tUZfF/WFp577rm4+uqrVXSPrRMYDWwJI1BsPP72228rIRYaoLwFC2sATzrppHaPh/o+8+bNUwYz6/r4Ohp4NCBZi0iRHD88Vg8//DCOO+44XHPNNcq44vei0dyy5cK+++6r/rKpOaGhxt+XKqT8bRmh4+sZ6WwpaMNILV/LmkCm6FJ0h7eWCqPBvpcgCIIQYSLcp08QBEGIcx599FHVvLxv375aamqqatx9yimnaEuXLu2wYbqf+vp61XA8MzNTNc0OpmG6n5UrV2rnnHOONnDgQM1ms2nZ2dnaHnvsod17772qCXlnDdOD4f3339fGjRunpaWlaePHj9fmzZun9pVN0v1s27ZNmzZtmpaXl6f2m58VSkNzr9erjR49uscN03/77Tdt//33V03orVar1qdPH23WrFnaxo0b2227ePFi1dSc36uoqEibPXu25vF4Wm2zyy67aCeccEKrxyorK7UzzjhDy8nJ0bKystRvzO/fFjaD53FLSUnRRo0apb3yyivttgn2vQRBEITIYeL/Im1MCoIgCIJgDNj4nNE9qqh2ls4pCIIgxDdSoycIgiAISQTr5ZiOK0aeIAhCYiMRPUEQBEEQBEEQhARDInqCIAiCIAiCIAgJhhh6giAIgiAIgiAICYYYeoIgCIIgCIIgCAmGGHqCIAiCIAiCIAgJRsI2TDeZTLHeBUEQBEEQBEEQhIjRWae8hDX0iLQIFARBEARBEAQhGQNbkropCIIgCIIgCIKQYIihJwiCIAiCIAiCkGCIoScIgiAIgiAIgpBgiKEnCIIgCIIgCIKQYIihJwiCIAiCIAiCkGCIoScIgiAIgiAIgpBgiKEnCIIgCIIgCIKQYIihJwiCIAiCIAiCkGCIoScIgiAIgiAIgpBgiKEnCIJh8Hg1bKnwYnmJB9uqfeq+IAiCIAiRIzc3F2vXru1yu1tuuQUNDQ3d+gxN0zB16lSsXLkS3eWMM87AQw89BKOx77774u233w75dZdddpk6puSdd97BX//617Dvmxh6giAYhi2VXixa58GmCh9+W+3GwlVuVDp8sd4tQRAEQUh65syZ021Db+7cuRg0aBCGDx+e9McxEMcccwx++OGHHhnCgRBDTxAEQ+Bya1i/1YfsdDN6ZZvRJ9cMZyOwbIMHjW6J7AmCIAhCOGD0aPTo0dhxxx1xzTXXtHruyiuvxC677IKJEydir732wu+//64eP//889XfffbZRz3HCODLL7+M3XbbDTvttBMmTJiAN954o8PPfPzxxzFz5szm+7fffjvGjBmj3ouvXbx4sXp88ODBWLhwYYfRsj/++AN77703Ro0ahRNPPBG1tbXq8XfffVe9D99v3LhxePHFF9Xjne0j3/uKK67AlClTMGDAANx4441477331HekUfrAAw80b8v9uu666zB58mQMGzYMN998c8Dvyf0577zzsOuuu6rjyyik0+lUz23evBkHH3yw+t4HHXQQNm7c2Oq1J598Mp544gmEFS1BSeCvJggJh9vj05ZtcGsf/9KgLVrjbnXjY3yO2wiCIAhCstDY2KhVVlaqv+GitLRUy8vL0xYtWqTuP/bYY2rNvGbNGnV/69atzdvOmzdP23333Zvvczvuj59t27ZpPp8+N2/cuFHr169fq+f9uN1uLS0tTaupqVH3KyoqtOzsbM3pdKr79fX1Wl1dnfr3oEGDtF9//bX5tVOnTtXmzp2r/j1r1ixt9OjRWlVVlfrcGTNmaFdddZV6bsKECdq3336r/s3n+Bld7SPf+7jjjtM8Ho9WVlam2e127cILL1Tbr1+/XsvIyNCqq6ub92vmzJnqOX4+94PHp+0+nnvuudqTTz6p+bn88su1G264Qf17+vTp2nXXXaf+XVJSohUUFGg333xz87ZffvmlNmnSJC2c9o5E9ARBiCkcp1Zs9GDDNq+K5LWlINusnluyzgNHvaRxCoIgCImPy+VSaXwlJSXqL++HA6YHMrK1ww47qPtnn302LBZL8/OffPIJ9thjD/U8o30to2ttYVTv8MMPVxE0/q2oqMCff/7Zbrtt27bBbDYjKytL3c/JyVERRUb4/vWvf2HLli3IyMgIav9POukk9XqTyYRzzz1X7S9hhOzSSy/F3XffjZ9//hl5eXlB7eMJJ5ygvn9BQYGK2h155JHqvRnhy8/Px/r165u3Peecc9Rz/Hzuh/+zW8LoI+sIGVnk7f33329Ox/z000/xl7/8Rf27f//+6rNaUlRUpH7vcGIN67sJgiCEyLZqDRvLfSjMMcNiNrV73mYxoXeuGZW1Gn5e6caQPhb0zbfAZm2/rSAIgiAkAkz38/l05yb/8n5KSkpEPovGC6FRc8EFF2D+/PkYMWKEus8Uxo5gquGdd96pUijJ0KFDUV9f3247GnGNjY3KscvPotH33XffKaPzyy+/VKmTjz32mDLErFYrvF5v82u7qgn07/t9992HpUuX4rPPPlNppkyRvPPOO7vcx7S0tOZ/0+Bre9/j8XT52S3hd3zzzTcxcuRIhAq/a3p6OsKJRPQEQYgZDS4NKzd5kJlmCmjk+TGbTCqyl5lqxp8lXqzasn0SEARBEIREg8YRDSLCv8FGvLqC0bpFixY118Q988wzzcZMdXW1Mib79eun7j/yyCOtXpudna228VNZWYkhQ4Y018itWbMm4GcyAsYI1ooVK5rr2BjFYw3g9ddfr4yyBQsWqOdoYP7444/q39zPthHF119/HTU1Ncqgeuqpp3DggQeqx2nksfbtwgsvVGqWNCJD2cdgePrpp9Xn8vO5H/7Pbsm0adOUYel2u9V9brts2TL1b27/5JNPNtfrzZs3r9Vr+R1Y15cUET1a/hdddJEKi5aVlakT5Oqrr8ZZZ50V610TBCEMeH26kdfg1tA7Z3vaSGekpegGX2mFFwN6WZSBKAiCIAiJBg0uKlQykkcjL1zRvMLCQmWwHH/88UhNTcVhhx2mDDEyfvx4nHLKKSrNkamMTGtsyVVXXaVSJLk/TFH8xz/+oSJlbM+w++67N6eDBoLvxTRGRrpoLE6fPh0Oh0NFzQYOHKhSLskdd9yBWbNmqQjfzjvvrERUWkLj8IgjjsDWrVuVUTR79mz1+A033KBSMnmc+L0efvhh9Xgo+9gVxcXFSqimqqpKpZ3y2LXlwQcfVMYr95sRP34/tlBgqir3hd+NBinfi2IwLfnggw/UcQknpqZCPsNRV1eHe+65Rx0Qhllp3fOAvvbaa8ry7woeXIN+NUEQAGwq92DJem+HKZudUVrlxfC+FgzqY1hflSAIgiAITWzYsEFFu5gW2rImMF4YPHiwMm5ZdxcJaLgy4sfIZihGfVf2jmFTNzMzM3HrrbcqCVN+CVrh++23H7755ptY75ogCGFI2Vxb6kNWeuhGHmELhrVbvdJjTxAEQRDiAIqbMPpGg09oz+rVq1ULinDXYRo2oheoQJEhbCrZBBPWlIieIBgTt0fD8o0ebKn0oU9u97161XU+sA56p2E2pKdKCqcgCIIgCMmFKV4jei3hF6CkKQs0jzvuuIDbMP+VX9Z/EwTBmKzc7MHmCl/AVgqhkJPJhuoaKh0izCIIgiAIghB3ET3uHqVembNKYRZ/wWhXSERPEIyHy63hhz/dyEw1IdXWc4dMjdOHNBuw03CbOHgEQRAEQUgqTPEc0eOOUyaVQiwfffRR0EaeIAg6tU4flqx3o6LWGI3GHQ0aXB4tLEYeoepmlVNDbb2h/VWCIAiCIAhRx9CGHtsrfPvtt/j444+bO9wLghAcPp+GNVu8KNnmw6I1biVc4qj3obwmdkZfTZ0PljBmVlPIhY4s1usJgiAIgiAIcZC6uW7dOiVlyl4YVut2CfVTTz1V9dboCkndFJIVGj1MaWSUa1O5T7UvqK7TkJVhUkIotU4Ng/pYMLiPBdZwWl1dwKHm5xVuuL1QapvhQqVvpgI7DwuvUpUgCIIgCIKRidvUzUGDBqkdp9omGyr6b8EYeYKQzKmav61xY8UmL8prNOTZ9fYFuXYTymp8KnUyP8uMtaVe/LHOo9Ioo0Vdo4baBg0ZYVbIpOImjVe2bBAEQRAEoXMoYMj1dayg7sZJJ50U9PZs4v7ll192ug1tBjZTX7t2bRj2MHEwbESvp0hET0hGlpV4sLkpitcWr08DW9bx2vBpGrZW+TB6gAXFvaLTdHzDNg+Wb/T2qKVCZw3UJwyxBfzegiAIgiBsh+uAyspK5ObmtjssXq/XUA3Nf/nlF1x++eVdGnrkrbfewjvvvIPnnnsOyYIpXiN6giCEnsK4ucKL3MzAETNG9vytR8wmE7IzzFi/1YdGtxaVekG2VKDaZiTgdyurkTYLgiAIgvFx1jegvKKq1c3r1WvNK6tqWj1eU+NQj7vdnnavaWx0qeccDqe6z/ftivPPP1/93WeffTBx4kQVATvjjDNw9tlnY+rUqRgzZgwaGxvVeqGqqqr5dSynWrhwofr3li1bVERu1113xYQJE3DFFVfA52tfK79t2zYccsghGD9+vNru+OOPV49/8cUX6rMJP58G55w5czBp0iQMGzZMGWx+2ER8xowZ6t80aI444gjceeed6v7GjRsxcOBAZQySo446Cu+99x6qq6u7+cskHtFx5QuCEFEYrVu9xQsTTLBZgzOmmELJpuWbyr0YUhS5oaDK4UNJmRc1Tg29cyPjW8rJ1L9L/wKfMmAFQRAEwah8/tUPeP+j1hGqOTdcioL8XDz46NOoqNxuqAwfNgiXXXAG1qwrwcP/ah2pOvWkY7D7rhMx992P8OOC33DYwVNxxCH7dvrZLIGi8fT111+3iugxnfKbb75BVlZWl/t/+umn45prrsEBBxygIoA0+p5++mnV87olL774oirF+vDDD9X9ioqKgO9Hw2zcuHG4+eab8dVXX6n38/fN/vTTT5U4I6Hx+cILL2CXXXZRt1tvvRXXX389dt55Z/W8zWZTRiW/25FHHtnl90gGxNAThDiHHq4NW70oq/aFbEixhm/9Vq9KebSHUSClJduqGWn0qdpARhIjgc1ighkmbNjmxdiB2yOXgiAIgmA09puyO3bfRY9o+cnNyVZ/L7/orFbRMVuTIOGQQcXKGGyJPTND/T32qINx+CH7Ij09rdv7dMIJJwRl5NXV1eGzzz7D1q1bmx9zOp0YMmRIu2332GMPPPTQQyr1csqUKTj00EMDvmdaWlpztI91dowYUpfDbrdjw4YNKCoqat42Pz8fr776Kvbee29lDPojlH64bUlJSUjfPZERQ08Q4hwaNys3e5XRFqohxX52NU4TNpR5MWZAZAy9ugZN9bsLV++8jqDgzJYKH4ryNBRki6EnCIIgGJOM9DR1C0Rerm7wtcVms6qIXyDs9gzYoRt93YVGVUtYp8donR+/eIu/HuyHH35QBlpn7L777irdk1E5plReffXV+P3339ttR4V9v4PWXx/o8XjU34yMDNTX17fanu9ZUFCAzZs3t6sp5H6mp6eH/P0TFclxEoQ4T9ksKfOpdgXdNaRY07e10qcMsnDDCcHZqKmIW6RhnV5qiglrtnjg8SakxpQgCIIg9Jjs7Owu69hGjBiBH3/8Uf37o48+QmlpabNBuN9+++H2229vNvoY3VuzZk279+BjNNSmT5+Of/zjH2o71u2FAmv7li1b1srIu+222zB//nz07t0bs2fPbrX90qVLseOOO4b0GYmMGHqCEMfQOKt3s2VB99+DNX0eH1AeATETlwdwezXYopQ7kJNhQlWdpvoGCoIgCILQnquuugoHHXRQsxhLIJhyedlll2GnnXZSNXYUPfHz0ksvqX7XrIfjjQIpjK61haIrFFih4UXhFtbTtXyfYFNK33//ffXvmpoanHjiiXjiiSdQXFyMJ598Ugm3zJs3r9mwZNqrGHrbkfYKghDHlJR58GdJz1sWMOpW3+jDqGIr+uSZw1bjxr5+81e40ScnelLN7BdYlG/G6GLJTBeEZFAb9nihaoAFQUg8WKvHFNDvv/++yxpCGrCjR49WCqLJgknaKwhC4qZtllVrSAtD7RsVONNSzFha4oGjXgtrRM8U5eBaVroJ26p8cEWhbYQgCNEf99gD9JeVbixY7lJ/f1/jVmJUgiAkHkwVfeSRR7Bq1apOt2Ma6YABA3DWWWdFbd/iAYnoCUIc4mjw4Y+1HtTW+9Ar2xK2Gjg2Hh83yIqivPBE4Ni6YekGT0SapHfGlkq9nyBVSAf2lsieIMQ7Lo+eks1WLeU1PqSlmGA164JS7AXa4NYwsr8FffMtororCELSYOoioicrIEGIQ2qdGhwNmjKgwtmywGo2qcVUUV543s/ZoCmRlGjDNC5GJjeW+9C/V+T2gQtMpr2mWE1KWVQQhPDT4NKwZL0bFbX6tUYHTstxj3XGFjO38arxi31BaQgKgiAkO2LoCUIcwibkqVZT2PvScXFUWetT3qGe1unxPWobqLiJqMPFYJ5d7+FHg48N1cOZOra8xNNU1wg0emhIAr2yzSqawDYPsTBuBSERoYLushKPElnqk9tx/XB6qgkpNjM2VfjQ4PZg3EArUiLc0kUQBMHoSPWyIMQZPp+GSkd4avPakpYC1Ls01Lt6/l5lNRoqanwxi3SpBaEJqK7zheWYV9T6VEroxjIvSsp9qv6QhjGjqrmZZhVt+HW1G6s2hV+9VBCSFaZ/02FTmN21SBQdLL1zeC36sGqz3oNLEAQhmZGIniDEGU6XpqJI9vTwG1BcKPk0vW0DBVp6Uk+zcpNHvYc1Cj30OiI9xYTSqp6nb64p9WJtqW7A+XzsPWhWEQQ//I75WSa4PRo2VniVcmlOpvjRBKEncBzitZeXGbwSMLcryDJjc6UP/Qp8ch0KgpDUyEpEEOIMZ4NubIQ7bbNl2iMFDxjF6i41dZpapGVlxHaIYTSRKV9U4exO6imjgawP2lTuQ06GWUXvaMS1NPJawloh/vdniQfLNniUuI00bxeE7rG5wguvT4+chwIdLxaTCRvLJbouCIFg77mdd95Z9dFjO4L9999f9Z8j++67L95+++3mba+++mrssssuqtH5s88+i2nTpkX1oFZVVbVy9HCfa2trO30N9/+HH35ovr9gwQKcdNJJSEYkoicIcQSNDxoPFE2JFNkZJiVVTgOJUaru9rILlxJoT6AxnJ1uwuotXpjNrNszKWMsGCjqQGXTHLuu6pdn143WrgzsgiyTEsqhBHxJmaYMw5H9rUodUBCE4Khv1LCpwqscLN2BdblbKn3oL1E9QWgFG5ufe+65yvgZMmSIeuyXX35pFzX3eDxqu/Xr1+Ozzz7rsoddKOsY3szm7l3bCxcu7HIbGno0CHfffXd1f/LkyXjttdeQjEhETxDiCBpfNCAo+BEpmOJIEYO1pR6VitidtE0aipFILe0OmWlmFRVgry2mk/ojlR1F2ljfw9vmSq+SbN9c4UNWevBDJSdLbk/lT6oD8vf6eYUbG8s8nUogC4Kgw+uEWQVshN5dB4k/qscaP0EQtlNaWgqr1YpevXo1P8boXktDr76+Hscdd5yKnL333ntBGXlnnHEGzjnnHOy9994YNWoUTjzxxObI2y233ILp06fj0EMPxQ477ICVK1fiww8/VNtOmjRJGWIffPBB83s9/vjjGDFihNqvhx56qNXncD8Z5SN//vknDjvsMEyYMEHd7r33XrW///3vf9W/J06ciIcffhhffPGF+refl19+ufk1Bx98MFavXq0e53bjx4/HRRdd1Bzt/Oabb+L69JGIXpzBBXRelqj6JSsUAmE0L9KqjuxBx9q2dVu9GN4vtGGiyqH3tMptioAZAUbjqJbJdgvZGV4U5VuwaK0H/QssyhhraaQy7ZKCNAxIstYn2AhgIBj9Y7on01iXlniVgMvgPtLnSxA6o7xGw4ZtXuRl9WwMYVRPavUEo3HHqw4sXR85saAxA6244WR7h8/TuKGBNWjQIEydOhV77rknZsyYgf79+zdvc/HFF6vnXn/99ZAib99++61KmczOzsapp56K2267DX//+9/Vc999952KHBYVFSnD6sYbb8RHH32E3NxcbNiwQUXfFi9ejJKSEtx000349ddf0a9fP1x33XUBP4sRx6OPPhqzZ8/Gaaedph5jemlhYaF6nIbaZZdd1mzA+eFn8PGff/5ZNVj/5z//iZkzZ+L7779Xzy9duhRPPvkkHn30UTz//PO46qqrmp+LR8TQiyMYgeDC22y2dDulTohfGF2jERWNSBk9ZjSOKFU+sFALWqac0bKSck9EFEF7Co1jRtrWbfXBZjUrpwnTw9JSrLCnmVRq59YqrzLKsjPMcLm1Hhl5bWsF+ZlrtniVOIRcv4IQGDpbVm/xqLq8nqZ/M6pnborqiTiSYBRo5M1fHjtVWBpub775JpYtW4Yvv/xSRdLuuOMOlco5fPhwtQ0jbzTCaAyxPi9YWAeXk5Oj/s20z7/97W/Nzx1++OHKyCP8zDVr1qh6wJb7xUgfDUJG6WjkkfPOOw933313u89iNM/pdDYbeYRGXld89tlnal9o5JG//OUvyvDzRx95DHbbbTf177322qvVd4hHxNCLI5jG4mhgWhkV/owTLRGiA6NMjV4NOWEyPrqCKVNVdT7UsSF4kIYbU0srazT0yjHm+UmDi5FKLvwoOsMI24IVbhXBZB881vKxJohiKz1RHQ0EP4+GI501/DwaloIgtM9aqHFqKMoLTwNOVaunlHcZzTfmuCQkF4y4GeH9mZbIGw0pGnZMd/QbNUyzPPbYY5VB9O677zbXuoVKy3RQu93eKj37oIMOUimUbaGhF01MbWoT09LSmv9tsVhU5DCeEUMvziJ6NPZY8zO4jxZT2Xoh+jgbNEBrPyhFmroGX7MQSVdUOnzKgDFyw3AasOzLxe/EqAFTOrmwLKuhAdaxoma4Fp1bq30or9VQmGPcYyQIsYBR9JIyn7oOw4WKCmr6vCmGnmAEOkurjAYbN27E2rVrVbSKVFZWqujasGHDWm13/PHHq1q+I488UombMN2zK5jqSWORNX1PPfUUDjzwwIDbHXLIIapuj+mZO+20k3rsxx9/VJE0KoDeeeedSjSmb9++Ko0yEKwDzMzMxAsvvNAudZNRxerq6oCvO+CAA1QEkymixcXFeOKJJ1TUMlxiM0ZDDL04gkaeP7JTW08VQJMy/sTgSw6qnVpE1TYDkWo1obJWQ/H2mu1OYSqkzeCjClVFLebtku00Snkt5UXhs5lGlm4zYV2pB3l2m1y7gtACzmstFW7DhT3djNJKHwb1Dl86tiDEK4xQ3Xrrrcq4y8jIUPdnzZqFY445pt22fIzGHlsq/Oc//+nyvWk8HnHEEdi6dSt23HFHVT8XCKZHvvrqq7jwwgtRV1cHl8ulHmP0kGItc+bMwZQpU5TxFWi/CPfrnXfewSWXXKLqAOkEP/3003HllVeqv/xOc+fOxVlnnaXqEv2MHTsWDzzwgIpWEqaTvvjii0hUTFqCysDxB0+Er0blQ6sFSjSCBeq/r3WDX2vcIKuqN+LzYwdaox7lEaILz+Ufl7nV78z0w2jBHnJceO02OjijZP6fLnV+UulS6KxFhg8j+llRkGOCXY6VICioirthmw+FEUj93lLpxcShNsOmlQtCvEPVzZYCKIIx7B0Z8QwOZd4Xr/OomiJG7/hbmppSXLgAp3AE64yExIZ1cvVuCodE93NTbVAKmo76rp0mPD/dHl0AQeh8UKYwxIrNHvy+xqPEJwQh2WEKNVOqw10b2zKFc1u1tFoQBCG5MHiSVXJDC73Brad7VTo05GTqRh5Tzfg4F/1KoMOtSTPmBKfK4YPPp//20TZK+JGsveuqXQKNPLdXg10MvS5JTzEhPcWiogw8tmzBIAjJDJ2WTpeGwmxTxFK2Wac3qI8WMWNSEJKZZ599Nta7IARAInoGr8nzevVFISMqDS59oc9UTqbUcVHtbKShtz36t3KzNGVORIN/S4UPGU01ZdEmI9WMLZU+5XHvDJ6PbExuZCEWo8E6wU3lvoRIMxeEnhp6FE2hYzMSsDbP42MvWonqCYKQPIihZ3RDz6cpFUCXV0+fo4gEDT1G8ZSx56HR51PbM7q3ZrMX26pl0ZhoAgUUYsmIYm1eSzJSoRwK1XVdGHqSQhwyWekmVDh8XR5bQUh0ymt8qgVJJGG/zI3lPpVmLgiCkAyIoWdgOBlxPqIcvNurR0wsFj1iwkU1F9+cFusatsvvs15vzRaJ6iXaAohO7lhFypi+yU921OsOhc4auosmUGioCL3JhM0VEmUQkheOHVWOyKdU8v05b7KdiiAIQjIghp6BoXHnn/ZMGlTaCeX1aex5fBrqG7SmtE59Ac4JjIqMjapWKqa7LoRxAbS5woesGCszsmF6V1EnRpl1k1AIhexMvYl7jbNzQ1oQEjltk+NHijXyTis6V1jmIAiCkAyIoRcHffMUJr1ez8zUTTP7oOiGH9M6WbtHg4A9zNJsgM+nqW2F+KeqTq/DjGQT72BgVJkppJ3V6TldelqxELoaIBeglJanmq4gJBssO+AcF402QZmpuiiLpG8KgpAMiKFnYFpORIzk0ePJhbTqmYHthh7l2R1M2/TqkRe+TCaxxKDa4TNEuwJ/mwW1IOuA+gbua3Dv5/a4UeuoVX8FIN+uK+uuEjElIQlhvbklSnnffrVqSd8UBCEZEEPPwNCwMzelwjGlhQttf50W/09jjgtrLr1Z3+C/z+ckdTMxqKn3IdUATVCUEp4GNDQGfp5RZLb8CMYopXG3YcMGbC0tVX/F2NOdN72yzUooQsSUhGSDWQvRygbwp29urZb0TUEQEh8x9AwMF86sxyOsvWvVa4vr6SYpak5a1XWUaNfv82+rtE8hLqHhXt+oR2mNAG292vrArQB4vrFuNJjFWkNDAzQ2BeQp7POp+4IuzMK0stWbPRKRF8KGy+VCVVWV+mtUWHYQzbRvqt0yfZPOVEEQhETG0Ibeo48+ismTJyM1NRXTpk1DssG2CazH83shKbzSjKYbdCQ9RY/2tcx8kdTN+If9ERs9GmwGiOiRzDQzVm/xYvG69qqubP9BY89/vnZGWloaTCw25XltNqv7go493QRHEK0sBCEYaNytXLkSJSUl6q8RjT3W/VItOpop6krJ2qOh0iFRPSF5iQcnkNBzDLKEDEy/fv0we/ZsfPLJJ2qiSjYa2SC9g8mPxl2jx9TcdFmpiDWtDRnV4yQmxDf0NvujtEaA0uQ2i1n1fWN7jxRbmx56mi4q0hU2qw0DBgxQkTwaebwv6PD42cxU4fSiINvQfjghDnA6nfA1Rc/5l/dTUlKan+cCj49lZGS0ejwYevLalnDs4HwV6dYKbWHPPrauKcoTBSkhfunudeh3AnFcMJvNGD58eI+uY8G4GNrQO+6449TfhQsXJp2hx5YJjNLlZASe/LIyzMhq+rfqq+cF0ppS/NhUnUqcQvwLFBgNpldxYUYBoJYppcrQYw+QLmAkkNGq0ioTtlWnqpYCjoaG5hQqviMXfDmZJuRlmVFcYEavHHNIxi5r/uLZiMzO4LHxqXS2WKutCvENF39cxPkXc7wfykKvrNqHFZs8qsVLaaVPKe9yXmp0edHorEaqzYfs9EpMGNkbg4pSMayvRUXLQoFGHv2S0Rad4jhTUctoIts6yHUmxB9dXcOcbx31GpwuTdXXW61Ant2sAgVdOYGExMHQhl6ywotz3VYW2ZlgC3ICKlSL4e2LcU7GQnxDJVWqrRoJ1TzdREOv9eNuSr1q7Q0uZ309NlelYMl6YFmJB8tLPKipD13xc2iRBTsMsmL8YCtGFls7XJj5hV5Y+8e0UEYO483Y4zVPw7nS4UW6EZR4hLiFCzcu/gJ5/Nsu9Orq6rCh3Ixvl7jx/VI3fl/j7kIYaLvRiC94UdfDbNIwqNCHnYenYsqEdOw+2qYWll32i43BdEWDtKrOpxbC+VnGGmcFIRj81zDLJpaXmPHB4irUNGZg9aZ6rNpYj6r6FLh97ecQi8mLjBQ3slPT0TvLjdED07CvJwWTR/pUEEFILBJmFXHLLbdgzpw5SAQo+8wGygVZ5pB6cflhRE+KzOMbR4NPpRXRyDEaTCelF7wl9Q3bFWFZc/PLygZ8OL8KSzfaUO/uug5GCTFoGtimz6eZ2tUqLt3gVbc3vmmEzaJhxyEmHLhTKiaNSGv+3I6EXmx2Ax7EIKINWyp86JvP2ltZhArdh8ZdIE+9P9q3qcKEr5en44dVGtaUVnX+XlYuEn0wm3xweZlJ0jrtkdfumq0WrNnqwZvf1YKNgCaNsOGwySk4dHKacki2pe1YEk2YKUAhs/wQ5lpBMEJ65vptXny8QMP/vk3Fiq12uHz+ea7BnxvT4ft5NQtqG3lLw8Ya4NeNwCvfOwHUYWhhI47aLQPHT8lBUb6kNScCJi2QhJ4BjTimb7799ttBv0b1mjP+VwvIlgovlqz3oHdLlc0QU/44edKbajZYRChe8C8+YpHSw5S931a70ehBSMZ+tKBa3bC+ZvTN8zVPPss2mrB+qxffLXHj44WugGIivXNNGNXfqtK7OIH0yTWrFE0qyrZ0VNQ6XVi2chMqHSZsrbWi1pONP1Y3YHN1e4Mtz27CfhNScOikVJXimQgRPb+xXFbrw+ThNuRkGu8cEOIbtkNh5O7Zj534enGb8DyA3EwNgwsaUJzvwsh+Ggb38mKPnQcjx57aavHpcNShwZeOrdVmLN/oxaK1Hvyx1oPlGz1we1uPnSaTht1HeHH2YXnYe1xK89y0fqsHKzf50DvXHJMSCSpbTx5hE4eKYPj0zEaPBUvK+uPN7zxYsj6wA5XzaWGOCb1zzGqO7Z3Dsh43cjJT4INF9WulpkN5rQ9bKvUbU5gDMa7Yi+OmZOOIXVLFGWJgurJ3Eiail0jU1G+PjnQHTlwel66CmCJrxKCg+trmci/GDLSqiCoXKoyqjB1ojeoCgBfr2q0elVPfO8eY3jRG36rrXKgrX6smn01VNjz/bQEWrGRErmVk2YdRfV1qsth3517oW7B9kdgpvkbkZ3qQnwkM6+NG7z7ZyDqiUKVZLVhWi29+r8bSLXa4vWY1ab31XSPe+aEB+45PxbF7piaE0Auvf/bQ3FThFUNPCOv48ulCFx7+rxPLNrTuwdMnqx5Tx6di+tRc7DjUhurq6la18ZqH6Znbr2FGFvLz9ehCv17AxGHAiVP052rrGvG/r9fj2z9TMX9VKqqcFmiaCd8vt+L75bUozvfg8uNzcdhk1unGTlmYQmYcV+pdjKLHZh8EoTPoTN1QZsJb8zPxzfJ0uH2tBRjoLJ041Iq9xtpw8M6p6FdgCVlwheufn1e48c0SFz791a0yysjiEgsWv1yHu1514MAdgfOPylNrIiG+MHREz+PxqNvtt9+O33//Ha+//ro6WYMpGI3niN5Py13weim13j0rjd97W40Pu41KUd4doWvv9u9rPSir8WGnoTas2uyBs5HpDRomDbMht4sak3DCAffXlW7lPYu2OEGwsJeeq8GB+tpSvPpdBr5byRSR7fs6sr8FB+2UgsnDaaw0hmxwdRaV8z/HqOfvG1Lx0+pUrN22/b1ZI3TQTqk4aUpaVH+3SMC6R54PkySqJ4SBn5a7cedrDixet93AS7Fo2G2EC+cfXYhdRqaETZWPku1+I5Hp2JWefpg734pPfnW1qu8tytWw/0QbjtwtA2m22FyvVLjdcYhNZQQIgpFYV+rFw+/U4n/z3dBazLH5WcCBE1Nx9O6pKhrdUeZWy+uQFBcXIzc3t8v14x/rPJj7rRPz5jegsq61w3nHQT5cdnwu9horwi1GoSt7x9CGXqC6u6lTp+KLL75IWEOPtXU//ulCVrq5VTpbdyavCUNsAWsimBbGaF+o6miJCFMYqhw+1R+OYyWVHlkbx5SH8loNBdkmjBlgbW4n0JNIazCs3eLBmlIvCg0SzQukYLm1yosXPnPiuyWeFpMPU4WtOHbPdIzo13OPX2fKmW2fW7HRg1c+r8bCtduPWVoKMG33NDUR0msfr9D5wDSccYPiMzIpxJ4tlV7c80Yd5s3fHglIs3px7F6ZuOjo9E7HmnBLt1Nl9+XPG/D0R/WoapHe3TvLhfOPzMXEYdFfPFLhdlAfM4YWSaRCME55xANv1eKdH9zwNmVost515+EWTN8nA0fvlgJbEE1re+qsWb+hBEtKbHj750z8ui5VReX9TB1vwzUnZGJ4GOZ7IYkNvZ4Qr4YejY6fV7rRp5v1eS0XiH3zzRhVbA04sZXVeDFmQHIuHnle0KtMo/rXVW4VPaVhzR7eW6u9yLebVXNwGsQ8VkX5ZlTWaqqGZEQ/S8TqHrlfTJ9wN+1PrGkbWetfXIyv/9Dw7Md1cLqaGp5Dwx5jLDh8l3QM62uNqfOABvILn9Zj4ertIQMaSRcemaGcHvGIx6upvoX02maLGpoQgjHG8eStbxtxx2t1SlnSr7Z3+CQTrptRgF7ZkXUmdWYkso781S/r8di8elQ4ts/TEwZ68Jcj89AviiIQzFCwWaBEY0T4SIi1NsBzH9fjkf860ODevgbYY4wNlxydjkkjQneEhMtZk5E3FC996cGrX9Q393BmBs1JU1Jx6TS71PDFEDH04lCIZfF6T48NPaa2MfVr11G2dimAG7Z5sKncp55LxomNxhtl/k1mpgczDWL7gMpj1jKSyoU2i5ZZr1fXoGF4XwsG9LZEJLLnbNQw/08XcjONkbZZ66jF1tJS9e+tNRa8tSAbq0q3n5c7DbPi6umZaoG0YLlLRYm7m24cThauduPJ96uxqXK7k+PgnVJw+oHpUW/KHA7otKGzYXQAp42Q3HTksWcU78bnHfhykbt5250Gu3HrGb0wqtg4To9N5V489HYdPljgQoN7ew3w8XvZcMhELzIz0iNeZ8sxvtqplzrEc/Q/mjAyW6/qyCmAxZYw+mJT6D4LV7lx9VPVWLt1+2OThltwyTGZ2GNMbNIkAxmJXD898Fadqo33x1LSUzRcOd2OmfumiQBgDBBDL85YvcWD9aW+HtcL0JvL8D8X4W1rlf7c4EFptVdNbMmWvsnjwogPVSEpFZ6Vzr5wwR0DRgCZ6slFN6NX4TYa+HstWuNGnzzjpG2uX78B3y1Pwbu/ZMDjMzcr8p00NR1/PTwDGWn6Y0vWuVWqa1c9s6IFo7Hvza/Hi5/Vw+3Tj2evbBMuOToDo4oRV2ItbChd5fRh52GiwCl0XYPzw8p03PBcLWrrtyvT/u3YDHXNGvHcZu1gXb2GN79rxOe/uZrbcRZlOXHqFDd2Gd8v4tcpSx12GmaTqEQQcA5css6j2uYUZFmUA9SebkK+3aR6sEmritBgdPuBuXV47pOGZsOpb56Gy4/LwrQ90mBEaAB+8v0a/PvTTCzZtH0fdxtlwd/PzkZfacsQVcTQizPYpJYqZIzq9BSVdphnwugBrZUjf1npUukyu420JV1zTIpb/LLSjV7Z5m5F5WhAMJUu1WrCoN5mZZSFK/r2Z4kHmyt8at+Mcqz+8XYtfl/rX3ppSmb5+L30gX33MdujxetKPVi9hfVkxth3P4xsPPx2NZZtbEo1NWk4ZHw99hvrhMUSP+0XWDfKBfsOg63iMRUCRvS8mhn/XVSMFz7bXou3xygf7j23oNuteqLBsg0e5eSigUC1Y445myv9qWFeTNsNmHFAvup5F0lDj7XYLRULhfZphSVlXqzb6lXznz/LhVFQZhDREUrH8eSRNomMBgnryy/5VxVWbdkezT5xn1RcfUImMlKNNZcGcjDRMP15TQoe+zQbFXV6xgmN/ptmZOKY3VMlyhslxNCLs2jTj8vcaiEXjmiR6sVV7cMOQ6wqxYInAxUmf1hGY5J1PylJpTTmclNNyg1Hfet0ze5Q1+BTBvmYgRYU97KGJX1o/p9u2KwmpBsgfYh9/O5/sxaORnOraNgOg21qcqfRt9volLD1fowkPk3DR7+48MxHzubeXiP6NGLGng4MHdQbWfYsGB3/tbzzCJthoqaCcYy9NZvqMPsl4Lc13maxlStPyMLpB3TcNDmWtEwJ21JlbtVHr67BhaffK8cXS9KaxZ4mDLbgsmMzw+IA7ShKxc+nU1RoH3GiABf7rXHO4/jTUSYQDeYhRRYM6WORRX4Xa71Xv2zAHa844Gqak4b3NeO2WVlKZTneUsaL+g/D3990qXROP0ftloLbT89CehyWS8QbYujFmceMRlgWG0iHqVE3C81Z+9WPNT4DrGh0Az8uc8HlheqH0j9JPJgcWOk53liuK2qGo56Ax5YeOA7MPRVo8Uca/QZ5LI/T2983qpRH/yJr77FWnHd4hhKoIXQSsG0He221XChR2KantaWRZG2pF3e9WolttfpiLjvNg2tOsmPMAGOmx7RlW7UXg/tYMETUAYUWMPXxwn9WoapOv14H9wYeOj8HYwfa4mKRaC8YipVb2ODZ0iptfPGaevz7IzZ0bpmCmolxg8JvjNF5xbFvt9HJWbfeEXQM04HHTBNGauxpnZc6MKrHuYwO5EG9LeKUCoCjwYdrnqrFx7/662c1HL9XKm6eaUdaHDU+DlS/9+nCRlz1ZBUcDfq1PLyvCY9dnIuBvS1hEYgRumfoxc9ZlQTQ0GNkh8ZDuKB6I6NXbIDJprDqM3xQqRd+JbZkoKJWUwI0TC0M10ROY6emjoX8WljUVmkrxnKRwfSb+95y4oXPGpSRZzVruPjoDPztOHuzkUcoutLWS8d6R2JkpVsaSQ+dX4DdRur3axqsmPNSA75b0roBrVFhKk9ppU9F9wSBvPN9A2bdt93IY//Kt27MN6yRR7jAo5FH+NftqudatxVMp544Ihv3n5ODfcbp36XSoeGmF2rxn6/rwj7OpNp0I6UhPoaCqKa+M5LHaCfXEl3NT4z0cY7lvEjHH0XP6GiOp+gl5+JIsWGbFyffVd1s5OWk+/DgX7IwZ2YaGpw1ygCKF2igsSdfS0PtgImp+OiOQkwYrP/mKzdrOHpOhaq9bevoYeon/8bTd45XxNAzEC43F8rhX+xTRZK9WJwNmvoMvjtVsurqIzegGQkujNeWepCaYgqrWiZrRiwWEzaWeZWoQHfhAoMe01jm5LNG5tpnavH9Un0C6pWl4e6zsrDfhPbeNjoj0tqsIxmB5jlFJ4KRoYF69Qk5OPvgNGVYs80Gjds3vq43tJFK0lOBukYtqRw0QmB4rj40tw5XPeWAx2dSMucXHpmOf16YbQjl286gF5+RPMK/2VkZnV6vl03LwF8PT4fNoikH1MtfMq28Ro2b4YK1xhy7qCQp6DjqfVi52afauoQyb3JbOpeZZruhzKvqLuMFtp1aucmjIpmRiLwfe2sFlm/0NqtWz725AAdNNCeU4cNo7qvX9cKsA/S1g7PRhPMeqcG/33eqcauto4f3hchi7BkhyWANWaSgUcJUQ0b0aOmlWE0qwsdF+6ZyD35d5cKWivgZkEOBC2OqbOZkhD9axnQiejw5mXVncuDAx5RCej0ZIYwFnNiueqoKG8r0wXfiUCvuPzen0wbCKbb2ET2r2aTaVRgdOlKO2DUNN5ycifQmO/aVLxvxj3fqVHsNo8JrWPV6rDK4NS1EfJ644gkH/m+eLquZkeLDvedk4dJpmXFx5BkBYBsIKoTyb0ZaipqTWEvb0fV60M6puOesbBRm6499t0zDDc9Wq5TxcEd0BN05unKzF5qPmQTdm5e4xqDBV+3wqWyReKC8hgrHGmrbONN6avi9v6BRRd5r6vVjSaGSF67KRnEvS0IaPnSc3HBKNh4+P6t5jr3vTSeuf9YBW0p6K0cPHT9CZBFDz0DQm2iJUOoeIzCVtT6lxMkFOaMvjR4NDW4NZTU09jSUVsXHYBwqrCnjN4tEWiS9l0xV2VLhQ1WdFrKRt36rV6VzFMRIaXP+cjdueK4GtfX65x+xi00ZQF2psXISbwmPLSNOdBzEC5RTv+vMLBTY9Un2qz88uPPVWkMv9nIyzKr3mC6IIyQb/N3PeagS/5uvix70ztHwzBV5OGq3+KgzDZT2xbmIC0OvHujoNPX63nOyMbpYH3tWlwJXP12rWhKFK/Oluk6cKH6Dh+JPeVmmHh9Tpvq3NZyM6kBhGQbPw5bpmzwOVMTuLhQBu/Sx2ubI+8VHpyvHTIrVHDDCnUiGz6GTU/H69bkosOsX95vfNuK8R50o7Des2dEjNXqRRww9g03i1giJflECubZBU4Zerp0DDos3mc6pR7zotUvU2p9tVb6IKlnS2GPq4vpt3pA8f9uqNazY5FUF6y2btEcLehnvft0Bt9cMEzScc0gazj4ks8s0HX7DQHWkrONzd7FYMxoDCy2479xcDO2j/26/rfHh5hcdqHUac8FHA5u29OaKODvQQo+hyMXMe8rxw5/6uTmq2IJXr8tXDot4xmZhNoBe+9sV6SlenLF3OXYd1tBce33DszVKJTgccyQzP4yewh1p6Kxbv9Wj5sxwtLSgEc9z1+g4GjRVgpGbaVKaBv65nHWKmyt9KpU1FPj6O1914K7X9QhdqtWHu87KwsVHZ3Ya4U40w2dUsRX/nVOIEX314zd/uRcz/u5Ag5aVcN/VqIihZyCYvsdJLxLQEGF2APPm/YM3/1/p8KpaB2bPsI4vEY9pTZMhG0lyMk3K88em4cHCCYTF67FoWj/3uwY88QFTvyi64sWZUx04aKeuTz46Ayxm3VPbFqaexlNEz09Ophm3z8rFhMH6d6LxfcPzDpTV+Iwb1avwGTryKIQXjhUn3lGGJRv0+xOHmPHClTkq9SveYTYAM048QTjJGhoaYDH5MH0XB47ayaHcTo0eM257xYGv/9gu7d4dRJBFh60UmJ2SHaZSh4w0Gk4UdQnNERpt2B+XPk4a/Fw3UKGcf9nDlFE+OsmDhWuqSx6rwbOf6A6JvEzgictycWwHDdADCZskEsx6+s/sQkzdoanv7lYNJ99drbKZhMgjhl4UqW9oVI0mAxXb8rnKKgc0LXJFToU5llaNTBkdqGtgbYQeleoqdSZe0zZpwIarqXlH8PjRmFy92aPXQQYRvWV9CSWro9+/R1fWJJmpPlx4UA3G9GtUi6iuoNfdn/rbllhEJcMFrwvWFPgV/krKfLju6Wq16GkJZd9rHbXqb6ygY4CeZ7ZbEBKfjeVenHB7GdZt06frvcZa8eyVuchNoH6KvP6CieilpaXBZKb6IzB1rAuXHpMGi1mDTzPhwbfr8e6PXY9hnY3hyS7IQufR6s2+oBQ2g4WRQZvZhD/WeQxZX0znJI25DVu9yunH88Dno4aBhspar8pSoYOcgmnBZD3RODz7wSp89Is+RxT3MuOFq3Kwe4u+s8kIhZUevyQfJ03R51iqoJ94ZyVWbY6Dwv44J3FmCoNTVtWI426rwAsflbVTVuK/l/25Clu2lmHzppKoLSIpqMEaPY7nvHEMS7S0FcrRs5VENKA6GWsROHDR+7dknbtDD2ZFrVcZoNE0jvjbvvCZE69/rZ972Rka/npgLYrzvWrxxEVUV1TV6VLbgQxnf4uFeIW/xaXTMnDYJH0iKneYcN0z1coTTXhdbtiwAVtLS9XfWBp79jQzNmzz9UjtVTA+JWVezLynCqXVeuRujxENePT8tJgq9EaCNJYOBGHose3CgAED0LtPH/V36vh03HSKHak2/Tp45uMGvPplzxR0kzVSzigU2yG4vOEXBmPNd2aqCWtKvUE5QqMFjbKfV7ixaK1bZT35a8+p79rYpF9AJ0SKjeM/Uzu77pF31gNVKj2RjOwHvHxNDgb31jp08icq/K5tvzP7Dd96Wjb+cpi+1iivBU65uzKulFnjkcSaLQwKJ53L/+3AqlIbHvkoF3N/SmmlrMR/c/CjV9IMX1CRlXDAhTnr87jAZcoCUzsNnFkRMoyasTYgmlEzpiiUbPOpiUPl9QcQzeBksKbUh+woyqDzHHzqQyfe/l43TvLsGu6clY1dxvdrXjRxEdUZVE6j0Tyg0NKh44AOg3iu9WRa8zmHZmDaHqnqfmWdGdc/U6Vq4nhdak3qaPwbres0EBlNrRZCFQAS4gfW/DJdc1OF/htPGVWPKw6rgtsVu/MuUqTZWHsa3LnMcSrLntU8Xo0fYsOds7JUbRV5/etGvPh594w9ZiuwDVEywmyUbTU+9IqQMBijhJyTKWxiFNEbrn94YySPUbuW50F5rU+JszBTxx/t7aw0gXXdZ95fjV9W6Ube+EE08vKRn+lNqPYJwdBZrzxGiq883o6Lj9KNPfYAnXF3JZZuEGMvUoihFwV4Yv/1iHSk2fTB7bmvc/H4h9uLvqmy5NP4U2hBR1bCgbXJwONApgw9VYOFhKG8xhuVtM2WcEJgxIt1VKRt81X+5mu2sFahfdPxSNHoduHR/9bgvQXbe+TRyOtXYGm3aOoMGhZF+eYO95uOA7/KWrxfr6ftn4bj9tSNvSqnBTe+4EClM0Vdn2qbKF6nHe0jjW4RZUlMqMZ70h1lKKvVnSr7jqnHJYdUw2pNLFW+jlR8Q2VIkRW3n25HfpNK5NzvXHj2k9CNPYpMOZMwokcn3tZqH/Lt22v4I+UILavWjb1YZg+xbIKGGUs7lJhamzUC6zWd9ZpywPvPTRNMHYqN0XCd9UANflvT1CNviAnPXpmP7ExzQrZP6IpgvvPFx9hxxXHp6t9sOzHjnkr8sVaMvUgghl6U2HNcBl68Mgs5GfrJ/9THXtzxSq0a7FiAWzxwCHoV9AoqshJOivIsquaHYzv3JVEyNxnJo0HFdMpow4mDxzQjxaRqEpjCubFMH8BqnLryKfvvRYNGlwv3v1GBzxfpP2yfHA13npGDPnmhizgwUmfvJKWHBnVqip7iEu/QkJq5Xxqm753arO5384tOWDL6Bx0BjTQUS6DXOVQ1OME4qUyBWFeqR/LKHfo1euyeqXj4wkIMHJiYqnyEzqOeZgPQcXX7aXbk2/X3ePdHF578MDRjj4ZeMqZu0lBhWiLTFyOJ3kzdpDJdYtkihinRa7d6lcHHtkCBslPq3Wx31fJRLaATkxk6Z9y/3UjZZaQFT1+RpyKYid4+oSOC/c7nHZ6Ja0/Qjb26BhNOu69ajL0IIIZeFJkwLB1vzi5AUa5+//nPXLj/LaduYMGKzEx7zBaPuqGnp2/GO0yvWLHRoyaVSLZVCEZtjAvxjeU+1XyW3kMafvQMdtXCIFzH4cG5dViwWo889cn24PoTLeiV0/3Lvm2j9LawDiPeI3otjb0Z+6bjpCn68at2mnDzi3Woc2XE3MjzG9a8XuNBujzZ6SyVqV1N3t8rUVGnG3mMKt91RqaKHieyKh+bKjN909VDh35RvgW3npaB/Ka+Xe8vcOHx9+o7bMYe6JqiwROP6sHdhesPlhm0FGqLJJz7+HPEqrcenQlM12TbJdboBfreVD+nMdryOe5tWycmI6HnPliFxev1x3foX48rD9kMm9mTNO0TAhHKdz7rkEzcPFNvOUHjf9Z9lWr9JoQPMfSizMDe7H2Uh6I8/dD/+/16PDS3FvWNgXuTRQuVuklDLwHmN0ZfmFvPlgexhBNan1xL029twsLVbmwoY5Qx8vvFhc3D/63D/BX6ZxVlu/DXg2pRVJDe7fejM6CrVhCsh6TATyKJ+tDQO3mK7vatqTdj9vPVhmm9wLTrLZXbez4J8ZvKRAn6WfdXY2u1fn/6Xqm484zMZs94IkORhqx0Exp7GE2jQFJDzUb89YBq5GfqxvRHv7rw5AfBRfY4B9PISxRnVTCoWl/WsodZgKUzmHYeSruCcNLggpqjCH/nQE5XOvn65Vuao3LE5/WgrKK62UnDBusXPFqFn1fp32N03wZcP60aNkv76zvR2ycEIpTvPHO/9GZjr7bBhFP/XqnS14XwkPgziAFhismLV+eoWi7yr/dcePHzuoj10AsGDmycB+N9gc4Fb8k2vdlruOShewI9xNyPgiyzUkrMSjNHvG8ef8N/v+fEN4t1r9igQg03zkjDmBHF3Y5E0cvNyZm1C1151PPtbJAb3+dRW06ckt5cs1fhMOPG56qUAmmsoToe+0TGyjsuhCeViSlkp9xZppRUyTG7p+L2Wclh5PmhY66niox+waTcDB8uONCBvnn64x/87FItZbqa35TohpYY6efBUu3wKQdvNGvZOW7R0NtUHv1aPabm8iOZ2dKZ8EzLuj06EEpLN2FdSamKyDvrG/G3J2rx7VLdGBlbDNx0XI3qB5ks6Znhhsaev2avss6EU+6uwJYKMfbCQfLMIgZjYKEFL16Vgzy7fv+1r9z48JeeNXztMQkQ0at3UTwjfM1ewwmLuqMhwPLS5w346FddeKVfnoZbT8tB317ZPUo35AKM6VVdLQb4HYf2tcLt1eJafTMQrNk7fLLunSytNuPWlx0xr4+jcAIHcaYIC/GZysSU7hl3b0NJhe7pO2TnFNxzVnIZeSQzzazS43qCv88eybUDN81IV+JT5O3vG/Gfb7pWLDXR0EuS9SWNLLYginaJA2sBqTq9rERvzh5NnI16Y3SOncEat3QgUBHd5THD4/Xh2mcc+OgXPbI3oi+U8MqEccmVnhkJWLN3XlPrhW01Jpx6b7XqcSj0jOSaSQzG4D4WvHR1LnIy9IHu5S8a8d5PgSeiqDRqVsXwiGvY+4ZEUjnMaLQ8N976tgFvfac7DHrnmnDr6Tmqh1HPPwPIDLIdBD3zhdlmVCeY9D8js2cdko79JuiT+NpSH255sVrVacQSRoq3VEhPvXhMZWJNyul/34bVpbqRN3W8DQ/+xZ50Rh5hPRQX4D1xELXts9cnLxW3nZ7dLIL2ypeNQTVVN1Kvt0jCWjU6RsPdNy8Y6PRkZI11ctGEgmgdGXgdrbPoQLBaTWh0A//+LAsf/KLv89AiC569Mg+5dnNSpmdGgr8dl4mZ++rHcP02H06/v9ow7TjileSbTQzG8H5WvHBVHjJS9IHjyQ8b8MmvrSN70WrUzKEvzjM3laEX798hFFqeG699WooXP9cXMUyfvGUm5cbDc4kzQscammBQ9Q0FFtV4N9GienQgXHBkOvYco0dHV5eacPsr1c0OhljABRMXS4lmWCc6PGf++mgNlpToRt7uo6149IIs1UIhGVGCLCn6YrontG0ZQ4Xh207PgT3V19xUve0c2xbWXyUD/lrjaIiDdZQBUhPFRTwjmLVOLWD5RGfrLJ5LgwYU4+uVBfhokV5L1i9fw1OXZ6MwJ4Y1NwkI1w83zshSasNkxUavUjWluqnQPZJzRjEYowdYceNMu2qCTP71nhM//rldlS1qjZqbmqbHM3X1mmp2miz4z41f16birZ/0CSgz1YebZ9pV64xwEooqW16WCf0LzKo3E43ERIKLokunZWDnYfrxXVoC3PN6TUyV+rhgopiHEB+wBuzi/6vGD8v0xeROw6x47OJspNqSd0qmIAubnkeivUFxLwvmnJaN9BR9gvvXvHp8sziw8imjPSwBSIZzcHMFRVhid87R4GLqZrTEpJiZ4vLqqppt6Wqd9fnvPnz6u/7vwmwNT1+eh/4FYuRFaiy48ww7DpyoH1+qmp7/cLWKtAfbpkbYTvLOKgZj7EAbLpuWgRQrI1Im3PemA4vXedrVHUS6UbN/vKW3OR69mjUNPtW4O1ngubBkUype+Z7FnmyiTSMvGwMKwzcB0VCjGh0VHkMxhkb1t6J3jjmm/ZIiBQv1r5pux9gB+nW5cI2GR991Bi3jHm6yMkzKqGYTYMHYcFF79VNV+GKRPr7vMMiKJy7NRkaqTMc5meaIOYbYVP2mGdlKMIOf8NDbdViwon34kGNdrNOxowEzAJgJEMq4Hm4o7kXDviGCFSktYZaJx6PPZ23pbJ31wzIXnvm4Xv07O92Hf1+aq2rRhcjBNcRD5+dij9H6bzJ/uRdXP1mFFSu6blMjtEZmFoPAAW9wbyuunm6H2cSUNzPueLUGa0u97eoOItbDS4mx6BPcxnIvtlTGV4SAaYL1DZFv+moklpUAL36TBQ0mWM0+zD4lW6UDhxNOxOyPF2qfJXrlKIpDL2oiQm/0DSdnYWiRfly++sONFz+LULS9C5RCnAbVakEwNve8UYt5P+ljK88dGnnZYaijTQQibXSMKrbiuhMzYTFTadKEe//jwLINnnbXUr1SZkxsY4/9N6OptNnRYp7O5WgZ1i63buQHUuTuaJ31Z4kHD73tVHMsncj3nZuDcYNi30c1GWCmyr8uzsOYYv3+ewu8eP7rjE7b1AjtkdnFQItGr6Zh5+E2XHSUnoLX4DYrsYetVd52dQeRgAOgP3WTRdq8xROs7WBo35YkjrbVWzy46zWHUoizmIGrT8jCuEHWiPQdyu9Ehrqr+rFYRbmiAb/fjadkoW++uVnZ750fdM9vtKGxwMbH8RiJTxae/KAOz3yse6GLcoEnLs1BQTevrUQ19Oioi2R7g/FDbLjqeDtM0OD2mnD7q7XYsG27U5PRHo6pieqg8keVWZ8Xy2hey7pnOpajkfnBaHFn37jtOmtTuRe3v1IDl0fvNXzeYenYdZSIrUSalumZPEefuSIf/Qv05+YusGPer+nSxiIEZIYxCC1TCfadkIJZB6Y1N2i+9eW66KgONbVXoCfT0aDf4glGnrj/sSosjyY0/m97uRYNbpNasFx6TAYmj4iME4DnQ8vGsaEQ6Z6BRkk3u+mUzGb13Oc+acRXi6LfKoXHmkae9NQzJu9834C//0d3AvBceeziHAwoTBKvVJCk2EzIyTBFfNHPxfoFR+qRAWejSbVKKWtq4K2aprMWKMFqi1vC48u0zTQD2CwF2SZ17Bk5i1QUlS1MWMPcGEL9J/uk0tFe16jPfeccmo4dh1mRpFpJUYPGHdMyW6ZnUlTuuSvykJ+lryee+jIbax2DROE0SOSUNQhMF2m5JD5m9zTVNJdsqvDh1pdrIq7sx1Q7r1dT3it6VJk3H08y0xzILUnQVoF1WHNeqkW1U/+uZxyYhr3HRWbGVtE4EyNX3Tc+eiqZHg9Q2e+mGVlIs+nf8+H/OrFwdZQKT1pAISKmZAnG4qs/XLjuGYf6N0W3HvlrDsZK+ldA+uSZ0RiheaelfP4BE1NxylR93Cyv1XDbKw5U1rrgqHPA7fGoNL9ExW9IG6ENEfeBUe1qpw91EUrhpPNrfakeNQwmXZVO49teqkZZrb5Enr53qmqrw/WFRfRXIgrTMZmW2TY9c2Bvi0pzpw4BFyVXPukMWGMrtEcMPYMQqDj4tAPSVF8lsqYUuP/NmoAL5nD12OOY7/HpQiwelboSP4IsHMC3VvpUD7dEhr/NHa86sLlSv3/UrlYctXt6xD6Pi51UNnrvZkNd1jQwz57nU6JDsYfrTrLDYmZk2YR7Xndg1ebo5n9lpJmwrdqX8IZ1PPHbajcufLRKja1U+6Oa3O5jWjtmREluOzkZZj19MszGXiD5/Ol7p+OwyfpvsaHMh1tfqsLGjaXYvHkT6hJYerO8lqJlxpkrmYXDHr5sfRAJnA0aanmr77q0g2PnA3PrsGarfnymjrfilKlpav9YIpEMGUOxJCMjo7mPKP/yvp/xg23450W5SsfC4zPhnAcrsXJTAudYhwkx9AwCvUw0tFrWM+k9uzKwwyD9Z1qwUsMzH9VFrMeeHnnRa938jr6e9jSKFhW1Xn0hZaDJK9xwAnpwbh2Wb9K9XXuONmHWQXo9Z6RgRDc9rfuTG89r9seKp8hwT+BEdPmxmSqdttFjwm2v1GFzRfSsXKZiMSUrUgsmIfQ62rMerESjx6zOiWtPzMThu6R1maqUzLDutSDLHPbSgUDy+RTlOOvgdOw6Qh/f1pWl4MVvs+DzaqipTUyhB47FFbWxVdsMRJrNhNIIiUmpVNUG3YHdWUSPqaP/fp+RIt14mDDYjAuPzFTnCbOdpBd65GHD+eHDh6O4uFj9bduAfsoOKbjzjCz1b6fLjDMfqJbWQl0ghp5BoAeTKQFeb/uUzmtOsDcXor63wIN58xsj0mPP1GzosVBPfyyWjaBDocoRuAlqouByu/Cvd6sxf7l/ArLi0mOzI556w4hedjfr8/xkppvV7+NvzhsLeB4HU//Rk+i4/7W7jDDhnEN1L2SNU8PNL1RHLZ2S5wON8s1xppibiFC1+PR7K1Fbr18/5x+RgdMOSA86VSmZ6Z1rCbtzqCP5fF4vVxyfjVH99N+A7Wo+/CMDHnQzX93g0AnEY2u0+TIzzaS0CMKtwMlx3+nSVP0nDb5APfT8vPVtAz7+VR/7B/cxK4Ezv2HItRGzW4TIQ+MuNze3wxq84/ZKw6XH6GNpaZWGM++vkdZCnSCGnkFggS/raxiVaktmmhk3npLdLPbw9Ef1mP+nO+w99lTqpkfTm45bKNcf+aL4cCmIMSUjUQdhGhDPfVCGzxbp9wf2osJmpi6pH2GoBGtP69nnFOaYMWaARaW9RKIZcmcw/YsL7rpGH8pq9YuL+8D0xraGX0+i421fe+BEM47fS18oss7j1pdqVKQtGlDMgp5xR4PU6kWTlumXFH8456EabK3Wr52TpqSqSG+oqUrJChunM7UwnI7GztoUMRNk9ow89M/XHSS/rk3D618n5vVDp5MRavPawvmM659wrzmonurxasjLNKs1TkcRvS9+b8RLX+hO9Hy7htkn21tFPcXQMxbMduO4SlZu9uLcf1QlTeZQqIihZxAohMLccRotgeida8bsUyj2oAfb7n+rFis2ecLaY4/ZeR5lNOlNx7k/0VqchqOtQkqCtrb5+Gcn3v9NX/xlp7rwt2nmqKbdpHazPs8PFbMGF1nRv5cZNfW+qC1mHPU+pZzG5vE7DbWpXoAU7KEBxAg6RYda0pPoeKDXztg3DfvvqJ+U67YBd71WE1HZ+JaLVi5KKmIYQU02WqZfLl66Euc+VInlG3Wj4ZCdUzDn1MxupyolI4y+FOaaw64g21mbIkaU5pyWh17Z+me+8U0j3vgqNq1SIpn+TyeX0dI2/VDshGN2OOHagMYe09qL8gKH8xatcePRd/WymPQUDTfNzFbzVks4pibqGiMeYTrtzTPt2He8XnT5yyofrnyiusM1dDJjaEPP7XbjoosuQl5eHvLz83HxxRfD40ncwkumUnQmWjGsrxV/O4754uz/wyhBNUorw9djj4ae26171Li411M5jX/RsLmtXihtzMmrJ/yyyo2nP9EnvlSrB+cd5ETfXpETX2kJvaCMNHdXiCWQs8LU9L6RhFEA1ro2uDV1TtPAzMowY8ehNuw0zKZ6VVK0h+dNS3oSHQ/0Wk5Efz0iA5OG6Y8vXq8pNc5o9BXMSNEly4Xo4E+/5Dh037ws/Lpa/413H23D/X+xN0fsupuqlIz0yjJHff7h4v7mmdnNWQw3vuDAl4sSp2ZS1aq5tG6rKEca7ldFbftsi57gd+gFapJO1m314u436uDTzEpI67oT7RhY2N4g1EAhl8RbY8QzjM7+4/wcjBuo/y4f/OzBPW/o6sZCnBh6t99+O7755hssWbIEixcvxtdff40777wTiUpaStfqhOyVds4henSnrtGCW16sVJGLcMCBkO+kq8P5ZfFheLiwN2AmSo+hYuN9/+EExDRaH648LgWTd+jfY4M+lONK50NqmD7OnmZGjj2y6cA0oiocPjVRjx5gxeAii/pcwu/ChRwbi+fZTe3SPHoSHe/otXQ+XDk9C8P76tt9u8SNZz6uj1i/KD9pqSalMhfuehchMEy3NJnM+PdnWfhpte6IGVMM/PPCLKRI461ukZWhZ7lEOx2rf4EFlx+brsZcjr0X/V81Fq11J4QyqoMRUs0YbRU6WgNRhCecbRZ4/nT0bVk3zrYafoHVS4/JxA6DA4/7PGSJ6ExOBPGmpy7PQ3GBfs4883Ejnv1Y6pzjxtB7+umnMXv2bPTt21fdbrjhBjz11FNIVKhOGIy3/7DJqc099kqrrbjz1eqwpIQpw867fRKg4RcPsvhM70m0/nlbKtgQ3aF6GfKb/e04OyaNzI6akUeYtsueVh15QrtD7xyzirRFyjDdWuVTNYFcrDFNZ1DvwFrarHsNdKn1JDre0WtpYN44IxvFvfThdt58F97+vjHy9S7e8Ne7CIFhJO7j5cX4+A89RXNAgYYnLstDVg+FjJIZXje5meaYlA9w3Lhqul3FcRrdJpz1QBW+WbA67pVRadgYTYSlJTSkOC47u68p1w42SQ80h3FsnPNilVIgJacf0HU/2kBtsITYoxqqX5mPfLv+O9/1mhPzfmytUJ/MGHYWqqysVIPqxIkTmx/jv9evX4/q6mokIkwLCDZThT32dh+tL2KXbTTh//7n7HGUgGMhJ1XWAfoNP76l0XOe2UA8kXLnqTw25+Va1DSVh5xzaDp2Hx3dlC46HPjb59nNYe+RFYmUYAqsVDl8GN7XgvGDrarGpzNYj8NoASf7SEfXCBf8N55iR06GHiJ/4bOGiKeERaLeJV5gjWZJmVcJ8VAYJdK89lUD/m+e/nvm233KyKNypNAzemWbY6L87PZqOGRSKmafrGfPVDtNuPnNXNTUm+JWGZU9cavqjNdWoS10NNeFUUiKa5q2Bhp/XzrIN1bo8xt7Kfqd5x2iiaFnZFiL/9hFGUi1+ZSOxVVP1eHHpfF3nSaVoedw6Hm2rFvw4/93bW1tu+1vueUW5bXx3+IRqoyZQhgMmWYwsr8+gn35hxsvfdr+uIQC2zsw2sK0L6L6+vm46IdhocHQ4NIjGIkADZbbX3WgtEq/f8xuFhXBjTZM+aMxlJ0R3uPK98xKMykvajhr1aqdPgzvZ8GgPlT37Hqf6dXmQpznz9Yo1bIx0njLqTlIs+mf98h/67BwVeQaVWamm7C5whd1pdNYwjStdaUe/LrKjT83eLB4nQe/rHRj/VZPxAz6Txc24uYX9PkqK92Ef16Yh6F9u+jKLAQFjyeJRl1roDTC0w/MxJkH2pqzZ257O0/Vx8ejMiozX2jsGalReiBYKlBZFzlDj+PAI2/XYmmJfn+XkVbVS7GzdaMaOyR10/AM7tWIq46oUj1LPT4zzn+0Fmu2xEFaWrIaenY70ybQKnrn/3dWlt4ssa2hx4vRf4tHOBiFsudcrF53Yib65OoD1Fs/+PDxL933YNBYYm2T32jiepnDrZENPb90MqMz8Q6NjvverMOqzfokt/cYLjT06yDacHKkeArVYMMJ34+1c3lZJqX+Fg74+3M3C3JCSzMdXWxVwiz0cDMqHGnYgiE/w4lrTsiApan+5+//4e/t6VH/vo6giA4Nn2g2bI8ljNzRcF6xyasix33yLOiTa1HRVCpgRqIZM43ISx+rUWOkzaLhrjPtmDQigdILYozf2cRm19Ech9kKhoYeuebEbBy1m55Rsao0Bf/8vC/Mlvj7jekMi4caM65r6ur11jg9hdlIVOVu2VLh5S8a8M1SfSwY0deEvx2b2eVx0cXeJKJndOiAmTzUg/MPrGnWsTj93gqUJ7kCtWENPSptUm564cKFzY/x3xQ6yMnJQSJCA4uDSShpbTmZekpYZpNA4OPvNWDhqu6nhLUc8Lhm1g1nGBZOBpwP4mEC6wwe58fm1eOXVbpE2LgBPlwyLTtm0Wmegjy3IgEVMMcOsCplu3Ck1dFTzRx9v+hKKHAxN6KfFfVuRoYjd6K37LOXZdqES45OV15H1mDe/ooDvy7Z2K3+fV1Bg2f9Nm/YBJuMnO78x1qPiu6zNrNlHRL/zcjQ6i3esKYBrtzkwV9U7yZmYmi4/mQ7Dt7ZoHKGcQodQ31yzUopMlq43Hp2TXMJg9mEu87Mws5D9X346g8v5rzkiCuHMveVKrzUATA6bO3k8mrtVJG7A+uUmabpj+h9sKABb36r10cX5Zlx/clZQdUs8n3YV1hq9IyNv1XNmYcW4C+H+iPxJpz7j+qkFiYzrKFHzjzzTNxxxx3YsmWLulFx85xzzkGiwkFENU0P0QHfr8CC60+0w2rW4IMZ97xRqySDe4pu6Onpm0ZFSScnwPXLGp9Pf9MN9GF9Lbj+5LwOG7tGGi6GudCxN6VNRQLW0LFdCA2sniy+uYDh64vyuz+U9coxqxRo1rNFSs69bZ+9iYM9OKtJPbfaCfz700w4Gkwh9+/rChWV0EyqoWw8tErpDpzA/yzxKK97295XLcV3uHBk3V44YO0fBTpYs0XYRmPmftFpe5Js5DbVCUcrfZNRcI59LbMZOB4+cVkBBhfq1/BrXzXisffip8ceVSypZkmFQqOjnJsUZAnDwpwGo26kAT8td+GJD/TfLDsDuOmUzKCdmZxjqAIb7w7lZMDfquaK47Nx9G66sffHOi8u+Vd1xFs7GRVDG3o33ngj9thjD4wZM0bd9tprL1x//fVIVCjGQmOvOy0Nxgy04pJjdMW3Ro8Fd7zq6HG4WqVu0tAzeEQvTksym/nol0a8/rXuZSzI8uGGkzJjOiFzgmX7gUjXctDAGtHXouoxujsAVzs15GaaUNDBAj9YqNJJxS4lPx4BAvXZO2KXVEzbXZ+IKupseOqLLLi8ofXvCwamydKbX9mkLpdIMDVr9RaPWsR2JRxEBccSRjd7KPTAKPS5D9VgS1Md7clTUnDZsR03RBd6BiP/jMjWRejaDFQO4K8NbJuJ8MI1Bci3686CB+c6Mfe7MMpDRhCOa/QzxYuhwuwmplr3VAiOvyXj7Ss3eXHfmw6w0QLbZpyxTzUKsn0hGf+cZ4T4gQ6DO8/MVr1MyZd/eHDj8zVxFYlPCkPPZrPhn//8p1Lg5O2RRx6B1ZoAxVhd9tLr3olIaeBT99cXiWU1GmY/W47ael+36394ofCaMPKFwXS74CVsjMf85W48/r5eV5mR4sGc03KaPdixNJ4Lss1RU8rqX2BGea0v9H55tT4lLjC4j7XH0U+e630LLGFJFwqlz95pB2Rgn7H6sS6pTMHrPxXAZArvGEfhJi7wElGBk5E1Cs4EY+gzRYtHoKSs+8eBnv3zH6nGnxv1xf4hk1Jw88zY1NEmC4ys9cs3h7W3WldjC+tbA8GazxevLoC9yRdz/bMOfLPY+K0WlCBJnBh5JNduwrYan1rH9NTQ21bjxa0vVysRHaZYn7qXAwPy3V1mTtA55s82ob3JrAAhvqCz+p8XZGFYkX7uv/mtW4mgJRty5hoMTjA96V137B6pavFBSmtsuOm5cqxcs6Hb9T+8PIwc0eMEZotTFXOmm93/Fms96GX04qaZueiXH/svw5+7o4VOuKGBNaSPVX0e2yMEC1U7mUozfogNBdnh2VdGhNimI1INmgP12eP3v/iYLIwfpN//bY2Gf83reauUtlBwhgsXo7dKCQX+TmtLfSr6EmykIjvdjLIqOr9CPw5Mfb3yiRosWKEP0LuNsuK+c+ywsLBaiCj5WZYoNk83ddqeZXg/Kx6/JKc5++aCR6uxZL1eW23kiF48CZbROZVuM6GkvGfHtazGi0fecSpRDnLsLk6MK3Y1Z1V0Zux7NU21afGLfcVD2quAgJH4Z6/MRe8cfex49N0GvPRZzxTq4w2ZoQxGeqpe+NtduHA855B07DVWX0yuK7Ph6c/S1Ht2p/6Hl0Z3UkmjRaAeOfHAxnIv7nytDm4KOZg0XD09CyP7x34m5mKW9QzRbKrLKPbYgVYws5ETa0dwkUdREW7DYzain0W1LAiXYA33I99ujnqTcUYjrz0pB4N765/7+e9uvPR5Q9jHFUZEEqmBekWNT13/oXjaKfTQ6Ald6IGG9x2v1OHDX3RH2Yi+Pjx6QTZSbTKFRgMusqkCXOOM7PnLBT7Hlq7Gv11G2pSRzxmywW3CmQ9Uha3+M9zw3OV1b/S2Cm2hsd3Q2P2MImb7XP1kDbZW668/bs9UnHRA73ZZFYHgeonHizW/Wyp9am7wi/MI8UefXAueusyusqbIrS834MMFyRPZk1nKYOiDcc8mM3q3LzkmAzsO0S2gVdsy8Mr3dmgIvf5H7Y1B14beANLJ8QBTDm99qVapRZLzD8/A5JEphhG3Ya0oexlFE6arss6UCmltU5e5SGGKHv/SqM/JNGFUfwvs6eEfvpiyGp2oQWsY0bxpZg765unf6a3vGvHeT3rdZrg85MR/zsU7vPY3lHmRGaKX3e8UCFWu/9/v1+PFJuO7b64XT1yeHzFVWqHjOloNWlhk9ztL9WN9WDDj3+G7pOHaE3RBpUoHMOu+SqzbVAmXy1ipnBzTOabFU0SP0OHo8em/SXfGh4v+WY7lm/RzZcoONszYLy1gVkXH5wEwZoAVo4ot6FcQ/lZDQnTpk9WIm46tRoqVDdVN+NsTTtUeJxkIaaYaN24cHnjgAWzdujVye5TkqJSRMIwnnKyuOcGOEf30n/j3DWn45M/esFpCHO2bmqYbkXjsoUdj5bZXarFNb/OCk6ak4qCdjCPJzpq3topz0YKpkzR0Kh16L0x613m8KJ4xbpAVu422KYN4whAbivKtERN+iFWDZoqF3HhKJuypemTgqQ+d+G5J+BaNjFKEq3dhrGFkp6ZOP1e7MzZW1QX/+771bQPuf0uvo83J8OLxS/PRL0Lnn9Ax2Rlm9M/X1XEjBQ0iRr+DdR6edUgmTttPNxo2lAEX/asei5euNJSxxzozpTwZZw5ROvU4v7tDDJQ2Njbiqse34qvF+v3RA8y48KiMZmdXMPBzM9JMKpI8pMiKQb3lek+EHnuj+3tx5RHVMJt4Xplw1oOVWLbB2GnXUTf0qIL50UcfYfDgwZg2bRreeecdeL3GTFeIV1gjxIBeOGp0mG4w+xQ7BhTqP/NHv3jwyhehS0Ibtawn3nrocRFx52sOrNuqH9D9xptw4j7hVVgMh/c3km0VghFnyUgFSqtYiK+3O2Drg775lqikHnFyZz0b+7HFgqJ8C24+NQcpFq/yOj74dh1+XdW51zFYsSVGv7hIjmS/wGhBRWE6I7qTtstxkem/wdQrUhH3+mdrm5t3P3JBHkYPkByuWMHICn9yRv4j5TwMtR/nDadkY78ddOPzz80puH9eFmodxkkLY9ZLPOJvsxCKOB0N7Fue3Yj//axnMxUXABcflamcO6FA45LzgJB4Pfam7VOIW0/VW+E4G8047d5KrNmS2HZMSCPaySefjA8++AArVqzAbrvthmuvvRb9+/fHVVddhSVLlkRuL5MILmat1p4JsrQkK92Mm06xoyBLv/+fb1343/wQ6n9UewVjLgxplJiMuWvtoMHywFt1WLpB/2HZfPeCo7Y3RO+uMmq44W8dywmO6Zg7D7ep264jbSqKN6Awet5UOg2o4Ei12lipzbK/4LUnZcNioqFrwt//U9eh17FlI/auxJZsTeNKvKdv0sFD6fXuOiSYlkdjl83qO+O7pS5c9ngNfJoJNosPd8yyY/fRxkixTlY4PrCBerUjQoaeVxd5CgU6HO4/Nwdj++veofmr03Hv21SsNsZ11uDyxbEudfvUTRpzVVVVAaOmz37kwJs/Zat/52V4cNnRTMM1dWu+FkMvcXvsnTjV3px2Xe004dS/V2JTeeIae90qMqBxd9111+Gxxx5D3759VTonDb+pU6di4cKF4d/LJIJ54SmWpkbgYaw7mnNaFrLS9Ynn6Y8a8OWi4Op/+AqDzFcBF3wG3bVWcMJ/bF495i/Xf9QRRR5cfWJucyQylMV6NEiLohBLRwYJi+C5qItFtLa40KJ6JpXHsO/cxKE2XH5sphKGoEf+9lcdWLympt250bYRe1diS5RYZ41oPFNdp4updFcZlucUD1lntV6/rXbjr4+wwa4JZpMPN86w4/BdjJNincwwus94Nxfj4cSvrtid2kt7ZiqevLxAyfaTt77z4IGmdN9YU9cQf2mbzZj034UlBYzA07hbuXIlSkpK1N+Wxt7/fmzA/e/oi/XMVB+uOboGOwzJ6Fa7Kvpf4028RgiNsw7JwAVH6GM6S2lOu7c6YUob2hLyiLZu3TrceuutKgQ6a9YsHHPMMVi9erWq2zv88MNx/PHHR2ZPkwRGeJg+Fu7UFMr23zwzC2k2/X0f+a8TC1a447q9AmsPjN5Dj0beC5814NPf9Ampf54Hs6bUwARPtxfrkYJRDk5uye7J5Pcf0d+qFpKx9MrvOTYVFx6pex2djcDd/3Hjl8UbWxl7gRqxd5m2WBu7aGU4oDBPTxdhKv2vA2fa8o0enPVgNepdujAWDe6Tp+q/gxB7KMZUmGVWBn+4WxDQwcQU3e7QKzcVr1zfB4XZurHx+Pv1ePqj0Eslwg2Viqk2G5doJjXPr9jkUbXbTqcTvqa5kn95n3y6sBFXPslm2Lo65m0zrThyymBkZaZ2yxms+ehwDPN3EQzHpdPsmHWAbuxtKPNh1n1VIbV5SkhDb7/99sPYsWOxdOlS/N///R/WrFmDW265BYMGDUJ6ejquueYabNu2LXJ7myQwJckTgfrQoUVW3HByFmwWCl2YcN+bdVjaZf8fE7wRqofoKU6XXrBtZN74phFvf69HT3PTG3H21GqkWlobc6Eu1iNFbYMPffPZSy65DT3CxR4jRl2l90Wa/XdMxUl76xMPe0E9/qkdG7fVd9mIvbO0RS6c4rVuh+I8rN0MNb2uo0hBWzZs8+KsB2pQ23SIzzssDecdntmzzxLC7gzt38uiap7DWVbQ4NbQp0n1truwBcQr1/VCdpo+r979ep0S84kVPMdZb8wsiXiE83u1U0NlraZ+bwpqmJvmSv7lfTasv+j/quHTzLBaNMw5zY4j98xXaXpKPTXEr04Hn4WZVXF6zITQxpLrT7Zj+t66sbdysw9nPFCNWmdiGXshjWrHHnusSi175ZVXcPDBBwcshGfutNAzuMCkAGwkoHrhFcfbVYoK00Nve6UGa0s7zk3mdpQ4NiL1jT5Ded3a1tm9+2MDXv1Sn+Sz0z244OB6lT7b1pgLdbEeCfTolb5QEfT0PkYOjCBcctzeWdh/rC4IUuW04t63fKhuoTwYrGQ4YQoXr+dQ+8gZhYpar+rrGaq4QluYCUCDtyVbq3SP7tam9J3T9k/DFcc3FTcHUR8kRI88u57eXRWmWj2eC3RwUfm3pwwstODFa3ohs2mIv/5Zh4o4xQI6dFxxpkzd1tDjd6Dysso4aRLUKC4uVn8XrjHhvIer4PUxzV/DDSfbceye2+dW1uexHCaUDCnWMXN8iddjJoSGyWTCbafbsf94/f6S9V7Mur9KRcIThZBGtUsuuQT5+fmdv2GTt0XoPqp4OILrMIpcUG6YNLjNuPmFKmypCGzs8ecMlzBMOGG+Pj2VRqk9aFtn98HPTjzzsW7kZaZ4cMcZedhxTP8OjblQFuuRgH3FcjNMyIqh4qbR4KIvFj312sJz4i9H9cF+4/QoweZKOmjqut38nP45IxiwocJ0U4qwZHSzNq8lFrOeEeCHdYuc3EvK9eNy7B4pmH1K60heZ/VBQnShAMqQIgs8vvD01aNAEZ1c3RHuCMToAVY8cWkOUqyMOgIX/6sG3y6O/vlCA5YOvFBaCxgJzu/8femU9o93fkGNxRtM+MvD1XB7zUou/8rjMzFzP11N0Q9TVlPUe+j32zp3AsFt0tOMs7YQouPYvf/cLOw4wKHu/7HOhzNo7DUkhrEnVplRWyyY9ChLpNhvQgrOPEj3fNU2WHDDc1UorWxv0XF+oAfdaND45CRvlNTNlnV2C1bZ8MT7+qSenuLDrbPyVLPfWBtzncEURXrIuyNXn6ioWsUwtTrpKSm2FFw4rQBTdtBP+NVbvKpVR3cMNgqysA9dvMGFXk293t+qp9DLX+/yNRt5p91bhVWb9fv7TzDjzjPs7a6FjuqDhNg5YooLet5Xj9c359reOeFdDk0eYcOjF2QrMR+K+pz3SDV+XBZdY48iJvE8otMhw9pJjsXOxu1j1h9rPTjz/ipVu8zvd8kxmTj7kPZ1tLyGWQrD48DXb65kRkDnY5/Lrfc0FZILt6se109zYHx/PXvm97U+nPNgTbcdqkZCzmYDQo81b5Hu5XXUbmk4fi89N7myzoKbXnRga5W3vaFnwBo9pqOoJrAGOYP9dXa/rE3Faz/YVUA2LQW4eWY2hvQxiDXaCax1ycowyME0CFwg5GaZUFZjjPOfXvmLj7Zj11G6o4CtOu541RGUl7olrFtpmfoZL3BBT5s7HEqs9NZzfK10eFVNxopN+vHYZyzwyAW5sHCF2YZA9UFCbGFNcUf1lqFE85jJkN3Tus8A7DshFQ/+JRsmMCplwjn/qA5KBC1cMEU7XqN5hOmTSgk1w6wMMP7ObDVz+r0VcCqxJOCCI9NxQZNoVSD4uzJ1k+OkPc3UpaK5V9O6LcgjxC8ZGRlItZkx+9g67DxYT7X+ZZUH5zxU3crJEI/Iys6gaSlsiRCNOpoZ+6Zh2h5NErPVGm58gcbe9kWg2aARPQ76VOQKdwSqu/3sGKVbX9sXryojzwSb2YsbTsrEyP7GT/Tn5EmDOdnVNgMZA2MG2JCeqivXGQEaOX87NgPjBuj7s3i9V7VeCMXYYy0Sx5b6OJu8WDvX3ZYKbaHYAlUbz3ygBsuaelvuMQp46Dw76hw1AdMy29YH8b4QW+ic6pVt7naEmg4uLuIG97FGLFXvsF3ScN85dmXsNbpNauG4cFV0jD0asVbjT0EdQiO1KN+ispyYwbO8xItT/14OR6O+dD330HRcOq1zsaT0VLNyvDIFNDPN3OFYyUgfzweTAVoMCdEnpWl8HzK4GE9e3gu7jdTPgZ9XenDuQ9VxHdkTQ8+gsJdPJFM3/dBQoujAMbtvN/ZueLay2djTUzeNd4Lrxmd496sn/eyo/PXIuw1K3tlq9uLGmdkYN8h4KZqB4KKfHkxGIIXW0Phlg+Z6A5VjUQ1u9ow8jC1uMvbWhRbZszXVrMRTVI/fjSlc4TL0+H73v+lQhfdkn3E2PHKBHRvWre60Bs9fHyRGnnFgWjw7qnanPyTVHHvl0FiM7ML+kJ0tuOTQWmXsMd2Q9T9MP4wkTEnl4jQR1CPp4Npc7sOZD1Sgpl7PkDnjwDRceXzXUfX0FL0XsNaUzaCcxG2g04s91DZX+JRhHK5xRogvUprGd70vZj52HKSfLD+t8OD0OG69IIaeQclIi46RRWPGUefAKVMtOGo3faVf7rDgumcqlUCLUSN6kTgu3e1nRyPvobedyshjJO+mGdnYIU6MPMIUtvxsqc/riKx0syHq9FpC0YgbZ2439v5Y58Vdr9UFbeyxn97myvjpp8cFK43TcMjE19b7cOvLDqzfpn/3XYYDj16QBZ+7QWrw4hDWFk8calOOqvIQjL0ap0+JjQ3va1FZNJGE9ZxTRzvx1wNr9PsuE067txK/rY5cZM/t1W+sR4131m314v65TlTWmZszka47KTOojB6OlalN4wbT8ekUIEznpJOTa4maeh9G9rcgN1NvqyMthoRUmwkvXFOEnYfo1+iitV6cem81yuKwqboYegaFNXpMH+ioqW+4I1j0Ys/c19ps7LFm77pnqtRi0Jiqm+EXJu1OP7svF+lGHu1OKnzdcEo2dhgcP0aevyZBis87huIfRoxs+429CUP03Kzf13qCFmhhrQpr3uriJH2zrsGnfoOeQo/sjc/XNguvTB4GPHF5vkrvkhq8+M6AGTvQqoyarrzuTFXfUulV5xNfY0+P/DLIf24duEM9/rKfbuzVNdLYq8JPyyNj7Hm9ujp1vAuhr9zkwfXPVjWn5564TypunhmckUfoHMpI1zMh/PMcHVzVDk1lNVTUaijMNmNAoQUji63ox7pPQYDuEH3+miLsNUq/Rpdv1I29cCj9RhM5ow0KPYxUlIxkNK1tBKuxsRFnHJiO4/bU0zir6y247eU6LC/xGM7zzzV3uH2wwfSza1nDN29+I/7xjm7kcYHBmrwJQ+LLyGMEiN5OejqFjlN/mMIZaXGk7hp7152YiR0GmZu9jnNequ2ynoD1SLz0q+MkFaXS0fMUNHpiZz+/PZI3cbCGh/6ah4xU/dhJDV58Q4NtzECrcsgEOv8ZwSmv8aGs1qcW9ZOG21QtfDRoeW5dckIx5pzKujINDW4TznygCl//4YqIA4/XeISDlRFl4Wo3Zj9fg3qXHpY87YA01fMs1Np8irlwHOc8x3GEgiw8Pvz9eV70K7Co96SSa/9ecVzUKISdFKsJT15RpIQLedbN2Dc1LJkl0UQMPYMrTtEjFykCRbA42J26fzpOmdrUeqFewz1v1OG/P8Sm4WtH0KMSCTWxzlog+COgpVtK8cT/yvDUR/Xq8VSrFzfOyMT4ODPyCIUI2Hw4Eeo4IoV/AWDUJuM09m44OQvjBuj79+dGRq1quqzBY8ZAabXx0zd5rdfU9aw+b3OFF9c/V4NNFfox2XcHM849PKvde0oNXnzD63TUACsaXD5Vc0XDThl3NT5U1PjQO9eEHYfYMKIfBT6iO+a1PLdO2Tcd956dpfq/UY3zvEdq8NEv4Z1jm3y4cdsy54vfG3H7Kw64PGZV23jy1FQlvtKd78P0e6b4cp6jCicdAXwb1ncO7mNGXlZ8HiMhejWid55hx8vX5OD0A+NPbVkMPQPDSIsngg73ziJYJ+yThr8eka4mIo/PhKuecuD//ldnmEUhaw+inZLCCKjX68PcnzPxyR96Y9bMVA/uPCMnrmryWsKG4FStEzqHnl+qvhnl/A9k7N00MxeTh+v3127VVPSKC9yOoAAP05coDmFk9FojTTm+usOKjR5c+0wNyvSMORyxSwr+epRdeWWlKXLiUZRnwY5DbRjQy4z+BfqtuMCMCUNtqpF5YY454jV5wXDMHml4+K/ZSvGY5RGX/KsG73wfXF14MPA9jTladQ7H2LnfNeDh/9bDp5lgMWv423GZ2Hd8ihKS6g6FOSYMbmpz1CfPrFLB6egqyDZhZH9bWFq2CImNyWTCpBHxuc6TFZ6Boccx0kIonUWw9h1vxplTapFi0QsFH3q7Htc8XauMg1jjURG96H6m1ZaKV7/PwvcrdCMvN8ODe87Ow5Ci+Ez1UFLSJj2dReicXLsJ2em6J9io0HC55sQc7DNO/z03lvtw/bO1SsggEDRyOL7UOo2dvsk+ntzD7kTwWf80+/la1Nbrrz1uDyvOOjhdCSdZmtLjhcQj127G8P7WVjcaeEaLbh28cyoeu4TGnk8ZNXSo/vt9CntpYYnoGezrBjUnPfmhEy98phu8GanAzTPs2GtsilLO7O71yt/db9wzjZN11zmZ+hggCImOGHoGhlLAkUzdDCaCNaTQhXP2cyA3Xa8hePt7F856oDrmMrOeKE9iVGi7/dUG/LpOr18s7mXCvefko19+/K4U6xt10R/pn9c1XBD0KzDDYWBDz7+fl07LVlErwmbv1z1Tg9/XBBZ8oIec6dlGj+h151L/8OdG3P2GA26vSaV+nXtIKk6amqpUhhsa3aqXnhh6QqyZskMKnr0iD2k2fU69700nZj/HOvDt1yVbfVRVVQVs+dERrEGLp5AeU+Pveb0G7y/Qx6r8LBPumJWlxM1oADKDJxy1UempJhRkmVWaryAkA3KmGxiVphBDh5NSnTSb0SfHi4dOr8bIvvpENH+5B9PvqMT6DiIF0aC+wQ1nvSPkxubdoaTMi6ufqsHSDfr3H1ak4Y7Ts6JWyB/JiZXfwQhpTPFAYY5FGcVGaZ7eEYx8MWp16n66U4KCD2wn8Plv7ReJTId0NBj7+6ishhAWrBTjeObjejz+fn1TX0sfrjkhEwfuZG1WGV6/YSPM8BguwiMkJ7uOsuGNG/JRYNevxTe+ceHcf9SoaDuNO/Z17Ky/Y0eqm/Fi522q8OKqJ6vw0wp9j/vlA3efkYVBvS3N38ViCV8EfkRThFcQkgE50w0MB7ZYjtRM5+zXrxhFfQoxecdh+M+NhTh4Jz1SQOW6Y2+twLeLO550uuOFDAa+37r1G1G+bVvIjc1DhX2Ornm6Blur9fu7jzLh9lm5yMqI/0uH0WKmOAnB18ENLbKgtkFTHmYjQwPmuL3S8bdjM2BpSgt75F0nXvysvlWbCBM82FbhQENDo6FTN4N1eHFhPOclB979Uf8+FF64Y1Y2dh2V0kplmLW28ISvHkoQesqoYiveuaUXRhfr1sx3S904/vZyrCqp61Z/R7aRYCzb6CxY4cbVT9ViU4W+rxMGm3H3mdmqkX3LDB7WMoarJyDH8nhTThSE7iKrPANj4a8T47HIYrYiJ8eulMLYU+Thv2bh7IP1SEFtgwlnPliDu15zwNWmUXN3vZDBUFdXB4/Xp4RiQmlsHgpcyP/nmwbc9kod6l36j3DC3jZcNT1bTRLxDtOCmLrGfmpC8BTmmtUxM2KrhUDsPS4FN56SgfSmtLC3vmvEHa/WqabhdJBs2VyCLaVlWPrnqrA7ZMKFqgnWuj5P15R6ccWTNap5PCnO9+KeM+3Ke99WZdgHM7Kz9VpbQTAKvXPNePW6XOw7Xq+ZX7vVhNMedGNxiT7nshcfe/IZVbAsWDj2VNXU4MXPHLjztbpmQahj90jBjTOy2vU2pNHKUhaJwAtC6Bh0GBCISlOIceCAzn9ri9Q+pvldc2IW7jnLjhSLvnh85uMGTL+zSjU29UOvY3e8kMGQls6JjoX1wTc2DwXK0t/2sgMvf9Gg98izApdPS8cp+wbfpNXosC6LapusVxBCq4HjcXMavFav5YLKjk24+OAq9M7WDaCFqz244t9V+HN9Pczwwes1KUdNOK/RcOJyNzm9AvSyJBSuoDT9tU9vV9bcbaQJfz8nH33yLAFVhnv36Qd7enwqqAmJDdPD/3VxNk7bXzfuaurNuOk/ufhwaRGGDh2mnK7BwF5xRszK53W7aNlG3PpyPd76Tl8zpKUAVx2fgdMOYAaCqd01ztRNOpoFQQid+JQLTBKUIhSzN5U6YmwGOaV0FcAdcOyeadhpmA1/fbgcq0rNWLbBi2Nvq8L1J2Xi5KlpyutI7yONvFC8kMFgsaagqF8/WNGILHt6QMXQ7rJ4nQcPvFWLyjr9eBflmXDVdDuGNEkzJwqMkvTJlcu/O7CIf/222NWnhoI/XbEwG8rYe/vXfPy8yoSyWjNufdWDoyelYWSRC14tvNdoOGlk9NncupclvxOdPLm9ivHEB278+CcXhLxmNZy6X5oanwKNmRwrbHYb6r1e6R0pGHruZ2SL7SBueVEXFHr8Q2BJSQPuPcemesIFlbVhMFc+1zKfLXTiuU+z0ODW59S+uV5ce1KuamLf9hrXTGakZvVHitWKtBSDfRlBiBPkyjF4RI835qezrobpVtGGEa2OJIjZl+a/cwr1JqZckLmBm1+swxkPVGNLtQXDhw9HcXGx+tvWC9mT+j0GClVKaXbgthDdNXye+diJG1/YbuTtMcqE+8/JTjgjr75RU15jyksLocN2FLwuW6riGZWW6YqM3l41PROn7Z+mVCg9PjPe+smOuT/nIC1nUNCRgkjX4Lal0a2nGZOWdXbLN1lwxROOJiNPV+mbc6pd1SYG4xiTHnqC0Tlhn3S8OTsP/Qv08/nrxW4cesM2fLqwMbgWRAZa4VXU+nD3G3V4/AOt2cjbdVg97jk7q9nIa3uNezw+eFyNqGvUJKInCN3EpBm1A3AP4UQf71+Nxt0PS91qgGtwaah2+jCwMLpRGDZcHlBoxrC+nX/uD8tcuOSfFaiq17dLtWq47NhMzDowvd2Cyl+/54/2BTIEO4O9zH7804XC7PD0RVq6wYN/zXOipEyfXKjSd9bBGThkUmrCpGq2ZFuNV6mZDY3T/n9GgCI9NU4tLiS66SHn4olGn98x8sdaNx56uw4VDn2brHSKlmTi0MnBpUH39BoO5v2ZSsoo4y+r9JRxOif4XZatKMF/f07Dz2u319hNHm7CxUdnKZGkQN+3LaVVXuw83BYXv58gUOn32mcc+OiX7U6VwyeZMef0XORkBj6Hf1jqar5uYgnr3b/43YVnPnKirlHfF3uqF2ceZMPeO7TPyGkZ0Wv0mlFU1B8wW5VYTZ/cxHK6CkI07B0x9AyOf7CmBDqHSKZsRLPJ57ZqH4YWmTGojzWoXnO3PF+B/y3Y/tiYARZcc2Im9hyzfRHIKABFWvww6pebmxv0PlFZb/5yd48Hfe7vc5848fnv22sLh/cz45KjM1HcKzEnFDoPymp9mDzc1uECQeia8hoffl3lVuIJ3WnkbQTqGnx44oN6fPXHdtXavUZruOPMfPQrsLQzuFoacj29hoM1IjWYUe4dhKyMFKRYgc9+c+G5T+rhaNJfslnolMnEwTunqMmubWona/ICGXs09HYbZWsn+iAIRoULubnfNShVWb9AWE66B3NOz8Nhk/Xzv6Wi8g/L3Co9OZa1bX+WePDkh3VYtXn7InSfcTacfUg6sjtRrvY7azxIRUaqValDsx1CZ68RhGTFJIZefPPLSpdKiXQ2akoOOCsturLAW6u8GFlsDWj4dLQI/HGZC1c/WY3NVdv3c6+xNlx+bAYmDLH1OBpAsZSfV3CR3T1jjNHR/81vwFvf1qPBrU8cVouGk6akY9oeqVE1pKMNG92z8H3SCFtCRiujBRdSFDWhKEu8t6h4/6dGvPSFE84mb7vN4lXp2GccmIpNG1YFvE57eg13NHa0NSIpKLG5vi/K69Lx8udOrC7dvt3EIcD5R2QrY9sPBRzYJ88PhVey7FntFPyYHbHbKF1JWBDiiS2VXlzzVC2+X7bdQTlxqAU3nGzHjkN1pwbTymnoZaaxwYKnywh3d+gscr61yoeXPq9XqaZ+stO8OP/ILOw+OvhxoqrOh9xMk2qaLghCYMTQi3OWrHdjU5kPKSls/Iuoe+jo+R4zwNrs4ffT1UKPdTX/9z8nnvqgDi7v9oXYlB1suPCoDIwboHW40Asm13/hajd654Rm6HGfPv7VpbyilY7tHsaJQ8z4y+GZKGqh0JeIVDr01NSxA61x3+zdCHAx8/sad9yfN7zG++aZ8e8P6vHeT9tTwwqygOm7VGP/sfVKebZt1K4zY62z57saO1o+v2hDKp7/Ng+rtmx/X9binXNIuorItXVWBBPRY42q26dhj9Hi7BDiN7rH9j/3vOFUKeR+DpjgwxXT85Vjlg7XzDQvNm0s6TLCHSodXWdsfP7WNw348g832KqSsI/n0bulYvo+GUgPce3CzIm+BWaMbGqRIghCe8TQi3OYXkijhgIQHg8HeJPy0kUzojd2kLXdYjbY1K2yah/uerUc8xawyfR242L8YCtO3T8Nh01ODdlw5Xv+vjZ4Q491hp//1oh3f2TK1/Z96J+vYdZBdkwabk346BYXBlurfUopNRjFNqFr6DX/abkbNosprttUbK32qvOC9WqstaXK3+ot24WfMlMacfSkBlx0fDEKc3XJ967ozJjrauxgevGHC5wqRfPX1dvfM8XKBWMapu2Z3mndUVc1eswIyMowqewCQYhnWMbw8H+deOmzenh826+JXYd7sc8EO3YobkDZtm2dRri79bktIucsDSpz9cZni8wq04Zt2v1MHg5Vp9+/V3DjRlvoTGM5xcDeYugJQkIZeps3b8Z5552HBQsWqH//+uuvmDhxYtKJsbT0anHxU1LuRWMjdMEBr6bUJyPdvJuLwB0G2VqlR3UndWtTuRf3vFqGj34zw9tiQkpPAfbbMUUZfFN2SAlqwcwIxB9rPZ3W6DF6x0nn41/q8fta1vpsf9+++WZM3ztNRRcTOU2zJfUuTRkmu46yidpgGFm9xYN1pV4UhhhdNgoqjbHOh91Gb09jZFrqOz804v4367C1evsYajV7MXUcMOuQPOwysvNrpzNjLtDYYbPZsHKTF29/z5RqJ8prt483jAgcOikV0/dOD0tdKeuOB/cxY4iIEQkGoavoeFew3ctdr9Xhs4WNrea6gb182HGAAzsNciM70xS2iJ7L7cL8RZuxcK0NC9eloqKu9fi30xAfpo6qRf88d48iiZzrmYHSNz8+x1dBiAZxaeiVlpbizTffxOTJk7HbbrslvaHnh0p5VQ69JohRLaYf9Q1z2hjVvVoKFDCiR893rxxzWCYn1he88Gk9Xvm8Do7G1vueZoNSwqMxwoXkhCHWgIbs5govlqxvbegxl3/tFi9Wl3qxcFUj/izR4G7T6mxgL+C4vTNUvWCyGHgt010Lc0wYM1CiGOH2qC9Y6UZupllF9uIN1v7SibR7gDRGOgb++0Mj/m+eExu2tW7tkpsJ7D7Ci4Mm52CXUbZ2Ef9g0jM3bavD8i0pmL9cwye/OLGpsvUYw8yFg3ZKweQRVowN43nLxeO4AFkKghALwqlgS8fTv/7HFOzGVvOfCT4MLHBh19GZmDg8HUOLLCE7iekQWlbiwR/rPPh1hQubKls/T7XqfcZZcMyeduSlO7uslQ0Grj/GD7EpIRZBEBLI0Gv7BZI9oudn+UYPtlT4VOodFyscprsrSNJRFIw59v0LLM3NhBnRmzg0/Ol+7Fv3yS8NeOmTCixca4HbFzg1gwtKfsde2WYU5pqRnW5CtVNTUU6PV09t3VLpa1Vz15KMVL0u8ICJqWpyS/QUzY6QxW3kWLrejdIqTZ2j8SjOk2vvXOyAEb7vlrrw/KcN+OYPt+rr2ZbcDDfGDkrD8H42FGab0CvHgjSbFy5XI1JTU1XfrKo6DZvK3VhZ0qhSQ9lrMxAj+wEHT0rH6QdQet0U1lYqRForCEYiEgq260o9eOhtp0otbxmV92M2aeiT7VbZLX0LUtErx6Yi+pz3GeV3een05TzrxdYqD0rK6SwMPMeO7G/B3uNSMHUHm8o2IsGq3waTujlxmFXKDQShB/aOJD7HEalW1q9Etjl6ms0El1trNvRIJIJffP/Dd03H4bv2VyqYn//uwgc/N+LXFY3Y0kKts6qONy+Wb2wTnuuEArsPk0akYqfhNlV71PK7kGD6bEUTXqA0XhnBiERUiBEbrpHtUaztTCb697JgS5VbpVPHW1Sv3q1hUBfpkGzvsve4VHWjoM+HPzeqiMHPKzzNUYMqpw3fLfWqW4BPaXOfx8jSanwZPcCMXUam4Ng9UjF20PZrkmMRm9PTuLRZwnMtWMyRT3kXhGBhRgwjef6IHu/3lMJcC47ePRVnHJSGFRt9+H6ZGwtXubGhqVesTzNhc3UKNlcDWMNrNvj5lUbi0D4adhuTjr3HpqBPgMg451Uadz2dZzUTx9RuvVQQhFgZekceeSTmzZvX4fNr1qzB4MGDQ37fW265BXPmzEEiQ++2hiarnesUTTcSwuXppkMgNcWkJM23P8iFHiIKPYms0eONbNrWgHe+2ojlm0zYVq3Bbc6Bo8GCsmq3SjXjQo3fOCtdQ0FOqvL2De5jwZA+FvW3M7n7cHkawwUXnqwZYqSSUUpGhdhgno/Tm8nvEqpSWVvomaVEdTRFfJIJ9nbql2/BxnJvyEqwsYRp2pmpppCyAijYcvLUdHWjEUZRpK//cGPxOo+qE9pU7ms9frSBbUz65JrQv8CK4f2smDzSqlKp8+yB98FiASwmk6pHbmEbdhu3R3cypcbevyMICqZpMl2zJzV6beEcyXmb4m2jB1jVDQelqznmz40eVQ+7ZotXlVKo7JgWdfMtyUz1Id9uwuCiFAzqY1FZMaOLrUEJqHFetdltPXPKmDhmyLwlCD0h6qmbNTU1Kie9I/Lz85VXy4+kbrZOOVq81qMMG/aBIjkZumEQroUfbca6Rq15wcoc+V1H22BPMxsmlaWkzIvlJZ5upa0G02cr0vCS80tiN7g19Ms3Y1hfK9aWetViuU+uGdtqfMhKNysjraf1CZzMdxgsNUmRhA4Iiv8wIh4PCpxMzyqr9WGHMNeq8dzm+ME0L9b0KANNOWWYzmlWUWVGCENh/p+usKkNs5Y3WxQ3hQSnZR+9thktbfFpGuob9dINllRwPZFipVBadHv2BvoOtQ16/XBX30EQkhmT0VI3s7Ozo/2RCYO1aYHE2jSmiHERxVROpjaFA54nZov+1z8B0PAzR7muratUFh6G7nonmEbCSJ4/osf70YKTKL2nPJyMsPFvWqpJGXkpNnpNLait92Ej6zDtJlU/8WdJJ+GRIDyi1XWaMj7y47ypt9Gh3P+g3maVYpyeauyoHicEthwZUGhRToVwTzg05uy8rArDcxyYZlnXwCveFJZrsFe2sX8fQQhHRI83v6OlMzi/Z6bp4kdGguna7B3MmyAI3cewNXrM7fbDCCDvM6WhZbQv2VCpGPR0ebl4Bxo922v2aJT11CBjjZ7NRANEU4tBZfgpQw+GSmXhcejuLoWrdqA70OgaUGhWC01KXXMi5u/n91by74j+VhRksUmsvhhdvUX3bHbHs8rFPEUsigstypAUIktRvgWbK3xK4CRHGfLGPOYNLt0wHRIn4kQ09Hjt9BQ1pgGqJ6kgJDKMmnPe5pwer3hZ82zVv4sgCN3HsFZTenq6uhG2WOC/v/rqKyQzfs8W60wy0syqzoRRGy5gNlfqC8yewEmB75li0ev0eN/EXP8YjLM07piuGaheoaetEWjcMV0zmkYefyd282M/IKaw0ajj92ibksJ6r8FFelsJ3rLTzait13/jUPvm+Q1HaZAeHXi8WXdGR0Rplc+wqr9MMy3I1s/BeIBjUjCRiWAM3HSb1KoKyQGNJM478UqDm5kvhl2iCkLcYNiInlEXSbHEYtG9dEw/YtsAj9ekFm2s42INTGOb0keVetmUThW0GIuqMdKao0hmsKYGhoKRsM4wmqomobHG9EnWB4UC0zfrGrzKcGBqDev2goE1nCP6WuKiXiyRoAE1eaRNKdw5GvTr0mh4fJoSVYkXOCbRSdJT6PzonWtOuh6aQmLTUT9bzt9UtI5XaKR2JqwmCEJwyFUUZxE9qtAx3Y/qmEzH87LfTSNVFc3KsGs5SJZW+pSB4B/sVZN1b8cDP51/NKJYhM06QJW6GaOIXmd0VqPnV9Wk4Ar/8r4RYKE766FCTZWjdPVuo9k83qYMfC5Wu4LGf5rVpFIJhejDSBnr3/S6MmPhby8QT+mL4RKb4tiXlxU/31sQgm22TvEy/m0pdEdDL14DerxWqT1gREeZIMQbYujFETTyKKwxsNCsPPKs0+PCn+lIeXZTq7o1qjYW9zJjRD82KvahliqdJj361xFMj2LPGkaB/IYe39RoOfKdRRgZyaPQCuHflrWesUIZ4Oxj181JiwtdRiIGFlpUg/jOouD1jVT09GFQH6b2Gut3S7bIHiOwVLI1Ev7of3rPFdyjRjjEpqgySgM32Ii4IMQDjORRtIzwL+/7sQUpxmJEnMyGyDAF1cZBEITOkVkvjmDK0bhBNowqtqqoAT12jPJQ2EMfEE2t+s8M7G3FwN4W9Mkzo8Kh92jj9h2jqfRQvpdX05SBYkTFK78YS6D0Xr+qJom2qmaka4PYToK/B9tssB6Tv09FrU/93owYMnpLT2j/AnPAJrZC9OD1SRVOpm8aJQ2d5wkbpA8otMaFCEtLQ6+nh5AOkOw4M3AFIViFatJWoZo1evEa0eN81ivLgIsPQYhDDFujJwSmpbFAw4+DeX6WSUXi/M3UGY3z98Lhgm5Qb4vy7FEIhMZARwqdfLW/QSmfVuIsBjxD2ECZc5tKNTUZR1Wzs1RK1tr1tDaIv/3QvhZ4fSas2uxBlUNPtWXDdTK8rwX9e1li2vtIaG2Yl5T5UO3UG9bHmiqHht7ZVH2N/b6EAscjXUGw+8rCNHB5bcSTgSsIPVGotlo7761l1Hp2wr1OTxVDTxDCgQGX8UIonu7MNKaI6U3TGe2h156GHo08/4KfSo7jB+v/pqy6Lq/e/v1UTNCsewI50tI4DFd9TDihcdNs6AV4nhOWzW6MSYuiNpSJZjQ1HDAaw8m7qs6MLRVshG7D5nIv8rLMGNRHFrJGgtcOVTgXrnYrD3UsU2kZ6WWUnlF+o6VidwXHMh47ik2lBxi3uoIGIte7OaLgJyQgNO4CqlN30W/WX8/u7ylLB6mRjD2q7QqC0HPE0ItzQ4/NiRnp4dqNESMaeaxHYX57S/yLO0rtb6nwKYMvEPSY00Ck47vBraE4w2zQ1E29YXxAS89AlNf6VL8yRl3DBaMSA3pZ1G/OSGHvHBr6waurCtGD19uwIgtWbPJ2S4ynJ9C4ZH0uP9HtZSq3OS5V7GgwF+aYsbHM1y0V2bp6TandirCDkEywDKMzAtWzG8FByvUL5zOpMReE8CCGXhxDA49pmf5+WNYmRU4ae1TODAQFQTrqraNSNxnRs+iLK2cjJf2NtzDUjdqe1+1EI4rC6Gj/gvBH2ij2kWvXe/F11W5CiC39CvSUabbYCLW9Rk+odPgwuI9FRfQdDT4UxXHdJg3mdVu93XptnUvD6N6WuItkCkJP4LzQ2Rnvr2f3R/SMUM/u7xNMZzMj+YIg9By5lOIYLvILWtTbpKYADY2aMuQ68nwrYYMW97dUepWCJ71n6j+TPsjS2KMBacQ+bFyw6TU7MDQut6YM7kiloEg/sPiA19OQIit+X+NWPSptUUiHrq3Xo/ZUamUblt5xrrvFDAWVvhliCizFp6g+mGePXyNXELqD8mt0cqkYsZ7df83SIS0ZKoIQHuJ79hdakZZihoeZGMpYC3xwuMj0B5dUfz2T3qJBh2IH+r9o4FF906gqdUpRzOCWXqNbr4+UCUugAAqNrvIaXxfKtz2DTh46bxjVH1pkVkZeIkCnE1NfO2svEojqOp8Soeqp4q0gxBsq66WLbWjcZdmzDGPk+SN68dTnUxCMjkT0Egj21WMDdWhMewg8UCp1zqbRnw2d8zLNqHVqrVI3/YYeUyeMmu7E1FJ6942euhnNVD3BuNDYZxqlx6cplVSXW+/pFm4DpJLKmrlmjGYLlgQx8vz062XG5gqvMpQ7Gt9awvGBwxfVNgUh2eDczaukJ2q1sVDlpGhUpgEziQQhXhFDL4FgShMHST39MvA2LdU5aYhQwpiCDVrT6/zRJxools46k8cYGqQGD+gppOGr0DKFc8wAG4b00VBW48OfGzwqCt/TFFxeu2zhQMOGDhq24Eg0I4/Y08zKaFtb6g2q3rCyzoehRRLNE5ITlmkwS5x6K+Zu+DpiqcqZiOOXIMQKMfQSCHq5Ga2jkZfSQR0Qn+PCkg2EOZjm2U3YUqEbTX6RE2J04QamoBo5dVM1rTd3LIojJC80/vvlm1FWY1a97djqhD4Vf9/LUBXqymp9qhn4qGKbctAkslrdgEILKmp9qHL4OlUQdbBGMcWkhJAEIRnhfM6oXnenyViocnLe5H6Lg1QQwodxQzZCyFCYZWR/C+yputx+hxE9CxdCLHhm+phJpWwqQ4/96eJkjWhljZ5x7TxU12mq9YX0AhICwQUYa/boDHD7NOV42VqtR9Y7g1F4Z6Om0q5p8DAy2L/AjInDbKoFQSIbeYTfb0R/K1xercNax1qnTzVIZw/DRD8egtARflE11rx1B78qJ4mWKqfLo1/jLEMRBCE8SEQvgVD91QotKMrvvLaO6V2sEyqw660ZGOVjzZBfdTMe4ATW5Gw0HFyEszhiZHH8NacWotsyYPJIm3IGcIGzZL1HtWGgCi7PIRoy/uvRYtKdBjTyMpr6ZtKx0yfXqno0JtN5xuPDtjKrt3hR1KY3IcVXmL4+YbBNtSARhGSGNcBM6+680YJxVDmZfs6shGQazwQh0oihl2Bw0dNV/5k0m0lFxNgjj0Ye0yC5qGyZuml0GJnUutQUiw3sWcbIKhU3BaEz/ClKNOLGDrRi9RaPcsIwLbF/gVUZelTHdTZF/MYMtKBfgQzbA3pZVG0xj0lupln1D+V1l2o1YYdBNmVEC0Kyk5luQnlN9+dJGnfRbKJOh3OOCJgJQliRFUMSkp6qG3uM7NEwZL8tLi5VpCBOPGncTSNGH1ljwP1i1EEQQoEpS1TLHNIncI3K0CItbq7PSMP6Yhp0KzZ6VJo0M8yKCywoLrSo8UwQBL1GnBHueIHOWwrECYIQPsTQS0KYrsmUDn+PPP67pIxKm4gbjLrgZeSFwhjSt0voDnS8pKXE1zkfS8N4h8E23bkix0cQ2hFMGxKjoOqTTTROY70ngpBYiOskCUlNMSnhBv/CkbUsqSm6HHO8oPZVM6ah1ydPmqQLQrSgirAYwYLQHn8ZR1ciT0aAdcpUC+f6RBCE8CERvSSEaYUtUwtzM03on2+Gm83W4wTV+N1g84HqRah6EIr/RBAEQYh9ijPr8D0+fc40Mi63hsz0+IpCCkI8ICtSQaWLDextVZGoeJKO5nzAPmJGocGt11ZJ2qYgCIJghIgehcs83WyxEO35My8zftYgghAvyFUlKGic9Mk1uMuvBUot1GqCx0BRSPZCo9ofJ1ZBEARBiCVKbC3FpPpvGh2fpiklcEEQwotcVULc1uXQW2mkiB4n07wsMfIEQRAE4zhxu9s0PaplDyYgIzXWeyIIiYcYekLcQhl1o0T0/G0VJG1TEARBMApsm2T0FguNbqgemIHaygiC0DPE0BPiFvYBNIqATIMLyEw1qZsgCIIgGAEaUEaHatU5mSYpexCECCCGnhC30PvHvH4jUO/S6/NYEyEIgiAIRiDFZsxWRH44h7s8Gvrmx49GgCDEE2LoCXGLzWJS7QyMkrqZI4phgiAIgoFguwKLWZ+jjIijXlMtnvLsRpnNBSGxEENPiG9PpQHgBMre81KfJwiCIBiJlCaFaqMKsjAbpl+BBWZOooIghB0x9IS4juiZDeCpZFsFGnmiGCYIgiAYCRpQaSm6KrRREREWQYgcYugJcYvqpcdmsDEWZKlr1FCUJ/V5giAIgvHITDUbMqKn2ioYKDtHEBIRMfSEuIWNyTlBuD1azNsq5NnlUhIEQRCMR0aasXrO+nF59LTSeFAGFYR4RVanQlwT6156dQ0acjNMsKfLRCUIgiAYj4xUsyGFN+mkZVopjT1BECKDGHpC3Bt6seyl1+jW0CtH0jYFQRAE486TVrPxonqM6NnTZRkqCJFErjAhrklPMUGLoa+SOjAyUQmCIAhGhVGzjDQTGlzGMvRoeNrTYr0XgpDYGNLQmzdvHqZMmYK8vDz07t0b06dPR0lJSax3SzAgTPmIVc90TlL0ktJbKgiCIAhGxGRinzozGlwwFJy601IMuQwVhITBkFdYdXU1rrnmGmzYsAFr1qxBdnY2TjzxxFjvlmDQHkGx6ppO72h6qgmpohgmCIIgGJicTHPMWxG1rc9jI/f01FjviSAkNiaN+rYG5/fff8dOO+2ExsZGWK1c2QfnwYqDryaEwdj68U8XcjLMSoUzmpTV+NC/wIwR/YM7JwVBEAQhVsJh8/90IT/LDIsBmpOX1/jQO9eEMQPFUyoIPaEre8eQEb22fPnllxgzZkzQRp6QXBG9WPXSo3c0OzP2E6YgCIIgdEZGql5mYIT0Tc6dHk1D33xLrHdFEBKeqBt6Rx55pLI+O7qtXbu21fa//vorbrzxRjz44IOdvu8tt9zS6n2E5MBsNiEtNfq99BhJTLGakJsZF74SQRAEIYnhuojRvHoDCLLQ2MxMMSFHHKWCkHipmzU1NXC5OnYp5efnw2zWF8+LFi3CQQcdhPvuuw+nnnpqSJ8jqZvJw6rNHmzY6lNtDqLFtmovBhRaMLyfRJkFQRAE41Na5cUfaz3okxvbSFpFLdM2zRg9QOZPQegpXdk7Ub/KKKwSDDTyDjzwQNx9990hG3lCcpGZZoI3iv4Kpp3w0/rkSjRPEARBiJ+5kn50zmGxrNNzezVkZ0jmlSBEA0OuVBcvXqyMvNtvvx1nnnlmrHdHiINeetGcMmqdGgqyzLCny0QlCIIgxAcZKSak24xRp0fFakEQktTQY6rmtm3bcPnll8Nutzff1q9fH+tdEwxq6FmtpqjV6TV6NBTlm6UWVBAEQYirmvaC7NjW6TGaZ7Xo87YgCJEnLtordAep0UsuFix3KeVNe3pkfRf1jRpcHg27jLIpMRZBEARBiBe2VvmwaI0bffJiU6fnqPep9NFdRtrEWSoIYSAh2isIQjDNYKORjuJo8KFvgVmMPEEQBCHuYMmBxaLX6cUCR4OGojzJiBGEaCGGnpAQMB3Fp2kRnbz8IiyF2XLZCIIgCPFHeoouysLslGhT6/QpEZYi6Z8nCFFDVqxCQpBnN6Ew14wqR+QmLxFhEQRBEOI9zUuv04v+ZztdGgb2tkhGjCBEETH0hISZvPoXWOCOYERPRFgEQRCEeCc7Xc+AiSYUS6MIS06GLDsFIZrIFSckDGlU32zqERRuKMBis8okJQiCIMQ3GWkmWCI0V3ZEXYOGPLtZ2ioIQpQRQ09IGNJsUCkhLk/439tRr6FXtlkZk4IgCIIQz3V6Ganspxc9Q6/BraF3jiw5BSHayFUnJFSPICqKudzhnbwa3Zrq/VOYExs5akEQBEEIZ6lDfpYZ9Y3ROabORg1pNhNy7bLkFIRoI1edkFBkp4c3osfUlkqHDyP6WdArW6J5giAIQvyTm2mGJwqpm+zvVeP0YUiRZMQIQiwQQ09IKNLTTNCbIIQvZTM/y4QBhRZp7ioIgiAkBNmZJhVli3T6JvvbMk00Vg3aBSHZEUNPSCg4cYXRzkO9S0O/fDHyBEEQhMSB9ey9c82orY+woeemCIsJVotkxAhCLBBDT0go0lNNSLWZlMJXOJQ2U2yQugJBEAQh4eiVY1blCUyvjBScR3MyZakpCLFCrj4hoaCXkrUANfW+HvcJYtpmQZbUFQiCIAiJR3aGqUl9M3KfYTLpDlhBEGKDGHpCwsFagKI8M7ZW+ZQ3sbtQabMgWy4RQRAEIfFgOmVhjjksGTAdzaFskk5jUhCE2CCrWCHhsJhNGDPAiqFFFlTU+rr1HkxnMZug2jUIgiAIQiLCNgueCKVuUuglI0UvpxAEITaIoSckrKeyuJcF6Skm1cMnVPgaGnmZ4okUBEEQEjh9Mz0C6pus+2OksChflpmCEEvkChQSlhQb2yLo9XrBRvE2lnuxrdqLukYNfXLN0lJBEARBSFhsVpMSZWFNejipdOitiYqkrYIgxBQx9ISEpleOBTYz4A6iVq++UZeB7ldgwbgBFtU7TxAEQRASmV7Z4U3f5HzLZuxDiqzSVkEQYowYekJCwyJwCqoE0yuo3gVVmD6q2Iq+BVaJ5gmCIAhJk75JZ2c4qHD4UFxgQZ5dlpiCEGvkKhQSnt65lqDUN5m6mZ0hl4QgCIKQXOmb/QrMqHb6lFJmT6iu8ykH68DekhEjCEZAVrVCwpNrNymP5bbq9r31WDBeWuXF5kqvao4uKpuCIAhCsjGotwWD+1hQVu3rdgN1GomNHk1lxaSliNKmIBgBa6x3QBCi0UR9h8E2LNvgQVmND1azCZlpJpTXemGCXohekGVSqZsiAy0IgiAkG2azSRl7VQ4fqp0acjNDN9RqnbqIGVs2CIJgDMTQE5ICppLsONSqJqIl62nweTGqvxUZaWbkZEqfH0EQBCG5YQonBVQWrnLDm66pnrShwBKJ3rmyrBQEIyFXpJA0cNJiGueYgVaVnjKgtyXkiUwQBEEQEhXVEiHfjLJqDQXZwc+P9S4NaTaTcpwKgmAcJL4uJB1UAhvR3ypGniAIgiC0wGRi/1kLNGhodAdXq8ftqup86N/LrEolBEEwDmLoCYIgCIIgCAqqTw/pY1FtEqhG3VXPvEqHDyP7WVSNnyAIxkJSNwVBEARBEIRmGNVzujRsLPehT465XV9ZKlhXOXSVTRqFbKfQdhtBEGKPSeuujq7B4YCToF9NEARBEAQholBc5Y+1bpTVUJgFsFl04bK0FKDSoal6PPbf65VtllIIQTCovSOGniAIgiAIgtAOZ6OmmqBzHVnj1FDj9KG2QUOqxYSdhttUqyJBEGKHGHqCIAiCIAhCj2HkoLpOjx7k2kXmQRBijRh6giAIgiAIgiAISWboiTtGEARBEARBEAQhwRBDTxAEQRAEQRAEIcEQQ08QBEEQBEEQBCHBMKSh98svv2DSpEnIz89Hbm4u9txzT3z11Vex3i1BEARBEARBEIS4wJDtFcrLy+FwODBw4EB1f+7cuZg1axa2bt2K9PT0oN5D+ugJgiAIgiAIgpCoxKUYS0FBAQYNGtS88xaLRRl+W7ZsifWuCYIgCIIgCIIgGB4rDAzTNmngeb1enH766RgyZEisd0kQBEEQBEEQBMHwRD2id+SRR6pIXUe3tWvXNm9bVVWF2tpavPDCC9hnn306fd9bbrml1fsIgiAIgiAIgiAkK1Gv0aupqYHL5erweQqwmM3t7c9x48bh8ccfx9577x3U54ixJwiCIAiCIAhCItOZKRf11M3s7Oxuvc7tdmPFihVBG3oG1JhRiEiMHPdkQs53Oe7JhJzvctyTCTnf5bgnE6YuRE+MiiHFWP73v//h999/h8fjgdPpxJ133omSkhJMmTIl1rsmCIIgCIIgCIJgeAwpxlJWVoYrrrgCGzduRFpaGsaPH4958+Zh2LBhsd41QRAEQRAEQRAEw2NIQ++MM85Qt0Tk5ptvjvUuJCVy3OW4JxNyvstxTybkfJfjnkzI+S7HPe4bpguCIAiCIAiCIAgJVqMnCIIgCIIgCIIgdB8x9ARBEARBEARBEBIMMfQEQRAEQRAEQRASDDH0BEEQBEEQBEEQEgwx9MLI5s2bcfTRR6Nfv36qseLChQvbbfP2229jxIgRyMjIUM3fly1b1ul7hrq9ANV30W63N98yMzPV7/HWW28FPDxr165Vz7d8zVFHHSWHMkS6cxy//fZb7Ljjjur8njhxIr7//ns57iHC1jPsMZqXl4fevXtj+vTpqu9oR3zxxRftfqeLLrpIjnsQuN1udax4rPPz83HxxRerfq893VbomMbGRpx77rkYMmQIsrKyMHr0aDz99NMdbr/vvvsiNTW11fm9adMmOcQhQuXzlJSUVsexs/FZzvfw0PJ482az2TBhwoSw/U7Cdh599FFMnjxZjRfTpk1r8QxQU1ODGTNmIDs7G3369MFtt92Gzgh1+2gihl44D6bZjEMPPVQZZ4H4888/MXPmTDz44IOoqKjA/vvvj2OOOabDyT/U7QWd66+/Hg6Ho/n2/PPPIycnB4cddlinh4iLY/9r3n33XTmc3STY48hz+sgjj1SL4crKSlx44YXqflVVlRz7EKiursY111yDDRs2YM2aNWqiOfHEEzt9Da+HltcIJzyha26//XZ88803WLJkCRYvXoyvv/5aOZZ6uq3QMZzv+vbti08++UQtpp599lnVZ/ejjz7q8DX33HNPq/ObzlchdC644IJWx3GPPfbocFs538NDy+PN25gxY3DyySeH7XcStsNxYfbs2cqR1BY65rhGWb9+vRq7n3jiCbWW7IhQt48qbK8ghB8e2l9//bXVY7Nnz9aOOOKI5vsul0vLzc3VPvvss4DvEer2QmAOO+ww7fzzz+/w8KxZs0b9XpWVlXIIe0Cox/HJJ5/Uxo0b1+qxsWPHak8//bT8Dj3gt99+08xms+Z2uwM+//nnn2s5OTlyjLtBcXGx9sYbbzTff/3117WBAwf2eFshNI499ljtxhtvDPjc1KlTtQcffFAOaQ+ZNWuWdumllwa9vZzv4efHH3/ULBaLtnHjxrD9TkJ7br75Zu2YY45pvl9XV6elpKRoP/30U/Njf//737UpU6YEeHXo20cbiehFkd9//12lp/lhSH7s2LHq8XBsLwSOLn344Yc455xzujw8O+ywA4qKilT6raTIdp9gj2Pb85vwvpzfPePLL79UXmCr1drhNv4oR3Fxscoa2LhxYw8/NfFh1JnjSctzlv+mB5dR1e5uK4RGQ0MD5s+f32k6G6NLTJfdaaedjONVj0N47Hgcx40bh/vvvx8+ny/gdnK+R4annnpKZSJ1FZEO9ncSgoPZdC6Xq9343dHaJNTto40YekHClDLWtXR0Y31SV3BxlZub2+ox3q+trQ3L9slAqL/DM888oxYEkyZN6vA9e/XqhR9//FGlvdEwYU3kQQcdpNKEhOCPe6jHUc7v8J/vv/76K2688UaV7t0RrHFi/TBTPRcsWMCsDlVLKYuDzuH5SlqOyf5/tx2TQ9lWCB6eq3TacWw57rjjAm5z1113YdWqVSgtLcXdd9+tUqrmzp0rhzlELrnkErWA3bZtmzI4/vGPf6hbIOR8Dz91dXV49dVXu3RSh/I7CcHB85naDi2dpV2t1UPZPtqIoRckL7/8srqQOroNHDiwy/dgkWxbby7vs8A8HNsnA6H8DlwU0NA7++yzO31PHuddd91VRUx5cd53332qsPy7776LwjdKnOMe6nGU8zs8x93PokWLlPeX9XY0sDuC0VZGXS0Wi/r3v//9b/z2229Yvnx5t86NZIHnK2k5Jvv/3XZMDmVbITg4nrMWiYta1sGzJj4QrE9iDSrHoUMOOQTnnXceXnvtNTnMIbLzzjujsLBQjRO77747rr322g6Po5zv4eeNN95QImVHHHFE2H4nITh4PjudzlZ6GF2t1UPZPtp0nNsjtIICBz2FkaWWSpxcBLNQf/z48WHZPhkI5Xf49NNPlRLqqaeeGtJn+KMlQveOe7DHkef3Qw891Ooxnu9/+9vf5NCHeNxp5B144IEqgtGd813oGqpnMtWV5+iwYcOaz9cBAwYow6K72wrBGXkUa2LGAMf1UI5hRwahEBqdHUc538PPk08+iVmzZnWagh8IOd97zqhRo5SjiA5QfzYYx++O1t6hbh91Yl0kmGjU19erGw8tC2n5b6/Xq55btmyZlpGRoc2bN09raGhQBaAjRozoUDQh1O2F1px88snajBkzujwsP/zwg7ZkyRLN4/FotbW12tVXX6317dtXq6qqkkMaAqEex/LyciUuRFGWxsZG9Tc/P1+rqKiQ4x4Cf/zxh9a7d2/t3//+d1DbU8xp9erVms/n08rKyrTTTjtNGz9+vPrdhM6hAMhOO+2kbd68Wd347zlz5vR4W6FzLrjgAm3ChAnqfO0MCkFxvqQ4As/nTz75RAkPUQhHCI3XXntNq66uVuMERSYGDRqkBCY6Qs738MG1n8lk0pYvXx7230nYDtfSXKPfcMMN2lFHHaX+zbUI4bxIIT+uX/g7UEjrueee0zoi1O2jiRh64T6gQLsbVe78vPXWW9rw4cO1tLQ0bc8999SWLl3a/NxXX32lZWZmtnq/zrYXOoZGRGpqakCF0nXr1qnjzL/k5Zdf1oYOHaqM6l69eiml00WLFsnhDZGujmPb406+/vprZWTw/OZC7ttvv5XjHiJnnHGGWhTw2La8+Y9z23Hl/vvvVwp5/J2Kioq0U045pdVvInQMlY9pdNBBwdtFF13U7Hg777zz1C2YbYXgWbt2rZpHOZ63PL/9x/rQQw/V7rjjDvXvrVu3arvuuquWlZWlbhxbnnrqKTnc3WCfffZRRjKP9ciRI7V77rmn2Wkt53tkueqqqzpUbGw7znT1Owkdw+BJ2/U6VXsJjWcGC+x2u1ZYWNjOSddy3Alm+1hi4v9iHVUUBEEQBEEQBEEQwockrwuCIAiCIAiCICQYYugJgiAIgiAIgiAkGGLoCYIgCIIgCIIgJBhi6AmCIAiCIAiCICQYYugJgiAIgiAIgiAkGGLoCYIgCIIgCIIgJBhi6AmCIAiCIAiCICQYYugJgiAIgiAIgiAkGGLoCYIgCIIgCIIgJBhi6AmCIAiCIAiCICQYYugJgiAIQjfZsGEDevXqhY8//ljdd7lc2HnnnTFnzhw5poIgCEJMMWmapsV2FwRBEAQhfnnzzTdx0UUX4bfffsNdd92FX375BZ999hksFkusd00QBEFIYsTQEwRBEIQect555+H777/Hxo0bsXDhQgwYMECOqSAIghBTJHVTEARBEHrIBRdcgEWLFmHGjBli5AmCIAiGQCJ6giAIgtADWJe3xx57YPz48Zg7d65K25w0aZIcU0EQBCGmWGP78YIgCIIQ31x77bWw2+14+umnMXnyZJxyyimqTo+PCYIgCEKskIieIAiCIHSTDz74ADNnzmxVl3fMMccgPz8fzzzzjBxXQRAEIWaIoScIgiAIgiAIgpBgiBiLIAiCIAiCIAhCgiGGniAIgiAIgiAIQoIhhp4gCIIgCIIgCEKCIYaeIAiCIAiCIAhCgiGGniAIgiAIgiAIQoIhhp4gCIIgCIIgCEKCIYaeIAiCIAiCIAhCgiGGniAIgiAIgiAIQoIhhp4gCIIgCIIgCEKCIYaeIAiCIAiCIAhCgiGGniAIgiAIgiAIAhKL/wdLAr7t+loJSgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_test = np.linspace(-10, 10, 600).reshape(-1, 1).astype(np.float32)\n", "t0 = time.perf_counter()\n", "pred = model.predict(X_test)\n", "pred_ms = (time.perf_counter() - t0) * 1000.0\n", "print(f\"SKI predict at M_test={len(X_test)}: {pred_ms:.1f} ms\")\n", "\n", "mu, sd = pred[\"mean\"], np.sqrt(np.maximum(pred[\"var\"], 0))\n", "fig, ax = plt.subplots(figsize=(10, 3.6))\n", "ax.scatter(X[::500, 0], y[::500], c=\"lightgray\", s=4, label=\"data (subsampled)\")\n", "ax.plot(X_test[:, 0], np.sin(X_test[:, 0]), color=\"#6B7280\", ls=\"--\", lw=1, label=\"true sin(x)\")\n", "ax.fill_between(X_test[:, 0], mu - 2*sd, mu + 2*sd, alpha=0.2, color=\"#2563EB\")\n", "ax.plot(X_test[:, 0], mu, lw=2, color=\"#2563EB\", label=\"SKI prediction\")\n", "ax.legend(fontsize=9, frameon=False); ax.set_title(f\"SKI GP at N={N:,}\")\n", "ax.set_xlabel(\"x\"); ax.set_ylabel(\"y\")\n", "plt.tight_layout(); plt.show()" ] }, { "cell_type": "markdown", "id": "0dc3f1b4", "metadata": {}, "source": [ "## How SKI works (one-paragraph intuition)\n", "\n", "1. Project the data onto a regular grid via a sparse cubic-interpolation matrix W: `K ≈ W K_grid W^T`\n", "2. The grid kernel `K_grid` is Toeplitz (1D) or Kronecker-Toeplitz (2D / 3D)\n", "3. Toeplitz matrix-vector products are FFTs in O(M log M)\n", "4. Conjugate gradients with this fast matvec solves the GP equations without ever forming K\n", "\n", "The cost shifts from `O(N²)` per matvec to `O(N + M log M)`." ] }, { "cell_type": "markdown", "id": "50d6ce53", "metadata": {}, "source": [ "## Decision flowchart\n", "\n", "```text\n", "N < 5,000? → Solver.Cholesky (exact, simple)\n", "5k ≤ N < 50k, any D? → Solver.CG (matrix-free on GPU)\n", "N > 50k, D ≤ 3? → Solver.SKI ← you are here\n", "N > 50k, D > 3? → GPSparse (inducing-point)\n", "```\n", "\n", "The next tutorial covers how to control the compute backend (CPU / Metal / CUDA)." ] } ], "metadata": { "kernelspec": { "display_name": "lightgp-docs", "language": "python", "name": "lightgp-docs" }, "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.13.5" } }, "nbformat": 4, "nbformat_minor": 5 }