{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bar Learning problem\n", "\n", "[![Download JupyterNotebook](https://img.shields.io/badge/Download-Notebook-orange?style=for-the-badge&logo=Jupyter)](https://raw.githubusercontent.com/ANNarchy/ANNarchy.github.io/master/notebooks/BarLearning.ipynb) [![Download JupyterNotebook](https://img.shields.io/badge/Open_in-Colab-blue?style=for-the-badge&logo=Jupyter)](https://colab.research.google.com/github/ANNarchy/ANNarchy.github.io/blob/master/notebooks/BarLearning.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The bar learning problem describes the process of learning receptive fields on an artificial input pattern.\n", "Images consisting of independent bars are used. Those images are generated as following: an 8\\*8 image can filled randomly by eight horizontal or vertical bars, with a probability of 1/8 for each.\n", "\n", "These input images are fed into a neural population, whose neurons should learn to extract the independent components of the input distribution, namely single horizontal or vertical bars.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#!pip install ANNarchy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model consists of two populations `inp` and `pop`. The size of `inp` should be chosen to fit the input image size (here 8*8). The number of neurons in the `pop` population should be higher than the total number of independent bars (16, we choose here 32 neurons). The `pop` population gets excitory connections from `inp` through an all-to-all connection pattern. The same pattern is used for the inhibitory connections within `pop`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Defining the neurons and populations" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ANNarchy 5.0 (5.0.0) on linux (posix).\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import ANNarchy as ann" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "net = ann.Network()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Input population:**\n", "\n", "The input pattern will be clamped into this population by the main loop for every trial, so we just need an `InputArray` to store the values:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "N = 8\n", "inp = net.create(ann.InputArray(geometry=(N, N)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Learning population:**\n", "\n", "The neuron type composing this population sums up all the excitory inputs gain from `inp` and the lateral inhibition within `pop`.\n", "\n", "$$\\tau \\frac {dr_{j}}{dt} + r_{j} = \\sum_{i} w_{ij} \\cdot r_{i}^{\\text{inp}} - \\sum_{k, k \\ne j} w_{kj} * r_{k}$$\n", "\n", "could be implemented as the following:\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "LeakyNeuron = ann.Neuron(\n", " parameters = dict(tau = 10.0),\n", " equations = ann.Variable(\"tau * dr/dt + r = sum(exc) - sum(inh)\", min=0.0),\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The firing rate is restricted to positive values with the `min=0.0` attribute. The population of 32 neurons is created in the following way:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "pop = net.create(geometry=(N, int(N/2)), neuron=LeakyNeuron)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define the population with a (8, 4) geometry for visualization only, its 2D structure does not influence computations at all. We could also use `geometry=32` and reshape the array afterwards." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Defining the synapse and projections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Both feedforward (`inp` $\\rightarrow$ `pop`) and lateral (`pop` $\\rightarrow$ `pop`) projections are learned using the Oja learning rule (a regularized Hebbian learning rule ensuring the sum of all weights coming to a neuron is constant). Only some parameters will differ between the projections.\n", "\n", "$$\\tau \\frac{dw_{ij}}{dt} = r_{i} \\cdot r_{j} - \\alpha \\cdot r_{j}^{2} \\cdot w_{ij}$$\n", "\n", "where $\\alpha$ is a parameter defining the strength of the regularization, $r_i$ is the pre-synaptic firing rate and $r_j$ the post-synaptic one. The implementation of this synapse type is straightforward:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "Oja = ann.Synapse(\n", " parameters = dict( \n", " tau = 2000.0,\n", " alpha = 8.0,\n", " min_w = 0.0,\n", " ),\n", " equations = ann.Variable(\n", " \"tau * dw/dt = pre.r * post.r - alpha * post.r^2 * w\", \n", " min='min_w'\n", " )\n", ") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this network we need to create two projections, one excitory between the populations `inp` and `pop` and one inhibitory within the `pop` population itself:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ff = net.connect(\n", " pre=inp, \n", " post=pop, \n", " target='exc', \n", " synapse = Oja \n", ")\n", "ff.all_to_all(\n", " weights = ann.Uniform(0.0, 0.5)\n", ")\n", " \n", "lat = net.connect(\n", " pre=pop, \n", " post=pop, \n", " target='inh', \n", " synapse = Oja\n", ")\n", "lat.all_to_all(\n", " weights = ann.Uniform(0.0, 1.0)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The two projections are all-to-all and use the `Oja` synapse type. They only differ by the parameter `alpha` (lower in `pop`):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "lat.alpha = 0.3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now compile the network:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compiling network 1... OK \n" ] } ], "source": [ "net.compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting inputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the network is defined, one has to specify how inputs are fed into\n", "the `inp` population. A simple solution is to define a method that\n", "sets the firing rate of `inp` according to the specified probabilities\n", "every time it is called, and runs the simulation for 50 ms:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "def trial():\n", "\n", " # Reset the firing rate for all neurons\n", " inp.r = 0.0\n", "\n", " # Clamp horizontal bars randomly\n", " hbars = np.random.binomial(n=1, p=1./N, size=N) == 1\n", " for i, exists in enumerate(hbars): \n", " inp[i, :].r = 1.0 if exists else inp[i, :].r\n", "\n", " # Clamp vertical bars randomly\n", " vbars = np.random.binomial(n=1, p=1./N, size=N) == 1\n", " for j, exists in enumerate(vbars): \n", " inp[:, j].r = 1.0 if exists else inp[:, j].r\n", "\n", " # Simulate for 50ms\n", " net.simulate(50.)\n", " \n", " # Return firing rates and receptive fields for visualization\n", " return inp.r, pop.r, ff.receptive_fields()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can use here a single value or a Numpy array (e.g. `np.zeros(inp.geometry))`) to reset activity in `inp`, it does not matter.\n", "\n", "For the random bars, we use the binomial distribution to decide for the existence of a vertical or horizontal bar with a probability of 1/8. \n", "\n", "`inp[i, :]` and `inp[:, j]` are `PopulationViews`, i.e. groups of neurons defined by the sub-indices (here the rows and columns of `inp`). Their attributes, such as `r`, can be accessed and modified as if it were a regular population." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running the simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's have a look at the activities and receptive fields after one trial:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "input_array, activity_array, weights = trial()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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wAnYJwUAEKh8fnUvAAAAAPg7mhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADgKTQoAAAAARyns6wmcTkZGhiIjI309DQQol8vl6ykggGVmZioqKsrX0wAAwGdYSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADiK15uUZcuWqVOnTqpQoYKCgoL06aefensIAAAAABcwrzcpWVlZaty4scaMGePt0gAAAAACQGFvF+zYsaM6duzo7bIAAAAAAgTnpAAAAJPJkycrKCjolLfBgwd7fbxvv/1WTz31lA4dOuT12gCczesrKZ7Kzs5Wdna2++vMzEwfzgYAAJzN008/rWrVquW7r0GDBl4f59tvv9Xw4cPVs2dPFS9e3Ov1ATiXz5uU5ORkDR8+3NfTAAAARh07dlTz5s19PY1/LSsrS0WLFvX1NACcgc8P9xoyZIgyMjLct9TUVF9PCQAA/Evz5s3TZZddpqJFiyoiIkLXXXedfvrpp3yZH3/8UT179lT16tUVFhamcuXKqXfv3tq/f78789RTT+nhhx+WJFWrVs19WNnvv/+u33//XUFBQZo8efJJ4wcFBempp57KVycoKEg///yzbr/9dpUoUUJt2rRxP/7+++8rNjZW4eHhKlmypG677Tb+FgEcwOcrKaGhoQoNDfX1NAAAgFFGRob27duX777SpUvrvffeU0JCgjp06KDnn39eR48e1dixY9WmTRt9//33qlq1qiRp4cKF+u2339SrVy+VK1dOP/30k8aPH6+ffvpJK1euVFBQkG6++WZt2rRJH374oV555RWVLl1aklSmTBnt3bvX4zl36dJFNWvW1HPPPSeXyyVJGjFihJ588kl17dpVd999t/bu3avXX39dbdu21ffff88hZoAPeb1JOXLkiLZs2eL+etu2bVq3bp1KliypypUre3s4AABwnsXHx5903+HDh3X//ffr7rvv1vjx4933JyQkqHbt2nruuefc999333168MEH8/37Sy65RN27d9c333yjyy67TI0aNVKzZs304YcfqnPnzu4GR9K/alIaN26sqVOnur/+448/NGzYMD377LN67LHH3PfffPPNatq0qd5888189wM4v7zepKxZs0ZXXHGF++ukpCRJ//uQOtWyLAAA8C9jxoxRrVq18t23cOFCHTp0SN27d8+3yhIcHKy4uDgtXrzYfV94eLj7v48dO6YjR47okksukSStXbtWl112mdfnfO+99+b7eubMmcrLy1PXrl3zzbdcuXKqWbOmFi9eTJMC+JDXm5R27dq5l1EBAMCFp2XLliedOP/CCy9Ikq688spT/pvIyEj3fx84cEDDhw/XtGnTtGfPnny5jIwML8/2f/55NbLNmzfL5XKpZs2ap8wXKVKkQOYBwMbn56QAAAD/l5eXJ0l67733VK5cuZMeL1z4///k6Nq1q7799ls9/PDDatKkiYoVK6a8vDxdc8017jpnEhQUdMr7c3NzT/tv/r56c2K+QUFBmjdvnoKDg0/KFytW7KzzAFBwaFIAAMA5q1GjhiSpbNmypzxn5YSDBw9q0aJFGj58uIYOHeq+f/PmzSdlT9eMlChRQpJO2uTxjz/+8Gi+LpdL1apVO+nQNQC+5/NLEAMAAP/XoUMHRUZG6rnnntPx48dPevzEye4nVi3+eWj46NGjT/o3J/Yy+WczEhkZqdKlS2vZsmX57n/zzTfN87355psVHBys4cOHnzQXl8uV73LIAM4/VlIAAMA5i4yM1NixY3XXXXepWbNmuu2221SmTBlt375d//3vf9W6dWu98cYbioyMVNu2bfXCCy/o+PHjqlixor744gtt27btpJqxsbGSpMcff1y33XabihQpok6dOqlo0aK6++67NXLkSN19991q3ry5li1bpk2bNpnnW6NGDT377LMaMmSIfv/9d3Xu3FkRERHatm2bZs2apXvuuUcPPfSQ114fAJ6hSQEAAF5x++23q0KFCho5cqRefPFFZWdnq2LFirrsssvUq1cvd27q1KkaMGCAxowZI5fLpfbt22vevHmqUKFCvnotWrTQM888o3Hjxmn+/PnKy8vTtm3bVLRoUQ0dOlR79+7Vxx9/rBkzZqhjx46aN2+eypYta57v4MGDVatWLb3yyisaPny4JCkmJkbt27fXDTfc4J0XBcC/EuRy2KW4MjMzFRUVpYyMjHxXAgGAQMHnIAAg0HFOCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAURy7mWNUVJSvp+C3HLb1jV8KCgry9RQAR8jLy9OuXbsUERHBzwWAgONyuXT48GFVqFBBhQrx//bPJ8c2KQAA39u1a5diYmJ8PQ0A8KnU1FRVqlTJ19MIKDQpAIDTioiI8PUUzurSSy/19RTO6Pnnn/f1FM5q4sSJvp7CGTVp0sTXUzijN954w9dTOKMJEyb4egpn1a5dO19P4Yz84bPwQkOTAgA4LX84xKtwYWf/KitWrJivp3BWISEhvp7CGYWHh/t6CmcUHBzs6ymckT98DzqdP3wWXmg4uA4AAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUbzepCQnJ6tFixaKiIhQ2bJl1blzZ23cuNHbwwAAjMaMGaOqVasqLCxMcXFxWrVqla+nBADAGXm9SVm6dKkSExO1cuVKLVy4UMePH1f79u2VlZXl7aEAAGcxffp0JSUladiwYVq7dq0aN26sDh06aM+ePb6eGgAAp+X1JmX+/Pnq2bOn6tevr8aNG2vy5Mnavn27UlJSvD0UAOAsRo0apb59+6pXr16qV6+exo0bp4suukgTJ0709dQAADitAj8nJSMjQ5JUsmTJgh4KAPA3OTk5SklJUXx8vPu+QoUKKT4+XitWrPDhzAAAOLPCBVk8Ly9PgwYNUuvWrdWgQYNTZrKzs5Wdne3+OjMzsyCnBAABY9++fcrNzVV0dHS++6Ojo/Xrr7+e8t/wmQwAcIICXUlJTEzUhg0bNG3atNNmkpOTFRUV5b7FxMQU5JQAAGfAZzIAwAkKrEnp37+/5s6dq8WLF6tSpUqnzQ0ZMkQZGRnuW2pqakFNCQACSunSpRUcHKz09PR896enp6tcuXKn/Dd8JgMAnMDrTYrL5VL//v01a9YsffXVV6pWrdoZ86GhoYqMjMx3AwCcu5CQEMXGxmrRokXu+/Ly8rRo0SK1atXqlP+Gz2QAgBN4/ZyUxMRETZ06VbNnz1ZERITS0tIkSVFRUQoPD/f2cACAM0hKSlJCQoKaN2+uli1bavTo0crKylKvXr18PTUAAE7L603K2LFjJUnt2rXLd/+kSZPUs2dPbw8HADiDbt26ae/evRo6dKjS0tLUpEkTzZ8//6ST6QEAcBKvNykul8vbJQEA56B///7q37+/r6cBAIBZge+TAgAAAACeoEkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADgKTQoAAAAAR6FJAQAAAOAoNCkAAAAAHIUmBQAAAICj0KQAAAAAcJQgl8vl8vUk/i4zM1NRUVG+noZfc9hb6peCgoJ8PQVAGRkZioyM9Okc+EwODJdeeqmvp3BG3377ra+ngAL2xBNP+HoKp5Sdna0XX3zREZ/HgYaVFAAAAACOQpMCAAAAwFFoUgAAAAA4Ck0KAAAAAEehSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKN4vUkZO3asGjVqpMjISEVGRqpVq1aaN2+et4cBABgsW7ZMnTp1UoUKFRQUFKRPP/3U11MCAOCsvN6kVKpUSSNHjlRKSorWrFmjK6+8UjfeeKN++uknbw8FADiLrKwsNW7cWGPGjPH1VAAAMCvs7YKdOnXK9/WIESM0duxYrVy5UvXr1/f2cACAM+jYsaM6duzo62kAAOARrzcpf5ebm6uPPvpIWVlZatWqVUEOBQAAAOACUSBNyvr169WqVSsdO3ZMxYoV06xZs1SvXr1TZrOzs5Wdne3+OjMzsyCmBAAw4DMZAOAEBXJ1r9q1a2vdunX67rvv1K9fPyUkJOjnn38+ZTY5OVlRUVHuW0xMTEFMCQBgwGcyAMAJCqRJCQkJ0cUXX6zY2FglJyercePGevXVV0+ZHTJkiDIyMty31NTUgpgSAMCAz2QAgBMU6DkpJ+Tl5eU7fODvQkNDFRoaej6mAQA4Cz6TAQBO4PUmZciQIerYsaMqV66sw4cPa+rUqVqyZIkWLFjg7aEAAGdx5MgRbdmyxf31tm3btG7dOpUsWVKVK1f24cwAADg9rzcpe/bsUY8ePbR7925FRUWpUaNGWrBgga6++mpvDwUAOIs1a9boiiuucH+dlJQkSUpISNDkyZN9NCsAAM7M603KO++84+2SAIB/qV27dnK5XL6eBgAAHimQE+cBAAAA4N+iSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwlCCXy+Xy9ST+LjMzU1FRUb6ehl9z2Fvql4KCgnw9BUAZGRmKjIz06Rz84TP5559/9vUUzqhevXq+nsJZ5eXl+XoKZ+T01/Cvv/7y9RTOKDU11ddTOCtff9adTl5envbv3++Iz+NAw0oKAAAAAEehSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADhKgTcpI0eOVFBQkAYNGlTQQwEA/iE5OVktWrRQRESEypYtq86dO2vjxo2+nhYAAGdUoE3K6tWr9dZbb6lRo0YFOQwA4DSWLl2qxMRErVy5UgsXLtTx48fVvn17ZWVl+XpqAACcVuGCKnzkyBHdcccdmjBhgp599tmCGgYAcAbz58/P9/XkyZNVtmxZpaSkqG3btj6aFQAAZ1ZgKymJiYm67rrrFB8ff8Zcdna2MjMz890AAAUjIyNDklSyZMlTPs5nMgDACQqkSZk2bZrWrl2r5OTks2aTk5MVFRXlvsXExBTElAAg4OXl5WnQoEFq3bq1GjRocMoMn8kAACfwepOSmpqqgQMH6oMPPlBYWNhZ80OGDFFGRob7lpqa6u0pAQD0vxXuDRs2aNq0aafN8JkMAHACr5+TkpKSoj179qhZs2bu+3Jzc7Vs2TK98cYbys7OVnBwsPux0NBQhYaGensaAIC/6d+/v+bOnatly5apUqVKp83xmQwAcAKvNylXXXWV1q9fn+++Xr16qU6dOnr00UfzNSgAgILlcrk0YMAAzZo1S0uWLFG1atV8PSUAAM7K601KRETEScc6Fy1aVKVKlTrtMdAAgIKRmJioqVOnavbs2YqIiFBaWpokKSoqSuHh4T6eHQAAp8aO8wBwARs7dqwyMjLUrl07lS9f3n2bPn26r6cGAMBpFdg+KX+3ZMmS8zEMAOAfXC6Xr6cAAIDHWEkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADgKTQoAAAAAR6FJAQAAAOAoNCkAAAAAHIUmBQAAAICj0KQAAAAAcBSaFAAAAACOUtjXEwAAON/8+fNVtGhRX0/jlOrWrevrKZzRXXfd5espnFWhQs7+f5aLFi3y9RTO6JprrvH1FM7o+PHjvp7CWe3du9fXU4DDOPtTCQAAAEDAoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADgKTQoAAAAAR6FJAQAAAOAoNCkAAAAAHIUmBQAAAICj0KQAAAAAcBSaFAAAAACOQpMCAAAAwFG83qQ89dRTCgoKynerU6eOt4cBABiMHTtWjRo1UmRkpCIjI9WqVSvNmzfP19MCAOCMChdE0fr16+vLL7/8/0EKF8gwAICzqFSpkkaOHKmaNWvK5XJpypQpuvHGG/X999+rfv36vp4eAACnVCDdQ+HChVWuXLmCKA0A8ECnTp3yfT1ixAiNHTtWK1eupEkBADhWgTQpmzdvVoUKFRQWFqZWrVopOTlZlStXPmU2Oztb2dnZ7q8zMzMLYkoAEPByc3P10UcfKSsrS61atTplhs9kAIATeP2clLi4OE2ePFnz58/X2LFjtW3bNl122WU6fPjwKfPJycmKiopy32JiYrw9JQAIaOvXr1exYsUUGhqqe++9V7NmzVK9evVOmeUzGQDgBF5vUjp27KguXbqoUaNG6tChgz7//HMdOnRIM2bMOGV+yJAhysjIcN9SU1O9PSUACGi1a9fWunXr9N1336lfv35KSEjQzz//fMosn8kAACco8DPaixcvrlq1amnLli2nfDw0NFShoaEFPQ0ACFghISG6+OKLJUmxsbFavXq1Xn31Vb311lsnZflMBgA4QYHvk3LkyBFt3bpV5cuXL+ihAAAGeXl5+c47AQDAaby+kvLQQw+pU6dOqlKlinbt2qVhw4YpODhY3bt39/ZQAICzGDJkiDp27KjKlSvr8OHDmjp1qpYsWaIFCxb4emoAAJyW15uUHTt2qHv37tq/f7/KlCmjNm3aaOXKlSpTpoy3hwIAnMWePXvUo0cP7d69W1FRUWrUqJEWLFigq6++2tdTAwDgtLzepEybNs3bJQEA/9I777zj6ykAAOCxAj8nBQAAAAA8QZMCAAAAwFFoUgAAAAA4Ck0KAAAAAEehSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHKezrCQAAnMvlckmSsrKyfDyT08vMzPT1FM4oJyfH11Pwe07+/pP+/+cEFy7e4/MvyOWwVz0zM1NRUVG+noZfc9hb6peCgoJ8PQVAGRkZioyM9OkcduzYoZiYGJ/OAQB8LTU1VZUqVfL1NAIKKykAgNOqUKGCUlNTFRER4ZXmPTMzUzExMUpNTfV5A+aPeP3OHa/huQm018/lcunw4cOqUKGCr6cScGhSAACnVahQoQL5v4eRkZEB8QdOQeH1O3e8hucmkF4/jvDxDU6cBwAAAOAoNCkAAAAAHIUmBQBw3oSGhmrYsGEKDQ319VT8Eq/fueM1PDe8fjhfuLrXBchhb6lf4upecAInXN0LAABfYCUFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAADnzZgxY1S1alWFhYUpLi5Oq1at8vWU/EJycrJatGihiIgIlS1bVp07d9bGjRt9PS2/NXLkSAUFBWnQoEG+nopf2blzp+68806VKlVK4eHhatiwodasWePraeECRZMCADgvpk+frqSkJA0bNkxr165V48aN1aFDB+3Zs8fXU3O8pUuXKjExUStXrtTChQt1/PhxtW/fXllZWb6emt9ZvXq13nrrLTVq1MjXU/ErBw8eVOvWrVWkSBHNmzdPP//8s15++WWVKFHC11PDBYpLEF+AHPaW+iUuQQwnuNAuQRwXF6cWLVrojTfekCTl5eUpJiZGAwYM0ODBg308O/+yd+9elS1bVkuXLlXbtm19PR2/ceTIETVr1kxvvvmmnn32WTVp0kSjR4/29bT8wuDBg7V8+XJ9/fXXvp4KAgQrKQCAApeTk6OUlBTFx8e77ytUqJDi4+O1YsUKH87MP2VkZEiSSpYs6eOZ+JfExERdd911+b4PYTNnzhw1b95cXbp0UdmyZdW0aVNNmDDB19PCBYwmBQBQ4Pbt26fc3FxFR0fnuz86OlppaWk+mpV/ysvL06BBg9S6dWs1aNDA19PxG9OmTdPatWuVnJzs66n4pd9++01jx45VzZo1tWDBAvXr10/333+/pkyZ4uup4QJVIE0KJ1YBAFAwEhMTtWHDBk2bNs3XU/EbqampGjhwoD744AOFhYX5ejp+KS8vT82aNdNzzz2npk2b6p577lHfvn01btw4X08NFyivNymcWAUA+KfSpUsrODhY6enp+e5PT09XuXLlfDQr/9O/f3/NnTtXixcvVqVKlXw9Hb+RkpKiPXv2qFmzZipcuLAKFy6spUuX6rXXXlPhwoWVm5vr6yk6Xvny5VWvXr1899WtW1fbt2/30YxwoSvs7YLPP/+8YmJiNGnSJPd91apV8/YwAAA/EhISotjYWC1atEidO3eW9L//M7to0SL179/ft5PzAy6XSwMGDNCsWbO0ZMkSfq966KqrrtL69evz3derVy/VqVNHjz76qIKDg300M//RunXrky57vWnTJlWpUsVHM8KFzutNypw5c9ShQwd16dJFS5cuVcWKFXXfffepb9++p8xnZ2crOzvb/XVmZqa3pwQAcICkpCQlJCSoefPmatmypUaPHq2srCz16tXL11NzvMTERE2dOlWzZ89WRESE+zyeqKgohYeH+3h2zhcREXHS+TtFixZVqVKlOK/H6IEHHtCll16q5557Tl27dtWqVas0fvx4jR8/3tdTw4XK5WWhoaGu0NBQ15AhQ1xr1651vfXWW66wsDDX5MmTT5kfNmyYSxI3L95w7nz9HnLjJsmVkZHh6x8Fr3v99dddlStXdoWEhLhatmzpWrlypa+n5BdO9z0yadIkX0/Nb11++eWugQMH+noafuWzzz5zNWjQwBUaGuqqU6eOa/z48b6eEi5gXt8nJSQkRM2bN9e3337rvu/+++/X6tWrT3mZyVOtpMTExHhzSgHHy29pQGKfFDjBhbZPCgAAVl4/cd7TE6tCQ0MVGRmZ7wYAAAAgcHm9SeHEKgAAAADnwutNygMPPKCVK1fqueee05YtWzR16lSNHz9eiYmJ3h4KAAAAwAXI6+ekSNLcuXM1ZMgQbd68WdWqVVNSUtJpr+71T5mZmYqKivL2lAIK56ScO85JgRNwTgoAIFAVSJNyLmhSzp3D3lK/RJMCJ6BJAQAEKq8f7gUAAAAA54ImBQAAAICj0KQAAAAAcBSaFAAAAACOQpMCAAAAwFFoUgAAAAA4Ck0KAAAAAEehSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOEphX0/gdDIyMhQZGenraSBAuVwuX08BASwzM1NRUVG+ngYAAD7DSgoAAAAAR6FJAQAAAOAoNCkAAAAAHIUmBQAAAICj0KQAAAAAcBSaFAAAAACOQpMCAAAAwFFoUgAAAAA4Ck0KAAAAAEehSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjuL1JqVq1aoKCgo66ZaYmOjtoQAAAABcgAp7u+Dq1auVm5vr/nrDhg26+uqr1aVLF28PBQAAAOAC5PUmpUyZMvm+HjlypGrUqKHLL7/c20MBAAAAuAAV6DkpOTk5ev/999W7d28FBQUV5FAAAAAALhBeX0n5u08//VSHDh1Sz549T5vJzs5Wdna2++vMzMyCnBIAAAAAhyvQlZR33nlHHTt2VIUKFU6bSU5OVlRUlPsWExNTkFMCAAAA4HBBLpfLVRCF//jjD1WvXl0zZ87UjTfeeNrcqVZSYmJilJGRocjIyIKYGgA4WmZmpqKiovgcBAAErAI73GvSpEkqW7asrrvuujPmQkNDFRoaWlDTAAAAAOBnCuRwr7y8PE2aNEkJCQkqXLhAT3sBAAAAcIEpkCblyy+/1Pbt29W7d++CKA8AAADgAlYgyxzt27dXAZ3qAgAAAOACV6BX9wIAAAAAT9GkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADhKYV9P4J9cLpckKTMz08czAQDfOPH5d+LzEACAQOO4JuXw4cOSpJiYGB/PBAB86/Dhw4qKivL1NAAAOO+CXA77X3V5eXnatWuXIiIiFBQUdM71MjMzFRMTo9TUVEVGRnphhoGH1/Dc8Pqdm0B8/Vwulw4fPqwKFSqoUCGOygUABB7HraQUKlRIlSpV8nrdyMjIgPkDp6DwGp4bXr9zE2ivHysoAIBAxv+iAwAAAOAoNCkAAAAAHOWCb1JCQ0M1bNgwhYaG+noqfovX8Nzw+p0bXj8AAAKP406cBwAAABDYLviVFAAAAAD+hSYFAAAAgKPQpAAAAABwlAu+SRkzZoyqVq2qsLAwxcXFadWqVb6ekl9ITk5WixYtFBERobJly6pz587auHGjr6flt0aOHKmgoCANGjTI11PxKzt37tSdd96pUqVKKTw8XA0bNtSaNWt8PS0AAFDALugmZfr06UpKStKwYcO0du1aNW7cWB06dNCePXt8PTXHW7p0qRITE7Vy5UotXLhQx48fV/v27ZWVleXrqfmd1atX66233lKjRo18PRW/cvDgQbVu3VpFihTRvHnz9PPPP+vll19WiRIlfD01AABQwC7oq3vFxcWpRYsWeuONNyRJeXl5iomJ0YABAzR48GAfz86/7N27V2XLltXSpUvVtm1bX0/Hbxw5ckTNmjXTm2++qWeffVZNmjTR6NGjfT0tvzB48GAtX75cX3/9ta+nAgAAzrMLdiUlJydHKSkpio+Pd99XqFAhxcfHa8WKFT6cmX/KyMiQJJUsWdLHM/EviYmJuu666/J9H8Jmzpw5at68ubp06aKyZcuqadOmmjBhgq+nBQAAzoMLtknZt2+fcnNzFR0dne/+6OhopaWl+WhW/ikvL0+DBg1S69at1aBBA19Px29MmzZNa9euVXJysq+n4pd+++03jR07VjVr1tSCBQvUr18/3X///ZoyZYqvpwYAAApYYV9PAM6XmJioDRs26JtvvvH1VPxGamqqBg4cqIULFyosLMzX0/FLeXl5at68uZ577jlJUtOmTbVhwwaNGzdOCQkJPp4dAAAoSBfsSkrp0qUVHBys9PT0fPenp6erXLlyPpqV/+nfv7/mzp2rxYsXq1KlSr6ejt9ISUnRnj171KxZMxUuXFiFCxfW0qVL9dprr6lw4cLKzc319RQdr3z58qpXr16+++rWravt27f7aEYAAOB8uWCblJCQEMXGxmrRokXu+/Ly8rRo0SK1atXKhzPzDy6XS/3799esWbP01VdfqVq1ar6ekl+56qqrtH79eq1bt859a968ue644w6tW7dOwcHBvp6i47Vu3fqky15v2rRJVapU8dGMAADA+XJBH+6VlJSkhIQENW/eXC1bttTo0aOVlZWlXr16+XpqjpeYmKipU6dq9uzZioiIcJ/HExUVpfDwcB/PzvkiIiJOOn+naNGiKlWqFOf1GD3wwAO69NJL9dxzz6lr165atWqVxo8fr/Hjx/t6agAAoIBd0JcglqQ33nhDL774otLS0tSkSRO99tpriouL8/W0HC8oKOiU90+aNEk9e/Y8v5O5QLRr145LEHto7ty5GjJkiDZv3qxq1aopKSlJffv29fW0AABAAbvgmxQAAAAA/uWCPScFAAAAgH+iSQEAAADgKDQpAAAAAByFJgUAAACAo9CkAAAAAHAUmhQAAAAAjkKTAgAAAMBRaFIAAAAAOApNCgAAAABHoUkBAAAA4Cg0KQAAAAAchSYFAAAAgKPQpAAAAABwFJoUAAAAAI5CkwIAAADAUWhSAAAAADgKTQoAAAAAR6FJAQAAAOAoNCkAAAAAHIUmBQAAAICj0KQAAAAAcBSaFAAAAACOQpMCAAAAwFFoUgAAAAA4Ck0KAAAAAEehSQEAAABwRmPGjFHVqlUVFhamuLg4rVq16rTZyZMnKygoKN8tLCzMo/FoUgAAAACc1vTp05WUlKRhw4Zp7dq1aty4sTp06KA9e/ac9t9ERkZq9+7d7tsff/zh0Zg0KQAAAABOa9SoUerbt6969eqlevXqady4cbrooos0ceLE0/6boKAglStXzn2Ljo72aMzC5zppAAAAAAXr2LFjysnJ8Uotl8uloKCgfPeFhoYqNDT0pGxOTo5SUlI0ZMgQ932FChVSfHy8VqxYcdoxjhw5oipVqigvL0/NmjXTc889p/r165vnyEoKAPixqlWrqmfPnud93L/++kuPPPKIYmJiVKhQIXXu3FnS//7P2VNPPeVxvd9//11BQUGaPHnyWbM9e/ZU1apVPR4DAPzVsWPHVK1aNUVFRXnlVqlSpZPuS05OPuXY+/btU25u7kkrIdHR0UpLSzvlv6ldu7YmTpyo2bNn6/3331deXp4uvfRS7dixw/ycWUkBcEGaPHmyevXq5f46ODhY0dHRuvrqqzVixAhVrFjRh7PzzLfffqsvvvhCgwYNUvHixX09HUnSxIkT9eKLL2rQoEFq1qyZKleu7OspAcAFKycnR2lpaUpNTVVkZOQ51crMzFRMTMxJtU61ivJvtWrVSq1atXJ/femll6pu3bp666239Mwzz5hq0KQAuKA9/fTTqlatmo4dO6aVK1dq8uTJ+uabb7RhwwaPrzTiK99++62GDx+unj17ntSkbNy4UYUKnf9F8a+++koVK1bUK6+8ku/+P//8U4UL86sFAApCRESEIiIizqmGy+WS9L8T2y0NT+nSpRUcHKz09PR896enp6tcuXKmMYsUKaKmTZtqy5Yt5nlyuBeAC1rHjh1155136u6779bbb7+thx56SFu3btWcOXN8PTWvCA0NVZEiRc77uHv27Dnlqk5YWBhNCgAUEJfL5ZWbJ0JCQhQbG6tFixa578vLy9OiRYvyrZacSW5urtavX6/y5cubx6VJARBQLrvsMknS1q1b893/66+/6tZbb1XJkiUVFham5s2bn7KROXTokB544AFVrVpVoaGhqlSpknr06KF9+/a5M9nZ2Ro2bJguvvhihYaGKiYmRo888oiys7Pz1QoKClL//v31wQcfqHbt2goLC1NsbKyWLVvmzjz11FN6+OGHJUnVqlVzX2/+999/l5T/nJQ1a9YoKChIU6ZMOWneCxYsUFBQkObOneu+b+fOnerdu7eio6MVGhqq+vXrn/FKLdL/nzuyePFi/fTTT+75LFmyxP2c/nlOyr8Z54RPP/1UDRo0UFhYmBo0aKBZs2adMjdt2jTFxsYqIiJCkZGRatiwoV599VXTGACAM0tKStKECRM0ZcoU/fLLL+rXr5+ysrLch1X36NEj34n1Tz/9tL744gv99ttvWrt2re6880798ccfuvvuu81j8r+7AASUE3/clyhRwn3fTz/9pNatW6tixYoaPHiwihYtqhkzZqhz58765JNPdNNNN0n635VKLrvsMv3yyy/q3bu3mjVrpn379mnOnDnasWOHSpcurby8PN1www365ptvdM8996hu3bpav369XnnlFW3atEmffvppvvksXbpU06dP1/3336/Q0FC9+eabuuaaa7Rq1So1aNBAN998szZt2qQPP/xQr7zyikqXLi1JKlOmzEnPrXnz5qpevbpmzJihhISEfI9Nnz5dJUqUUIcOHST9b5n+kksucTdKZcqU0bx589SnTx9lZmZq0KBBp3z9ypQpo/fee08jRozQkSNH3Cda1q1b95T5fzuOJH3xxRe65ZZbVK9ePSUnJ2v//v3q1auXKlWqlC+3cOFCde/eXVdddZWef/55SdIvv/yi5cuXa+DAgaetDwD+5t+shJyqhqe6deumvXv3aujQoUpLS1OTJk00f/5898n027dvz3fo8cGDB9W3b1+lpaWpRIkSio2N1bfffqt69ep5NFEAuOBMmjTJJcn15Zdfuvbu3etKTU11ffzxx64yZcq4QkNDXampqe7sVVdd5WrYsKHr2LFj7vvy8vJcl156qatmzZru+4YOHeqS5Jo5c+ZJ4+Xl5blcLpfrvffecxUqVMj19ddf53t83LhxLkmu5cuXu++T5JLkWrNmjfu+P/74wxUWFua66aab3Pe9+OKLLkmubdu2nTRulSpVXAkJCe6vhwwZ4ipSpIjrwIED7vuys7NdxYsXd/Xu3dt9X58+fVzly5d37du3L1+92267zRUVFeU6evToSWP93eWXX+6qX7/+SfdLcg0bNszjcbZt2+aS5Jo0aZI706RJE1f58uVdhw4dct/3xRdfuCS5qlSp4r5v4MCBrsjISNdff/11xjkDgL/KyMhwSXLt37/fdfz48XO67d+/3yXJlZGR4eundUYc7gXgghYfH68yZcooJiZGt956q4oWLao5c+a4/2/8gQMH9NVXX6lr1646fPiw9u3bp3379mn//v3q0KGDNm/erJ07d0qSPvnkEzVu3Ni9svJ3J643/9FHH6lu3bqqU6eOu9a+fft05ZVXSpIWL16c79+1atVKsbGx7q8rV66sG2+8UQsWLFBubq7Hz7dbt246fvy4Zs6c6b7viy++0KFDh9StWzdJ//u/aJ988ok6deokl8uVb54dOnRQRkaG1q5d6/HY/3Qu4+zevVvr1q1TQkKCoqKi3PdfffXVJ/2fuOLFiysrK0sLFy485zkDAJyBw70AXNDGjBmjWrVqKSMjQxMnTtSyZcvyXWZxy5YtcrlcevLJJ/Xkk0+essaePXtUsWJFbd26VbfccssZx9u8ebN++eWXUx6OdaLW39WsWfOkTK1atXT06FHt3bvXfOWUExo3bqw6depo+vTp6tOnj6T/HepVunRpd6O0d+9eHTp0SOPHj9f48eNN8/w3zmWcP/74Q9KpX5/atWvna27uu+8+zZgxQx07dlTFihXVvn17de3aVddcc805PwcAcBKXjw738gWaFAAXtJYtW6p58+aSpM6dO6tNmza6/fbbtXHjRhUrVkx5eXmSpIceesh9vsY/XXzxxebx8vLy1LBhQ40aNeqUj8fExHj4DDzXrVs3jRgxQvv27VNERITmzJmj7t27u6+6deI533nnnSedu3JCo0aNznke52ucsmXLat26dVqwYIHmzZunefPmadKkSerRo8cpLyIAAP6KJgUALkDBwcFKTk7WFVdcoTfeeEODBw9W9erVJf3vGu7x8fFn/Pc1atTQhg0bzpr54YcfdNVVV7kPATuTzZs3n3Tfpk2bdNFFF7lXYyx1/q5bt24aPny4PvnkE0VHRyszM1O33Xab+/EyZcooIiJCubm5Z33O5+JcxqlSpYqkU78+GzduPOm+kJAQderUSZ06dVJeXp7uu+8+vfXWW3ryySc9ajIBAM7AOSkAAkq7du3UsmVLjR49WseOHVPZsmXVrl07vfXWW9q9e/dJ+b1797r/+5ZbbtEPP/xwysvgnvg/U127dtXOnTs1YcKEkzJ//vmnsrKy8t23YsWKfIcupaamavbs2Wrfvr2Cg4MlSUWLFpX0v8sfW9StW1cNGzbU9OnTNX36dJUvX15t27Z1Px4cHKxbbrlFn3zyySmbrr8/53NxLuOUL19eTZo00ZQpU5SRkeG+f+HChfr555/zZffv35/v60KFCrlXaP552WcA8Geuf7Enyqlu/oCVFAAB5+GHH1aXLl00efJk3XvvvRozZozatGmjhg0bqm/fvqpevbrS09O1YsUK7dixQz/88IP733388cfq0qWLevfurdjYWB04cEBz5szRuHHj1LhxY911112aMWOG7r33Xi1evFitW7dWbm6ufv31V82YMUMLFixwH34mSQ0aNFCHDh3yXYJYkoYPH+7OnDix/vHHH9dtt92mIkWKqFOnTu7m5VS6deumoUOHKiwsTH369DlpV/qRI0dq8eLFiouLU9++fVWvXj0dOHBAa9eu1ZdffqkDBw545bU+l3GSk5N13XXXqU2bNurdu7cOHDig119/XfXr19eRI0fcubvvvlsHDhzQlVdeqUqVKumPP/7Q66+/riZNmpz20sgA4I8C6XAvLkEM4IJ04hLEq1evPumx3NxcV40aNVw1atRwX7Z269atrh49erjKlSvnKlKkiKtixYqu66+/3vXxxx/n+7f79+939e/f31WxYkVXSEiIq1KlSq6EhIR8l9jNyclxPf/886769eu7QkNDXSVKlHDFxsa6hg8fnu+Sj5JciYmJrvfff99Vs2ZNV2hoqKtp06auxYsXnzTnZ555xlWxYkVXoUKF8l2O+J+XID5h8+bN7kscf/PNN6d8jdLT012JiYmumJgYV5EiRVzlypVzXXXVVa7x48ef7eU1X4LYOs6pLkHscrlcn3zyiatu3bqu0NBQV7169VwzZ850JSQk5LsE8ccff+xq3769q2zZsq6QkBBX5cqVXf/5z39cu3fvPuvzAAB/cOISxOnp6a4///zznG7p6el+cQniIJfLX9opALiwBAUFKTExUW+88YavpwIAcLDMzExFRUUpLS1NkZGR51yrXLlyysjIOOdaBYnDvQAAAAA/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GzVqpLi4OFWpUkUzZsxQnz59TsoPGTJESUlJ7q8zMzPNHRYAAAAQKHy143y3bt20d+9eDR06VGlpaWrSpInmz5/vPpl++/btKlTIuwdoFfgliIsXL65atWppy5Ytp3w8NDT0tMtLAAAAAP7fuTYp/1b//v3Vv3//Uz62ZMmSM/7byZMnezxegW/meOTIEW3dulXly5cv6KEAAAAAXAC83qQ89NBDWrp0qX7//Xd9++23uummmxQcHKzu3bt7eygAAAAgYPhqx3lf8PrhXjt27FD37t21f/9+lSlTRm3atNHKlStVpkwZbw8FAAAABAxfnZPiC15vUqZNm+btkqe1d+9ec/avv/4y5Zo3b26uWaRIEVNu+vTp5ppTpkwx5R588EFzTevV0z788ENT7qmnnjKPvWrVKlNu7dq15po//fSTKdekSRNzzdtuu82UmzNnjrnm8uXLTbl33nnHlHv55ZfNY7do0cKU++ijj8w1H3roIVOuZ8+e5pp9+/Y15WJjY801rT/rf/75pynXtGlT89i33nqrKffiiy+aa15yySWm3OWXX26uOWLECFNu37595pqnO075n44ePWrKzZo1yzy29fsoJSXFXPP666835T777DNzze+//96Uy8rKMte89tprTbk9e/aYa57uHNJ/Otsx6CdUq1bNPPbUqVNNubi4OHPNqKgoUy44ONhc0/oZ261bN3NNb38eHjx40Dz23/ezOJMZM2aYa57YF+Ns5s+fb65p/TzctGmTuearr756xsdPtws7Cl6BnzgPAAAA4NyxkgIAAADAUQKpSSnwq3sBAAAAgCdYSQEAAAD8QCCtpNCkAAAAAH4gkJoUDvcCAAAA4CispAAAAAB+IJBWUmhSAAAAAD8QSE0Kh3sBAAAAcBS/XknxZJdS666v69atM9ds1qyZOWtl3WXZuqu2JN1+++2mXJs2bUy5QoXsvW2ZMmVMuXnz5plrNmzY0JTzZPfgiy66yJT7448/zDW7du1qyo0aNcqU69Kli3nsY8eOmXKePB/rDu3Wnbol+w7gu3fvNtesWrWqKWf9fp85c6Z57EGDBplyy5cvN9e0vu+e7Kber18/U+6GG24w17Q+pyeffNKUe/nll81jr1+/3pQbPHiwuWb79u1NOevnqyT16tXLlHvwwQfNNS+++GJT7oMPPjDXLFWqlCln/X2ZlZVlHtv6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b2+uu2/fPlOuQ4cO5pp9+/Y15b744gtzzRo1aphyzz33nLnmr7/+asp169bNlHv33XfNY1euXNmUa9q0qbnm35tkb+QkmS+R/fXXX5tr1q1b15Rr2LChKffpp5+ax27UqJEp9+WXX5prHjlyxJQbNGiQuea8efNMuRP7LlmMGzfOlBs7dqwp9/jjj5vH7tmzpyn399Xos6lUqZIpt2rVKnPNdu3amXJ33323uebTTz9tylm/57p06WIe+/Dhw6bcDz/8YK7Zv39/Uy48PNxcc8+ePabcfffdZ675z6tpno71NZKkBg0amHL33HOPKefJZ/GhQ4dMuU8++cRc0/r78s033zTXjI2NNeV27Nhhrmmd50svvWTKvf322+axb7jhBlPuqquuMtc83VVd/+mRRx4x19y2bZsp9/erxp7N2f6mycvL0+7du5WRkeHTUxJO/H381ltvefS5cyp//vmn/vOf//j8OZ2Nz6/uBQAAAAB/59V9UgAAAAAUjEDaJ4UmBQAAAPADgdSkcLgXAAAAAEdhJQUAAADwA4G0kkKTAgAAAPiBQGpSONwLAAAAgKOwkgIAAAD4gUBaSaFJAQAAAPwATYqfyMzM9HrWuju7ZN9x1rrruiR9//33ptzKlSvNNQ8ePGjKPfXUU6bczz//bB57zpw5plzbtm3NNfft22fK1axZ01zzyiuvNOXS09PNNWfNmmXK1a5d25SbPXu2eezp06ebcs2aNTPX/PHHH025kJAQc03r++7J7sHWXcXvvfdeU876vCVp+/btppz1e0OS/vOf/5hytWrVMtd86KGHTDnrruuSNG3aNFPO+rPmyc+vdafukSNHmmsOHjzYlPvwww/NNd9//31TLicnx1wzKSnJlPNkx/nHH3/clFu8eLEpd+edd5rHDgoKMuUqVKhgrlmyZElT7ptvvjHXbNWqlSl33333mWt26tTJlPv6669NuS5dupjHbteunSm3Zs0ac03rc8/LyzPXHDNmjCkXFhZmrtm3b98zPn7s2DGPPjsuZGPGjNGLL76otLQ0NW7cWK+//rpatmx5yuzMmTP13HPPacuWLTp+/Lhq1qypBx98UHfddZd5PM5JAQAAAPzAiZWUc715avr06UpKStKwYcO0du1aNW7cWB06dNCePXtOmS9ZsqQef/xxrVixQj/++KN69eqlXr16acGCBeYxaVIAAAAAP+CrJmXUqFHq27evevXqpXr16mncuHG66KKLNHHixFPm27Vrp5tuukl169ZVjRo1NHDgQDVq1MijFUuaFAAAACDAZGZm5rud7tDqnJwcpaSkKD4+3n1foUKFFB8frxUrVpx1HJfLpUWLFmnjxo0eHd5PkwIAAAD4AW+upMTExCgqKsp9S05OPuWY+/btU25urqKjo/PdHx0drbS0tNPONSMjQ8WKFVNISIiuu+46vf7667r66qvNz9WvT5wHAAAAAoU3r+6VmpqqyMhI9/2hoaHnVPefIiIitG7dOh05ckSLFi1SUlKSqlevbr5QA00KAAAAEGAiIyPzNSmnU7p0aQUHB590hdP09HSVK1futP+uUKFCuvjiiyVJTZo00S+//KLk5GRzk8LhXgAAAIAf8MWJ8yEhIYqNjdWiRYvc9+Xl5WnRokXmy3Gf+DeebCnASgoAAADgB3y1mWNSUpISEhLUvHlztWzZUqNHj1ZWVpZ69eolSerRo4cqVqzoPq8lOTlZzZs3V40aNZSdna3PP/9c7733nsaOHWsekyYFAAAAwGl169ZNe/fu1dChQ5WWlqYmTZpo/vz57pPpt2/frkKF/v8AraysLN13333asWOHwsPDVadOHb3//vvq1q2beUyaFAAAAMAP+GolRZL69++v/v37n/KxJUuW5Pv62Wef1bPPPvuvxjnBr5uU6dOnm7NXXXWVKffiiy+aayYkJJhyderUMde0bnLz1ltvmWt27tzZlLvuuutMuY8//tg8tvXkqCZNmphrWscPCQkx19ywYYMp9+ijj5pr3n///abc7NmzTbmwsDDz2AMHDjTlKlasaK45Z84cU27AgAHmml999ZUp98svv5hrHj161JQbMWKEKRcXF2cee+/evabcG2+8Ya55Yin9bF5//XVzzf/85z+m3Lx588w1u3TpYspt2bLFlPv111/NY0dERJhytWvXNtesVq2aKTdy5EhzzdPtzPxPd911l7nmunXrTLmVK1eaa0ZFRZlyW7duNeWuvPJK89jW12jXrl3mmtbvpebNm5trnu4PtX967LHHzDXPdALy382YMcOUK1WqlHns8PBwU+6jjz4y1/zkk09Mufvuu89c0/rz9tNPP5lrbty48YyPHz9+3FzrfPBlk3K++XWTAgAAAASKQGpSuLoXAAAAAEdhJQUAAADwA4G0kkKTAgAAAPgJf2kyzhWHewEAAABwFFZSAAAAAD/A4V4AAAAAHCWQmhQO9wIAAADgKKykAAAAAH4gkFZSglwOm2lmZqZ5t9vly5eb61p3TrbuMixJy5YtM+WGDh1qrmndTf2ee+4x14yOjjblpkyZYspdf/315rGtuxwnJCSYa1p3kr/pppvMNa2ve1JSkrnmjh07TLmYmBhTzpOdiw8cOGDKHTlyxFyzYcOGplyLFi3MNWvUqGHK1alTx1yzffv2plz16tVNuaysLPPYPXr0MOWef/55c80lS5aYcrVq1TLXPHbsmCn3/fffm2vWrFnTlGvQoIEpd+jQIfPY1vcoNDTUXNP6mdSuXTtzzUsuucSUGzJkiLnmp59+asp58vkxZswYU2779u2m3OrVq81jW39ferIL+KZNm0y5iRMnmmuGhYWZcpUqVTLXHD9+vClXqJDtIBhPxrb+HvLkc+aiiy4y5ax/J0hSSkqKKefJ58dLL710xsePHj2qO++8UxkZGYqMjDTX9bYTfx+PGDHC/P13OseOHdPjjz/u8+d0NhzuBQAAAMBRONwLAAAA8AOBdLgXTQoAAADgBwKpSeFwLwAAAACOwkoKAAAA4AcCaSWFJgUAAADwA4HUpHC4FwAAAABHYSUFAAAA8AOBtJJCkwIAAAD4gUBqUjjcCwAAAICjeLySsmzZMr344otKSUnR7t27NWvWLHXu3Nn9eM+ePTVlypR8/6ZDhw6aP3/+OU/2n3bu3GnOLlmyxJTr16+fuWZeXp4pN378eHPNV1991es1J0yYYMrVr1/flCtevLh57P/+97+m3OrVq801N2/ebMpde+215ppbtmwx5QYNGmSueeDAAVPO+nxatWplHnvdunWm3CeffGKu+cILL5hydevWNde0/gxFRkaaa7Zu3dqUq1mzpimXkJBgHvv111835UaPHm2uWbp0aVPuyJEj5prZ2dmmXLt27cw1mzZtasqNHDnSlDt+/Lh57OnTp5tya9asMdecPHmyKefJZ9cNN9xgyk2cONFc86abbjLlKlWqZK759ddfm3Lbtm0z5R588EHz2N26dTPl5s6da6558OBBU86TvynmzJljyvXu3dtcs0OHDqac9efygw8+MI9dtmxZU65Jkybmmunp6abc9ddfb675559/mnK1a9c219y/f79XxjxfAmklxeMmJSsrS40bN1bv3r118803nzJzzTXXaNKkSe6vQ0ND//0MAQAAANCknEnHjh3VsWPHM2ZCQ0NVrly5fz0pAAAAAIGrQM5JWbJkicqWLavatWurX79+Z11KAwAAAHBmJ1ZSzvXmD7x+da9rrrlGN998s6pVq6atW7fqscceU8eOHbVixQoFBweflM/Ozs53fHRmZqa3pwQAAAD4PQ73Oge33Xab+78bNmyoRo0aqUaNGlqyZImuuuqqk/LJyckaPny4t6cBAAAAwE8V+CWIq1evrtKlS5/26klDhgxRRkaG+5aamlrQUwIAAAD8Dod7edGOHTu0f/9+lS9f/pSPh4aGcvUvAAAA4Cw43OsMjhw5km9VZNu2bVq3bp1KliypkiVLavjw4brllltUrlw5bd26VY888oguvvhi8/W/AQAAAJyMJuUM1qxZoyuuuML9dVJSkqT/bXg2duxY/fjjj5oyZYoOHTqkChUqqH379nrmmWdYLQEAAABg4nGT0q5duzN2YAsWLDinCRWUhg0bmnKff/65uebatWtNub9fTOBsNm7caMq1bdvWXHPx4sWmXJ8+fUy5KlWqmMe27vTryc7nISEhptz9999vrmndXfrXX3811/z5559NucOHD5tyOTk55rHnzZtnynmyi32FChVMuYcffthcc8qUKaZcjRo1zDWtu9M/++yzplxKSop57E6dOplyhQvbP3qtz+ebb74x17z11ltNuW+//dZc8/XXXzflrJ8z1p3UJWnGjBmmXLVq1cw1rbu+T5gwwVxz2bJlptySJUu8XtP6O1CS/vvf/5pyAwYMMOU8eS+tn9svvPCCuebTTz9tyo0ZM8Zcs2nTpqbcTz/9ZK759yudnon1+yMqKso8tvX747rrrjPXrFevnin3982/z6ZHjx6mXKlSpcw1z/Z3V1BQkLnW+eIvKyHnqsDPSQEAAABw7gLpcK8Cv7oXAAAAAHiClRQAAADADwTSSgpNCgAAAOAHAqlJ4XAvAAAAAI7CSgoAAADgBwJpJYUmBQAAAPADgdSkcLgXAAAAAEdhJQUAAADwA4G0kuLXTUr58uXN2c2bN5ty1l1kJWn58uWm3Pr1680109LSTLnKlSuba1p3tx46dKgpN3v2bPPYK1asMOX27NljrnnllVeacp7sOGvdNdq6c7EkFS1a1JT7448/TLlXX33VPPaxY8dMuaysLHPNgwcPmnKefL9v27bNlHv00UfNNWvXrm3K7d+/35Rbs2aNeeyqVauacn/++ae5ZufOnU25d955x1xz69atppwnnzPp6emmnPXz4+abbzaPvXLlSlPOk9do1KhRppz181Wyfx9v2LDBXLNRo0am3A033GCuWatWLVMuNTXVlOvZs6fXxx48eLC5ZteuXU257777zlzz7rvvNuWsu8NL9t+Xt912myl3xx13mMd+9913TTlPvo+sP5c7d+4017TueB8SEmKumZiYeMbHs7OzzbXOh0BqUjjcCwAAAICj+PVKCgAAABAoAmklhSYFAAAA8AOB1KRwuBcAAAAAR2ElBQAAAPADgbSSQpMCAAAA+IFAalI43AsAAACAo7CSAgAAAPiBQFpJoUkBAAAA/EAgNSkc7gUAAADAUfx6JeXQoUPm7MMPP2zKrVq1ylzzoYceMuWSkpLMNcuWLWvKrV271lzTOn56erop1759e/PYa9asMeVq165trmmd5+jRo801g4KCTLnffvvNXHP//v2m3KWXXmrKlSpVyutjv/322+aa69atM+W6dOlirlm8eHFTbtOmTeaaU6ZMMeUGDx5syjVs2NA89h9//GHKXX311eaajz76qCn3yCOPmGv+8MMPplzFihXNNXft2mXKxcTEmHKNGzc2j3348GFT7vHHHzfXzMnJMeWOHTtmrml9PZ999llzzWLFiplyHTt2NNe89tprTbkff/zRlPPkc2bp0qWmXEpKirnmxo0bTbndu3eba44ZM8aUe/nll801rc/d+pmwcOFC89gzZ8405W666SZzTevvrOXLl5trWr+PrZ9xkvT555+f8fHc3FxzrfMhkFZS/LpJAQAAAAJFIDUpHO4FAAAAwFFYSQEAAAD8QCCtpNCkAAAAAH6AJgUAAACA4/hLk3GuOCcFAAAAgKOwkgIAAAD4AQ73AgAAAOAogdSkcLgXAAAAAEfx65WUHTt2mLOvvvqqKXfDDTd4ffy+ffuaa27ZssWU+/7778018/LyTLnHHnvMlGvWrJl57Ouvv96Us74/klS1alVT7p577jHXLF26tCkXEhJirvnFF1+YcnfffbcpV6ZMGfPY1l3XK1SoYK552WWXmXKLFi0y17TuYm/dDVmS7rrrLlNu7Nixply3bt3MY1t3WPbk57du3bqm3C+//GKuOXv2bFPOugO2ZP+5DAsLM+U8eY2KFy9uyu3du9dc0/pevv/+++aaJUuWNOXi4uLMNQ8ePGjKWd8fSbrllltMucWLF5tys2bNMo99/PhxU876nktScnKyKffTTz+Zaw4cONCUmzdvnrnmBx98YMr95z//MeWmTp1qHrtKlSqmXEpKirnml19+acpVr17dXPPbb7815c62i/zfde/e/YyPW/+GOl8CaSXFr5sUAAAAIFAEUpPC4V4AAAAAzmjMmDGqWrWqwsLCFBcXp1WrVp02O2HCBF122WUqUaKESpQoofj4+DPmT4UmBQAAAPADJ1ZSzvXmqenTpyspKUnDhg3T2rVr1bhxY3Xo0EF79uw5ZX7JkiXq3r27Fi9erBUrVigmJkbt27fXzp07zWPSpAAAAAB+wFdNyqhRo9S3b1/16tVL9erV07hx43TRRRdp4sSJp8x/8MEHuu+++9SkSRPVqVNHb7/9tvLy8jw6b5UmBQAAAMAp5eTkKCUlRfHx8e77ChUqpPj4eK1YscJU4+jRozp+/Lj5AiISJ84DAAAAfsGbJ85nZmbmuz80NFShoaEn5fft26fc3FxFR0fnuz86Olq//vqracxHH31UFSpUyNfonA0rKQAAAIAf8ObhXjExMYqKinLfrJfr9tTIkSM1bdo0zZo1y3wZeomVFAAAACDgpKamKjIy0v31qVZRpP/tJRccHKz09PR896enp6tcuXJnHOOll17SyJEj9eWXX6pRo0YezY+VFAAAAMAPeHMlJTIyMt/tdE1KSEiIYmNj8530fuIk+FatWp12ri+88IKeeeYZzZ8/X82bN/f4ubKSAgAAAPgBX23mmJSUpISEBDVv3lwtW7bU6NGjlZWVpV69ekmSevTooYoVK7oPGXv++ec1dOhQTZ06VVWrVlVaWpokqVixYipWrJhpTI+alOTkZM2cOVO//vqrwsPDdemll+r5559X7dq13Zljx47pwQcf1LRp05Sdna0OHTrozTffPOlkG2/Yt2+fORsTE2PK1atXz1zztddeM+WGDRtmrnngwAFTzpPjBu+66y5T7rHHHjPljh49ah77jz/+MOV69+5trvnDDz+Ycp78EI4dO9aUu+iii8w1J0+ebMpt27bNlNuyZYt57KJFi5pygwcPNtdcvXq1KWf9uZCkO+64w5R7+OGHzTVPfBCeTc2aNU25rVu3msf+8MMPTTnr55Fkfy8//vhjc80iRYqYci1atDDXTElJMeXKli1rylnfH0las2aNKffee++Za27evNmUCw8PN9ccPXq0KefJ5+HAgQNNuZdfftlcMysry5Rbt26dKffEE0+Yx+7cubMpN3ToUHPN6dOnm3LffvutuaZ1nn/++ae5pvV7yfqZ5Ml+FE8//bQpd+jQIXNN6wnVp9tn41SaNm1qyn3++efmmu3btz/j4zk5OXrnnXfM9S5U3bp10969ezV06FClpaWpSZMmmj9/vvvv++3bt6tQof8/QGvs2LHKycnRrbfemq/OsGHD9NRTT5nG9KhJWbp0qRITE9WiRQv99ddfeuyxx9S+fXv9/PPP7l+kDzzwgP773//qo48+UlRUlPr376+bb75Zy5cv92QoAAAAAH/jq5UUSerfv7/69+9/yseWLFmS7+vff//9X43xdx41KfPnz8/39eTJk1W2bFmlpKSobdu2ysjI0DvvvKOpU6fqyiuvlCRNmjRJdevW1cqVK3XJJZec84QBAACAQOTLJuV8O6cT5zMyMiTJvTFLSkqKjh8/nu8ayHXq1FHlypXNm70AAAAACGz/+sT5vLw8DRo0SK1bt1aDBg0k/e9Y8JCQEBUvXjxfNjo6+rTHiWdnZys7O9v99T83lgEAAADASopJYmKiNmzYoGnTpp3TBJKTk/NtJOPJCaUAAABAoPDmJYid7l81Kf3799fcuXO1ePFiVapUyX1/uXLllJOTc9LVH8602cuQIUOUkZHhvqWmpv6bKQEAAAC4QHjUpLhcLvXv31+zZs3SV199pWrVquV7PDY2VkWKFMm32cvGjRu1ffv20272EhoaetJmMgAAAADyC6SVFI/OSUlMTNTUqVM1e/ZsRUREuM8ziYqKUnh4uKKiotSnTx8lJSWpZMmSioyM1IABA9SqVSuu7AUAAACcg0A6J8WjJuXEhnft2rXLd/+kSZPUs2dPSdIrr7yiQoUK6ZZbbsm3mSMAAACAfy+QmpQgl8NmmpmZqaioKFM2ODjYXHfu3LmmXOHC9r7tq6++MuVKlChhrnn48GFTzrrTryStWrXKlEtISDDlXnjhBfPY1gsr3Hfffeaaffv2NeU82W338ssvN+U82bXZuvv4jTfeaMp58hpNnDjRlDt69Ki5pnUH7oULF5prnvgfH96sOWLECFOuQoUKptzfd9A9m2+++caU8+Tcu9Odz/dPBw8eNNe0vu+NGzc21zzbrs0nWD83PXk+ISEhptzu3bvNNW+66SZT7rnnnjPXPHDggCl38cUXm2t27drVlJsxY4a55kUXXWTKHT9+3JSbMmWKeWzr7uOlS5c214yLizPlrLvIS9IXX3xhykVERJhrWsffvn27KVe5cmXz2NbfLw899JC55vDhw025nJwcc802bdqYcieuOmvx888/n/HxvLw8paWlKSMjw6enJJz4+7hr167mz7zTycnJ0YwZM3z+nM7mX1+CGAAAAMD55bD1hQJDkwIAAAD4gUA63OucdpwHAAAAAG9jJQUAAADwA4G0kkKTAgAAAPiBQGpSONwLAAAAgKOwkgIAAAD4gUBaSaFJAQAAAPxAIDUpHO4FAAAAwFFYSQEAAAD8QCCtpPh1k1KkSBFz9p577jHlunXrZq754YcfmnL16tUz19yzZ48pFx4ebq5ZqVIlU6527dqm3PXXX28e+8iRI6bcVVddZa65Zs0aU+7HH3801/zmm29Mud69e5trVq9e3ZRr166dKXfHHXeYxy5RooQpd9NNN5lr1q1b15SLj48315w4caIpN2HCBHPNyMhIU27Dhg2m3KZNm8xjz5kzx5SrWLGiuWbbtm1Nuddee81cs2jRoqbc7t27zTV37dplyu3cudOU+89//mMee9asWaacJz9DI0eONOWaNGlirtmvXz9TrmvXruaa27dvN+USEhLMNa0/b3PnzjXlNm7caB47KSnJ6zUfe+wxU27VqlXmmp999pkpd8MNN5hrhoSEmHKTJk0y5fr3728ee8qUKeas1dSpU025WrVqmWteffXVppz194Ak9ejR44yP//nnnx59HhW0QGpSONwLAAAAgKP49UoKAAAAECgCaSWFJgUAAADwA4HUpHC4FwAAAABHYSUFAAAA8AOBtJJCkwIAAAD4gUBqUjjcCwAAAICjsJICAAAA+IFAWkmhSQEAAAD8AE2Kn7DuIitJNWvWNOWsu4RLUsOGDU25r7/+2lzz/vvvN+XKlCljrvn999+bclFRUaZcTEyMeew///zTlKtataq5Zl5enik3atQoc80nn3zSlAsNDTXXLF26tClXsmRJU86TnYuLFCliyk2ePNlcs1q1aqbczTffbK5p3dW7UaNG5prW99L6ul9zzTXmsQcNGmTKWXeWlqR58+aZck2bNjXXvPvuu025hQsXmmu2aNHClHv44YdNOevu7JI0ZMgQU27Pnj3mmm3btjXlDhw4YK65fPlyUy47O9tcs127dqbcM888Y6752muvmXKFC9v+hLA+b8n+uzonJ8dc0/r7snz58uaasbGxplzlypXNNfft22fK1a9f3+tj//bbb6Zcly5dzDWDgoJMue7du5trPvroo6bcrbfeaq65a9euMz6elZVlrgXv8usmBQAAAAgUrKQAAAAAcJRAalK4uhcAAAAAR2ElBQAAAPADgbSSQpMCAAAA+AGaFAAAAACOEkhNCuekAAAAAHAUVlIAAAAAP+EvKyHniiYFAAAA8AOBdLhXkMthM83MzDTvfH7o0CFz3a5du5pyDz74oNdrbtq0yVwzLS3NlOvTp4+5pnU318zMTFOuSpUq5rHfffddU866M70kxcfHm3LW3b8l6ZFHHjHlnn76aXNN6w7P1t3HZ86caR7buhN0s2bNzDVff/11U+6OO+4w15wwYYIp98orr5hr3nbbbabcPffcY8rt2LHDPPb9999vyv3000/mmhs3bjTlFixYYK7Zq1cvU876WSxJjRs3NuX27t1ryv3666/msevUqWPKff/99+aa7du3N+VatWplrtmvXz9TzrrbvSSlpqaacgMGDDDX3LJliyln/T100003mcdevXq1KefJ76HWrVubcm3atDHXDA8PN+U82fX9iiuuMOVKlixpyu3cudM89tq1a025hx9+2FzzjTfeMOU8+Rvp888/N+Wsv1cl6eOPPz7j43l5edq7d68yMjIUGRlpruttJ/4+vuqqq8y/40/nr7/+0qJFi3z+nM6GlRQAAADADwTSSgpNCgAAAOAHAqlJ4epeAAAAAByFlRQAAADADwTSSgpNCgAAAOAHAqlJ4XAvAAAAAI7CSgoAAADgBwJpJYUmBQAAAPADgdSkcLgXAAAAAEdhJQUAAADwA4G0kuLXTcoPP/zg9ZqXXnqpObts2TJTbubMmeaajRo1MuWuvfZac80tW7aYck2bNjXl9u3bZx7b+oPw6aefmmved999plxGRoa55tChQ025hx56yFzz9ttvN+XeeecdU27EiBHmsd99911TrmzZsuaaL7zwginXrFkzc81x48aZcsOGDTPXvOeee0y5ihUrmnKfffaZeew+ffqYco8//ri55p9//mnK1apVy1zz6aefNuV27txprlmhQgVTLiwszJQ7dOiQeewPP/zQlIuOjjbXbNKkiSnXoEEDc80vvvjClLvhhhvMNSdMmGDKeTLP8PBwU27v3r2mnPWzULJ/JvTq1ctc8+qrrzblfvvtN3PNiIgIU876e1Wy/x6Miooy5S655BLz2P379zflkpKSzDWfeOIJU876d48kTZw40ZTz5G+knj17nvHx7OxsjR492lyvoAVSk+LR4V7Jyclq0aKFIiIiVLZsWXXu3FkbN27Ml2nXrp2CgoLy3e69916vThoAAADAhcujJmXp0qVKTEzUypUrtXDhQh0/flzt27dXVlZWvlzfvn21e/du9836f2ABAAAAnNqJlZRzvfkDjw73mj9/fr6vJ0+erLJlyyolJUVt27Z133/RRRepXLly3pkhAAAAAA73sjpxzH/JkiXz3f/BBx+odOnSatCggYYMGaKjR4+etkZ2drYyMzPz3QAAAAAErn994nxeXp4GDRqk1q1b5zsh7/bbb1eVKlVUoUIF/fjjj3r00Ue1cePG0548npycrOHDh//baQAAAAABIZBWUv51k5KYmKgNGzbom2++yXf/36+s07BhQ5UvX15XXXWVtm7dqho1apxUZ8iQIfmuFpGZmamYmJh/Oy0AAADggkSTchb9+/fX3LlztWzZMlWqVOmM2bi4OEn/uwzuqZqU0NBQhYaG/ptpAAAAALgAedSkuFwuDRgwQLNmzdKSJUtUrVq1s/6bdevWSZLKly//ryYIAAAAgJWU00pMTNTUqVM1e/ZsRUREKC0tTdL/NhYKDw/X1q1bNXXqVF177bUqVaqUfvzxRz3wwANq27atR5v1AAAAAMgvkJqUIJcHMw0KCjrl/ZMmTVLPnj2VmpqqO++8Uxs2bFBWVpZiYmJ000036YknnlBkZKRpjMzMTPNuqpMmTbJOXZdffrkp98/NKc9k8eLFplx6erq55p133mnKxcbGmmtad7e27qB78cUXm8du1aqVKefJSpt1J/lPPvnEXNO6S3qpUqXMNY8fP27KLV++3JQrWrSoeeznn3/elPNkZ+sDBw6YctOmTTPX7NGjhylXuXJlc83Zs2ebciNGjDDl8vLyzGPXrFnTlPNkx3nrLtRLliwx17ziiitMuZtuuslcMycnx5QrXry4KdeiRQvz2NZDhp955hlzTevu45MnTzbXfPDBB005T3Zot/5c/ve//zXX/Pu5pWdiOZpCktauXWse+8Qh4mfjyef72Q5LPyEkJMRcs0SJEl4dW5IaN25syvXr18+Us/7dI0n16tUz5T7++GNzzd27d5tyJ/6Ht8XAgQNNufvuu89c88cffzzj41lZWbr++uuVkZFh/lu2IJz4+7hFixYqXPhfn1IuSfrrr7+0evVqnz+ns/H4cK8ziYmJ0dKlS89pQgAAAABOFkgrKefWigEAAAA4L2hSAAAAADiOvzQZ5+qcdpwHAAAAAG+jSQEAAAD8wInDvc719m+MGTNGVatWVVhYmOLi4rRq1arTZn/66Sfdcsstqlq1qoKCgjR69GiPx6NJAQAAAPyAr5qU6dOnKykpScOGDdPatWvVuHFjdejQQXv27Dll/ujRo6pevbpGjhypcuXK/avnSpMCAAAA4LRGjRqlvn37qlevXqpXr57GjRuniy66SBMnTjxlvkWLFnrxxRd12223mS8T/080KQAAAIAf8OZKSmZmZr5bdnb2KcfMyclRSkqK4uPj3fcVKlRI8fHxWrFiRYE9V5oUAAAAwA94s0mJiYlRVFSU+5acnHzKMfft26fc3FxFR0fnuz86OtqjzTg9xSWIAQAAgACTmpqab8f5f3tYVkHx6yZlxIgR5mzp0qVNuW+//dZcc/r06abcf/7zH3PNlStXmnKfffaZuWZWVpYpd/ToUVOuY8eO5rHvv/9+U6548eLmmrVr1zblbrnlFnPNMWPGmHKDBg0y17z88stNuXfffdeUGzJkiHnsunXrmnJffPGFuebPP/9syoWHh5tr5uXlmXLW7yNJatSokSk3f/58U+7ZZ581j/3iiy+acjNnzjTXfPzxx00568+vJPNJjBEREeaat956qyn3119/mXKvvvqqeez27dubck888YS55iOPPGLKXXPNNeaaPXv29GpOkgoXtv0ar1mzprmmNXvllVeacrfffrt57M8//9yUs352SPb38rbbbjPX7N+/vykXFhZmrnnnnXeacu+9954p161bN/PY1po//PCDuebIkSNNOU8OF9qwYYMp9+uvv5prPvnkk2d83PqZdb54czPHyMjIfE3K6ZQuXVrBwcFKT0/Pd396evq/PinegsO9AAAAAD/gi6t7hYSEKDY2VosWLXLfl5eXp0WLFqlVq1befopufr2SAgAAAKBgJSUlKSEhQc2bN1fLli01evRoZWVlqVevXpKkHj16qGLFiu7zWnJyctxHYOTk5Gjnzp1at26dihUrposvvtg0Jk0KAAAA4Ae8ebiXJ7p166a9e/dq6NChSktLU5MmTTR//nz3yfTbt29XoUL/f4DWrl271LRpU/fXL730kl566SVdfvnlWrJkiWlMmhQAAADAD/iqSZH+dy7W6c7H+mfjUbVq1XOeJ+ekAAAAAHAUVlIAAAAAP+DLlZTzjSYFAAAA8AOB1KRwuBcAAAAAR2ElBQAAAPADgbSSEuRy2EwzMzMVFRVlylp39JbsO8m3bt3aXNO6O+3AgQPNNYcNG2bKzZgxw1yzb9++ppx1R/PFixebx37++edNuU6dOplrnm132BOqVKlirvnyyy+bcp7sOG/dwbdatWqm3Pjx481jHzhwwJQrX768uaaVdYd0SercubMpt2nTJnPNd955x5TLysoy5davX28e27qzdocOHcw1b7nlFlMuKSnJXHP48OGmXEhIiLmmddfoE5erPBtPfjX99ttvply7du3MNT/77DNT7uGHHzbX3Lp1qyl33333mWvec889ptyNN95ormn9/ujdu7cp58nP75o1a0y5Q4cOmWvWr1/flIuJifF6zeXLl5trxsfHm3LHjx835Tz5+X3zzTdNucKF7f9vu0SJEqac9Xe6JzUfeeQRc80uXbqc8fGjR4+qe/fuysjIMO3OXlBO/H1cu3ZtBQcHn1Ot3Nxcbdy40efP6Ww43AsAAACAo3C4FwAAAOAHAulwL5oUAAAAwA8EUpPC4V4AAAAAHIWVFAAAAMAPBNJKCk0KAAAA4AcCqUnhcC8AAAAAjsJKCgAAAOAHAmklhSYFAAAA8BP+0mScK5oUAAAAwA+wkuInevfubc4mJiaacmXKlDHXfOCBB0y5+vXrm2t26dLFlIuLizPXrFSpkin3888/m3JHjhwxjx0TE2PKzZ8/31xzwYIFptwvv/xirvnqq6+acmlpaeaaixYtMmctRowYYc6+/fbbplzXrl3NNS+55BJTzpOfy+rVq5ty8+bNM9e0fh83bNjQlOvevbt57Msuu8yUCw4ONtfctWuXKbd9+3Zzzdq1a5tyl19+ublmuXLlTLn33nvPlPPke/PTTz815SpWrGiumZCQYModO3bMXHPp0qWm3O+//26uec8995hymzZtMtc8ePCgKRcZGWnK1a1b1zz2G2+8YcpZf/9K9s+EPn36mGu2bNnSlOvWrZu55nPPPWfKWX9fhYaGmseeNm2aKdevXz9zzYiICFPupZdeMtdMSkoy5azvjyTVqlXrjI978jcPvMuvmxQAAAAgULCSAgAAAMBRAqlJ4RLEAAAAAByFlRQAAADADwTSSgpNCgAAAOAHAqlJ4XAvAAAAAI7CSgoAAADgBwJpJYUmBQAAAPADgdSkcLgXAAAAAEcJcjmsncrMzFRUVJQpm5KSYq579OhRU278+PHmmtadfpcsWWKu+c4775hy7dq1M9f8z3/+Y8rNmDHDlDtw4IB5bOvu40899ZS5pnV32pycHHPNiRMnmnI1atQw13z55ZdNuSFDhphyX3/9tXns1NRUU+6xxx4z17Tugr1t2zZzzQYNGphyLVq0MNeMiYkx5aw7W3vyfdSjRw9TbvLkyeaa1td9zpw55pqJiYmm3OrVq801rZ+H+/fvN+WmTp1qHtv6/XH48GFzzerVq5tys2fPNte0vkbff/+9uWZwcLApV6ZMGXNNa/bZZ5815aZPn24e2/r78s033zTXfOWVV0w56/ORpBtuuMGUs+4OL0k33nijOWvRvHlzczY8PNyUa9Wqlbmm9e8ua06SSpUqZcp98skn5pr9+/c/4+OHDx9WrVq1lJGRocjISHNdbzvx93GFChVUqNC5rTHk5eVp165dPn9OZ+PRsxw7dqwaNWqkyMhIRUZGqlWrVpo3b5778WPHjikxMVGlSpVSsWLFdMsttyg9Pd3rkwYAAAACzYnDvc715g88alIqVaqkkSNHKiUlRWvWrNGVV16pG2+8UT/99JMk6YEHHtBnn32mjz76SEuXLtWuXbt08803F8jEAQAAAFyYPDpxvlOnTvm+HjFihMaOHauVK1eqUqVKeueddzR16lRdeeWVkqRJkyapbt26WrlypS655BLvzRoAAAAIMJw4b5Cbm6tp06YpKytLrVq1UkpKio4fP674+Hh3pk6dOqpcubJWrFhx2jrZ2dnKzMzMdwMAAACQH4d7ncH69etVrFgxhYaG6t5779WsWbNUr149paWlKSQkRMWLF8+Xj46OVlpa2mnrJScnKyoqyn2znvQKAAAA4MLkcZNSu3ZtrVu3Tt9995369eunhIQE/fzzz/96AkOGDFFGRob7Zr0qEQAAABBIAmklxePNHENCQnTxxRdLkmJjY7V69Wq9+uqr6tatm3JycnTo0KF8qynp6ekqV67caeuFhoYqNDTU85kDAAAAAYRzUjyQl5en7OxsxcbGqkiRIlq0aJH7sY0bN2r79u0eXVcbAAAAQGDzaCVlyJAh6tixoypXrqzDhw9r6tSpWrJkiRYsWKCoqCj16dNHSUlJKlmypCIjIzVgwAC1atWKK3sBAAAA5yiQVlI8alL27NmjHj16aPfu3YqKilKjRo20YMECXX311ZL+t6troUKFdMsttyg7O1sdOnTwaFdYAAAAAKdGk3Ia77zzzhkfDwsL05gxYzRmzJhzmpRVmzZtzNnRo0ebcp5cAvnw4cOm3LXXXmuu2bVrV1MuPDzcXDMqKsqUu++++0y5Z555xjx2yZIlTbm77rrLXLNixYqmXN26dc01a9WqZcoNHTrUXPOPP/4w5SZOnGjKHTx40Dx2x44dTbkff/zRXNN67pj1+UhS69atTblSpUqZazZq1MiU++9//2vKxcbGmseOjIw05X777TdzzbJly5pycXFx5ppFixY15c50ZcZ/mjt3ril3Yh+ts7n88svNY+/Zs8eU27Fjh7lmy5YtTblRo0aZa1q/51599VVzzYiICFPO+nMhSYUK2Y4E//jjj025nTt3msdetWqVKZeXl2euaf259OQz1vq7rUOHDuaagwcPNuXatWtnyo0cOdI89vLly025E/9T2mL79u2m3DXXXGOuuWnTJlOuUqVK5ppHjx494+PZ2dnmWvAuj0+cBwAAAHD+sZICAAAAwFECqUk556t7AQAAAIA3sZICAAAA+Al/WQk5VzQpAAAAgB/wRoPiL00OTQoAAADgBwKpSeGcFAAAAACOwkoKAAAA4AcCaSXFcU2KJy+cJ9k///zTlDt+/Li55tk2ADrhyJEj5ppWf/31lzkbFBRkylk3p8zJyTGPbX3u1vdHss/Tk+8P6+tpHVuyv065ubmmnCebl1nHPnbsmLmm9fUsiNfd+rMm2Tdktb7unny/W78/PPmcsY7vyWeCdXMy62sk2Z+T9Wfdkw3UCuI1ss4zKyvLXNP6nDzZVNj68+bJe2mtaX3unvz8Wr+PPPk8tI7vSU3rZ6cnP+vW35fW98eT31cF8RpZv489+bm0ju/J9/vZfi5PfL445Q/7QGpSglwOm+mOHTsUExPj62kAAAAAkqTU1FSPdrL3tszMTEVFRSkiIsL8P59Px+Vy6fDhw8rIyFBkZKSXZuh9jltJqVChglJTU096EzIzMxUTE6PU1FRHv6CBivfH2Xh/nI33x/l4j5yN98fZ/Pn9OfEHfYUKFXw9FUmBtZLiuCalUKFCZ+xUIyMj/e4bPJDw/jgb74+z8f44H++Rs/H+OJu/vj9RUVG+noJbIDUpXN0LAAAAgKM4biUFAAAAwMkCaSXFb5qU0NBQDRs2TKGhob6eCk6B98fZeH+cjffH+XiPnI33x9l4f7wnkJoUx13dCwAAAMD/O3F1r/DwcK9c3evPP//k6l4AAAAAzl0graTQpAAAAAB+IJCaFK7uBQAAAMBRWEkBAAAA/AArKQ4zZswYVa1aVWFhYYqLi9OqVat8PaWAtWzZMnXq1EkVKlRQUFCQPv3003yPu1wuDR06VOXLl1d4eLji4+O1efNm30w2wCQnJ6tFixaKiIhQ2bJl1blzZ23cuDFf5tixY0pMTFSpUqVUrFgx3XLLLUpPT/fRjAPP2LFj1ahRI/eGZq1atdK8efPcj/P+OMvIkSMVFBSkQYMGue/jPfKdp556SkFBQfluderUcT/Oe+MMO3fu1J133qlSpUopPDxcDRs21Jo1a9yP83fCuXG5XF65+QPHNynTp09XUlKShg0bprVr16px48bq0KGD9uzZ4+upBaSsrCw1btxYY8aMOeXjL7zwgl577TWNGzdO3333nYoWLaoOHTro2LFj53mmgWfp0qVKTEzUypUrtXDhQh0/flzt27dXVlaWO/PAAw/os88+00cffaSlS5dq165duvnmm30468BSqVIljRw5UikpKVqzZo2uvPJK3Xjjjfrpp58k8f44yerVq/XWW2+pUaNG+e7nPfKt+vXra/fu3e7bN998436M98b3Dh48qNatW6tIkSKaN2+efv75Z7388ssqUaKEO8PfCTBzOVzLli1diYmJ7q9zc3NdFSpUcCUnJ/twVnC5XC5JrlmzZrm/zsvLc5UrV8714osvuu87dOiQKzQ01PXhhx/6YIaBbc+ePS5JrqVLl7pcrv+9F0WKFHF99NFH7swvv/zikuRasWKFr6YZ8EqUKOF6++23eX8c5PDhw66aNWu6Fi5c6Lr88stdAwcOdLlc/Az52rBhw1yNGzc+5WO8N87w6KOPutq0aXPax/k74d/LyMhwSXIVLlzYVaRIkXO6FS5c2CXJlZGR4eundUaOXknJyclRSkqK4uPj3fcVKlRI8fHxWrFihQ9nhlPZtm2b0tLS8r1fUVFRiouL4/3ygYyMDElSyZIlJUkpKSk6fvx4vvenTp06qly5Mu+PD+Tm5mratGnKyspSq1ateH8cJDExUdddd12+90LiZ8gJNm/erAoVKqh69eq64447tH37dkm8N04xZ84cNW/eXF26dFHZsmXVtGlTTZgwwf04fyecOxeHeznDvn37lJubq+jo6Hz3R0dHKy0tzUezwumceE94v3wvLy9PgwYNUuvWrdWgQQNJ/3t/QkJCVLx48XxZ3p/za/369SpWrJhCQ0N17733atasWapXrx7vj0NMmzZNa9euVXJy8kmP8R75VlxcnCZPnqz58+dr7Nix2rZtmy677DIdPnyY98YhfvvtN40dO1Y1a9bUggUL1K9fP91///2aMmWKJP5OgGe4uhdwAUpMTNSGDRvyHa8NZ6hdu7bWrVunjIwMffzxx0pISNDSpUt9PS1ISk1N1cCBA7Vw4UKFhYX5ejr4h44dO7r/u1GjRoqLi1OVKlU0Y8YMhYeH+3BmOCEvL0/NmzfXc889J0lq2rSpNmzYoHHjxikhIcHHs7sweGMVhJUULyhdurSCg4NPujpHenq6ypUr56NZ4XROvCe8X77Vv39/zZ07V4sXL1alSpXc95crV045OTk6dOhQvjzvz/kVEhKiiy++WLGxsUpOTlbjxo316quv8v44QEpKivbs2aNmzZqpcOHCKly4sJYuXarXXntNhQsXVnR0NO+RgxQvXly1atXSli1b+PlxiPLly6tevXr57qtbt677sDz+Tjh3vjzcy9Or7X700UeqU6eOwsLC1LBhQ33++ecejefoJiUkJESxsbFatGiR+768vDwtWrRIrVq18uHMcCrVqlVTuXLl8r1fmZmZ+u6773i/zgOXy6X+/ftr1qxZ+uqrr1StWrV8j8fGxqpIkSL53p+NGzdq+/btvD8+lJeXp+zsbN4fB7jqqqu0fv16rVu3zn1r3ry57rjjDvd/8x45x5EjR7R161aVL1+enx+HaN269UmXvt+0aZOqVKkiib8T/JmnV9v99ttv1b17d/Xp00fff/+9OnfurM6dO2vDhg32QQvwpHyvmDZtmis0NNQ1efJk188//+y65557XMWLF3elpaX5emoB6fDhw67vv//e9f3337skuUaNGuX6/vvvXX/88YfL5XK5Ro4c6SpevLhr9uzZrh9//NF14403uqpVq+b6888/fTzzC1+/fv1cUVFRriVLlrh2797tvh09etSduffee12VK1d2ffXVV641a9a4WrVq5WrVqpUPZx1YBg8e7Fq6dKlr27Ztrh9//NE1ePBgV1BQkOuLL75wuVy8P07096t7uVy8R7704IMPupYsWeLatm2ba/ny5a74+P9r735eoYviOI5/56Fzp0kmRUO3YaUsJlloxMZint2U2LjZzMRGSZGFhZiysBSlLGYjhSyVjZJkI+QfEKUoxE5JbL7P4sllHqPGj5rzNO9XncWce++5dzqzuJ/mnu/9rdXV1Xp7e6uqzI0Njo6OtLy8XGdmZvT09FRXV1c1FArpysqKvw/3CV/zUt1LRDQQCHyrvYzzmepen62229vbq8lkMqevra1NBwcHCz6n9SFFVXVhYUHr6+vVGKPxeFwPDg6KfUkla3d31/9xv23pdFpV/5YXnJqa0kgkoo7jaCKR0JOTk+JedInINy8ioktLS/4+j4+POjQ0pFVVVRoKhbSnp0evr6+Ld9ElZmBgQBsaGtQYozU1NZpIJPyAosr82OjfkMIcFY/neVpXV6fGGHVdVz3P07OzM387c2OHzc1NjcVi6jiONjU1aTabzdnOfcLXvA0pP9UKDSlPT09aVlaW89oJVdVUKqVdXV15j4lGozo3N5fTl8lktLm5ueDvHFD9T1bPAAAAACXo/v5ewuHwj455eXkplZWV/mfHccRxnHf7XV1dieu6sr+/n/NY3vj4uOzt7cnh4eG7Y4wxsry8LH19fX7f4uKiTE9Pv1uT9BGr16QAAAAApc4Y86PFBSoqKiQajUo4HPZbvtLrxUQJYgAAAMBiwWBQzs/P5fn5+UfGU1UJBAI5ffn+RRH5WrXd2trab1dxI6QAAAAAlgsGg0V5h9Pbarvd3d0i8lptd3h4OO8x7e3tsrOzI6Ojo37f9vb2p6q4EVIAAAAAfGhsbEzS6bS0trZKPB6X+fl5eXh4kP7+fhERSaVS4rqu/8jYyMiIdHZ2yuzsrCSTSVlfX5fj42PJZrMFn5OQAgAAAOBDnufJ3d2dZDIZubm5kZaWFtna2pJIJCIiIhcXF/Lr1+tS946ODllbW5PJyUmZmJiQxsZG2djYkFgsVvA5qe4FAAAAwCpU9wIAAABgFUIKAAAAAKsQUgAAAABYhZACAAAAwCqEFAAAAABWIaQAAAAAsAohBQAAAIBVCCkAAAAArEJIAQAAAGAVQgoAAAAAqxBSAAAAAFiFkAIAAADAKn8AnPPJ/LngLTgAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.gridspec import GridSpec\n", "\n", "fig = plt.figure(layout=\"constrained\", figsize=(8, 8))\n", "gs = GridSpec(2, 2, figure=fig)\n", "ax1 = fig.add_subplot(gs[0, 0]) \n", "ax2 = fig.add_subplot(gs[0, 1]) \n", "ax3 = fig.add_subplot(gs[1, :]) \n", "\n", "im1 = ax1.imshow(input_array.T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax1.set_title('Input')\n", "im2 = ax2.imshow(activity_array.T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax2.set_title('Feature')\n", "im3 = ax3.imshow(weights.T, interpolation='nearest', cmap=plt.cm.gray, vmin=0.0, vmax=0.5)\n", "ax3.set_title('Receptive fields')\n", "fig.colorbar(im3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One or a few bars are present in `inp`, a few neurons react in `pop`, but the receptive fields are all random. \n", "\n", "Let's now define a `for` loop where the `trial()` method is called repetitively 10000 times:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "inputs = []; features = []; rfs = []\n", "\n", "T = 10000\n", "for t in range(T):\n", " \n", " # Single trial\n", " input_r, feature_r, weights = trial()\n", "\n", " # Record every 10 trials\n", " if t % 10 == 0:\n", " inputs.append(input_r)\n", " features.append(feature_r)\n", " rfs.append(weights)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now visualize the activities and receptive fields after learning:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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LCzUvn37zOMKOI7jHPHSAQAAAGh18vLyNGzYMD300EOSpFAopJycHF133XWaPHmyqY1TTz1V5513nm6//XY5jqPs7Gz993//t2666SZJUnV1tTIzMzVv3jxdcsklpjbjDm9xAAAAAETDvn371NjYGJW2HMdRIBCIeC8YDCoYDB4U29jYqLVr12rKlCnh92JiYlRQUKCVK1ea+nrllVe0ceNG3X333ZKkzZs3q7y8XAUFBeG41NRU5eXlaeXKlSQpAAAAgN/t27dPffv2VXl5eVTaS0pKUl1dXcR706ZN02233XZQ7M6dO9XU1KTMzMyI9zMzM/XBBx8cso/q6mr16NFDDQ0Nio2N1e9//3udc845khRejubadLOMJCkAAACARxobG1VeXq4tW7YoJSXliNqqqalRr169VFZWFtFWc7MoRyI5OVnr169XXV2dSktLVVxcrGOOOUYjR46MWh8kKQAAAIDHUlJSjjhJcdtWWlqaYmNjVVFREfF+RUWFsrKyDvl3MTExOu644yRJQ4YM0b/+9S+VlJRo5MiR4b+rqKhQ9+7dI9ocMmSIeRl4uhcAAADgMcdxovJyIz4+XkOHDlVpaWn4vVAopNLSUuXn55vbCYVCamhokCT17dtXWVlZEW3W1NTozTffdNUmMykAAACAxw4nyWiuDbeKi4s1fvx45ebmavjw4Zo5c6bq6+s1YcIESdK4cePUo0cPlZSUSJJKSkqUm5urY489Vg0NDfrb3/6mP/3pT5o9e7YkKRAIaNKkSbrjjjvUr18/9e3bV7feequys7M1ZswY87iYSQGAVqRPnz66/PLLj3q/X375pW655Rbl5OQoJiYm/EETCASavRnzu3z66acKBAKaN2/ed8Zefvnl6tOnj+s+AADfbezYsbrvvvs0depUDRkyROvXr9eSJUvCN75v2bJF27dvD8fX19fr5z//uU466SSNGDFCzz33nJ588kn97Gc/C8fccsstuu6663T11Vdr2LBhqqur05IlS5SQkGAeFzMpANqEefPmhf/VR5JiY2OVmZmpc845R3feead69Ojh4ejceeONN/T3v/9dkyZNUufOnb0ejiTpscce07333qtJkybp1FNPVa9evbweEgC0KV7NpEjSxIkTNXHixGZ/t3z58oif77jjDt1xxx3f2l4gENCvf/1r/frXvz6s8UgkKQDamF//+tfq27ev9u3bp1WrVmnevHl6/fXXtWHDBlf/guOlN954Q9OnT9fll19+UJKyceNGxcQc/UnwV155RT169NADDzwQ8f7evXsVF8dHCQAcKS+TFD/ikwVAmzJ69Gjl5uZKkn72s58pLS1Nd999t1588UVdfPHFHo/uyEX7MZJWlZWVzc7qtJbEDwDQunBPCoA27fTTT5ckffzxxxHvf/DBB/rxj3+srl27KiEhQbm5uXrxxRcP+vuqqirdeOON6tOnj4LBoHr27Klx48Zp586d4ZiGhgZNmzZNxx13nILBoHJycnTLLbeEn3RyQCAQ0MSJE/XnP/9ZJ5xwghISEjR06FC99tpr4ZjbbrtNN998s6SvnpASCAQUCAT06aefSoq8J2XNmjUKBAJ6/PHHDxr30qVLFQgE9NJLL4Xf27p1q6644gplZmYqGAzqpJNO0mOPPfat6+/AvSOvvvqq3nvvvfB4Dkz/N3dPyuH0c8Dzzz+vgQMHKiEhQQMHDtSiRYuajVuwYIGGDh2q5ORkpaSk6OSTT9Zvf/tbUx8A4EdePN3Lz5hJAdCmHfhy36VLl/B77733nkaMGKEePXpo8uTJ6tSpk55++mmNGTNGzz33nH74wx9Kkurq6nT66afrX//6l6644gqdeuqp2rlzp1588UV9/vnnSktLUygU0n/+53/q9ddf19VXX60TTzxR7777rh544AF9+OGHev755yPGs2LFCi1cuFDXX3+9gsGgfv/73+vcc8/V6tWrNXDgQP3oRz/Shx9+qKeeekoPPPCA0tLSJEnp6ekHLVtubq6OOeYYPf300xo/fnzE7xYuXKguXbqosLBQ0lfPp//e974XTpTS09O1ePFiXXnllaqpqdGkSZOaXX/p6en605/+pDvvvFN1dXXhp7uceOKJzcYfbj+S9Pe//10XXnihBgwYoJKSEu3atUsTJkxQz549I+KWLVumSy+9VGeffbbuvvtuSdK//vUv/eMf/9ANN9xwyPYBwM+43OsbHABoA+bOnetIcl5++WVnx44dTllZmfPss8866enpTjAYdMrKysKxZ599tnPyySc7+/btC78XCoWc73//+06/fv3C702dOtWR5PzlL385qL9QKOQ4juP86U9/cmJiYpz/+7//i/j9nDlzHEnOP/7xj/B7khxJzpo1a8LvffbZZ05CQoLzwx/+MPzevffe60hyNm/efFC/vXv3dsaPHx/+ecqUKU6HDh2c3bt3h99raGhwOnfu7FxxxRXh96688kqne/fuzs6dOyPau+SSS5zU1FRnz549B/X1dWeeeaZz0kknHfS+JGfatGmu+9m8ebMjyZk7d244ZsiQIU737t2dqqqq8Ht///vfHUlO7969w+/dcMMNTkpKivPll19+65gBoDWorq52JDmVlZXOvn37juhVWVnpSHKqq6u9XqwjxuVeANqUgoICpaenKycnRz/+8Y/VqVMnvfjii+F/jd+9e7deeeUVXXzxxaqtrdXOnTu1c+dO7dq1S4WFhdq0aZO2bt0qSXruuec0ePDg8MzK1wUCAUnSM888oxNPPFH9+/cPt7Vz506dddZZkqRXX3014u/y8/M1dOjQ8M+9evXSBRdcoKVLl6qpqcn18o4dO1b79+/XX/7yl/B7f//731VVVaWxY8dK+upf1p577jmdf/75chwnYpyFhYWqrq7WunXrXPf9TUfSz/bt27V+/XqNHz9eqamp4ffPOeccDRgwICK2c+fOqq+v17Jly454zADgFw6Xe0Xgci8AbcqsWbN0/PHHq7q6Wo899phee+21iJvNP/roIzmOo1tvvVW33nprs21UVlaqR48e+vjjj3XhhRd+a3+bNm3Sv/71r2YvxzrQ1tf169fvoJjjjz9ee/bs0Y4dO5SVlfVdixhh8ODB6t+/vxYuXKgrr7xS0leXeqWlpYUTpR07dqiqqkqPPPKIHnnkEdM4D8eR9PPZZ59Jan79nHDCCRHJzc9//nM9/fTTGj16tHr06KFRo0bp4osv1rnnnnvEywAAXolGkkGSAgA+NXz48PDTvcaMGaPTTjtNP/nJT7Rx40YlJSUpFApJkm666abw/RrfdNxxx5n7C4VCOvnkk3X//fc3+/ucnByXS+De2LFjdeedd2rnzp1KTk7Wiy++qEsvvTT8aOADy/zTn/70oHtXDhg0aNARj+No9ZORkaH169dr6dKlWrx4sRYvXqy5c+dq3LhxzT5EAADQ+pCkAGizYmNjVVJSoh/84Ad66KGHNHnyZB1zzDGSpA4dOqigoOBb//7YY4/Vhg0bvjPmn//8p84+++zwJWDfZtOmTQe99+GHH6pjx47h2RhLO183duxYTZ8+Xc8995wyMzNVU1OjSy65JPz79PR0JScnq6mp6TuX+UgcST+9e/eW1Pz62bhx40HvxcfH6/zzz9f555+vUCikn//853r44Yd16623ukoyAcAvmEmJxD0pANq0kSNHavjw4Zo5c6b27dunjIwMjRw5Ug8//LC2b99+UPyOHTvC/3/hhRfqn//8Z7OPwT3wQXDxxRdr69atevTRRw+K2bt3r+rr6yPeW7lyZcSlS2VlZXrhhRc0atQoxcbGSpI6deok6avHH1uceOKJOvnkk7Vw4UItXLhQ3bt31xlnnBH+fWxsrC688EI999xzzSZdX1/mI3Ek/XTv3l1DhgzR448/rurq6vD7y5Yt0/vvvx8Ru2vXroifY2JiwjM033zsMwC0FtyTEomZFABt3s0336yLLrpI8+bN0zXXXKNZs2bptNNO08knn6yrrrpKxxxzjCoqKrRy5Up9/vnn+uc//xn+u2effVYXXXSRrrjiCg0dOlS7d+/Wiy++qDlz5mjw4MH6r//6Lz399NO65ppr9Oqrr2rEiBFqamrSBx98oKefflpLly4NX34mSQMHDlRhYWHEI4glafr06eGYAzfW/8///I8uueQSdejQQeeff344eWnO2LFjNXXqVCUkJOjKK688qCr9jBkz9OqrryovL09XXXWVBgwYoN27d2vdunV6+eWXtXv37qis6yPpp6SkROedd55OO+00XXHFFdq9e7d+97vf6aSTTlJdXV047mc/+5l2796ts846Sz179tRnn32m3/3udxoyZMghH40MAGhlov/AMAA4+g48gvitt9466HdNTU3Oscce6xx77LHhx9Z+/PHHzrhx45ysrCynQ4cOTo8ePZz/9//+n/Pss89G/O2uXbuciRMnOj169HDi4+Odnj17OuPHj494xG5jY6Nz9913OyeddJITDAadLl26OEOHDnWmT58e8RhISU5RUZHz5JNPOv369XOCwaBzyimnOK+++upBY7799tudHj16ODExMRGPI/7mI4gP2LRpU/gRx6+//nqz66iiosIpKipycnJynA4dOjhZWVnO2Wef7TzyyCPftXrNjyC29tPcI4gdx3Gee+4558QTT3SCwaAzYMAA5y9/+Yszfvz4iEcQP/vss86oUaOcjIwMJz4+3unVq5fz//1//5+zffv271wOAPCbA48g3rp1q1NbW3tEr61bt7aZRxAHHKcNzQsBgI8FAgEVFRXpoYce8nooAACfqKmpUWpqqj7//HOlpKQccVs9e/ZUdXX1EbflNe5JAQAAAOAr3JMCAAAAeMzh6V4RSFIAAAAAj5GkRCJJAYCjpC19eAAA0JJIUgAAAACPMZMSiSQFAAAA8BhJSiTfJSmhUEjbtm1TcnKyAoGA18MBAABAG+U4jmpra5WdnX1QEVx4y3dJyrZt25STk+P1MAAAANBOlJWVqWfPnp6OgZmUSC2WpMyaNUv33nuvysvLNXjwYP3ud7/T8OHDv/PvkpOTzX2ccsop5tjExERTXFZWlimuvLzc3Lc1Njc31xT35ZdfmuI2b95sipOk7OxsU1xVVZUprrKy0tx3bW2tKS4pKckU17lzZ3PfW7duNcUdd9xxpjg3yx0fH2+Ki42NNcVdddVVprgHH3zQFCfJ/A8G+/fvN8V98skn5r4feOABc2y0WWdxrR8GbmaFo93mr371K1Ocm33X2ndjY6MpzrqPS1/Ntlt069bNFHfNNdeY+77jjjtMcdYxJiQkmPu2nvfj4qL7se6mGFxNTY0pLjU11RSXmZlp7tu6r1nXj/WzQZJOPPFEU9wxxxxjiluxYoW577KyMlNchw4dTHHWmQQ3+8W+fftMcR07djTFffHFF+a+LcsTCoW0e/duV98/W1JbSjKOVIskKQsXLlRxcbHmzJmjvLw8zZw5U4WFhdq4caMyMjK+9W/dfJi7+WCznpisB7KbDwLrQW/90mpdR27WT7SX203f1vVjbbMltk1LLLc11hpnTcRb4rixnlTdTKV36tTJHGvh5sRvHaf1y6ib5Y52kmLd3m7GaO3bGtcS68fapvW4kbxd7pZoM9rteXkutx6L1jbdLLf18zMYDJri3Jyjo71fRDvOTWxLnKta4hjD0dMiF9/df//9uuqqqzRhwgQNGDBAc+bMUceOHfXYY4+1RHcAAABAq3bgcq8jfbUVUU9SGhsbtXbtWhUUFPy7k5gYFRQUaOXKldHuDgAAAGj1SFIiRf1yr507d6qpqemga0kzMzP1wQcfHBTf0NCghoaG8M/Wa1oBAAAAtE2eP2utpKREqamp4RdP9gIAAEB7w0xKpKgnKWlpaYqNjVVFRUXE+xUVFc0+OWvKlCmqrq4Ov6xPqgAAAADaCpKUSFFPUuLj4zV06FCVlpaG3wuFQiotLVV+fv5B8cFgUCkpKREvAAAAAO1XizyCuLi4WOPHj1dubq6GDx+umTNnqr6+XhMmTGiJ7gAAAIBWjWKOkVokSRk7dqx27NihqVOnqry8XEOGDNGSJUtcFWaycPMs8WgXE7LWNJHcjdPCWqzQzY561llnmeKsxfjcPG9879695lgL67PoJXtB0PT0dFPcE088Ye7bWsTSzfJEs19J2r17tynOWnvAzba+7LLLTHHWIndu6q5YC8M1NTWZ4tw8q/+7akkdYC2+2L9/f1Ocm21jPadZa1e0BOt50k0tDmuxN+tyu/kcsbZprdlh5WbftX5+Wq+YcFPDJtrbxloM1E3fXbt2NcW5uaLEWhDU+plsPR7cfC5Zz9HW48FNEVTL9vbyPPVNJCmRWqzi/MSJEzVx4sSWah4AAABAG9ViSQoAAAAAG2ZSIpGkAAAAAB4jSYnkeZ0UAAAAAPg6ZlIAAAAAjzGTEokkBQAAAPAYSUokLvcCAAAA4CvMpAAAAAAeYyYlEkkKAAAA4DGSlEhc7gUAAADAV1r1TErHjh2jHhsXZ1sl3bp1M/e9f/9+U1xycrIpLiEhwRSXnZ1tipOkFStWmOJ2795tiisrKzP3XVdXZ4rr0aOHKa6pqcnc986dO01x/fv3N8U1Njaa+7aOMyYmuv+W0NDQYI798ssvoxq3b98+c9/WYzEUCpnirMehJAUCAXNstFmXx6q8vNwUV1FRYW7T+i911v3Cuq3dtGnd19wcs127djXFWY9tN8tt1aFDB1OcdRu6GaP1GLO2GR8fb+47NjbWFBcMBk1xe/bsMfdtXR5r32lpaea+//nPf5rirOvS+vngZttYjzHrOq+vrzf3bRlntM+5R4KZlEitOkkBAAAA2gKSlEhc7gUAAADAV5hJAQAAADzGTEokkhQAAADAYyQpkbjcCwAAAICvMJMCAAAAeIyZlEgkKQAAAIAPtKUk40hxuRcAAAAAX2EmBQAAAPAYl3tFatVJyhdffGGO3bt3rykuIyPDFLdr1y5z39aKz9a+ExMTTXFuKkgfe+yxpjhrNeOEhARz39YqxdaKwm4qJEf7YO7YsaM5NtrVma3rx001dev2bokK29Guxm09biR31ektYmLsk9bWSs7W7W2tkm6t5C7Zl8davbolqpqnpKSY4twcD8XFxaY467p0s9x+qop9KNb9Yvbs2VHv23rcWNejdd+V7J8j+/btM8XV1taa+7ZWp7eey62SkpLMsdbltrbp5nxqOU82NTVpx44d5jZbEklKJC73AgAAAOArJCkAAACAxw7MpBzp63DMmjVLffr0UUJCgvLy8rR69epDxj766KM6/fTT1aVLF3Xp0kUFBQUHxV9++eUKBAIRr3PPPdfVmEhSAAAAAI95laQsXLhQxcXFmjZtmtatW6fBgwersLBQlZWVzcYvX75cl156qV599VWtXLlSOTk5GjVqlLZu3RoRd+6552r79u3h11NPPeVqXCQpAAAAQDt1//3366qrrtKECRM0YMAAzZkzRx07dtRjjz3WbPyf//xn/fznP9eQIUPUv39//eEPf1AoFFJpaWlEXDAYVFZWVvjVpUsXV+MiSQEAAAA8Fs2ZlJqamojXoR4G0djYqLVr16qgoCD8XkxMjAoKCrRy5UrTuPfs2aP9+/cf9KCW5cuXKyMjQyeccIKuvfZaVw+dkkhSAAAAAM9FM0nJyclRampq+FVSUtJsnzt37lRTU5MyMzMj3s/MzDQ/nfYXv/iFsrOzIxKdc889V0888YRKS0t19913a8WKFRo9erT5aaBSK38EMQAAAIBIZWVlEY9iDwaDLdLPjBkztGDBAi1fvjyi/MQll1wS/v+TTz5ZgwYN0rHHHqvly5fr7LPPNrXNTAoAAADgsWjOpKSkpES8DpWkpKWlKTY29qDaehUVFcrKyvrW8d53332aMWOG/v73v2vQoEHfGnvMMccoLS1NH330kXl9kKQAAAAAHvPi6V7x8fEaOnRoxE3vB26Cz8/PP+Tf3XPPPbr99tu1ZMkS5ebmfmc/n3/+uXbt2qXu3bubx9aqL/dy85QAazVa68Ztiard0a6Q7KYqq7VCsvVaQjcVc+vr66Ma56ayrrWqcGNjoymuU6dO5r6tlbOt29taSTk5OdkUJ9mnh63Vz92sH+vytMTxYG3Tuq+56dtahbylpu4tol39vCUqJLdEhfapU6dGte+vXxrxXaznaOs5zXospqammuIkqaqqyhRnPb6sx4Jkr2pu7fvzzz83952YmGiKs1ZULysrM/ddU1Njiot2xXk3x6x137W26eb7hWV7t8S5orUpLi7W+PHjlZubq+HDh2vmzJmqr6/XhAkTJEnjxo1Tjx49wve13H333Zo6darmz5+vPn36hO9dSUpKUlJSkurq6jR9+nRdeOGFysrK0scff6xbbrlFxx13nAoLC83jatVJCgAAANAWHEkxxq+34dbYsWO1Y8cOTZ06VeXl5RoyZIiWLFkSvpl+y5YtEf/YNnv2bDU2NurHP/5xRDvTpk3TbbfdptjYWL3zzjt6/PHHVVVVpezsbI0aNUq33367q39gI0kBAAAAPOZVkiJJEydO1MSJE5v93fLlyyN+/vTTT7+1rcTERC1duvSwxvF13JMCAAAAwFeYSQEAAAA85uVMih+RpAAAAAAeI0mJxOVeAAAAAHyFmRQAAADAY8ykRCJJAQAAADxGkhKJy70AAAAA+AozKQAAAIDHmEmJ1KqTlLg4+/BDoZApzloJ003fsbGxprh9+/aZ4pKSkkxx8fHxpjhJSkhIMMVZl7t79+7mvmtqakxxHTp0MMVlZWWZ+/7yyy9NcZ06dTLF7dy509x3Y2OjKe7rVV6jwdqvZD9umpqaot53Q0ODKc66Dd2cuK1tWuPcbEPrvlZXV2eKs55X3Gwb6znNun6s+49k347RPm4k+zqyHjeBQMDct/V4sH6GWfcLN9Wh9+/fb4qznqM7d+5s7nvPnj2mOOvniLU9yf6Z3LVr16jGSdItt9xiirPuk9Zj283xZT1moz1Ga5t79+7V9ddfb26zJZGkRIr6Wfy2225TIBCIePXv3z/a3QAAAABoo1pkJuWkk07Syy+//O9OXMw6AAAAAO0NMymRWiR7iIuLc3XJDQAAANDetaUk40i1yNO9Nm3apOzsbB1zzDG67LLLtGXLlkPGNjQ0qKamJuIFAAAAoP2KepKSl5enefPmacmSJZo9e7Y2b96s008/XbW1tc3Gl5SUKDU1NfzKycmJ9pAAAAAAXztwudeRvtqKqCcpo0eP1kUXXaRBgwapsLBQf/vb31RVVaWnn3662fgpU6aouro6/CorK4v2kAAAAABfI0mJ1OJ3tHfu3FnHH3+8Pvroo2Z/HwwGXT3iEAAAAEDb1uIV5+vq6vTxxx+7qpsBAAAAtCfMpESKepJy0003acWKFfr000/1xhtv6Ic//KFiY2N16aWXRrsrAAAAoE0gSYkU9cu9Pv/8c1166aXatWuX0tPTddppp2nVqlVKT0+Pdlfavn27OdZaq6Vbt26muN27d5v73rVrlynOWlE42v1K0oABA0xx1vUY7YqwktSxY8eotueGtUpxdXW1uU3riSQ+Pt4UZ11uN5XFrVWprdz0bV3nVm72SWslcGucm+rM1uWO9vpxU/XdylpxviXOFy1Rvdpahdy63G5Yjx3recW677r5XLKun8rKSlOcm/NFQkKCKc76BFE35/K6ujpTnHX91NfXm/u2Vpy3noOs55WkpCRTnPRVRXeL5ORkU9wXX3xh7tuyn7fEdwZER9STlAULFkS7SQAAAKBNo5hjJErBAwAAAB4jSYnU4jfOAwAAAIAbzKQAAAAAHmMmJRJJCgAAAOAxkpRIXO4FAAAAwFeYSQEAAAA8xkxKJGZSAAAAAPgKMykAAACAx5hJidSqkxRr9XPJXo3W2qabvq2VXq0Vn61x1orCkr1irlVVVVXU+26JivPWyrXWyutuTg7RrhBv7dtNBelot+mmgn2XLl1Mcdb93E1lcTexFl5WnLfuP26qe1uXx9qmm/VtreZuPa9Yz6eSlJ6eHtU2rZ9Lkn253Xw2WbipLG7djtZlcbN+rKzHTUu0aV1uN/tkp06dTHHRXm5rv276tn4mWr8LWPmp4jxJSiQu9wIAAADgK616JgUAAABoC5hJiUSSAgAAAHiMJCUSl3sBAAAA8BVmUgAAAACPMZMSiSQFAAAA8BhJSiQu9wIAAADgK8ykAAAAAB5jJiUSSQoAAADgMZKUSAHHZ0tTU1Oj1NRUU2x2dra5XetiBoNBU5ybqt3WCsDWqqfW9dO1a1dTnCS99dZbprhu3bqZ4mpra81933PPPaa4u+++2xTnpqp5dXW1Kc5aAdjNPmnd1/bu3WuKs1YBd1P93BprrUrt5nRzyy23mOKs28ZNxWXrclv7dlNR3bqO9u/fb4orKioyxVmrYUv2c4t1/cyaNcvc94QJE6Lat5tq088884wpzrouA4GAuW8ra5vW48G6n0n242batGmmuJqamqj3ba1WPmnSJHPfv/rVr0xx8fHxpjg350lrrLVv6+dnQkKCKU6y70PW86T1s0GSnnzyye+M+fLLL/X666+rurpaKSkp5raj6cB332effVadOnU6orbq6+v14x//2NPliRZmUgAAAAAf8NncgadIUgAAAACPcblXJJ7uBQAAAMBXmEkBAAAAPMZMSiSSFAAAAMBjJCmRuNwLAAAAgK8wkwIAAAB4jJmUSCQpAAAAgMdIUiJxuRcAAAAAX2EmBQAAAPAYMymRWnWS8uWXX0Y9NhgMmuI6dOhg7nvv3r2muNjYWFNcU1OTKW7fvn2mOEmKi/P/rtASY7S2GRNjm3R0s86tJxJrXENDgykuFAqZ4iT7+rHGuen7kUceMcV98cUXpriMjAxz39bje8eOHeY2rbp3726K27p1qynOus7dbBvrOcjaZiAQMPcd7eVxs9zjxo2LapuJiYnmvqO9PB07djTFuTlurPvksccea4rbv3+/uW/rurTGudknU1JSTHEJCQmmOOt3Bkn67LPPTHHW7zaNjY2mOOuySPbPppb4jN+5c+d3xljPZ0cDSUokLvcCAAAA4Cv+/+dzAAAAoI1jJiUSSQoAAADgMZKUSFzuBQAAALRjs2bNUp8+fZSQkKC8vDytXr36kLGPPvqoTj/9dHXp0kVdunRRQUHBQfGO42jq1Knq3r27EhMTVVBQoE2bNrkaE0kKAAAA4LEDMylH+nJr4cKFKi4u1rRp07Ru3ToNHjxYhYWFqqysbDZ++fLluvTSS/Xqq69q5cqVysnJ0ahRoyIennHPPffowQcf1Jw5c/Tmm2+qU6dOKiwsdPWAIZIUAAAAwGNeJSn333+/rrrqKk2YMEEDBgzQnDlz1LFjRz322GPNxv/5z3/Wz3/+cw0ZMkT9+/fXH/7wB4VCIZWWloaXY+bMmfrVr36lCy64QIMGDdITTzyhbdu26fnnnzePiyQFAAAAaENqamoiXod6FHRjY6PWrl2rgoKC8HsxMTEqKCjQypUrTX3t2bNH+/fvV9euXSVJmzdvVnl5eUSbqampysvLM7cpkaQAAAAAnovmTEpOTo5SU1PDr5KSkmb73Llzp5qampSZmRnxfmZmpsrLy03j/sUvfqHs7OxwUnLg746kTYmnewEAAACei+bTvcrKyiIKjVoLero1Y8YMLViwQMuXL3dV5NOiVScpbirCWqu5Wyueuql2Hx8fb4qz7pjW5XazQ1qXJ9pV0iX78kR7jG7atFakdVMh2VrFPtpjtPYr2asPW5fbzbaxVl3es2ePKW7Lli3mvjt37myKs64f6xgl+zqytmndL9xUXbZWNW+JvqPdppt9skuXLqY4a4VtN8eim+r0FtaK8506dTK32a1bN1NcdXV1VOMkW2VxyV4p3XpsS9Lnn39uimuJL4nW7xcdOnQwxVmPB2u/btq0fk9zc8xaxumnivPRlJKSEpGkHEpaWppiY2NVUVER8X5FRYWysrK+9W/vu+8+zZgxQy+//LIGDRoUfv/A31VUVKh79+4RbQ4ZMsS8DK4v93rttdd0/vnnKzs7W4FA4KAbYKLxyDEAAACgPfHixvn4+HgNHTo0fNO7pPBN8Pn5+Yf8u3vuuUe33367lixZotzc3Ijf9e3bV1lZWRFt1tTU6M033/zWNr/JdZJSX1+vwYMHa9asWYcc9JE+cgwAAABoT7x6uldxcbEeffRRPf744/rXv/6la6+9VvX19ZowYYIkady4cZoyZUo4/u6779att96qxx57TH369FF5ebnKy8tVV1cn6asrZCZNmqQ77rhDL774ot59912NGzdO2dnZGjNmjHlcri/3Gj16tEaPHt3s7775yDFJeuKJJ5SZmannn39el1xyidvuAAAAALSQsWPHaseOHZo6darKy8s1ZMgQLVmyJHzj+5YtWyIuT509e7YaGxv14x//OKKdadOm6bbbbpMk3XLLLaqvr9fVV1+tqqoqnXbaaVqyZImr+1aiek/Kdz1yjCQFAAAAOFg0b5x3a+LEiZo4cWKzv1u+fHnEz59++ul3thcIBPTrX/9av/71rw9rPFKUk5TDeeRYQ0NDxE2GNTU10RwSAAAA4HteJil+5HmdlJKSkojnOOfk5Hg9JAAAAAAeimqS8vVHjn3dtz3GbMqUKaqurg6/ysrKojkkAAAAwPe8unHer6KapBzOI8eCwWD4Wc7WZzoDAAAAbQ0Jyr+5vielrq5OH330UfjnzZs3a/369eratat69eoVfuRYv3791LdvX916662uHzkGAAAAoP1ynaSsWbNGP/jBD8I/FxcXS5LGjx+vefPmReWRY22NtWK4tdqqlZsqqtYZLGvFXGsVeTesFW6t1bAlKTk52RRnXZfffGjEt7EeE9blsVZ9d7NtrBWxrdsmLs5+yrG2aV2P1grbkr06s3W/cLPc1grfVVVVpjjrPm49T0lSUlKSKc66ftzsk9Hu282/PO7du9cUZz0W3VSR37NnjznWwnpecfPZbX3wTf/+/U1xbvYL63a0tunm87hbt26muJaoOL9z505TnPV8Gu3q8G5irXHR/gzz0+wDN85Hcp2kjBw58ltXQDQeOQYAAAC0JyQpkTx/uhcAAAAAfF1U66QAAAAAcI+ZlEgkKQAAAIDHSFIicbkXAAAAAF9hJgUAAADwGDMpkUhSAAAAAI+RpETici8AAAAAvsJMCgAAAOAxZlIikaQAAAAAHiNJidSqk5Tbb7/dHGvdaDExtivgQqFQ1PuOtkAgYI4tLi42xXXo0MEUV1tba+7byrrOGxoazG3u3bvXFNfU1BT1vq3bZ9++fVHt281+ER8fH9U23ewX2dnZprjY2FhTXGNjo7lv6/a2Lrebc4B1eZKSkkxxLXEsutmHLKzL7Kbvltg2CQkJpri4ONtHq/V8Kkl79uwxxVn3C+v6SUxMNMVJUseOHU1x+/fvN8W52TbW8591jNbvApJ9eazcHF/Wz8Vox7nZNtH+DuSmPcu2sZ7vcfS16iQFAAAAaAuYSYlEkgIAAAB4jCQlEk/3AgAAAOArzKQAAAAAHmMmJRJJCgAAAOAxkpRIXO4FAAAAwFeYSQEAAAA8xkxKJJIUAAAAwGMkKZG43AsAAACAr7TqmZRf/epX5tgvv/zSFJeSkmKKc1Nh1lrN1Frp1TpGa+VhSTrllFNMcZ07dzbFVVVVmfu2VjW3jrG6utrct7VKsXUbbtmyxdy3taqwtVK6Na4lqlxb27Sub8leKb2urs4Ul56ebu7buk9WVlaa4tysc6t9+/aZ4qzLbT1HSlKnTp1Mcdaq3dZznySlpaWZ4qzHrJt/dfziiy9McdZ1aa1gL9nHaT1urNuwvr7eFCfZj0XrfuHmc9a6LhMTE01xbvYLaxV76xitx7ZkX0fR/ryxbkM3bVrPA276bm2YSYnUqpMUAAAAoC0gSYnUdtNRAAAAAK0SMykAAACAx5hJiUSSAgAAAPhAW0oyjhSXewEAAADwFWZSAAAAAI9xuVckkhQAAADAYyQpkbjcCwAAAICvMJMCAAAAeIyZlEitOkkJBoPmWGvF59jYWFNcXJx91bmp5GxhrVrrZozr1683xXXt2tUUZ616LNkr5q5bt84U56aqeU1NjSnOug2t60eyj9NaKdga54b1uLFWAHZTYdvapnW5q6qqzH1bK0hbj7G9e/ea+7bGWj+IPv30U1Ocm+re3bp1M8VZjxs3H6rW5bFWr7ZWppek9PT0qPZtPb4k+zqyHg/WfdfN50h8fLwpzrqPu6m8bj2fWvdzN/vkzp07TXFJSUmmODfLba3m3pYqzrvZNpb9ws05oKWRpETici8AAAAAvtKqZ1IAAACAtoCZlEgkKQAAAIDHSFIicbkXAAAAAF9hJgUAAADwGDMpkUhSAAAAAI+RpETici8AAAAAvsJMCgAAAOAxZlIikaQAAAAAHiNJicTlXgAAAAB8pVXPpHz55Zfm2FAoZIqLjY01xTU2Npr73rt3rymuQ4cOpjjrcrvJpvfv3x/Vvlti2zQ1NUW9b+tyW8f4i1/8wtx3tMXE2P7NwbosLdF3IBAwtzlnzhxTXENDgynOzXJbzwPWY9sa1xJtWpfFjWi36Wa/sJ4nrecL677rJtY6RjesfVuXuyVYj7F9+/ZFtT3Jfi63crNPWj9zrMesm8/ujIwMU5x1n7Su8/j4eFOcZP++FBcX/a+kHTt2/M4YL4+Zb2ImJZLrmZTXXntN559/vrKzsxUIBPT8889H/P7yyy9XIBCIeJ177rnRGi8AAADQ5hxIUo701Va4TlLq6+s1ePBgzZo165Ax5557rrZv3x5+PfXUU0c0SAAAAADth+u5tdGjR2v06NHfGhMMBpWVlXXYgwIAAADaEy73itQiN84vX75cGRkZOuGEE3Tttddq165dh4xtaGhQTU1NxAsAAABoT7jcK1LUk5Rzzz1XTzzxhEpLS3X33XdrxYoVGj169CFvTCopKVFqamr4lZOTE+0hAQAAAGhFop6kXHLJJfrP//xPnXzyyRozZoxeeuklvfXWW1q+fHmz8VOmTFF1dXX4VVZWFu0hAQAAAL7m5UzKrFmz1KdPHyUkJCgvL0+rV68+ZOx7772nCy+8UH369FEgENDMmTMPirntttsOepBW//79XY2pxeukHHPMMUpLS9NHH33U7O+DwaBSUlIiXgAAAEB74lWSsnDhQhUXF2vatGlat26dBg8erMLCQlVWVjYbv2fPHh1zzDGaMWPGt96DftJJJ0U8SOv11193Na4WT1I+//xz7dq1S927d2/prgAAAAC4cP/99+uqq67ShAkTNGDAAM2ZM0cdO3bUY4891mz8sGHDdO+99+qSSy5RMBg8ZLtxcXHKysoKv9LS0lyNy3WSUldXp/Xr12v9+vWSpM2bN2v9+vXasmWL6urqdPPNN2vVqlX69NNPVVpaqgsuuEDHHXecCgsL3XYFAAAAtAvRnEn55kOpDlX4uLGxUWvXrlVBQUH4vZiYGBUUFGjlypVHtDybNm1Sdna2jjnmGF122WXasmWLq793/QjiNWvW6Ac/+EH45+LiYknS+PHjNXv2bL3zzjt6/PHHVVVVpezsbI0aNUq33377t2Zahys9Pd0ca62iWlFRYYpzU6XYWkXVWuHWOsbU1FRTnCT17NnTFFdfX2+K69atm7nv22+/3RSXlJRkinNTpdg6TmvcM888Y+47MzPTFLd27VpTnHWfdLPv9ujRwxS3adMmU5ybf0WxVim2VBSWvvoHFitrRWzr5alu1nlycrIp7owzzjDFLVq0yBTnpmK3dTt+8sknprhrr73W3Le1cnZsbKwpzs22sT598u677zbFHfj8tOjUqZMpzlrV/IsvvjDFlZeXm+Kkry4BsbBuw86dO5v7tp4vrPvu/fffb+77pJNOMsVZt42bfdK6X1irqlu/r7g5X3zve98zxVkvBXryySfNfVs+u7/88ktze0dDtJ7O9c0HUU2bNk233XbbQXE7d+5UU1PTQd9JMjMz9cEHHxx2/3l5eZo3b55OOOEEbd++XdOnT9fpp5+uDRs2mD/nXCcpI0eO/NYVuHTpUrdNAgAAAIiSsrKyiH9Ia4nJgm/z9ZqKgwYNUl5ennr37q2nn35aV155pakN10kKAAAAgOiKZjFH68Oo0tLSFBsbe9BVOhUVFVEtzN65c2cdf/zxh3yQVnNa/MZ5AAAAAN/Oi6d7xcfHa+jQoSotLQ2/FwqFVFpaqvz8/KgtW11dnT7++GNXD9JiJgUAAABop4qLizV+/Hjl5uZq+PDhmjlzpurr6zVhwgRJ0rhx49SjRw+VlJRI+uoesPfffz/8/1u3btX69euVlJSk4447TpJ000036fzzz1fv3r21bds2TZs2TbGxsbr00kvN4yJJAQAAADwWzcu93Bg7dqx27NihqVOnqry8XEOGDNGSJUvCN9Nv2bIl4oEO27Zt0ymnnBL++b777tN9992nM888M1y8/fPPP9ell16qXbt2KT09XaeddppWrVrl6qFXJCkAAACAx7xKUiRp4sSJmjhxYrO/O5B4HNCnT5/v7GfBggWHNY6v454UAAAAAL7CTAoAAADgMS9nUvyIJAUAAADwGElKpFadpFgrTUv2iqLW6q0JCQnmvq0V0N1UmbWwVmiX7NW4rcvi5iCxLrd1G7rp2xprra77zQqv38a6LgcMGGCKa2hoMMVZqx5L9orPB57m8V2slaYlaffu3aY4ayXlQCBg7ttadbkl2ktNTY1qm26W2yra56qW+FC17mvW40ayn1Ot67xLly7mvqP92WQ9p7n5rLMWi7O2aT1HSvbvA9a4qqoqc9+xsbGmOOv+U19fb+7behNydXW1Kc5SV8Mt6/bu2rWrKc5SRf6Ampqa74yxHgs4+lp1kgIAAAC0BcykRCJJAQAAADxGkhKJp3sBAAAA8BVmUgAAAACPMZMSiSQFAAAA8BhJSiQu9wIAAADgK8ykAAAAAB5jJiUSSQoAAADgMZKUSFzuBQAAAMBXmEkBAAAAPMZMSqRWnaTU1NSYYxsaGkxxO3bsMMUlJCSY+w6FQqa4mBjbxFZtba0prrGx0RQnSbGxsaa4vXv3muKsyyJFf/24WW7rwdzU1GSK+9e//mXuOyMjwxT30UcfmeKs+3gwGDTFSVJdXZ0pbvv27aa49PR0c9/79u0zxX355ZemuD179pj7th4PqamppjjrMeumTev6mTBhginOuo9L9mPRum3i4uwfRdE+Zq3bWpIeeughU5x1jFVVVea+9+/fb4qznqOtrOcVN31bt7ebz1nrZ7f188HN+cJ6LFr7drPcn3zyiSnOejyUlZWZ+7ZKS0szxb3//vumuC5dupj7thzfbs59LY0kJRKXewEAAADwlVY9kwIAAAC0BcykRCJJAQAAADxGkhKJy70AAAAA+AozKQAAAIDHmEmJRJICAAAA+EBbSjKOFJd7AQAAAPAVZlIAAAAAj3G5VySSFAAAAMBjJCmRWnWS0rlzZ3OstSKstfJofHy8ue9AIBDVuI4dO5rikpOTTXGSlJSUZIqrqamJanuSvSq1teKytbqtZK92b10e67JI9qrL1ure1krybqp7R7tN67K4adNaMdy6rSX7sWgdY4cOHcx9W1nX5ZNPPmmKsx5fktS7d29T3IcffmiKc3M+tW5HN/ualZtK4NFuz7qOrF9QrHFuzhfWbWOtGG49/0hSYmJiVPt2s09az0HWzwc3XzKHDh1qirNWu29oaDDFuTmfdu/e3RQ3cOBAU1xKSoq5b4v9+/dr/fr1UW0T0dGqkxQAAACgLWAmJRJJCgAAAOAxkpRIPN0LAAAAgK8wkwIAAAB4jJmUSCQpAAAAgMdIUiJxuRcAAAAAX2EmBQAAAPAYMymRSFIAAAAAj5GkROJyLwAAAAC+0qpnUqzV4SV7BWlrVVY31YyjXSHZWhHWzRhvueWWqPZtXd+SfZwtUWk62tWZn332WXPf6enpprhNmzaZ4qyVod1Uue7cubMpbufOnaY4N9vGWqXYWim9trbW3Lf13NKxY0dTnJt1bq2mbF2X1irX1jjJvs6t51M3rOcWa5x1WSRp3759Ue17z5495r6tbUa7YribivN79+41xdXV1Zni3Gwb6/FtPW6s29pNm9bl6dChg7nv8vJyU5x1eazb0M35olu3bqa4iooKU5x1H5ds53I3y9LSmEmJ5GompaSkRMOGDVNycrIyMjI0ZswYbdy4MSJm3759KioqUrdu3ZSUlKQLL7zQvOMBAAAA7dGBJOVIX22FqyRlxYoVKioq0qpVq7Rs2TLt379fo0aNUn19fTjmxhtv1F//+lc988wzWrFihbZt26Yf/ehHUR84AAAAgLbJ1eVeS5Ysifh53rx5ysjI0Nq1a3XGGWeourpaf/zjHzV//nydddZZkqS5c+fqxBNP1KpVq/S9730veiMHAAAA2ggu94p0RDfOV1dXS5K6du0qSVq7dq3279+vgoKCcEz//v3Vq1cvrVy58ki6AgAAANosLveKdNg3zodCIU2aNEkjRozQwIEDJX11A1d8fPxBN9tmZmYe8uauhoaGiJugampqDndIAAAAANqAw55JKSoq0oYNG7RgwYIjGkBJSYlSU1PDr5ycnCNqDwAAAGhtmEmJdFhJysSJE/XSSy/p1VdfVc+ePcPvZ2VlqbGxUVVVVRHxFRUVysrKaratKVOmqLq6OvwqKys7nCEBAAAArRZJSiRXSYrjOJo4caIWLVqkV155RX379o34/dChQ9WhQweVlpaG39u4caO2bNmi/Pz8ZtsMBoNKSUmJeAEAAABov1zdk1JUVKT58+frhRdeUHJycvg+k9TUVCUmJio1NVVXXnmliouL1bVrV6WkpOi6665Tfn4+T/YCAAAADoGne0VylaTMnj1bkjRy5MiI9+fOnavLL79ckvTAAw8oJiZGF154oRoaGlRYWKjf//73URksAAAA0BaRpERylaRYFjwhIUGzZs3SrFmzDntQVvv37zfHNjY2RrXNmBj7lXLWHSY2NtYUZx1jx44dTXGS9D//8z+muK8X7vw2iYmJ5r6t26ZTp06mODf7RSgUMsV984l1hzJo0CBz319++aUp7lD3c33T15+S92327dtnipPs29G6fjp06GDuu7a21hT3zXvgDsW6viV3x7eFm30yNTU1qm1azz/WY0Gyr8umpiZTnJsPVTfb0cLNclvP0db9x9peS/QdCATMfVtZ+7766qtNcdbPBsnd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Y7TGulmWlkaSEsnV5V4lJSUaNmyYkpOTlZGRoTFjxmjjxo0RMSNHjlQgEIh4XXPNNVEdNAAAAIC2y1WSsmLFChUVFWnVqlVatmyZ9u/fr1GjRqm+vj4i7qqrrtL27dvDr3vuuSeqgwYAAADakgMzKUf6aitcXe61ZMmSiJ/nzZunjIwMrV27VmeccUb4/Y4dOyorKys6IwQAAADaOC73inRET/eqrq6WdPD9GX/+85+VlpamgQMHasqUKdqzZ88h22hoaFBNTU3ECwAAAED7ddg3zodCIU2aNEkjRozQwIEDw+//5Cc/Ue/evZWdna133nlHv/jFL7Rx40b95S9/abadkpISTZ8+/XCHAQAAALR6zKREOuwkpaioSBs2bNDrr78e8f7VV18d/v+TTz5Z3bt319lnn62PP/5Yxx577EHtTJkyRcXFxeGfa2pqlJOTc7jDAgAAAFodkpRIh5WkTJw4US+99JJee+019ezZ81tj8/LyJEkfffRRs0lKMBiM+qN3AQAAALRerpIUx3F03XXXadGiRVq+fLn69u37nX+zfv16SVL37t0Pa4AAAABAW8dMSiRXSUpRUZHmz5+vF154QcnJySovL5f0VbGcxMREffzxx5o/f77+4z/+Q926ddM777yjG2+8UWeccYYGDRrUIgsAAAAAtHYkKZFcJSmzZ8+W9FXBxq+bO3euLr/8csXHx+vll1/WzJkzVV9fr5ycHF144YX61a9+FbUBf11lZaU5trlLzZpTV1dninNTWdxaCfeLL74wxX3b09K+LiUlxRTnpk1rReGGhgZz39YK29Y23VRItlYftlakdVNh2xprrcJrrdBujZPsy20do5v1Y93esbGxUe/bul9Y9zU3lbOty23dNtY6VdbzlGQ/X1grZ1u3oSSlp6eb4qyfD27Ok9bPMuuXBDfHovUYs25H635mPRYk+/FguQpDkrp06WLu27p++vTpY4qzfta5Yd3P3fS9c+dOU9z27dtNcdZj282++80nwB7KgX/4/i7WbS3pO29JkNx9NuDocn2517fJycnRihUrjmhAAAAAQHvDTEqkw366FwAAAIDoIEmJdETFHAEAAAAg2phJAQAAADzGTEokkhQAAADAYyQpkbjcCwAAAICvMJMCAAAA+EBbmgk5UiQpAAAAgMe43CsSl3sBAAAA8JVWPZNirWIqScFg0BTX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+RAMBk1xdXV15r6t54H6+npTnPVzSbLva9ZzeW1trblv67rs2rWrKS4xMdEU19DQYIpz07f1+5eb80VGRsZ3xliP66OBJCWSq0+G2bNna9CgQUpJSVFKSory8/O1ePHi8O/37dunoqIidevWTUlJSbrwwgtdfSECAAAAAFdJSs+ePTVjxgytXbtWa9as0VlnnaULLrhA7733niTpxhtv1F//+lc988wzWrFihbZt26Yf/ehHLTJwAAAAoK04MJNypK+2wtXlXueff37Ez3feeadmz56tVatWqWfPnvrjH/+o+fPn66yzzpIkzZ07VyeeeKJWrVql733ve9EbNQAAANCGcLlXpMO+ELipqUkLFixQfX298vPztXbtWu3fv18FBQXhmP79+6tXr15auXLlIdtpaGhQTU1NxAsAAABA++U6SXn33XeVlJSkYDCoa665RosWLdKAAQNUXl6u+Ph4de7cOSI+MzNT5eXlh2yvpKREqamp4VdOTo7rhQAAAABaMy73iuQ6STnhhBO0fv16vfnmm7r22ms1fvx4vf/++4c9gClTpqi6ujr8KisrO+y2AAAAgNaIJCWS60cQx8fH67jjjpMkDR06VG+99ZZ++9vfauzYsWpsbFRVVVXEbEpFRYWysrIO2V4wGDQ/Qg8AAABA23fED6cPhUJqaGjQ0KFD1aFDB5WWloZ/t3HjRm3ZskX5+flH2g0AAADQZjGTEsnVTMqUKVM0evRo9erVS7W1tZo/f76WL1+upUuXKjU1VVdeeaWKi4vVtWtXpaSk6LrrrlN+fj5P9gIAAAC+BU/3iuQqSamsrNS4ceO0fft2paamatCgQVq6dKnOOeccSdIDDzygmJgYXXjhhWpoaFBhYaF+//vft8jAAQAAALRNrpKUP/7xj9/6+4SEBM2aNUuzZs06okFZffbZZ+bYHj16mOI++ugjU1xtba2574aGBlPc3r17TXFffPGFKS47O9sUJ0ldunQxxcXHx5viUlJSzH3Hxdl2Q+t6dMO63F9++aUpbv/+/ea+rbGNjY1RjXMzRivrv9yEQiFzm0899ZQpLibGdtWqm76tyxMIBMxtRpt1jNdff70pznocSl89gt7CzTq3sh6L0Y6T7Muzb98+U1xsbKy57z179kS172h/Lkky31/aoUMHc5vR1hL7pLXNlujbej63fmfZvn27Kc7Nv9Zb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0KFDVVpaGn4vFAqptLRU+fn5Ho4MX9e3b19lZWVFbKeamhq9+eabbKejwHEcTZw4UYsWLdIrr7yivn37Rvx+6NCh6tChQ8T22bhxo7Zs2cL28UAoFFJDQwPbxUNnn3223n33Xa1fvz78ys3N1WWXXRb+f7aNf9TV1enjjz9W9+7dOW48NmLEiIMecf/hhx+qd+/ekvg+cKRIUr7hsG+5P0oWLFjgBINBZ968ec7777/vXH311U7nzp2d8vJyr4fWrtTW1jpvv/228/bbbzuSnPvvv995++23nc8++8xxHMeZMWOG07lzZ+eFF15w3nnnHeeCCy5w+vbt6+zdu9fjkbd91157rZOamuosX77c2b59e/i1Z8+ecMw111zj9OrVy3nllVecNWvWOPn5+U5+fr6Ho24fJk+e7KxYscLZvHmz88477ziTJ092AoGA8/e//91xHLaLn3z96V6Ow7bx0n//9387y5cvdzZv3uz84x//cAoKCpy0tDSnsrLScRy2jZdWr17txMXFOXfeeaezadMm589//rPTsWNH58knnwzH8H3AvQNP94qLi3M6dOhwRK+4uLg283Qv3ycpjuM4v/vd75xevXo58fHxzvDhw51Vq1Z5PaR259VXX3UkHfQaP3684zhfPXbw1ltvdTIzM51gMOicffbZzsaNG70ddDvR3HaR5MydOzccs3fvXufnP/+506VLF6djx47OD3/4Q2f79u3eDbqduOKKK5zevXs78fHxTnp6unP22WeHExTHYbv4yTeTFLaNd8aOHet0797diY+Pd3r06OGMHTvW+eijj8K/Z9t4669//aszcOBAJxgMOv3793ceeeSRiN/zfcC9A0lKbGysExcXd0Sv2NjYNpOkBBynLc0LAQAAAK1HTU2NUlNTFRMTo0AgcERtOY6jUCik6upqpaSkRGmE3vD1PSkAAAAA2h+SFAAAAMBjjoc3zs+aNUt9+vRRQkKC8vLytHr16m+Nf+aZZ9S/f38lJCTo5JNP1t/+9reDlmXq1Knq3r27EhMTVVBQoE2bNrkaE0kKAAAA4DGvkpSFCxequLhY06ZN07p16zR48GAVFhaqsrKy2fg33nhDl156qa688kq9/fbbGjNmjMaMGaMNGzaEY+655x49+OCDmjNnjt5880116tRJhYWF2rdvn3lc3JMCAAAAeOTAPSmSonJPiiRX96Tk5eVp2LBheuihhyR99aj8nJwcXXfddZo8efJB8WPHjlV9fb1eeuml8Hvf+973NGTIEM2ZM0eO4yg7O1v//d//rZtuuik8nszMTM2bN0+XXHKJaVzMpAAAAAA+cLRnURobG7V27VoVFBSE34uJiVFBQYFWrlzZ7N+sXLkyIl6SCgsLw/GbN29WeXl5RExqaqry8vIO2WZz4twsCAAAAAB/q6mpifg5GAwqGAweFLdz5041NTUpMzMz4v3MzEx98MEHzbZdXl7ebHx5eXn49wfeO1SMBTMpAAAAgEfi4+OVlZUVtfaSkpKUk5Oj1NTU8KukpCRq7R8tzKQAAAAAHklISNDmzZvV2NgYlfYcxzno3pbmZlEkKS0tTbGxsaqoqIh4v6Ki4pCJU1ZW1rfGH/hvRUWFunfvHhEzZMgQ83IwkwIAAAB4KCEhQSkpKVF5paamHvTeoZKU+Ph4DR06VKWlpeH3QqGQSktLlZ+f3+zf5OfnR8RL0rJly8Lxffv2VVZWVkRMTU2N3nzzzUO22RxmUgAAAIB2qri4WOPHj1dubq6GDx+umTNnqr6+XhMmTJAkjRs3Tj169AhfMnbDDTfozDPP1G9+8xudd955WrBggdasWaNHHnlE0ldPKJs0aZLuuOMO9evXT3379tWtt96q7OxsjRkzxjwukhQAAACgnRo7dqx27NihqVOnqry8XEOGDNGSJUvCN75v2bJFMTH/vvjq+9//vubPn69f/epX+uUvf6l+/frp+eef18CBA8Mxt9xyi+rr63X11VerqqpKp512mpYsWaKEhATzuKiTAgAAAMBXuCcFAAAAgK+QpAAAAADwFZIUAAAAAL5CkgIAAADAV0hSAAAAAPgKSQoAAAAAXyFJAQAAAOArJCkAAAAAfIUkBQAAAICvkKQAAAAA8BWSFAAAAAC+QpICAAAAwFf+fww2CvazqXM3AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(layout=\"constrained\", figsize=(8, 8))\n", "gs = GridSpec(2, 2, figure=fig)\n", "ax1 = fig.add_subplot(gs[0, 0]) \n", "ax2 = fig.add_subplot(gs[0, 1]) \n", "ax3 = fig.add_subplot(gs[1, :]) \n", "\n", "im1 = ax1.imshow(inputs[-1].T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax1.set_title('Input')\n", "im2 = ax2.imshow(features[-1].T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax2.set_title('Feature')\n", "im3 = ax3.imshow(rfs[-1].T, interpolation='nearest', cmap=plt.cm.gray, vmin=0.0, vmax=0.3)\n", "ax3.set_title('Receptive fields')\n", "fig.colorbar(im3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After 10000 trials, most neurons have developed a receptive field specific for a single horizontal or vertical bar, although these were always presented together.\n", "\n", "Let's now have a look at how these receptive fields develop over the course of training." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%matplotlib inline\n", "from matplotlib import animation\n", "from IPython.display import HTML\n", "\n", "fig = plt.figure(layout=\"constrained\", figsize=(8, 8))\n", "gs = GridSpec(2, 2, figure=fig)\n", "ax1 = fig.add_subplot(gs[0, 0]) \n", "ax2 = fig.add_subplot(gs[0, 1]) \n", "ax3 = fig.add_subplot(gs[1, :]) \n", "\n", "im1 = ax1.imshow(inputs[-1].T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax1.set_title('Input')\n", "im2 = ax2.imshow(features[-1].T, interpolation='nearest', cmap=plt.cm.gray)\n", "ax2.set_title('Feature')\n", "im3 = ax3.imshow(rfs[-1].T, interpolation='nearest', cmap=plt.cm.gray, vmin=0.0, vmax=0.3)\n", "ax3.set_title('Receptive fields')\n", "cb = fig.colorbar(im3)\n", "\n", "def drawframe(n):\n", " im1.set_data(inputs[n].T)\n", " im2.set_data(features[n].T) \n", " im3.set_data(rfs[n].T) \n", " return (im1, im2, im3)\n", "\n", "anim = animation.FuncAnimation(fig, drawframe, frames=int(T/10), interval=20, blit=True)\n", "plt.close()\n", "HTML(anim.to_html5_video())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most neurons become selective for a single bar. However, due to the lateral inhibition, two neurons selective for the same bar will compete with each other. The \"losing\" neuron will have to modify its receptive field to let the winner have it. This explains the instability of some cells during learning. " ] } ], "metadata": { "kernelspec": { "display_name": "tensorflow", "language": "python", "name": "tensorflow" }, "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.10.15" } }, "nbformat": 4, "nbformat_minor": 4 }