{ "metadata": { "name": "", "signature": "sha256:25d5e2f06395ff6dda482f8e546b880517bb26be941ce99e5ac3ece7976bf49b" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Purpose of the notebook\n", "explore pykov\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import pykov\n", "\n", "T = pykov.Chain({('A','B'): .3, ('A','A'): .7, ('B','A'): 1.})\n", "T.steady()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "{'B': 0.23076923076923075, 'A': 0.76923076923076938}" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", "from functools import partial\n", "from matplotlib import pyplot as plt\n", "\n", "from numpy import linalg as LA\n", "\n", "from hypergraph import generators\n", "from hypergraph.analytical import prediction\n", "from hypergraph import utils\n", "from hypergraph.markov_diffusion import create_markov_matrix_model_nodes\n", "from hypergraph.markov_diffusion import create_markov_matrix_model_hyper_edges\n", "\n", "\n", "def hypergraph_analytical_edges(HG):\n", " phis = []\n", " number_of_nodes = len(HG.nodes())\n", " all_phis = 0\n", " for edge in HG.hyper_edges():\n", " phis.append(len(edge))\n", " all_phis += len(edge)\n", " \n", " pis = [phi / all_phis for phi in phis]\n", " return pis\n", "\n", "\n", "\n", "all_models = {\n", " \"node\": {\n", " \"analytical\": partial(prediction, model='hypergraph_nodes'),\n", " \"numerical\": create_markov_matrix_model_nodes,\n", " \"name\": \"node\",\n", " },\n", " \"hyperedges\": {\n", " \"analytical\": partial(prediction, model='hypergraph_edges'),\n", " \"numerical\": create_markov_matrix_model_hyper_edges,\n", " \"name\": \"hyperedges\",\n", " }\n", "}\n", "\n", "\n", "def show_models(HG):\n", " model = all_models['node']\n", "\n", " def show_model(model):\n", " markov_matrix = model[\"numerical\"](HG)\n", " print(markov_matrix)\n", " show_model(model)\n", "\n", "\n", "def transition_matrix_to_pykov_chain(matrix):\n", " chain = pykov.Chain()\n", " \n", " for i, row in enumerate(matrix):\n", " for j, column in enumerate(row):\n", " chain[(i, j)] = column\n", " return chain\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "HG = generators.generic_hypergraph(9, ((3, 5), (3, 3)))\n", "show_models(HG)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.33333333 0.11111111 0.11111111 0.22222222 0. 0.\n", " 0.11111111 0. 0.11111111]\n", " [ 0.11111111 0.33333333 0.22222222 0.11111111 0. 0.\n", " 0.11111111 0.11111111 0. ]\n", " [ 0.08333333 0.16666667 0.33333333 0.25 0. 0.08333333\n", " 0. 0.08333333 0. ]\n", " [ 0.16666667 0.08333333 0.25 0.33333333 0. 0.08333333\n", " 0. 0. 0.08333333]\n", " [ 0. 0. 0. 0. 0.33333333 0.16666667\n", " 0.16666667 0.16666667 0.16666667]\n", " [ 0. 0. 0.16666667 0.16666667 0.16666667 0.33333333\n", " 0. 0. 0.16666667]\n", " [ 0.16666667 0.16666667 0. 0. 0.16666667 0.\n", " 0.33333333 0.16666667 0. ]\n", " [ 0. 0.16666667 0.16666667 0. 0.16666667 0.\n", " 0.16666667 0.33333333 0. ]\n", " [ 0.16666667 0. 0. 0.16666667 0.16666667 0.16666667\n", " 0. 0. 0.33333333]]\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "def plot_stuff(xs, ys, ys_prediction, freqs_matrix):\n", " width = 0.2\n", " plt.figure(figsize=(10, 8))\n", " plt.bar(xs, ys, width=width, color='crimson', label='Steady state for chains')\n", "\n", " print('prediction', ys_prediction)\n", " plt.bar(np.array(xs) + 1 * width, ys_prediction, width=width, color='#dcccdd', label='Analytical')\n", " plt.bar(np.array(xs) + 2 * width, freqs_matrix, width=width, label='Traversal matrix to N')\n", " plt.legend(loc=0)\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "mm = create_markov_matrix_model_nodes(HG)\n", "print('Matrix from model nodes')\n", "print(mm)\n", "\n", "chain = transition_matrix_to_pykov_chain(mm)\n", "print('\\nChain')\n", "print(chain)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Matrix from model nodes\n", "[[ 0.33333333 0.11111111 0.11111111 0.22222222 0. 0.\n", " 0.11111111 0. 0.11111111]\n", " [ 0.11111111 0.33333333 0.22222222 0.11111111 0. 0.\n", " 0.11111111 0.11111111 0. ]\n", " [ 0.08333333 0.16666667 0.33333333 0.25 0. 0.08333333\n", " 0. 0.08333333 0. ]\n", " [ 0.16666667 0.08333333 0.25 0.33333333 0. 0.08333333\n", " 0. 0. 0.08333333]\n", " [ 0. 0. 0. 0. 0.33333333 0.16666667\n", " 0.16666667 0.16666667 0.16666667]\n", " [ 0. 0. 0.16666667 0.16666667 0.16666667 0.33333333\n", " 0. 0. 0.16666667]\n", " [ 0.16666667 0.16666667 0. 0. 0.16666667 0.\n", " 0.33333333 0.16666667 0. ]\n", " [ 0. 0.16666667 0.16666667 0. 0.16666667 0.\n", " 0.16666667 0.33333333 0. ]\n", " [ 0.16666667 0. 0. 0.16666667 0.16666667 0.16666667\n", " 0. 0. 0.33333333]]\n", "\n", "Chain\n", "{(4, 7): 0.16666666666666666, (1, 3): 0.1111111111111111, (6, 6): 0.33333333333333331, (3, 0): 0.16666666666666666, (8, 0): 0.16666666666666666, (5, 4): 0.16666666666666666, (2, 1): 0.16666666666666666, (1, 6): 0.1111111111111111, (2, 5): 0.083333333333333329, (8, 5): 0.16666666666666666, (0, 3): 0.22222222222222221, (5, 8): 0.16666666666666666, (1, 2): 0.22222222222222221, (3, 8): 0.083333333333333329, (6, 7): 0.16666666666666666, (5, 5): 0.33333333333333331, (2, 0): 0.083333333333333329, (7, 6): 0.16666666666666666, (4, 8): 0.16666666666666666, (4, 4): 0.33333333333333331, (3, 3): 0.33333333333333331, (7, 2): 0.16666666666666666, (2, 2): 0.33333333333333331, (6, 4): 0.16666666666666666, (5, 3): 0.16666666666666666, (1, 1): 0.33333333333333331, (0, 1): 0.1111111111111111, (3, 2): 0.25, (0, 0): 0.33333333333333331, (7, 1): 0.16666666666666666, (4, 5): 0.16666666666666666, (6, 0): 0.16666666666666666, (7, 7): 0.33333333333333331, (2, 3): 0.25, (1, 0): 0.1111111111111111, (0, 8): 0.1111111111111111, (3, 5): 0.083333333333333329, (2, 7): 0.083333333333333329, (8, 3): 0.16666666666666666, (4, 6): 0.16666666666666666, (6, 1): 0.16666666666666666, (3, 1): 0.083333333333333329, (7, 4): 0.16666666666666666, (0, 6): 0.1111111111111111, (8, 8): 0.33333333333333331, (1, 7): 0.1111111111111111, (5, 2): 0.16666666666666666, (0, 2): 0.1111111111111111, (8, 4): 0.16666666666666666}\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "chain_transposed = pykov.Chain(chain)\n", "xs, ys = zip(*chain_transposed.steady().items())\n", "print(xs, ys)\n", "print(chain_transposed.succ(1))\n", "print('steady pykov', chain_transposed.steady())\n", "\n", "freqs_matrix = LA.matrix_power(mm, 40)[0]\n", "model = all_models['node'] \n", " \n", "xs = list(map(int, xs))\n", "ys_prediction = model[\"analytical\"](HG)\n", "\n", "plot_stuff(xs, ys, ys_prediction, freqs_matrix)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(0, 1, 2, 3, 4, 5, 6, 7, 8) (0.12499999999999994, 0.12499999999999993, 0.16666666666666657, 0.16666666666666666, 0.083333333333333356, 0.08333333333333337, 0.083333333333333287, 0.083333333333333287, 0.083333333333333523)\n", "{0: 0.1111111111111111, 1: 0.33333333333333331, 2: 0.22222222222222221, 3: 0.1111111111111111, 6: 0.1111111111111111, 7: 0.1111111111111111}\n", "steady pykov {0: 0.12499999999999994, 1: 0.12499999999999993, 2: 0.16666666666666657, 3: 0.16666666666666666, 4: 0.083333333333333356, 5: 0.08333333333333337, 6: 0.083333333333333287, 7: 0.083333333333333287, 8: 0.083333333333333523}\n", "prediction" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " [0.125, 0.125, 0.16666666666666666, 0.16666666666666666, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333]\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAloAAAHhCAYAAAC2vhDBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4VNW9//F3mIABA8FDEZCLCTdBKiiiYsspgrFSi0XE\nxaVKbY+tgOAR1IKitFovRahKBbVUrEe8gUvR+muh+qCnSuRSJV5AsEdCMMEIImi4VSQkvz8S0hCH\nzA5kZ4d8P6/n8ZE9s/bM+mRv8Zu9vrMHREREREREREREREREREREREREREREREREREREREREREQk\nREmJBjjnBgGzgBgwz3t/T6XnuwGPAWcAt3jv763w3M3AFUAxsAb4mfd+X81NX0RERKTualDVk865\nGDAHGAScCoxyznWvNGw7cC3wu0r7pgO/AHp770+jtFAbWTPTFhEREan7qiy0gLOBDd77Td77/cAC\nYEjFAd77bd77t4H9lfbdWfZYE+dcMtAE+KRmpi0iIiJS9yUqtNoC+RW2N5c9lpD3fgdwL5AHFABf\neu+XHskkRURERI5FyQmeLznSF3bOdQImAulAIeCdc5d775+KN/7ll18uicViR/p2IiIiIrXp9czM\nzPMSDUpUaH0CtK+w3Z7Sq1pB9AGWe++3AzjnFgHfAeIWWrFYjN69ewd8aREREZHoZGdn9w8yLtHS\n4dtAF+dcunOuETACeOkwYyt/gvFDoK9zrrFzLgnIBNYFmZQlWVlZUU8hEspti3Lboty2WM0dVJVX\ntLz3Rc65CcDLlH5q8FHv/Xrn3Jiy5+c651oDbwHNgGLn3HXAqd7795xz8ykt1oqBbOCPIWYRERER\nqVMS3kertixdurRES4ciIiJyLMjOziYzMzNhHZVo6VBEREREjlCiZngJWVZWFv369Yt6GrVOuW1R\nbju2b9/O1q1bad68edRTqXWFhYWkpaVFPY1aV59zH3fccbRo0eKoXkOFloiI1Ijdu3cDcOqpp0Y8\nk2icdNJJUU8hEvU59/bt29m9ezepqalH/Brq0RIRkRrxySefcNJJJ5GUVGf+1yJyVEpKSigoKKBt\n22/eq109WiIiUquSkpJUZEm9UhPntAqtiFm9/4hy26LcImKVCi0RERGRkKjQipi1TyQdpNy2KLdY\nNn36dMaOHRv1NI7a+PHj6dixIxdccEHo73PXXXcd0b73338/1113XQ3P6OjoU4ciIhKaA3lbKP50\nW2iv36BNS2IdWicct3LlSn7961/zz3/+k1gsRteuXbn77rs544wzePrpp3nyySdZvHhxKHMMo2/t\n4osvZvjw4YwePTrQ+OnTp7Np0yb+8Ic/HNH7rVixgtdff51169aRkpJyRK9RHUf6M5s0aVINz+To\nqdCKmMX77IByW6PcdhV/uo1do28J7fWbPnFXwkJr586djBw5kvvuu4+hQ4eyb98+VqxYwXHHHRfa\nvMJW2x86yM/Pp0OHDkdUZBUVFZGcbLfc0NKhiIjUazk5OSQlJXHppZeSlJRESkoKAwYM4NRTT+Wf\n//wnN954I2+99RYdOnSgY8eOAOzbt49p06bRs2dPunXrxg033MBXX30FlN6gc+TIkXTt2pWOHTsy\natQoCgoKyt/v448/ZvDgwXTo0IFLL72UHTt2lD83YsQIHnnkkUPm169fv7hX07766ivGjBlD586d\nycjIIDMzk23btnHnnXeyYsUKpkyZQocOHbjpppsAuOmmmzjttNM4+eSTGThwICtXrgRg6dKlzJo1\nixdeeIEOHTrQv39/oLQAvfbaazn11FPp0aMHd911F8XFxd+YxxNPPMHEiRPLf0b33HMPAI8//jh9\n+vShU6dOXH755WzZsqV8nxYtWvDoo4/Sp08fzj777LjHZeXKlVx44YVkZGRw2mmnsWDBgvLnvvzy\nS0aOHEmHDh244IIL2LRpU/lzh8sJhy7T5uXl0aJFCxYsWEDPnj3p0qUL9913X/nY1atXM3DgQE4+\n+WS6devGrbfeGneeR0uFVsSs/rar3LYot0Spc+fOxGIxxo8fz9KlS/nyyy/LnzvllFO49957Oeus\ns8jLy2Pjxo0A3H777eTm5rJs2TLefvttPv30U2bOnAlAcXExV1xxBe+//z7vv/8+KSkpTJkypfw1\nf/GLX3DGGWeQk5PDL3/5S5555pnyK1CjRo3i2WefLR+7du1atmzZwve///1vzHvBggXs2rWLtWvX\nsnHjRu677z5SUlK49dZbOffcc5kxYwZ5eXlMnz4dgDPPPJNly5aRm5vLsGHD+NnPfsbXX39NZmYm\nkyZN4tJLLyUvL4/XX38dKO2FatSoEatXr+b111/nf//3f5k/f/435jF69OhDfkZTpkzhjTfe4M47\n7+Sxxx5j/fr1tG/fnp///OeH7Ld48WJeffVVVqxY8Y3XzM/PZ/jw4YwZM4YNGzbwxhtv8O1vf7v8\n+UWLFjFlyhRyc3Pp2LEjd955Z/lzh8sJ8a/0rVq1irfeeosXX3yRmTNn8tFHHwFw8803M27cOD7+\n+GOys7O55JJLvrFvTVChJSIi9VrTpk3LrxhNnDiRrl27cvnll7NtW2nvWElJySHjS0pKeOKJJ7jz\nzjtJS0sjNTWViRMnsmjRIgBOOOEEBg8eTEpKCqmpqVx//fW8+eabAGzevJl3332XqVOn0rBhQ849\n91wGDRpU/h6DBg0iJyeH3NxcABYuXMill14ad2mtYcOG7Nixg40bN5KUlETPnj1p2rTpIfOsyDlH\n8+bNadCgAePHj2ffvn1s2LChfGzF8Z999hlLly7lrrvuonHjxnzrW99i3LhxvPDCC3F/hpXfy3vP\nFVdcwWmnnUajRo2YNm0ab731Fps3by4fM2nSJNLS0uIu0T733HOcd955XHrppcRiMU444YRDCq3B\ngwdzxhlnEIvFuOyyy1izZk3gnJVNnjyZ4447jh49etCjRw/Wrl0LQKNGjcjJyWH79u00adKEPn36\nxM1+tFRoRczqfXaU2xbllqh17dqVBx98kLVr1/Lmm2+yZcsWpk6dGnfs559/zt69exkwYAAZGRlk\nZGQwfPhwtm/fDsDevXuZNGkSvXr14uSTT2bw4MHs3LmTkpISPv30U5o3b07jxo3LX699+/blf05J\nSeGSSy5h4cKFlJSUsGjRIoYPHx53HiNGjGDgwIFcddVV9OjRg9tuu42ioqLy5ytfvZk9ezZ9+/Yl\nPT2djIwMdu7cWT7nyvLz89m/fz/du3cvz3j99dfz+eefB/p5bt269ZBcxx9/PP/xH/9xyBJqvLup\nH1RQUEB6evphn2/ZsmX5nxs3bsyePXvKt6uTE6BVq1blf27SpEn5az3wwAPk5OTQt29fMjMzeeWV\nVw77GkfDbneaiIiY1KVLF0aOHMnjjz8OfLNgadGiBY0bN2bFihW0bv3NRvsHH3yQnJwcli5dSsuW\nLVmzZg3nnXceJSUltG7dmi+//JK9e/fSpEkToLSoicVi5fuPHDmSa665hnPOOafKKynJyclMnjyZ\nyZMnly+1de7cmSuuuOIbc16xYgVz5szhxRdfpHv37gB07Nix/ApP5fFt27bluOOOIycnhwYNqn/N\npXXr1uTl5ZVv79mzhx07dhzyvYdVNey3bduW7Ozsar9vopzV0bFjx/J+uZdeeomf/vSn5OTkHFIk\n1wRd0YqY1R4O5bZFuSVKH330EQ8++GD51ZbNmzfz/PPPc9ZZZwGlV08KCgrYv38/AA0aNGD06NFM\nnTq1/ApPQUEBr732GlBaVKSkpNCsWTO++OILZsyYUf5e7du35/TTT2f69Ons37+flStX8vLLLx8y\nn7PPPpukpCR+9atfMWLEiMPOOysri3Xr1nHgwAFSU1Np2LBhecHWsmXLQxrEd+/eTXJyMi1atODr\nr79mxowZ7Nq1q/z5Vq1akZeXV16QtG7dmgEDBnDLLbewa9cuiouLyc3NZfny5YF+psOGDePpp59m\n7dq17Nu3jzvuuIM+ffrQrl27QPtfdtll/P3vf+fFF1+kqKiIHTt2lC/pVSVRzup49tlny49vs2bN\nSEpKOqKiMxFd0RIRkdA0aNOSpk8c2c0ng75+IqmpqaxevZqHHnqInTt30qxZMwYNGsTtt98OQP/+\n/enWrRvdunUjFovxf//3f9x2223MnDmT73//+2zfvp02bdpw1VVXMXDgQMaOHcvVV19Nly5daNOm\nDePGjWPJkiXl7/fII49wzTXX0KlTJ/r06cOoUaMoLCw8ZE4jRozgt7/9LU899dRh571161ZuuOEG\nCgoKOP744xk6dGh5YTZmzBjGjx/Pn/70J0aMGMFdd93FwIEDOeusszj++OMZO3bsIUXPkCFDePbZ\nZ+nUqRPp6em89tprPPTQQ/zmN7/h3HPPZffu3aSnpx/2Zp+Vv/Ovf//+TJ06lSuvvJIvv/ySc845\nh3nz5h0yvirt2rXj2WefZdq0aVx33XU0a9aMW2+9tbxPq/L+B7fPP//8KnNWnmdV83jttdeYNm0a\n//rXv2jfvj3z5s0L5ZYfdebbP5cuXVrSu3fvqKdR66zeZ0e5bVFuGwoKCg5ZOpLDW7hwIfPnz+ev\nf/1r1FORBA53XmdnZ5OZmZmwjtLSoYiISC3au3cv8+bN48orr4x6KlILVGhFzNJvuxUpty3KLVLq\n1Vdf5ZRTTqF169ZcdtllUU9HaoF6tERERGrJ+eefT35+ftTTkFqkK1oRs3qfHeW2RblFxCoVWiIi\nIiIhUaEVMas9HMpti3KLiFUqtERERERCokIrYlZ7OJTbFuUWEatUaImIiByh6dOnM3bs2CPad8WK\nFZxzzjlHPYdevXrx+uuvH/XrSDh0e4eIWe3hUG5blNuuA/sPUFxUHNrrN0huQKxhLPHAMhdffDEf\nfPABH374IY0aNTrq90/0VTMVtWjRgtWrV5Oeng7Aueeey6pVq2pkDtWZh9QuFVoSiQN5Wyj+dFu1\n9knqmk5JSkrg8dv2HWDb3v3Veo8TUxvRplnNf9fVQVZzi13FRcXs+nR3aK/ftE1q4EIrLy+P7Oxs\n2rVrx5IlSxgyZMhRv//BL2kOa7wc+1RoRczad6Ed9MWHG2gwYUbigRWkLpvP7i+C/4X9WaMYk/+W\nU633mHlR51ALDqu5rZ7nVnPXVQsWLKB///6ceeaZLFiwoLzQGj9+PE2aNCE/P5/ly5dzyimn8Mgj\nj5Rfebrpppv461//ys6dO+nUqRN33303ffv2LX/dg1eTRowYQWZmJr/4xS/Kn+vXrx8333wzDz/8\nMADf+973SEpK4oEHHuBb3/oWY8eOZe3atQBs3ryZqVOnsnLlSoqLixk2bBj33HMPubm5TJw4kQ8+\n+ICkpCQGDhzIzJkzadasWW382OQoqUdLRERMWLhwIUOHDuWSSy7htdde4/PPPy9/7oUXXmDKlCnk\n5ubSsWNH7rzzzvLnzjzzTJYtW0Zubi7Dhg3jZz/7GV9//XX58wevUo0aNYpnn322/PG1a9eyZcsW\nLrzwQv7yl78AsGzZMvLy8rjkkksOmduBAwcYNWoUHTp04L333uODDz5g6NCh5c9ff/31rF+/npUr\nV/LJJ58wffr0mv3hSGhUaEXM6m+7aWlpUU8hElZzWz3Preaui1auXMmnn37KoEGD6NSpE6eccgre\n+/LnBw8ezBlnnEEsFuOyyy5jzZo15c8552jevDkNGjRg/Pjx7Nu3jw0bNnzjPQYNGkROTg65ublA\naWF36aWXkpycePFo9erVbN26ld/85jc0btyY4447rvyqWUZGBv3796dhw4a0aNGCcePGsXz58qP9\nkUgtUaElIiL13jPPPMOAAQNo2rQpAEOGDGHBggXlz7ds2bL8z40bN2bPnj3l27Nnz6Zv376kp6eT\nkZHBzp072b59+zfeIyUlhUsuuYSFCxdSUlLCokWLGD58eKD5ffLJJ7Rv354GDb75v+XPPvuMq666\nih49enDyySczbtw4duzYETi7REuFVsSs3mensLAw6ilEwmpuq+e51dx1zb/+9S9efPFFli1bRvfu\n3enevTsPPvggH3zwAR988EGV+65YsYI5c+bw2GOPsWnTJnJzc2nWrNlhm9pHjhzJc889x9///nea\nNGlCnz59As2xbdu2bN68mQMHDnzjuTvuuINYLMby5cv5+OOPefjhhykuDu+TnFKzVGiJiEi9tnjx\nYpKTk1mxYgVvvPEGb7zxBitXrqRv376HXNWKZ/fu3SQnJ9OiRQu+/vprZsyYwa5duw47/uyzzyYp\nKYlf/epXjBgx4pDnTjzxxPJlxcrOPPNMWrVqxe23387evXv56quvym/9sGfPHpo0aULTpk0pKChg\n9uzZ1fwJSJRUaEXMag+H1V4lq7mtnudWc1fUILkBTdukhvZPg+TE/xtbsGABl19+OW3btqVly5a0\nbNmSE088kZ///Oc899xzFBcXf+M+VAe3zz//fAYOHMhZZ53F6aefTkpKCu3atTtkXOV9R4wYwbp1\n676xbDhlyhTGjx9PRkYGf/7znw/ZNxaL8fTTT5Obm0vPnj057bTTePHFFwGYPHky77//Punp6fz4\nxz/m4osv1n2zjiF15kgtXbq0pHfv3lFPQ2rJ/lVr2DX6lmrtk7psPrv3BL8HTd4R3uag10lNq7VP\ndVjNLTYUFBRw0kknRT2NyC1cuJD58+fz17/+NeqpSA043HmdnZ1NZmZmwjpKV7QiZrWHw2qvktXc\nVs9zq7kt27t3L/PmzePKK6+MeipSR6jQEhERqQGvvvoqp5xyCq1bt+ayyy6LejpSR+jO8BGz2sOR\nlpbG4dtJ6y+rua2e51ZzW3X++eeTn58f9TSkjtEVLREREZGQJLyi5ZwbBMwCYsA87/09lZ7vBjwG\nnAHc4r2/t8JzzYF5QA+gBPgv7/3Kmpv+sc/qd6EVFhaarPKt5rZ6nlvNLSL/VuXf+c65GDAHGASc\nCoxyznWvNGw7cC3wuzgv8Xtgsfe+O9ATWH/UMxYRERE5RiS6onU2sMF7vwnAObcAGEKFgsl7vw3Y\n5pz7YcUdnXNpwH96768sG1cE2PzIVRWs/rZrtVfJam6r57nV3CLyb4kKrbZAxc6+zcA5AV87g9IC\n7DGgF7AauM57v7fasxQRERE5BiVqFwl+l8RvSgZ6Aw9573sDe4Cbqtqh4j1nsrKyTGwffKyuzKe2\ntgsKCqiuogNF1RtfVL3xFYWVv67eR6uwsDDU4/3www/XqfNP/32Huy3hevrpp7nooouinka5zZs3\n06FDh8N+/+OxLtHfj4lUeUdT51xf4Dbv/aCy7ZuB4soN8WXP/RrYfbAZ3jnXGljhvc8o2+4H3OS9\nHxzvvazeGT4ry2az7OevZNFgwoxq7VMf7pBuNbfV89xa7nh30P505z4+2/11aO95Ymoj2jQ7rsox\n7du3L//Kmj179pCSkkIsFgPg/vvvZ9iwYaHNLwxPP/00Tz75JIsXLw79vXr16sXs2bP53ve+F8rr\nX3zxxQwfPpzRo0cf0f69evXiq6++4p133qFJkyYAzJ8/n+eee46XXnqpRuZ4tHeGT7R0+DbQxTmX\nDhQAI4BRhxl7yJt577c45/Kdc1299/8HZAJVf026QZb+Eq7Iaq+S1dxWz3OruSv6bPfX/HLxhtBe\nf+ZFnRMWWhXvbXX66afzwAMPxC0cioqKSE6undtL1uZ7HY2kpKQqr1QdbY6a+M7G4uJi5s6dy6RJ\nk476tcJQ5dJhWQP7BOBlYB2w0Hu/3jk3xjk3BkqvXDnn8oFJwK3OuTznXGrZS1wLPOWce4/STx3e\nHVYQERGR6sjKyqJHjx488MADdO/enf/+7/+msLCQkSNH0rVrVzp27MioUaPKWx0WLVrE+eeff8hr\nPPTQQ1x++eUA7Nu3j2nTptGzZ0+6devGDTfcwFdffXXY99qxYwcjR44kIyODTp068cMf/vszZbNm\nzeLMM8+kQ4cOnHvuuYG/NzEvL48WLVrw9NNPc9ppp9GpUycee+wxsrOz6devHxkZGUyZMqV8fG5u\nLkOGDKFz58506dKFMWPGsHPnTgDGjh3L5s2b+fGPf0yHDh2YPXt2+es/+eST9OzZk6FDh5Kfn0+L\nFi0oLi7miy++4Nvf/jYvv/wyALt37+bMM8/k2Wef/cZc77zzTlasWMGUKVPo0KEDN91U2l20atUq\nzj//fNLT08nMzOQf//jHYfMmJSUxYcIE5syZUz7vuiZhGeq9XwIsqfTY3Ap/3gK0P8y+7wFnHeUc\n6zVrSwsHWb2flNXcVs9zq7mPJdu2bePLL7/k/fff58CBA/zrX//iiiuu4H/+538oKiri2muvZcqU\nKTzxxBMMGjSIiRMnsnHjRjp27AjA888/z4QJEwC4/fbbycvLY9myZcRiMa6++mpmzpzJtGnT4r7X\njBkzaNu2LRs2lF7xe+utt8rnlZGRweLFi2nVqhUvvPACY8eOZfXq1Zx44omBcmVnZ7N69WrefPNN\nRo0axQUXXMCf//xnvv76a8477zyGDBnCd77zHQCuv/56vvOd77Bz506uvPJKpk+fzt13380f/vAH\nVq5cecgVwLy8PABWrFjBqlWraNCgAVu3bi1/3xNOOIHZs2dzzTXXsGzZMu644w569uzJ8OHDvzHH\nW2+9lX/84x8MHz6cK664AoAvvviCkSNHMmPGDIYNG8YLL7zAyJEjWb16NSeccELcrKeffjrf/e53\nmT17Nrfcckugn09tsvh3voiICAANGjTgpptuomHDhqSkpHDCCScwePBgUlJSSE1N5frrr+fNN98E\noEmTJlx00UU8//zzAOTk5PDRRx/xgx/8gJKSEp544gnuvPNO0tLSSE1NZeLEiSxatOiw79WwYUO2\nbt1KXl4esViMvn37lo8dMmQIrVq1AmDo0KF07NiR1atXB85144030qhRIwYMGEBqairDhg2jRYsW\ntGnThr59+/L+++8DpQVd//79adiwIS1atGDcuHEsX7484etPmTKFxo0bc9xx31y2HTBgAEOGDGHI\nkCG8+uqr3H///VW+VsWlyVdeeYXOnTvjnKNBgwYMGzaMLl268Le//e2w+yclJXHzzTfzyCOPsH37\n9oRzr20qtCJm9bfdtLS0qKcQCau5rZ7nVnMfS1q0aEGjRo3Kt/fu3cukSZPo1asXJ598MoMHD2bn\nzp3lxcCwYcPKC63nnnuuvCj7/PPP2bt3LwMGDCAjI4OMjAyGDx9+yP/4K7/XtddeS0ZGBsOGDaN3\n7978/ve/L39uwYIF9O/fv/y11q9fz44dOwLnqnjlKyUl5ZDtxo0bs2fPHgA+++wzrrrqKnr06MHJ\nJ5/MuHHjAr1P27Ztq3z+Jz/5CR9++CGjRo2iefPmVY6t2Ke1ZcsW2rVrd8jz7du359NPP63yNbp3\n786FF17IrFmzaqTvqyap0BIREbMq/0/5wQcfJCcnh6VLl/Lxxx/zl7/8hZKSkvJC67zzzmP79u2s\nXbuWRYsWlX9isUWLFjRu3JgVK1aQm5tLbm4umzZtKl9qi/deqamp3HHHHWRnZ/PUU0/x0EMPsWzZ\nMvLz85k0aRIzZsxg48aN5Obm0r179xq9fcLBudxxxx3EYjGWL1/Oxx9/zMMPP0xxcfFh55zocYAD\nBw4wceJERo4cyaOPPkpubm7CeRzUpk2bb3wxd35+ftxP/VV20003MX/+/IRFWW1ToRUxq/eeqav3\nkwqb1dxWz3OruY9lB2//0KxZM7744gtmzDj0diwNGzZkyJAhTJs2jcLCQgYMGACULguOHj2aqVOn\n8vnnnwOltwV47bXXDvter7zyChs3bqSkpISmTZsSi8Vo0KABe/bsISkpqbzB/KmnnmL9+pr7BruK\nBduePXto0qQJTZs2paCggNmzZx8ytmXLllUWSvHcd999xGIx5syZw7XXXsu4ceMOKd4qv/6mTZvK\nty+44AJycnJ4/vnnKSoqYtGiRXz00UdceOGFCd83IyODoUOHMnfu3IRja1Pd/2ypiIgcs05MbcTM\nizqH+vpHo/IVlbFjx3L11VfTpUsX2rRpw7hx41iy5JDPg3HZZZfxwx/+kJ///Oc0aPDv6xW33XYb\nM2fO5Pvf/z7bt2+nTZs2XHXVVQwcODDue+Xk5DB58mS2b99OWloaV111Fd/97ncBGD9+PBdeeCEN\nGjRgxIgRh/RvJSUlVXlFKdHSWcXnJ0+ezDXXXEN6ejodO3bEOccf/vCH8ucnTZrElClTuO2227jx\nxhu5+OKL477+wcfeffddHn74YV577TWSkpK47rrreOWVV/j9738f9/YLY8aMYfz48fzpT39ixIgR\n/Pa3v+WZZ55h6tSp3HDDDXTq1IlnnnnmsI3wlf3yl7/k2WefrVPLh3VmJlZvWGrV/lVr2DW6ep8O\nqQ837rSaW2w43I0dRY5lR3vDUi0dioiIiIREhVbErPZwWO1Vsprb6nluNbeI/JsKLREREZGQqNCK\nmNX77Fi9n5TV3FbPc6u5ReTfVGiJiIiIhESFVsSs9nBY7VWymtvqeW4tdywWY+/evVFPQ6TG7N27\nl1gsdlSvoftoiYhIjTjxxBP57LPP2LRpU8KvXamPCgsLTbYH1OfcsVgs8Bd5H44KrYhZ7eFIS0tj\nV9STiIDV3FbPc2u5k5KSaNWqVfmXIVtj9R5iVnMHpaVDERERkZCo0IqYtR6Og6z2KlnNbfU8V25b\nlFviUaElIiIiEhIVWhGz1sNxUH1tnEzEam6r57ly26LcEo8KLREREZGQqNCKmNW1bau9SlZzWz3P\nldsW5ZZ4VGiJiIiIhESFVsSsrm1b7VWymtvqea7ctii3xKNCS0RERCQkKrQiZnVt22qvktXcVs9z\n5bZFuSUeFVoiIiIiIVGhFTGra9tWe5Ws5rZ6niu3Lcot8ajQEhEREQmJCq2IWV3bttqrZDW31fNc\nuW1RbolHhZaIiIhISFRoRczq2rbVXiWrua2e58pti3JLPCq0REREREKiQitiVte2rfYqWc1t9TxX\nbluUW+JRoSUiIiISEhVaEbO6tm21V8lqbqvnuXLbotwSjwotERERkZCo0IqY1bVtq71KVnNbPc+V\n2xbllnhvyQJmAAAgAElEQVRUaImIiIiERIVWxKyubVvtVbKa2+p5rty2KLfEo0JLREREJCQqtCJm\ndW3baq+S1dxWz3PltkW5JZ7kRAOcc4OAWUAMmOe9v6fS892Ax4AzgFu89/dWej4GvA1s9t5fXFMT\nFxEREanrqryiVVYkzQEGAacCo5xz3SsN2w5cC/zuMC9zHbAOKDm6qdZPVte2rfYqWc1t9TxXbluU\nW+JJtHR4NrDBe7/Je78fWAAMqTjAe7/Ne/82sL/yzs65dsBFwDwgqWamLCIiInJsSFRotQXyK2xv\nLnssqPuBXwLF1ZyXGVbXtq32KlnNbfU8V25blFviSVRoHfFyn3NuMPCZ9/4ddDVLREREDEpUaH0C\ntK+w3Z7Sq1pBfAf4kXMuF3gGGOicm1/VDhWr4qysLBPbB9e268p8amv7SBQdKKre+KLqja8orPx1\ntUersLAw9ONdl84//fcd/n/fdWk+Ot463mHnr0qVV5qcc8nAP4HzgQLgH8Ao7/36OGNvA3ZV/tRh\n2XP9gRur+tTh0qVLS3r37h144nJs279qDbtG31KtfVKXzWf3nuAXWfMaxZj8t5xqvcfMizrT66Sm\n1dqnOqzmFhGpb7Kzs8nMzEy4YlflFS3vfREwAXiZ0k8OLvTer3fOjXHOjQFwzrV2zuUDk4BbnXN5\nzrnUOC+nTx3GUZ2quD6x2qtkNbfV81y5bVFuiSc50QDv/RJgSaXH5lb48xYOXV6M9xqvA68f4RxF\nREREjkm6M3zErN5/pK72KoXNam6r57ly26LcEo8KLREREZGQqNCKmNW1bau9SlZzWz3PldsW5ZZ4\nVGiJiIiIhESFVsSsrm1b7VWymtvqea7ctii3xKNCS0RERCQkKrQiZnVt22qvktXcVs9z5bZFuSUe\nFVoiIiIiIVGhFTGra9tWe5Ws5rZ6niu3Lcot8ajQEhEREQmJCq2IWV3bttqrZDW31fNcuW1RbolH\nhZaIiIhISFRoRczq2rbVXiWrua2e58pti3JLPCq0REREREKiQitiVte2rfYqWc1t9TxXbluUW+JR\noSUiIiISEhVaEbO6tm21V8lqbqvnuXLbotwSjwotERERkZCo0IqY1bVtq71KVnNbPc+V2xbllnhU\n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\nAEYAow4ztvKbVWdfERERkXqnyh4t730RMAF4GVgHLPTer3fOjXHOjQFwzrV2zuUDk4BbnXN5zrnU\nw+0bZphjkdWeHeW2xWoPh3LbotwST8L7aHnvlwBLKj02t8KftwDtg+4rIiIiYoXuDB8xq/dVUm5b\nrN5nR7ltUW6JR4WWiIiISEhUaEXMas+OcttitYdDuW1RbolHhZaIiIhISFRoRcxqz45y22K1h0O5\nbVFuiUeFloiIiEhIVGhFzGrPjnLbYrWHQ7ltUW6JR4WWiIiISEhUaEXMas+OcttitYdDuW1RbolH\nhZaIiIhISFRoRcxqz45y22K1h0O5bVFuiUeFloiIiEhIVGhFzGrPjnLbYrWHQ7ltUW6JR4WWiIiI\nSEhUaEXMas+OcttitYdDuW1RbolHhZaIiIhISFRoRcxqz45y22K1h0O5bVFuiUeFloiIiEhIVGhF\nzGrPjnLbYrWHQ7ltUW6JR4WWiIiISEhUaEXMas+OcttitYdDuW1RbolHhZaIiIhISFRoRcxqz45y\n22K1h0O5bVFuiUeFloiIiEhIVGhFzGrPjnLbYrWHQ7ltUW6JR4WWiIiISEhUaEXMas+OcttitYdD\nuW1RbolHhZaIiIhISFRoRcxqz45y22K1h0O5bVFuiUeFloiIiEhIVGhFzGrPjnLbYrWHQ7ltUW6J\nR4WWiIiISEhUaEXMas+OcttitYdDuW1RbolHhZaIiIhISFRoRcxqz45y22K1h0O5bVFuiUeFloiI\niEhIkqOegHVpaWnsinoSEVBuW87t0Jn9q9ZUa5+krumUpKQEHr9t3wG27d1frfc4MbURbZodV619\nqkO5g1PuYJQ7uLBzB6VCS0RCV/zpNnaNvqVa+6Qum8/uL3YHHv9ZoxiT/5ZTrfeYeVHnUP8iVu7g\nlDsY5Q4u7NxBaekwYlZ7dpTbFuW2RbltsZo7KBVaIiIiIiFJuHTonBsEzAJiwDzv/T1xxjwA/ADY\nC/zUe/9O2eM3A1cAxcAa4Gfe+301N/1jn9WeHeW2RbltUW5brOYOqsorWs65GDAHGAScCoxyznWv\nNOYioLP3vgtwNfBw2ePpwC+A3t770ygt1EbWdAARERGRuirR0uHZwAbv/Sbv/X5gATCk0pgfAY8D\neO9XAc2dc62AncB+oIlzLhloAnxSk5OvD6yubSu3Lcpti3LbYjV3UIkKrbZAfoXtzWWPJRzjvd8B\n3AvkAQXAl977pUc3XREREZFjR6JCqyTg6yRVfsA51wmYCKQDJwGpzrnLqzW7BIoOFFVvfFH1xleU\nlZV1yN1va2q7rn73XWFhYSh5j4aOd3h0vHW8dbx1vI90+0jUh+MdVKJm+E+A9hW221N6xaqqMe3K\nHjsPWO693w7gnFsEfAd4KvDsEkiOJRO8FoTk5CO/bVjlL82sqe3q3uSttqSlpdGr+7/nXNP5j6R5\nUsc7PDreOt4V6XjreFdn2+rxzs7ODvT+iWb+NtClrLG9ABgBjKo05iVgArDAOdeX0iXCrc65fwLT\nnHONga+ATOAfgWZlSGFhocl7bCi3Lcpti3LbYjV3UFX+bLz3RZQWUS8D64CF3vv1zrkxzrkxZWMW\nAxudcxuAucA1ZY+/C8yntFh7v+wl/xhKChEREZE6KOG1OO/9EmBJpcfmVtqecJh9ZwAzjmaC9Z3V\n+48oty3KbYty22I1d1C62iciIiISEhVaEbN6/xHltkW5bVFuW6zmDkqFloiIiEhIVGhFrK7edyVs\nym2Lctui3LZYzR2UCi0RERGRkKjQipjVtW3ltkW5bVFuW6zmDkqFloiIiEhIVGhFzOratnLboty2\nKLctVnMHpUJLREREJCQqtCJmdW1buW1RbluU2xaruYNSoSUiIiISEhVaEbO6tq3ctii3Lcpti9Xc\nQanQEhEREQmJCq2IWV3bVm5blNsW5bbFau6gVGiJiIiIhESFVsSsrm0rty3KbYty22I1d1AqtERE\nRERCokIrYlbXtpXbFuW2RbltsZo7KBVaIiIiIiFRoRUxq2vbym2Lctui3LZYzR2UCi0RERGRkKjQ\nipjVtW3ltkW5bVFuW6zmDkqFloiIiEhIVGhFzOratnLboty2KLctVnMHpUJLREREJCQqtCJmdW1b\nuW1RbluU2xaruYNSoSUiIiISEhVaEbO6tq3ctii3Lcpti9XcQanQEhEREQmJCq2IWV3bVm5blNsW\n5bbFau6gVGiJiIiIhESFVsSsrm0rty3KbYty22I1d1AqtERERERCokIrYlbXtpXbFuW2RbltsZo7\nKBVaIiIiIiFRoRUxq2vbym2Lctui3LZYzR2UCi0RERGRkKjQipjVtW3ltkW5bVFuW6zmDkqFloiI\niEhIVGhFzOratnLboty2KLctVnMHpUJLREREJCTJiQY45wYBs4AYMM97f0+cMQ8APwD2Aj/13r9T\n9nhzYB7QAygB/st7v7Lmpn/sKywsNFntKrctym2LcttiNXdQVf5snHMxYA4wCDgVGOWc615pzEVA\nZ+99F+Bq4OEKT/8eWOy97w70BNbX4NxFRERE6rREV7TOBjZ47zcBOOcWAEM4tGD6EfA4gPd+lXOu\nuXOuFfAV8J/e+yvLnisC9NGEStLS0tgV9SQioNy2KLctym2L1dxBJSq02gL5FbY3A+cEGNMOOABs\nc849BvQCVgPXee/3HtWMRURERI4RiZZVSwK+TlKc/ZKB3sBD3vvewB7gpupNr2pFB4qqN76oeuMr\nysrKIisrq8a36+r9RwoLC0PJe1BBQUG156TjHR4dbx1vHW8d7yPdtnq8g0p0ResToH2F7faUXrGq\naky7sseSgM3e+7fKHn+OGi60kmPJBK8FITk5Ye//YfXr1y+U7c9fCX6walNaWhq9uv97zjWd//jj\nj6/2nHS8w6PjreNdkY63jnd1tq0e7+zs7EDvn+iK1ttAF+dcunOuETACeKnSmJeAnwA45/oCX3rv\nt3rvtwD5zrmuZeMygQ8CzcoQq/cfUW5blNsW5bbFau6gqiy0yhrYJwAvA+uAhd779c65Mc65MWVj\nFgMbnXMbgLnANRVe4lrgKefce5R+6vDuEDKIiIiI1EkJr8V575cASyo9NrfS9oTD7PsecNbRTLC+\ns3r/EeW2RbltUW5brOYOSj8bERERkZCo0IqY1bVt5bZFuW1Rblus5g5KhZaIiIhISFRoRayu3ncl\nbMpti3Lboty2WM0dlAotERERkZCo0IqY1bVt5bZFuW1Rblus5g5KhZaIiIhISFRoRczq2rZy26Lc\ntii3LVZzB6VCS0RERCQkKrQiZnVtW7ltUW5blNsWq7mDUqElIiIiEhIVWhGzurat3LYoty3KbYvV\n3EGp0BIREREJiQqtiFld21ZuW5TbFuW2xWruoFRoiYiIiIREhVbErK5tK7ctym2LcttiNXdQKrRE\nREREQqJCK2JW17aV2xbltkW5bbGaOygVWiIiIiIhUaEVMatr28pti3Lboty2WM0dlAotERERkZCo\n0IqY1bVt5bZFuW1Rblus5g5KhZaIiIhISFRoRczq2rZy26Lctii3LVZzB6VCS0RERCQkKrQiZnVt\nW7ltUW5blNsWq7mDUqElIiIiEhIVWhGzurat3LYoty3KbYvV3EGp0BIREREJiQqtiFld21ZuW5Tb\nFuW2xWruoFRoiYiIiIREhVbErK5tK7ctym2LcttiNXdQKrREREREQqJCK2JW17aV2xbltkW5bbGa\nOygVWiIiIiIhUaEVMatr28pti3Lboty2WM0dlAotERERkZCo0IqY1bVt5bZFuW1Rblus5g5KhZaI\niIhISFRoRczq2rZy26Lctii3LVZzB5WcaIBzbhAwC4gB87z398QZ8wDwA2Av8FPv/TsVnosBbwOb\nvfcX19TERUREROq6Kq9olRVJc4BBwKnAKOdc90pjLgI6e++7AFcDD1d6meuAdUBJTU26PrG6tq3c\ntii3Lcpti9XcQSVaOjwb2OC93+S93w8sAIZUGvMj4HEA7/0qoLlzrhWAc64dcBEwD0iqyYmLiIiI\n1HWJCq22QH6F7c1ljwUdcz/wS6D4KOZYr1ld21ZuW5TbFuW2xWruoBIVWkGX+ypfrUpyzg0GPivr\n19LVLBERETEnUaH1CdC+wnZ7Sq9YVTWmXdlj3wF+5JzLBZ4BBjrn5h/ddA9VdKCoeuOLqje+oqys\nLLKysmp8u66ubRcWFoaS92joeIdHx1vHW8dbx/tIt49EfTjeQSX61OHbQBfnXDpQAIwARlUa8xIw\nAVjgnOsLfOm93wJMLfsH51x/4Ebv/U8CzyyA5Fgy1emxT05O+CHLw+rXr18o2/tXrTniOYUpLS2N\nXt3/Peeazp+Wlsauas5Jxzs8Ot463hXpeOt4V2fb6vHOzs4O9P5VXtHy3hdRWkS9TOknBxd679c7\n58Y458aUjVkMbHTObQDmAtcc5uX0qcM4rK5tK7ctym2LcttiNXdQCUtE7/0SYEmlx+ZW2p6Q4DVe\nB14/kgmKiIiIHKt0Z/iI1dU1/bApty3KbYty22I1d1AqtERERERCokIrYlbXtpXbFuW2RbltsZo7\nKBVaIiIiIiFRoRUxq2vbym2Lctui3LZYzR2UCi0RERGRkKjQipjVtW3ltkW5bVFuW6zmDkqFloiI\niEhIVGhFzOratnLboty2KLctVnMHpUJLREREJCQqtCJmdW1buW1RbluU2xaruYNSoSUiIiISEhVa\nEbO6tq3ctii3Lcpti9XcQanQEhEREQmJCq2IWV3bVm5blNsW5bbFau6gVGiJiIiIhESFVsSsrm0r\nty3KbYty22I1d1AqtERERERCokIrYlbXtpXbFuW2RbltsZo7KBVaIiIiIiFRoRUxq2vbym2Lctui\n3LZYzR2UCi0RERGRkKjQipjVtW3ltkW5bVFuW6zmDkqFloiIiEhIVGhFzOratnLboty2KLctVnMH\npUJLREREJCQqtCJmdW1buW1RbluU2xaruYNSoSUiIiISEhVaEbO6tq3ctii3Lcpti9XcQanQEhER\nEQmJCq2IWV3bVm5blNsW5bbFau6gVGiJiIiIhESFVsSsrm0rty3KbYty22I1d1AqtERERERCokIr\nYlbXtpXbFuW2RbltsZo7KBVaIiIiIiFRoRUxq2vbym2Lctui3LZYzR2UCi0RERGRkKjQipjVtW3l\ntkW5bVFuW6zmDkqFloiIiEhIVGhFzOratnLboty2KLctVnMHlRxkkHNuEDALiAHzvPf3xBnzAPAD\nYC/wU+/9O8659sB84ESgBPij9/6Bmpq8iIiISF2W8IqWcy4GzAEGAacCo5xz3SuNuQjo7L3vAlwN\nPFz21H5gkve+B9AXGF95X+usrm0rty3KbYty22I1d1BBlg7PBjZ47zd57/cDC4Ahlcb8CHgcwHu/\nCmjunGvlvd/ivX+37PHdwHrgpBqbvYiIiEgdFqTQagvkV9jeXPZYojHtKg5wzqUDZwCrqj3Leszq\n2rZy26Lctii3LVZzBxWk0CoJ+FpJh9vPOZcKPAdcV3Zlq0YUHSiq3vii6o2vKCsri6ysrNC265rC\nwsJQ8x7JpWYd7/DoeOt463jreB/pto531YI0w38CtK+w3Z7SK1ZVjWlX9hjOuYbA88CT3vsXA88s\ngORYMsHrQEhODtT7H1e/fv1C2f78law6+dHPtLQ0enX/95xrOv+R0PEOj463jndFOt463tXZPhL1\n4XhnZ2cHev8gM38b6FK29FcAjABGVRrzEjABWOCc6wt86b3f6pxLAh4F1nnvZwWakYiIiEg9kbD4\n9t4XUVpEvQysAxZ679c758Y458aUjVkMbHTObQDmAteU7f5d4ApggHPunbJ/BoUR5FhldW1buW1R\nbluU2xaruYMKdC3Oe78EWFLpsbmVtifE2S8L3RRVREREjFIRFDGr9x9RbluU2xbltsVq7qBUaImI\niIiERIVWxKyubSu3Lcpti3LbYjV3UCq0REREREKiQitiVte2ldsW5bZFuW2xmjsoFVoiIiIiIVGh\nFTGra9vKbYty26LctljNHZQKLREREZGQqNCKmNW1beW2RbltUW5brOYOSoWWiIiISEhUaEXM6tq2\nctui3LYoty1WcwelQktEREQkJCq0ImZ1bVu5bVFuW5TbFqu5g1KhJSIiIhISFVoRs7q2rdy2KLct\nym2L1dxBqdASERERCYkKrYhZXdtWbluU2xbltsVq7qBUaImIiIiERIVWxKyubSu3Lcpti3LbYjV3\nUCq0REREREKiQitiVte2ldsW5bZFuW2xmjsoFVoiIiIiIVGhFTGra9vKbYty26LctljNHZQKLRER\nEZGQqNCKmNW1beW2RbltUW5brOYOSoWWiIiISEhUaEXM6tq2ctui3LYoty1WcwelQktEREQkJCq0\nImZ1bVu5bVFuW5TbFqu5g1KhJSIiIhISFVoRs7q2rdy2KLctym2L1dxBqdASERERCYkKrYhZXdtW\nbluU2xbltsVq7qBUaImIiIiERIVWxKyubSu3Lcpti3LbYjV3UCq0REREREKiQitiVte2ldsW5bZF\nuW2xmjsoFVoiIiIiIVGhFTGra9vKbYty26LctljNHZQKLREREZGQqNCKmNW1beW2RbltUW5brOYO\nKjnRAOfcIGAWEAPmee/viTPmAeAHwF7gp977d4LuKyIiIlJfVXlFyzkXA+YAg4BTgVHOue6VxlwE\ndPbedwGuBh4Ouq/YXdtWbluU2xbltsVq7qASLR2eDWzw3m/y3u8HFgBDKo35EfA4gPd+FdDcOdc6\n4L4iIiIi9VaiQqstkF9he3PZY0HGnBRgX/Osrm0rty3KbYty22I1d1BJVT3pnBsGDPLe/6Js+wrg\nHO/9tRXG/D9guvf+zbLtpcAUID3RvhUtXbr070D/ow0kIiIiUgtez8zMPC/RoETN8J8A7Stst6f0\nylRVY9qVjWkYYN9yQSYrIiIicixJVGi9DXRxzqUDBcAIYFSlMS8BE4AFzrm+wJfe+63Oue0B9hUR\nERGpt6rs0fLeF1FaRL0MrAMWeu/XO+fGOOfGlI1ZDGx0zm0A5gLXVLVvaElERERERERERERERERE\nRERERETqnipv71BbLH5Vj3PuT8APgc+896dFPZ/a4pxrD8wHTgRKgD967x+Idlbhc86lAK8DxwGN\ngD9772+Odla1p+ybIt4GNnvvL456PrXBObcJ2AkcAPZ778+Odka1wznXHJgH9KD0v/H/8t6vjHZW\n4XLOnULpTbkP6ghMM/J3283AFUAxsAb4mfd+X7SzCp9z7jrg55TWUY94739/uLGRf6m04a/qeYzS\nzNbsByZ573sAfYHxFo639/4rYID3/nSgJzDAOdcv4mnVpuso/VBMSdQTqUUlwHne+zOsFFllfg8s\n9rSezx0AAANjSURBVN53p/Rcr/cfgvLe/7PsOJ8BnEnp9/6+EPG0Qld2V4FfAL3LLhjEgJGRTqoW\nOOe+TWmRdRbQCxjsnOt0uPGRF1oY/aoe7/0y4Iuo51HbvPdbvPfvlv15N6V/CZ8U7axqh/d+b9kf\nG1H6F9KOCKdTa5xz7YCLKL3KUSeuotciU3mdc2nAf3rv/wSlnz733lu7bXgmkOO9z0848ti3k9Jf\nnps455KBJpTeW7O+6was8t5/5b0/QOlqxaWHG5zoPlq1Id5X+JwT0VykFpX9NnQGsCriqdQK51wD\nIBvoBDzsvV8X8ZRqy/3AL4FmUU+klpUAS51zB4C53vtHop5QLcgAtjnnHqP0N/3VwHUVfsmwYCTw\ndNSTqA3e+x3OuXuBPOBfwMve+6URT6s2rAXucs79B/AVpW1A/zjc4LpwRcvSUoKUcc6lAs9R+pfw\n7qjnUxu898VlS4ftgO85586LeEqhc84NprQP8R2MXd0Bvlu2lPQDSpfI/zPqCdWCZKA38JD3vjew\nB7gp2inVHudcI+BiwEc9l9pQtlw2kdKv3DsJSHXOXR7ppGqB9/5D4B7gFWAJ8A6lPWpx1YVCK8jX\n/Eg94pxrCDwPPOm9fzHq+dS2sqWUvwJ9op5LLfgO8CPnXC7wDDDQOTc/4jnVCu/9p2X/3kZpv46F\nPq3NlH7g4a2y7ecoLbys+AGwuuyYW9AHWO693152k/JFlP43X+957//kve/jve8PfAn883Bj60Kh\nVf41P2W/DYyg9Gt9pB5yziUBjwLrvPezop5PbXHOfavs01g45xoDF1D6W1C95r2f6r1v773PoHRJ\n5TXv/U+inlfYnHNNnHNNy/58PPB9Sj+RVa9577cA+c65rmUPZQIfRDil2jaK0l8orPgQ6Ouca1z2\nd3smpR96qfeccyeW/bsDMJQqlosjL7SsflWPc+4ZYDnQ1TmX75z7WdRzqiXfpfSjwAOcc++U/WPh\n05dtgNecc+9S2pP2/7z3r0Y8pyhYaRVoBSyrcLz/4r1/JeI51ZZrgaecc+9R+qnDuyOeT60oK6gz\nKb2qY4L3/j1Kb9fzNvB+2cN/jG5Gteo559wHlF4YusZ7vzPqCYmIiIiIiIiIiIiIiIiIiIiIiIiI\niIiIiIiIiIiIiIiIiIiIiIjUpP8PHI7oqi0KsHgAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 21 } ], "metadata": {} } ] }