{ "cells": [ { "cell_type": "markdown", "id": "fe5d43b3", "metadata": {}, "source": [ "Title: Nearest Neighbor Classification\n", "Author: Thomas Breuel\n", "Institution: UniKL" ] }, { "cell_type": "markdown", "id": "bd1ce176", "metadata": {}, "source": [ "Nearest Neighbor Classification on MNIST Data\n", "=============================================" ] }, { "cell_type": "code", "execution_count": 2, "id": "4411e069", "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "\n", "from pylab import *\n", "from scipy.spatial import distance\n", "import tables\n", "import random as pyrandom" ] }, { "cell_type": "markdown", "id": "44e63b6d", "metadata": {}, "source": [ "We start off by loading some data. These are images of handwritten digits. This is a fairly typical pattern classification task.\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "7d7a4187", "metadata": { "collapsed": true }, "outputs": [], "source": [ "mnist = tables.openFile(\"mnist.h5\",\"r\")" ] }, { "cell_type": "markdown", "id": "f331332b", "metadata": {}, "source": [ "The data is stored in an HDF5 file, an easy way of storing and accessing array data.\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "5cff6afd", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "File(filename=mnist.h5, title='', mode='r', rootUEP='/', filters=Filters(complevel=0, shuffle=False, fletcher32=False))\n", "/ (RootGroup) ''\n", "/deskewed (EArray(60000, 28, 28), shuffle, zlib(9)) ''\n", " atom := Float32Atom(shape=(), dflt=0.0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (20, 28, 28)\n", "/images (CArray(60000, 28, 28), shuffle, zlib(9)) ''\n", " atom := Float32Atom(shape=(), dflt=0.0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (83, 28, 28)\n", "/labels (CArray(60000,), shuffle, zlib(9)) ''\n", " atom := Int32Atom(shape=(), dflt=0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (16384,)\n", "/test_deskewed (EArray(10000, 28, 28), shuffle, zlib(9)) ''\n", " atom := Float32Atom(shape=(), dflt=0.0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (20, 28, 28)\n", "/test_images (CArray(10000, 28, 28), shuffle, zlib(9)) ''\n", " atom := Float32Atom(shape=(), dflt=0.0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (41, 28, 28)\n", "/test_labels (CArray(10000,), shuffle, zlib(9)) ''\n", " atom := Int32Atom(shape=(), dflt=0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (16384,)\n" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mnist" ] }, { "cell_type": "markdown", "id": "4700d0d6", "metadata": {}, "source": [ "We can access this on-disk data like arrays in memory.\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "fe38608a", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "imshow(mnist.root.images[0],cmap=cm.gray,interpolation='nearest')" ] }, { "cell_type": "markdown", "id": "7dc01461", "metadata": {}, "source": [ "Access to on-disk data is slower, and it's easier to just copy everything into memory.\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "26760561", "metadata": { "collapsed": true }, "outputs": [], "source": [ "images = array(mnist.root.images,'f')\n", "labels = array(mnist.root.labels,'i')" ] }, { "cell_type": "markdown", "id": "15fb5abc", "metadata": {}, "source": [ "There is a separate _test set_.\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "4d87472e", "metadata": { "collapsed": true }, "outputs": [], "source": [ "test_images = array(mnist.root.test_images,'f')\n", "test_labels = array(mnist.root.test_labels,'i')" ] }, { "cell_type": "markdown", "id": "a26a218a", "metadata": {}, "source": [ "Let's look at some more samples.\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "6f6d88b5", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 0 4 1 9 2 1 3 1 4]\n" ] }, { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print labels[:10]\n", "for i in range(25):\n", " subplot(5,5,i+1)\n", " gray()\n", " imshow(images[i])" ] }, { "cell_type": "markdown", "id": "2c7d4a2f", "metadata": {}, "source": [ "Let's use the first 1000 samples as our training set.\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "c24356ce", "metadata": { "collapsed": true }, "outputs": [], "source": [ "images1k = images[:1000].reshape(1000,28*28)\n", "labels1k = labels[:1000]" ] }, { "cell_type": "markdown", "id": "56896700", "metadata": {}, "source": [ "Now we define a character recognizer by nearest neighbor classification:\n", "\n", "- compute all the distances between the unknown image and the training samples\n", "- return the class associated with the sample at the smallest distance.\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "557870dc", "metadata": { "collapsed": true }, "outputs": [], "source": [ "def ocr(image):\n", " ds = distance.cdist(array([image.ravel()]),images1k)\n", " md = argmin(ds[0])\n", " return labels1k[md]" ] }, { "cell_type": "markdown", "id": "b5187655", "metadata": {}, "source": [ "(Mathematical Formulation)\n", "\n", "If the training set is:\n", "\n", "$$ T = \\\\{(x_1,c_1) ... (x_N,c_N)\\\\} $$\n", "\n", "Mathematically, we write this as:\n", "\n", "$$ D(x) = c_{\\arg\\min_i ||x-x_i||} $$" ] }, { "cell_type": "markdown", "id": "e5df5140", "metadata": {}, "source": [ "(Norms and Distances)\n", "\n", "Note that we can formulate this in terms of a distance function:\n", "\n", "$$ d(x,y) = || x - y || $$\n", "\n", "The distance function is here defined in terms of a metric $|| \\cdot ||$.\n", "\n", "Usually, this is the Euclidean metric:\n", "\n", "$$ ||x||^2 = \\sum x_i^2 $$" ] }, { "cell_type": "markdown", "id": "791d9677", "metadata": {}, "source": [ "Let's try it out.\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "c7aad33b", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ocr(images1k[0])" ] }, { "cell_type": "markdown", "id": "583d97c3", "metadata": {}, "source": [ "Now let's compute error rates for the test set.\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "4e82a2c2", "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.172\n" ] } ], "source": [ "predictions = [ocr(test_images[i]) for i in range(1000)]\n", "print sum(array(predictions)!=array(test_labels[:1000]))/1000.0" ] }, { "cell_type": "markdown", "id": "ec2b969a", "metadata": {}, "source": [ "# Test and Training Set Size" ] }, { "cell_type": "markdown", "id": "0e6d41a9", "metadata": {}, "source": [ "Before continuing, let's put our data in a standard form.\n", "Usually, we represent data sets as a large 2D array, where the rows correspond to a sample.\n", "\n", "Since our original data is rank 3 (or maybe higher rank), we need to reshape.\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "235fdff2", "metadata": { "collapsed": true }, "outputs": [], "source": [ "def make2d(a):\n", " return a.reshape(len(a),prod(a.shape[1:]))" ] }, { "cell_type": "markdown", "id": "cd8415bd", "metadata": {}, "source": [ "This wraps up nearest neighbor evaluation; all you do is give it a training set and a test set, and it returns the resulting error rate.\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "023f295e", "metadata": { "collapsed": true }, "outputs": [], "source": [ "def nneval(training,ltraining,testing,ltesting,**kw):\n", " ds = distance.cdist(make2d(testing),make2d(training),**kw)\n", " closest = argmin(ds,axis=1)\n", " predictions = [ltraining[i] for i in closest]\n", " errors = sum(array(predictions)!=array(ltesting))\n", " return errors*1.0/len(testing)" ] }, { "cell_type": "markdown", "id": "967f6322", "metadata": {}, "source": [ "Here is the nearest neighbor experiment we just ran.\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "89b48f53", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.17199999999999999" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nneval(images[:1000],labels[:1000],test_images[:1000],test_labels[:1000])" ] }, { "cell_type": "markdown", "id": "8bc2bd7d", "metadata": {}, "source": [ "Note that it is important that we use different test and training sets, otherwise we get incorrect estimates of performance. This is particularly pronounced with nearest neighbor classifiers (why?), but also happens with other classifiers.\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "59cb82bf", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nneval(images[:1000],labels[:1000],images[:1000],labels[:1000])" ] }, { "cell_type": "markdown", "id": "acbd7ce3", "metadata": {}, "source": [ "# Margin of Error" ] }, { "cell_type": "markdown", "id": "7f50d6dc", "metadata": {}, "source": [ "Let's try different randomly chosen test sets. Note that we don't get the same error estimate every time.\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "064d5ed6", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.147\n", "0.143\n", "0.124\n", "0.154\n", "0.147\n", "0.128\n", "0.115\n", "0.135\n", "0.144\n", "0.129\n", "mean 0.1366\n", "sd 0.0117234807118\n" ] } ], "source": [ "errs = []\n", "for i in range(10):\n", " S = array(pyrandom.sample(xrange(len(test_images)),1000),'i')\n", " e = nneval(images[:1000],labels[:1000],test_images[S],test_labels[S])\n", " print e\n", " errs.append(e)\n", "print \"mean\",mean(errs)\n", "print \"sd\",var(errs)**.5" ] }, { "cell_type": "markdown", "id": "ffc91d28", "metadata": {}, "source": [ "(Binomial Distributions)\n", "\n", "Each of these estimates of the error rate is a random sample.\n", "This is similar to presidential polling.\n", "\n", "We're taking $n$ samples, and each sample is randomly true or false with the probability of error $p$.\n", "It is determined by a binomial distribution.\n", "\n", "The variance of a binomial distribution with probability $p$ and sample size $n$ is:\n", "\n", "$$ v = n p (1-p) $$\n", "\n", "We want to know the variance of the estimate of $p$, which is:\n", "\n", "$$ \\hat{p} = \\frac{k}{n} $$\n", "\n", "$$ \\sigma_{\\hat{p}} = \\sqrt{\\frac{v}{n^2}} = \\sqrt{\\frac{p(1-p)}{n}} $$" ] }, { "cell_type": "markdown", "id": "0f16807d", "metadata": {}, "source": [ "(Margin of Error)\n", "\n", "We want to have a high confidence that our estimate of the probability of error is close to the true error rate. If we want that confidence to be 95 percent, then we need to choose a margin of error of $\\pm 2\\sigma$.\n", "\n", "Note that the standard deviation we calculate from the error rate is pretty close to the one we actually observe.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 66, "id": "ebc7f8f1", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.00948683298051\n" ] } ], "source": [ "sd = ((0.1*(1-0.1))/1000.0)**.5\n", "print sd" ] }, { "cell_type": "markdown", "id": "7eba7c50", "metadata": {}, "source": [ "(Comparing Classifiers)\n", "\n", "Often we want to be able to say: \"classifer 1 is better than classifier 2 because it gets a lower error rate\".\n", "\n", "When making such comparisons, it is essential to take into account the _margin of error_.\n", "\n", "If the error rate estimates of two classifiers are within the margin of error within each other, we cannot reliably determine which classifier is \"better\".\n", "\n", "In that case, we need more training/test data." ] }, { "cell_type": "markdown", "id": "5d305b81", "metadata": {}, "source": [ "(Publications)\n", "\n", "You *must* give the margin of error for any classifier error rate estimates in your reports / publications.\n", "\n", "In simple cases, it is sufficient to give the number of samples used for evaluation.\n", "\n", "In complex cases, you may want to use other kinds of _significance tests_." ] }, { "cell_type": "markdown", "id": "4185b1be", "metadata": {}, "source": [ "# Preprocessing and Feature Extraction" ] }, { "cell_type": "markdown", "id": "d33791a6", "metadata": {}, "source": [ "Classifier performance can often be improved with preprocessing and feature extraction.\n", "This can be as simple as blurring.\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "6f2dd84d", "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "from scipy.ndimage import filters\n", "def f(x):\n", " return filters.gaussian_filter(x,1.0)" ] }, { "cell_type": "code", "execution_count": 20, "id": "100a558f", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nDRs2FG+//Xa3v7aUpqeni/fff7/fzWjqL3/5S/HXv/61uPTSS5vbfvrTnxZ79uwpiqIodu/eXTz0\n0EP9ah5s365du4q9e/f2rU2sEydOFIcOHSqKoig++uij4oILLijefvvtgTl/Vvt6df66buEPHjxI\n5513Hk1PT9Pk5CTdeuut9Pzzz3f7a0urGKAk4+bNm+nLX/5yy7YXXniB7rjjDiIiuuOOO+i5557r\nR9OICLePaDDO4erVq2njxo1E1Pp/iINy/qz2EfXm/HUd+OPHj9O6deua62vXrm0e4KCoVqvRtdde\nS5s2baLf//73/W4O1MmTJ5vP/p+amqKTJ0/2uUWL9fjjj9OGDRto586dfQ05WEePHqVDhw7RVVdd\nNZDnj9v39a9/nYh6c/66Dvwg3URj6c0336RDhw7Ryy+/TL/73e/o9ddf73eTXJV9Vn4vdPfdd9OR\nI0fo8OHDtGbNGnrggQf62p5Tp07Rtm3b6LHHHqPly5e3vDYI5+/UqVP0ve99jx577DE688wze3b+\nug782WefTceOHWuuHzt2jNauXdvtry0l/tuslStX0k033UQHDx7sc4sWa2pqimZmZojov3/1tWrV\nqj63qFWrVq1qgnTnnXf29RzOzc3Rtm3b6Pbbb6etW7cS0WCdP27fD37wg2b7enX+ug78pk2b6B//\n+AcdPXqUZmdn6U9/+hNt2bKl21+brE8++YQ++ugjIiL6+OOP6dVXX+3of+V1Slu2bKH9+/cTEdH+\n/fubF8qg6MSJE816p/9vsIyKAv8f4qCcP6t9PTt/XU8LFkXx0ksvFRdccEFx7rnnFo888kgvvjJZ\n//znP4sNGzYUGzZsKC655JKBaN+tt95arFmzppicnCzWrl1b/OEPfyjef//94lvf+lZx/vnnF9dd\nd13x4YcfDkz79u3bV9x+++3FZZddVqxfv7747ne/W8zMzPSlba+//npRq9WKDRs2FBs3biw2btxY\nvPzyywNz/lD7XnrppZ6dv649ACMrK2vwlGfaZWWNkTLwWVljpAx8VtYYKQOflTVGysBnZY2RMvBZ\nWWOk/wdNU4y7NlEHpAAAAABJRU5ErkJggg==\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gray(); imshow(f(images[0]))" ] }, { "cell_type": "markdown", "id": "95c3a193", "metadata": {}, "source": [ "Note the improved performance relative to the original classifier.\n", "\n" ] }, { "cell_type": "code", "execution_count": 21, "id": "6501ac6c", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.114" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images),test_labels)" ] }, { "cell_type": "markdown", "id": "512ed45f", "metadata": {}, "source": [ "It's useful to try different parameters for feature extractors. Note that we evaluate using the saem test set; this generally helps reduce the variance of our error estimates greatly.\n", "\n" ] }, { "cell_type": "code", "execution_count": 22, "id": "f6017c0a", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0 0.131\n", "0.5 0.1234\n", "1.0 0.114\n", "2.0 0.1506\n", "3.0 0.2256\n" ] } ], "source": [ "for sigma in [0.0,0.5,1.0,2.0,3.0]:\n", " def f(x):\n", " return filters.gaussian_filter(x,sigma)\n", " print sigma,nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images),test_labels)" ] }, { "cell_type": "markdown", "id": "f6fbbbb2", "metadata": {}, "source": [ "You can experiment with other preprocessing methods.\n", "\n" ] }, { "cell_type": "code", "execution_count": 23, "id": "9501ccb1", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrOQAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "imshow(filters.gaussian_laplace(images[0],2.0))" ] }, { "cell_type": "markdown", "id": "f76c6e25", "metadata": {}, "source": [ "Again, you need to evaluate your preprocessing.\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "id": "6994da6e", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5 0.256\n", "1.0 0.2013\n", "2.0 0.1123\n", "3.0 0.1235\n", "4.0 0.171\n" ] } ], "source": [ "for sigma in [0.5,1.0,2.0,3.0,4.0]:\n", " def f(x):\n", " return filters.gaussian_laplace(x,sigma)\n", " print sigma,nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images),test_labels)" ] }, { "cell_type": "markdown", "id": "1cda628b", "metadata": {}, "source": [ "A common feature extraction method is gradient filtering. This is motivated by biological vision systems, but also has some theoretical justifications.\n", "\n" ] }, { "cell_type": "code", "execution_count": 25, "id": "61deba1a", "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.ndimage import interpolation\n", "def gf(x,sigma=1.0,power=1,zoom=1):\n", " d0 = filters.gaussian_filter(x,sigma,order=(1,0))\n", " d1 = filters.gaussian_filter(x,sigma,order=(0,1))\n", " if power!=1:\n", " d0 = d0**power\n", " d1 = d1**power\n", " result = hstack([d0,d1])\n", " if zoom!=1:\n", " result = interpolation.zoom(result,zoom)\n", " return result" ] }, { "cell_type": "code", "execution_count": 26, "id": "92a1af95", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAADCCAYAAABt/viTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztXWusXcdZ/c59+DpVAxFSfG3Fka8FbRK3aWzVEH40ciB1\n0whiHFlqG0FS5UEREq1CkJoiEShUih1QFYXCj4oG5LaSaf9URBSiNmpsQyqwhGK1QCUq0etaluM0\nBBBO7Ps8/HC/43XWWd/M7PO495xz9ydt7cfZj9mzv1mzZn0zcxrNZrNptdVWW221Db1NrHcCaqut\nttpqK7MasGurrbbaRsRqwK6tttpqGxGrAbu22mqrbUSsBuzaaqutthGxGrBrq6222kbEprq98IUX\nXrDHHnvMVlZW7NFHH7Unnnii7fdGo9Fz4mqrrbbaNqJFva0b3fTDXllZsZtuuslefPFFu+GGG+xn\nf/Zn7dixY3bLLbdcvXGjYU8++aSZmZ04ccL27dvXZdJHz+r3HW+r33d8bRje9TOf+UwI2F1JIqdO\nnbKf+Zmfsbm5OZuenraPfOQj9jd/8zc9JbK22mqrrba0dSWJnDt3zm688cbW/vbt2+2f//mfO847\nceKEmZmdOXPG5ufnbW5urrtU1lZbbbWNqc3Pz9uZM2eKzu0KsEv1aW9abDSw3rFjx3onYU2tft/x\nto30vuvxrnNzc234ePLkyfDcrgD7hhtusLNnz7b2z549a9u3b08maCNZlfcdh+Dszp071+3Z6zEV\nTu3P1S3n54P6jlWfO+zftisNe+/evfb973/f5ufnbXFx0b7yla/YgQMH+p22sbdxAOv1tjoPh99K\nvtEgvuN6PXeQ1hXDnpqasj/7sz+zu+++21ZWVuyRRx5p6yFSW95GzVGG2RqNxrow7dryVsXP+/kd\n1+u5g7au+2Hfc889ds899/QzLbXVVltttSWsa8CurXsbZXY9qLT3ynBGiSVtFOvGV/rxHUe5fOWs\nBuw1tkE70zA4K6ehpADiNd0W2Bq0h8d68cNevuMw+P8grQbsH9uof+j1SH/pM6PzwuG3fSiwGwW4\nR91vI6v6Hcc1H9hqwLbR/9hrlf7cc6p2oUox8V7Z8kZg26PutyVW8h03Qj64bXjAHvWPnUr/Wrxb\n9AzFkHKyR79BdpxBe9T9toqlvuNGygezGrBH0pST8rFBOXK3z+YCl9sv/a222jaSbWjAHmTt3O97\n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\nHx7kI9fFfvCDHzTf/e53t/Zvuumm5quvvtpsNpvN8+fPN2+66ab1StpA7Vd+5Vea3/zmNzfE+775\n5pvNvXv3Nv/1X/91rN/37Nmzzbvuuqv5rW99q/nLv/zLzWZzvP15bm6u+frrr7cdG+b3HSjDPnfu\nnN14442t/e3bt9u5c+cG+cihsAsXLtjs7KyZmc3OztqFCxfWOUX9t/n5eXvllVfs9ttvH+v3XV1d\ntd27d9vs7GxLDhrn9/3t3/5t+5M/+ZO2uefH+X0bjYa9//3vt71799pf/MVfmNlwv+9AJ3+qB8+M\n15whbhcvXrRDhw7Zs88+a9dee23bb+P2vhMTE3b69Gn73//9X7v77rvtpZdeavt9nN73b//2b23L\nli22Z88eO378uDxnnN7X7Mr/1m7bts1+9KMf2f79++3mm29u+33Y3negDPuGG26ws2fPtvbPnj1r\n27dvH+Qjh8JmZ2ft1VdfNbMr/zC/ZcuWdU5R/2xpackOHTpkDzzwgB08eNDMxvt93X7yJ3/SfumX\nfsn+5V/+ZWzf99vf/rY9//zztnPnTrv//vvtW9/6lj3wwANj+75mZtu2bTMzs+uvv97uu+8+O3Xq\n1FC/70ABe+/evfb973/f5ufnbXFx0b7yla/YgQMHBvnIobADBw7Y0aNHzczs6NGjLWAbdWs2m/bI\nI4/Yrl277LHHHmsdH9f3ff3111s9BC5dumTf/OY3bc+ePWP7vk899ZSdPXvWfvCDH9hf//Vf2y/+\n4i/al770pbF937feesv+7//+z8zM3nzzTfvGN75ht95663C/76BF8r/7u79rvvOd72z+9E//dPOp\np54a9OPW3D7ykY80t23b1pyenm5u3769+Zd/+ZfN//qv/2reddddzXe84x3N/fv3N//7v/97vZPZ\nF/uHf/iHZqPRaN52223N3bt3N3fv3t38+7//+7F93+985zvNPXv2NG+77bbmrbfe2vzjP/7jZrPZ\nHNv3RTt+/Hjz3nvvbTab4/u+//mf/9m87bbbmrfddlvzXe96Vwufhvl9Bzb5U2211VZbbf21eqRj\nbbXVVtuIWA3YtdVWW20jYjVg11ZbbbWNiNWAXVtttdU2IlYDdm211VbbiNj/A56/Nw6CDfCUAAAA\nAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "imshow(gf(images[0]))" ] }, { "cell_type": "markdown", "id": "05abd1b6", "metadata": {}, "source": [ "Note that we are getting slightly better performance than with blurring.\n", "\n" ] }, { "cell_type": "code", "execution_count": 27, "id": "08d186a6", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5 0.1817\n", "1.0 0.1349\n", "1.5 0.1078\n", "2.0 0.1088\n", "2.5 0.1241\n", "3.0 0.1496\n", "4.0 0.216\n" ] } ], "source": [ "for sigma in [0.5,1.0,1.5,2.0,2.5,3.0,4.0]:\n", " def f(x):\n", " return gf(x,sigma=sigma)\n", " print sigma,nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images),test_labels)" ] }, { "cell_type": "markdown", "id": "8143aa26", "metadata": {}, "source": [ "Normalization and Metrics\n", "==========================" ] }, { "cell_type": "markdown", "id": "e67803db", "metadata": {}, "source": [ "(Nearest Neighbor Classification)\n", "\n", "If the training set is:\n", "\n", "$$ T = \\\\{(x_1,c_1) ... (x_N,c_N)\\\\} $$\n", "\n", "Mathematically, we write this as:\n", "\n", "$$ D(x) = c_\\{\\arg\\min_i ||x-x_i||\\} $$\n", "\n", "Here, we used a _norm_, written as the function $||\\cdot ||$." ] }, { "cell_type": "markdown", "id": "67be8da9", "metadata": {}, "source": [ "(Norms)\n", "\n", "There are many different kinds of norms:\n", "\n", "$$ || x ||_2 = \\left( \\sum x_i^2 \\right) ^ {1/2} $$\n", "\n", "$$ || x ||_1 = \\left( \\sum |x_i| \\right) $$\n", "\n", "$$ || x ||_d = \\left( \\sum |x_i|^d \\right)^ {1/d} $$\n", "\n", "$$ || x ||_\\infty = \\max |x_i| = \\lim_{d\\rightarrow\\infty} ||x||_d $$" ] }, { "cell_type": "markdown", "id": "fbc2a115", "metadata": {}, "source": [ "(Norm Axioms)\n", "\n", "A norm captures the idea of a _length_ of a vector. It must satisfy:\n", "\n", "$$ ||\\cdot|| : {\\mathbb R}^n \\rightarrow {\\mathbb R} $$\n", "$$ ||x||>0 \\hbox{ if } x\\neq 0 $$\n", "$$ ||\\alpha x|| = |\\alpha|\\,||x|| $$\n", "\n", "Triangle inequality:\n", "$$ ||x + y|| \\leq ||x|| + ||y|| $$" ] }, { "cell_type": "markdown", "id": "4bcd59b8", "metadata": {}, "source": [ "(Metrics)\n", "\n", "A _metric_ is a way of measuring _distance_ in a space. In vector spaces, it is closely related to norms.\n", "\n", "$$ d(x,y) = ||x - y|| $$\n", "\n", "Abstractly, norms are required to have the following properties:\n", "\n", "$$d(x,y)\\geq 0$$\n", "$$d(x,y)=0 \\hbox{ iff } x=y$$\n", "$$d(x,y) = d(y,x) \\hbox{ (symmetry)}$$\n", "$$d(x,z) \\leq d(x,y) + d(y,z) \\hbox{ (triangle inequality)}$$" ] }, { "cell_type": "markdown", "id": "92bb8486", "metadata": {}, "source": [ "(Similarity / Dissimilarity Functions)\n", "\n", "There is no strict requirement that we use norms or metrics for \"nearest neighbor\" classification.\n", "\n", "Often, we can use dissimilarity functions. Generally, we prefer dissimilarity functions that satisfy:\n", "\n", "$$d(x,y)\\geq 0$$\n", "$$d(x,y)=0 \\hbox{ iff } x=y$$\n", "$$d(x,y) = d(y,x) \\hbox{ (symmetry)}$$\n", "\n", "However, none of those are necessary for good performance of a nearest neighbor classifier.\n", "\n", "For a _dissimilarity function_, generally, the value of the function should increase with increasing dissimilarity." ] }, { "cell_type": "code", "execution_count": 18, "id": "dbe2c45f", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1 0.159\n", "2 0.147\n", "3 0.143\n", "4 0.152\n" ] } ], "source": [ "for p in [1,2,3,4]:\n", " def f(x):\n", " v = filters.gaussian_filter(x,sigma=1.5)\n", " return v\n", " print p,nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images[:1000]),test_labels[:1000],metric='minkowski',p=p)" ] }, { "cell_type": "markdown", "id": "8b2f555c", "metadata": {}, "source": [ "(Normalization)\n", "\n", "A second important concept is that of _normalization_.\n", "Often, an input vector is known only up to a scale factor.\n", "\n", "That is, $x$ and $\\alpha x$ really represent the same sample.\n", "\n", "We can remove this influence by transforming the data as in\n", "\n", "$$ x \\rightarrow \\frac{x}{||x||} $$\n", "\n", "Note that any norm will do, but they will yield different results for classification." ] }, { "cell_type": "code", "execution_count": 29, "id": "31327694", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5 0.1517\n", "1.0 0.1187\n", "2.0 0.0921\n", "3.0 0.1276\n", "4.0 0.1734\n" ] } ], "source": [ "for sigma in [0.5,1.0,2.0,3.0,4.0]:\n", " def f(x):\n", " v = gf(x,sigma=sigma)\n", " v = v*1.0/norm(v.ravel())\n", " return v\n", " print sigma,nneval(amap(f,images[:1000]),labels[:1000],amap(f,test_images),test_labels)" ] }, { "cell_type": "markdown", "id": "c2055097", "metadata": {}, "source": [ "An analogous way of computing this is to use the _consine dissimilarity_:\n", "\n", "$$ d(x,y) = 1 - \\frac{x \\cdot y}{||x|| ~ ||y||} $$" ] }, { "cell_type": "code", "execution_count": 47, "id": "b73cd987", "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5 0.1517\n", "1.0 0.1187\n", "2.0 0.0921\n", "3.0 0.1276\n", "4.0 0.1734\n" ] } ], "source": [ "# cosine dissimilarity\n", "for sigma in [0.5,1.0,2.0,3.0,4.0]:\n", " def f(x):\n", " v = gf(x,sigma=sigma)\n", " v = v*1.0/norm(v.ravel())\n", " return v\n", " print sigma,nneval(amap(f,images[:1000]),labels[:1000],\n", " amap(f,test_images),test_labels,\n", " metric='cosine')" ] }, { "cell_type": "markdown", "id": "9bae7894", "metadata": {}, "source": [ "(Note)\n", "\n", "Note that a combination of normalization and feature extraction gives us the best recognition performance so far.\n", "\n", "You need to experiment to find good combinations.\n", "\n", "The best preprocessing for one classifier isn't necessarily the best preprocessing for another classifier." ] }, { "cell_type": "markdown", "id": "02e03dee", "metadata": {}, "source": [ "Deskewing and Canonicalization\n", "==============================" ] }, { "cell_type": "markdown", "id": "832e92c8", "metadata": {}, "source": [ "There are other kinds of preprocessing that we can perform that greatly improve recognition.\n", "\n", "Generally, these are aimed at making recognition _invariant_ under transformation.\n", "\n", "We've already seen a couple of examples of this:\n", "\n", "$$ x\\rightarrow \\alpha x ~~\\hbox{ canonicalize by }~~ x \\rightarrow \\frac{x}{|| x ||} $$\n", "\n", "$$ x\\rightarrow x + c ~~\\hbox{ canonicalize by }~~ x \\rightarrow x - \\bar{x} $$" ] }, { "cell_type": "markdown", "id": "6ff3d0ab", "metadata": {}, "source": [ "(Canonical Elements)\n", "\n", "Formally, we say that the set of all feature vectors is divided into subsets, where each subset contains vectors that are equivalent from the point of view of recognition.\n", "\n", "For each subset, we pick a _canonical element_ via a canonicalization function.\n", "\n", "So, assume that some $x_r$ has class $c_r$.\n", "\n", "Then $S_r = \\\\{x | x = x_r + \\alpha \\\\}$ all is in the same class as $c_r$.\n", "\n", "The canonical element is found by the function:\n", "\n", "$$ f(x) = x - \\bar{x} $$\n", "\n", "$$ S_r = \\\\{ x | f(x) = f(x_r) \\\\} $$\n", "\n", "Note that this does not work perfectly in the presence of errors." ] }, { "cell_type": "markdown", "id": "db66972f", "metadata": {}, "source": [ "(Invariants)\n", "\n", "Classification is about decision functions $D(x)$\n", "\n", "A decision function is _invariant_ under a transformation $f$ if $D(f(x)) = D(x)$ for all $x$.\n", "\n", "A decision function is _invariant_ under a group transformation $G$ if $D(g(x)) = D(x)$ for all $x$ and for all $g\\in G$.\n", "\n", "The set of $ \\\\{ g\\cdot x | g \\in G \\\\} $ is often a set of equivalent samples and we can pick a canonical element by computing an appropriate transformation $g(x)$ and then using $g(x)\\cdot x$ as a canonical element." ] }, { "cell_type": "markdown", "id": "2a6e3146", "metadata": {}, "source": [ "(Translations)\n", "\n", "Assume that classes are invariant under _shifts_ or _translations_ of the input image.\n", "\n", "We can use the _centroid_ as a canonicalizer.\n", "\n", "This is like considering the input image as a point cloud and computing the \"average point\"." ] }, { "cell_type": "code", "execution_count": 20, "id": "f8226562", "metadata": { "collapsed": true }, "outputs": [], "source": [ "def centroid(image):\n", " c0,c1 = mgrid[:image.shape[0],:image.shape[1]]\n", " xm = sum(c0*image)/sum(image)\n", " ym = sum(c1*image)/sum(image)\n", " return xm,ym" ] }, { "cell_type": "code", "execution_count": 23, "id": "c0250f94", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\niBgIggBAxEAQhCVEDARBACBiIAjCEiIGgiAAEDEQBGEJEQNBEACIGAiCsERRYpBKpbB9+3YMDAxg\ny5Yt+OUvfwkAmJqaws6dO3Httdfi9ttvx8zMTFVvdjmU1XtOrn9FX7+ef/blUJQYNDU14b333sPZ\ns2fx8ccf47333sOHH36IoaEh7Ny5E//85z9x6623YmhoqNr3WzIr/QeR66/c9ev5Z18ORS8Tmpub\nAQDpdBrZbBZtbW04efIk9u3bBwDYt28fXnvttercpSAIVadoMcjlchgYGEB3dze+973v4brrrsP4\n+Lhup9bd3Y3x8fGq3aggCFWm1M6uMzMzavv27eqvf/2ram1tdXytra0t7/VYBZ1sZcio11EKXpRI\nS0sLfvCDH+Dvf/87uru7MTY2hp6eHoyOjqKrqyvv9VLYRBCuDIpaJkxMTOhIwfz8PN59911s3boV\nu3btwrFjxwAAx44dw+7du6t3p4IgVJWiyp598skn2LdvH3K5HHK5HPbs2YNHH30UU1NTuOeee/DF\nF19g48aNOH78OFpbW2tx34IgVJpSfQbL4cknn1RXXXWVGhgYUAMDA+qtt96q+jXfeust9a1vfUtd\nc801amhoqOrXM/mP//gP1dfXpwYGBtS3v/3tql/vgQceUF1dXer666/Xn5ucnFS33Xab+uY3v6l2\n7typpqena3r9Wv7dv/jiCzU4OKi2bNmirrvuOvX8888rpWr3O3C7fq1+B/Pz8+qmm25S/f39avPm\nzerxxx9XSpX289dEDI4cOaKee+65WlxKKaVUJpNRV199tTp37pxKp9Oqv79fffrppzW7vlJKbdy4\nUU1OTtbseu+//776xz/+4ZiMjz76qHr22WeVUkoNDQ2pw4cP1/T6tfy7j46OqjNnziillIrFYura\na69Vn376ac1+B27Xr+XvIJFIKKWUWlxcVNu3b1cffPBBST9/zdKRVQ0diadPn8Y111yDjRs3wufz\n4b777sPrr79es+sTtfyZd+zYgba2NsfnapkHYrs+ULvfQU9PDwYGBgAA4XAYmzdvxoULF2r2O3C7\nPlC730G5uUA1E4OjR4+iv78fBw4cqHra8oULF7Bhwwb98fr16/UfplZ4PB7cdttt2LZtG/74xz/W\n9NrEasgDqeXfnRgZGcGZM2ewffv2Ffkd0PVvvvlmALX7HZSbC1QxMdi5cyf6+vryxsmTJ/Hzn/8c\n586dw9mzZ9Hb24tf/OIXlbqsFY/HU9X3L4aPPvoIZ86cwVtvvYU//OEP+OCDD1b0fjweT81/L7X+\nuwNAPB7H3Xffjeeffx6RSMTxtVr8DuLxOH70ox/h+eefRzgcrunvoKGhAWfPnsWXX36J999/H++9\n957j65f7+UvOM3Dj3XffLep1Dz74IO68885KXdbKVVddhfPnz+uPz58/j/Xr11f1mia9vb0AgM7O\nTtx11104ffo0duzYUdN7KCYPpJrw69Xi7764uIi7774be/bs0WHuWv4O6Po/+clP9PVr/TsASs8F\nImqyTBgdHdXnJ06cQF9fX1Wvt23bNnz22WcYGRlBOp3Gq6++il27dlX1mpxkMolYLAYASCQSeOed\nd6r+M9tY6TyQWv7dlVI4cOAAtmzZgoMHD+rP1+p34Hb9Wv0OKpILVGUHp1JKqT179qi+vj51ww03\nqB/+8IdqbGys6td888031bXXXquuvvpq9fTTT1f9epx//etfqr+/X/X396vrrruuJte/7777VG9v\nr/L5fGr9+vXqT3/6k5qcnFS33nprTUKL5vVfeumlmv7dP/jgA+XxeFR/f78jjFer34Ht+m+++WbN\nfgcff/yx2rp1q+rv71d9fX3qt7/9rVJKlfTzV73XoiAIVwZS6UgQBAAiBoIgLCFiIAgCABEDQRCW\nEDEQBAGAiIEgCEv8P8bum2x+0ia/AAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y,x = centroid(images[0])\n", "imshow(images[0])\n", "plot([y],[x],'r+')" ] }, { "cell_type": "markdown", "id": "64145521", "metadata": {}, "source": [ "The MNIST data has already been normalized so that the centroid is approximately at the center of the image (but it can't hurt to check).\n", "\n" ] }, { "cell_type": "code", "execution_count": 25, "id": "e643281e", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(14.035783690482875, 13.645193370657632)\n", "(13.553301030232202, 14.097568454157251)\n", "(14.103585733921463, 13.543178344551675)\n", "(14.487537587239133, 13.993461209772029)\n", "(14.079522362948207, 13.71181319082735)\n", "(14.074792275054866, 14.018848223932769)\n", "(13.908193650058521, 14.408703656101897)\n", "(13.945435392218119, 14.323666012968628)\n", "(14.336858182082644, 14.11541252284602)\n", "(13.822177247288515, 14.459001526253239)\n" ] } ], "source": [ "for i in range(10):\n", " print centroid(images[i])" ] }, { "cell_type": "markdown", "id": "67951e8f", "metadata": {}, "source": [ "The MNIST data hasn't been _skew corrected_. That is, characters may be slanted and/or rotated.\n", "\n", "To find this, we compute the major and minor axes of the covariance matrix (the second moments).\n", "\n" ] }, { "cell_type": "code", "execution_count": 26, "id": "de1e7daf", "metadata": { "collapsed": true }, "outputs": [], "source": [ "def moments(image):\n", " c0,c1 = mgrid[:image.shape[0],:image.shape[1]]\n", " m0 = sum(c0*image)/sum(image)\n", " m1 = sum(c1*image)/sum(image)\n", " m00 = sum((c0-m0)**2*image)/sum(image)\n", " m11 = sum((c1-m1)**2*image)/sum(image)\n", " m01 = sum((c0-m0)*(c1-m1)*image)/sum(image)\n", " return array([m0,m1]),array([[m00,m01],[m01,m11]])" ] }, { "cell_type": "code", "execution_count": 27, "id": "5d6054dd", "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 14.03578369 13.64519337]\n" ] } ], "source": [ "c,v = moments(images[0])\n", "print c" ] }, { "cell_type": "code", "execution_count": 29, "id": "0153eac0", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 45.88981162 12.77832657]\n", "[[ 0.9490232 0.31520622]\n", " [-0.31520622 0.9490232 ]]\n" ] } ], "source": [ "l,evs = eig(v)\n", "print l\n", "print evs" ] }, { "cell_type": "code", "execution_count": 33, "id": "7ebbee31", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y,x = c\n", "((e00,e01),(e10,e11)) = evs\n", "imshow(images[0])\n", "plot([y,y+10*e10],[x,x+10*e11],'r')" ] }, { "cell_type": "markdown", "id": "7c9c1f27", "metadata": {}, "source": [ "Now we want to rotate or deskew the character. For rotation, we make this vector vertical.\n", "\n" ] }, { "cell_type": "code", "execution_count": 35, "id": "3754be1b", "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "from scipy.ndimage import interpolation" ] }, { "cell_type": "code", "execution_count": 36, "id": "1c12271a", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAC0CAYAAACwhRZPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztfW2MY+V59uWvGY+/7flcdldZSkB8ZL+aVciPkFI1G5Ai\nNiAioGpgVaCpkNoIgQLJjyS0P9jdSqiitD9QodGiSij8gazUgBIkQoBKRUpYNRL9EbUsWZad2Zmx\nx98e2+Pz/uC9nr3P48cez+x4xsd+LunR8cx4fI5n7nP5fu6P6/Y5juPAwsLCwmLg4d/pC7CwsLCw\n6A2WsC0sLCw8AkvYFhYWFh6BJWwLCwsLj8AStoWFhYVHYAnbwsLCwiOwhG1hoeGNN97A9ddfj2uv\nvRanTp3a6cuxsFDYNGFbo7YYRqytreFv/uZv8MYbb+DDDz/Eyy+/jP/5n//Z6cuysPgMzibQbDad\na665xvnoo4+cer3uHDx40Pnwww9dzwFgl119X1uN//zP/3Ruu+029fWJEyecEydOWNu2a1tXJwSx\nCbz//vv4/Oc/j3379gEA7rvvPvzsZz/DDTfcsJmXs7AYGFy4cAF79+5VX+/Zswf/9V//1fa86elp\nlMtlRKPRLb8GL72ul67VK6+7uLjY8WebComYjPrChQubeSkLi4GCz+fr6XnlchmNRgPlchn1er3P\nV2UxzKjX6yiXy2p1w6Y87F6N2sLCa9i9ezfOnz+vvj5//jz27NnT9rxoNNo3b81itDA2NoaxsTH1\ndaVS6fjcTXnYvRq1hYXXcOTIEfz+97/HuXPnUK/X8dOf/hTHjh0zPjcUCvXlGrz0ul66Vi++ro5N\nEfZGjNrCwksIBoP453/+Z9x222248cYbce+993bMzUivaCvhpdf10rV68XV1+P5/1nvDeP311/Ho\no49ibW0NDz30EH7wgx+4X9iGTSy2AZs03yuCz+fD9PT0tp/XYjSwuLjY0a43TdjrwRK2xXbAErbF\nsKEbYdtORwsLCwuPwBK2hYWFhUdgCdvCwsLCI9hUHbaFhYXFdqBj8m1Ec2SWsC0sLAYO6yWT+fNR\nI24bErGwsBgomMjacZyO3x8lWMK2sLCw8AhsSMTCwmKgYApzdPreqHnYlrAtLCwGFpKou8WrR4W4\nLWFbWFgMJHw+nyLpXsjacRwjwQ8TmVvCtrCwGChIkjY9lmi1WuoxE5P684YpdGIJ28LCYqAgybXX\nypBRKfOzhG1hoWHfvn1IJBIIBAIIhUJ4//33d/qShgY6oXbzfFutlvKaZdhD/q7f71fedyeyNn0A\neJXYLWFbWGjw+Xz41a9+hUwms9OX4jl0I8ReKz34davVUqRtIm8A8Pv9CAQC6tjtXKYPB6/FuS1h\nW1gY4JUbeJCge7KdvNhuMWXpSZOo19bWsLa2puLVkrSDwaB6zV6ujddlSlB64X9uCdvCQoPP58PX\nvvY1BAIB/PVf/zX+6q/+aqcvyRNYj/Q6edKdvvb5fPD7/eoxj1x+vx/BYBChUAjBYBDBYFCRPIle\neuaS8G1IxGJd6CVKGzUan8+HQCCgVjAYRCAQML6eNGy51tbW0Gw20Wg00Gw20Ww2sba25jJ6Lnku\nufUE2m8uvi6P+mP59aB7Mu+99x527dqFxcVFHD16FNdffz1uueUW13PkdOtQKLRtI6IGHevFkeX/\n3nQ/yJCK3+9HKBSC3+93kTOH1tJmpZ02Gg1Uq1XUajXUajXU63XloZO0B42s6/U6Go1GT8+1hN1n\nrEeiG4Hf78f4+LhaY2NjGB8fdyVe5Hn0+J7f70e9XkelUkG1WlXHRqOBiYmJtiVvDD6mFwO4t6b1\neh2rq6vqRpGP5eKNM8jYtWsXAGB6ehp33XUX3n///TbCttPSP0Mvtc8y9ixL70x11pK0g8Ggy/7C\n4TAikQii0SgikQgmJiZctu33+1Eul1EoFNQCoMiQ3rY83yBgI1PTr4iwbTa9OzqRdS+ZbRMCgYAy\nWmm49LL1c9ALlx5zpVJRxkzy9fl8iEajiMfjSCQSiMfjiMfj6qYIh8PqSMPSb8BqtYpyuYxSqdR2\nLJVKyrtfXV3d8r/zVqJSqWBtbQ3xeBzlchm/+MUv8OMf/3inL2sgYQphyMemkAfDFbRR3gum1wkG\ngxgfH1cOBO0zlUohmUwiHo+32f3KygrC4TD8fr/a2QFo86wHkbh7wRURts2m9wbpPUgj5eNeEQgE\nMD4+jmg0ikQioVYoFGoja24n9VUsFrG0tKTIul6vw3EcRCIRJJNJTE5OIpPJIJPJIB6PIxqNIhaL\nqWM4HDZ6TKVSCSsrK8jn864jr41kPeg3yMLCAu666y4AQLPZxF/8xV/g61//+g5flbfQiaxNXnY3\n4gyFQgiHw4jFYojH40in05icnFQrlUq5Xh8AIpEIfD4fGo0GyuUyarUaWq0Wms3muufzAq44JDLo\n29udgmmrJ5fcxvUKacDJZFIRK+N80nsnuXO7xce5XM5F1uVyGc1mE9FoFKlUClNTU5idncXMzAzS\n6TQSiQSSyaQ6RiKRthKrVquFfD6P5eVlLC0tqePY2Bh8Ph9arRZWV1eVpz3IuPrqq3H27NmdvgxP\noFNNtanumTFm/p60VenEyJVOp5HJZFxORDKZRCqVQiqVQiwWU/FfLunF64lHeW55fV6pEAG2wMP2\nejbdFH/r9rUpVtzt+/JrmShkmGKjhE3DlYYsEzMyHEKylisYDKLZbKqYc7VaRSAQUDfH1NQUZmZm\nMDc3h3Q6jWQyaSRsfYVCIbRaLTQaDayurqJSqSAcDmN8fFwlhzbyXi0GG72QtXwubVImseU9Ytp5\nptNpzM7OYm5uDnNzc8hkMojFYmpNTEygUqmgUqmgXC4rwjaVA+qELc/tFbIGrpCwe8mmDzpMn/by\nZ/KxXjGhL/l9E5nL5J1M6PWKQCDgIk8eSYZ6SET/cAgGg6jX60gkEqjVasrAy+Wy8qqnpqaQyWSQ\nSqWQSCQQiUQU0QNQ20veDHwsbxy5qtUqVldX0Wg0XLoPFoOFbqTVyZHRPVVTUpGgA8F7QP/wlrtO\n3kPpdBozMzPYu3cv9u7di8nJSZVPmZiYQDAYRD6fBwBVHdKprI/wutNwRYTdSzZ9kNGpmqJTOINx\nYJYXdftaD1GwwiMcDqvFSoxe4ff7EY1G21anpKMpZt5oNJBMJlV5nd/vR7VaxfT0tFqZTAbpdBrR\naFR5ydzOylI9lgY2Gg1F2DppS8L2QoWIRTs6CSp1qwiRzwOgChNo+36/v62ZRXcu6GHv2bMHf/RH\nf4TJyUnXfcbXbjabqFQqrusxkfZGk/yDiE0T9rBk06XnLOua9ZAGCZfxYP2x/JoehL7C4bCq7OAx\nHA73fK2yrI9ESuPXP1yA9m2q4ziKcJk1DwaDWF1dVYkchltSqRTC4bC6OXTCbjQaqNfrarFMkKtU\nKqmywXq9rs5pMZhgHLcXQusW/qAtSuINhUKYmJhQVUcTExPKnuRr6CWorAThfcLdqKzrLxaLyOfz\nKBQKWFlZQaFQUMlGWYOte9pexaYJe1iy6SRTPa6sk3YgEHCVuHV7TI9UrxFlpQXL5uLxOCYmJnq+\nVt4Iuidi2qICcBmrbB7gjTk2NoaJiQnU63Wk02nXSqVSbclM4HJIhDFwLpN3XSqVVE229bAHHyYv\n2vT/0jU99F1dMBhsKwelg8LVraWc30smk4rc19bWUK1WXTu71dVVLC8vu1Y2m1WkLR2FkSfsYcmm\n09CkN2AKMZCwpXfMkIR8HI1GXQX9crG6Q67NNGD06gXJ7DkX3y+9nmg0irW1NVdMnMvv97clF6WH\nzeYYetd6/NoUErEYTHSyKT1OzaNM7ukhxbGxMUQiEZdjwtJQLhnS4FG3NUnYzWYT1WrV1fBVLpeR\nzWaRy+XUMZfLIZ/Po1wuY3V1VYX+Rp6wvQY9rktPwES+9Fr1MjnZBSg9an2x+1D3siORiMpuM5HX\nryQIKzakgXOx65CPScIkYHaL+Xw+5aFLsubzZDdjNptVJX25XE55OXrScRhummFDt0opQv+/SWIF\nLocz2OzCMlHu2LizZIWHvntzHKctN8IdKD3sZrOJQqGgQiCs9ZerUCigWCyiUqkoD9t0/V7FSBG2\n7vGOjY256jq5dGMi6Zri1vweuwA7xbB9Pp/qUmQ8rl9kTe+HbejsbCwWi4pA5Wq1WqjVaqhUKigW\niyrWCFwOq8iqEIZDZFgkn8+7PB0SNn/OmKPFYGM9lT0epShTKBRy3Q+xWAypVEqVnk5NTSnCZket\nHsprtVptdsV+AdbwN5vNNm9atqHT5iqViqqCWltb6xgy9CJGhrB1ARmGBFKplKqOmJmZwfT0tJFw\nmeXuVBmi/0x65zIMQaPuB2FLL4I3QLlcRj6fV0bOJCCThjRqU/JUJinlkYlG+RpM/tD74c0jn2M9\n7MHEeslgvfpIr4IaHx9XH/IMhcgk9uTkpOvn7EaUwmCNRqNt51epVFz3VaPRUDYmE4xSCoFEzVDI\nMJC0xMgQNj1sWQsdiUQUYe/evRu7d+/GVVddpSov9KShqfa6Uz22qdKE599M08xGoXvYy8vLuHTp\nEmq1WptaX6vValPqCwaDKsGoK+/Jcj4+ZmWI1BBhkkh66Bbbg41UfJjEvAhTiajutDDUx5VMJlUj\nFktE9cqmtbU1FY6jbIGsNKpWq+r8XKurqygWi2oxqS1JXjohpvJCr2PkCJsKYAxPJJNJTE1NYdeu\nXfjc5z6Hz33ucypupsegTc0wnZY8r3ysx9G3CnotLGPYJOxsNotLly6hWq22VY9IMR7pSZmkWE1y\nqYxr86ZhrJw6JTLpYz3s/kOvb17vufqSr2FyOnj/cFGUiYlrhhZZbZROp9t2oaurq4q0pf3wg5+S\nCfLDnl43vWrGqek4mMr4hoWoiZEhbKC9LVVWS8RiMSQSCdUwYvKa+4VONw1/1u09dMriMyRSrVZR\nLBaRy+WwtLSEarXalo3vRKJra2tGstZLBfk8GX/ciMavxdbBJLrUC2nLBKK0w0AgoF5DVoGwwkh6\n1HKx0ojKerrzEwgElBgYPWwmvEulEorFokpsc0lnQMr1dupqHEbnYKQIW1Y6yC293NrLrbvMYPcL\nuu6BrMrgzyWJ64LtrGfVPSN62LwJSNqyfXe9cic92ahfn3ws/4Y2Vr1zkE1TvXiXUoCMna9ykZxl\nDFqvrKKzI+V5+XPmg/QEPuCuZCqVSq7Kj3w+78qV0IMmefP7pt3bMNveyBC2JEbZqSeJRnqQzFxv\nxz9fXpNOeroxMgYvNRnY4KB3NNbrdVeZ3srKivKwO3n0EjoxS4KWXpksyfJKV9mDDz6I//iP/8DM\nzAx+97vfAQCy2SzuvfdefPzxx9i3bx9eeeUVl4Snl9BrKEAnU5lMDwaDiEQiLilf6st0WqbhFzyP\nXADabLRYLGJlZQXZbBbZbLZtN8cKJd4nshGMGHS7u1KMHGHzn6971jph07PuN/nwHDRGehGS+KTH\nHQ6H1fflFlMnYN3DLhQKLg+7F49E98RNsqrysd5ROcj4y7/8S/zt3/4tHnjgAfW9kydP4ujRo3ji\niSdw6tQpnDx5EidPntzBq9wa6FIFErLLlwMyZIJQVnxMTk4inU67yDkSiajKIjoRJi0dXof8Hgmb\nTTB0Kti1yJ2u3DXq9ykx6Pa2VRg5wpZ1md1CIjTk7TAEkiu9DSZi9PCD9PrZ+DM2Nmb0mPmhpHsv\nHD/Uq1fSLSGlVxd4Kbl4yy234Ny5c67vnTlzBm+//TYA4Pjx47j11ls9Sdjd6qj1hCS9ahKu9JbZ\n/DI3N6dkTmdmZtoaxUjQuves30/Sk+dz9JAIPezFxcW2EA3g3vXJxGi39z1MGBnCBi6HCvhYD4nI\nx6ySIGn3QkCbMRhek54p55ZPeq3yhmOJoNwN6ITNDwA2xEjCtmjHwsICZmdnAQCzs7NYWFjo+NxB\nHsLbyVZNJXrs2uWSceloNKokTqenpzE1NYXJyUmj+JiEnoOh7crQnbxG/kzXU9eb3fj7JqfAy2Rt\nh/AaID1AGkiz2UStVkOpVFJVFLFYDJVKxSWFykYXPTTQarXaGmoY++t0DfrvsxmACRcuErYkbZ/P\nZ5RXpf6JXPRa2NnIFl2L3qBX4OgY5CG8JsLm+5F19mNjY4qcuXR9HE42SiQSLm8auLwz1InYVL8v\nvWE+n1VaUmqYTWd8LVN1lv5/8TJZA9s4hNdrkAYFQAnK0PtcWlpCOBxGuVw2ThA3VUywAYeLW0wT\n9GoQ1pYWCgXXaK3l5eW2mlJJ2PoQXtkWz9VoNJTEKTUVBj1MsdOYnZ3F/Pw85ubmcPHiRczMzOz0\nJW0I6+UkZB01h9vqYmSxWMxlW7ICZGJiQjkHcrcKwOWEmOyc59cJWw7apcolvW2+l252O0rhEGCE\nCNsUY2WMlwNkw+EwAoEAyuVyW/nS2NiYUf2OzTckVN4Mna5BrwipVCpqHuL8/LxaHB6qN7foJVaS\nvOX1Oo7j0g7xQiJwp3Hs2DGcPn0aTz75JE6fPo0777xzpy9pw+hG2vSwSZC65sfk5GSbDKqs/KCH\nTXKUu0VTJZH8mueXpbLSw6bTwdenvcuk/3oaJ6OAkSFs4DJp8xOeHjZDIvSMK5WKa6tYq9UwPj7e\nJnhUr9cRj8dVHHlsbAyxWKzr+WWCkbE6Sdjnz5/HJ5980tbgwg8E3fMPh8Oq3EpKpPr9/jYP2+Iy\n/vzP/xxvv/02lpaWsHfvXvz93/89vv/97+Oee+7Biy++qMr6vAbatt4g5vP5FFFLXfZ0Oo2pqSml\np0N5YKk8yYQkw30mb1qvtNKbs+ig0PGRI+pI3HqDWi+e9ahhZAhbJ2sAKoZdLBYVWTcaDZTLZcTj\ncdVRtbq6ivHxcVXBIbUL0um0IutIJNKVGKWHLQmbWh8k7I8++sjYkQigLUkUDoeRSqWU0A4rTMbG\nxlwxbOthu/Hyyy8bv//mm29u85VcGaT3aWp6kQqS3H3REYnH40rrg0fmbPh7kkh1kuS5dRlfXa+m\n0Wio+m4e5Vg5hiWr1aqKifN+lCP7eilFHXaMDGET8h8t60C5FeP36EWzFZaELdtiJTlSmyQej7vE\no+TSa6PL5XKbni+TjpVKxeXFcIvIDw89Xq17OWNjY2r6Bm+EUTXyYYX+/5T11MFgUCUR5VFf3JVx\nkaCZmNQFzUzXQCeHifNSqdQm4asnxaVnvra25iJ6ACrJLxvDOr3vUcLIEbYOWf7G2JrUxqDYzNjY\nWJuuwerqKgC0DdaVlSNyO0nNBGncFPw3xZtNLbey8YeGLCVd+X5CoRCWlpawsrKixiWNsqEPM0w1\n1WNjYyrkQQGmRCLRRth6m7lJ5ExqustzclGtMZ/PY3FxUXXUSq9bFxfTJ6QzPEnCphZ2J70c+XiU\nwiPrEvYwt/DKemVJ1jJcwRBEKBRyDZ2VtZOMDZKwg8GgekzPOBgMugibZL20tKSE2Blvll2OOsmy\nZEomfmQjAr33YDCovHV6PJawhw/yfyoJe2JiAolEApOTk0rrPZVKucIh0WjUVVPNZLkehtM7FXUw\nvLGysoLFxUUsLS25ZHZLpVLbNfMaufx+v4uwQ6GQK+FowyGfYV3CHuYWXnoHNEK92UTG8gKBgCsm\nxyMA17BREnYsFlNkze0dCZveCDu66GHrhM1rlAZKD5uPmeCRNeW8Xno3fF2+psXwgV4rCZtjuhKJ\nBDKZDKanp5FKpVzVRXREWFutN6LweybPWpbs0aalFogug6pfqxyAwd0tcy4M33UrTxxV0l6XsIe5\nhReACj/Q8PSJ5NKg9Tpskr1O2GwXp2cdDodd3jtDIvSwOT2jUqm4QiKm7Z8soWJHJrskZQzT5/O1\nfcCMqpEPM6T3y2oLEjZzKqwESSaTrkSkHIVHe5KvqT8G2kXU6ChIws7lci4pVIZE5OLv1ut1Fc7j\n79C5WK9KRP8wGQVsKoa9kRbeQYb0FGRrqD5tRhbz63WmgUCgrWab9dzU2uaNIJOcUjuBZM1SJ7kd\n1WG9ZAtCeprSw+YoOhI2q4ioS61rvEsSlvHqTkqQunqe1KuhPKrM86yurra9rt/vV6FIXod0MHQ7\nNxHzqJE1sAVJx/VaeL0MvZ29kyypXs0hxWnk89hlJm8kToBhaVQoFBrav6fF1oO2IlX39JAIPexE\nIqF+T5a2yvCGfB393iaJ6oqXekgkl8u55Ivr9bpxepPpPpJr1LoYe8GmCNvrLbzrQW9hl/XbpsoN\nuUxeOJ8nBeFJ2Kurq6rUj/Xg8kaxYQyLXmFqDde1a3S7pf0xkS69dBleAy4Tp+5h6yV8fE1d350t\n7XKAgXRu9EafUQx5rIdNEfYwtPCuBxq2FIvSPQL5XBNZd/Kw2RbMoaEMkYTDYVfrLzDaCRaL3sF6\naCbwWq0WstksEomECtMlEok2DXXZW8B+BMa55RACxsZZQ83QBcmZ9wlDgfqHR6fB1HpyU36PsKR9\nGesS9rC28HaDnuwz1YGaPGtdP0H3xmVIhO3ia2trKJVKyOfzKmvfz/mRFsMJVjxRg6bRaCCbzSqy\nDoVCKJVKLlVJn8+nKjm4GP9mqZ+sKiEhS8KmHXMnSe9clwXWF4C2r02kbuHGuoQ9LC28G4WMo5k8\natNzO21FCRkSYSLScRysrKyoG0uGRGRCyXrZFp1A+6CnS0+bNkXPWJcNDgQCKBQKahWLxbb66Gg0\nqkhXlqfK5jLdw2bPAauYTGTN69Y9bPl8YH0FwlHDyHc6rof1DEUmDJkpp2gO29UZ/iCxcxQTvaJ4\nPK5kLVkfa0pkWqO10CGJjaVytBPaIZ2ASqXiUncMBAJKDoHSCKwu4XM42TwYDKpGML2sj30BUrpV\neuGdPGx5/abuSkvW7bCEfYWQ3YUrKysub4EGLFvWZettOBxGs9k0aj3IWlXTDDuLK4Opg/epp57C\nCy+8gOnpaQDAiRMncPvtt+/kZW4a9LjZVRsMBlGr1VzecyAQQLFYbPOw2eFbLpeV/AJtWU45CofD\nAKASlkwehkIhJb0AwEXaMpkPmKvM6MXLry0+gyXsKwQbbkqlkkr2rK2tqeSN9LLlVAk25gBo03eI\nx+MAoDLwgLvD0eLKYerg9fl8eOyxx/DYY4/t4JVdGWTOpF6vo1KpKEnUcrnsGu0VCARcLeTUzJHa\nOGzIkqESyiGwE1jaJpOOtHW2revduiav21SFJWHj2pawrxj0sEnW1MnWu80SiQQikYhLBY0dlDpZ\ns61dH8VksXUwdfAC3vDmeil3o4dNsqzX6yiVSq7qDylfwMWko1SClAMPotGoa8SYHOnFTks6Iuzq\nZTmfnohnySCbZ+S8VZmsBMydjaNY+moJ+wrBtvBWq6UMtFarueRWk8mk8sCZWOSkDdNcvXg8rkIn\nJGtbObI9eO655/DSSy/hyJEjeOaZZwZO1KyT52lKhLPFmztAOYSA1Uh6/TQn0pDUm82mSj4mk0lU\nq1VEIhHX7pGvxe9JveuVlRWVhNRLZWXokI1p0tM2VZXI9zyKsIR9hWBIRNbArq6uIh6PK886mUwi\nlUopw2RJFbeNcgIIf0dOSWdiU3oghJ6Y6bSdtFgfjzzyCH70ox8BAH74wx/i8ccfx4svvmh87iBN\nTe9G4lKql3bEHR7bw2WTCz1gVoJQ94aVTJRtZdiOZX7BYBCRSATAZ4RMz533hp6PkRUlUvtGXk8n\ntT75nmUll1cbbezU9B2AXtrHzsVcLqdCIZxQw6SNHL8UiUSQSqUwMzOjEpHFYhGlUkkdK5VKW+UI\ns/FcvDlsvHvjkB27Dz/8MO64446Oz92pqem9lnjqvQO6+iMdAtqKDFVIcqcCZC6XUx9K6XTalWRk\noj0YDKq/C5vCACilS13lkpomDKHo+iP6YI5uXZvyvcr374WwiZ2avs3QDUdKnWazWSXGTgPk9jEa\njaotKgmbGfVYLKa0hCVh61UjDMnQ0Fk+aAl747h48SJ27doFAHj11Vexf//+Hb4iM3Qy7hYqkGEI\nScgMNcieAT6fTgBb1xn7JsGzWYZkzTAfK58YEiGJMxYutUWAy4TNcJ8ceEDvXC6SNj9s9B1nJ7Lm\nYxNp678z6LCEvQXQY3PSw5azInWyplGHQiH1NfDZJ24ikXCRtRyoqxs/tYdLpZKKedtmm+7QO3j/\n7u/+Dr/61a9w9uxZ+Hw+XH311Xj++ed3+jJ7gv5/1hN0MpxgUnvUu3alcBntmGQtx3gxyeg4jmrS\nYf028BkhU4RKDv5g5ZNUxWQVi1yc+ciQCaWH5XXrOwedeLvdB7pn7gXStoR9hdC7IWnw1GWQ9bAA\nlAGnUik1toshEQBq8jpJWi5KsOqjyorFoqpS4U0F2A7JbjB18D744IM7cCX9gUlOAXATtomkdI+c\nTWEAVGej7EikHrtsCKOnTe0S6WHT0aB3LuedyvJC05Hyw3LpGvX6exq25htL2FsAPQFCDxu4PFG6\nUCggEAgosqa3LAmbnnez2VRehiTscrnsKsHikh8MTHwSlrQtOskcmLxRHXQCOGKu1WohFAoBuFxj\nnU6nUSgUkE6nUS6XlfQCW9MjkYhLwpVesiT9VquFaDSKeDyu7Fr3uClSJR0Wfcephwvle+0m+eAF\n7xqwhL3l0JM2wOXSPGbbc7kclpeXkUqlVGyQi40HNGR+zZpu0+R2jgSj0bGGm/HJTmJUtqJkdNAr\nOZk8blZsMH7NkkGOusvn8ygWiyqMEY/HVW5GVo/otiZ1Q/iakoj5enqIRMa65X2gk7lMrsohwl4k\nasISdp+gF/87joNqtYpisYhsNotYLKa6xmSjAhfrtIHL3WPhcFgZtTzK2XxM4jDxo8e79Uw7r9Vi\n+LFexYQpWUdbIVkzls1d48TEhJqYRALNZDKqp4DqlFLWVU6ZkfeHXvpHgpbEbQoTcrEenB8yvAel\nvraUjvCi3VvC7hP0VnLWphYKBWSzWUWyFH/iYhyQ206SbzgcbhOF52PGDWXWnWWEUutY1tfK6SFe\nNFyLzWMjXiWJVA4aYLs7Vz6fV2EMOgdra2sYGxtTIREp6yolhE3lh7RJScaVSkWN1cvn8y79Ezo4\n7KhkoxmI+pwxAAAgAElEQVR3BezGlOf0Kmlbwu4TdA92bW1NETYJFvisaH5yclLF+8LhsMsbobaw\nlG7VF3UhpOfCKdRsQeY1sILEDuW1WA+y8kIq6MlZkHKwNG1Nn12az+eVVIMciiAHXsu8C+2SIUUq\nBQJQyoEMESYSCRep53I55HI5ZLNZJWSlhwG9DEvYfYAs7Jc1r9xGkqyZzOG2bWJiAslkUhklvWyT\nFyJrakny+mglaj0AlwcA6/FrU5mXxWjDFN/VPVQ+T0oySD0dOWiaO0o5GMEUAjSJQbGWWzbZyHwO\nF3eS1Oyhd18oFIxNO16FJew+wZTQowyr3LrV63UlpEOPoVarKdKW7bum+Xq8kfQ5kmyB171rtiPL\nBKVO2l73Qiy2BnqFhbQLSagkbMo0MNacz+dVLJsSwxMTE6pemzXb1ICXddlyGDAXyT0Sibgm3sgV\nj8cVWTP5LsOClrAtegarRThlmmQ7MTGhtoX0UGKxmMsj4ZGGLOPVjHvHYjHlsVMSk9tPHmVyqFqt\ntnkzNhFpQciaZpPnKwmbdsvQCBOSXCRoPpa6OfF4XA1UkE4KQ33ysdy56rIMa2trKsEpE48c+ssO\nSy9jXcIedqH37YQc30R1MtZhs36bRp9IJNp0svXkDQCVYCRh06sgWetxQ9k5ScOWNwCv0xL2aMP0\n/++UrCRxsvaZ4QfGsSnPKj1sWekhCVsuSeoAlMNC54b3jFzValV9CMTjcZTLZdTrddc9Z3pPXrH3\ndQl7WIXedwKyCUF6B0wCkqzz+TxSqRRSqRTS6TRSqZTK1NPbBi6TNT3sVqul2oEjkYjaQsrJ15R0\nlV6IVAIkbI32aMNUQdGpfduUY6Fd630JtVpNJQMZ49ZDIlzpdBqZTAaZTAaNRkOVCUoHRAdzP3RW\n5Ig0Vrzoddn6+x3kGu11CdvLQu+DBnrYPPKTX3rW+Xwe2WwWk5OTmJqaUqI3siMMuEzWAFR8j23A\nlGuVhi3DInobO9uN5XVaWJgIS7/vTY02JEaZO6Gty+EHMtRHtToZepmenka5XHY1oHF6O/Mz+jWR\nsOWwYVmfzQQ/AFdOyFRF0ukDaiex6Rj2oAu9DyKYGKR4DkmYZC23jYVCQZE54NZcZrnf+Pi4S8OB\nX9Nz1gmboRf+nOelVoQs47KwkOglRELbkXFmKRQlW9HZDEaC1cnXcRyUSiVVhsrn8PHExIRrUC+v\npZOHzec2m031OiZbH/R7YFOEvRGhdws39FADyZMGRI+ERsftHAC1LeQYMR75PBorPRhOCmHIw5Tp\nZ/kfGx+oxWvrtC02A9pMJ71qfq2HP7jrk8lM2iaTlCzXi0Qi6uf6JCY5U5JOjGzUoYdtqnjxAjZF\n2BsRerfoDhnjk3E/Oe2apF4ul11dkSRtmYFnFl7WrEajUdeMSKlZwng3O8d441C8alhx/vx5PPDA\nA7h06RJ8Ph++853v4Lvf/S6y2SzuvfdefPzxx9i3bx9eeeUVu3vcJDp5qTLsQcgGHVM5Ie8PqY1j\nyrMwVChnU9KJ0ePW8ty9XPcgYFOE7RWhd69AJmVI4LJem0I7hULBRdjMhnMMGbPp0uMOh8PKo+G2\nUpI1CX5paUl1qVHxb5iHIIRCIfzjP/4jDh06hFKphC9+8Ys4evQofvKTn+Do0aN44okncOrUKZw8\neRInT57c6cv1HNYTWDLplvCx7NYF3E6N3m8gSVuGW2RIhHavd1OaOiAHXRhqXcIeJqH3QYXUaZBx\nP3aRkawpPymJOh6PY3Jy0jX8IBqNqsYbZt8Z92Msm2TNxgXWuErB+mHG3Nwc5ubmAACxWAw33HAD\nLly4gDNnzuDtt98GABw/fhy33nqrJexNYj1VQNPPpYKf3gIvVy8etixr7eRhy3j1IBM1sS5hD7vQ\n+05DtpqzvI/1pdQbZvKQovAkay42BFBXm69BIyVZy7JAkjVDKmx8KBaLSvJ1VHDu3Dl88MEHuPnm\nm7GwsIDZ2VkAwOzsLBYWFnb46rwN3Y5MHrX8mkStSy3oZG3q0NUTmqaQiIQXS1dtp+MAwGQ4JGzZ\nzRgKhVRiUMpN+nw+jI+PIxaLIZ1OKw9db2eX35NedigUUjFzthFTSVC/Pq8Z+HoolUq4++678eyz\nz6pJ4EQnLxAYrKnpgww6IqbQg2xFl6V+PE5PT2NqagrpdBrJZFKNIZPVTqauS05iYkev7DOQImmD\n4pTYqelDAtkqTq+b3WOyrpREzUnV+qgk+VhuGRnfrtfrqnabx1gspkq0pHczTITdaDRw99134/77\n78edd94J4DOven5+HnNzc7h48aIrwS6xU1PTvQhTvJiOhEwQRqNRlx2yF2FqagqpVEoJO8leAl3f\nnfXecvCBnENJwu72YbzdsFPThwDSyOXWj00usgSQLbjUI5Z6IDpps0JkbGzMFYaRNwtvGNatshtS\nvxYvw3EcPPTQQ7jxxhvx6KOPqu8fO3YMp0+fxpNPPonTp08rIre4MkhbNtnixMQEEomEq7tXHtPp\ntBr6ITt1dYeC3jU7Kcvlsmt4Lz8oTJUqXoAl7AEGDVJuKRmvJllXq1Ukk0mUSiWlRiY9bL0JgB62\nrGOll07SJnEzrg3AlQwdBrz33nv493//dxw4cACHDx8G8Jkmzve//33cc889ePHFF1VZn8XmIb1q\n6RFLD1sS9uTkJKanpzE9PY1kMunK11AkTXrYcgAv5R0YNqSHzW5hAG0hQq/BEvaAwtQiSy+FoZFa\nrYZAIIB8Pq+mSjMkIn9PQra0S/KW3jXJW9aFyxmVw4CvfOUrHXcLb7755jZfzXBCb05hOMJxHFX/\nzxLVZDKpyHpmZgYzMzNtTgQ9a4Y0pDYPF2dMrqysYGVlBfl83uVle5msAUvYAw09Gck4Nh8TmUzG\nFRLpFsPWbxz+zORhy7l47Ma0sNgMdEngWCymBM5SqRQymQwmJyfVSqVSqhmMHYt0NKRdr66uolQq\nKRXKpaUlXLp0CYuLi1hcXEQ2m1WzH+UAD0Iv6Rt0WMIeAOi1p3oGXR715/h8PszOziKdTiMej6tt\nY7fyKX17qgvBMw7I7DW3nF4xaovtQ6+6G1KffWxsTHnUTCpmMpm22LWUBpaj7uROk4TN0WCLi4tY\nWFhQpL2ysqIEzpjfkc6L12zaEvYOQydnWXZnWvoEmkAggD179ijSjkajxtFihJ6koWIfy6D0SdV6\n5YmFBSHj0yanQD6mTALlE9LpNKampjA7O4vZ2VlMT0+7msHi8biqn6a9c4cp29PZO5DL5XDp0iW1\n6GEXCoW2Gm6ZbPTartES9gCAsWQp3iTlIbnYBCClUkOhEGZnZzE3N+cibD0DLrd+jP2x+oNkrSdr\nuI2klz0sFSIWWw+dtPUWb6lrw3DI5OQkZmZmMDc3h5mZGdV1y7CcjFfz9VhlIhvLisUistksFhYW\nFFEvLS2pcEgncvYaWQOWsHccsryJRExFMt2AOZRA6iSMj48rwydh652KusiOnAzC5KUkbOlh87lW\nvc9CRyev2hTai0ajSCaTKmbNMEgymXSV68lhA/SKCfYg0E5LpRIuXryI+fl5zM/Pu2LWjFebBhV4\nkagJS9gDAJPCmGnuHQ2biRgeeSPoHrYJuofNeLUMidDDrlarbY0JFha9QE5DCgaDirBlcjGTySCR\nSKgORqn5IbVCaIO1Wg35fF4pS66srKh4NY/FYhHValVNddInvcvHXiRuS9h9gm4UslBfbvOCwaCL\ngLl0FT7WpMrncMmSPA4r7QTZbMCQCBON+tKz6tbDtiA6edeyvl+KMMViMUXYMzMzyGQySKVSLg9b\nSilIx4K7vFKphJWVFSwvL2NpaQnLy8sq/MFQCLsauSOU+iFeJGgdlrD7BJOIjSmJyPCHvuSAAj6O\nRqPKA2dMWyZypIeiQ29gkElHNtvoKmiWrC3WQ6dKCxK2HKSRSCSQyWQwPT2NTCajdpD0sKVTYwrd\nlctlrKysYHFxERcvXsTCwgKWl5eRzWaxvLyM5eVlVWutK/6ZrteLNm0Juw+QqmFyMXmoe9R6DbRc\nMpZNUtaTjvqwXV33V0JuMell0yORhG1h0Q26qJOMDVMdUmrTMAzCkj3qgjAUIneFUshJijjlcjlk\ns1m1crkcCoWCSy+EYZBehxV4DZaw+wSpQsbKD3rOculeNI+mWDWbB2RsUFaXdJKRJGRMUCYTSdZS\nutJ61xbrQQqTyd0kq0FkknFmZkYRNsMgdDRkGERX3qMiJStBSNTsYmQlkx6vXi/84VWbtoTdJ8jK\nDxn6iMfjrg4vxqilZkI8HndNk9a9Z9OSDTam7i2TpoPccuoetkny1WK40en/3S1ezZ/T3gOBgJL6\nZTUIlyTsSCTicmZkopH2yeEd+XweuVxOhT1yuRzy+TyKxaJqimF9tcwPdasN9yosYfcBMiQidX6Z\nTEyn06rLi5nyZDLpWvSmTZOleY5O59YhbzBTDJvL5F1bjAa6/c87NcZwSadBSqWSsOfm5pDJZFQ3\nYyKRUJOQuPTX1actZbNZVVudzWaVhy3Fnzp51iZdHq/CEvYGoHdI6bFqSdJyKC4XS+9ouIznybCI\nrLWWYQ/dsCVkQ4FsOZdkTC9abjGpv5DL5VQCp1QqYXV11ZL2CGGz/2veC2w7Z44mmUwqO6egEx0R\nTjhiNy7PL6V8KZHA0j2S9dLSkopbU51Sl2zt5X16mbS7EradLO2GJGm98kNqHsiOLnnUPWmGQEju\nTMLIbWIvYuumdvNms6mSNbLOulQquQi7WCyqzPvy8jIKhQJqtdrQ11x3su2nnnoKL7zwAqanpwF8\nJrl6++237/DVbh+62ZkeAuFzZRlqPB5XpXszMzNqYkw0GlXTjfR4NZ0L2QNQLpexuLjoajfP5XLK\nyZAa16bwnelDyIvaITp8Tpd3wA4iOVn6tddew09+8hNMTU2pydK5XK5tUKlXP8E6wSTI5Pf7jZUf\nkUjENXNRb34xlerp3YvyHHpsWodsM+eiKI5UMuPjQqGgyJqPucXkMZ/Pe0L/erM3YCfbfuWVVxCP\nx/HYY491/F2fz6cI3cuQBKxD747Vny9tM5FIqPAeY9VTU1NqxNfU1JSrFJUlfFIXpF6vK0lU2iBr\nq7ny+byraqRWq23DX2n7sbi42NGuu3rYdrK0GzppMz7N0jtJxgx3yMXyvE4etVy6Il83SG0FNrww\nWcMbgJl1domRqLm9rFQqqu13FDzsTrYNDEdyaj10e4+mTkBJ2rpYGYcPTE1NYdeuXUomgWGRVCrl\nsm3pYXNHqNdZsyFGrlKp1JZz4XV26+wdJuex5xi2nSzdnkyUCmQUYeeYIyZZZBsu49NyUfdDJ2hT\np2QnyJpq6i2QsNkVxqWTNutYZfJm1JT5aNtf/vKX8d577+G5557DSy+9hCNHjuCZZ54xhvu8PIS3\nV7LWQwi6h837QCfsubk5V/gvkUi0vb70rjmEoFwuK9W9Tz/9VFWFcFWr1Y4dxLpj46VE45YP4d3s\nZGmvwESKOmmyvlTGqcfGxhRRs0RPCrLri960bHqhKLsOvSZV11WQFR2cYSdXqVRqa9tdWlpS5VAM\nkxQKBVSr1f7/kQcUpVIJ3/rWt/Dss88iFovhkUcewY9+9CMAwA9/+EM8/vjjePHFF9t+z8tDeNer\nMNJjwpKgeR/IEIcs15OdiyxDNZE+lfboXBQKBWWj7F6kbZLMNiLk5KV49ZYO4b2SydJegKl201Tn\nzMoPvftQxqdl3Frqf0QiEUXSejKxE7hd1BOK/DRmJp2GLyVRWQnCMIhsNGB2fXV1VU2UGVXQtr/9\n7W8r25a2/PDDD+OOO+7YqcvbNuieqVyyvlpWQMn74EoIm7s8etaSsGnPnQhbXvt6cfhhQVfCdpzh\nnyxtImlpnDJWLYWYZEJR71hkVYg0bGpZS4GbXghbluQxNi1lUKvVqiJoTonmY5lw5JExag4mHfZY\ndSd0su2LFy9i165dAIBXX30V+/fv36lL3BbohKfv5Ois+P1+tTuMRqMuJUmWqUrC5g5SErY8coB0\noVBQYTvdw6ZTweS3SXlv1NC1SuTdd9/FV7/6VRw4cED9kU6cOIEvfelLuOeee/CHP/yhY1mfF/6o\n3eqodZGmcDisYtEyLk0PWhK0bCWX20e98qNbbbVU0aM3XavVXMlCedTJmfKosqSP02PomXN5oRqk\nEza7QzDZ9tNPP42XX34ZZ8+ehc/nw9VXX43nn39e5WuIYagS0UMLPOrTWWQlFKug5BivdDrtGpw7\nOzuLZDLZdl8Bbu+d0qjz8/PqqE+MkWV78mjCMO0Uu1WJdCXsK4FXCFv3pPXZc4xXRyIRzM7OKqPk\nkhrVXOxSlMlJOZNRXybowjeMU1NLgUfZpitJvFwutzXNUJVPjlji0avYiRt1GAgb6NwVKwmSHrXs\nKdBnL+pOTCwWa7NxPamdzWZx8eJFfPrpp2oIgZ5kZEim273iZeW9Tth0Wd8wQw+FSHIlScu6UdkQ\ncNVVV2H37t3YvXu3S8SGz5VdXBsF/1H6kAE2vaysrLgSiRw0KoXdKYojX2+YDNpia6DHqwGo9nJZ\nAaKXp+oVIFzUYzfZPwfmcmAGnQ2ZX5Gqe52udyPfH0YMJWHrJT8AXGEOWaVhWjoBs3OR2z6GQigN\nyWRit+YWoH1auSxr0nU95PQXmUiUimXUVCgWi6hUKirmR495lAzZYmOQjoFs7yZR0/ZZrsdGmMnJ\nSRW/5pIyDOFwGMFgsM1TZ+kecyuSrHksl8sqt2K6XhlnH1UMLWHrKxwOtw0JoL60aZmGBLAJgIJN\nUp9ahjw6Qdf3YO00Qx5yXJfepkvClvXTDIXIeDUJe5SN2qIz9IoNKQbWarWUhk04HFbhj+npaczN\nzWHXrl2YnZ116bXHYjFXiapJeY8J9FqthnK5rNT35GIXo4mwSdbWpoeUsAF3V6LP51OSj1LLIx6P\nuxpYTI+lp63rVssuxV4IW3YkMvnHhgFZ4dHtKD1uHuVIL+lhy/NaWHQDHZtgMIhwOKz0rNPpNKam\npjA7O6uaYtilS69aT5zrHwJra2ttIT0q7zEcUiwWXXkWXpMJuj17IV+2VRg6wjbVU0uNXnoMFKXR\nY9V6F6J83EvlRy8ethx+W61WXfod0oBleR4J2zR7UXrt9NwBS9QW7ZBhBd1mfT6f6tRla/nk5KRS\nlJTlqSRpvU/AJNvbaDTadEGovLeysqKGEHSaeGSqvR5V2x46wgbaNT8kYcvE4dTUVNtUF9PgAD3s\nIbu+9I7IXjxsetb0OthCLoeLUuNDqupVKhXXDWGawygfW1h0gvSoZd8Bu3Vl5YckbMaoSdiyocvU\n1MXHCwsLas3Pz2NlZcXliHDgM224l+sfRXiGsE1x6U6TV3QhpUAg4KoV5ZqennbVmEoPWiYnOdx2\nPUii1JOLrVbLlTykobJxQF8szZPPrVarbbFBL5fkWWwPdFU+HuWgXC6phUPlPd3Dlv0DrVbLlYeR\njVlyLSwsqBK+Tz/9FMViUYXxmCzv1MVocRmeIGzWS+uDbXUdaukN64vTmknUmUwGyWSyTRtEr/ro\nVS1PHjktQ3oZjUajLWnIpUubMmMuE4nsStSz7xYWmwEdHlZFMR6tEzbvE0nYwGXbk4lzmSCX5F2t\nVjE/P49PP/0UFy5cwCeffIJyudxWUthLQ9mowxOEDVz2BmRGmsmPTpUfkoSZQJGyj/F43PV6fCyb\naHpJJPIoJSNlG7kUuJGav1LfQ1/VatXV6UgFPd3ILSx6ha4LEgqF2nRwOCGGZXzJZFJVhIyNjcHv\n97flTLhT5JISCLT/paUlJebUbDZdXr/0+K1X3R2eIGzpDUgijsVibQbHRhY9kcjqDrmi0ajLgOXa\nyCe9rqbHJoFKpdI2iot11HI2nW7cVCgzdSha79pio2CSTnd6wuEwUqmUq0uRQk5UmIzFYq57jiV7\n7MRdXV1t013ncFxp14xZr66uAoDrvjJJplqY4QnCBtzxNn2grTSwZDKpkoiymF9vHyeR6zrUG2kf\nJ/SEn/Swi8WiyobrguzsUiQ5S40PErQsj7LlehabBe2Y0gtsBkun05iZmVEDHSgTzOSjaViutG8O\nHWDuJZvNGifD8LlMLupCTpake4MnCFtqfrC8jtKmqVQK09PTanFQgD7ZRY9tMyFpgokIO5GjKblI\nJTI2CXCIKEVt9Dl1ptewsNhqSKeHtda8f6666irs3btXxau5Iw2FQm3DBuhhV6tVNV4um826pBLk\nLFGZh5FSqUB7ZZXdQXaHJwgbuDyZeWJiQhmTbIKRS6/8MCURaSSmqgtZW2oSSJLGRNlT6SFzC6jr\nJbClvFgsqrCHLcOz6Dekbemt59xxMk7N3gLHcdpK85hTkfkX6V1z51goFFzNXKurq212biqFtR2N\n68MThM16UUnY+gRyKUZjSjrKelOStqkji1lvPUwh22WlQbGeWi4pzK6r6HGRsG3t9M6gVqvhT/7k\nTxSpfPOb38SJEyeQzWZx77334uOPP+4oHewl6Hal71apV81Kj1arhVKppO4TtpRL+5a2zMdSfIxK\nkabqpvV2r/Ye6A7PELb0sKPRaEfCTiaTKtwhQx8ykahvwWRnFrsQpa4Ht3QmIXYasGxyMbWQ68vk\nYVvS3j6Ew2G89dZbiEQiaDab+MpXvoJ3330XZ86cwdGjR/HEE0/g1KlTOHnypCcHTNMh0RfvJX3A\ngKyllo1ZFGzSNW3kUXdY6vV6W/6lEzYSfrTwCGED6Ophy5FciUTCVbPNo2y20UMi0quWQ2wl2dZq\nNSNhUx+BAjYySy4bBzg8QE8u2sqPnUMkEgEAVTaZTqdx5swZvP322wCA48eP49Zbb/UcYeuqdnoo\nQhK2z+dzNb/IWYvMw8idIcN58jlMkpPkOxG0abqNxcbgCcKWHjaTJfrsREncndrF9SkbusQp420c\nYivbwqvValvTiuM4rsnkPObzedeWkEsfnmvJemfRarXwx3/8x/jf//1fPPLII7jpppuwsLCgJszM\nzs5iYWHB+LuDOjVdr7bQ7VXvEqZ3zZ0ix3bJsIeMWefz+bYuRp63Wxdyt2oQPWQzatjyqemDAOkJ\n02MlsY6Pjysvul6v9/yajuO0GV+9Xm9rYpGEzd/jY1aBsKSJbeWmpKUl5cGC3+/H2bNnkc/ncdtt\nt+Gtt95y/bxbSacXpqbz+vUOXJIz8NkoOpbmRaNRpR5pkvdl0ws9aFadyHPx+93KYvnBIa9zlO+N\nLZ2aPghgxpplcoFAAK1WC7VaTdU508veyI3EraAMU7AhQI8312o1dS3yyHZzijPpqmPWgx58JJNJ\nfOMb38BvfvMbzM7OYn5+HnNzc7h48aJrirpXIYmb3rTP50Oz2USlUnEl6GUsW4b1pOZHJ8KW5zI9\nlhhlidQrQVfCPn/+PB544AFcunQJPp8P3/nOd/Dd734XTz31FF544QU11+7EiRO4/fbb+3aR9Awq\nlYoiayZDcrmcS1A9HA73/LqO47S12crQiDRYU9IRgIrz0SvRCdt61oOJpaUlBINBpFIpVKtV/PKX\nv8SPf/xjHDt2DKdPn8aTTz6J06dP484779zpS10XeqkcH8syOYYAuQNl9YdsGGPbuaySkk1bMpwH\nwNVMI8/bCZaUrxxdh/DOz89jfn4ehw4dQqlUwhe/+EW89tpreOWVVxCPx/HYY491fuEt/Of4/X6X\n/KkuhbrZeYqdyvr0wbVSVF3/c5Hc9bCKKUNvsfXY7N/1d7/7HY4fP65I6P7778f3vvc9ZLNZ3HPP\nPfjDH/7QsazP5xucIbx6/Fd6tHp/gS6i5vO5p6TLMB4Xydyk+95NusHuLDePTQ/hZbsqAMRiMdxw\nww24cOECgO39RzAkonvaupYvH2/kdXUdENk8s173oSR8qU9tBwgMPvbv34/f/va3bd/PZDJ48803\nd+CK+gsZFqGdMyyik7XJydhoCEP38C22Bj3HsM+dO4cPPvgAX/7yl/Hee+/hueeew0svvYQjR47g\nmWee6WtzAWNvvWZSLSxGBZIYAXe3oJ7c08Gfs1oEuNwyLn9f96p72T1bD7s/6El0tlQq4Vvf+hae\nffZZxGIxPPLII/joo49w9uxZ7Nq1C48//ni/r9PCwqID1kvo8TkmopWiULLZTA7wMHUJyw+ITuE/\nS9Zbj3U97Eajgbvvvhvf/va3VQJGZs4ffvhh3HHHHf27QgsLiw1jvdpm+fNOceheGlwsKW8vunrY\njuPgoYcewo033ohHH31Uff/ixYvq8auvvor9+/f37wotLCz6BlOzi64Jr3vWttpj59C1SuTdd9/F\nV7/6VRw4cED9k55++mm8/PLLOHv2LHw+H66++mo8//zzqjtMvbD9p1psA3bCwxukKpGtgF4OKB93\nSjxaz7p/6FYl0pWwrwSWsC22A5awtwad4tuAJertxqbL+iwsLEYDpuYbnTQsWe88LGFbWFgoWFIe\nbNhZ8hYWFhYegSVsCwsLC4/AEraFxSaxESnfYX1dL12rF19XhyVsC4tNol9SCV56XS9dqxdfV4cl\nbAsLCwuPwBK2hYWFhUdgG2csPI2dapyxsOgntr3T0cLCwsJia2FDIhYWFhYegSVsCwsLC4+g74T9\nxhtv4Prrr8e1116LU6dO9fVc+/btw4EDB3D48GF86Utf2tLXfvDBBzE7O+uSks1mszh69Ciuu+46\nfP3rX8fKykrfzvXUU09hz549OHz4MA4fPow33nhjS851/vx5/Omf/iluuukmfOELX8A//dM/AejP\ne+t0rn69t36iX3a9FTbcL1vtl132wwb7ZWu1Wg0333wzDh06hBtvvBE/+MEPrvhaNwSnj2g2m841\n11zjfPTRR069XncOHjzofPjhh3073759+5zl5eW+vPavf/1r57e//a3zhS98QX3ve9/7nnPq1CnH\ncRzn5MmTzpNPPtm3cz311FPOM888syWvL3Hx4kXngw8+cBzHcYrFonPdddc5H374YV/eW6dz9eu9\n9TYjljQAAAN4SURBVAv9tOutsOF+2Wq/7LIfNthPWyuXy47jOE6j0XBuvvlm55133ukbF+joq4f9\n/vvv4/Of/zz27duHUCiE++67Dz/72c/6ecq+VQ3ccsstSKfTru+dOXMGx48fBwAcP34cr732Wt/O\nBfTnvc3NzeHQoUMA3IOW+/HeOp0L8JboUL/t+kr/Fv2y1X7ZZT9ssJ+2FolEAHzW3bi2toZ0Ot03\nLtDRV8K+cOEC9u7dq77es2eP+qP1Az6fD1/72tdw5MgR/Ou//mvfzkMsLCyowQ2zs7NYWFjo6/me\ne+45HDx4EA899FBftlwctHzzzTf3/b3Joc5A/9/bVqKfdt0vG+7n/3Mr/3f9sMGttrVWq4VDhw5h\ndnZWhV22iwv6StjbXa/63nvv4YMPPsDrr7+Of/mXf8E777yzbefu9+ikfg8+LpVKuPvuu/Hss88i\nHo+7frbV783rQ537+X/eDhveyv/nVv7v+mGD/bA1v9+Ps2fP4pNPPsGvf/1rvPXWW1tyrT2duy+v\n+v+xe/dunD9/Xn19/vx57Nmzp2/n27VrFwBgenoad911F95///2+nQv47JN0fn4ewGdzLuVw4q3G\nzMyMMoSHH354S98bBy3ff//9atByv95bp6HO/Xpv/UA/7bpfNtyv/+dW/e/6YYP9trVkMolvfOMb\n+M1vfrNtXNBXwj5y5Ah+//vf49y5c6jX6/jpT3+KY8eO9eVclUoFxWIRAFAul/GLX/yi78OBjx07\nhtOnTwMATp8+rYyiH+jX4GOnw6Dlfry3Tufy2lDnftl1P224X7a6Ff+7fthgv2xtaWlJhVGq1Sp+\n+ctf4vDhw9vHBX1JZQr8/Oc/d6677jrnmmuucZ5++um+nef//u//nIMHDzoHDx50brrppi0/1333\n3efs2rXLCYVCzp49e5x/+7d/c5aXl50/+7M/c6699lrn6NGjTi6X68u5XnzxRef+++939u/f7xw4\ncMD55je/6czPz2/Jud555x3H5/M5Bw8edA4dOuQcOnTIef311/vy3kzn+vnPf96399ZP9MOut8qG\n+2Wr/bLLfthgv2ztv//7v53Dhw87Bw8edPbv3+/8wz/8g+M4Tt+4QIdtTbewsLDwCGyno4WFhYVH\nYAnbwsLCwiOwhG1hYWHhEVjCtrCwsPAILGFbWFhYeASWsC0sLCw8gv8HlAbSrb8NEtsAAAAASUVO\nRK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(121); imshow(images[0])\n", "angle = arctan2(evs[0][1],evs[0][0])*180/pi\n", "subplot(122); imshow(interpolation.rotate(images[0],angle))" ] }, { "cell_type": "code", "execution_count": 62, "id": "830da7ad", "metadata": { "collapsed": true }, "outputs": [], "source": [ "# computing a rotation angle for each image\n", "def rotation_angle(image):\n", " c,v = moments(image)\n", " l,evs = eig(v)\n", " i = argmax(l)\n", " angle = arctan2(evs[i][1],evs[i][0])*180/pi\n", " return angle\n", "def derotate(image):\n", " return interpolation.rotate(image,rotation_angle(image),reshape=0,order=1)" ] }, { "cell_type": "markdown", "id": "b368d332", "metadata": {}, "source": [ "Result of canonicalizing by rotation.\n", "\n" ] }, { "cell_type": "code", "execution_count": 63, "id": "31d8e029", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 0 4 1 9 2 1 3 1 4]\n" ] }, { "data": { "image/png": "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\nI0aM9Dr+P9nvw5vmOTo3AAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print labels[:10]\n", "for i in range(16):\n", " subplot(8,4,2*i+1)\n", " gray()\n", " imshow(images[i])\n", " subplot(8,4,2*i+2)\n", " imshow(derotate(images[i]))" ] }, { "cell_type": "markdown", "id": "44e41015", "metadata": {}, "source": [ "It turns out that canonicalizing by rotation isn't the best thing to do. It's generally better to _deskew_.\n", "Skewing is a coordinate tranformation of the form:\n", "\n", "$$ M = \\left(\\begin{array}{cc} 1 & 0 \\\\\\ \\alpha & 1 \\end{array} \\right) $$\n", "\n", "This is also called a _shear_ transformation. The further a pixel is removed from $y=0$, the further its $x$ coordinate is shifted." ] }, { "cell_type": "code", "execution_count": 46, "id": "5d727ed6", "metadata": { "collapsed": true }, "outputs": [], "source": [ "# deskew transformation\n", "def deskew(image):\n", " c,v = moments(image)\n", " alpha = v[0,1]/v[0,0]\n", " affine = array([[1,0],[alpha,1]])\n", " ocenter = array(image.shape)/2.0\n", " offset = c-dot(affine,ocenter)\n", " return interpolation.affine_transform(image,affine,offset=offset,order=1)" ] }, { "cell_type": "code", "execution_count": 47, "id": "71a85b55", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nT9q2NUBarZZ14403WhcuXLAajYZ1+PBh65133hnY8Q4ePGitr68PZN9//etfrX/84x/WHXfcoX72\ngx/8wHr66acty7KsU6dOWT/84Q8HdqynnnrKeuaZZ/qyf87i4qJ17tw5y7Isq1gsWocOHbLeeeed\ngXw2p2MN6rMNimHbtWWJbfeCF217oB722bNncdNNN+HgwYMIhUJ45JFH8Oqrrw7ykANL87rnnnsw\nMTFh+9lrr72GEydOAABOnDiBV155ZWDHAgbz2ebm5nDkyBEA9unhg/hsTscCRqsPxLWwa0Bse6d4\n0bYHKtiXL1/GgQMH1PcLCwvqQwyCQCCA++67D3fffTd+85vfDOw4xPLysppGMjs7i+Xl5YEe75e/\n/CUOHz6MkydP9u0WlXPx4kWcO3cOH/3oRwf+2ehYH/vYxwAM/rP1k2HbNSC2vVu8YtsDFexhFxi8\n/fbbOHfuHN544w38+te/xltvvTW0YzvNlesX3/72t3HhwgWcP38e8/Pz+P73v9/X/ZdKJTz88MN4\n9tlnkUqlbM/1+7OVSiV86UtfwrPPPotkMjnwz9ZvrkXhjNh273jJtgcq2Pv378elS5fU95cuXcLC\nwsLAjkfDU6enp/HQQw/h7NmzAzsWcOW/89LSEoArw1tnZmYGdqyZmRllXF//+tf7+tmazSYefvhh\nPPbYY3jwwQcBDO6z0bG++tWvqmMN8rMNgmHbNSC23Stes+2BCvbdd9+Nd999FxcvXkSj0cDvf/97\nHD9+fCDHqlQqKBaLAIByuYw333xz4BOvjx8/jtOnTwMATp8+rf5Ig2BxcVE97uc0b8thevggPpvT\nsQb12QbFMO0aENvuFU/adt+WLx14/fXXrUOHDlk33nij9dOf/nRgx/nf//5nHT582Dp8+LB1++23\n9/1YjzzyiDU/P2+FQiFrYWHB+t3vfmetr69b9957r3XzzTdbx44dszY3NwdyrOeff9567LHHrDvv\nvNO66667rC9+8YvW0tJSX4711ltvWYFAwDp8+LB15MgR68iRI9Ybb7wxkM9mOtbrr78+sM82SIZl\n15Yltt0rXrRt6SUiCIIwIkiloyAIwogggi0IgjAiiGALgiCMCCLYgiAII4IItiAIwojw//divjkP\n66IEAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(121); imshow(images[3])\n", "subplot(122); imshow(deskew(images[3]))" ] }, { "cell_type": "code", "execution_count": 49, "id": "5b61b3a9", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 0 4 1 9 2 1 3 1 4]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAT4AAAD9CAYAAAAlMxueAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl4FFXW/7+V3tLdSbqz7wuErISEJYAISdgSBoZFZUAQ\n2cWZ8UVe1J/GeZDRV1RQRhlABhHQUUAW2ZEdJBBACFtYE8geCNm37iy9398fmarpTjrpTi9IN/15\nnnqkKlW3q77ePn3r3HPPoQghBA4cOHDwDOH0e9+AAwcOHDxpHIbPgQMHzxwOw+fAgYNnDofhc+DA\nwTOHw/A5cODgmcNh+Bw4cPDMYbLhO3bsGKKjoxEREYHPP//ckvfkAA59rYlDW+thM9oSE1CpVCQ8\nPJwUFRURhUJBEhISyL1790xpyoEeHPpaD4e21sOWtDVpxJeVlYVevXohLCwMHA4H06ZNw4EDByxt\nk59ZHPpaD4e21sOWtDXJ8JWVlSE4OJjZDwoKQllZmcVu6lnHoa/1cGhrPWxJW7YpF1EUBQAICwuD\nm5sbJBIJWltbsXbt2g7nWBNip6vtKIrCjh07cPnyZbBYLEgkEowbN67DOdbGHvV1aGs9bMkumGT4\nAgMD8fDhQ1AUhYyMDGzYsAFOTo4JYksRGBgItVqNjIwMeHh4YPny5Xr1FYlEzL9lMhmcnZ11/t7+\nmL59Ho/HdEbtvzc2Nlr0mZ4WjNXWQfcx1i64urrCzc2N2ZdIJB32XV1doVarQQgBi8VCU1MTXF1d\nmb6q7xo3NzejR5gm/R9PTExEXl4eVCoV5HI5du7ciYkTJ5rSlAM9JCYmQqlUoqSkBAqFotv6EkKY\nXz3tf1MUxXQc+t8sFuuJ/Ao/LZirbWfw+XyMHz8eK1euxMyZMxEQEGCBu7UtLGkXOBwOevTogUGD\nBiE4OBhOTk6gKMpiI2WTRnxsNhtff/01Jk2ahLCwMHh7e+P8+fOIiYnpdlsURYHL5YLL5QIAfH19\nMXz4cISEhGDTpk2IiopCeno6bt++jQ0bNiA3N9eUW7Yp2Gw2vLy8MGTIEADAuHHjjNK2vYFzcnJi\nRoWBgYFQKBT405/+hJMnT6JHjx5QKpWYNm0adu3ahSNHjkAmk1nvoZ4STNW2Kzw8PNC3b1+sWrUK\nISEhqKmpwYULFzB16lRL3LLNYI5doPsuPUKMjY3FzJkzER0djfLycnz66ad49OgRAEClUpl/r6Ze\nOHbsWJSUlMDf3x/V1dVITU1FdHQ0kpKSDF7r7+8PPp+PXr164Y9//COio6PRt29fAMCVK1eQkpKC\nqqoqREZGQiQSITo6Grt378bjx49NvV2b4/r16zraZmZmdtBW21ARQiAQCODh4QE/Pz8kJyejubkZ\n06dPR2BgIAghuHz5MoYMGYKEhASIxWLU19fDw8MDLBYLSqUSGo3mmTB+xmhrLJ6enli8eDHi4+PR\no0cPtLS0gMvlYtiwYQgJCcHjx48t8kW1FYyxC2q1GhKJBADA4/HA4/EAtBk9Qgi8vLwwadIkjBgx\nAkDbYCg9PR2bN2/GhQsX4OzszAyU5HI55HK5TpvGYNDwzZs3D4cPH4aPjw9u374NAKirq8PLL7+M\nkpIShIWFYdeuXXjxxReRlZVlsAP16tULR44cQXh4uM5xjUYDtVqNMWPGAACWLFkCqVQKpVKJiooK\nlJWVdevBbAFztW3v00tISMDatWsRGBgIiqKgVqsBtGmrUqkwevRoPH78GNu2bYNcLkdTUxNqampQ\nWVkJtVoNgUDAtCWXy6389NbF0v22PSwWCz169MDcuXPxxhtvwM3NDYQQlJaWYtmyZfjhhx9w7tw5\nvP3229i7d681HvF3xRx93d3dddoihDD9lcViYdKkSUhJSQEAKBQK3Lt3DwDw6aefYs+ePTh48CAz\nCOJyuYzhBACpVGrU/Rv08c2dOxfHjh3TObZixQoMHz4c165dw6hRo7Bs2TKcOHECffr0MfiB5eXl\nuH79OioqKlBSUgKgbeh6+fJlrF+/HidOnEBBQQF+/vlnHD58GCdOnMCtW7dQW1tr1APZEpbW9ubN\nmzh69ChKS0vx4MEDKJVKAEB+fj5+/PFHHDx4EHV1dcjOzsbJkydx6dIl5OfnQyqV2p2D39Latqdn\nz57YunUr0tPTweFw8OjRI8hkMoSHh4MQgkOHDkEgECAoKMhSj/RUYUl9ad8dl8vF66+/junTp8PD\nwwNqtRoURSE4OJixGX/5y1/wwgsv6FxrCgZHfElJSSguLtY5dvDgQWzZsgVJSUlQKpXIz8/HRx99\nhLS0NIMf2NzcjI8//hiDBg1Cc3MzvvjiC8jlcnz55Zc4cOAA3N3dkZycDI1GY9ID2RKW1ralpQVf\nf/01rly5gvLycrzxxht4/vnncfr0aaxatQoKhQKDBw9mXmvZbLZdhlUAltdWGx8fHyxcuBDx8fFo\nbm7GsWPHcObMGYwePRqVlZX47bffUFtbizFjxiAoKAhCoRDNzc0WfLrfH2vo6+7ujqFDhyIiIgL1\n9fW4du0aZDIZ4uPjodFosHr1arz55psYPnw4jh8/joKCArBYLNMewJjlHUVFRSQuLo7ZF4vFzL81\nGo3OPg2ALjcul0u8vb3J3r17yd27d8m4ceMMXtN+swdM0ZaQNn1FIlGHzc3NjXh6ehI+n09eeukl\nkp2dTX766ScSHx9PXF1d9V6jb7MHfc3RtrPNy8uLpKenk5aWFlJbW0tOnjxJhg8fTnx8fEh8fDyj\nXUBAAFGpVOTKlSskOTnZ0Xf/AwASGBjYYQsNDSULFy4kpaWl5PHjx+TChQtk1qxZJDU1lcybN48M\nGTKE+Pj4kMmTJ5PGxkayfv16MmjQIBIQEKDTjrHaGuXjO3TokM67s0wmQ1BQELy9vQGYNsuiUCjQ\n2NiIHTt24JNPPkFaWhqysrJQU1PT7bZsFXO11Z6IYLPZYLPZoCgKKpUKbDYbWVlZ2LRpE15//XW8\n9NJL2Lx5M6RSqd5RnkqlsisnvDX6LZvNxptvvokFCxagqqoKn3zyCe7du4e8vDxUV1ejqqpK53yK\nohAYGAhXV1fzH+gpwxx9tX31PB4PHA4HkZGRGDp0KNzc3JCRkYGrV6+ipKQERUVFyM3NhUqlApfL\nxZkzZ1BaWoq0tDTU1NTgX//6FyQSSbdfeY3y8f373//WOSYUCrFgwQLcuHEDR44cQWBgYLc+lEah\nUODo0aP497//jcmTJ2P9+vX43//9X53ARHvGXG2dnZ2Zjc3W/Q1zcnKCRCLB7t27sXHjRkybNg3/\n+te/sHjxYvj6+nZwJbDZbJ32bB1r9NuIiAjMmzcPHh4eeO211/DDDz/g0qVLXf5YOzk56SzjshfM\n0dfNzY0JYnZ2dgYhBP7+/khJSUFhYSF27NiBH374ASUlJdBoNNBoNHBycoKTkxNaWlrwyy+/wNfX\nF3379kVkZCSEQiHc3Ny6ZTcMGr6kpCSdFQIAEBUVhaysLADADz/8oONs7C5SqRRbtmzBoUOHMHr0\naHz55Zf45JNP0KtXL7tzuLfH2toCbX6/Xbt2Ye3atQgNDUV6ejo2bNiAlJQU8Pl8s9p+mrG0tmw2\nG+np6fD29sapU6dw6tQpxleqbwQN/Nfxbo/+anP1pSc06Jnc0NBQAEBNTQ0yMzOhVqt19KXPFYvF\nTMxpaGgoYmJiTPLzGXzVnT59Ok6fPg25XI7g4GB8/PHHSEpKwurVq8Hj8eDl5YWLFy92+4O1efjw\nIZYsWYKbN29i5syZWLBgAUJDQ7Fy5UqcP3/erLafZqytrfZStG3btuHatWt45ZVXMHLkSKxfvx7f\nffcd9uzZg6KiIrv7kbG0tn379sWAAQNACMHWrVu7PNfJyQkhISFQKpV48OABcnJyzH2cpw5L6Ev3\nT2dnZ/j4+IDH46GhoQEikQi1tbWM64ZGo9HA2dkZeXl5uHXrFiIiIuDj4wNnZ+dux5922dsfPnyI\niooKiMVi8Hg8vPvuu5g7dy7mzp2LYcOGITQ0FDweD0uWLOnWh+qjvr4e33//Pf785z+jsrIS48eP\nx2effcb4C+yRL774AuHh4eDxeBCJRJBKpXj77bfx6NEjJCcnQyaT4fnnn0dDQ4Pe62UyGbMZ8lcR\nQpCTk4NPP/0UixcvhlgsxsKFC/HWW29BLBZDrVbrtGfrmKtte9hsNjgcDurr63HkyJFOz2OxWBg8\neDA+/fRTlJSUYOPGjWYPDJ42zLULEomE2eRyOTQaDQoKCqBUKuHs7IzW1ladURzRWtXR2tqK6Oho\nKJVK1NTUMDPoUqnU6Bg+wIDh43A4WLVqFU6cOIGePXti3bp1yMnJwebNm5GamooHDx5g6tSpOH78\nuNEf2Bmurq4YMGAABg8ezAQkCoVCu15HyuFwsHTpUkRERODSpUtYt24damtr8fnnnyM1NRXXrl2D\nWq3GihUr9F7flY+vPYQQ8Pl8xMbGIiwsDFKpFDweD9HR0fD09OzQnq1jrradcfv27U4D6b29vTF1\n6lR89dVX4HK5eO+993D06FEmkNxeMNcu0P442scnl8tx+/ZtPHz4EL6+vnB2dtZxD7BYLBBCoNFo\nEBAQgBdeeAH+/v44d+4cpFKpST6+Lr8tfn5+8PPzQ3FxMVgsFiIjI1FWVoa9e/fiwoULANoWZ5sT\n5e/s7IzExERMnToVSUlJ8Pf3h6enJzQaDfLz8zvMlNkTfn5+iI2NBQC4uLggJiYGt27dwsGDB3H2\n7Fn89NNPGDJkCPbv39/tL6g29CqD8ePHY/To0QgJCYFAIIBGo4FSqQSPx4NarbaruD5La0uvf/bz\n89P794EDB2LRokVITk7G/fv38eabb+L+/fsWfaanBUvbBUIIHj9+jGvXrmHs2LHo3bs3Tp48CTc3\nNyiVSrS0tIDFYmHAgAF46aWXMHjwYFy+fBk//vgjysrKrOfjO3v2LKqrq5GTk4O0tDQ8fPgQqamp\noCgKYWFhJvmHKIpCjx49MGfOHLzyyisIDAwEh8MBRVHIycnBypUrsW/fvm63a0vQ2tbU1MDf3x9K\npRJ8Ph95eXlIS0tDjx498M0335i0iJ78ZxmQi4sLhg4dilmzZmHQoEFwdnYGRVGQy+U4cuQIvvnm\nG+Tm5oLL5dqN0QOsoy0hBJGRkVi2bBl++uknEEKQlpaGcePGIS4uDhRFITs7G1999ZXdGj0aS9oF\niqIglUpx8eJFvPDCC1i8eDGqq6tRWFgIV1dXDBw4ED179sTw4cMxYMAAPH78GL/++itKS0vB4/FM\n6rcU6eKqhw8fYtasWaioqEBxcTFmzJiBTZs2gc/nw9PTk/G/0cue2j+MvgcUCATw9/dHQkICvvji\nC4SFhUGj0UAulyM3NxcbN27Etm3b0NTUZPDmbf2Laq6+2msU6Tg+Gjc3N4SEhGDUqFF4/fXXGT9e\na2srrl+/jvXr1+PMmTNMmIBSqdTxE8rlcpvW19J9d+DAgfj+++8RHR0NAKisrIRGo4Gfnx9UKhXu\n3r2LkydP4vPPPzfKb/gsa6sd18jlcuHs7Ay1Wo0ePXrg008/RVxcHB4+fIg7d+5AJpMhMjISkZGR\n4HA4uHnzJrZu3YorV66gqakJzc3NUCgUTHudxal2oKvo5vLycnLlyhWSlpZGVqxYQSIjI8m9e/eI\np6cn+eijjwghhDx+/JhERUXpjdCmNy6XS4KDg8mwYcPItm3bSHFxMVGr1UStVhOpVEoyMzPJX//6\nVxIYGEicnJyemZUb5urbfrWFh4cHiYmJISNHjiQ///wzKS4uJlKplDQ1NZHa2lqSkZFB/vznP5Ow\nsDDi5uZGxGKx3a7csFTfpTc3Nzfy4YcfkpycHKJSqYharSbNzc3k5s2bZO3atSQmJuaZWXVkrrb6\nVm4EBASQ4OBgMn/+fHLz5k1SXFxMqqqqSHV1NamuriZ3794la9asISkpKSQmJoZ4enoy11l85Yav\nry/ee+89xMbGIj09Hb/99hvKysq6HQ8VGhqKd955Bx4eHnjhhRcglUpx48YNXLx4EQ0NDThw4ACy\ns7PtzglsCEvpC7QFg3t5eWHKlCl49dVX4eXlhczMTISFhaGurg53797F999/j+LiYqhUKlAUBaVS\nqTNKpFd82AOW1BZom4n88ssvcfHiRUyaNAl5eXnw8vLCsWPHcOPGDbS0tFjzcZ4qzNVWLpfrvK3Q\n+xqNBidPnkROTg4mT56M/v37g8vlorS0FDt27EBFRQXy8/PB4XCY12h6dN6+TUN0+ap7/vx5JCcn\nIz4+HkqlEnl5edi5cycuX76M1atXQ6PRMPE6dAAi07DW64Kfnx+GDRuGkpISDBo0CA0NDSgsLERR\nURFqa2uZLCLdpYtbtwnM1bd96nmRSIS+ffsiIiIChBBcunQJAQEBqKurQ1lZGSoqKgymotdOPW/L\n+lqq71qLZ1nbrlLPE0IglUrh7+8PkUjE+KNLSkrA5/MZg9dV6nljtO3S8NE0NTVh+PDh+OCDD/DC\nCy+gqqqKeY9funQpysvLsXnz5g4PaG1sufNoY6q+2r9wGo0GAoFARxO5XM4sCaIoqktDp1KpIJPJ\nmBGfrfv4aBx913qYqq12Dj0ejwe5XK635gatET35oc/Q0YlI6RGfsT4+g9MuSqUSkydPxquvvsoM\nXX18fJjp/ddee40Z3jroPuboqx13pz30166tQR8zBD05Yi9xfICj71oTc7Tl8XhM3F1nr6fa/Zju\nv/oMGt0W/V9j6dKhQwjB/PnzERsbi8WLFzPHy8vL4e/vDwDYt2+fSYkcHZivb/tKaPriptof6+6+\nreLou9bDXG31rbIwtG/MOd1ZuWG0j4+2up999hm2b9+O7OxsJhZvw4YN8PX1NfpDHbTh0Nd6OLS1\nHnahrUnz2YSQo0ePkqioKNKrVy+yYsUKU5tx0AkOfa2HQ1vrYSvammT4VCoVCQ8PJ0VFRUShUJCE\nhARy7949S9/bM4tDX+vh0NZ62JK2JuUiysrKQq9evRAWFgYOh4Np06bhwIEDlh6MPrM49LUeDm2t\nhy1pa5LhKysr08kqGxQUhLKyMmb/2LFjHWZlrLH169cP/fr161DtydZ5mvR1aOvQ1lieJm0N6WtS\nmD7t0AwLC4ObmxskEglaW1uxdu1aqNVqLFy40JRmu82NGzeeyOc8aSiKwo4dO3D58mWwWCxIJBKM\nGzcOAHT01Q470Wg0EAqFOu20trbqZFnual+pVOrE8clkMrvU11htrY29agsYtgs8Ho/pu3Qcn3Yw\nfmNjI8RiMZN2nqLa4vjanyMSiSCTySCXy5mY1MbGRqO0NcnwBQYG4uHDh6AoChkZGdiwYQMTR0YP\ndwsKCkxp2gHa9FWr1cjIyICHhweWL1+uV9/2RswcuFwuk+GWEGIXyUj1Yay2DrqPsXbB2dlZx4jp\nC6GiC9x7eXlBo9HgwYMHej9TO+5UJBJ1CPHqDJNedRMTE5GXlweVSgW5XI6dO3di4sSJADoOd82B\nzWYjKCgI06dP7zCaAYCEhATMnz/f6Cy6tkJiYiKUSiVKSkqgUCiM1peiKJNShLFYLPTv3x8RERFw\nd3dnfrkd2prGiBEjsGLFCgwZMgQ+Pj56z7FXbS1lF5ydnfH888/j/fffx9KlS+Hn52d03j1j7IJJ\nho/NZuPrr79GZWUlwsLCUFNTw9TGoL802ri7uyMhIaHbZfa4XC6GDx+OQYMGQSAQdPh7dnY2/P39\n8c4775jyGE8tbDYbXl5eGDJkCNzc3NCzZ08mb5w+felrPD090a9fP7i4uECj0YDD4XQ4R9++SCTC\nkCFD0LdvXybbLQCHtiYwaNAgLF++HP/v//0/LFiwgMlu3R571dYYu9B+tYb2PiGEGcG5u7sjMjIS\nKSkpeOmll+Du7s70za7aMMYuGDR88+bNg6+vr04Udl1dHb766isEBwcjJSUFGRkZWLduHTIzM5nh\nrjZcLhf9+/dHr169DH1ch+tGjhwJNputk3OLhqJse9lRZ9qmpqZCIBAgOTkZd+7cQWFhITIzMwFA\nR9/W1lZmo526qampANrqE7Q3dO0NIb0fFBQEjUaDe/fuoby8nHltfpa1NZX+/fsjISEBhBAkJiZ2\nep4tawuYZxfkcjkaGxvR2NjYYf04RbWtQVcqlaiurkZDQwMkEgkGDx7MLIkD/uvflslkaGxsZNqk\n2zCkr1F1ddvPjqxYsQKpqakoKCjAqFGjsGnTJrz44ovIyspihrvajBw5EtOmTQOXyzX0cTqEhoZi\n9OjRehMa0tjysqPuagtAR18+nw+BQAAulwtvb2+MGzcOFEWhublZZ+TWGRRFwc3NDePHj8dzzz0H\niqLAZrMZ3+GzrK0p9OnTB/PmzQObzcbVq1cxY8YMFBcX6z3XlrUFzLMLIpGI2TpbFy4QCBAQEAA3\nNzeo1Wrcu3cPOTk5cHJy0unXtL+Q3mgM6WtUXV13d3edYwcPHsSUKVMglUoxe/Zs7Nu3DydOnECf\nPn2Y4a42HA6nw2jDGFatWgVCCEpLS/XWJk1ISMDZs2exatWqbrf9NNBdbQHo1Zf8pyCzh4cHSktL\n9Y6O25/PYrEgl8sxdepU/PGPf8S1a9dQUVGh06kc2hpPZGQk/vGPfyA+Ph6EEPzjH//A7du3O510\nsmVtAcvYhc6gKAosFgteXl5wcXFhZt/pNPOGXBLG2AWTZnUrKysBtD08IQT5+fmYM2cO0tLSAABj\nx45lznV3d0dsbKzeyYmuYLFY8PDwQENDA27evKn3nM6O2zKGtAV09SWEwM3NDcOHD4dYLEZJSUmH\nX0V9UBQFPp+PuLg4NDQ0ICMjA1KpVKdT7d+/38JP9/vSXW2NhaIojB49GvHx8WCxWDh48CD27NnT\n5TX2pi3QPbvQGXS/lUqlaGxsBEW15ePjcrmQyWRwcnJiQlw6wxi7YJSPb+DAgTqvADKZDElJScws\nokAgwN/+9je917NYLNy+fRtXr141WPtVm8GDByMkJARSqRT19fVGX2dLmKst7d9js9lwcXFhEo6y\nWKwOnYP8pxo98F9H88iRIzFgwAAUFhYiNzdXx2do65irrbGwWCxERERg4sSJ8Pb2xoMHD/DZZ5+Z\ne/tPPeboS/v3aB+fNnQQspubG1NeVqPRoLGxERwOp8OIj/bx0ZuxGOXj+/e//61zTCgUYsGCBbhx\n4waOHDmCwMDATq8PCgrCwoUL4e3tbdCAsVgs+Pv7Izk5GcuXLwePx8O5c+fsNq23udry+Xy4uLhg\nxIgRGD58OC5fvoyKiooO59GvDrSBjIqKwvjx4/Hee+9BIpHg8OHDUCgUEAgE4PP5OvGBtoq52hqL\nl5cX/vznP2PIkCGora3F2rVrcf36dbPbfdoxR19DPj5CCJycnCASicBisdDY2Ija2lq9A6fOfHyG\nMPiqm5SUxExJ05hSt0AqlepYd19fX3C5XISFhcHFxQV+fn4ICgpCQEAA/P390b9/fzQ3N2PPnj12\nkyOuPZbQlsPhICQkBCqVCsXFxYz/zs3NDa6urvDy8mJ8JQEBAXB1dYWLiwsiIyPRs2dPrF+/HufO\nnTP4+mBrWKrfdoVAIMCoUaMwZswYyOVyfPfdd9izZ49dZFc2hDX1pSiKsQkajQYSiQQ1NTXQaDQm\nxanqw6i6uqdPn4ZcLkdwcDA+/vhjJCUlYfXq1eDxeExu/c4ghECtVuO5555Deno6M+qLj48Hh8OB\nt7c3FAoFJBIJamtrcffuXRw+fBhDhgyBQqGw6/qk5moLtP3ieXp6QiwWY8KECejXrx+USiVCQkIg\nFArB4/FAURTq6urQ2NiI0tJSnDlzBvPmzYNGo8GZM2cgkUiY1wh7wRLadgWLxcLAgQPx/vvvIzIy\nEtnZ2di9ezdqamos+BRPL9bSl6IoEEIgEong7+8PoVAIFxcXCIVCixk9wMiaG8XFxZgwYQJu374N\nAN2qW8DlchEZGYmXX34ZQ4YMYSqpCYVCnDt3Dg8ePEBeXh4kEgkaGhpQX1+PwYMH49ChQ8jJycGA\nAQM6vS97+KKaoi3Qpi+dcj4wMBATJkzAwIEDodFoQAgBl8tFdnY2CgsLUVpaitbWVrS0tKCpqYmp\nadzY2IgpU6agubkZarVa51VCJpPZvL7maGsId3d3fP7555g3bx6AtgiE5cuXo66uzqh7s3VtAdPt\ngvYrqfa6XW169eqFDz/8ENHR0WhtbcXHH3+MU6dOMYaRhl6rS2NskawuR3x04eCysjKUlpZizZo1\nWLRoEdhsNtLS0lBSUgJfX1/U1tZ22oZCoUBeXh7Wrl2L9evXM8cJIWhqaoJcLu8QfjFmzBjweDwc\nP37c4APYMg8fPsT06dORl5eHuLg4vP7661i0aBHq6urw8ssvo6CgANXV1fjyyy8hFos7XE/74urr\n67Fr1y7s3r2b+RtFUUyRcNqgqdVquLq64qWXXoJQKMSaNWvQ1NQENpsNJycnnZAjW1+ra662XUEH\ni48aNQqEEBQWFuL06dN2OwnXHnPtQle+ONqweXp6MrGojY2NcHJy0vuD1L5GjEXW6nI4HKxatQon\nTpxAz549sW7dOuTk5GDp0qVITU3FgwcPjHIoyuVyVFVV4fHjx8xWXl4OqVSqN+aMfpC9e/ca9RC2\nCofDwdKlSxEREYFLly5h3bp1OHfuHBMI+uabbyI8PBwrVqzosh21Wo2WlhY0Nzczm1QqRWtrK5RK\nJRMDqVar4enpicjISNy8eRO//PKLUYHOtoiltNUHm83G9u3bERISgurqavzzn//Er7/+apc66sNS\ndkEfarUaTk5OKCwshEgkApfLRVNTE6qrq6FUKjuM+EylyxGfn58f3nrrLZw9exY1NTVgsVjYvHkz\ntm7dioCAAGzbtg3+/v4m18U1hCXf6Z9GtLWNiYmBt7c3li1bhszMTPTs2RORkZHYsmULpkyZYvAL\nSgjRCfLW/nWk/00IQVBQEHx8fHDx4sVuhRfZGpbUtj1isZjJGnL37l1kZGQYDBq3J6xpF5ycnBh3\nWHZ2NgICAhAUFARPT0/w+XzG+JmLwcmN7du3A2h7n09JScGHH36IzZs3IycnB0Dbl8nDw8PsG9FH\naGioTa+g1GklAAAgAElEQVRnNAStLfBffc+ePYuQkBDcu3cPQJu+dGBoe7Tj7dhsdperY+gQgdDQ\nUHC5XNTX1zOxfdqvxfaCudp2Bp/Px8aNGxnN8vPz8ejRI4veuy1gjl3Qfh1t7+Oj+ym91lypVMLJ\nyQkhISFMX9WOQGjv4zMWo3x8FRUVKC4uxowZM+Dq6gqZTIagoCDGkWmtL4y1DOrTgrn6difejhAC\ngUCAsLAwEELQ0NAAmUzGzOa2X1ZoDz4+a/TdqKgoDB06FGq1Grdu3cLWrVvtNs60M8zV1hgfn1Qq\nxe3btzFo0CCw2WzIZDK9IVdW8/GtXLkSISEh+Oijj5CZmYmcnByrBILqo2fPnlZp92nhSeqr0Wgg\nFosRGBgIpVLJTCpZymfytGEtbQUCAcRiMdRqNR48eIALFy4wr2bPCk+i37a2tuLSpUvIzs6GQCDA\niBEjur3stSu6NHy+vr5Ys2YNYmNjkZ6ejpiYGJSVlVk8ELQ9+fn5dvllbI8l9dXnT2l/TC6XgxCC\nqqoq5OfnM8fpX1Fr+Wp/D6zVd6urq1FcXIxz585Z47ZtAnO1bf82oW+fEILi4mL89NNPOHToEK5e\nvYqYmBhmva6hNgxhdEFxpVKJvLw87Ny5E5cvX8bq1auh0WiYQMXQ0FDdhs1wQPr7+yMxMREFBQWM\nP0Yftm4czdVXOztG+3oa+o4pFArExsbC2dkZBQUFqK2t1Unwqn0+7QO0VazVd3k8HhITE1FdXQ2h\nUGhy7YxnWdv2y8vo+hn69tlsNoRCIaqrq+Hi4oLm5mZwuVw0NDTovaa0tNQobY0KYG5qasLw4cPx\nwQcf4IUXXuhWALM1seXOo42p+ppabIh2EhsqNmQP+jr6rvUwVVtjig1p79OxfCKRiMk81FWxIWO0\nNRgvolQqMXnyZLz66qvM0JXOhGrrGZCfBszRl04owOfzuxX6o++LzeFwmCSk9pCkAHD0XWtijrba\niQU6S0SqjXbpyPZGjW6rfQEjQ3Q5q0sIwfz58xEbG4vFixczx8vLy+Hv7w/A9jPJ/p6Yq2/7lQL6\n/BzG+FMMtWGLOPqu9TBXW30ppAztG3NOd9JSgXRBZmYmoSiKJCQkkL59+5K+ffuSI0eOkJkzZ5Kw\nsDDC4/GIUCgkH3zwQVfNOOgEh77Ww6Gt9bAHbbs0fJ2hUqlIeHg4KSoqIgqFgiQkJJB79+5Z+t6e\nWRz6Wg+HttbDlrQ1aU0YXRw4LCwMHA4H06ZNw4EDB0xpyoEeHPpaD4e21sOWtDXJ8LUvDhwUFISy\nsjJm/9ixY4iOjkZERAQ+//xzAICLiws4HA74fD4GDRqEefPmwcfHh0mKmZycjNDQUOacoKAgbNmy\nBUlJSXBxcQGPx0N0dDQaGhrw0UcfISgoCP369UO/fv06VHuydbqrb3ttAWDGjBng8Xjg8XhIS0vD\nnTt30KNHD+Y8Pz8/JCQkIDo6Gi4uLvDx8UFaWhref/99h7Za2oaFhcHDwwMcDocJ/THUdx3atvE0\n2wWjwlnas2fPHhw7dgwnT56Em5sbJBIJWltbUVlZCbVajaioKBQUFHS32W5jwq3bBHv27MGcOXPQ\no0cPpsLUuHHjsHbtWoe+ZuLQ1nrYkl0wqcoaXRyYoihkZGRgw4YNTDgFPdx9Eg9orwQGBkKtViMj\nIwMeHh5Yvny5Xn09PT2Za1paWnSCkfUda21thUAgYDpG+79r73eVY9GWMVZbB93HWLvQPjFB+6Li\n7feNOUc7js8YTHrVpYsDq1QqyOVy7Ny5ExMnTgTQcbhrTRISEjB//nw0NDQ8kc97UiQmJkKpVKKk\npAQKhcIi+rZPU0VvXeHQ1nrYq7aWsgtET1VAYzHGLphk+OjiwJWVlQgLC0NNTQ1TeORJFqzJzs6G\nv78/3nnnnSf2mU8CNpsNLy8vDBkyBG5ubujZsydiYmIAdF9f+nw6Jb1arWb+beiVwKGt8bBYLIjF\nYowaNQqvvPJKlynCAPvV1ly7QPdJDocDsViM6OhoTJw4ER4eHka3YYxdMOlVF2grDlxSUgJ/f39U\nV1cjNTUV0dHRzHD3SUBHiE+YMOGJfN6T5Pr16zraZmZmIikpSUdf7XRI+joFl8tl8pux2WywWCzw\n+XwoFAqo1WpmxYdGo2EyNWu3+SxrayxCoRBjx45FXFwcZs2aBbFYDBaLhZCQkC4TnNqrtsbYBY1G\nwwTKs9lssNls5oeYzWbD29sbL7/8MkaOHImwsDAIBAIMGDAAZ86cwdGjRyEQCMBisQCAKa2g3aYx\ndsGoguK+vr46Udh1dXVITU1FSkoK0tLSwOFw8OKLLyIrK4sZ7hoDRVHw9fXF66+/juPHj6O6uhpy\nuRxffvklXnvtNaxZswb9+/fvsg1bjr7vrrYAdPQVCATMpm+ZGYfDgUgkwtixY/Hll1/i1KlTyMrK\nwj/+8Q9MnjwZH330EVJSUpgkpi4uLkx7wLOtbVdQFAUPDw9MnjwZhw8fxtatW7FkyRJoNBrcv38f\nAoEAs2bNQlhYWKdt2LK2gHl2QSAQMHn0aMNHazpmzBhs2rQJb7/9Nnr37o36+nrcuHEDY8aMweLF\nixEcHAyNRsOMqNlsNpydnZk2aQzpa1RB8fbTwitWrMDw4cNx7do1jBo1CsuWLcOJEyfQp08fZrhr\nCIqiEBwcjGXLlmH58uWIiIjAqVOnsHXrVvzpT3/CN998g7lz52LMmDGdtpGQkICzZ89i1apVBj/v\naaS72gIwWl+6IPPMmTOxePFihIeH4/Lly/jmm2/g5eWF9PR0TJgwAUOHDgWfz2eSPGqPHB3a6ici\nIgI7duzAjz/+iGHDhgEArly5grlz52LGjBnQaDTw9PTscu2oLWsLWNYuEELg4uKChQsX4rPPPkNs\nbCyUSiWqq6uxZcsWLF68GBkZGejduzeef/55gzkkjbILxkQ5FxUVkbi4OGY/KiqKZGVlkYSEBBIb\nG0u4XC757LPPdK4B0OUWFxdHNmzYQBoaGsjRo0fJhAkTiFgsJj179iSnTp0iSqWSlJSUkGHDhnXa\nhj1giraEtOnr6empd/Pw8CDx8fHk//7v/8iNGzfIwYMHyYwZM0h4eDgJCwsj//znP8mDBw/I3bt3\nyYwZM4ivry9zrZeXF/H09LQLfc3Rtqvts88+IyqVisjlcvL48WNy8OBBkpKSQthsNomPjydyuZxU\nVlaShIQER9/VYxdEIpHOJhQKSWxsLNm7dy95/Pgxyc3NJRcvXiTLli0jERERxN3dnSxcuJDU1NSQ\njRs3koCAAOLm5tahHZFIZLS2Jvn4KisrMXDgQGRnZzO59f/2t78Zff3o0aPx/vvvY/Dgwdi/fz++\n/vprXL16FWq1Gn/961+RmJgIiqLw3Xff4cqVK6bcos3SHW21/XEcDgdcLhdqtRpxcXGYPXs2hg4d\nimvXrmH79u24fv06mpqaMHHiRDz//PMQCoX4+eefkZWVBaVSCbVabfcFc8zttzQ5OTk4ePAg7t69\ni/v37+PatWvIz8+HSqXq8vXW3jFWX+1EGHRp0/r6evz888+or69Hbm4uCgoKcPfuXVRVVYGiKJSX\nl6OqqgrPPfccAgICmNdm7fKp3cGg4Zs3bx4OHToEqVSqc+Om1i0YN24cVqxYgYiICBw5cgR///vf\nUVJSAoqiEBUVhbS0NAiFQvz0009Yu3atSYVEbAVztaV9cfTrKW30Fi1ahP79++PWrVvYsGEDcnJy\n4OTkhODgYAwePBg+Pj44f/48tmzZgtraWqZmKZ2LD9AtZGSLWLrfarNr1y6cPXsWdXV1aG1t1Uk9\n36dPnyca2fB7YY6++lJRNTc34/jx47h27RokEgmTLZzFYkGhUEAmk6G2thZxcXGIj49HQUEBNBoN\n4yOkMdZeGDR8c+fOxeTJkzF58mTmGJ1b/8MPP0R5eTlGjBhh1IcJBAL85S9/QVRUFI4fP445c+ag\nqakJLi4umDNnDhYuXIjQ0FBkZGTgvffeM7oqva1iSW1pv8eIESOQmJiIu3fv4qOPPsKjR4/g4uKC\nYcOGYc6cOejZsycKCgqwbt06FBYWMnV17a32hiW1bY9cLkdpaSkAIDIyEqNHj2ac7SkpKaAoCleu\nXGEqjtkjltaXoiio1WpUVFQAaItIGDx4MHr37g2VSgV3d3dmZMhms9Hc3KwTjN9dDBq+pKQkJhaH\nxtS6BWw2G76+vmCxWFi6dCmio6Mxe/ZsjB49GsHBweDxeNBoNNi6dWu3y/7ZIpbUFmjrPEKhEB4e\nHjhw4AAEAgEWLVqE5ORkBAYGMlmbL1y4gLy8PJ3kpfZk9ADLa6sNh8NBUFAQRowYgcWLFyMqKoop\niQi05aV766237Np1YA19yX/CWUJDQ5GUlITp06cjICAAQJvt0Gg0qKysxG+//QahUKhTR7q7GDR8\n06dPx+nTpyGXyxEcHIyPP/4YSUlJWL16NXg8HpNb3xgUCgWuXbuGmJgYxudUWVmJsrIy1NXVISYm\nBrW1tc9MVXpLaUuP2ADg/v37yM3Nxd///nfI5XJUVlbi0aNHKCsrQ2RkJBQKBa5fv47Gxka4uLhA\nrVbb3WgPsGy/paEoCl5eXpgyZQqWLl2KhoYGlJWV4eLFi4iLi8OAAQPA4XDg7OyMBQsWYOXKlaip\nqbE7bQHL60sIAY/Hw4ABA/Dhhx9CIBCgoKAA586dA5/PR0pKCkQiEcRiMdLT0/Hdd9/h1q1bUKlU\nJulrsK5uRUUFxGIxJBIJ3n33XcydO5dx6JaUlEClUmHJkiXYunWrwQ+TyWRYtmwZKisr4e3tjUeP\nHiErKwv5+fl47bXXEBsbiwsXLqC5ubnbD2KLfPHFF5g6dSokEglEIhGkUinefvttvPvuu5g2bRqu\nX7+O559/Hnfv3oVYLO5wffvJDQ6Hg6NHj0KhUCAqKgp1dXUoKCjA/fv3kZiYiKioKOTn56OiogIc\nDkfnF1OpVNpVlTVztW0PRVGIj4/HrFmzsGjRIly/fh1LlizB3bt3ERgYiKVLl0KtVuP+/fsQCoX4\ny1/+AoqicOjQIdy5c4epDWEPpSjNtQvtJzdYLBY4HA6ee+45/M///A8CAwPx008/YevWraipqUFa\nWhoGDx4MPp+PO3fuICoqCu+99x6OHTuGM2fO4NGjR9BoNN3zS3c15VteXk5u3LhBioqKSExMDImM\njCT37t0j7777Lvn8888JIYSkp6cTLy+vDtfCQEiA9hYQEEB++OEHolarycKFC4mzs7NR19k65eXl\n5PDhwyQuLo5IpdIO+hYVFRFfX1+Snp7e4VoYCGdxd3cn7u7uxMPDgwQGBpLFixeTwsJCsmbNGtKj\nR48O4SvtN1vX11xttTeKosigQYPI/v37SWNjI9m2bRsZN24ccXV1JSNHjiQHDx4kFRUVZNu2bWTk\nyJHkxRdfJBs2bCBXr14lWVlZZNeuXWTTpk0kLi7OLvquuXahfQiKq6srGTZsGNm3bx8pKSkh69at\nI8OHDyd+fn5k/Pjx5MCBA+TevXtk3bp15LnnniOTJk0in3zyCdm9ezfZv38/+fHHH8nmzZvJ4MGD\nLRPO4ufnBz8/PxQXF4PFYiEyMhJlZWXYu3cvLly4AKCt4I25M6+1tbUoLy8HIQRlZWV2NfLoCj8/\nP8TGxgJoy0sWExODW7du4eDBgzh79ix++uknDBkyBPv37+9y+ZM22kHIRKuaWnl5OdRqNSQSCVpa\nWpilavaKJbWNjY3F+++/j+HDh2PDhg34/vvvERQUhE8++QQjR46EVCrFsmXLcPjwYZSWloKiKJw/\nfx7R0dGYMWMG4uPjcfr0abvJeGNJu6DRaCASiZCamorExERcuXIFu3btgkqlwty5c5Gamgo+n49t\n27bh4MGDKC0tRW5uLq5evQofHx8MHToUw4YNQ2NjI5qamox+BqN8fGfPnkV1dTVycnKQlpaGhw8f\nIjU1FRRFISwsrFsVvvTh4eEBPz8/s9qwRWhta2pq4O/vD6VSCT6fj7y8PKSlpaFHjx745ptvmEX0\nxkC0/H30Pp0ck14aBDzZZBK/B5bUdsKECRg1ahQ4HA6Sk5ORnJyMyMhI8Pl85Obm4pNPPsHp06eh\nUCgYf1N1dTVqa2tx7do1cDgcyOVyuwrNspRdIP9Zoztw4ECo1WpERkbi/fffh5eXF9zd3aFQKHD4\n8GHs3LkTtbW1zPlSqRRNTU0oLS3Frl27oFaru+VG6PLO6Hd5kUgENpuNOXPm4I033oCTkxPq6urg\n5OSE0tJSs/0Wrq6uOsWxnxW++OILREVFITw8HA0NDXjhhRewfft2cLlc1NbWoqSkBGPHju00Hqql\npYXZtEfJpJ2zl8vlwsXFRWfmsT1KpVKnPVvHXG21uXfvHurr66FWqxEbG4uwsDDs3buXWVJ57Ngx\nJu5MGzrpQ2Njo93UKQbMtwsymYzZgLY1vsePH0d5eTmzlLW5uRk7d+7EO++8g1WrVqG6ulpnWSX9\nwy2TydDY2Ijm5uZu+fi6HPFxOBysXLkSS5YswZw5c/Ddd98hJyfHYvFQNOXl5cjLy4NGowGXy7X7\n0QiNufq2TzyqjfbIr6mpCfn5+UwVejab3SHUgp4cobH1AGZL9t2jR4/ipZdeQv/+/SGXy/HLL79A\nKpWaHABt65irbfsAZhaLhe+++w5HjhxBv379wGazcePGDSZtfVf2QDu7C0VRRo+quxzx+fr6Ys2a\nNYiNjUV6ejpiYmJQVlZmsXgoGqlUikuXLqG0tBS+vr5M7I69Y0l99flFlUolCCFQqVTIz8/Hzp07\nER4ejri4OFAU1SEUwJ58q5bW9vr169i0aRO2bNmC+vr6Z9boAeZr2147lUoFJycnVFVV4ejRo9i3\nbx/Kysp0iojru0ab7r51dllz4/z580hOTkZ8fDyUSiXy8vKwc+dOXL58GatXr4ZGo2HidUJDQ3Ub\n7uaozc/PDx9++CFyc3Ph5eWFTz/91GBxa1t/dTBXX2NSzwuFQhBCwOFw4Ofnh9WrV6OsrAxr1qxB\ndnY2XFxc9Kaip/0ptsqT7Lum8Cxra+3U80Zpa8zUr1QqJQMGDCD79u0jhBBSWVlJNBoN0Wg0ZMmS\nJWTevHl6p627szk5OZGIiAjyhz/8gRQVFZGIiAi7D2ehMVVfPp/PbFwut0NICp/P1wlZEYlE5NVX\nXyW//vorEzbk7e3N/I3NZjPt2Yu+T6LvmrLZA6Zqy2KxCI/HYwqP83g8nfCW9vv6jtH79PV0m8Zq\na7DKmlKpxPjx4zF27FgsXry4w9+Li4sxYcIE3L59W+e4Kb+a9EJ5kUiEhoYGg68TBm7dJjBH3+4W\nG2ppaYGbmxsEAgGUSiVqa2u7LDZk6/o+yb7bXZ5lbZ+GEV+XkxuEEMyfPx+xsbE6D1deXg5/f38A\nls0kSwiBUqlETU2NRdp72jFX3/ZxYfomJNof6+6+rfKk++6zhLna6gvtMbRvzDndCRcy2sdH/wp+\n9tln2L59O7Kzs0FRFHr06IENGzbA19fX6A910IZDX+vh0NZ62IW2pr7fHz16lERFRZFevXqRFStW\nmNqMg05w6Gs9HNpaD1vR1iTDp1KpSHh4OCkqKiIKhYIkJCSQe/fuWfrenlkc+loPh7bWw5a0NWmt\nGV0VPSwsDBwOB9OmTcOBAwcsPRh9ZnHoaz0c2loPW9LWJMPXvip6UFAQE2UNAMeOHdNZWmKtrV+/\nfujXr1+Hak+2ztOkr0Nbh7bG8jRpa0hfk4oN0Q7NsLAwuLm5QSKRoLW1FWvXroVarcbChQtNabbb\n3Lhx44l8zpOGoijs2LEDly9fBovFgkQiwbhx4wBAR1+hUMhco1ar4ebmptNOc3Mzcw4hBM3NzXBx\ncdH7d4VCwSxpo/9mj/oaq621sVdtAcN2QbtOBpvNhkql6hCa0r5OdGtrK/h8PhOqQoev0MWGVCoV\n2Gw2ZDKZUdqaZPjoqugURSEjIwMbNmxgFr/Tw92CggKj2hKLxUhOToanpycuXbqE3Nxcm49xMpfA\nwECo1WpkZGTAw8MDy5cv16uvtuHrKnmrUChE7969UVpaCg6Hg7Kysg4pqbhcLpRKJdOmvSaDNVZb\nB93HWLtAFwGn0Y7XpZeo0ZnBach/srK0hzaitCE0tNqLuc6UB6SroqtUKsjlcuzcuRPbt28H0HG4\n2xUURSEhIQErV65EQEAAPv30UxQWFhodj5OQkIDExER8+eWXRmXRtRUSExOhVCpRUlICFxcXk/UF\n2haA9+/fH4sXL8bPP/8MoC3GyhiN58+f79C2EyiqLQ29SCRCUlISHj58iFGjRjF/V6lU+OGHH1BY\nWKg376G9amuqXaAoCq6urszSyj/96U9QqVSM8Tt79iw8PDxw5swZnWQa+jDGLphk+Oiq6JMmTUJY\nWBi8vb1x/vx5xMTEdCvqnaIoprQhn8+Hp6cnuFyu0YYvOzsbS5cuxTvvvIPNmzeb8ihPJWw2G15e\nXhgyZAiAtpKcdN64zvTV1xk4HA5YLBZ8fHyYpI3nz59nfjnbX9N+39/f36GtHkJCQtCnTx9MnToV\n7u7u6N+/P+7fv4+UlBTmHI1GAw8PD/zyyy84depUhwQQ9qqtMXZBuxwk0JYoduDAgUhJSWHqwLz0\n0ks6hi8uLg5BQUHw9/fHL7/8AqVSyYwO27dpjF0wOLkxb948+Pr66kRh19XV4auvvkJwcDBSUlKQ\nkZGBdevWITMzkxnuGoNGo0FFRQUePXrEHDNkzbWhKAqvvfYakxHC1uhM29TUVAgEAiQnJ+POnTso\nLCxEZmYmAOjo29zczGz64PF4UKvVkMvlUCgUiI+PR21tLfMaQfvzgDYfn1Kp1GnvWda2K95//31s\n3LgRU6ZMQVpaGvz9/XWMHgA4OTlh3rx5mD17dgffK2Db2gLm2QWVSsXk45PL5YiKisKsWbMwadIk\npKWlMVld6HocFEVh2LBhCA4OxnvvvYexY8eCx+MxWVtkMhnzX8A4u2DQ8M2dO7fD7MiKFSuQmpqK\ngoICjBo1Cps2bcKLL76IrKwsZrhrDE5OTvDw8ICPj49R5+vDlpcddVdbADr6CoVCZtM2YsB/14IK\nBAJERERALBajvr4e9fX1el+9uFyuTnvAs61tV5SUlMDHxwcUReH69ev4+uuvme3s2bM6I2oPDw+4\nurp2aMOWtQXMswvOzs7g8/lwdnYGh8PBw4cPUVBQAJFIBIFAgAcPHmDHjh3Ys2cP9u3bh9u3bzMj\nZpFIhD/84Q+MpnRVO3qjMaivMcF+RUVFJC4ujtmPiooihYWFRCKRkPLychIZGUmef/55cvz4cUII\nIUeOHDEqQwWbzSbjx48nFRUVRKVSkT179pDnnnuOsNlso66Pj48nkyZNIhUVFRYMbXyydFdbQv6r\nr4+PT6ebt7c38fX1JYmJieTQoUOkpqaGnDt3jrzyyiskNDSUeHt7d3k9gGda2642DodDgoODSWBg\nIBGJRDp/c3V1JUVFRUSlUpGqqiryzjvv6O3Ptq4tIabbBbFY3GHz8vIicXFxJCEhgURHRzMZhby8\nvIifnx/ZsGEDKSwsJKWlpeTbb78lAQEBRCwWE3d3d512jLULJvn46GLfSUlJIIQgPz8fc+bMQVpa\nGgBg7NixRrWjUqmQnZ2NkydPYvr06Zg0aRIePXqEnJwcNDY2Grz+5s2bptz+U40hbQHj9QWAhoYG\n5OXlISEhAVFRUUhLS8Pt27fR1NTEZK7tjP3795v+IE8hltJWqVTqfSXm8/kYN24ckzWnpaUFxcXF\nerMM2Zu2gOl2gaLakuI+evRIpz/SPjwPDw8meQadvcnFxQVSqZSpI6N9nTF2wSgf38CBA3VeAWQy\nGZKSkpjJCYFAgL/97W8GP0wfjx49wq+//tqtSRF7wVxttX187VPJ051BIpEgNzcXLBaL2W9tbWX2\naeg4vq58hraEtfutNi4uLujduzcWLFiAhQsXMvFmBQUFOHz4sNntP42Yo692zQ3tLODak50URYHD\n4aBHjx74wx/+gOjoaABgyibQtaGVSiVaW1t1angYg8ER39y5czF58mRMnjyZOWbpmhs0z5rxM1db\n7Tg+fdAdyNvbG3w+HxKJBNXV1ZDJZB1+Jblcro6f0NaNnzX7raurKyIjI+Ht7Q0AiI6OxtSpU9Gn\nTx/w+XwolUr89ttv2L9/v92mqDdH3/a59micnJzg4+ODgIAAcDgceHp6YuzYsejbty+EQiFYLBby\n8/NRUlLClK/kcDg6M7oWi+NLSkrC+fPndY5ZuuYGYPuJGU3BmtqS/xRfYbPZCAgIAIvFQnNzM2pq\nauz2y6iNtbT18vLCwoULMWLECCYuTSwW68zc3r9/H2+//TYT02aPWEPfXr16Yfbs2YiOjgaPx2NC\njzgcDhPUfObMGWzcuNHsyo5G1dU9ffo05HI5goOD8fHHHyMpKQmrV68Gj8djcuubS/sRyLOAtbWl\nqLZstwEBAaAoClKpFLW1tUyZPnvGWtp6eXlh9uzZCAkJ6fQcsVgMmUxm86PmrrC0vhRFQSAQICkp\nCWKxmOmf9H81Gg00Gg369esHV1dXSKVSAKYPmAymngc6ppGuqqpihvlLly5FeXl5h0DB7nyx5s6d\ni82bN4MQgiNHjmDevHmorq42eJ09GEpTtAXa9NV+1eVwODqvqhqNBmw2G97e3vj2228RHR2N/Px8\nrFixAmfPngWbzdZZFkTH8dE0NzfbvL7maNsZQqEQY8eOxciRI3Hr1i2dEd3AgQMxbdo0CIVCpKWl\n4ddff+20HVvXFjDdLmi/6mqv2xUIBBg4cCCSkpJQU1ODhoYGODk5Qa1WIygoCKNHj0ZkZCQ++OAD\n7N69G0qlklmnS2Ns/eIuR3wPHz7ErFmzUFZWhtLSUqxZswaLFi0Cm81GWloaSkpK4Ovr2yEFuimQ\n/6zFGz58OHr37q0TD2WvPHz4ENOnT0deXh7i4uLw+uuvY9GiRairq8PLL7+MgoICVFdXd7r0pisf\nH9t1LAgAACAASURBVD2CFovF8PX1hUKhQGBgIPz8/MDhcDqshbQ3H5+52nZGc3MzDhw4gFOnTqG1\ntVWnjx49ehSpqakGfa+2jrl2oTMfX2trKzIzM3Hjxg2o1Wrmh5juy4WFhfj2228xYMAAnDhxAjU1\nNSb7+Lqc1eVwOFi1ahVOnDiBnj17Yt26dcjJycHSpUuRmpqKBw8eQCQSGfVBXXH//n1cu3YNQFtI\nwMyZM+3+VQxo03fp0qWIiIjApUuXsG7dOpw7d44JBH3zzTcRHh6OFStWdLtturPQYQV00HLfvn0h\nEAjsXl9raqtUKtHQ0MCsiKG3Xr16gcfjWeFpni4sbRfoSThCCDQaDSQSCROpQG9yuRxVVVV4/Pgx\nBgwYwLhvTKXLEZ+fnx/eeustnD17FjU1NWCxWNi8eTO2bt2KgIAAbNu2Df7+/mYXoq6pqcGjR4/Q\nr18/5hWOnra2Z7S1jYmJgbe3N5YtW4bMzEz07NkTkZGR2LJlC6ZMmdLtLyhFUYxfpKWlBSwWi/E7\nyeVy5u/2agAtqS2LxYKbmxuGDRuGixcv6oxk6Amk0aNHY8WKFfDx8ek0k4i9YGm7QPfBgQMHora2\nFvn5+Uy4Fd1PIyIiMHfuXBBC4OnpiT59+iA3N9d029OdKO2QkBAikUiIWCxmjms0Gp19GnSzzuhf\n//pXUlNTQ9RqNdFoNCQyMvKZqE1KY4q+QqGQ2cRisd6VGyEhIeSrr74ijx49InV1deTYsWMkOjqa\n+Pn56azeEIvFOu3Zk77m9t2IiAjy448/koaGBjJu3DgSHBzMbNHR0eTVV18lv/32G5HL5aShoYHc\nvHmTxMfHPxN91xRtnZ2dmU0oFBIfHx8ye/ZscvnyZfLzzz+T8PBwEhkZSXr16sWs/vjkk0/IgwcP\nSFFREcnNzSUffvghCQgIIC4uLjrtGautUT6+iooKFBcXY8aMGXB1dYVMJkNQUBDjyLTElH1hYSEe\nP35sV2l6DGGuvsb4kgghaGpqgkwmg6urKyorK/Vmv7FHH5+l+u748ePxxz/+ES4uLnjnnXd0VhW5\nu7ujT58+cHFxQUVFBX7++Wfs3r0bt27dstqz/d6Yq622j4+iKMjlcsTHx8Pb2xs+Pj5YunQplEol\nM+Lz9/dHREQEOBwOJBIJ9u7diyNHjqC1tdV6Pr6VK1ciJCQEH330ETIzM5GTk8MEKt64cQNHjhxB\nYGCgUR/WFXfu3MGdO3fMfm22Jaypr7bPpLS0FDKZDE5OTnj8+DETLW+vr7mAZbXNzc3FlStX0Nra\nipSUFEycOBETJ07EuHHj0Lt3b9TV1WHfvn34+OOPsWzZMly6dOkJPOHvh6X7rUqlwunTp5GZmQmJ\nRIJRo0Zh9OjRGDNmDEaPHo1evXoxmZV/+OEHbN26FQ8ePABg+ux4lyM+X19fvPfee4iNjUV6ejp+\n++03lJWVWSWAuaamBuvXr8f27dsRGhqKqqoqs9t82rGkvgqFokOGFoVCAScnJ9y6dQvffvstGhsb\n8fjxY+bXtP01+tqwVSyp7blz51BUVIQ33ngD06dPh1gsxsaNG0FRFK5evYqKigrcuHED1dXVz8QP\nt7na0mnigf8G2mdlZaGsrAwDBw5EaGgoZs6cCalUitzcXNy8eRNZWVmQyWTIy8tDS0sL1Go1k925\nfZvGYHRBcaVSiby8POzcuROXL1/G6tWrodFomEDF0NBQ3YafwGjCVGv/tGCuvtrpvLTrZ+g7RlEU\ns0/r1v4a7f2qqiqb1tcafdff3x+9e/eGs7Mzrl69CoqiUFNTY5Kxe5a1bZ9Cik4bT08UcTgcDB06\nFHK5HJWVlaioqEBVVRWcnZ071Nxo30ZDQ4Nx2hrjCJRKpWTAgAFk3759hBBCKisriUajIRqNhixZ\nsoTMmzdPrxPT2pu9YKq+2pMRzs7OHVJL0Y5jY/bFYjHhcDh2N7nh6LvWw1Rt2Ww2MxlBT07QaaXc\n3d119unN2dmZuLu7M2mo6HPo6+k2jdXWYHYWpVKJyZMn49VXX2WGrnQSRlvPgPw0YI6+2olDWSyW\nWfdBT25oJyK1dRx913qYoy1dbMjZ2bnD6ylpl5bKUMEhuq32BYwM0eVLMSEE8+fPR2xsLBYvXswc\nLy8vh7+/PwDbzyT7e2Kuvu39oPpmYtsf6+6+reLou9bDXG31pZAytG/MOd1JS9XluDAzM5NQFEUS\nEhJI3759Sd++fcmRI0fIzJkzSVhYGOHxeEQoFJIPPvigOyNkB//Boa/1cGhrPexBW5OcDSqVioSH\nh5OioiKiUChIQkICuXfvnqXv7ZnFoa/1cGhrPWxJW4M+Pn3QxYHDwsLA4XAwbdo0HDhwwJSmHOjB\noa/1cGhrPWxJW5MMX/viwEFBQSgrK2P2jx07hujoaERERODzzz8H8P/ZO/Pwpqr0j39v9rRpWtI0\nabrQja6UhsqOtizaKiib24AgSMuMMsKMAz8BRbSAIyADiIg7ysgggsNWFFlEW4oKOJYKyFZoC91p\nC23TNnvO7496r+meVZuQz/Pcp8+9ufck99s3b8495z3v25qem8vlQigUYujQocjIyIBMJoNIJEJM\nTAxSU1MRFhbGnBMSEoJt27YhJSUFIpEIfD4fcXFxqK+vR1ZWFkJCQpCcnIzk5OQO1Z5cHWv1ba8t\nAEyfPh18Ph98Ph/p6ek4f/48IiIimPMCAwOhVCoRFxcHkUgEmUyG9PR0LFmyxKOtmbbh4eGQSCTg\ncrnw8vICgB5t16NtK73ZL1iUj689u3fvxqFDh3D06FGIxWKmjkN1dTWMRiNiY2Nx7do1a5u1Ghs+\nukuwe/duPPXUU4iIiACbzUZjYyPGjx+PTZs2efS1E4+2zsOV/IJNVdbo4sAURSEnJwfvvfceE0VN\nd3d/jxt0V4KDg2E0GpGTkwOJRIJVq1Z1qm9gYCBzTVNTE0QiUZt2zI+RX9fsikQiJkSg/TXm+1VV\nVU69xz8KS7X1YD2W+oX2IVPdBdIDrUl1m5ub29huV9dYuuLLpkddujiwwWCAVqvFzp07MXHiRAAd\nu7vORKlUIjMzE/X19b/L+/1eDB48GHq9HtevX4dOp3OIvnThZTrez5JfRY+29hMTE4O//e1vSEpK\nanPcXbV1tF8wGo1Mcae77rqLSanWHZb4BZscH4fDwVtvvYXq6mqEh4ejtraWKTxi7VI1iqIglUox\ne/ZsDBs2zKprCwoKoFAosHDhQquu6+3QRVZGjBgBsViMyMhIxMfHA7BtKaBQKERaWhqTRcR8jWN3\neLS1D5FIhOeeew5PPPFEm+WFgPtqa6tf6OqH2Gg0Ijg4GP3790dGRgb8/Px6LDRkiV+wyfEBrcWB\nr1+/Dq1WizNnzmDz5s3Iy8tjuruWwuFw8PDDD2PVqlVITEy0bqGxG0ff5+fnQ6PRoLS0FEVFRcjL\nywOANvo2NTUxW2eGxePxQAiBQqHAjBkzMGbMGIhEImZhePsEBUajkWkPwB2trb34+Phgzpw5eOKJ\nJ3D48GGcOXOmzevuqq0lfsFoNLapB83lcsFiscBisUAIAZfLBdDqDL29vdG/f3+m3kZiYiJMJhNj\n23Q9aLpNwDK/YFFBcblc3iYK+9atW0hLS8OoUaOQnp4OLpeLKVOm4PTp00x31xoEAgFTT9OaZSeA\na0ffW6stgDb6ikQiZutsmRmPx2MKMwsEAiiVyjaFxM0dH4/HYyrU0+N8d7K2lkBRFIRCIbPA3hwf\nHx/MmjUL9fX1uHbtWof6E66sLWCfXxCLxcw4H71UkhACjUbTJi8ki8VCU1MTysrKkJCQAIlEAoFA\nAKPRyJxDL7Ok26TpSd8eHd/s2bM7TAuvXr0ao0ePxk8//YR7770XK1euxJEjRzBgwACmu2sLdBV1\nS1EqlcjNzcWGDRtser8/Gmu1BWCTvkKhEEKhEM3NzVYljfVo2z0KhQIrVqzAX//6VybUhWbu3LkI\nCAjA9u3b8eWXX3a41pW1BRzvF4xGI5KSkrB+/XpEREQwvT8ej4fGxkY0NTXh9u3bUKlU4HA43eaT\ntMQvWFRQvKSkpM2x7OxsJpZGr9fj6tWryMrKQnp6OoDW7q4t9OnTB3w+n6mZ2RM///yzTe/TW7BF\nW8A6feleCZ3ux5oe9b59+yw+t7fxe2gbGhqKqVOn4siRI/Dx8WEetaRSKZ566ik0NTUhOzu702pj\nrqwt4Fi/QNfVaGpqQkJCAl588UUsX74c5eXlMBgMaGhogE6nA4fDsWiM2hK/YFM4S3V1NYYMGYKC\nggIQQiCRSPDCCy/Y0hQAMPUxw8LC4OPjg9raWpvbcnWs0ZYeiwM6po4HfkvyyGKxYDAYIBAImMeK\n9r+WdDUrd8aRduvt7Y3U1FRwOBxUV1dDrVYDaJ09nzVrFiQSCc6ePYuysjJH3kKvxlJ9zRNh0PWg\nuVwuysrKcPr0adx///0YNWoUduzYATabDZVKheLiYgwdOhRjxoxhJkyAjvWgLaVHx5eRkYEDBw60\n6YU5suaGwWBAWVkZKioq4OXlZdXkhqtjr7bt4/baQ6efb2lpQUNDA/R6fZfOrb3jNHeqrogz7Zai\nKERHR2POnDm4fPky9u7dy7zPU089hQULFuD69etYsGABKioq7L+ZXog9+rYfjyaEgM1mQ6fToaWl\nBUKhEN7e3uByudBoNPDz84OPjw/YbDbKy8uh0+nA5/OZSQ5basVYNMa3devWDh/cUTU3CCFQq9XW\npZRxE5ytLQ2fzweLxYJarbYoDsodcKa2/fv3xyeffAKBQICtW7ciPz8fJpMJkyZNwgsvvAC5XI43\n3ngDly9fdssVGoBj9aUoCnq9HnK5HLGxsaivr4dKpYJarYZAIEBQUBDCw8Oh1+uZx2J76dHxpaSk\ndCgO7IyaGwDg6+vrNjUfLOH30JaiKHh5eYHP56NPnz7MBJK7fiFpnKGtUChEZmYmfv75ZyQmJsLH\nxweTJ0/GuHHjEBkZiUcffRQBAQF455138P777zvsXnojjtSXEAJfX1/Mnj0bSqUSYrEYjz/+OObM\nmQOJRAKtVguj0QiNRoP6+voOCUptocfnymnTpuHYsWPQarUIDQ3FihUrkJKSgo0bN4LP5zO59e1B\np9NBo9FgwIAB8Pf3t6stV+L30BZoHUM1Go2QSCQO+NSugaO1FYvFmDlzJlauXAmtVovz58+jubkZ\nY8eOxfDhw6HT6RAQEAC1Wo3PPvsMAoHArZ9iHKkvIQShoaEYOXIkeDwe1Go1dDodnnjiCTz22GNo\nbGxEcHAweDweGhoaEBISgrq6OrucX7c9vtLSUlRVVcHPzw98Ph/PP/88Zs+ejdmzZ+Oee+5BWFgY\n+Hw+li5davMHAFoHRW/cuAEWiwUvLy+LVxa4Oq+//jqioqLA5/Ph6+sLlUqFBQsWoKysDKmpqdBo\nNBg5cmSXS2/MA5i7m5hobm6GWq2GWq3uUludTtemPVfHXm3b88ADD+DZZ5/FmTNnsGHDBkyfPh2L\nFy/Gl19+CYFAgODgYHC5XIjFYqxfv75DeIs7Ya9foIOX6QBmAAgLC4NCoUB5eTk++eQTZGVl4a23\n3kJpaSn69u3LZMh54403sHTpUkgkEphMJiaAmd4spce6uhs2bMCRI0cQGRmJzZs34+LFi9iyZQvS\n0tJw5coVPP744zh8+LAVsnVEo9GgpaUFLBYLffr0sbt+hKvA5XKxbNkyREdH4+TJk9i8eTPq6uqw\nZs0apKWl4aeffoLRaMTq1as7vd48gLm7IQJ6iQ9FURCLxZ3O6vJ4vDbtuTr2atseLy8vfPTRR1iw\nYAGWLl2KwsJCXLp0Cfn5+TAYDMjLy8O6deuwatUqvPrqq7h165aT7/CPw16/YF4rhp6kuHz5Mk6d\nOoW3334bn3zyCS5cuIADBw4wbev1enz//ffYv38/iouLmegE8zox1tSK6fZRNzAwEIGBgSgpKQGb\nzUZMTAzKy8uxZ88efPfddwBaxz20Wq0VsnWkuroa586dw/jx4zF27FgcOnQIt2/ftqtNVyAwMBAJ\nCQkAWp1YfHw8zp49i+zsbOTm5uLTTz/FiBEjsG/fPou/oO0xmUyoqKhAeXk5wsPD4e/vz8yiGY1G\nt53ocLS2Bw4cgFarZXoVLBYLwcHBGD58OFgsFrZt24bPP/8cRqPR7u9Db8eRfoEQAg6Hg+LiYqxf\nvx4NDQ24ffs2KIqCwWBAeXk5ioqKMHToUFy9ehVr166Fj48PGhsb7XoytGiMLzc3FzU1Nbh48SLS\n09NRWlqKtLQ0UBSF8PBwux9NNRoNfv75ZxQVFSE7OxuNjY12tecq0NrW1tZCoVBAr9dDKBSisLAQ\n6enpiIiIwLvvvsssorcWumen0+lw+/Zt1NTU4PvvvwebzYbBYHDrIQVHa9s+CFksFmPu3LkYO3Ys\nPvjgA+zZs+eOsVvAOX7hxo0bMJlMzHWEEIhEIvj5+UGv16OkpAR6vZ7pFDl9jM/X1xccDgdPPfUU\n/vrXv4LFYuHWrVtgsVi4ceNGj9kSLMFoNMJoNEKtVjtkutoVeP311xEbG4uoqCjU19dj8uTJ2LFj\nB3g8Hurq6nD9+nWMGzeuy3goS8b46F9UupyfWCyGyWTqNIDZ3cb47NG2OyiKwrBhw/DII4/gl19+\nwf79+++IJxQae/1CZ2N8NObOkhCC5uZm8Pl8Jj0VPSRGRyU4bYxv7dq16Nu3L7KyspCXl4eLFy86\nJdbMy8sLvr6+uOuuuyAUCu1uzxWwV9+exvho5+br64uQkBBwuVwm88WdMMbnLNvlcDhYuXIldDod\nNm3axDze3SnYq635mFx3Y9OEEIjFYnA4HKhUKpSVlYHP57cJxbJ1jK9bxyeXy/Hmm28iISEBixcv\nRnx8PMrLy50SxyeVSkFRFH788UeblqC4Io7Ut7MeH32My+WiqakJR48eRUNDQ5fXuNOSNWfartFo\nxMKFC/H+++87JNzI1bBX257sjt5ns9koKirCli1b8P7776O5uZnJLtTeR1hru93W3Dhx4gRSU1OR\nlJQEvV6PwsJC7Ny5E6dOncLGjRthMpmYeJ2wsLC2DVv5/N2vXz8kJSXhm2++QWNjo0WPu64ehGuv\nvpamnhcIBJDL5SgqKgKXy2W07Sn1vCvr+3vari3cydpam3oeaJ0H8PHxYRxcS0tLl6nnLdHWomJD\nTU1NGD16NF566SVMnjwZN2/eZNbjLVu2DJWVldiyZUuHG3Q2rmw85tiqr7nTMhqNHSLpO6u54ePj\n0+nr9Bgf/ejR1NTkFvp6bNd52KotnZgAaH0a0ev1PTq+5uZmJsaXHvvz9vZmkhTodDrweDw0Nzdb\npG2P0y56vR6PPPIIZsyYwXRdZTIZs2zEXTPJ/l7Yo6/5mFxPsY89LfOhF3u7yxgf4LFdZ2KPtubj\nctYsUe1sqSXdFv3XUroNZyGEIDMzEwkJCXjuueeY45WVlVAoFABcP5PsH4m9+ravhNbZbGz7Y9bu\nuyoe23Ue9mrb2QxsT/uWnGPNrK7FY3x0b+G1117Djh07UFBQAIqiEBERgffeew9yudziN/XQikdf\n5+HR1nm4hbbERr766isSGxtL+vXrR1avXm1rMx66wKOv8/Bo6zxcRVubHJ/BYCBRUVGkuLiY6HQ6\nolQqyYULFxz92e5YPPo6D4+2zsOVtLVpzRJdFT08PBxcLhdTp07F/v37mdcPHTqEuLg4REdHY82a\nNQBaB+K5XC6EQiGGDh2KjIwMyGQyiEQixMTEIDU1FWFhYcw5ISEhTP5+kUgEPp+PuLg41NfXIysr\nCyEhIUhOTkZycnKHoieujrX6ttcWAKZPnw4+nw8+n4/09HScP38eERERzHmBgYFQKpWIi4uDSCSC\nTCZDeno6lixZ4tHWTNvw8HAmMwidcaUn2/Vo6wJ+wRZv+fnnn5M5c+Yw+9u2bSPz5s0jhPzm9QE4\nfXNXPPo6D4+2zsOVtLWpwAU9oBkeHg6xWIzGxkao1Wps2rSJ8frXrl2zpWkPaNX3s88+w6lTp8Bm\ns9HY2Ijx48cDQBt9ZTIZc013sU/k12QFzc3NbUJVugscvXnzpjNv8Q/DUm09WI+lfsGWAOaezjEP\nYLYEmxwfXRWdoijk5OTgvffeYxYXl5eXIzQ01KJ2KIqCQqFAXFwcfH19UVVVheLiYjQ0NDBVq7pD\nqVRi8ODBWLduHfz8/Gy5lV5JcHAwjEYjcnJyIJFIsGrVKqv0Ja1jt2CxWJDL5eBwOGhpaWEyslia\nBCIzM9OjrZNwV20d4RfsxRK/YNMYH10V3WAwQKvVYufOnZg4cSIAy6Pe6Snv1157DRs2bMDGjRux\nYcMG3H///bjrrrssaqegoAAKhQILFy605TZ6LYMHD4Zer8f169eh0+ms1pfFYiEyMhJxcXH4+9//\njiVLluDpp5/GgAED2ixz6wmPts7DXbW11y+YQ5dGtTa9lSV+waYeH10VfdKkSQgPD0dAQABOnDiB\n+Ph4xutbgkwmw5QpUyAWiwG0FmhWq9UghGDBggUoKCjo9no6QnzChAm23EavhcPhQCqVYsSIEQCA\n8ePHM3njutKXzrpCExYWhgcffBBjx45l6urKZDJUVVVh27ZtqKqq6nBN+32Pts7DXbW1xC90ZXf0\nkAyPx2McJV3v2WQywWg0gsPhgBDSre1a4hd6dKUZGRmQy+VtorBv3bqF9evXIzQ0FKNGjUJOTg42\nb96MvLw8xuv3BCEExcXFyM7Ohl6vR1NTE9RqNUaPHo3U1FSLs2a4cvR9V9qmpaXBy8sLqampOH/+\nPIqKipCXlwcAbfTtLA8Z+TUe/fTp023W6bJYLIwdOxaPPfYYpk6dyhRxpqHXPJq3dydray8sFgtB\nQUEYNmwYnn76aUyfPh3p6enMuJQrawvY5xfM7YxeY0s7PTabDR6Pxzg7sViMMWPGYN68eZg6dSrk\ncjmMRiOz1I3Ox0e3SdOTvhbV1W0/Lbx69WqkpaXh2rVruPfee/Hhhx9iypQpOH36NOP1LaGmpgZb\ntmzBzZs3mZqvQGs6GvNp8K5QKpXIzc3Fhg0bLHq/3oa12gJoo29nec3ouqMajQYbN27EjRs3YDAY\nUF9fD5PJBB8fH2ZtL+khr9mdrK093HPPPVi3bh2OHz+OAwcOYP369di6dSveffddBAUFAXBtbQH7\n/EJ7u6V7dywWCzqdDo2NjZBIJBg7dizmzZuHWbNm4cknn8SyZcuwf/9+plgU0LndWuQXLJn6LS4u\nJomJicx+bGwsKSoqIo2NjaSyspLExMSQkSNHksOHDzPnwMKpZ5lMRpYvX07Ky8vbvOeAAQPuiJAA\nW7QlhDDadbYFBAQQhUJB+vTpQxYsWEDOnj1LSkpKyI0bN0hTUxN5+eWXibe3NwkMDCQBAQGdtuEO\n+tqjrbUbi8UiixYtIidOnCAGg4Ho9Xqi0WjImTNnyNKlS0liYiJhsVh3vO12ZbdSqZQoFAri5eVF\nxowZQ5YvX0727t1Lrl69SlQqFSksLCT/+c9/yNy5c8n9999PYmJiiFQqtdlubRrjq66uBtBaVJgQ\ngqtXr+Kpp55Cenq61W3V1dXh7bffBiEEzz33HJNaacmSJZg+fbotH8+lcYS2FEXBaDSCz+cjOzsb\nVVVVyMzMRGxsLNRqNcaNG4dTp07h5MmTEAgEnaaid0ccabfmSCQSzJkzB08//TSam5vxxRdf4K23\n3sLVq1eZ4jl3AvboS09iCAQCAMCwYcMQGxuLa9eu4eOPP8b169dRXl6OsrIy1NfXo6WlBUKhsNOM\nLZbQo+PLyMjAgQMHoFKpmGMajQYpKSkICAgARVHw8vLCCy+8YPWb9+nTB3fffTfS09MxduzYNvnk\n7C1Z6QrYq635mIZ5jjNiVj4yICAAvr6+MBgMzGOwn58fJBIJcx5dkMidMl87025pvL29ERYWhrvu\nugv33HMPdu3ahTfeeINxAO6MPfp2ZrfmNiiRSNDS0sIMFVy6dAl1dXXQ6/WMkxOJRKAoChqNxia7\ntWiMb+vWrW2OOaJuAUVRGDVqFD766CM8++yz6N+/f5vXzVOkuyv2attV7QLamY0YMQLLli3DM888\ng7i4uDbXlpaWMjVNAdtrF/RWnGW3NAKBABMmTMCGDRsQGRmJrKwsrFmzxm0Dv9tjj75d2a3RaERk\nZCRGjBiB6upq5OXlobCwEBUVFdDpdGCxWOBwOMzMrslkck7NDaC129o+s6+jam7U1dXh6tWrnb72\n8MMP29SmK+FMbSmKYtY2BgUFwcvLi0k77+Pjg/vvv7/DBIc74UxtgdYaMS+++CL8/f2Rm5uLgoIC\n1NfXu62e7XG0vuTXaoB1dXVgsVgYNmwYDAYDampqwGazweFwmPMcobFFdXWPHTsGrVaL0NBQrFix\nAikpKdi4cSP4fD6TW99aCCE4deoUXn75ZUyYMAECgQAURSEtLQ1hYWFukwW4O5ylLdCq7+nTp/He\ne+9h3LhxEIlEIIRAoVCgT58+UCqVEAqFaGxs7DF7syviTG2B3+IB1Wo1EhIS8PPPP6O+vt6Bd9C7\ncYa+bDYbGo0Ge/bsQXh4OKZOnQovLy/k5OSgtrbWoZ/fopobJSUlmDBhAs6dOwcADq1bwOVy4efn\nBzabDYqikJmZiUWLFqGoqAj33XdftzfsDr+utmgL/Fa0hYYeK6E1ofUXCoXMD4ler8eQIUMwdepU\nmEwm/P3vf8e5c+fA4XCg1Wrb1Ji1tHZBb8YebbuiX79+KCkpAY/Hw5QpU/D0008jKCgIWVlZ+O9/\n/8uEWfSEq2sL2O4X2tstl8sFh8OBRqNhHmWDg4MxYsQIJCUlQSwWM+N9Wq22jXbtx6YdUnOjtLQU\nY8aMQXp6OgoLC/Hmm28CaP21S09PR2xsLHJzc/HDDz/0+EZdodfrUVNTg6qqKtTU1GDIkCHw9vaG\nQCCwKh+/K1JaWopp06ahsLAQiYmJePPNNyGTyXD79m2kp6fj008/xa5du7rsSbQfKyG/Biqbwvn6\nbwAAIABJREFU9+DUajUuXbqEn376CSdPnkRBQQG0Wi0UCgWSkpKYHxw+n+9WY3z2atsesViM9evX\nY9euXRg/fjxaWlqwb98+fPnllwgPD0d0dLTb2yuNvX6hszE+QggMBgNiYmLwyiuvYPjw4fj222+x\nbt06fPPNN/jLX/6CF154AUKh0Pl1dblcLjZs2IAjR44gMjISmzdvxsWLF7Fs2TKkpaXhypUrHZ7z\n7WHKlClQKpVgsVjYunUrKisrHdZ2b4TL5WLZsmWIjo7GyZMnsXnzZhw/fpwJBJ0/fz6ioqKwevXq\nHtuinZ7BYGhTntPcSHx9fZGQkIB+/fqhoqICKpWKqXbvDj0QcxypLdAanJuRkYE9e/bgiy++ANBa\nX3bEiBEoKSlBfn4+WlpanHlLvQZn+QWTyQS5XI7BgwfjrrvuAp/Px9WrV7F7927s2rULaWlpmDZt\nGgD711X3+Kg7bdo05Obmora2Fmw2G88++yw++OADBAUFgcfjQaFQ4Nq1ax2W+nT2wWQyGVauXIlf\nfvkF7777LoxGI0wmE7hcLqRSKdavX49HH30UWq0WSUlJPaYHcvUvq7m2crkcAQEB8Pf3R15eHiIj\nIxETE4OVK1fisccew6VLl9pcS1FUm7RUQOusmL+/P8aMGYPTp0+jrKyMmcAwGAxQKBR49dVXMWLE\nCNy4cQNPPvkk6urqOv1fWVqftLdir7btGTduHP75z38iJiYGAoGAeVLhcrl4++238dZbb1kVr+fK\n2gL2+YX2dgu06sFms9Hc3Izx48fj6aefhtFoRG1tLXQ6HdhsNoYNG4YzZ87g1VdfRUVFRaeTcw6t\nqwu0Ps+PGjUK58+fR9++fZl/MiEEEomkwz+9M+OZOXMmXnnlFXC5XLz22msoLi7GrVu3MHjwYIwd\nOxbp6eng8/lYu3Yt/vnPf/Y4XuLqxmOOLfqad+05HA6EQiEefvhhPPPMM/jxxx/x4YcfoqGhAUaj\nEX379sU999yDxx57DL6+vjhw4ACysrKYsAC9Xm/TWIkr4AjbBYAHHngAQ4cOZRIcNDc34+DBg9iz\nZw8aGhqs0utO1razsen2iEQijBkzBqNGjUK/fv3A5XKhVqtx+vRp7NixAzdu3Og0/tRSu+12Vre0\ntBQzZ85EVVUVSkpKMH36dPj4+ECj0SAkJIQZyDQfFO+Oo0ePYujQoRg6dCjeeecdVFZWorGxEZGR\nkeByuTAYDNizZw/eeecdiweJXRl79W0/pmEymVBcXIzi4mIMGzYM4eHhqKqqQktLC6KiohAUFASx\nWIySkhL8+9//ZkID6IwY5gZoTam+3oijbRdoTZ3ubunibcHRdtsZTU1NOHDgAL7++mt4e3uDz+cz\nP0g1NTUwmUzgcDg2222PY3xr165F3759kZWVhby8PFy8eNHmQNDKykp89tln+L//+z/k5ubi2rVr\nEAqF4HK5MBqNyM3Nxcsvv4yKigqL2nN1HKkv7cBOnz6N7OxsfPTRRxAKhUhOTsaoUaOQnJwMuVyO\npqYmvP/++7hy5Yrb9Do6w9G26+E3fk9t1Wo1bt68ievXrzM/6s3NzXaHYHXb45PL5Vi0aBESEhKw\nePFi/PDDDygvL7crUPHEiRNgs9lYsGABmpubkZCQgJCQEBgMBvz4449dBjS7I47UV6/XM0t/vvnm\nG+j1euTn5yMpKQkBAQGIjIzE1atXYTAYkJeXB4qioNfrO6SmcpeZSWfYrodW7NW2vZ31tE9P2vH5\n/Dbn2GO7FhcU1+v1KCwsxM6dO3Hq1Cls3LgRJpOJCVQMCwtr2/DvsOjd1Xss9urbVc0NWheNRgNf\nX18m8v327dvw9vZm0n/1VHPDlfX12K7zsFdbZ9fccNjkRlNTE0aPHo2XXnoJkydPdmgAsz24svGY\nY6u+5v94o9HIZLKm6cw46BUc7V+nEzrSv5ruMrnhsV3nYau25hMaXC4Xer3eZsdHT27QPT6HBDAD\nrY9QjzzyCGbMmMF0XWUyGbMQfs6cOUz31oP12KOveeBmT2Me9ERGV4WG6EFidwlgBjy260zs0dbc\nzuwdWqHbov9aSrdjfIQQZGZmIiEhAc899xxzvLKyEgqFAoDrp9D+I7FX3/aZQDqb0Wp/rH2QbfvX\nXX02l8Zju87DXm3bl0ugj3W3b8k5Vtlud1lK8/LyCEVRRKlUkoEDB5KBAweSgwcPkieffJKEh4cT\nPp9PvL29yUsvvdRdMx66wKOv8/Bo6zzcQVubcmDTVdGLi4uJTqcjSqWSXLhwwdGf7Y7Fo6/z8Gjr\nPFxJW5vq6tJV0cPDw8HlcjF16lSLigN5sAyPvs7Do63zcCVtbXJ87auih4SEoLy8nNk/dOgQ4uLi\nEB0djTVr1gBoXYLC5XIhFAoxdOhQZGRkQCaTQSQSISYmBqmpqQgLC2POCQkJwbZt25CSkgKRSAQ+\nn4+4uDjU19cjKysLISEhSE5ORnJysttF01urb3ttAWD69Ong8/ng8/lIT0/H+fPnERERwZwXGBgI\npVKJuLg4iEQiyGQypKenY8mSJR5tzbQNDw+HRCIBl8uFl5cXAPRoux5tW+nNfsHitbrm7N69G4cO\nHcLRo0chFovR2NgItVqN6upqGI1GpkiIs7Hho7sEu3fvxlNPPYWIiAiw2Ww0NjZi/Pjx2LRpk0df\nO/Fo6zxcyS/YVGWNropOURRycnLw3nvvgcVq7TzS3d3f4wbdleDgYBiNRuTk5EAikWDVqlWd6kvX\naAUAlUoFHx8f5p9OCIFKpWKKsgCtcVf0PovFQmNjI3x8fDq0AcBtlw1aqq21+Pv747HHHsPChQvR\n2NiIQYMGOfqj93os9QvWBDD7+vpixIgRUKlU8Pb2xr59++Dj44PGxsYuA5gtwaZHXboqusFggFar\nxc6dOzFx4kQAHbu7zkSpVCIzM9PtUn4PHjwYer0e169fh06ns0hf8mtaH4FAAB8fH0gkEvj6+iI4\nOBj+/v6QSCQQCoXMX71eD5PJ1O2vo0fbnuFyuRg9ejTuvfderFy5El5eXnj99dd7vM5dtXWUXyCE\nIDQ0FNOnT8ef//xnyGQy8Hg8sFisHnt0lvgFm3p8dFX0SZMmITw8HAEBAThx4gTi4+M7RL2z2WxE\nREQgKioKlZWVuO+++zBq1ChcuHABBw4cwMiRIwG0LkY+e/YsTp48aXG5uIKCAixbtgwLFy7sNIW4\nq0LXc6DTH40fPx7x8fEAul5VwOVycffddyMsLAz+/v7w9vbG//73P0yaNAl1dXUAgOzsbDzwwAO4\ndu0azp49i4KCAvB4vC71VigUHm27gc/nY/To0Vi0aBG++eYb/PDDDzhy5Aj27t3b47Xuqq2lfqE7\nKIpCWFgYHn30UaSnp6O+vh7FxcUoKSmBUCjsMgifxhK/YJPjA1oTM16/fh0KhQI1NTVIS0tDXFwc\n092l8fPzw6BBg/Dkk0+CxWJh1KhREAgEuP/++5GcnIzU1FRmVYFOp8OuXbtw48YNbN++HdevX+/2\nM9AR4hMmTLD1Nnot+fn5bbTNy8tDSkpKG33Na5omJSVh+fLlUCgUIIQw63QHDhwIoHVJGp/Px5gx\nY8Dj8VBZWYkPPvgAeXl5uHnzJlNzw7zNO1lbS+Dz+RgxYgTuueceAMDJkyexfft26HS6Hq91V20t\n8QtGo5EJNqZrbtAQQsDj8dC3b1+MHj0afn5++Omnn1BZWQmVSsX09uhr6CVr5m1a4hcsKij+5Zdf\nQiaTMUVFbt26hT/96U+4fv06wsPDsWvXLkyZMgWnT5/G3//+9zZZVxMTE/HPf/6TKWB98+ZNnD9/\nnull7N27FyqVCn379oVSqcSf//xnUBSFK1eu9Oj46OtdNfreWm1TUlKYxwkAzJieUCjE8OHDkZ+f\nD61WC5PJhOrqalRVVeF///sfjEYjWlpaGIf34IMPQi6X409/+hMuXLiAyspKCASCNtkvVCrVHa1t\nT/D5fEycOBFz586FRqPBqVOnsH79eouzMLuytoB9fqH9mnIaQgi4XC4kEglGjBiBgIAA1NbWIj8/\nH83NzTAYDMyjLr3Urat8fD3q21Og3/Hjx0l+fj5JTExkjj3//PPk1VdfJY2NjWT16tVkwYIFZOTI\nkeTw4cOEEEIOHjxIABAARCAQkJiYGBIbG0uCgoKIVColLBaLeZ3e/Pz8yJYtW4hGoyFGo5GsWLGi\nwzntt6SkJDJp0iRSVVXlkKDG3xtbtCXkN32DgoKYLTw8nERHR5OQkBASFBRE/P39ia+vL/Hz8yN+\nfn5EKpWS4OBgsmjRIlJcXExu3LhB3n33XaJUKolcLifBwcFt2gNwR2vb3UZRFBkzZgw5ePAgyc/P\nJw8//DARCAQ9Xme+ubK2hNjnF2QyWaebXC4n/v7+ZMqUKeTbb78lBw4cIDNmzCDh4eFEKpV2eZ35\nZqlfsGjlRnFxcZsbjI2NJadPnyZKpZIkJCQQHo9HXnvttbYNW2gAFEWRoKAgMn/+fHL58mViMpnI\n/v37SURERI/XugO2aEsI6eD46C04OJgEBweTkJAQZouMjCQPPPAAefPNN8mZM2fItWvXyKuvvkqS\nk5OJQqHotB130NcebbvboqOjyfXr10lVVRV55ZVXiJ+fn1VOzx20JcR2v9CV0/Pz8yNjx44lBw8e\nJMePHyfz588nISEhJCAggMjlciKVSolUKmX2u3J8lmDTGF91dTWGDBmCgoICJrf+Cy+8YHU7XC4X\nSqUSf/rTnzBjxgxIpVJ88803WLp0KYqLi235aC6PNdqaj8fxeDzw+fw24SwURSE0NBQpKSlM/rTm\n5mZ8/PHH+OSTT6DX65lHB61Wa9HYlCvjCLsVCASYMmUKQkJCUFRUhHPnzrVJ/DBs2DAEBQVBo9Hg\nq6++cvQt9Gos1dc8mYB5PWhvb28kJiYiMTERly5dQkVFBRN5YDAYIJVKIRAIYDAYUFpaCqFQCK1W\na/FkqDkWjfEdOHCgzZfMnroFNBRF4e6778amTZsQEhICX19fGAwG5OTkoKyszOr2XBF7tTWPwTOH\noigYjUaEh4dj/vz5zAwml8tFQ0MDqqurIZfLUVtby6Txpld50Jh/JlfEWXbL4XCQmpoKiqLQ2NiI\nK1euQKfTYciQIQgLC8OsWbMwYMAAGI1GHD16FM8//7zLa9kZ9ujbWfooiqJACEFwcDC0Wi24XC5a\nWlqg1+vh7+/PTIjGxsbCYDDgm2++QU5ODlN3g8YhNTcAYPbs2di6dWuHD25vbn0Wi4XHH38c/fv3\nZ2pwcjgcLFq0CPv27cPChQvRr18/q9t1JZylLUVRMBgMGDhwIOLj4+Hj4wNfX19wOBxERUVh0aJF\neOGFFzB16lRER0f/Lok3f2+cpe3gwYNx7733Qq/Xo7S0FDU1NZDJZEhLS8Prr7+OtLQ0+Pv7AwAe\nf/xxLFq0yKG1p3sLjtaXEAKBQIC+ffuCxWIxFdRYLBaio6MxZ84cTJo0CePGjcN9992HrKwsPP74\n411OlPREj44vJSWlwz/OEXULTCYT9u3bh4MHD6KsrAwNDQ1oaWmBl5cXUlNTsXbtWuTn5+Oll16C\nXC63un1XwJna8ng85Ofn47PPPsO+fftw7NgxXLhwAU1NTRAIBLj77ruxcOFCPPvssxgwYECPsVGu\nhjO0FYvFSEpKAofDwfnz57Fz504YjUZMmzYNc+bMgbe3N3bu3InU1FRkZWWBw+HAz8/PYffUm3Ck\nvnRvTywWQyAQgMVi4caNG9BoNJDJZBgyZAiGDRsGb29vZGdnY926dbh27RomT55sc+eox0fdadOm\n4dixY9BqtQgNDcWKFSuQkpKCjRs3gs/nM7n1rYUQgiNHjiAnJwcymQwSiQQDBw7EzJkzkZycjD59\n+kAkEmHx4sWQyWR4+eWX3S7S3Vna0pSUlOCjjz6Cl5cXvLy8EBMTg4ceeghDhw6FVCqFRqPB3Xff\njfLychQVFblNElLAOdoOHjwYL7/8MoxGI1599VXk5OQgMzMT8+bNg1arxYcffogPPvgAqampWL58\nOfLz83Hw4EE0NDQ46S7/OBypL/k1jCU5ORlRUVEoKipCdnY2bt++jfvvvx/33nsvCCHYt28f/vvf\n/0KpVILP56OmpgYtLS3MeLY1dNvjKy0tRVVVFfz8/MDn8/H8889j9uzZmD17Nu655x6EhYWBz+dj\n6dKlVr2pOTqdDmVlZTh79iw++eQTzJs3D8uXL2eyOnh7e2Ps2LGIjo62+T16K6+//jqioqLA5/Ph\n6+sLlUqFBQsWoKysDKmpqdBoNBg5cmSXDl+lUjEbXUCI/vU0mUzgcrng8/kwGo2or6/H//73P7z1\n1lv48ssv28REeXt7w2AwoLGxkWnP1bFX286IiIgAh8NBcXExsrOzMWTIEPztb38DIQSrVq3CG2+8\ngYkTJ+LDDz/EpUuXkJWV5ZYTHPb6BToDc3NzM3Q6HeO4ZDIZZDIZqqqq8P3336N///6YNGkSeDwe\n/v3vf+Pzzz9HbGws/vGPf0Cn02Hfvn24fPkyWlpaOs3q3B091tXdsGEDjhw5gsjISGzevBkXL17E\nli1bkJaWhitXruDxxx/H4cOHrVOuGy5duoRNmzbh2LFjbY5LJBKHvUdvgcvlYtmyZYiOjsbJkyex\nefNm1NXVYc2aNUhLS8NPP/0Eo9GI1atXd3q9j48Ps9EFl00mE0QiEXx9fRkHSAgBi8UCi8VCaWkp\nKisrYTQaAbQ6z3PnzsFkMrVpz9WxV9vOoDU+e/YsOBwOFAoFvL29UVZWhpiYGCxbtgwzZszAihUr\n8OKLLyInJ8d5N/gHYq9fMK8VQ6+/1Wq10Gg0qK+vR319PTgcDiQSCfz8/HDt2jXU1tYiJiYGs2bN\nQllZGbZv3870KM3bs5RuH3UDAwMRGBiIkpISsNlsxMTEoLy8HHv27MF3330HAMyUsjX06dMHDz30\nEK5cuYJTp051eJ2iKObLR35d7WHJKg5XIzAwEAkJCQBa85LFx8fj7NmzyM7ORm5uLj799FOMGDEC\n+/bts/gLOmjQIAwbNgzHjh1DU1MTkx3DYDDAYDAgKioK9957LzgcDiiKQmFhIb7//nsYDAa3muRw\nhrZnz56FTqfDyJEjkZCQgIiICPB4PAwYMACJiYkwmUxYv3491q1bZ1OIhavgDL9ACMGFCxdQXV2N\n6OhoBAUFQaVSQaPRICgoCLNnz4ZUKkVpaSnWr1+PoqIiGI1Gm23WojG+3Nxc1NTU4OLFi0hPT0dp\naSnS0tJAURTCw8OZL5cl9OnTBx9//DFSU1M7HZj08/PDrFmzMG7cOACtU+RnzpyxeCmRK0FrW1tb\nC4VCAb1eD6FQiMLCQqSnpyMiIgLvvvsus4i+Kwgh4PP5uO+++7B48WKcPHkSP/zwA8RiMVM0PCgo\nCEOHDsWDDz6I5ORk8Hg8VFRUYPv27SgvL4dAIHCrHHGO0tYcOvwnJCQEX3/9NbhcLgQCASiKglar\nxddff42tW7dCo9E48c56B470C+TXzEKXLl3C5cuXMWXKFMydOxd6vR4cDgdyuRxcLhcqlQo5OTm4\ncuUKM6RjK90mIi0tLcXMmTNRVVWFkpISTJ8+HR9++CGEQiH8/f2ZeJ2rV692GBfqyhNnZWXh+eef\nZ9L5XL16lYnbefDBB7FkyRJER0eDxWLBaDQiLy8PzzzzDK5cudKpYK6MvfrSvWKTyYR+/fphxYoV\nGD58OPLy8vDVV1+hoaEBhBDI5XJMmDABycnJMJlMYLFYuHbtGlatWoX8/HxQFAWNRtMmgNl8Qbgr\n4gzbBYDU1FQsWLAAI0aMACEExcXF+PLLL3HmzBmcOHHC4omMO1lb80dS8xq7hBDcddddyMjIwODB\ngyGVStHQ0IDLly/jxo0buHTpEr766iuUl5czQc90kgIaS+vqduv4qqqqUFZWhqVLl2Ls2LH46KOP\nsG/fPqSkpGD+/Pl45ZVXUFlZiTFjxuDSpUsdbrAzxo4di3fffRf9+vWDXq/HtWvXoNFowOVyERoa\nCrFYDEIIysvLce7cOSxYsACXL1/utC1XNh7Afn3NE5FKpVLMnj0b48ePh7+/P+rr66HX65n4KA6H\nA71ej+LiYly6dAkff/wxysvLu/xVrqiocGl9nWG7juRO1lYmk3XaLvk1S5NcLkdYWBiEQiGA1p52\nbW0tGhoa0NTU1GaFUntu3rxpfwZmuVyORYsWISEhAYsXL8YPP/yA8vJyu+KhfvrpJ6xYsQIzZ85E\naWkpBg4ciMDAQGg0GpSXl2Pr1q1QKBTYuXMnfvzxR6vSBLkajtS3uroaX3zxBdRqNeRyOUwmE+rr\n6xEVFYWmpibcunULP/zwA+rq6lBcXIyWlhYYDIY2Ue9arbbN6g1Xxhm266EVe7XV6XRt7I7epzOD\nl5WVoaysjHGEbDYbJpOJWV1E9/Q6a8NSuu3xnThxglnjqdfrUVhYiJ07d+LUqVPYuHEjTCYTE68T\nFhbWtuFufjXZbDaioqKg1WoRHByMwMBAqNVqaDQa/PLLL6AoCtXV1T1+eFf+1QTs19e8x9fY2Aix\nWMwEgRJCcPv2bQQGBsJgMECtVqOiogJCoZDp5Zmnmm+/7+o9PmfZrqO4k7W1JPW8eckEQgiampos\nSldvaY/PomJDTU1NGD16NF566SVMnjwZN2/eZJ7jly1bhsrKyg6ZTj3GYzm26mvutAwGA5PzkNal\nvWNramrq0tFptVqoVCqmx+fqY3w0Htt1HrZqaz6ux+Vyodfru3VqnR2j9+kxPrrHZ+kYX4/TLnq9\nHo888ghmzJjBdF1lMhkoimIyndLdWw/WY4++5nF3HA6H+YfT17bfuoN+jHCXOD7AY7vOxB5teTxe\nmzg+e6Dbov9aSrdjfIQQZGZmIiEhAc899xxzvLKyEgqFAoDrZ5L9I7FX3/aV0DpbcdH+mLX7rorH\ndp2Hvdp2tsqip31LzrFm5YbFY3x0j+G1117Djh07UFBQAIqiEBERgffee89tEwk4E4++zsOjrfNw\nC20tSlfaCV999RWJjY0l/fr1I6tXr7a1GQ9d4NHXeXi0dR6uoq1Njs9gMJCoqChSXFxMdDodUSqV\n5MKFC47+bHcsHn2dh0db5+FK2tpUUJyuih4eHg4ul4upU6di//79zOuHDh1CXFwcoqOjsWbNGgCt\n6yW5XC6EQiGGDh2KjIwMyGQyiEQixMTEIDU1FWFhYcw5ISEh2LZtG1JSUiASicDn8xEXF4f6+npk\nZWUhJCQEycnJSE5OxqFDhxzT/e0lWKtve20BYPr06cyERXp6Os6fP4+IiAjmvMDAQCiVSsTFxUEk\nEkEmkyE9PR1LlizxaGumbXh4OCQSCbhcLry8vACgR9v1aOsCfsEWb/n555+TOXPmMPvbtm0j8+bN\nI4T85vVhZfEVWzZ3xaOv8/Bo6zxcSVubig3RA5rh4eEQi8VobGyEWq3Gpk2bGK9/7do1W5r2gFZ9\nP/vsM5w6dQpsNhuNjY0YP348ALTRl05xDoDJXm0OfYz8Gtun0WjanNP+GvP9uro6Z97iH4al2nqw\nHkv9glAotNgOLT2H3rfUbm161KWrolMUhZycHDz99NNYsGABAKC8vByhoaG2NGs1SqUSmZmZbpeZ\nOTg4GEajETk5OThz5gzmzJmDkJAQALbpKxAIoFAorI6Z8mjrPNxVW0f6BUviTzvDEr9gk+OjK84b\nDAZotVrs3LkTEydOZD6sNQQGBmLu3Ll44IEHrP5iFhQUQKFQYOHChVZd19sZPHgw9Ho9rl+/Dp1O\nZ5e+FEUhKSkJixcvRlhYmFUae7R1Hu6qra1+obtAe/o4nUy3JyzxCzY5Pg6Hg7feegvV1dUIDw9H\nbW0tTpw4AeA3r28pdNWvJ554osusDV3hrtH3HA4HUqkUI0aMgFgsRmRkJJM3rit9uVxum33yax0D\niqIQFhbGFGyhM17Qr3fXhkdb5+Gu2lriFzqzO3o4hhDCJCwgv9bT1el0MBqNaGpqgkajAZvN7tZ2\nLfELPTq+jIwMyOXyNlHYt27dwvr16xEaGopRo0YhJycHmzdvRl5eHuP1LUWv18NoNEIul9tUkcqV\no++70jYtLY2pNnf+/HkUFRUhLy8PANro29LSwmydQRvUrVu3UFdXh8TExDa/qObGotfrodfr27R3\nJ2trLcOHD8eTTz6JF198ESdOnMDx48exfPnyLs93ZW0B+/yCuZ3RiXJZLBY4HA44HA7YbDb0ej18\nfHwwcuRITJgwAStXrsSmTZuQlZUFvV4PNpsNiqKYtui/ND3py87Kysrq7gYlEgkyMjKwd+9e/PWv\nfwUAvPLKKxgwYAB27dqFiooKfP/99xgwYABqampwzz33ICYmBtu3b7dIQJPJhIiICERFReHbb7+1\n6hd37969aGhowFtvvQWRSGTxdb0Fa7UdOXIkWCwWo6+vry+4XC64XC7YbHabts0dnMlkwsCBAxEQ\nEIDc3FxmIbf5OfSvKL2p1WoIBII7VltL8PX1xejRozFt2jQsXLgQ06ZNQ2pqKiIiIhAaGorExEQI\nhULk5uZ2uNaVtQXs8wvt7ZbFYkGv16O5uRlNTU1QKBQYNGgQHnjgAcycORNjx47FoEGDoFQq0b9/\nfwwdOhS//PILqqurwefzO9itRX7Bkqnf4uJikpiYyOzHxsaSoqIi0tjYSCorK0lMTAwZOXIkOXz4\nMHMOLJx6FggEZOHChUSv15P58+cTPp9/R4UE2KItIa36+vv7d7tJJBIikUhIfHw8+fzzz8n58+fJ\n5MmTSUBAQI/XuoO+9mjb2UZRFFEoFOT48ePkxo0bpKKigjQ3NxO9Xk+uXLlCamtriVarJQaDgRgM\nBtLS0kI2bdrksd12foG2MalUSqRSKfH19SUDBw4k27ZtI9nZ2eTrr78mP//8MykrKyMlJSXk1q1b\npKmpiVRVVZHS0lJSWVlJXnnlFSIUColMJrPJbm0KZ6Fz5aWkpIAQgqtXr+Kpp55CenoDs9MWAAAO\n+UlEQVS6Lc0BaO1xDBo0CFKplCkteSfiDG15PB4zqREQEMBUXbOnWIsrYq+2Y8aMwaZNmxAbGwug\nNfnl7du38cEHH+Cdd94Bj8dDQkIC3n//fQQHB+PWrVu4cOGC0+6nt2GtvuTXNAFRUVGYP38+Ro8e\nDaFQCEIIjEYjvvvuO2zevBkmkwkBAQGYN28e4uLioNfr0adPH3h7ezPVAq2lR8eXkZGBAwcOtMna\nodFokJKSgoCAAFAUBS8vL7zwwgs2fQBz6Of2OwV7tTUf06C7+u0xz39GJyQlneSloMf43AVH261I\nJMKsWbMQGRkJAGhoaMDhw4fx/vvv49y5c0z82LPPPougoCDo9XocPXoU//73vx1/c70Ae/Sl7Zae\nrQ0JCUFiYiL4fD50Oh0aGxuxfft25OXl4fLly1CpVLjrrruYSoBNTU3Iy8uDyWSC0WhsUyvGUnqc\n3Jg9eza2bt3a5pi3tzf+/Oc/48yZMzh48CCCg4OtfmMP9mvr5eXFbJ05PRoOh8M4PrqAc3voJVn0\n5uo42m5HjRqF4cOHg8PhoLq6Gtu3b8fzzz+PnJwc1NXVgcPhICgoiClpWVpaisOHD3c58eTq2KMv\nbWN0IHNgYCDEYjHzw7x7927s3LkT58+fZ8oj6HQ6sFgssNlsptqd0Wi02W57dHwpKSnw9fVtc8xT\nt8Ax/F7acrlc8Pl8xvHdCThaW7FYDLVajdLSUqxatQpr165tMyQTGxuLRYsWYeTIkaitrcW//vUv\nHD9+3DE30wuxV1/ztPIajQY1NTXQ6/XYv38/9u3bh7q6OuaR19/fH3fffTdkMhnUajXy8vJQUVHR\n7Y99T1hUV/fYsWPQarUIDQ3FihUrkJKSgo0bN4LP5zO59T1Yz++lLT3G19TU5LY9kPY4Wtuvv/4a\nNTU14HK5yMnJgVqtZl4LDAxEZmYmZs6cCZFIhHfffReffPKJW9fXtVdf+qnDZDLh+++/h1qtRnBw\nML777jsUFRUxjpHFYiEuLg4TJ06EXC5HRUUFE/3BZrNtT+Fvy+xNdXU1MZlMxGQykaVLl5KMjIwO\n18DKWV2TyUTWr1/PzMxYsrkDtmhLSKu+QqGQ2cRicaezulKplNx///2koKCA7Ny5kyiVSiKRSDqc\nKxaL27TnDvrao6012zPPPENu3rxJDAYD+fDDD0nfvn09ttuNX+jMbgMCAtrM0EqlUiKRSIhcLif/\n+te/SGlpKSktLSWrVq0iERERjG3barfdPuqWlpZizJgxSE9PR2FhId58800ArWNG6enpiI2NRW5u\nLn744QfbvG47Kioq7pgeCdCq77Rp01BYWIjExES8+eabkMlkuH37NtLT0/Hpp59i165dXa45tHSM\nj8/ng8fj4fbt21CpVJ1WoXe3MT57tbWUxMRETJkyBVKpFBRFYd++fW5dEhWw3y90Zrcmkwkmk4mZ\n8KDtMzg4GFFRUeByuZBIJDh79izq6+uZc5wyxsflcrFhwwYcOXIEkZGR2Lx5My5evIhly5YhLS0N\nV65c6fCcbw9GoxEmk8lh7fV2uFwuli1bhujoaJw8eRKbN2/G8ePHsXr1aqSlpWH+/PmIiorC6tWr\nbX4PelaXw+EwtXTvBH4PbVksFkJDQxEREQGTyYS3334b33//vVtUUOsOZ/kFYlYh0PxRV6fTgc1m\n4+zZs0z5SHrNrq1RIN2O8QUGBuIf//gHcnNzUVtbCzabjS1btuA///kPgoKCsH37digUCoeFQQiF\nQnA4HGi1Woe019sx1zY+Ph4BAQFYuXIl8vLyEBkZiZiYGGzbtg2PPfaYzV9QiqKYWrpisRg+Pj5o\nbm52+7AhZ2vL5XKRmJiIWbNmITg4GEeOHMFHH33kdhlXOsOZfsG8t8fj8RAaGorQ0FDodDrk5+fj\n4sWL4HA4TO/Q5h8Za57n+/btSxobG4mfnx9z3GQytdk3f5a3ZOPxeGT+/PlEq9WSbdu2kZCQkDtq\njI/GFn0tGeMLCAggjz76KPn555/Jjh07yKBBg+6YMT4aZ9hu//79yY8//ki0Wi3Zvn07iYiIsGpc\n0F1wht3SY35jx44l+/fvJxUVFeSTTz4hycnJzGoPqVRql9122+MrLS3FzJkzUVVVhZKSEkyfPh0+\nPj7QaDQICQlhigfb8/ik1+tRXl6OW7duwdfX1+46m66Evfr2NKZBURSMRiPUajXUajXEYnGX+rYP\ngDaftXRFnGm7vr6+SElJQVJSEi5cuIDPPvsMxcXFjr6FXosz7ZbuxbHZbPTp0wchISEwGo04c+YM\nrl+/DjabzfT2ANvttscxvrVr16Jv377IyspCXl4eLl686NAAZkIIVCoVVCoVwsPD3aaYtSX8HvpS\nFIXm5mbU1dUxBuLuj7mAc7V97LHH8PTTT6O2thZbtmzB0aNHnXAHvRdnakt+fXTt06cPhgwZApFI\nhHPnzuHHH39s82hL7BxH7dbxyeVyvPnmm0hISMDixYsRHx+P8vJyhwfZFhYWIicnB5cvX0Ztba1d\nbbkSjtS3s/EU+tiNGzfwxRdf4P3330dNTU2X17jTkjVn2a5MJsODDz6IqqoqHD16FMeOHXPreL3O\nsFfbnuzOYDBAJBKhX79+YLPZuHLlSoeZcnttt9tH3e+++w7/+c9/kJSUhP79+6OwsBCzZs1yeJBt\nWVkZ1qxZA4FAwCx0vhNwpL50XrPOjjU0NCA7OxsqlarNo277azprw1Vxlu0+9NBDGDZsGFasWIGf\nf/4ZRUVFTrqD3ou92nZmdzwej5mt1el0TH7OW7du4cyZM7h9+3a3tmq17VoyEKhSqcigQYPI3r17\nCSGODWC2Z3MXbNXXfFCXx+N1GCAWCoUW74vFYsLhcNxucsPRtvvAAw8QrVZLBgwYQLhc7h1tu7Zq\na25n9OSEeeCyUCgkQ4YMIbt37ybZ2dlkyJAhxMvLq1Pbpa+n27RUW+rXD9Mler0eDz30EMaNG4fn\nnnuuw+slJSWYMGECzp071+b47zGO1MNHdwns0dfSKmu27NNrJV0ZZ9guh8OBt7c3VCqVXTGnd7K2\nllRZ8/HxgUgkAofDQUNDA1QqFVM2oatr6Cprlmjb7aMuIQSZmZlISEhoc3OVlZVQKBQAXD+F9h+J\nvfq2L6XX2YxW+2PW7rsqzrJdg8GAhoYGh35WV8Nebekog/bH2u/fvHmzzbH2q7rssd1ue3wnTpxA\namoqkpKSmF/B1157DTt27EBBQQEoikJERATee+89yOVyi9/UQysefZ2HR1vn4Q7a9vio68GDBw/u\nhk3lJT148ODBlXGK4zt06BDi4uIQHR2NNWvWAGhN3c3lciEUCjF06FBkZGRAJpNBJBIhJiYGqamp\nCAsLY84JCQnBtm3bkJKSApFIBD6fj7i4ONTX1yMrKwshISFITk5GcnIyDh065Izb6LW017e9tgAw\nffp08Pl88Pl8pKen4/z584iIiGDOCwwMhFKpRFxcHEQiEWQyGdLT07FkyRKPtmbahoeHQyKRMFlA\nAPRoux5tO6dX+QU7Z7Q7YDAYSFRUFCkuLiY6nY4olUpy4cIFEhgYSL799lsmf9fx48fJzJkzSWBg\nICGEkKVLlxKlUknWrVtHVCoViYmJIbm5uWTWrFlkzZo1RKVSEalUSjIzM0lWVhZZt26doz+6S9CZ\nvlKptI22hBAybdo08re//Y0kJiaS1atXk2effZY888wzjL6RkZFk9+7d5PnnnycrVqwgMTExZMGC\nBeTuu+/2aGumbXBwMPniiy9Ifn6+xbbr0bYjvc0vOLzHd/r0afTr1w/h4eHgcrmYOnUq9u/fD4FA\n0CZVTUpKCk6cOMEUEZ83bx7KyspACIFIJEJ8fDx0Oh1OnjyJWbNmQSQSYfDgwTh8+DDtsB390V2C\nzvQ1Go0d0gDl5+fjySefBADMmjULX3/9NQIDAxl9BwwYALFYjOzsbPzlL39BfHw8hg0bhkuXLnm0\nNdO2paUFw4cPR58+fZjzerJdj7Yd6W1+weGOr7y8HKGhocx+SEgIysvLQVEUZsyYgatXr+KDDz4A\nANTW1oLDaY2okcvlaG5uxqZNmxAfH4+vv/4asbGxqK6uhlwuR0lJCS5cuMBUddq0aROUSiUyMzPv\niFRANJ3pazQaO2hbXV0NqVQKoFVbekVMZ/qq1WqcOXMG48aNY/4HHm1/0/a+++7DhAkTcPv2beY1\nS23Xo20rvc0vONzxdRX8+d133+HLL79EREQENm/ejLy8vA7X8fl8nDt3Dl5eXhg3bhyysrIAAE1N\nTXj00UexceNGsFgszJ07F8XFxSgoKIBCocDChQsdfRu9ls70feSRR3rUlqIozJ07t4O+hBBGWx8f\nH/D5fI+2ZjzyyCM4c+YMtm7dirq6ug7a0td1ZrsebX+jt/kFhzu+4ODgNguKS0tLERISwgQ2stls\nTJkyBadPn4ZUKmVS11RWVkIul+PRRx/Fk08+ibVr1+L06dOQyWSYMGECZsyYgWHDhkEmk0EmkzFf\n5jlz5jALo+8EOtOXLnBtrq1cLmcSElRWVkImk6FPnz5t9D116hT0ej0mTpyIyZMno7KyEoGBgR5t\nf8VcW39/f4jFYkaPnmzXo21beptfcLjjGzx4MAoLC1FSUgKdToedO3ciLS2N6YqaTCYcOXIEAwYM\nwH333cc8PmzduhUURTHR4Hv37kViYiI4HA4MBgOee+45JuNDZWUl83532sqR9vru2LED9957L4C2\n2k6cOBG7d+8G0JopY9KkSXjiiScYfffs2YPm5mbEx8eDz+cz5913333Me3m0/U3blpYWNDU1MXp0\nZ7sebTvS6/yCgydvCCGEHDx4kMTExJCoqP9v7/5RGIThKI7nh8EIKnF0cBC6+gcXryG4OHkHB3c3\nj+EBPJSzt3gdCtLSQqdCIe9zg3wJbwu5YV1XHMeBJEmgtYaIwFqLtm2RpilEBFpr5HkOpR6/rgVB\nAGstlmWBiCCKIhhjEMcx9n3HOI4oyxJVVaHrOpzn+Ytj/K3nvvM8v7Xdtg1938P3fSilYIzBNE0v\nfcMwhIigKIqrb9M0GIaBbZ/a1nV99fU8D1mWfb27bPvZP+0CX24QkXP4coOInMPhIyLncPiIyDkc\nPiJyDoePiJzD4SMi59wB5s3JmJ1DUqkAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# effect of deskewing\n", "print labels[:10]\n", "for i in range(16):\n", " subplot(8,4,2*i+1)\n", " gray()\n", " imshow(images[i])\n", " subplot(8,4,2*i+2)\n", " imshow(deskew(images[i]))" ] }, { "cell_type": "markdown", "id": "fa234e18", "metadata": {}, "source": [ "Let's now look at the error rates achieved with deskewing:\n" ] }, { "cell_type": "code", "execution_count": 65, "id": "18775218", "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "derotated 0.1308\n", "deskewed 0.0761\n", "original 0.131\n" ] } ], "source": [ "print \"derotated\",nneval(amap(derotate,images[:1000]),labels[:1000],amap(derotate,test_images),test_labels)\n", "print \"deskewed\",nneval(amap(deskew,images[:1000]),labels[:1000],amap(deskew,test_images),test_labels)\n", "print \"original\",nneval(images[:1000],labels[:1000],test_images,test_labels)\n", "\n" ] }, { "cell_type": "markdown", "id": "39f1cb09", "metadata": {}, "source": [ "Not that deskewing results in substantial improvements, while derotating hardly gives an improvement at all.\n", "\n", "(We could analyze this further with confusion matrices, and there may be ways of fixing this.)" ] }, { "cell_type": "code", "execution_count": null, "id": "4aef2d8a", "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 }