├── requirements.txt ├── assets ├── me_plot.png ├── test_me.png ├── good_graph.png ├── convergence_me.png ├── convergence_plot_me.png ├── random_multiple_pattern.png ├── multiple_pattern_convergence.png └── hamming_distance_multiple_random_pattern.png ├── data ├── digits │ ├── 0.jpg │ ├── 1.jpg │ ├── 2.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ ├── 9.jpg │ └── test │ │ ├── test0.jpg │ │ ├── test1.jpg │ │ └── test4.jpg └── beautiful_me │ ├── me.jpeg │ └── me_half_masked.jpeg ├── results ├── p_100_iter_40.png ├── p_15_iter_20.png ├── p_20_iter_25.png ├── p_20_iter_40.png ├── p_25_iter_40.png ├── p_70_iter_40.png ├── p_72_iter_40.png ├── p_73_iter_40.png ├── p_75_iter_40.png ├── p_80_iter_40.png ├── p_20_iter_40_2.png ├── p_20_iter_40_3.png ├── p_20_iter_40_4.png ├── p_25_iter_40_1.png └── random_pattern_random_train.png ├── README.md ├── main.py ├── .gitignore └── notebooks ├── hopfield_multiple.ipynb └── hopfield_single_pattern_pic.ipynb /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | matplotlib 3 | seaborn 4 | tqdm 5 | PIL 6 | -------------------------------------------------------------------------------- /assets/me_plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/me_plot.png -------------------------------------------------------------------------------- /assets/test_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/test_me.png -------------------------------------------------------------------------------- /data/digits/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/0.jpg -------------------------------------------------------------------------------- /data/digits/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/1.jpg -------------------------------------------------------------------------------- /data/digits/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/2.jpg -------------------------------------------------------------------------------- /data/digits/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/3.jpg -------------------------------------------------------------------------------- /data/digits/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/4.jpg -------------------------------------------------------------------------------- /data/digits/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/5.jpg -------------------------------------------------------------------------------- /data/digits/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/6.jpg -------------------------------------------------------------------------------- /data/digits/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/7.jpg -------------------------------------------------------------------------------- /data/digits/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/8.jpg -------------------------------------------------------------------------------- /data/digits/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/9.jpg -------------------------------------------------------------------------------- /assets/good_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/good_graph.png -------------------------------------------------------------------------------- /assets/convergence_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/convergence_me.png -------------------------------------------------------------------------------- /data/beautiful_me/me.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/beautiful_me/me.jpeg -------------------------------------------------------------------------------- /results/p_100_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_100_iter_40.png -------------------------------------------------------------------------------- /results/p_15_iter_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_15_iter_20.png -------------------------------------------------------------------------------- /results/p_20_iter_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_20_iter_25.png -------------------------------------------------------------------------------- /results/p_20_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_20_iter_40.png -------------------------------------------------------------------------------- /results/p_25_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_25_iter_40.png -------------------------------------------------------------------------------- /results/p_70_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_70_iter_40.png -------------------------------------------------------------------------------- /results/p_72_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_72_iter_40.png -------------------------------------------------------------------------------- /results/p_73_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_73_iter_40.png -------------------------------------------------------------------------------- /results/p_75_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_75_iter_40.png -------------------------------------------------------------------------------- /results/p_80_iter_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_80_iter_40.png -------------------------------------------------------------------------------- /data/digits/test/test0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/test/test0.jpg -------------------------------------------------------------------------------- /data/digits/test/test1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/test/test1.jpg -------------------------------------------------------------------------------- /data/digits/test/test4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/digits/test/test4.jpg -------------------------------------------------------------------------------- /results/p_20_iter_40_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_20_iter_40_2.png -------------------------------------------------------------------------------- /results/p_20_iter_40_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_20_iter_40_3.png -------------------------------------------------------------------------------- /results/p_20_iter_40_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_20_iter_40_4.png -------------------------------------------------------------------------------- /results/p_25_iter_40_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/p_25_iter_40_1.png -------------------------------------------------------------------------------- /assets/convergence_plot_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/convergence_plot_me.png -------------------------------------------------------------------------------- /assets/random_multiple_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/random_multiple_pattern.png -------------------------------------------------------------------------------- /data/beautiful_me/me_half_masked.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/data/beautiful_me/me_half_masked.jpeg -------------------------------------------------------------------------------- /assets/multiple_pattern_convergence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/multiple_pattern_convergence.png -------------------------------------------------------------------------------- /results/random_pattern_random_train.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/results/random_pattern_random_train.png -------------------------------------------------------------------------------- /assets/hamming_distance_multiple_random_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duskybomb/hopfield-network/HEAD/assets/hamming_distance_multiple_random_pattern.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hopfield Network 2 | Implementation of [Hopfield Neural Network](https://www.its.caltech.edu/~bi250c/papers/Hopfield-1982.pdf) in Python based on Hebbian Learning Algorithm 3 | 4 | [Blog post on the same](https://duskybomb.github.io/2019/08/08/hopfield-nueral-network-implementation-in-python.html) 5 | 6 | 7 | ## Example 1 8 | 9 | 10 | 11 | 12 | ## Example 2 13 | 14 | 15 | 16 | 17 | 18 | ## Implemented things: 19 | - Single pattern image 20 | - Multiple random pattern 21 | - Multiple pattern (digits) 22 | 23 | ## To do: 24 | - GPU implementation? 25 | 26 | ## Just a good graph 27 | 28 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | import seaborn as sns 4 | sns.set_palette('Set2') 5 | 6 | 7 | N = 400 8 | P = 100 9 | N_sqrt = np.sqrt(N).astype('int32') 10 | NO_OF_ITERATIONS = 40 11 | NO_OF_BITS_TO_CHANGE = 200 12 | 13 | epsilon = np.asarray([np.random.choice([1, -1], size=N)]) 14 | for i in range(P-1): 15 | epsilon = np.append(epsilon, [np.random.choice([1, -1], size=N)], axis=0) 16 | 17 | print(epsilon.shape) 18 | 19 | random_pattern = np.random.randint(P) 20 | test_array = epsilon[random_pattern] 21 | random_pattern_test = np.random.choice([1, -1], size=NO_OF_BITS_TO_CHANGE) 22 | test_array[:NO_OF_BITS_TO_CHANGE] = random_pattern_test 23 | 24 | print(random_pattern) 25 | 26 | w = np.zeros((N, N)) 27 | h = np.zeros(N) 28 | for i in range(N): 29 | for j in range(N): 30 | for p in range(P): 31 | w[i, j] += (epsilon[p, i]*epsilon[p, j]).sum() 32 | if i==j: 33 | w[i, j] = 0 34 | w /= N 35 | 36 | hamming_distance = np.zeros((NO_OF_ITERATIONS, P)) 37 | for iteration in range(NO_OF_ITERATIONS): 38 | for _ in range(N): 39 | i = np.random.randint(N) 40 | h[i] = 0 41 | for j in range(N): 42 | h[i] += w[i, j]*test_array[j] 43 | test_array = np.where(h<0, -1, 1) 44 | 45 | for i in range(P): 46 | hamming_distance[iteration, i] = ((epsilon - test_array)[i]!=0).sum() 47 | 48 | fig = plt.figure(figsize = (8, 8)) 49 | plt.plot(hamming_distance) 50 | plt.xlabel('No of Iterations') 51 | plt.ylabel('Hamming Distance') 52 | plt.ylim([0, N]) 53 | plt.show() -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /notebooks/hopfield_multiple.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "import seaborn as sns\n", 12 | "sns.set_palette('hls', 10)\n", 13 | "from tqdm import tqdm" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "N = 400\n", 23 | "P = 10\n", 24 | "NO_OF_BITS_TO_CHANGE = 300\n", 25 | "N_sqrt = np.sqrt(N).astype('int32')\n", 26 | "NO_OF_ITERATIONS = 10" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "epsilon = np.asarray([np.random.choice([1, -1], size=N)])\n", 36 | "for i in range(P-1):\n", 37 | " epsilon = np.append(epsilon, [np.random.choice([1, -1], size=N)], axis=0)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 4, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "data": { 47 | "image/png": "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\n", 48 | "text/plain": [ 49 | "
" 50 | ] 51 | }, 52 | "metadata": { 53 | "needs_background": "light" 54 | }, 55 | "output_type": "display_data" 56 | } 57 | ], 58 | "source": [ 59 | "fig = plt.figure(figsize = (8, 8))\n", 60 | "fig.subplots_adjust(hspace=0.1, wspace=0.1)\n", 61 | "\n", 62 | "for num, i in enumerate(epsilon):\n", 63 | " plt.subplot(4, 3,num+1)\n", 64 | " plt.imshow(np.where(i.reshape(N_sqrt, N_sqrt)<1, 0, 1), cmap='gray')" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 5, 70 | "metadata": {}, 71 | "outputs": [ 72 | { 73 | "name": "stdout", 74 | "output_type": "stream", 75 | "text": [ 76 | "Pattern should converge to: 4\n" 77 | ] 78 | }, 79 | { 80 | "data": { 81 | "text/plain": [ 82 | "" 83 | ] 84 | }, 85 | "execution_count": 5, 86 | "metadata": {}, 87 | "output_type": "execute_result" 88 | }, 89 | { 90 | "data": { 91 | "image/png": "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\n", 92 | "text/plain": [ 93 | "
" 94 | ] 95 | }, 96 | "metadata": { 97 | "needs_background": "light" 98 | }, 99 | "output_type": "display_data" 100 | } 101 | ], 102 | "source": [ 103 | "random_pattern = np.random.randint(P)\n", 104 | "test_array = epsilon[random_pattern]\n", 105 | "random_pattern_test = np.random.choice([1, -1], size=NO_OF_BITS_TO_CHANGE)\n", 106 | "test_array[:NO_OF_BITS_TO_CHANGE] = random_pattern_test\n", 107 | "\n", 108 | "print('Pattern should converge to: ', random_pattern+1)\n", 109 | "plt.imshow(test_array.reshape(N_sqrt, N_sqrt), cmap='gray')" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 6, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "name": "stderr", 119 | "output_type": "stream", 120 | "text": [ 121 | "100%|██████████| 400/400 [00:04<00:00, 95.95it/s]\n" 122 | ] 123 | }, 124 | { 125 | "data": { 126 | "text/plain": [ 127 | "array([[ 0. , 0. , 0.005, ..., 0.005, -0.005, 0.005],\n", 128 | " [ 0. , 0. , 0. , ..., 0. , 0. , 0. ],\n", 129 | " [ 0.005, 0. , 0. , ..., -0.015, -0.005, -0.005],\n", 130 | " ...,\n", 131 | " [ 0.005, 0. , -0.015, ..., 0. , 0.005, 0.015],\n", 132 | " [-0.005, 0. , -0.005, ..., 0.005, 0. , 0.005],\n", 133 | " [ 0.005, 0. , -0.005, ..., 0.015, 0.005, 0. ]])" 134 | ] 135 | }, 136 | "execution_count": 6, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "w = np.zeros((N, N))\n", 143 | "h = np.zeros((N))\n", 144 | "for i in tqdm(range(N)):\n", 145 | " for j in range(N):\n", 146 | " for p in range(P):\n", 147 | " w[i, j] += (epsilon[p, i]*epsilon[p, j]).sum()\n", 148 | " if i==j:\n", 149 | " w[i, j] = 0\n", 150 | "w /= N\n", 151 | "w" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": 7, 157 | "metadata": {}, 158 | "outputs": [ 159 | { 160 | "name": "stderr", 161 | "output_type": "stream", 162 | "text": [ 163 | "100%|██████████| 10/10 [00:00<00:00, 11.35it/s]\n" 164 | ] 165 | }, 166 | { 167 | "data": { 168 | "text/plain": [ 169 | "array([[200., 203., 198., 67., 209., 188., 205., 206., 208., 216.],\n", 170 | " [197., 196., 189., 26., 210., 193., 206., 201., 205., 205.],\n", 171 | " [201., 200., 189., 8., 208., 189., 200., 209., 209., 205.],\n", 172 | " [199., 200., 189., 2., 210., 185., 198., 207., 205., 205.],\n", 173 | " [200., 199., 190., 1., 211., 186., 199., 206., 206., 206.],\n", 174 | " [201., 200., 191., 0., 212., 187., 198., 205., 207., 205.],\n", 175 | " [201., 200., 191., 0., 212., 187., 198., 205., 207., 205.],\n", 176 | " [201., 200., 191., 0., 212., 187., 198., 205., 207., 205.],\n", 177 | " [201., 200., 191., 0., 212., 187., 198., 205., 207., 205.],\n", 178 | " [201., 200., 191., 0., 212., 187., 198., 205., 207., 205.]])" 179 | ] 180 | }, 181 | "execution_count": 7, 182 | "metadata": {}, 183 | "output_type": "execute_result" 184 | }, 185 | { 186 | "data": { 187 | "image/png": "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\n", 188 | "text/plain": [ 189 | "
" 190 | ] 191 | }, 192 | "metadata": { 193 | "needs_background": "light" 194 | }, 195 | "output_type": "display_data" 196 | } 197 | ], 198 | "source": [ 199 | "fig = plt.figure(figsize = (8, 8))\n", 200 | "hamming_distance = np.zeros((NO_OF_ITERATIONS, P))\n", 201 | "for iteration in tqdm(range(NO_OF_ITERATIONS)):\n", 202 | " for i in range(N):\n", 203 | " i = np.random.randint(N)\n", 204 | " h[i] = 0\n", 205 | " for j in range(N):\n", 206 | " h[i] += w[i, j]*test_array[j]\n", 207 | " test_array = np.where(h<0, -1, 1)\n", 208 | " for i in range(P):\n", 209 | " hamming_distance[iteration, i] = ((epsilon - test_array)[i]!=0).sum()\n", 210 | " plt.subplot(4, 3,iteration+1)\n", 211 | " plt.imshow(np.where(test_array.reshape(N_sqrt, N_sqrt)<1, 0, 1), cmap='gray')\n", 212 | "hamming_distance" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 8, 218 | "metadata": {}, 219 | "outputs": [ 220 | { 221 | "data": { 222 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAHkCAYAAADSPD2fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XuYJGV9//33tw7dPefZ3ZlljzgLLOfDqqtAiIGViKAY0QeiJlGScEmi4UnAoGjykwR/JMGIEhOD/siDYTUGRZOoP4OaCKiIAi664bQIKyy7wy4we5jD7sx0d3Xdzx9VM9MzOzPbOzM9h97P67rq6qq7qqvv7oX51F11V93mnENERERqizfXFRAREZGZp4AXERGpQQp4ERGRGqSAFxERqUEKeBERkRqkgBcREalBVQ94M/PN7Odm9q10eY2ZPWRmz5jZV8wsk5Zn0+Wt6fqOatdNRESkVs1GC/5PgC1lyx8HbnHOrQX2AVek5VcA+5xzxwG3pNuJiIjIFFQ14M1sFfBm4P9Llw14PfC1dJONwCXp/FvTZdL156fbi4iIyGGqdgv+74APAXG6vATods5F6XInsDKdXwnsAEjX96Tbi4iIyGEKqrVjM7sYeNk594iZnTdUPM6mroJ15fu9ErgSoKGh4dUnnnjiDNRWRERkYXjkkUd2O+faD7Vd1QIeOAf4DTN7E5ADmkla9K1mFqSt9FXAznT7TmA10GlmAdAC7B27U+fcbcBtAOvXr3ebNm2q4lcQERGZX8zs+Uq2q9opeufcR5xzq5xzHcA7gXudc78N3Adcmm52OfCNdP6b6TLp+nudRsIRERGZkrm4D/464ANmtpXkGvvtafntwJK0/APAh+egbiIiIjWhmqfohznnvg98P51/FnjtONsMApfNRn1ERERq3awEvIiI1J5isUhnZyeDg4NzXZWalMvlWLVqFWEYTun9CngREZmSzs5Ompqa6OjoQI8tmVnOOfbs2UNnZydr1qyZ0j70LHoREZmSwcFBlixZonCvAjNjyZIl0zo7ooAXEZEpU7hXz3R/WwW8iIgcMe644w527tw5vPx3f/d39Pf3V+3zLrzwQlpbW7n44our9hkTUcCLiMgRYyYCvlQqVbztBz/4Qb74xS8e1v5nigJeREQWpG3btnHiiSdy+eWXc/rpp3PppZcOh/XHPvYxXvOa13Dqqady5ZVX4pzja1/7Gps2beK3f/u3WbduHZ/+9KfZuXMnGzZsYMOGDQD813/9F2effTavetWruOyyy9i/fz8AHR0dfOxjH+NXf/VX+epXv8p5553Hddddx2tf+1qOP/547r///nHreP7559PU1DQ7P8gY6kUvIiLT1vWljeS3b5vRfWaP7qD9ty+fdJtf/OIX3H777Zxzzjn8/u//PrfeeivXXnstV111Fddffz0A7373u/nWt77FpZdeymc+8xluvvlm1q9fD8Att9zCfffdR1tbG7t37+bGG2/ke9/7Hg0NDXz84x/nU5/61PB+crkcP/rRjwD43Oc+RxRFPPzww9x9993ccMMNfO9735vR7z9dasGLiMiCtXr1as455xwAfud3fmc4gO+77z7OPPNMTjvtNO69916eeOKJQ+7rwQcf5Mknn+Scc85h3bp1bNy4keefH3ns+zve8Y5R27/97W8H4NWvfjXbtm2boW80c9SCFxGRaTtUS7taxvY0NzMGBwd5//vfz6ZNm1i9ejV/+Zd/WdHtZs453vCGN3DnnXeOu76hoWHUcjabBcD3faIoGu8tc0oteBERWbC2b9/OT37yEwDuvPNOfvVXf3U4zNva2ti/fz9f+9rXhrdvamqir69v3OWzzjqLBx54gK1btwLQ39/P008/PVtfZcYp4EVEZME66aST2LhxI6effjp79+7lfe97H62trbz3ve/ltNNO45JLLuE1r3nN8Pa/+7u/yx/+4R+ybt06BgYGuPLKK7nooovYsGED7e3t3HHHHbzrXe/i9NNP56yzzuKpp56aVv1e97rXcdlll3HPPfewatUqvvvd7073K1fMFvKIrBoPXkRk7mzZsoWTTjppzj5/27ZtXHzxxTz++ONzVodqG+83NrNHnHPrD/VeteBFRERqkAJeREQWpI6OjppuvU+XAl5ERKQGKeBFRERqkAJeRESkBingRUREapACXkREjhizOVzs5s2bOfvssznllFM4/fTT+cpXvlKVz5mIAl5ERI4YszlcbH19PV/4whd44okn+M53vsPVV19Nd3f3YX3WdCjgRURkQZrvw8Uef/zxrF27FoAVK1awdOlSurq6ZunX0WAzIiIyA7oe3Ui+Z9uM7jPb0kH76bUxXOzDDz9MoVDg2GOPnYmfpiJqwYuIyIK1EIaL3bVrF+9+97v553/+Zzxv9mJXLXgREZm2Q7W0q2W+Dxfb29vLm9/8Zm688UbOOuusSr7SjFELXkREFqz5PFxsoVDgbW97G+95z3u47LLLpryfqVLAi4jIgjWfh4u96667+OEPf8gdd9zBunXrWLduHZs3b56Jr10RDRcrIiJTouFiq0/DxYqIiMgoCngREVmQNFzs5BTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiInLEmM3hYp9//nle/epXs27dOk455RQ+97nPVeVzJqKAFxGRI8ZsDhe7fPlyfvzjH7N582YeeughbrrpplGfXW0KeBERWZDm+3CxmUxm+Hn1+XyeOI5n6ZdJaLAZERGZtqe6NtKX3zaj+2zKdnBi+8IeLnbHjh28+c1vZuvWrXziE59gxYoVM/kTTUoteBERWbDm+3Cxq1ev5tFHH2Xr1q1s3LiRl156aSpfc0rUghcRkWk7VEu7Wub7cLFDVqxYwSmnnML999/PpZdeesi6zAS14EVEZMGaz8PFdnZ2MjAwAMC+fft44IEHOOGEE6a8v8OlgBcRkQVrPg8Xu2XLFs4880zOOOMMzj33XK699lpOO+20mfjaFdFwsSIiMiUaLrb6NFysiIiIjKKAFxGRBUnDxU5OAS8iIlKDqhbwZpYzs4fN7H/M7AkzuyEtv8PMnjOzzem0Li03M/t7M9tqZo+a2auqVTcREZFaV8374PPA651z+80sBH5kZt9O133QOfe1MdtfBKxNpzOBz6avIiIicpiq1oJ3if3pYphOk3XZfyvwhfR9DwKtZra8WvUTERGpZVW9Bm9mvpltBl4G/ts591C66q/S0/C3mFk2LVsJ7Ch7e2daNnafV5rZJjPb1NXVVc3qi4hIjZnN4WKH9Pb2snLlSq666qqqfs5YVQ1451zJObcOWAW81sxOBT4CnAi8BlgMXJdubuPtYpx93uacW++cW9/e3l6lmouISC2azeFih3z0ox/l3HPPPaz3zIRZ6UXvnOsGvg9c6JzblZ6GzwP/DLw23awTWF32tlXA7A2cKyIiC8p8Hy4W4JFHHuGll17iggsumJ0fpUzVOtmZWTtQdM51m1kd8OvAx81suXNulyUjBFwCDN3E+E3gKjP7Mknnuh7n3K5q1U9ERGbOV7s20jnDw8WuynZw2QIeLjaOY/70T/+UL37xi9xzzz0z+ttUopot+OXAfWb2KPBTkmvw3wK+ZGaPAY8BbcCN6fZ3A88CW4F/At5fxbqJiEgNmM/Dxd5666286U1vYvXq1Qetmw1Va8E75x4FXjlO+esn2N4Bf1St+oiISPUcqqVdLfN5uNif/OQn3H///dx6663s37+fQqFAY2MjN910U6Vfb1r0JDsREVmw5vNwsV/60pfYvn0727Zt4+abb+Y973nPrIU7KOBFRGQBm8/Dxc41DRcrIiJTouFiq0/DxYqIiMgoCngREVmQNFzs5BTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiInLEmO3hYn3fZ926daxbt47f+I3fqNrnjEcBLyIiR4zZHi62rq6OzZs3s3nzZr75zW8e1udMlwJeREQWpIUwXOxc0pPsRERkSsqfsrax63625XfP6P47sm1c3v66Cddv27aNNWvW8KMf/Wh4uNiTTz6Za6+9lr1797J48WIgGS72N3/zN3nLW97CeeedN2q42I6ODjZt2jQ8XOzb3/52vv3tbw8PF5vP57n++uvp6Ojg/e9/Px/60IcAOO+883j1q1/NJz/5Se6++24+9alPHTRcLEAQBKxbt44gCPjwhz/MJZdccli/gZ5kJyIiR6T5PFwsJIPhbNq0iX/913/l6quv5pe//OVUvuaUVG24WBEROXJM1tKupvk8XCzAihUrADjmmGM477zz+PnPf86xxx57yLrMBLXgRURkwZrPw8Xu27ePfD4PwO7du3nggQc4+eSTp7y/w6WAFxGRBWs+Dxe7ZcsW1q9fzxlnnMGGDRv48Ic/PKsBr052IiIyJRoutvrUyU5ERERGUcCLiMiCpOFiJ6eAFxERqUEKeBERkRqkgBcREalBCngREZEapIAXEZEjxmwPF7t9+3YuuOACTjrpJE4++eQJH2lbDQp4ERE5Ysz2cLHvec97+OAHP8iWLVt4+OGHWbp06WF91nQo4EVEZEGa78PFPvnkk0RRxBve8AYAGhsbqa+vn6VfR4PNiIjIDNi4q4ttA/kZ3WdHXZbLl7dPus0vfvELbr/99uHhYm+99VauvfZarrrqKq6//nogGS72W9/6Fpdeeimf+cxnRg0Xe8stt3DfffcNDxd744038r3vfW94uNhPfepTw/vJ5XLDo9V97nOfI4oiHn74Ye6++25uuOGGg4aLffrpp2ltbeXtb387zz33HL/+67/OTTfdhO/7M/o7TUQteBERWbDm83CxURRx//33c/PNN/PTn/6UZ599ljvuuGOK3/TwqQUvIiLTdqiWdrXM5+FiV61axStf+UqOOeYYAC655BIefPBBrrjiioq+23SpBS8iIgvWfB4u9jWveQ379u2jq6sLgHvvvVfDxYqIiFRiPg8X6/s+N998M+effz6nnXYazjne+973zsTXroiGixURkSnRcLHVp+FiRUREZBQFvIiILEgaLnZyCngREZEapIAXERGpQQp4ERGRGqSAFxERqUEKeBEROWLM5nCx9913H+vWrRuecrkcX//616vyWeNRwIuIyBFjNoeL3bBhA5s3b2bz5s3ce++91NfXc8EFFxzWZ02HAl5ERBak+T5cbLmvfe1rXHTRRRouVkREFpaN/9XFtpdmeLjYo7JcfsHCHS623Je//GU+8IEPzMTPUjG14EVEZMGaz8PFDtm1axePPfYYb3zjGw/3602LWvAiIjJth2ppV8t8Hi52yF133cXb3vY2wjA8ZB1mUtVa8GaWM7OHzex/zOwJM7shLV9jZg+Z2TNm9hUzy6Tl2XR5a7q+o1p1ExGR2jCfh4sdcuedd/Kud71r2vs5XNU8RZ8HXu+cOwNYB1xoZmcBHwducc6tBfYBV6TbXwHsc84dB9ySbiciIjKh+TxcLCQdAXfs2MG555473a962GZluFgzqwd+BLwP+E9gmXMuMrOzgb90zr3RzL6bzv/EzALgRaDdTVJBDRcrIjJ3NFxs9c3b4WLNzDezzcDLwH8DvwS6nXNDFys6gZXp/EpgB0C6vgdYUs36iYiI1KqqBrxzruScWwesAl4LjHeoN9RCt0nWDTOzK81sk5lt6urqmrnKiojIgqLhYic3K7fJOee6ge8DZwGt6Sl4SIJ/6JFCncBqgHR9C7B3nH3d5pxb75xb394+N702RURE5rtq9qJvN7PWdL4O+HVgC3AfcGm62eXAN9L5b6bLpOvvnez6u4iIiEysmvfBLwc2mplPciBxl3PuW2b2JPBlM7sR+Dlwe7r97cAXzWwrScv9nVWsm4iISE2rWsA75x4FXjlO+bMk1+PHlg8Cl1WrPiIiIkcSPapWRESOGLM5XCzAhz70IU455RROOukk/viP/5jZvPKsgBcRkSPGbA4X++Mf/5gHHniARx99lMcff5yf/vSn/OAHPzisz5oOBbyIiCxI83242KHn4hcKBfL5PMVikaOOOmrWfh8NNiMiItP2rY1d7No2s8PFLu/IcvHlC3e42LPPPpsNGzawfPlynHNcddVVs/rkP7XgRURkwZrPw8Vu3bqVLVu20NnZyQsvvMC9997LD3/4w6l+1cOmFryIiEzboVra1TKfh4v9j//4D8466ywaGxsBuOiii3jwwQf5tV/7tYq+23SpBS8iIgvWfB4u9uijj+YHP/gBURRRLBb5wQ9+oFP0IiIilZjPw8VeeumlHHvssZx22mmcccYZnHHGGbzlLW+Zia9dkVkZLrZaNFysiMjc0XCx1Tdvh4sVERGRuaGAFxGRBUnDxU5OAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiR4zZHi72uuuu49RTT+XUU0/lK1/5StU+ZzwKeBEROWLM5nCx//mf/8nPfvYzNm/ezEMPPcQnPvEJent7D+uzpkMBLyIiC9J8Hy72ySef5NxzzyUIAhoaGjjjjDP4zne+M2u/jwabERGRaXt+Yxf9MzxcbH1Hllcs4OFizzjjDG644QY+8IEP0N/fz3333cfJJ588o7/RZNSCFxGRBWs+Dxd7wQUX8KY3vYlf+ZVf4V3vehdnn302QTB77Wq14EVEZNoO1dKulvk8XCzAn//5n/Pnf/7nAPzWb/0Wa9euPWQ9Zopa8CIismDN5+FiS6USe/bsAeDRRx/l0Ucf5YILLpjy/g6XWvAiIrJgDQ0X+wd/8AesXbuW973vfdTX1w8PF9vR0THucLF1dXX85Cc/GR4udvny5dx3333Dw8Xm80l/ghtvvJHjjz9+SnUrFou87nWvA6C5uZl/+Zd/mdVT9BouVkREpkTDxVafhosVERGRURTwIiKyIGm42Mkp4EVERGqQAl5ERKQGKeBFRERqkAJeRESkBingRUTkiDHbw8VeeOGFtLa2cvHFF48qf+655zjzzDNZu3Yt73jHOygUCjP+2Qp4ERE5YszmcLEAH/zgB/niF794UPl1113HNddcwzPPPMOiRYu4/fbbD6sOlVDAi4jIgjTfh4sFOP/882lqahpV5pzj3nvv5dJLLwXg8ssv5+tf//qM/z56VK2IiExb18aHyG/bO6P7zHYspv3yMyfdZj4PFzuRPXv20NraOvzY2lWrVvHCCy9M6TeajFrwIiKyYM3n4WInMt4j4seOijcT1IIXEZFpO1RLu1rm+3Cx42lra6O7u5soigiCgM7OTlasWFHx+yulFryIiCxY83m42ImYGRs2bBiu18aNG3nrW98645+jgBcRkQVraLjY008/nb179/K+972P1tbW4eFiL7nkknGHi123bh0DAwPDw8Vu2LCB9vb24eFiTz/9dM466yyeeuqpadXvda97HZdddhn33HMPq1at4rvf/S7A8PX94447jj179nDFFVdM63PGo+FiRURkSjRcbPVpuFgREREZRQEvIiILkoaLnZwCXkREpAYp4EVEZMoWcj+u+W66v60CXkREpiSXy7Fnzx6FfBU459izZw+5XG7K+9CDbkREZEpWrVpFZ2cnXV1dc12VmpTL5Vi1atWU31+1gDez1cAXgGVADNzmnPu0mf0l8F5g6L+IP3PO3Z2+5yPAFUAJ+GPn3HerVT8REZmeMAxZs2bNXFdDJlDNFnwE/Klz7mdm1gQ8Ymb/na67xTl3c/nGZnYy8E7gFGAF8D0zO945V/m4fCIiIgJU8Rq8c26Xc+5n6XwfsAVYOclb3gp82TmXd849B2wFXlut+omIiNSyWelkZ2YdwCuBh9Kiq8zsUTP7vJktSstWAjvK3tbJ5AcEIiIiMoGqB7yZNQL/BlztnOsFPgscC6wDdgGfHNp0nLcf1DXTzK40s01mtkkdO0RERMZX1YA3s5Ak3L/knPt3AOfcS865knMuBv6JkdPwncDqsrevAnaO3adz7jbn3Hrn3Pr29vZqVl9ERGTBqlrAWzJI7+3AFufcp8rKl5dt9jZg6DmD3wTeaWZZM1sDrAUerlb9REREalk1e9GfA7wbeMzMNqdlfwa8y8zWkZx+3wb8AYBz7gkzuwt4kqQH/h+pB72IiMjUVC3gnXM/Yvzr6ndP8p6/Av6qWnUSERE5UuhRtSIiIjVIAS8iIlKDFPAiIiI16JABb2bHm9k9ZvZ4uny6mf2v6ldNREREpqqSFvw/AR8BigDOuUdJnhkvIiIi81QlAV/vnBt7P3pUjcqIiIjIzKgk4Heb2bGkj401s0tJHjErIiIi81Ql98H/EXAbcKKZvQA8B/xOVWslIiIi03LIgHfOPQv8upk1AF469KuIiIjMY5X0ov9rM2t1zh1wzvWZ2SIzu3E2KiciIiJTU8k1+Iucc91DC865fcCbqlclERERma5KAt43s+zQgpnVAdlJthcREZE5Vkknu38B7jGzfybpSf/7wMaq1kpERESmpZJOdn9rZo8B55OMDve/nXPfrXrNREREZMoqGi7WOfdt4NtVrouIiIjMkEp60b/dzJ4xsx4z6zWzPjPrnY3KiYiIyNRU0oL/W+Atzrkt1a6MiIiIzIxKetG/pHAXERFZWCppwW8ys68AXwfyQ4XOuX+vWq1ERERkWioJ+GagH7igrMwBCngREZF5qpLb5H5vNioiIiIiM+eQAW9mOeAK4BQgN1TunPv9KtZLREREpqGSTnZfBJYBbwR+AKwCNKKciIjIPFZJwB/nnPsocMA5txF4M3BadaslIiIi01FJwBfT124zOxVoATqqViMRERGZtkp60d9mZouA/wV8E2gEPlrVWomIiMi0VBLw96RjwP8QOAbAzNZUtVYiIiIyLZWcov+3ccq+NtMVERERkZkzYQvezE4kuTWuxczeXraqmbLb5URERGT+mewU/QnAxUAr8Jay8j7gvdWslIiIiEzPhAHvnPsG8A0zO9s595NZrJOIiIhMUyXX4N9mZs1mFprZPWa228x+p+o1m2WFzm62X/cNdn/xYQ5s7iQeLB76TSIiIvNUJb3oL3DOfcjM3gZ0ApcB9wH/UtWazbI4H+E3Zun+7ha6//MJ8D1yxy+l/rTl1J+2guwxbZhfyfGQiIjI3Ksk4MP09U3Anc65vWZWxSrNjdyxbaz86IXE+YjBX7xE/2M7GXh8F3u/+nP23vVzvLqQulOWU3dqEvjhihZq8XcQEZHaUEnA/18zewoYAN5vZu3AYHWrNXe8bED96SupP30lAKXeQQae3EX/Yzvpf2wXBzZtB8BfXE/9qcupO3UF9aeuIFhcP5fVFhERGcWcc4feKHmSXa9zrmRm9UCzc+7FqtfuENavX+82bdo0q59ZfKmP/sd3MvDYTvqf2EXclwcgs6p1uHVfd9IyvPrMrNZLZC455ygRE7mYyJXKXktEjC4rpvOlsnXFsvWH/osksrC8oeVUQvNnbH9m9ohzbv2htpvsPvjXO+fuLb8Hfswp6X+fXhUXpvCoJlqOOoGW80/AxY7C9r3Dp/N7732anu9sAc/IHddO3WkrqD91Obm17Vgwc/+4cmSJ0/AsDgVmWYiWysOR0vgBO2Zdcew+OLhsspAuulISzkPrUTCLTOa8phMJ/dnPgMlO0Z8L3Mvoe+CHOI7QgC9nnpHtWEK2YwmL3nIarlhi4OmXGXg8OZ2/79//h33/thnLBtSddFQa+CvIrF6EeRNfvx9pDY3zx3bMH/qSi8l6ATkLyXohdV6GnBcS4KmPwBSVXEw+LjLgigzGI1PRRWVBd/C/zdigLZUF4nhBO1kIjw7geMa/owGB+cmEl857hENl5uGn6+q8zHDZ6NfR7w3MJxx631AZSdlB7xua5+B1HvrvVmpLnTc3Z3QrOkU/X83kKfrBuMDLxb5x/xiPaiWN+8f44HVFV4IDEYu2DrDk6TxLny7Q/HLyh3qgETqP89h+nLHtOEd3Szx6/zPwB93HI+eFyWThyLwXUmfJQUByQFC+PjO8fV26bdZGDhp8m95dBM45in0l9jyXx8sZdW0huQafMGtTPhiJnaPgigwMBfFwKBcYLAvpfJxuM2b9YHmIuyIDcSH5t5sGH2+cMBwKOx9/nHWh+QSMLvPNTwPXO2jdREEZlpX5ZevCMdt7TP03F5G5Ne1T9OlOTgCuBE5Mi7YAtznnnp5+FeeXp/te5O+e/S6DdUXi4PAOegwb9Yd1uFXi+wQnegQnBQSWoanHWPFMxPJnIlY/XWTt5iRI+tsDuk9opu+Eeg4c34Q1hhW0eIZCwKMQR6ODKi4y4Arkh+bLgmx3sW/UtnkXVfw9Q/PHHCxkkmUX0nwgR8P+LPW9Ger6MmT6AsJuH172cHsM2w9BHryyn9YB+aHJg4LvKISQzzgKuZhCrsRgfYnBhiLFXIkoWyQKi0SZIoVMgXyYp5ApEGci4kwJl01fMyVcEDO2IRiUH/QM1d0LaQnryA4f2GTGPSjKWUjGC4aD1h+nxRuYj4+Hp+AUkXlgsmvwZ5Ochr8tnQx4JfB9M3u7c+7B2ani7Gh/vok//PiGZCEL1mhYg+E3GV6DR9Do4Tf6ZJp8wqaAsMEn2xSQbQoIm0KCBg/zD/GHfRXJ0/1JWrOFzu6ks97ju2jYtAv3o16wF8muaaPutOXUn7qM3AlL8TKV3OwwNbGLGXRR2cFBYeQAYKBIfl+RYk+JqLtE3O2wHqAH/F6PsMcn0+eTORBg7uDvnseRxxgEBryYA015DiwaoK/9AGHJaDiQpb4/pH4gpH4wYFHBp67fx+v3SJ7BNPK9izgGYXh/Q1N+zHwh3d58CLNGJmdkcx65Oo9szieb85KyOo9Mtmw+55FNp0zOkuU6j0zW0jIP/1D/viIi88iEp+jN7NvAx51z3x9Tfi7wYefcRdWv3uRm8hR9fneR7p/1E+0vEfWViA7ERH0lSvvjpGx/iWh/zGQ9ifwGj6DBI2jyCRr94YOCoNFLlpv8svVJmV/vYZ7hopjBX3Yx8HhyS97gMy9DyWGhT+7Eo5Jb8k5bQbZjMeZN/VS5c46oL6bYHVHcV6LYE1HYV0qWu5PXQloeDxz8Zc0Hv9nH5TwKHhyIHN0HYvbtjxkgCVq/0Wh5RciSNQGLXmE0Hw3hkoi8Remp8Sg5GzDmEkKdlyFLQHjAx3U7ij2ltE4IfMKgAAAgAElEQVQlivsiCt0Rhb0lCvsiop4SrnBw/ZwHLucRZ4woY0S+UfBg0GDAwUDJcSCCvkJMPu8o5is/W+N54AdWNkEwanlkCsJkve+ny0PrwqH50fs6eD8H7zsoXxeO/7m+f1Bn2JHfJna4EriiI44cLp3iyOFK6XzR4SJGrxs1P2ZdsXwfjF8+PDHO/g7et3rrSa151efXENTPo170wLFjwx3AOfcDM7ttOpWbj17aG/GFr+6htS2ktS1gUVtAa0eW1raAJe0BrUsCwpxROBBT6C2R7ylR7CtR6EvDvy+mdCCmtL9EsT/G7S7idsS4/hgbnPgvljMoZYxSNgmkYqaFYqaVqON4MoUeGgb20fzMXhof2wl3PkI+CHihZRHbWhexrbmVvZk6FreELG8JWJkLWOr7LDKjuQR2IB4JyLJAH+8Ss5czwtaATKtPQ0eWcFE9YatPFHr09Mfs7o148eWIHTvydO8pAclOWtsCVpxUxzEdWVZ0ZFmxJkvzIn9613db0+kQSoNxGvxl3y89UCkMHbDsi4j6xu/TEDR5hEtD/GYfr9HD6j2o94hzHqXQKIZG0YdiCfKDjihylCJHVExekwlKxZhSVMLlY1whwvrj5E2RI45KuChZb3GMRTEWl7DY4bkYH5dOMT4xHg4vXS5/9ca8Wtmrpe9J5pNlS5fTf11It0hOxA3NT/xKutfxXg8q8wzne5jng2/g+8lTHwMPL/SxwMcyyXyQ8/CyAV7GwwLDCwwLDPMZnq/oAdoiC4gXzM3Zv8kCvm+SdQdmuiJz7cXeIn1N0NddYMeLebw82JhciD2IwnTKJK/FzMhyKSD5+5dNp5Q5yJYgV4K6KHkdmhpiqIsd9SVHrgi5gWSbbARhqQVooUAH+ygQ0k0YdfOKPd0cs6cLgJJlifGxMccQQ/9AzgAzPB9yvlGfAz/wsAA838AnubRgJOHV5ci/4DhQdBQLjjhOdtwInBAYp2SMsMUjzBhBxvA84MV0ehDSM/hzKqDsP+xWcC1ATNJKLQ29pvO7He6lZJ6Sw5H2ME+nOsCM9K4HBy5OJhyWvkJclX7frjxMLQ3g4dekzJmHM394PrZkG4dHPHSQ5WKcG6q7w1xp+LuYG3k1lxwgeG7kwMGv5LvF6XQY4uHDkaSesaWHKN7QdxSpHUvOfyt1i7OH3nCGTRbwq83s78cpN2BlleozZ5YdneWoc+oIfCPwLWmIlCAecMT9MaX9juhATHG/o7A/Jt9borh3dKqaB/UtPo2LfBoXBzQvDmhp82ltC1nUFrCoPSCX80c+w5v4dCokpzNL6aWB8ssExd6I4kt9RJ0v4+/ZQ2AOyxgWGiWggCOPY6DkyBcdgwVHISr7C+wgUzQyRcOPgQhKecfQ5RoDsvUeucUeDQ0+uXqPXL2XHBDUOBc54kJ6qroYExeTZVd0yT+w7yWtU9/DgmTC95P50Etaq+FQy9XDMj4W+kmLNeNjGR8v4+NlPSybrPNzPpb18bI+fi7Ay6Ut3mB+NGVLUYlosERpsESUj4kGIkr5ElG+RFwoUcqXKBWSKS7EyVQsJVM+OYMRF5NXF8W4dJ4oxpWSeSvFUIqhVNIpeqk5M/iMm8MyWcB/cJJ1s/v4uFmwrG4Pv7X6LjJNq8g0rybTvIqwYVly2nEChcGY7j0R3V1F9u2O6O6K6NlTZF9XxO7nCjz7SD9juzg0tvi0tgW0tieh39oWJJcF2pP5uoaRz/MCw2sNCMc9Xb0YeMUhv1exEPPi8wW2/3KQZ58eYNe2PD0vjZymdx7kc5BfBIU6yNdBwxKPZW0Zli3KsGxxyPLFIcsWh7QvCsmE8yN0ZPb4gY/f6CencURkwZhsPPiN09mxma0GvgAsIzmBd5tz7tNmthj4CtABbAN+0zm3z5Km7KdJBrXpB37XOfez6dThcJTyPQx2P8v+Fx5iuAnhBWQaV5BpTkO/aVUa/EdhlvSsXroyw9KV4z/EoBQ5evdGSfjvLtK9O0qmriIvPp/nqUcOEBVHHwFk6zwWtY8J/iXJAUFrW0Bji483wUNyBg6U2LUtz85tBXZty/PCc3l27ywQp433ugaPFWuynPaqRpan18vblocUIseLe4u8uK/Irr2FZH5vkZ9tPUDPgdEX7Bc3BcOBv2xxyPJFIcuXZFjaGhLO0XUmERE5WNUedGNmy4HlzrmfmVkT8AhwCfC7wF7n3E1m9mFgkXPuOjN7E/D/kgT8mcCnnXNnTvYZ1XgWfRzlKfS9QKGvk0LvDgq9nRT6dhD17x75bl5I2LSSbPMqMk2r0wOAVQT17dhhPAzGOcf+nhI9eyL2dZUdBKTz+3ZHDB4YfXHTDxjuCJgEfsCeFwvsfC7P3pdH7mlvXuyzoiPL8o4sK9ckr61twWF3fusfLPHiviTwd6UHAS+mBwF9AyN1M4O25iBt8Sct/2WLQpa1+iwJ8rC/h1LPPqLubkq9vZjvYdkcXq4OL5dN5uvq8LI5vFwyWTY3rTsGZHa4OMZFES6KIIpwpQhXLCZlpWh43ahtDlpXxEWlZJ2b+Sf3icyl1je+GS8zc0+zq7QX/aw9yc7MvgF8Jp3Oc87tSg8Cvu+cO8HM/k86f2e6/S+GtptonzMZ8FH3Pg5s/hl+YxNeQwN+YxN+YyNeQyNeJkNcHEiCv3dHGv5p8A/sHfmOfpZM08ok8IeDfzVB3ZIp9yof7I/p3lNMQ7/scsDuIj27I/q6Syw+Kkxa5B0ZVqxJerM3tlTv3nkAF0X0vLyXnZ097HypPwn9XsfLAwFdxRwDjPzH7LkSrVE3S+I9LGEPS7w91NNPhgIZVyBL/qB5f6jXVhBgYYgNvYYhXhBC2bxlQggCvDDEwgwWhFg49L5w+H0WhpgfpB3WDp+Zh3nB8IQXjlo2L8AswPyh9eny8PrDuxDnnINSaUxAjgQn0cHhOWpdsVgWoqUxoVoc/f6h8uKYfY8pPyigi0UOug411BF/smmybURqTMeHbiNobJ6x/c3Ik+xmsDIdJA/JeQg4aii005Bfmm62EthR9rbOtGxUwJvZlSRP1+Poo4+esToWOrfTdcc/jV//TGY47IcOAILGNjINHVhDBrIFSsEAJXooRXvpf/F/6Nv+w5H3B3Wjgj+bBr+fW3TI4M/Veyyrz7Js9fg9MJ1zM/bIUecc8cAApZ5uou59lHq60/luSt37iHp7ktfubuID+8GDTBY6cslEDqw5C60hB3L17GERu6Nmdhdb2FNYwp7CEp4vvIJCfOjepIEVyXgFMl6BrJdP5imQLeWTA4FSnkxh9Pqs13fQe4ZeQ6+IN/ZWg9nmSG5rcJZ2vh96LZtKDmKXvJZGr4tLRsn5lEp+8hr7RHEwPD9c5tIy5yc94a2EbyUCL0rmA4fvxwS+w/cdgR8TBDF+EONn4+SuCh/wrCyQ3cirufRuOR/DwBxu1JcQkVEyc9PL7pABP0FP+h5gk3PuGxW8vxH4N+Bq51zvJGE03oqD/iI754aerMf69etn7C92ePyxtHz8GhoGF8OBPPGB/ZT276d0YD/x/j5K+/cPlxV2vkCcrqM0wXPLQ2BJBm9JCC0exd5dFHZvw/kjp9HNMgSZNsL65WSbV5NdvIZs+3EE9YsrDu1KtnNxTKm3Nwnrnn2UuruJerrT132UenqGA90VCknds0Aa2tR7WFMWawuSp/GFDvNDHMWDP4sCfraORbl62nL1nJJrxM814efqCbI5vGxAf1zPQBQwWEh6+A8WSV+TXv8DBUe+kB1VPvTaO7T9QLJt8TAeG5/xSmStRNYishTJUEwOFlyeTClPpjRIJhogjAbIFg+QiQvD68O4mNxK6PmjpsgLknlLy/yQkhdSGir3QiLziS2gZD4RPiX8snkvCWN8Ile27HxKzkvK0imeqHlrJIF8OEYeZXCQ5IAgTl69mMCLCcyl8w7fcwSeI/BdugyBB4FPeocIBJ4NL4eBl9w14nuEvkcQJFNS7hMGPkE6haGPr8syUmv83Jx8bCUt+BzJs+i/mi7/P8ATwBVmtsE5d/VEbzSzkCTcv+ScGxp97iUzW152iv7ltLwTWF329lXAzsq/yvT0RL/k5323YHg0Nr2ClrbjaM2tpSX3WurD5eMGqXMONzhQdiCwv+xAoG+k7MB+Si8l5VG+F+cfgCZwTQWKTTspNu+kf98j8Hy64wIwEOIV6/BdE77fSphZStC4GL+xEb+hEW/ota4+2X9ZSA+3unv2EfX0UOrpBtzI/fm55NWaQqwphNU+HAcW+sn91Qe1wmLwIrxcE0GuFT/XSpBblLxmh5Zb8XOL8LPNh+yHUD/df6wyUckxWIgZLMYM5svn4/TAIGagECflhXT9mPn9xZiBvCNfjBnIx8QzdNjoA4HZ8G2RoT8yH/jJU+5C36gfVV4WkEFZmTeyLgwMf2jZi/E9h28xgTcSzIHFeBYBVnbA4BM5j1LsEcU+kTNKJSOKHVEpnSKXLjNSVnIU09dSafS6waFtCkPbQil2FKOR9x769xxq+R98wChSCz7/p23MxYjhlQT8ccDrnUtGJTGzzwL/BbwBeGyiN6W94m8HtjjnPlW26pvA5cBN6es3ysqvMrMvk3Sy65ns+vtMa8kex7rl19IzuJWewWfY1Xc/nb3/DUDgNdCSO46W7FDoH0foN2JmWF09Xl09YfvSQ3zCCBfHxAP9w2cEor4+ot6XKex/geLgS0S2h1JdD3HjfmK/lyIvMMgTycPWu0geQdQH9JI80cZnOLSpA2vJYc0BHGWQcZifwVn+4HpQxMIsQa5lJKSzSVCPBHmy7AV183L0scA3Gut8Gutm5v8e55IwG30wkBwQmHFwEI8J4DCo7BkHR5I4LjtoGAr+8oOKsgOIKKrkgEBkYZmr24srCfiVQAMjDyhrAFY450pm46TGiHOAdwOPmdnmtOzPSIL9LjO7AtgOXJauu5ukB/1Wktvkfu9wvsh0hX4DSxvWs7Qh6bfgXMz+wgv0DD5DTz4J/Wf7/52hqwb14XJa0rBvza6lMbsazyrr0mCeh9+QtMDDSY4LnHOUBvdR6N1BvreTQu92Ct3bKezfiYsn/umdFfCy9aNDOjsS1sPl2VbMDyv+jY4EZkYmMDIBNM/gs6OPZJ5nZLzkN2X2H+YlcsSqJJH+FthsZt8nudr3a8Bfm1kD8L2J3uSc+xHjX1cHOH+c7R3wRxXUZ1aYeTRlV9OUXc0qXg9AFPfTM/hs0srPP8Oe/v9hV1/Smc6zkObsMUlLP7eW1txacsGSadbBCOoWE9Qtpv6oM4bLnXNEA3so9O6geOBFvKBuVHD7mabDul1PRERqT0W3yaXXyl9LEtgPO+dm7dr4ZKpxH/zhcM4xGHXRnZ7W7xncSm/+ORxJR7qsv2i4ld+SW0tzdg2BNzedLUREpDbM9G1yHsnV3wA4zsyOc8798BDvqXlmRl24lLpwKcubfgWA2BXpyz9Pz+BWutPT+y8feDjZHo/GzNFp4CfX85MOfIdubfeXYnYXi3QVInYXi+wuRuwuRuwrRtT7Hq1BwKLApyUIWBT6tAYBrUHyGk7w5DsREaldldwm93HgHSQ954e6VzvgiA/48XgWDgf40VwIQKHUO9x5r2dwKy/uf4DO3uTqRuDV05w5jiBzIsXgWPK2gn2lgN3lQV6IOBCP7tkeGCwJQxYFPnuKEb/sz9NbKo07TkdjegAwFPjJAUDZQUCYHBzUeZ46homI1IhKWvCXACc45ybrUCeT8LwmXHgaBU7igFdkX1BkV76XlwoH2JOP6enPUBr+p0j6MmatyKIgpj3McnxLE+2ZDG2ZgPYwpC0MaAl8vDFhHDlHb1SiO4rYVyzRE0XsS5e7oxLdxYin+gfojiKicY4EMmbDgd8a+CwqOwAYPjgIfJrH+Wypfc45HCViF+FcRJxOzkXERGPKi+lyiZjxysvez+h9OQ0nJzXmxLbL8b35NVzskGdJHn2igJ/AYByzuxDRVSyypxiNOo3eVYjYF0UH/clqCXzawhaObwhZEgYsCaGeLjLx83jFX5AvPEW+tC+5BX0wpNmtoYXjaPLWkgvXYhzcgS8wY3EYsDgMkoHMJ+Cc40Ac010ssS+K6ImS1+7iyMFAZ77AE/sHDjpzAElHjNahywGjDgDSg4KySwQZPbSkIs7FB4VdeRAOByJJSCbL5WFbnPT95evKyybedxrOZcE81Ldkphk+niWP9fUswPS8Wqkxru135uRzKwn4fpJe9PdQFvLOuT+uWq3mEeccfen17yTER586310s0lcaMyAMsDgMaAsDTm2soy2db8uEw/PjB18bcBJwIc458tEeuvMjp/Z39P43z/fcDUDGb6U1t5bm7DH40+i415xOqwPG/a+h6Iy+kk9fKaAv9uktBWXLAS/lfbb2B+yPfdw4N03UWYlGv0SzH9HkRTT5JZr8iGa/NGq5zuKpPiJ+lrjhEB4Ku9EhWNYyHSdIDw7REqNbrYfxSL6KGd5QaFqIRzAqSEfWBQRWN265ZwEe5e8J0/myUCYpHxXS5fti9LJZ2fb4uiwkUiWVBPw306mmdRcjHj8wQFdhpAPbUKjnx9xpkDWjLRPQFoYcW5cdnh8K78VhMO1T2GZGLmxjWdjGssazAIhdxP789rLQf4aXD/x0Wp9zOEJgSToN85MpdsYgDQy4RvpdEwOuiQGa6HeNDMRN9JWaeDldLnHwqEo+RerYT531UW991Nn+5JWR+XrrI8cBPJv7552PbXWOCi4CLA1AzwICr26CsBwzPxyUY/cdlgXp+AE9+v1D5WoJixzJDhnw0x0XfqHozBf4TOdLADT5Hm1hyIpshtMb65Pr3pmA9jBgSRjS5M9NZzTPAppzx9CcOwZaLgAgigdJHzK4IDjnGIgdPVGc9AuI4uGpp9REd3QU3VFMZ1Ri/zgdBYzk36c1SKaWwJ9g3iM3w5cHhkI7aXUqPA9H7ByRc0SO9HX0VByaj3UFXmrPSQ11+HOQGRMGvJnd5Zz7TTN7jPEHfTm9qjWbZcfV5/jkcUezJBPMeDBU00K8rz4DtGTgUGMBFmM33FFwuMNgMe0wmC53HijSE0XjnuCu82zUnQLlHQXLl+fqgG0mOJeM41YsD8x44iCNJgja4qj3Tvf9UBpTPvfnXETmzudPWkO9P/tPxpysBf8n6evFs1GRuZbzPFbmDj51LHMn9Czpt5CZ/HG6sXPsL8XDdw8M3zVQtvzcQJ7uKGJwnAed+8bo2wgDn5bAZ1EYlJUndw4MBVqpPNTKwy4ePwiL44RkyTFu+eh9TBa0ybpqtHh9SwfKMSNMX0cm8NPy0Iw6zztofeDZBO9P3jvRfgMz3aEhNSc7R43GCQO+bMz25wHMrHmy7UXmimdGc3r73tGHOKExOHQgMOb2weQsQYmuYpFn+gfpnWgY4GkyOCjQxgadn67LeR6hNzYER7934ild740fshO9LzTDNw2UI1ILKnnQzR8AHwMGGDlV74BjqlgvkarI+R7L/AzLDnFL6tAzBYZuH+yJImI4KAzHDUtv/DAN1ToVkVlUSYv8WuAU59zualdGZL6o9JkCIiLzVSUXBn5Jci+8iIiILBCVtOA/AvzYzB7iCHzQjYiIyEJUScD/H+Be4DHQ3S4iIiILQSUBHznnPlD1moiIiMiMqeQa/H1mdqWZLTezxUNT1WsmIiIiU1ZJC/630tePlJXpNjkREZF5rJJn0a+ZjYqIiIjIzKnkQTc+8Gago3x759ynqlctERERmY5KTtH/X2AQ9aIXERFZMCoJ+FW1NnKciIhIraukF/23zeyCqtdEREREZkwlLfgHgf8wMw8okgyI5ZxzzVWtmYiIiExZJQH/SeBs4DHnXDWGnhYREZEZVskp+meAxxXuIiIiC0clLfhdwPfN7NuMHmxGt8mJiIjMU5UE/HPplEknERERmecqeZLdDbNREREREZk5lTzJrh34EHAKkBsqd869vor1EhERkWmopJPdl4CngDXADcA24KdVrJOIiIhMUyUBv8Q5dztQdM79wDn3+8BZVa6XiIiITEMlneyK6esuM3szsBNYVb0qiYiIyHRVEvA3mlkL8KfAPwDNwDVVrZWIiIhMSyW96L+VzvYAG6pbHREREZkJEwa8mf0DMOHT65xzf1yVGomIiMi0TdaC31Q2fwPwF1Wui4iIiMyQCQPeObdxaN7Mri5fFhERkfmtktvkYJJT9SIiIjL/VBrwIiIisoBM1smuj5GWe72Z9Q6tApxzrrnalRMREZGpmewafNNsVkRERERmjk7Ri4iI1CAFvIiISA2qWsCb2efN7GUze7ys7C/N7AUz25xObypb9xEz22pmvzCzN1arXiIiIkeCarbg7wAuHKf8FufcunS6G8DMTgbeSTLm/IXArWbmV7FuIiIiNa1qAe+c+yGwt8LN3wp82TmXd849B2wFXlutuomIiNS6ubgGf5WZPZqewl+Ulq0EdpRt05mWiYiIyBTMdsB/FjgWWAfsAj6Zlts424779Dwzu9LMNpnZpq6ururUUkREZIGb1YB3zr3knCs552Lgnxg5Dd8JrC7bdBWwc4J93OacW++cW9/e3l7dCouIiCxQsxrwZra8bPFtwFAP+28C7zSzrJmtAdYCD89m3URERGrJZMPFTouZ3QmcB7SZWSfJcLPnmdk6ktPv24A/AHDOPWFmdwFPAhHwR865UrXqJiIiUuvMuYU7UNz69evdpk2bDr2hiIhIjTCzR5xz6w+1nZ5kJyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDFPAiIiI1SAEvIiJSgxTwIiIiNUgBLyIiUoMU8CIiIjVIAS8iIlKDqhbwZvZ5M3vZzB4vK1tsZv9tZs+kr4vScjOzvzezrWb2qJm9qlr1EhERORJUswV/B3DhmLIPA/c459YC96TLABcBa9PpSuCzVayXiIhIzatawDvnfgjsHVP8VmBjOr8RuKSs/Asu8SDQambLq1U3ERGRWjfb1+CPcs7tAkhfl6blK4EdZdt1pmUiIiIyBfOlk52NU+bG3dDsSjPbZGaburq6qlwtERGRhWm2A/6loVPv6evLaXknsLpsu1XAzvF24Jy7zTm33jm3vr29vaqVFRERWahmO+C/CVyezl8OfKOs/D1pb/qzgJ6hU/kiIiJy+IJq7djM7gTOA9rMrBP4C+Am4C4zuwLYDlyWbn438CZgK9AP/F616iUiInIkqFrAO+feNcGq88fZ1gF/VK26iIiIHGnmSyc7ERERmUEKeBERkRqkgBcREalBCngREZEapIAXERGpQQp4ERGRGqSAFxERqUEKeBERkRqkgBcREalBCngREZEapIAXERGpQQp4ERGRGqSAFxERqUEKeBERkRqkgBcREalBCngREZEapIAXERGpQQp4ERGRGqSAFxERqUEKeBERkRqkgBcREalBCngREZEapIAXERGpQQp4ERGRGqSAFxERqUEKeBERkRqkgBcREalBCngREZEapIAXERGpQQr4MrGL57oKIiIiM0IBn9qR38b/3n4tnfnn57oqIiIi06aAT2UtSz4e5NMv3MiO/La5ro6IiMi0KOBTSzPLuWbV9WS8DH//wo1sH3xurqskIiIyZQr4Mu3hMq5ZeT1ZL8end97I9sFn57pKIiIiU6KAH6MtPIprVl5PnVfHp3feyLbBX851lURERA6bAn4cS8KlXLPyL6j3Gvn7nTfy3OAzc10lERGRw6KAn8CSsJ1rVl5Po9fEP7zw1zw78PRcV0lERKRiCvhJLA7buGbVX9AUtPCZnX/DLwd+MddVEhERqYgC/hAWBUu4ZuX1NAetfGbn37B14Km5rpKIiMghKeAr0Bos5pqV19MaLOYfd/4NzwxsmesqiYiITEoBX6GWYBFXr7yeRUEb/7jzJp7uf2KuqyQiIjIhBfxhaAlauXrlR1kStvOPuz7OU/2PzXWVRERExqWAP0zNQStXr/go7eEyPrvrb9nS/+hcV0lEROQgCvgpaApauHrl/2JpuJzP7voETx74n7mukoiIyCgK+Clq9Jv5k5UfZVm48v9v796j46zrPI6/v89kck/TW9KmhVKKpRQKbSFWbhYiUFv1cFkvwEEFFuTolpsKKuJ6dP/Yw55VF9lFkUUElEUF0WWFQoGG2lZaeqcgCHLRIglJWzJJStNmMt/9Y56kSZs2LU3mmZl8Xuf0zMxz/c5zevJ5fr+Z+f24o/F7vLh9fdQliYiI9FDAH4LyWAXXTfwWNYWH8ZOG77Np+9qoSxIREQEiCngze9PMNpnZBjNbEy4bbWZPmtmr4eOoKGo7WGWxcq6bcDMTiiZxZ8MPeH77mqhLEhERibQFX+fus9y9Nnz9DeBpd58KPB2+zgmlsXKunXAzhxdN5r8b/oMN7aujLklERIa5bOqiPw+4N3x+L3B+hLUctNJYGddMuJlJRVO4q/FW1revirokEREZxqIKeAcWm9laM7sqXDbO3RsAwsfq/nY0s6vMbI2ZrWlubs5QuQemJFbK1RNvYnLxUfy08Yesa18ZdUkiIjJMRRXwp7n7icACYKGZzT3QHd39TnevdffaqqqqoavwfSoJSrl6wk0cWTyVuxtvY03bH6MuSUREhqFIAt7d3w4fm4DfAnOAd8ysBiB8bIqitsFQHJSwcMJNTCmexs/e+U9Wty2PuiQREQQ9QzYAAA8FSURBVBlmMh7wZlZmZhXdz4F5wAvAI8Cl4WaXAv+b6doGU3FQzMIJX+cDJdO5553bWdW2LOqSRERkGImiBT8OWG5mG4HngEfd/XHgFuAcM3sVOCd8ndOKgmIW1nydo0uO5b53fsTK1qVRlyQiIsNEQaZP6O6vAzP7Wb4VOCvT9Qy1wqCIL9V8jTsavsfPm+4gRYpTR9RFXZaIiOS5bPqZXN4qDIr4Ys2NHFNyPL9o+gkrEkuiLklERPKcAj5DCoNCvlhzA8eVzuL+5jtZlngq6pJERCSPKeAzKB4UclXNV5lROpsHmu9iaWJx1CWJiEieUsBnWNzifKHmKxxfehK/ar6bZ1oej7okERHJQwr4CKRD/svMLPsgv95yD0taHou6JBERyTMK+IgUWAFXjr+OWWVzeGjLfTzd8mjUJYmISB5RwEcoZgVcMf5aTiw/md9s+TlPvvt/UZckIiJ5IuO/g5e+YlbA5eOuwTB+u/V+nBTzRp0XdVkiIpLjFPBZIGYxLht3NQEBv9v6AClPMX/0BVGXJSIiOUwBnyViFuPScQsxMx7Z9itSpPjY6E9GXZaIiOQoBXwWCSzg89X/REDA77c9iON8fPSnoi5LRERykAI+ywQW8NnqL2IEPLrtIVKe4hOjP42ZRV2aiIjkEAV8Fgos4JLqqwgsYNG7D5MixbmjL1TIi4jIAVPAZ6nAAi6uuhIj4Il3f4d7ivPGXKyQFxGRA6KAz2KBBVxU9Y8YxuKWR0iR4oIxlyjkRURkQAr4LNcd8oEZT7X8npSn+OTYzynkRURkvxTwOcDM+MzYyzECliQew3E+NfbzCnkREdknBXyOMDM+PfZSgjDkU6T4zNjLFPIiItIvBXwOMTM+OfZzBBb0dNdfWHU5gWlKARER6UsBn2PMjAvGXEJAwOKWR3BSXFR1hUJeRET6UMDnIDMLfzKX/gndn97byBmVH+W0EXWUxsqjLk9ERLKAAj5HmRnnjr6QyUUfYEnLo/x26/08uu0hPlQxl7qR8xlfODHqEkVEJEIK+BxmZswsr2VmeS2bd77JMy2P82zbMyxrfZJjS2dSVzmf6aUz1X0vIjIMmbtHXcP7Vltb62vWrIm6jKzSlkywvPVpliYW09rVwrj4BM4cOZ8PVcylOCiOujwRETlEZrbW3WsH3E4Bn5+SnmRd+0rqWxbx152vURKUcuqIOs6s/Chj4tVRlyciIu+TAl4AcHfe6HiV+sQi1revwnFOKKulbuQCphZP1+/oRURyzIEGvD6Dz3NmxpSSo5lScjTvJrfyh8RilieWsHH7ag4rPIK6kQuoLT+VeFAYdakiIjKI1IIfhnaldrG6bTn1iUW8vWsz5bERfHjE2cytPIfKglFRlyciIvuhLnoZkLvzyo4XqU8sYtP2dQQEnFh+CnUjFzC5+KioyxMRkX6oi14GZGZMK53BtNIZNHc28kzLEzzb+gyr25dzZPFU6ioXMLt8DjHTfxMRkVyjFrz0sSP1Hitbl/JM4gmaOxsZWTCauSPmcXrlWZTHKqIuT0Rk2FMXvRySlKd48b311Lc8zss7NhG3OHMqPkxd5QImFB0edXkiIsOWuujlkAQWcHzZSRxfdhJv79xMfWIRz7UtY0XrEqaVzKBu5AJmlM7WKHkiIllKLXg5YO1dbaxoXcLSxBO0JLdRFR/HGZUf5ZQRZ1ISlEZdnojIsKAuehkyXZ5kQ/tq6hOLeL3jFYqthJNHnMGZlfOpLhwfdXkiInlNXfQyZGJWwEkVp3BSxSn8teM16hOLWJZ4kqWJJziudDYfGbmAaSUzNEqeiEiE1IKXQZFIvsuyxFMsa32Ktq4ENYWHUVe5gDkVp1MYFEVdnohI3lAXvUSiM7WLte3PUp9YxOadb1IWlHPaiLM4Y+Q8RhWMibo8EZGcp4CXSLk7f+l4mfqWRWzcvhrDmFU+h7rKBUwpPlrd9yIi75M+g5dImRlTS6YztWQ6WzubWJpYzIrWeta1r2RS0RSOLjmO6vj49L/CGipjoxT6IiKDSC14yZidqQ5Wtf2BFa1LaNj5FkmSPesKrYiq+Diq4+OpitdQXTi+5/mIWKXCX0QkpBa8ZJ2ioJi5lfOYWzmPlKd4N7mFps5Gmjobad7VQFNnI3/ftZmN29eSoqtnv2IroapwHFXx8VTHa8LgT7f8y4MKhb+ISD8U8BKJwALGxKsZE69mOif0WdflXWxLNtO0Kwz/zkaaOhvYvPMNNrQ/R4pUz7YlQWkY/Onwryrc/bwsVp7ptyUikjUU8JJ1YhajKmylH7fHuqQn2drZ1Cv4G2na1cAbHa+ytv1ZnN0fOZUFFenWfq/Q736tkfdEJN8p4CWnFFgB4wonMK5wwl7rOr2TLZ1NNO1qoKmzoecG4JUdL/Jc27I+21bEKnd39Yfd/d03FcVBcabejojIkMm6gDez+cAPgRhwl7vfEnFJkiPiFqemcCI1hRP3WrcrtZPmznfCln9D2PJv5KX3nmdl19I+21bGRoWf8e/+ol91fDylsTIKKCBmBRRY+jFmsUy9PRGRg5JVAW9mMeB24BzgLWC1mT3i7n+KtjLJdYVBEROLJjGxaNJe6zpSHTR3d/mHX/Zr7mxk0/Z1tHUl9ntcw3rCfnf4x3cvC28CCkgv717We32BFRCj97L47v16L6PvPn3OQfeyeJ8bkPS6mL6IKDIMZVXAA3OAv7j76wBm9kvgPEABL0OmOCjm8KLJHF40ea91O7re6+nq35nqIEmSpHfS5UmSnuzz2OlJuth7eTL815HaQZLeyzrp8q7d24XHHgp79jzs/waj+0Yhts+bj743NbF+bmoKwpua/s/XcyPSqy5NPSwyuLIt4CcCm3u9fgv4UES1iFASK2VSbAqTiqdk5HzuToquvW4Oum8c9nXzsOeNxe4biD3Xd5H0zr7Hoe8+Hakd4Q1LZ8+NR/eNSPcxe/+SYbCke0PiBCjoJb/86+QfURLL/Bd7sy3g++tH7DMSj5ldBVwVvmw3sz8P4vnHAlsG8Xiyb7rWmaHrnBm6zpmRk9f5Vu4d7EMecSAbZVvAvwUc3uv1YcDbvTdw9zuBO4fi5Ga25kBGB5JDp2udGbrOmaHrnBm6zgcn2/rCVgNTzexIMysELgIeibgmERGRnJNVLXh3T5rZ1cATpH8md7e7vxhxWSIiIjknqwIewN0fAx6L6PRD0vUv/dK1zgxd58zQdc4MXeeDkNOzyYmIiEj/su0zeBERERkECviQmc03sz+b2V/M7BtR15OPzOxwM6s3s5fM7EUzuy7qmvKZmcXMbL2Z/T7qWvKZmY00s4fM7OXw//YpUdeUj8zsy+HfjRfM7AEz06QRA1DA02eI3AXAscDFZnZstFXlpSTwVXefDpwMLNR1HlLXAS9FXcQw8EPgcXc/BpiJrvmgM7OJwLVArbvPIP0l7IuirSr7KeDTeobIdfddQPcQuTKI3L3B3deFz9tI/yHce2YYOWRmdhjwceCuqGvJZ2Y2ApgL/BTA3Xe5e0u0VeWtAqDEzAqAUvYYI0X2poBP62+IXAXPEDKzycBsYFW0leStW4GvwRCMKSu9TQGagZ+FH4fcZWZlUReVb9z978D3gL8BDUDC3RdHW1X2U8CnDThErgweMysHfgNc7+6tUdeTb8zsE0CTu6+NupZhoAA4Efixu88GtgP6Ds8gM7NRpHtVjwQmAGVm9tloq8p+Cvi0AYfIlcFhZnHS4X6/uz8cdT156jTgXDN7k/THTR8xs19EW1Leegt4y927e6IeIh34MrjOBt5w92Z37wQeBk6NuKasp4BP0xC5GWDpScl/Crzk7j+Iup585e43ufth7j6Z9P/lJe6u1s4QcPdGYLOZTQsXnYWmtx4KfwNONrPS8O/IWejLjAPKupHsoqAhcjPmNOBzwCYz2xAu+2Y4eqFIrroGuD9sHLwOXB5xPXnH3VeZ2UPAOtK/xlmPRrUbkEayExERyUPqohcREclDCngREZE8pIAXERHJQwp4ERGRPKSAFxERyUMKeJEsZ2ZuZt/v9foGM/vOIBy3yMyeMrMNZnbhHuvuMbNPhc+vN7PSQz1fr2Of33uSITP7FzM7e7COLyJpCniR7LcT+AczGzvIx50NxN19lrv/aj/bXU96co8DFs7QuC/nk561EQB3/7a7P3UwxxeRgSngRbJfkvSgHl/ec4WZHWFmT5vZ8+HjpH62GW1mvwu3WWlmJ5hZNfALYFbYgj+qvxOb2bWkx/6uN7P6cNk8M3vWzNaZ2YPh3AKY2Ztm9m0zWw582sy+YGarzWyjmf0mHIXsVOBc4N+7z7tHb8FZ4aQtm8zsbjMr6nXs74bn3GRmx4TLzwiPsyHcr+KQr7ZInlDAi+SG24FLzKxyj+X/Bdzn7icA9wO39bPvd4H14TbfDLdvAq4EloUt+Nf6O6m730Z6XoY6d68LexG+BZzt7icCa4Cv9Nqlw91Pd/dfAg+7+wfdvXuO9Cvc/Y+kh4G+cc/zmlkxcA9wobsfT3qkzS/1OvaW8Jw/Bm4Il90ALHT3WcCHgR37uH4iw44CXiQHhLPu3Qdcu8eqU4D/CZ//HDi9n91PD9fh7kuAMf3cKByok0l3r68Ihxu+FDii1/reXf0zzGyZmW0CLgGOG+DY00hPKPJK+Ppe0nOtd+uenGgtMDl8vgL4QdjTMNLdkwf5fkTylsaiF8kdt5Iei/tn+9mmv7GnB3M6ZAOedPeL97F+e6/n9wDnu/tGM7sMOPMAjr0/O8PHLsK/Xe5+i5k9CnwMWGlmZ7v7ywMcR2RYUAteJEe4+zbg18AVvRb/kfSMcZBuJS/vZ9c/hOswszNJd3W3HsSp24Duz7ZXAqeZ2QfC45Wa2dH72K8CaAinCL5kH8fr7WVgcvexSU9MtHR/hZnZUe6+yd3/jfTHBcccyBsSGQ4U8CK55ftA72/TXwtcbmbPkw7E6/rZ5ztAbbjNLaS71Q/GncAiM6t392bgMuCB8Hgr2Xeo/jOwCniSdHh3+yVwY/iluJ4v97l7B+mZ2B4Mu/VTwB0D1Ha9mb1gZhtJf/6+6CDfm0je0mxyIiIieUgteBERkTykgBcREclDCngREZE8pIAXERHJQwp4ERGRPKSAFxERyUMKeBERkTykgBcREclD/w+UIfYwcqQPhAAAAABJRU5ErkJggg==\n", 223 | "text/plain": [ 224 | "
" 225 | ] 226 | }, 227 | "metadata": { 228 | "needs_background": "light" 229 | }, 230 | "output_type": "display_data" 231 | } 232 | ], 233 | "source": [ 234 | "fig = plt.figure(figsize = (8, 8))\n", 235 | "plt.plot(hamming_distance)\n", 236 | "plt.xlabel('No of Iterations')\n", 237 | "plt.ylabel('Hamming Distance')\n", 238 | "plt.ylim([0, 400])\n", 239 | "plt.legend(['pattern 1', 'pattern 2', 'pattern 3', 'pattern 4', 'pattern 5', 'pattern 6', 'pattern 7', 'pattern 8', 'pattern 9', 'pattern 10'], loc='best')\n", 240 | "plt.show()" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": null, 246 | "metadata": {}, 247 | "outputs": [], 248 | "source": [] 249 | } 250 | ], 251 | "metadata": { 252 | "kernelspec": { 253 | "display_name": "Python 3", 254 | "language": "python", 255 | "name": "python3" 256 | }, 257 | "language_info": { 258 | "codemirror_mode": { 259 | "name": "ipython", 260 | "version": 3 261 | }, 262 | "file_extension": ".py", 263 | "mimetype": "text/x-python", 264 | "name": "python", 265 | "nbconvert_exporter": "python", 266 | "pygments_lexer": "ipython3", 267 | "version": "3.7.0" 268 | } 269 | }, 270 | "nbformat": 4, 271 | "nbformat_minor": 2 272 | } 273 | -------------------------------------------------------------------------------- /notebooks/hopfield_single_pattern_pic.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "from PIL import Image\n", 12 | "from tqdm import tqdm" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": {}, 19 | "outputs": [ 20 | { 21 | "data": { 22 | "text/plain": [ 23 | "" 24 | ] 25 | }, 26 | "execution_count": 2, 27 | "metadata": {}, 28 | "output_type": "execute_result" 29 | }, 30 | { 31 | "data": { 32 | "image/png": "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\n", 33 | "text/plain": [ 34 | "
" 35 | ] 36 | }, 37 | "metadata": { 38 | "needs_background": "light" 39 | }, 40 | "output_type": "display_data" 41 | } 42 | ], 43 | "source": [ 44 | "im = Image.open('../data/beautiful_me/me.jpeg')\n", 45 | "size = 64, 64\n", 46 | "im.thumbnail(size, Image.ANTIALIAS)\n", 47 | "im_np = np.asarray(im)\n", 48 | "im_np = np.where(im_np<128, -1, 1)\n", 49 | "plt.imshow(im_np, cmap='gray')" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 3, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "N = im_np.shape[0]*im_np.shape[1]\n", 59 | "P = 1\n", 60 | "N_sqrt = np.sqrt(N).astype('int32')\n", 61 | "NO_OF_ITERATIONS = 10" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 4, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "im_np = im_np.reshape(1, N)\n", 71 | "epsilon = im_np" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 5, 77 | "metadata": {}, 78 | "outputs": [ 79 | { 80 | "data": { 81 | "text/plain": [ 82 | "array([[-1, -1, -1, ..., 1, 1, -1]])" 83 | ] 84 | }, 85 | "execution_count": 5, 86 | "metadata": {}, 87 | "output_type": "execute_result" 88 | } 89 | ], 90 | "source": [ 91 | "epsilon" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 6, 97 | "metadata": {}, 98 | "outputs": [ 99 | { 100 | "data": { 101 | "text/plain": [ 102 | "array([[-1, -1, -1, ..., -1, -1, -1],\n", 103 | " [-1, -1, -1, ..., 1, -1, -1],\n", 104 | " [-1, -1, -1, ..., 1, 1, 1],\n", 105 | " ...,\n", 106 | " [-1, -1, -1, ..., 1, 1, -1],\n", 107 | " [-1, -1, -1, ..., 1, 1, -1],\n", 108 | " [-1, -1, -1, ..., 1, 1, -1]])" 109 | ] 110 | }, 111 | "execution_count": 6, 112 | "metadata": {}, 113 | "output_type": "execute_result" 114 | } 115 | ], 116 | "source": [ 117 | "epsilon.reshape(N_sqrt, N_sqrt)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 7, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/plain": [ 128 | "" 129 | ] 130 | }, 131 | "execution_count": 7, 132 | "metadata": {}, 133 | "output_type": "execute_result" 134 | }, 135 | { 136 | "data": { 137 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAD8CAYAAABXXhlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADk1JREFUeJzt3W+sJXV9x/H3pyxUqxJAgWxYLJBsLDzQRTaIoWkUxWypER5gI7Fm09DuE00wNbHQJk1t0kSfKH3QNNkIdR9YhaJ2CQ+qmxXSNGnQXYEKrrhoKW7YujRC1D4gXf32wZnVy+39c+69M3POvb/3Kzk5Z+bOued7Z87n/H6/OXNnUlVIasuvzboASeMz+FKDDL7UIIMvNcjgSw0y+FKDDL7UoA0FP8meJE8neSbJnX0VJWlYWe8BPEnOAr4H3AicAL4J3FZV3+mvPElD2LaB514LPFNVPwBI8kXgZmDZ4Cdp7jDBa6655hXTR48enWrZvpfTMBau/5W2y0rbYqVtuB5VldWW2UiLfyuwp6r+qJv+EPC2qvrICs9pLviL12+y/DZZuGzfy2kYC9f/SttlpW2x0jZcj2mCv5EWf6lf/v/+uiT7gH0beB1JPdtI8E8Aly6Y3gE8v3ihqtoP7Id2WvyVPt2nbYX7Xk7DWG79r2W7rGcbbrSXsJG9+t8Edia5PMk5wAeABzdUjaRRrLvFr6rTST4CfBU4C7i3qp7qrTJJg1n3zr11vZhdfakXq+zUHXTnXtOm3Uvrh4CGsNz7avfu3VM930N2pQYZfKlBdvVXsN6DLuzea97Z4ksNMvhSgwy+1CDH+Iu08jVdH/8YstnXQcts8aUGGXypQXb112Azd237/p/v1X7nZl5XLbDFlxpk8KUG2dVfwVpOnzSmIbrtfVuuxnlZh62zxZcaZPClBhl8qUGO8ReZx6PzNsOYflpr+VvmZf1vRbb4UoMMvtSg5rv689qd3Erd+/XyK8Hh2OJLDTL4UoMMvtSgLTXGn/Yqstrc/K/AjVu1xU9yb5JTSZ5cMO+CJIeSHO/uzx+2TEl9mqar/zlgz6J5dwKHq2oncLiblrRJrBr8qvoX4MeLZt8MHOgeHwBu6bmu3lXVkjdtLUlecdPS1rtz7+KqOgnQ3V/UX0mShjb4zr0k+4B9Q7+OpOmtN/g/SrK9qk4m2Q6cWm7BqtoP7Id+LpO90p77efwHm7Xou2u63kuAbSWb/T0xlPV29R8E9naP9wIH+ylH0him+TrvC8C/AW9KciLJ7cAngRuTHAdu7KYlbRKrdvWr6rZlfvSunmuRNJIte+TevJqXS1c5/m+bx+pLDTL4UoM2XVd/pW7oPH51sxm7zcutu630t7TOFl9qkMGXGmTwpQbNbIy/eOw17ckV5nEcP7R5+TvXUsdm3B/QElt8qUEGX2rQzLr66+0Kzku3Vyubl68EWxwaTsMWX2qQwZcaNGrwr7nmmqnOded58TQEz8X3K7b4UoMMvtQggy81aNSv844ePfrL8dVWHrs7hnQdzDtbfKlBBl9q0KY7Ecc8Grpbu5bf3/cQaqt22Rf/XVt56LkUW3ypQQZfapDBlxo0N4fsejhlPxZfJnq527SmPXR6ucuQr3bTbExzCa1Lkzyc5FiSp5Lc0c2/IMmhJMe7+/OHL1dSH6Zp8U8DH6uqK4HrgA8nuQq4EzhcVTuBw920pE1g1eBX1cmq+lb3+KfAMeAS4GbgQLfYAeCWjRRi929c8zK0mtV2b33IsaYxfpLLgKuBR4GLq+okTD4cgIv6Lk7SMKYOfpLXAl8CPlpVP1nD8/YlOZLkyAsvvLCeGiX1bKrgJzmbSeg/X1Vf7mb/KMn27ufbgVNLPbeq9lfV7qrafeGFF/ZRs6QNmmavfoB7gGNV9ekFP3oQ2Ns93gscXO13nfnvvFmPKze7efyqbNqvEdf7taL6Nc2x+tcDHwK+neTxbt6fAZ8E7k9yO/Ac8P5hSpTUt1WDX1X/Ciz30fyufsuRNIaZHblnl2/9ZtWNXstQYj3Dkda/YhuTx+pLDTL4UoPm5mq505rHSyKt5cq/Yxp6/czL+p/WZqt3SLb4UoMMvtQggy81KGOOe5Is+2JbdfzVx3h/q66b1fS9r2Sl9Tgv+2X6UFWr/jG2+FKDDL7UoLk5r/5W6mr1zXXTD9fjr9jiSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDprl23quSfCPJE0meSvKJbv7lSR5NcjzJfUnOGb5cSX2YpsV/Gbihqt4C7AL2JLkO+BTwmaraCbwI3D5cmZL6tGrwa+Jn3eTZ3a2AG4AHuvkHgFsGqVBS76Ya4yc5q7tS7ingEPB94KWqOt0tcgK4ZJgSJfVtquBX1c+rahewA7gWuHKpxZZ6bpJ9SY4kObL+MiX1aU179avqJeAR4DrgvCRnztm3A3h+mefsr6rdVbV7I4VK6s80e/UvTHJe9/jVwLuBY8DDwK3dYnuBg0MVKalfq15QI8mbmey8O4vJB8X9VfVXSa4AvghcADwG/EFVvbzK72rzyhDSiKa5oMbcXElHUj+8ko6kJRl8qUEGX2qQwZcaZPClBhl8qUEGX2qQwZcaZPClBhl8qUEGX2qQwZcaZPClBhl8qUEGX2qQwZcaZPClBhl8qUEGX2qQwZcaZPClBhl8qUEGX2qQwZcaZPClBk0d/O5S2Y8leaibvjzJo0mOJ7kvyTnDlSmpT2tp8e9gcrHMMz4FfKaqdgIvArf3WZik4UwV/CQ7gN8DPttNB7gBeKBb5ABwyxAFSurftC3+3cDHgV90068HXqqq0930CeCSnmuTNJBVg5/kvcCpqjq6cPYSiy55Jdwk+5IcSXJknTVK6tm2KZa5HnhfkpuAVwHnMukBnJdkW9fq7wCeX+rJVbUf2A9eJluaF6u2+FV1V1XtqKrLgA8AX6+qDwIPA7d2i+0FDg5WpaRebeR7/D8F/iTJM0zG/Pf0U5KkoaVqvN63XX1peFW11D64V/DIPalBBl9qkMGXGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlB01w0kyTPAj8Ffg6crqrdSS4A7gMuA54Ffr+qXhymTEl9WkuL/86q2lVVu7vpO4HDVbUTONxNS9oENtLVvxk40D0+ANyy8XIkjWHa4BfwtSRHk+zr5l1cVScBuvuLhihQUv+mGuMD11fV80kuAg4l+e60L9B9UOxbdUFJo1nzZbKT/CXwM+CPgXdU1ckk24FHqupNqzzXy2RLA+vlMtlJXpPkdWceA+8BngQeBPZ2i+0FDq6/VEljWrXFT3IF8JVuchvwD1X110leD9wPvBF4Dnh/Vf14ld9liy8NbJoWf81d/Y0w+NLweunqS9p6DL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDDL7UIIMvNcjgSw0y+FKDpgp+kvOSPJDku0mOJXl7kguSHEpyvLs/f+hiJfVj2hb/b4B/rqrfAt4CHAPuBA5X1U7gcDctaROY5qKZ5wJPAFfUgoWTPI2XyZbmTl/XzrsCeAH4+ySPJflsd7nsi6vqZPdCJ4GLNlStpNFME/xtwFuBv6uqq4H/YQ3d+iT7khxJcmSdNUrq2TTBPwGcqKpHu+kHmHwQ/Kjr4tPdn1rqyVW1v6p2V9XuPgqWtHGrBr+q/gv4YZIz4/d3Ad8BHgT2dvP2AgcHqVBS71bduQeQZBfwWeAc4AfAHzL50LgfeCPwHPD+qvrxKr/HnXvSwKbZuTdV8Pti8KXh9bVXX9IWY/ClBhl8qUEGX2qQwZcaZPClBhl8qUHbRn69/wb+E3hD93iW5qEGsI7FrOOV1lrHb06z0KgH8PzyRZMjsz52fx5qsA7rmFUddvWlBhl8qUGzCv7+Gb3uQvNQA1jHYtbxSoPUMZMxvqTZsqsvNWjU4CfZk+TpJM8kGe2svEnuTXIqyZML5o1+evAklyZ5uDtF+VNJ7phFLUleleQbSZ7o6vhEN//yJI92ddyX5Jwh61hQz1nd+RwfmlUdSZ5N8u0kj585TdyM3iOjnMp+tOAnOQv4W+B3gauA25JcNdLLfw7Ys2jeLE4Pfhr4WFVdCVwHfLhbB2PX8jJwQ1W9BdgF7ElyHfAp4DNdHS8Ctw9cxxl3MDll+xmzquOdVbVrwddns3iPjHMq+6oa5Qa8Hfjqgum7gLtGfP3LgCcXTD8NbO8ebweeHquWBTUcBG6cZS3AbwDfAt7G5ECRbUttrwFff0f3Zr4BeAjIjOp4FnjDonmjbhfgXOA/6Pa9DVnHmF39S4AfLpg+0c2blZmeHjzJZcDVwKOzqKXrXj/O5CSph4DvAy9V1elukbG2z93Ax4FfdNOvn1EdBXwtydEk+7p5Y2+X0U5lP2bwlzodUJNfKSR5LfAl4KNV9ZNZ1FBVP6+qXUxa3GuBK5dabMgakrwXOFVVRxfOHruOzvVV9VYmQ9EPJ/mdEV5zsQ2dyn4txgz+CeDSBdM7gOdHfP3Fpjo9eN+SnM0k9J+vqi/PshaAqnoJeITJPofzkpz5/40xts/1wPuSPAt8kUl3/+4Z1EFVPd/dnwK+wuTDcOztsqFT2a/FmMH/JrCz22N7DvABJqfonpXRTw+eJMA9wLGq+vSsaklyYZLzusevBt7NZCfSw8CtY9VRVXdV1Y6quozJ++HrVfXBsetI8pokrzvzGHgP8CQjb5ca81T2Q+80WbST4ibge0zGk38+4ut+ATgJ/C+TT9XbmYwlDwPHu/sLRqjjt5l0W/8deLy73TR2LcCbgce6Op4E/qKbfwXwDeAZ4B+BXx9xG70DeGgWdXSv90R3e+rMe3NG75FdwJFu2/wTcP4QdXjkntQgj9yTGmTwpQYZfKlBBl9qkMGXGmTwpQYZfKlBBl9q0P8BBgj8VZbDJm4AAAAASUVORK5CYII=\n", 138 | "text/plain": [ 139 | "
" 140 | ] 141 | }, 142 | "metadata": { 143 | "needs_background": "light" 144 | }, 145 | "output_type": "display_data" 146 | } 147 | ], 148 | "source": [ 149 | "im = Image.open('../data/beautiful_me/me_half_masked.jpeg')\n", 150 | "im.thumbnail(size, Image.ANTIALIAS)\n", 151 | "im_masked_np = np.asarray(im)\n", 152 | "try:\n", 153 | " im_masked_np = im_masked_np[:, :, 0]\n", 154 | "except IndexError:\n", 155 | " pass\n", 156 | "im_masked_np = np.where(im_masked_np<128, -1, 1)\n", 157 | "im_masked_np = im_masked_np.reshape(1, N)\n", 158 | "test_array = im_masked_np\n", 159 | "plt.imshow(test_array.reshape(N_sqrt, N_sqrt), cmap='gray')" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": 8, 165 | "metadata": {}, 166 | "outputs": [ 167 | { 168 | "name": "stderr", 169 | "output_type": "stream", 170 | "text": [ 171 | "100%|██████████| 4096/4096 [00:08<00:00, 510.84it/s]\n" 172 | ] 173 | }, 174 | { 175 | "data": { 176 | "text/plain": [ 177 | "array([[ 0. , 0.00024414, 0.00024414, ..., -0.00024414,\n", 178 | " -0.00024414, 0.00024414],\n", 179 | " [ 0.00024414, 0. , 0.00024414, ..., -0.00024414,\n", 180 | " -0.00024414, 0.00024414],\n", 181 | " [ 0.00024414, 0.00024414, 0. , ..., -0.00024414,\n", 182 | " -0.00024414, 0.00024414],\n", 183 | " ...,\n", 184 | " [-0.00024414, -0.00024414, -0.00024414, ..., 0. ,\n", 185 | " 0.00024414, -0.00024414],\n", 186 | " [-0.00024414, -0.00024414, -0.00024414, ..., 0.00024414,\n", 187 | " 0. , -0.00024414],\n", 188 | " [ 0.00024414, 0.00024414, 0.00024414, ..., -0.00024414,\n", 189 | " -0.00024414, 0. ]])" 190 | ] 191 | }, 192 | "execution_count": 8, 193 | "metadata": {}, 194 | "output_type": "execute_result" 195 | } 196 | ], 197 | "source": [ 198 | "w = np.zeros((N, N))\n", 199 | "h = np.zeros((N))\n", 200 | "for i in tqdm(range(N)):\n", 201 | " for j in range(N):\n", 202 | " w[i, j] = (epsilon[0, i]*epsilon[0, j])\n", 203 | " if i==j:\n", 204 | " w[i, j] = 0\n", 205 | "w /= N\n", 206 | "w" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 9, 212 | "metadata": {}, 213 | "outputs": [ 214 | { 215 | "data": { 216 | "text/plain": [ 217 | "" 218 | ] 219 | }, 220 | "execution_count": 9, 221 | "metadata": {}, 222 | "output_type": "execute_result" 223 | }, 224 | { 225 | "data": { 226 | "image/png": "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\n", 227 | "text/plain": [ 228 | "
" 229 | ] 230 | }, 231 | "metadata": { 232 | "needs_background": "light" 233 | }, 234 | "output_type": "display_data" 235 | } 236 | ], 237 | "source": [ 238 | "plt.imshow(w)" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 10, 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "text/plain": [ 249 | "(1, 4096)" 250 | ] 251 | }, 252 | "execution_count": 10, 253 | "metadata": {}, 254 | "output_type": "execute_result" 255 | } 256 | ], 257 | "source": [ 258 | "test_array.shape" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 11, 264 | "metadata": {}, 265 | "outputs": [ 266 | { 267 | "name": "stderr", 268 | "output_type": "stream", 269 | "text": [ 270 | "100%|██████████| 10/10 [01:40<00:00, 10.19s/it]\n" 271 | ] 272 | }, 273 | { 274 | "data": { 275 | "text/plain": [ 276 | "array([[ 404.],\n", 277 | " [2745.],\n", 278 | " [3626.],\n", 279 | " [3919.],\n", 280 | " [4032.],\n", 281 | " [4075.],\n", 282 | " [4088.],\n", 283 | " [4091.],\n", 284 | " [4094.],\n", 285 | " [4095.]])" 286 | ] 287 | }, 288 | "execution_count": 11, 289 | "metadata": {}, 290 | "output_type": "execute_result" 291 | }, 292 | { 293 | "data": { 294 | "image/png": "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\n", 295 | "text/plain": [ 296 | "
" 297 | ] 298 | }, 299 | "metadata": { 300 | "needs_background": "light" 301 | }, 302 | "output_type": "display_data" 303 | } 304 | ], 305 | "source": [ 306 | "fig = plt.figure(figsize = (8, 8))\n", 307 | "fig.subplots_adjust(hspace=0.1, wspace=0.1)\n", 308 | "hamming_distance = np.zeros((NO_OF_ITERATIONS, 1))\n", 309 | "# print(test_array.shape)\n", 310 | "for iteration in tqdm(range(NO_OF_ITERATIONS)):\n", 311 | " for i in range(N):\n", 312 | " i = np.random.randint(N)\n", 313 | " h[i] = 0\n", 314 | " for j in range(N):\n", 315 | " h[i] = w[i, j]*test_array[0, j]\n", 316 | " test_array = (np.where(h<0, -1, 1)).reshape(1, N)\n", 317 | "\n", 318 | " hamming_distance[iteration, 0] = ((epsilon - test_array)!=0).sum()\n", 319 | " plt.subplot(4, 3,iteration+1)\n", 320 | " plt.imshow(np.where(test_array.reshape(N_sqrt, N_sqrt)<1, 0, 256), cmap='gray')\n", 321 | "hamming_distance" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": 12, 327 | "metadata": {}, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "image/png": "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\n", 332 | "text/plain": [ 333 | "
" 334 | ] 335 | }, 336 | "metadata": { 337 | "needs_background": "light" 338 | }, 339 | "output_type": "display_data" 340 | } 341 | ], 342 | "source": [ 343 | "fig = plt.figure(figsize = (8, 8))\n", 344 | "plt.plot(hamming_distance)\n", 345 | "plt.xlabel('No of Iterations')\n", 346 | "plt.ylabel('Hamming Distance')\n", 347 | "plt.ylim([0, 4096])\n", 348 | "plt.legend(['pattern 1', 'pattern 2', 'pattern 3', 'pattern 4', 'pattern 5', 'pattern 6', 'pattern 7', 'pattern 8', 'pattern 9', 'pattern 10'], loc='best')\n", 349 | "plt.show()" 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "execution_count": null, 355 | "metadata": {}, 356 | "outputs": [], 357 | "source": [] 358 | } 359 | ], 360 | "metadata": { 361 | "kernelspec": { 362 | "display_name": "Python 3", 363 | "language": "python", 364 | "name": "python3" 365 | }, 366 | "language_info": { 367 | "codemirror_mode": { 368 | "name": "ipython", 369 | "version": 3 370 | }, 371 | "file_extension": ".py", 372 | "mimetype": "text/x-python", 373 | "name": "python", 374 | "nbconvert_exporter": "python", 375 | "pygments_lexer": "ipython3", 376 | "version": "3.7.0" 377 | } 378 | }, 379 | "nbformat": 4, 380 | "nbformat_minor": 2 381 | } 382 | --------------------------------------------------------------------------------