{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Examples of all decoders (except Kalman Filter)\n", "\n", "In this example notebook, we:\n", "1. Import the necessary packages\n", "2. Load a data file (spike trains and outputs we are predicting)\n", "3. Preprocess the data for use in all decoders\n", "4. Run all decoders and print the goodness of fit\n", "5. Plot example decoded outputs\n", "\n", "See \"Examples_kf_decoder\" for a Kalman filter example.
\n", "Because the Kalman filter utilizes different preprocessing, we don't include an example here. to keep this notebook more understandable\n", "\n", "We also include a note on memory usage for the neural net decoders at the end of #4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Import Packages\n", "\n", "Below, we import both standard packages, and functions from the accompanying .py files" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using Theano backend.\n", "WARNING (theano.configdefaults): install mkl with `conda install mkl-service`: No module named 'mkl'\n" ] } ], "source": [ "#Import standard packages\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "from scipy import io\n", "from scipy import stats\n", "import pickle\n", "\n", "# If you would prefer to load the '.h5' example file rather than the '.pickle' example file. You need the deepdish package\n", "# import deepdish as dd \n", "\n", "#Import function to get the covariate matrix that includes spike history from previous bins\n", "from Neural_Decoding.preprocessing_funcs import get_spikes_with_history\n", "\n", "#Import metrics\n", "from Neural_Decoding.metrics import get_R2\n", "from Neural_Decoding.metrics import get_rho\n", "\n", "#Import decoder functions\n", "from Neural_Decoding.decoders import WienerCascadeDecoder\n", "from Neural_Decoding.decoders import WienerFilterDecoder\n", "from Neural_Decoding.decoders import DenseNNDecoder\n", "from Neural_Decoding.decoders import SimpleRNNDecoder\n", "from Neural_Decoding.decoders import GRUDecoder\n", "from Neural_Decoding.decoders import LSTMDecoder\n", "from Neural_Decoding.decoders import XGBoostDecoder\n", "from Neural_Decoding.decoders import SVRDecoder\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Load Data\n", "The data for this example can be downloaded at this [link](https://www.dropbox.com/sh/n4924ipcfjqc0t6/AACPWjxDKPEzQiXKUUFriFkJa?dl=0&preview=example_data_s1.pickle). It was recorded by Raeed Chowdhury from Lee Miller's lab at Northwestern.\n", "\n", "\n", "The data that we load is in the format described below. We have another example notebook, \"Example_format_data\", that may be helpful towards putting the data in this format.\n", "\n", "Neural data should be a matrix of size \"number of time bins\" x \"number of neurons\", where each entry is the firing rate of a given neuron in a given time bin\n", "\n", "The output you are decoding should be a matrix of size \"number of time bins\" x \"number of features you are decoding\"\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# folder='' #ENTER THE FOLDER THAT YOUR DATA IS IN\n", "# folder='/home/jglaser/Data/DecData/' \n", "folder='/Users/jig289/Dropbox/Public/Decoding_Data/'\n", "\n", "with open(folder+'example_data_s1.pickle','rb') as f:\n", " neural_data,vels_binned=pickle.load(f,encoding='latin1') #If using python 3\n", "# neural_data,vels_binned=pickle.load(f) #If using python 2\n", "\n", "# #If you would prefer to load the '.h5' example file rather than the '.pickle' example file.\n", "# data=dd.io.load(folder+'example_data_s1.h5')\n", "# neural_data=data['neural_data']\n", "# vels_binned=data['vels_binned']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Preprocess Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3A. User Inputs\n", "The user can define what time period to use spikes from (with respect to the output)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "bins_before=6 #How many bins of neural data prior to the output are used for decoding\n", "bins_current=1 #Whether to use concurrent time bin of neural data\n", "bins_after=6 #How many bins of neural data after the output are used for decoding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3B. Format Covariates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Format Input Covariates" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Format for recurrent neural networks (SimpleRNN, GRU, LSTM)\n", "# Function to get the covariate matrix that includes spike history from previous bins\n", "X=get_spikes_with_history(neural_data,bins_before,bins_after,bins_current)\n", "\n", "# Format for Wiener Filter, Wiener Cascade, XGBoost, and Dense Neural Network\n", "#Put in \"flat\" format, so each \"neuron / time\" is a single feature\n", "X_flat=X.reshape(X.shape[0],(X.shape[1]*X.shape[2]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Format Output Covariates" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#Set decoding output\n", "y=vels_binned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3C. Split into training / testing / validation sets\n", "Note that hyperparameters should be determined using a separate validation set. \n", "Then, the goodness of fit should be be tested on a testing set (separate from the training and validation sets)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### User Options" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#Set what part of data should be part of the training/testing/validation sets\n", "training_range=[0, 0.7]\n", "testing_range=[0.7, 0.85]\n", "valid_range=[0.85,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Split Data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "num_examples=X.shape[0]\n", "\n", "#Note that each range has a buffer of\"bins_before\" bins at the beginning, and \"bins_after\" bins at the end\n", "#This makes it so that the different sets don't include overlapping neural data\n", "training_set=np.arange(np.int(np.round(training_range[0]*num_examples))+bins_before,np.int(np.round(training_range[1]*num_examples))-bins_after)\n", "testing_set=np.arange(np.int(np.round(testing_range[0]*num_examples))+bins_before,np.int(np.round(testing_range[1]*num_examples))-bins_after)\n", "valid_set=np.arange(np.int(np.round(valid_range[0]*num_examples))+bins_before,np.int(np.round(valid_range[1]*num_examples))-bins_after)\n", "\n", "#Get training data\n", "X_train=X[training_set,:,:]\n", "X_flat_train=X_flat[training_set,:]\n", "y_train=y[training_set,:]\n", "\n", "#Get testing data\n", "X_test=X[testing_set,:,:]\n", "X_flat_test=X_flat[testing_set,:]\n", "y_test=y[testing_set,:]\n", "\n", "#Get validation data\n", "X_valid=X[valid_set,:,:]\n", "X_flat_valid=X_flat[valid_set,:]\n", "y_valid=y[valid_set,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3D. Process Covariates\n", "We normalize (z_score) the inputs and zero-center the outputs.\n", "Parameters for z-scoring (mean/std.) should be determined on the training set only, and then these z-scoring parameters are also used on the testing and validation sets." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "#Z-score \"X\" inputs. \n", "X_train_mean=np.nanmean(X_train,axis=0)\n", "X_train_std=np.nanstd(X_train,axis=0)\n", "X_train=(X_train-X_train_mean)/X_train_std\n", "X_test=(X_test-X_train_mean)/X_train_std\n", "X_valid=(X_valid-X_train_mean)/X_train_std\n", "\n", "#Z-score \"X_flat\" inputs. \n", "X_flat_train_mean=np.nanmean(X_flat_train,axis=0)\n", "X_flat_train_std=np.nanstd(X_flat_train,axis=0)\n", "X_flat_train=(X_flat_train-X_flat_train_mean)/X_flat_train_std\n", "X_flat_test=(X_flat_test-X_flat_train_mean)/X_flat_train_std\n", "X_flat_valid=(X_flat_valid-X_flat_train_mean)/X_flat_train_std\n", "\n", "#Zero-center outputs\n", "y_train_mean=np.mean(y_train,axis=0)\n", "y_train=y_train-y_train_mean\n", "y_test=y_test-y_train_mean\n", "y_valid=y_valid-y_train_mean" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Run Decoders\n", "Note that in this example, we are evaluating the model fit on the validation set" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4A. Wiener Filter (Linear Regression)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.72457168 0.71731407]\n" ] } ], "source": [ "#Declare model\n", "model_wf=WienerFilterDecoder()\n", "\n", "#Fit model\n", "model_wf.fit(X_flat_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_wf=model_wf.predict(X_flat_valid)\n", "\n", "#Get metric of fit\n", "R2s_wf=get_R2(y_valid,y_valid_predicted_wf)\n", "print('R2s:', R2s_wf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4B. Wiener Cascade (Linear Nonlinear Model)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.73127717 0.73370796]\n" ] } ], "source": [ "#Declare model\n", "model_wc=WienerCascadeDecoder(degree=3)\n", "\n", "#Fit model\n", "model_wc.fit(X_flat_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_wc=model_wc.predict(X_flat_valid)\n", "\n", "#Get metric of fit\n", "R2s_wc=get_R2(y_valid,y_valid_predicted_wc)\n", "print('R2s:', R2s_wc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4C. XGBoost (Extreme Gradient Boosting)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jig289/anaconda/envs/decode/lib/python3.5/site-packages/xgboost/core.py:614: UserWarning: Use subset (sliced data) of np.ndarray is not recommended because it will generate extra copies and increase memory consumption\n", " \"because it will generate extra copies and increase memory consumption\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.75403802 0.76625732]\n" ] } ], "source": [ "#Declare model\n", "model_xgb=XGBoostDecoder(max_depth=3,num_round=200,eta=0.3,gpu=-1) \n", "\n", "#Fit model\n", "model_xgb.fit(X_flat_train, y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_xgb=model_xgb.predict(X_flat_valid)\n", "\n", "#Get metric of fit\n", "R2s_xgb=get_R2(y_valid,y_valid_predicted_xgb)\n", "print('R2s:', R2s_xgb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4D. SVR (Support Vector Regression)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jig289/anaconda/envs/decode/lib/python3.5/site-packages/sklearn/svm/base.py:244: ConvergenceWarning: Solver terminated early (max_iter=4000). Consider pre-processing your data with StandardScaler or MinMaxScaler.\n", " % self.max_iter, ConvergenceWarning)\n", "/Users/jig289/anaconda/envs/decode/lib/python3.5/site-packages/sklearn/svm/base.py:244: ConvergenceWarning: Solver terminated early (max_iter=4000). Consider pre-processing your data with StandardScaler or MinMaxScaler.\n", " % self.max_iter, ConvergenceWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.81684722 0.82538223]\n" ] } ], "source": [ "#The SVR works much better when the y values are normalized, so we first z-score the y values\n", "#They have previously been zero-centered, so we will just divide by the stdev (of the training set)\n", "y_train_std=np.nanstd(y_train,axis=0)\n", "y_zscore_train=y_train/y_train_std\n", "y_zscore_test=y_test/y_train_std\n", "y_zscore_valid=y_valid/y_train_std\n", "\n", "#Declare model\n", "model_svr=SVRDecoder(C=5, max_iter=4000)\n", "\n", "#Fit model\n", "model_svr.fit(X_flat_train,y_zscore_train)\n", "\n", "#Get predictions\n", "y_zscore_valid_predicted_svr=model_svr.predict(X_flat_valid)\n", "\n", "#Get metric of fit\n", "R2s_svr=get_R2(y_zscore_valid,y_zscore_valid_predicted_svr)\n", "print('R2s:', R2s_svr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4E. Dense Neural Network" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.82578506 0.84818598]\n" ] } ], "source": [ "#Declare model\n", "model_dnn=DenseNNDecoder(units=400,dropout=0.25,num_epochs=10)\n", "\n", "#Fit model\n", "model_dnn.fit(X_flat_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_dnn=model_dnn.predict(X_flat_valid)\n", "\n", "#Get metric of fit\n", "R2s_dnn=get_R2(y_valid,y_valid_predicted_dnn)\n", "print('R2s:', R2s_dnn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4F. Simple RNN" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.82405748 0.80346205]\n" ] } ], "source": [ "#Declare model\n", "model_rnn=SimpleRNNDecoder(units=400,dropout=0,num_epochs=5)\n", "\n", "#Fit model\n", "model_rnn.fit(X_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_rnn=model_rnn.predict(X_valid)\n", "\n", "#Get metric of fit\n", "R2s_rnn=get_R2(y_valid,y_valid_predicted_rnn)\n", "print('R2s:', R2s_rnn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4G. GRU (Gated Recurrent Unit)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.83770423 0.83575681]\n" ] } ], "source": [ "#Declare model\n", "model_gru=GRUDecoder(units=400,dropout=0,num_epochs=5)\n", "\n", "#Fit model\n", "model_gru.fit(X_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_gru=model_gru.predict(X_valid)\n", "\n", "#Get metric of fit\n", "R2s_gru=get_R2(y_valid,y_valid_predicted_gru)\n", "print('R2s:', R2s_gru)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4H. LSTM (Long Short Term Memory)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2s: [0.84809856 0.84108359]\n" ] } ], "source": [ "#Declare model\n", "model_lstm=LSTMDecoder(units=400,dropout=0,num_epochs=5)\n", "\n", "#Fit model\n", "model_lstm.fit(X_train,y_train)\n", "\n", "#Get predictions\n", "y_valid_predicted_lstm=model_lstm.predict(X_valid)\n", "\n", "#Get metric of fit\n", "R2s_lstm=get_R2(y_valid,y_valid_predicted_lstm)\n", "print('R2s:', R2s_lstm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4 - Side note on memory usage in TensorFlow\n", "When using the tensorflow backend for Keras (which is standard in newer versions), there can be issues with memory leakage, particularly when fitting many models. To avoid this problem, models can be deleted with the following code:\n", "\n", "```\n", "import gc\n", "from keras import backend as K\n", "\n", "del model_lstm\n", "K.clear_session()\n", "gc.collect()\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Make Plots" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD8CAYAAAB0IB+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmYZVV5Lv6uPZ6p5q4eaboFARlEQUSjoIagwNUbNXqD\nxjjFxMToDV41TtFookavPhoz+NMQNUJEDLmikoggIc4SI/MkMjTd9Nw11xn22eP6/fGttffa5+xT\n51TVqerq6v0+Tz1VdYY9rvXud73rW9/HOOfIkSNHjhzrH9rRPoAcOXLkyLE6yAk/R44cOY4T5ISf\nI0eOHMcJcsLPkSNHjuMEOeHnyJEjx3GCnPBz5MiR4zhBTvg5cuTIcZwgJ/wcOXLkOE6QE36OHDly\nHCcwjvYBqNiwYQPfuXPn0T6MHDly5DimcMcdd0xyzse7fW5NEf7OnTtx++23H+3DyJEjR45jCoyx\nPb18Lrd0cuTIkeM4QU74OXLkyHGcICf8HDly5DhOkBN+jhw5chwnyAk/R44cOY4T5ISfI0eOHMcJ\ncsLPkSNHjuMEOeHnyJFj1eC6wFe+AuSVVY8OcsLPkSPHquHDHwbe+Ebg298+2kdyfCIn/Bw5cqwa\n9u2j3/PzR/c4jlfkhJ8jR45VQxDQb10/usdxvCIn/Bw5cqwawpB+54R/dJATfo4cOVYNOeEfXeSE\nnyNHjkVh2zbgla9c2ncl4ec4OsgJP0eOHIvCgQPAN76xtO9Kwnfd/h1Pjt6RE36OHDlWDVFEv3PC\nPzrICT9Hjhyrjpzwjw5yws+RIwcA4MEHgRtuWNl9yMnanPCPDnLCz5EjBwDgzDOBl750ZfdhiKKq\nyyV8zoErrgDuvHP5x3Q8ISf8HDmOcXz0o8C3vnW0j6I39Ivw9+0D/vZvlx4tdLxiTRUxz5Ejx+Lx\nwQ/S72MhIZk8xuWGZ+7fT79HR5e3neMNucLPkeMYhuf1f5srGSsvt73cfRw8SL83bVredo435ISf\nI8cxjImJ/m9zJSdUJdHLnDpLRbNJv01zeds53rBswmeMbWeMfZ8x9iBj7AHG2BXi9VHG2C2MsUfE\n75HlH26OHDlUTE31f5uSTFcC/VL4y31gHK/oh8IPALyTc34GgGcDeCtj7AwA7wVwK+f8FAC3iv9z\n5MjRR/h+/7d5LBC+/H4/5y0efxx4yUvWd+rmZRM+5/wg5/xO8XcVwC8BbAPwUgBXiY9dBeBly93X\nYjAzszL+Zo4cawmq0pWrWJeLY8HSWQmF/453AN/5DnDzzf3f9lpBXz18xthOAOcA+DmATZxzMbWC\nQwAyp1cYY29mjN3OGLt9oo+G5OjoyscU58hxtKESn+P0Z5sLKfzlKmp5vP2ydPqp8I8cod/FYv+2\nudbQN8JnjFUAfAPA2znnqUER55wDyLw1nPMrOefncc7PGx8f78uxyEZw00192VyOHGsWKuE3Gv3Z\n5kKEr44iljKiWMuWjtzW3Fz/trnW0BfCZ4yZILK/hnN+vXj5MGNsi3h/C4Aj/dhXL6jXV2tPOXIc\nXawE4S9k6ahEvRRbZS1bOgMD9Ht2tv/bXivoR5QOA/AlAL/knH9GeesGAK8Xf78ewKqVLV7Pky45\ncqjop6XDEMGAv6D6Vve3HMJfi5ZOpUK/c8JfGM8F8FoAFzHG7hY//wPAJwC8kDH2CICLxf+rgmp1\ntfZ07GDfPuDRR4/2UeToN/qp8L+Jl8OHtSCR90vhr0XC1wQb9muktBax7NQKnPOfAGAd3v6N5W5/\nKcgVfjsuvBDYvZuG65Z1tI8mR7/QT8J/KW5o22Yr1oqlsxKrgeUx9Wvyey1iXa60zT38duzeTb9l\nDpIcxxDe8x6AscxZUm16Eo9jJ56Gu/sWkx/4nWXzelb4OeEfo8jj7ztjvT0MOT82koYtC5/8JP3O\nYNixu2/FTuzBB/GRvhF+VO/MeGtF4fcrvFOF3FZO+McYVMJf92SwSKw3wv/EJ8h7PS4KamQoGdei\n0JIKan0jfFavdXxvrSj8MOD4ED6MbXMPLm9DCnKFf4xCbfi52k8/9NYb4X/kI/R7376jexyrgozG\nHPnEnAOoLovwU25Rbe0TvlmbwYfxF/jEXS9a3oYUrBbhP/448IEPHJ18QOue8I8L5dcFYQgU4KCC\n6rojfNlpnnhi+dv63vfWeFKuDEbXGkTORTjLInyVgFdD4bd9t9kE/uzPeg6x0x06Rp3374atFuF/\n+tPAxz4GXHvtyu4nC+uS8FUhlBM+8cTP8BxUMbi+CN/zcC2/HOfiDuzZs7xN3XwzcMklwKc+1Z9D\nWxFkKHzNoRvKwPun8BcI92kjfM6B667rOYtbR4X/D/8A/NVfAZ/5TNt3smA5tBzWY3ZPn+8FkvBX\nMnkckETJHT68svvJwrok/KTt8ZzwQdfjHNxNf0+so1UlP/4xXhFch0/jnctW+NISevjh5R/WiiGD\nVPVmfwhfJWDud1bN6ufCEPSkvPxy4EMf6mk/G929eAZubyd8WdFE642SrAa1434S/mpN2jIGAHxF\nC810wrokfM8DrsLrwKEBd999tA/nqEMlgnD62EkU8sADXQp8iFjTeQwum/Clwu2Rb44OFlD4OsK+\nEX7k9Ub4QYBEDj/wQE/7+X9HLsTteGY89xBDLm8dGuppOyup8Fea8Aer+8Gh4eTbvrqyO8rAWm7e\nS4bvA6/DPwMANrzr9V0+vf6hEoHvrGWTOkGjAZx1FvDyl3f+DHeJAIcwt2zCl9foWCN85tNrFrxV\nV/hBAKBUon96zDi2PSTv7YTaQ+k3ZGRBjxMDhksPuhB6T5/vBatF+Nse/wkA4LT7v7GyO8rAWm7e\nS4bnAYexEQBQO+vXjvLRtMD3Vz0dn0oEgbMCFTNWAHJgdtddnT/jN4jsRjG9bMKXt4R1WjO+FpDB\n6FywVF+jdBbYUEeF3+Nk6zwbBADYXsvnZa3CBSKEUhDnrfH++SKrRfiVaWqsR4o7VnZHGViXhO/7\nwCFspr+NwlE+mjS8l/0vYHh4Vfd5LCp8WbpPCsgseDU6sVFM48CB5e1PzvWs6TDerIMTLDWOCQTN\npd/bXi2dtuRpkh17fFJGgnKMoGVmVB5Aj4TPxef7GaWzWh6+nHeZx+DK7igD65bwhyE8wcbaWkVh\n3UhJQxcaNvcbvpcE4h8rCn96mn7rC4zYQydR+MuNrJBEtqYn+TOUNxOvGQhRnFr6YoQlWzqSHRe6\nUer3hQXTRvjyYdYj4TNxw1YiLHOlo3SkFekEq1+BfV0SvueRrwsAfI0um6vuWz1bx28mvfRYUfjT\n08C/48V4Y/PzHT8TNonsimii7M8sq8TfanX2ZSFL4YfJ/SxMLT1RUipiZDGWjuxfRm95GCPeQeHL\nJ22vN0Cct8H7J2DUh36/ykVmgbl0jqsp+iTWJeH7PmCDGhBbo4Q/8cjqhUcGjYQoQvcYIfwpjhfj\nRnx87o87fiZsJud1KW5alod9TBB+lsJXPZZlDE9UgltZhd+B8OXDrMdziM+7j7lT1Eu5ku3AdGkU\nIyfcVxPrkvA9DzAhOkdzbRL+9GMzq7YvaX0AiSpe6winuj8Qo6YPFxZmjTFcjP9Ylh1zLBC++oCL\nobLUMiYgUgp/gUiZToTPF2vphC03a5GEL4+RZVdOXRJWoj5wFiyPCF/zV98/XJeE73scBqhlsjVE\n+KqKmnti9SwdlfCXM7G3mtAnuy9DjFwPTRQwV9iEIcwta8J1rXr4qYVOGfeOKZaO9IaXu5/FWDq8\nSRfsoV/2RryS8M2wg6XTq8IX5814/7wXK2jg/+h/C4ZoRQnf9gXhB7nC7wtUFautIcJXC7PMH1q9\nsjoq4UfusaHw2WwyAuo0aueuDx8mIsOGDXddKnyVeLLsOBb0J1NgyrMWFyOKgPPPB775TeUYWgh/\n6hDtf+Zw931znkTptBH+YhW+OJB+Kvz3V9+Hz4RX4CX495VV+AH1fZYTfn+ghpUdDZ+sE2afSBh/\n369WL6lNytI5Rjx8v54ccycSjlwPHiyEVmHdEn6jvnCElarw+2XpyNj+eh34xS+AV74y+3NBAHji\nPhW07vuOopVQ+P0j/J3hY7RN8BUlfD2ka6XnhN8fqCp2LRG+90iS4eue2+p4/PHV2W/YSDpRuECM\n9VqCOtHcKZcX90jhw7JRQLMvls5aI/xmI5HeWfHxLAzgoEh/L6Oth0FCnDLUUzo7qvpvJfxIjKYt\n3n3fYago/GiZk7aRvBb9I/xKRIJMR7ii7UCP6Fy1MCf8viBF+EfhKdoJ7nzSmEto4MFF1m74xS+A\nQ4cWv1/V2+XHiKWjEr4z1+EeCoXP7fVr6Xj15H5lWjphAEcTq9OWQ/hee97jrOvZTvi0TxO9Eb4B\nsUI2ajmXxRK+UPga+ufhy0fHIOZXTOH7PmCKh6OeE35/oBL+0ZgY6QS/ljTmMurYtav373JOfupz\nnrP4/UZKdMdCqyjXElTCdyezl+1Lhc8E4a/HSVu/0YXwowBNRoTPlnEBeLBEwveEwu+R8GX0nN5K\n+HLBVY83QAv7v/CqwWmkNIS5FSN8x0mulZETfn/APYXwwxVUtF/9KpWu6RFeNWnMA6y+qHzYcuXp\nUmwglfDVa7OWoU68e5Pz2R/yXLiwwYrr18NXF8pl2XFaGKApFP5yRrOpea+wd8KXI8ZeLR1J+G0K\nX2bLXKSlE4dfLxNRhNgaG8bsihF+o5GsETKiPCyzL5CkVkdpZRX+a19LpWt6nDgK6skNHi00MDnZ\n+66WkxwspfCPwuq+pUA95mA6m/B1p446ytCK5OH3i/DXUh1kVeFHGQpfC/2Y8LU+WToy8qcT4V+C\nm3Au7iDCF6MKowfiDYJE3aYIn/OE8Ht84jLx5OkX4QdBYg9twuEVJfxY4Ufeqre1dUn40tJpsPLq\n+GQLJm1PoFo6o4X6ogh/oQSb//RPwNlnd34/5eEfI5aOSvj+VAfCbxLh66XlWzpSuUbR2ipzmCL8\nrEnbKEBTX77CT62uXUDhBwFwEy7DHTiPrtMSLZ1USoR6Pb4BvNdcOn1W+EGQbGsLDq4K4S83pfVS\n0BfCZ4x9mTF2hDF2v/LaKGPsFsbYI+L3SD/21RP8VSb8Hr0ZNVpm2Gz0+pwAsDAJ/d7vAffdl4ik\nVqiEfzRW9y0GUQT8wR8ATLHiwpkOhO8Kwi/3z9IB1paPry6Uy1pDoUUBfM1GAH1ZCl8tSMIW4eFz\nf2mEn1L4ouEexkby8nuQvfL7BkLwaPkyOQyTc9iCg71me140Wgl/tdtavxT+VwBc2vLaewHcyjk/\nBcCt4v9VgbR0mlppdQi/R1UiLR1eLGJAry8qLf5CSmBQZFnt5O+rhF8OZteUZdGKhx8GvvjFNIFE\nc9mEbwjCNyr9C8sE1paPr8beZ9lxWhQg0gwEmrUs+1JV+PJh243wQzeIJ4p7IvyAJ5O26mSriLs9\nhM1gUbRgTV0JLVz4QbhYqHbTEObi9Nz9huMkHv4xS/ic8x8BmG55+aUArhJ/XwXgZf3YV08Q7NjU\nyzB4sPKmbI9yIHLE3R0ZRQX11MrbbliI8EfE2Gnv3uz3VcIf5VNryrJohayUlyKQDoRvekT4Zrl/\nYZnA2iX8LDtOD/2E8JchblIKv8dJW9Z04oZpIuiaYjL0Qmgi+FFHkHxcPDSmMEb/99Cf1BFCP/JD\nqZbOsDa/KLt1MVgvCj8LmzjnojIxDgHYlPUhxtibGWO3M8Zun1iMx7EQFMJX/18x9FqlR97d0RGU\n0FjUsHGhUyiL0+zkLHFF+o5hak0Q2q5d2QtDZUdLEX6HJ6Pl1dDUyMM3EMJzll796Fgg/CwPX488\nBLqNgFnLWrmpKnwtg/Dl9Qn9hNRZ00kv9lqokX7jGyh+69r4XwNB8vBYacLftQu44ALgXe/qKP5U\nhT+A6ooRfnWew0Jig60nwo/BOefosCSOc34l5/w8zvl54+PjfdmfbISuIZhwJcoYqQ2nV+YWd5eN\njqIYLU7hL6TKixRNlrkoa9cu4Paf0vnXKxv7UixkuZibA04+GfjjjMzH0uZ6/auVTpx1fTmH4Tvw\njBK0ElU1U+dIFosgAM7GPQD4mvLw1dj7rLTFRuQh1CwEutVmX/7gB8B55wEPPdT2tTakFX67pRMX\ntnKTxsOaTiqXz4LJ2175Smx81+vif034CeGLHU1iA/3fQ8dQSxt2JfwbbgB++lPg05/uGP2gzi9U\noirmZ1cmIf7hfcmxrjfCP8wY2wIA4veRFdxXCnJi0jGEub0ShK/OkPYaWeBJhT+KQliH5/U+QbiQ\neJLbyBognXwycGQ/nb9fHkYRDnDjjVjUqq9eEYbApz7VdTmwXFPwne+0vzc3R6nVT3uSB67rcGFl\ne7S+Dw0cvl6AXrYBAEFt6U+yM2d+gnvwdLwNf3/UH4gqUpZOJ8LXLQRaO+F/4QvAHXcAt9/efT/d\nFH5M+E7ir7Omk55cd3rvZ1kK/yC20P89GOiqwu+6mFAqIqBjh1MVPgCweo+j9kXiyN5k/8u1IZeC\nlST8GwC8Xvz9egDfXsF9paD71GNda4BeWAnCV4uo9qjwY8IfHoYVUsfpFFnTioUIX+6+UyiZbMhh\nsQILHsbf8GJ6EvQb3/se8O53A+9734IfmxGJMLPKoM7OAkNDYpRmmpQ6IUs5ip4SmjaMEhF+PEey\nBGx1KHHWBfjJmiL8lHrNaARG5CE0LISqwv+v/wL274898l5CDNWVtjLkUSUjuWs13bjWbKQmitWE\nd91gIEhGraJ/7sMJ9H8P1m6K8LtN2qon0uHmthL+qVO3dT2GpeDIvmQfFrxVb2v9Csu8FsBtAE5j\njO1jjL0JwCcAvJAx9giAi8X/qwI9oBvctFdQ4auG+SIUfhM2UC7D8ilb5pEexz29EH6n05QNOSoN\n9BRNsWRI76DLrPB06/S+grk5Inx4HphldSZ80VNCswBDKPzlWDoDHqlKHWH/m8sdd2CpprCqXnnG\ndTW5h0gXhC+ScuHXfg0488zYdaz3kJg1rfCpsanXQf7NXIXwXSe1kl1Nh9ENWQp/P7bR/z0Qvhrl\n09XSUU9kAYVvwsf+c18CAHjFwb/vegxLgST8QPTFY1Lhc85fzTnfwjk3OecncM6/xDmf4pz/Buf8\nFM75xZzzBbp5fyEVvmcLhS/ZMgiA974X2L/02p8x1Edzrwrfd+ExInzDa6CEOm4/+4149GfdWV/t\n663BEHL3nRpPTPjlCkpQQt76HL0UHqCHoD+7MMNIws/afaMhJqF9H7As+GxhhR8ZduzhR42ly6WS\nT96uD7O/hM85Gennnrukr6cVfmdLJ9Qtys0iL+rc3KIIX/XwsyydWHCoDwbXgR56iEBDtaz0zQAy\nb7RK+NIKOoKN8HUb2Ne9GLvGV0bhOxu245fjF6LirwxdTR0Uo+1jmfDXGmSuba/QovAffBD4v/8X\nuOii5e9EldxC4XMOvOc9wHXXZX9F8134gvB1r4nX4Bq8EV+B/uHu+Xh8HyijBgN+ateumxzKQoQf\nQgOKRQxCmRDrhQkWgfv+kx5c0/co8aH33w/8wz+kPif7XBbhuy5QKIDumUXedGYWSEn4lg3YpPBl\n9aWlQIvoIi43RUMb5ATk3r1LihZLkVkHhc8Nkwg/8lKjTXkePYS1pxV+hqUTPwT9tMWkhz7qoOCI\njgo/o52plo4zK0bkKODw2Bm0irAL9MVYOj0o/HjS1jRRL42jHC4ioqJHcJ4QPi9VYCCE21h6ZNlS\nsC4JX9bL9FsJX97shx9e/k7URiQk9pEjwCc/CbzmNdlf0XwXnmYDJVoKH9srPZisvg/UMIB/weWp\nPqcOLhYifA8WWMHGAJQvzPS3rq63j4bipckk7z+e+lTgj/4o9bk4xC+jrTebCuGbJgLNys4CKSOe\n7ITwl+Ph68KaKMLpr8JXJ7B/+ctFfz1FZmE24YeGhcgQhK9MCkme7cnSUTx8PWqP0pHXJLVAy/eg\nRT5qqNDhdZq0zWjfapROY5a+58HCVGVnTyNwDcnx9oPwYw/fsuAXBleE8KenaZQPALxM10xNnbEa\nWHeEzzlgCIUfFFsmbfuZIENuc3g4VlXypU4Wtu678DU7Dpz/4z+QOXl7YBixj9/CN7OeNan9t8KG\nCw8WNNtCBcp8w2KW+vYA1iBmGXAm2tlc8aHkW1nXqdkU/K0o/MzCHnKYYNviCZEOGVwsVIW/YoTf\n63oNBakIlNYLFoaUWsCwEOkWDO6l7qnc3aI9/AUmbdVjYL4HI/Jihd9xDiWj36kKf35ShFHDhqOV\nu/ZTztMePvd8YM8e4KqrOg8bJbpN2loW/OJgXAyln9i3LxF5vCIIfxET3f3AuiP8MKROC1BUCoAV\nJfyJaBS1g8S63UbseuAiUBT+9mH6Xrww6t//HXjzmzO/W5pKbBJ1P2pn7qbwtaIVL/oA0HmsHwQU\nJL/IXMyap1zf1mutHFxPCl94+KGuEH4Ykhd+ww2Jwi8WYoW/HC/GiFZB4S/BQksX82lpYKIhRIaF\nyLSosIaiACThLzZKR/rjXRV+4MPgiaXTcfK0hWQjsJSHPz+VKHyHlbpepyhKCqkAgvAvugh4wxuA\nRx5p/0IvCt/nMBGAmSbC8iBZn32e47rjDmVUP0BidDmBBkvBuiN8zyNFG2pGEn8rb3gvZuZidgTg\niflh7HqQelQvhO/rdnyzrUkR2im/+D//J/CP/5i5RN2uJlEeiyH8Euo4Ew/AgwWrYqXf7NSxbrsN\n+Pzngd///YVPSAHngOErzNJ6rZWD66bwVQ8/1K0kC+TkJHDXXdSxxfa0ot0Xwl8xD//gweTvJSh8\nmReqgWKc1CyGaIORsHTMyEs1jkXVFBE3JYS2KEvH5B4abHGE7xmlFOE3puj94pCNBkpd+6msnOXD\nBCAeinJdSdYaEPVEOnn48tgtC7xYgo5oUVFHveDOO4HRMm2TDeQKvy/wfeq0oVmAVrCSF4FsqTM/\nD+zevfgdiR4whyEUoh4JPxQKfwOtKDQOUJL7kOvtx9QCdWjvt4j0A9iCbxuvaFOmYQi8Dx/H8/Ej\nbMMB2IN2+gOdOtZCjNwBzSZgc6Vjt15rpdMvxsOPDCVlgAzv0bS44+olhfC9Na7wl0L4gmAdFNs9\nfHGg3LTADQsmvFSBG7m7Xs5H7sfTCj1bOlrgweB+vKK9Vw/ft8opSyeapfY+sKWSEP4C6joIiPCb\nGgm6VFGfrPwi6gXoYOnISDBmmWAFak9qSdJ+4NAhYMuoECqDRPj9fqh0w7oj/Fjhq4SfZenIFnz+\n+cCTnrT4HYnvz2EIRRHq2I3wjdBFYNjAGOUM0fbR5GbQSvjf+lbbd6MgUf1q+200gC04hN8Mrm8T\nL54HXIT/jP83Sy0KvxPhx0HXGSujOqBeJ7JsQpBvD4Sf9TxpjdLhhpIUTK7AZCyt8IWHry3Dw9dX\nysNXLJa5A0tX+M4CCp+bFrhpwYKXsoAWo/ClpeNphdgfz4zSUY7B8B1a7WyQRdlx8rRV4ZvldGqF\nahU1lFEa0MkeCsMFO5MkfF8X4bgq4WctbHFdwLKSvzMgFT6zrZg33Gp/yfjQIWDjMG1THxKWziJW\nJ/cD647wY4Vv2NCLdOPii6qSkJzc+tWvlrajJSh8K3AQGIVY4bM9RPhtC2re+Mb2LytyWN1PcyY5\npyzClxEUdABpwue1DpaOvDaM0X5f9zoajy6ARoOu+6w2SttuOGmVlmHpZCVXbPXwuWm2K3zGYhLR\ny4mHv5xc/zpfGYUfOU1Mg9KZPnLn4glfrs6uoxxnsYyRQfhq/vwt/h6E0PCkif/uviPRBn29EI92\nuhG+5dH5+NbiLJ3ArqQsHVabR00bRKEA1CJRkH0BWycIxAI5TUzWzyrRZp0Uvswh3kHhy4I7zDLB\nikLh95Pwr74aP/kpw/YytWF9OCf8vkASfmQVoBfI44t9MrURteY06JLatQ0K4Rd5bwq/ENbhmWVg\nlEhRSjDda2mEulD8f/mXwIUX0t8K4avPB34g8Yhbicr3EfucABLrQ8Cd7dCpVMLftw/4538GnvWs\n9Gc+8hGaPBVoNIgs6xadW2Pa6TiUTh1/y8j99Prt+OhV28n7tojI4hWkUuHresxGRjmxdNhiLJ0g\nnTbbWCGFP3fQwTTomlQPLp7wDZceynMYWtjSEYSvku6rcS00cPz6gWu67kcqfF8vxA8/143jCzIt\nHblaPLCJ8NUqZSm0En4hbekY9Xk09EHYNlDnYocLTNzGHr5Olo4+pazM7Ub4HRR+PDqxLehS4fdi\n6QRBT9Fu0d/+HQDg2c3vA0g8/Jzwlwlp6URmIVb4sU+meuOthL/YCB7PQ6TpqKECmycK/zX4KkYw\nnelPF6I6PKsCmGaS0xiA5jfpgWMKcpbk+qEPAT/5CQCARUp2QGXb/lwj83VxiGnCb1H4/kRLQ73p\nJuDuu5POFgQJybaOQv78z4GXvjT+N7Z0SoLwJxrpB2yGws/a7Nubn8BwbR/w2GN0PUwRXw4kx1Iu\nIxDRDdaAYun4CrH8zd90XsDjOGSrXX55/JKq8Ps5aevOOmighBrK4NWlEX4EhjqrpNIYAEgI37LA\nrXbC3wQiv4P6Cd13JG5EoNtxJkrXBSotgW7qKMP0qJ1EhS6WTkvfCu1ySuGbzXk4piD8oPsEvLR0\nPEMSvmLjdLJ0uhC+9PA124p5w6v1QMavex2FZndBo0g27lZXRL6J73R8SK4Q1iXhk8K3aUIPSuiT\nSvKti44WGzLneQg0Cw2UqPiD78N69EF8Fa/FP+IPMp8fhbCOQAx/1Uai+01SJlJGZeRd6Uj4VUU5\n+2m57HlApN5ihfD34gRwWW1E4rLLgHPOSVjYcbrngLn7bgBAoxrCRAB/QFH46grbDgq/Ned6tdWC\nsq2k2LMkfMOAO0dfLA4nCl+Xlk4YAm9/e+dCv0eO0MP/X/8VgHjWylqrCOHW+1chJqo7cFAka20J\nk7amW0NTLyNgZkdLB6YFSIWvpFMOYABIUo0sBKnwA6NARYNA92agNf+g6uGL0UdUpDadmjxV0UKy\nYTFN+IbXgG8UUSgAjVBOwHcmwtjDl4Q/TQqfaxoaj2Ys2vK85ES6TdraZswbag3qjrhW5PjvMrwP\n5okQyq7XMTXaAAAgAElEQVSwJXPC7w9clwif2wVoA8JbnKvSDVGHXq3DsMWGbPo+Qs2k6AkAcBwY\nBylWfgsOZrarMq/BF8NfyhBGMPxmEs0xPNx+LFGUYnnVfVJTAheCNKH4flJODUCyIlXTcT/Ogv5I\nh0TpWYRfqWR+NHruBQAAd4aOmYvyW/7ew+msmcoFUR9YrWtiUnMOtg1mW0nOEenhN5tw50Qon0L4\nsYffjVhbHvZqtSOAVHm/wB0i/KZeiRemLQaGV0dTLyPUTLAgwKmnAh/+ML0Xk4VlARkKX8Z8F7zu\ni4jkwyQ07HjSVuXJOFumshbAcsU6ErFqNOq0gLCFDHmxxdIJPQSGDdsGGsHCk6tAYukEpiD8WRIC\n90ZnYe7+vbj11pYvuC6FaBtGV0tHsy2YZTqGRYVMdgslrVObshui7Yn+HzkurSz+wheyw9b6jHVJ\n+DZcwLKhDxK5jn70ndQpZmcT/3xuLm0gL0Hh+8yCi0SRmIcp6VMThXaFH4Yocgeh3a7wjaCZkNmW\nLe2NstlMr1RVqg7JOrkAUPHTRCZHOwDwq6/dkSh8XcdBbIEx2SFvvbpuQUaZqP6/0oHv1igpmCRJ\nY4zOKzyUznioDvc7Kfy2vqgQfqOBROE7Drwqfbg8VgA0DQEzKEvqE09kL75R0YXwvfk+5qxtNuGg\nCL9Qge4sXuFbXh2uUUHEDER+gEceAf7iL+i9FOHbFgyEqfQSQyBRUwq6e8xS4YdGAQYSD38hS8f2\nRdsQH+KdLJ1Wwi+lo3T0yEOo2zRp6/du6UjC1+r0QPsVTsMWHMKXP98evfDoExZcrdCTwpfZVxdF\n+F0sYXlfzHnRz6Xg8zzgs58F3vKWzOi8fmNdEn4BTfBCAWbZgi+GtQCI5E88kf6enU0PG5dI+LFH\n7nngopEOoNp+/4UCCAqiB6mEHyaE/0h9C/zW2NxmM63wlY4V1pMGPBBkE/7E2b+B0159bkz4XCPC\nN6cPJw8SVV1Ikq/XE+WiKU1FUTPTNeF3iglgYwOdF5tOF7Fwa8oxL6Dwi1AunG1Dk4Rfi5IJOceB\nJ4bb5RGhxvQCPTh37ACe+UwsiC6EH1T7p/C1pgNPKyK0y3FUS89oNjHm7odnlhFqBlgYYCv2g4Hu\nWTzhZ1lg8t7Wk3sjCb8YtGRz3b+/nVDFUzg002GZC1k6ckQpJyA7WjqtEzXlFktHZPwcHARmGy2h\n1B02pyNEZNLcja4QPgCw/S3ZNj0Pdz9ko+rZ2PNIBw9fHLtesGCI8GVVTHVFF4UvHVnWqFM/FItC\nuesl2UH7nNsqC+uO8CXJsUKBJoGQTI5ibg7YuJGiT+bm0k/7xYZmeJSuwIPoaK4XKxwTfjvhC3Xq\nlwXRK4RvKoT/8ye2UENTO4njpDx8tWP1Qvjcpo4hCZ9pGvZjG6XBlYmq1AeenNyuVpOGrCtrBZST\n22rQJJmcPDY3kHLR5+h8bwVlJlVD3Dop/GYT6WyeBVpLYcHD4NteF09go9lEUHPhwsLgEK0VIMuj\nx0RULZEcrYSvzossF7pPobi+XYYVLFJUPOtZeJbzQzTtIUTMQMGbx36cgJtwKYA04cMW7VAJtZWE\nb4Ut609OOAF405vS+xLsG5l2nLbg+VPX41Q8HH8NUKwfpqMkHiSaiCnnnfpQi8JnxULK0jEjF5Fh\nYWQEmG12V/jS0gktYekIwh8+nwi/cOSJ9BdcF6FuoYkCDu3usF1PTtqaK2LppCKsSqUkw6vrrUwm\ngA5Yd4QvFT4KNiwrTfjR4SMU0TE2RhkzVVZeJuH7DT8mYgNBO+E/QY2wOrqD/lcUsxUlhH8Im8l7\nVR9GjpNW+GpRDCf53GA0k3KppIfPRRRLbMvoGm7HefT3f4sYbdX3loTvOMnr6sSBODkXFjZERPjB\nPDVWayM9yMw58v6/gjcASEc8LKTwJUnJ49WLgvD/TQkt9H2E83W4sGMFGukm0CvhP/oo/RaRG62E\nH9bEzXvTm6jw9TJg+g5Fk1j24ouM33svAKBZGkGkGRj26Fq/CLfAc3nK0mGC8L2ZdsK3VcIXaz/w\nve+l9yUIKbKIjDkHPnfoFfjsd4lEWy0dVy+hIjKvGsPS9+nN0tFto13hGxaGhxH3p14mbWPCb9Bx\nzG2mY61MtxC+R0ViXNhozi5s6WgFK560Hdh1D3DJJenAhZtuohQoLfNq3Syd1BqRYjGxV/2c8JcF\n1wUqqIFVKm0Knx05TBf6kkuAH/0oe+Vtr/A8eNyMLR23mtw4HWHb/edf+jIAoL5BEL6o6rOvfFpM\n+J5RxByGoCNKK+5mM6XwVUtH9WxHMJPi5Xi0I4le8fAfwlPob5mDRCX8akYKZbUDipPbjZ0Yiygz\npiT84hYifGueOomMQVcJv2eFLwhfJeMY83NwYcfRdqFuJVE6KjLWV/DdRHqRyJ8vCV9OqDvTDnW+\nL3+ZCl8vA0bgwDeKYLaynqAXKA/8QXcCkWbA5sn5VR+fTBYL2QnhNyYT0hgGRaUVIoVI5P3eujW9\nP+HhRxYpfLWYjGW1E75nlOJU2+ZwlyidTMIP46gyk3uIDBvDw0jmxLp4+CZ8hCIc1GhQm2lsOwUA\nMFpPEz53XVQ9m7bdKSxTHLumWDo7fnoNPRg/9ankg5ddRkkOa7V0H+1C1qlIqVIpGW17XvLdPten\nyMK6JPwBVMEGB2Db6Th0xjnmHAt7tR0IDx2BO61c4MUSvu/D5Z0VfmpuKAzBrr4KANAc306vCUV/\neODJMLkPTExgho0mCkeJIgprToq41I7FlR2NYCZFpvGkbaHF0tE1VDEI16oklo6qYtT1CnKiNKOi\n9R7sgI4I4cQ0oho1WnuTIPwGkc2MWGXq1rtP2mYpfKNkQYMybBFrFfS5aTRQihU+N0xUwowCwRnK\na+4g3XfNcwHO0WwSgQQ2KdWpQx7m7+gy8dsjzLCJwCTCN7nX+0BSKfP34Jm/jVAzU287B2fj9SXM\nptTXAOBmKPwiGknzyZqER0LkXCj8YDK5lpbVvvDK14sx4ReGbHgwO6ty8eWzcB9OxB7oNs2ryZGq\nFbmITAtjYwnhzx7pfKFksRJuk8I3mnTOxc1DqJY3YYv/RGqky10PLsjS6ZhCW4q1ghkTfqgtEDFU\nraZFUhfClzU6ANDIUvRFqzlPNYh72EY/sP4I34lQQT0m/AmMp96//jsWPvnPm6HzEI9+P0k53FGd\ndILnoRlagKGs5hUN24ab5hmFQFlJhHFeeSXwqlfhsU2/Rvs/eBAT4WiicJTvNKt+Rw9fU4pKtxJ+\nHJZZTFs6zDRh28BcZVtcjH32ASV+WSV8GT2UQfi7sRMAUH/8SEz45riwdJpEBlUQIwf1tKVzKb6L\ni3FLV4VvtOT/8Usk6a35SdRRThH+GM9YM5DRiSb3pEdPjiMUo4gnt+Bh8qGl1aBNgXNYoYPQLIKJ\nuYieQ/EF4V+Or+Ou512BSDdSb7uHZtCcp2taHrGg2eKBUG8n/BIayXWWAqFl5MMVD9+Ej2AimQ8a\nNBrtCt8soSQm2AtDNgmrTqLJ9+HDwAM4C3txIpgpCF8kbDPhgRsWzj8/sXRkFawsBD6HBR/MMhGA\n5pYcFLD9RIb64BZsxqE0R3seXJDCZ53Sb4hj14tWHKUzIduJYbR/fn4+TfhdVuuZgfKgGRiICX/Y\nOZi00ZzwF49onm6CNkyE/96W2ukeLBzGJgCAc2+i4g4+sTjC554HJ7RQHFJW8/rJas2Uwp9NqyUA\nwNOfDlx7LUIRtRPuO4ipaCQmfG8yIb7GfNCR8IuNKQTMQLM4jCHMpWzF2NKRhC/fPOEEDAwADX0g\nbrT/9g8dCF8q/ChKIjmExz0zSPaUs+cIoga9Zo5U4MOICV/G1asTYMxt4rv4H7gFL0r6yS9+geZs\nM1Phq9g7R4RfqE3CYeW4L3LDxBjSkUFt5yKvi5JSgs9XY4UfFRLCbxxWbK0llCakHXnQwCnyRRB+\nj+WPE8sPJ2BwiIFradLxDs8g2E2CZWBjEZol3lcanikmX1P5gTrVl4wtnQJ0RPAOJTVdNxlTCeGL\nTJoyYRpAayE8WB2vE/f81EhbPpwisUjM5B4i08b4OHD5a6n9L5RFMl5cZidRcg6KNEIYHMc4JlLc\nyTwqAMQtO9v2A+IymqrCl8WCuBB1qWvWovBl1a5OMCJlvwrhVzyldm5O+IsHn6cepQ/TUu2f49l4\nOu6K33dhYxYiVnx34vXNTiyuU4cODROHxgXhO348LCygmSZ8Yc+8DN9U11sRhN0STs3CQREjG2l7\nU48nROVU04SvdqxB9whq9gaEhk3JswLggQcoFU0SsSRGDXLnr341BgaAJivSB9/5Thjq8nSVJNVy\nc+Kk6hPUML0tRPjuE4fBhcI3BoqUe1+EIMaEr5RyG6gdiP92m5zSKJx/Pk698l2oQFHfhUJbDv/P\n4a0AgFJjMk7LSzs2MY507D+Atph8zgHmJB2rvn82VvhRibZnw0VzQmHmRXbERx4B/uM/EI+EIrsY\nTz4vlvAnMI7BQbQp/KEbr8WJX/owAKC0fSwmfJYRZ56p8NsIX0zaioiuxoFEpGzSJ+MmJwucB0Yh\n2f6IVPjZpBc2E8I/8UTECp/7lM/Ihgdu0n2+6NJ0SOTMDC2d+eEPaVv33Qe8/0+F324lc2izGMYl\nlwDeEBF+PMKOIrAggAsbWpFCd7MyL8symnrRglmh/iLFR8MRWWOnFEFRraZGU/t3ueCcSkh8+cst\nG48imNyn8qYARbwJwh/wlW1mjST6jHVH+JKsjJEBmYUY205KGqcHixJRATAPJoSvesy9IGx48GFi\neJwaXNDw4iiRtnwsQuHPYag97YYsz1erwoeJTSdSo2glfHRQ+EPeBKqljeC6SUPxALjgrBk88ywH\ngUvpDrSSOP+nPpUiVN7xDhQKwO4jJUqN8JnP4JIDSitVCV/19gXx1SaoN7GTTqJrsXtvbOmgVKLq\nWpwsg6x6p4O1JOFbNDsf13rd8MAP0temWIxHUADwozd8Cb/E6bQbby6paAbKJzOODBumJRvq9DRQ\n4nVMGRvpVPfMxApfrhi14MGbUph5EXmWwhA49VTghS9EivCNUo+WjuvS06KF8FsV/tZbror/Htmg\nx754quqYwCDm6cEKdF54JEZ/3KK24hxO2sA4m0xZOgEzEBrJHEBxmAifdVD4gUOE//73U+BRbOl4\nQSxeuCBAu0zv+SLr589+RqT/8Y/Ttl70IuDeO2XMfEL44eZtsCwgGN6Ak7EL/n1iFbk4cA8WjIoN\nC27281uxdGRY5pCwF+tzyspziRaFPzfh4ZFHgC99qT3iVZLBVGFbcky6jggMg75Q+LfeSl9eYaw7\nwncn6CZZGwYxMkKK4O++WIzfVwlfjdf1F0v4DoVlDm9MFL5s8HE+FtdF+KG/wD2f/xkAUiGdCN9o\nzMODhS07aHuTu5RJWzcAU7waterQUDCFZmkUkWHCgofpaWAGo/jW9IWxSooJHwBOPhlgDA89hCQt\nBICSr5B86+RbKZ3BsD5JDX/gKdvwCJ6M4l0/A28khO+zhKSbKCCElib8RrLC1697wF6yJjS3haw2\nbEBh42D872FvNHXMqCgJ6Kz0pCZApfTiOQiB/ftJ8VYHqfNV987ECl8mtLPgIZhJCH9mfxeF/9BD\nwHXXAQBuvDF5uTpB5KoSfleF//7309PixhsR6QZmMUyEr3dWf1u3IiZ8PYPwC3CTJHsdFH6ca18Q\nr+xHADCuJZaOFgUImYHQSO6xPUiWTqd1EJFLhL99Ow0y5Wgk8oJ0PiAAhQq9FwrC//rX6W3Zb+J7\nhTThOyN0P6ef8SL64IMiT5RC+NZAgVJ4Z8zty9GJGocvEedWai0mrRB+c96V02FxDsT5r96A4NWv\njQnftcSEk2UBjCHQbQyFQuHLyagVxrojfE9kgGTDROpnnQU86fSE8LbttHDzbfTeWHVP/HrgLI7w\nm1WfCPpEoTAcL1VsO6w5eODPvw79Lz+Mp133ZwCI8EWqmRjSX9d4hICZGN5EymnuiaTD0dC3PUqH\nc0rIFhYqVOIOPnY9Rh35PNwRh9ZpxZZKVyDeV8mzwBdQsTtEKKkgfGeaPrv15CJ24SQYk4fAGg2E\n0KgItCB8FxYABg9WKsdLnEAKYmQklNPQ5K70fsfGUjmHfla6GE0k91IfSAjfrqQJ/1q8CrMYRnAk\nTfj79gFl1BFtJoJoHkgUPhOEX9Q8eDNJZ973cBfCP/tsyrzJOX760+Tlg7vovHihCLPcI+FLC+rO\nO+ENbgDAhKXT/kBroIgbPnovKhWF8FsSpbkDNMwND4vRjyT8ltWvLPAo0kawlT+VtL8NSBS+FvoI\nmQGuHI89aFNyt06WjiB8GRiUWDp+4seL/UqFH7gkcL76VXpbht++MPgu7sI5AACjqCj8MRqxNc+g\nVB+RTO0hyRY2CkM2bLiZ2Yzj0YllgbWIB0+KQXXYXq2movzceS8eDBcKQNRoYvC1L4Xx9a+Cz9IO\n943TseGP/oiOWbcwHIr22SFXVb+x4oTPGLuUMfYrxtijjLH3rtR+br0V2LQJuO1mcTcVoognLQFY\nFQs7zqb3NnFFaTYWR/huzYNZsvDUZyRFVlSFE9SauOM76RWdWZaOqr6ZacZlCKf3KIo7yPbwPY/I\nKyyWwQ2ydJwjCaPIRVl6WVH4Aj/4ATCwsZR6TRbqoINRql1tpM4kCV8WXdl+ahHzGIRWn4fWbMAz\nSqRcNEn4Nq6+mkJj1ayARU8ZvTheR5sBw8Op+/jZL1ZSDylzJCH84mDSSUcwjd/B1zCDEey+s0Xh\n741QgoPCDpq4rx6s4cgRInyZbG+45KF2JHkAqrHtmZBkMT2dsmzmDgvrq0RpPnREqM12ycQpO/70\nNOolijDbvDmt8Oug+3Y3no6LrngqgITwzSD94G6OUWrkNsJviSoxPAdNVgQT6ts5lNyj7fyJ2M2Q\nCj9SFH5hSBB+B4XPBeHLgAWp8LkfwHfoesiHQHFAEH4zwOQksBOPw4CPcRFs97eNN2E7KBWBXjDj\njKBslDqWsZmKCz1x04M47zzg8V9Ru/NhoTCcTfgHDgAP3SdHGibAmBArBK+RrfDnlQpmfs1NEf6d\n1yZWYmMX8cwTJ15AfeiyywAIwufriPAZYzqAzwG4DMAZAF7NGDtjJfb1yU9S1ts4ykOdHS0qSnbQ\nAkol1Ax6f0ZM4C5W4TPXRWk48fvCpp9q8FHDwbaxNJHNY7CN8NWHEbNM2AO0veaRtMLPitKp14nw\neSkhfDVtgFT4Rqld4W/bBlz2W8XUa3KRFID0EFNU6JKE781R7995OhG+0ZiH5jYQmEREkvA9WLjs\nMsBnViqTYtFLxtSqwo8hK35t3tyWa3xsm3IvRxPCl8VuAFpsZ1kM0xhFNJkm/MN76JoMnkqE/42r\na/iTt4XQwGPCHyp5mJ9Kjrc53duk7eR9B1NrZ+pirkMvF+MHeWs0R1uCRKXdPl4bR7kMbN8OcGVC\nr1GmB3ADpZgnJOGn0igAcMeJ8PlENuH/3d8Bt98O6EETHivAENtpHKL2F550Ck7xHkgWXPsBQs1M\nEb5RNBEwC6w1X79A5KUVvozS4V4Q9zv5ELBLFGYZugG++iUXj+MkfB2vigckVZZcH7NkxskBjVF6\nfWDUxH5sxTPu+yfcd4eL73xTWDUlG2aFLB2V8MOQJpLjuH8rESsSsRhsU/hpwpfuoWUB+3+WuAfz\nj1Cf1Et2Yo+CCN8WGU3Xi6VzPoBHOee7OOcegK8DeGmX7ywLmYRvKsPPISLYqYGdAIBZg6RD0Kk8\nG0gBXHkl8LGPJdanFTZgDJZglhRLRyF8XneozJ9AFZTxsPVBrip8zTZRGKKGpsajtxK+VJTVKvnR\nrJIQviwIDSR1ALIUPkARNSqa1mAc1xyUkgZYLwt5JdjMn2vAh4FN2wzU2ACs5jx0z0EglrpHetJp\nymUgYFYqk2KpReGr6SEAAO9+N13oSgWtYU2/8eLkXAa3KFE68h7rOq7+mon/+i/AN8vJ3ILA7H46\nh9IOOqcKarEnXNpIN2eo4KXiwHsl/P23H0StlvTdxpQg/EoxfpDXZxLCjyJyg17zmmQb/3Vb4q0/\nNLcFL3iBGGwpCn/0JHoIqqvIdYvumxU24Si2l7+ZFvrFhC9Jy6Wokj/5E8o1Z3gOmloRmnhwelPz\niMCgPe0sbPF2x1FfkRuA6wYi4bk3YYNpDIFmQuuQOkKGZUqFr0bpyJKM0kYplOk8Ij/Ej24kQn0F\nro+fU1U9aQ92xURZRHVpQuEPDwPvw8cxgBrOwv14+D5RKKdsQS+TwlebxH33JQu5AMSRMuo8lFwv\n0Er4/nSN5qegwW94qaLx5pEkgVvtMYXwFagPzfsfL6/GQtsVJ/xtAPYq/+8Tr/UdBw8Cp58OXPEG\nQXjqE1OxJ+yN1GCqw9QRGmWhXjvk8q7VSA3/4R8CH/gAcM3fzwBhCDtywEulOGY3cv1Ugw8bzdQq\nWBvUwVrrgqtkzGwrk/ARBNAyCH9+nhS+NpAQvlq0QeYN6UT4sXKPj6UYWyYPHUqU9V9fnVb4QU0M\n/xng2YMouPOooIbIJvUiJ/RcUMrbUDPjXCUAUPITwo+aXnv+eZXkW47x9/938pDadlpGvd5iEa96\nNcM554AWmjVbim9UqbdrQ4NwUEgRfqzwC26cSx5Ix+0vBG8PKfxnb3ocz8MPUZsU6nOgGLcTVeE/\n8ADw4IPA174GfOMb9Nque5L7fnv5BXENGdXS0QboOj/vkkQtGgWh8Hkz/SDYSe3cPdCu8FUnzQwc\nuFoRhhwpzc7SPd62DWPNA9i1S6SQ8QJwzQA30ko4ZGZ7RS4B3qLw5Wgky9IxLYYAOngQYO/DSbuQ\ng8CGnkzi2wNUgAhI5uyGh4GHcSoA4A6ch9ndNJo0KxaMUjvh33MP8O94MT6Ev0SgmXEHVQk/DpJQ\nLJ3G4SqC+TpqqMCFjbDuxoRdqwFMmayRlk5rP5SEz20bL/tfJn77tzMvX19x1CdtGWNvZozdzhi7\nfWIiI466R0wcjvD/5l+EE2/+RyJ7LX1qDUFkg9upYQSDNJnlD47RZGOHkDIRMYinPQ04Y/QQfvdP\nRoEPfABlNMCKRVhluYjESzf4hgOmWBVWVj4YtDQC04zDEFsVvjppK4+1NuPDgg9jsAwIwlcLokgi\njePwW7FzZ+pfa7CQLG1HQvixty8afFSjlL8A4BTJBnolvoGoSJ1PkkGgWWAMCHQr1VmsUCnL6Hip\nQux08kmnVkdn3/0usHFHQvjGUIbCV4bMRslqqygkCR+lEmqooIIaLn6euDfC+nvBkX/BOCaoXWBh\nwm80EKfgjvaTwv/6nmfjh3gBagdFrpnBJFmWSvh7klE/XvlKGkkOKff9gjeegm1SHimWDhPHObKt\nnfCLcOAwZW7jpC0IoSE4JKJBJMs309aGIQhfqtAh9wga1jCwdSvK/izOwy9Q/t714H4Abhjg4np7\nTCyU0qyOhI9WS0d6+J4fT+bLuQPDAELogB/E0WBAsthPXXtRGDDxVnwOP8YFcJ/z6wCo6RzBxvgz\n9l5KlGcP2DAqNgyEcGqJeJqdBV4MCq3SB5Lr6WtJn4nDoBWFP7Wnimi+hhoq8DUboePFhO84SEXw\nOPvo2ksxJyEJPygO4LHHgN/8zezL10+sNOHvB7Bd+f8E8VoMzvmVnPPzOOfnjcuZmSVgy9xDOGP/\nLST121Y3AbOMiGnkSWLR1ZDwq4eHF1wW/jBlh8U33/tzPDC9hY75m6JQQakULwziTS/lYXKn2Za3\nozVCBwCMSgvhD6cXfQBE+CmFHwS47z5g94MincFgMa5pqia9CqfFNgodFH5LCUCtUoyVjQxdBRLy\nl6MH3nBoghbALVtfn2xAEL4c7stOE+rpVZhGqNgaTa+94EgpPZkscemlLeei1AWOX1e+aw/a4MK6\niCF7ZbmMsEiE/09XimMTJLZ99n68BN9JFuhVOxO+GvXJJo6gVgNGfVrEtnUXpXM2Bwox4TvzybnL\ndTzy+Xb99cCAQviX/d6W+O94tad6rsqDMZ60RQBHS65LZVMZ0xgFn2xX+Crhm4FDNQVEWoEtOAi3\nOBJP2P8C5+N6vIKyahpGvFBKEn6omR2zgXI/e9IWQWLpyLBa06TSjKEbwFAmoLV5UupNPbm/hQET\n1+MVeB5+DHMzCTjDSBO+1RQZQwcsmOLcmnMJcavXgCnpJuQ8FACgReE7KADVKniVCD8yLPCmm5qw\nj6qJP+MfpkZSGkkTvhRGjkYj1Wc/GyuOlSb8XwA4hTH2JMaYBeBVAG7o906CAHiGq8TDZRD+yMlE\n8DtOo85yxoX0/84zSghYZ8I/KNYIbfnVD+LXvJIo8lEuxZO23POhhT7qQl2xpgPNa2LSSjrtgw+2\nb1+u6gMAbppxQY9WS6fVwz/7bOCKtwh/crAQK/y4fi+QtGa7g8J/ylOAyUncYZxP/xeK8YIaNRpG\nEl9tWnToZuLXa6PD8eiJlUVnFGQQ6CLnt54O2ZMFwwFKbNVWcKTV97rlFuDHPxbbVohPJXw5MV9K\nL/m3eBIfDSgFQkoljD+pgpe/sIbhUnrCTqJq0BN6IcKfOezFKQyCmoPTJ34Uv/fMfdcDAOzhROHX\nptoJ/6EHI7yk/H38xZ95cUIyACg/WSV8JQ5fjoRPPz1+SSp8AHB0xdKpFDGjb4A+3UL4UYTZSaUg\nedCEpxXjEedmHII/MJJUiBOw4RKrthK+bkKLelT4ctLWVwk/UfgBDPjNMF0MR/gwIU/qMsjRNZCK\ny8DnvlJBKBaqydXXhSGbCt4DcbU0ACg9em/yRcUVCFSFH6Q9/ElsgFavgtXrqKMMbtmIXC/lwfNa\njdaBALEqKI+1WDoW7WPSrWBgIHU7VwwrSvic8wDA2wDcDOCXAK7jnD+w8LcWj2oVOBd3Ji+0VtgB\nUPw/FPtq7qQxcnEbKYLhokeEnxFSduGFwJ/+KQkqu5YsgZ6foe3rlWIc/81dD3rooS49RseBETiY\ntfEVW+QAACAASURBVDbF39u8uf3YVYXPTStWAQsSfpAkaQNIycIUk7aKwpeqqKPCB4CxMTQ14YMW\nC4hM2r8apXAIdOD1GSoheOn8v8LU6HiGhhkOgoipIsM8BbnJydvIsMAU9aeHPnwmrLCmF9f77IiL\nLwYuuKD99SzCV3p+eZRGPansCsoCMX2wgkFWS14rl4G//uv4o/NMFJqutxD+zEw8Upjdl8g6zWlg\nczXZ2ZhPk3Uq4R/ck1yHyUkiuM0/+Dr+rX4R3jH/IVoV+/JX0ZvqPJS68EpWSDrttPgllfDlg1Ze\nj5o1hpP3/5C8BsW4Vyemo4YDTy/GAqSIJvjQcBvhb8AkDDtR+PEoTrOgd7J0Oih87gexpSNf0zRJ\n+EGK8GUAhJqTRg14UAn/9a8H9J/fBiAh/OKQBb0o5h3mk22M7/p58kWlyI+q8OMYfYXwjUYVlek9\nmNHHwQ0Lmkce/t/jrXgTvghWr2PGpJGGVSPCr4y1CC9xDQ/VB/C7v9umN1YEK+7hc85v5Jyfyjk/\nmXP+sZXYx/w8ZYpMvdCKt7wlmYEFEvadmOgYQywLLG3cCLC9ShqGPWLWfaAEu8DgwwD3fOihj7qI\nImBuE2bQhG8UqE7tn/5p5rGrhM9MM/bbUx5+EIDxhPBlA4yLVA9a4JLwlfz4Rl0QfieFLyD9eJSK\ncak8lfBlOoPGjAd+9T8DADbPkdc1OJikQC6MiLJtYn+heHhw00otu9e5j6ZQodz1wJrNODpoUVBD\nnmSPV0iyMkqTdLt3K9+R8yrFIn2/Vks9BPD2t+PIc18GAJiPynC0EsxaS+m5Jz85XoxWPZgQPnOd\nzAzBKuFPHvBwRKQtmpoiPmX33A0AeC5+imFtHvbmEcR5QSRUhS9rFMQGfzLpCbSkYSgUUDR8DLtH\ngHe+M11MvuHid3ANPoIPQPeoUIu0dAAg2HFyG+GPYwJm0YhTIURMrIzVrXQKYBVB9sIrBEG88Eqq\nfsbIww9aCF/mPzKUmgJsKLG02jSNGOVvBF3s0rAV9wNV4evzyr1VrrGvWjpB2tKZxAaUqoewbfJe\n3FV+LtUQ4B4mJzjeiv8PX8QfQG/WMWeRRT0UEeEPjrdYOnLUh4oMzV9xHPVJ235gfp4IMhQ1LjPN\ncsbSilD61899blt5PM8jlSCxdSto+f8FF2DvKb+OzZw8gtETSjBNWljEXQ9a5KNhEOForkO50PUC\nzcZ98pOZxy7jswGQXSHzZMOPJ0HR5uGnFX5hyAYThJ+KDGr0oPABOAYRp1Yqxp2iMmrjA/gI/g0v\nwdiTqPM059y2CcyhIVpfACC2U2QxDplPXC9SrnS1wlFM+J4HzXPih8ai0MXSKQxasOGmcl4xtwvh\nAxjaQr9PO8tC1dqAYkPZAOc0RJ+aAjhH/XBC+LrroNJM5/PxYNKoTdxXPfLw2c/Se1NTgtcffxwA\ncM7G/RjR57NjshVCjx9aWxLLRyWr1KrcYhG/POFi+vvee9sI/xr8Lj6Aj6EIB4FeSFmMwYUXtfWl\njTgCq5RYOjKpm28UYEbKXMzf/E2cx4i1KHx5rFmWDgCEMBC0WDqS8M3WrJPJaaYhHphbQX21NGLH\nbXt+Mnlo2A2F8JXrqU7ayrk5X6QqmcIYBhwaOcxWtgMWtbPm/qSdGG4dnlWBqxUwCiL8oU0t/VBc\nkCoGWqfTVgzrgvBdFxjWq5g/7ZkUP/kv/9L9SyefTGES7343whaF/6MfAVdfnXx0eBhE+CedhMKT\ntsIAMdfp54rQRFhgvgc98uEYRH6a14QRuakkU1mwC4lfzSwzpcYjkZ8dYUuUjpdW+HrRAsSkLVfC\nEG23i4cvUDfIutDLBTQ5fXZ0q42P4QP4TfwbTj5Fgw8Dft2De4g6iKwOpWnKBK9Q3LIYh8wOaJQs\nmEiUrRH5cHTqrMxtQncd7MGOBY8xE1mEr5yrNUAZRFXCj3PNLED49jD9Ht9moVYYQ8VVNqDO0vo+\n3IPJ/8x1MMhnEeom7hn/DQDUmctlxJ37+c/28IUv0OenpoANY5wyhAEYmHgcmu9lEr5UxdP6Blot\ntW1b+vxVwjfShP+fL/gI/T0+niJ81f7bjr3wjWJKgAxuH8pQ+JPQC0aSgkFM3vtGMVn05brA298e\n23CsReHLY2VBEqUjJ50BUHI2N4jVOUBzYgBgqlXDlEnrtiY+MgJu29iJ3QCAymii8KuTSR8pOArh\nv+998Z+haumIDKF1MYd1D54Wv9coj4PZ1M7OnPlxcjxoIjQLcPVSTPitk7ZMUfitBchWCuuC8M87\nD3jOWVWMnDQCfOELlECnF5x4IqDrCDUTmkL499+f/tjHPxqSSt++HUM7lJWfgiB8ZoH7PozIg2NS\nI9Q9B2bkppJMZUFtqGGxkpqU5CVhWYg4/EAMn+XqRKnwYdtAgVYRqpFBg1FvCr8hjpmVihjeRMd7\n5jnJgZ18Mj3UgroL/8g0qqjg1i/uBkBh8iU0kg+CysTRdaFt2BXK8yMTV+rcR80k5Wg069D8Jh7D\nkxc8xkx0IXxWIEtHTfhp+i2ErxZql6MD+du20SiOYVBNYauGDjsOvIP0XtUYBms6KIAqXIVluqYx\n4YvjOudMDzMztNtDh4BzrAeobZ12WrKqTw1LFZBRLAcKJwFve1vi40uoReZVv79YxIaNGm7BxeAH\nDxHhi/aQsv8QwjeKKZ95ZOdQhnQGmGHEDzDfEqurjSKV6gSSh4q48JLwWxU+giCueqWulI6YDu4H\nOAXJfIjuLqzwW+f5wRjYli3YJhR+eUxV+Mk2iu4M9pbEtb/88vh11dKRieXq0/S96/Fb8Xs7nrEB\nzCaF/1Z8DgBwGBtp3Y1lwzPLsUBUV9UDiOcUaqikYhFWEuuC8AGQr7PE5cmhbqZCKqemSLnOz1M7\neLr1IC3H2749LtINICaGgJlgHin8pknHoHsOjIhqdS4ElYvDUoVarugZvFSimX7h4XuayJ0vfE+V\n8HmpRKtulVjheB6gC+GHIrd5BA3jW2nfW3Ymx33uuYLwHQ/R9CwexBkYPIkWRL3jHcCzzhOjjzPP\nBABoRTmhR79HN1Emz9toHg1G5KNmEeGbbg2GTxOGuOEG4K6kdkFXqIQvSVslKIvy18xOJXZYrEIl\n4U9MAC8jzz4memUCuFkew3CgPDFaag1HE0T4k4UToHsOinAQWkVoIpNnq8LfPEoq8WtfoySbl20h\n/z5l4ma04wHx8D5YOjn7WnRS+Js2YcMGGoWFs1VRR5JGZCrhA4DDiqmJ0NLmwQwmFfsS5yPTaYRm\nAXbkxNdFBQtbFL5kN8XDVxV+yAzwIMQ27AcX+5eEbygRXl1nOZUw78GxROFP7HVjW77szaBut9uJ\noTLxLaOP6mINhXbqKfgSfg++ZuHNnz4NWpGExcl4DACVWLXhApYN31LaaMswxKwkls5qYf0QfrW6\ndMLX0qsEp6bIuow3953v0O/LLsvM0eMzSg2rRz6pO2ZA95uk8M0ulo7ydqzo46LjNkLoYELhx4Tf\nTFs6sCywUglFOKn0uDHhd7F0LriMTnTDaJSEptk25XQHrbD0mY2o4SKqO2igFM8pDgwAw3//UeCD\nHwSe/3wAgClWlcocPmbZgs282A3ROVlfERhMjwg/MAq0o6c/fcFjpQ22L7LCuSIT4R/+YfJaxiSd\n2Ur4KloVfrkMtzyG4VBR+GqwteNgfD8R9kx5O8yAFD63C3G47lNxf4rwn3nNFXgHPo0rrwQu0n6A\nS695LW3rKU9JtptF+AER/hOVM9veA5Ce1DVM4Oc/B26+GSiVsGEDkQqfmye7RbRh3rIKuREV020l\nY6QBACgU4nUB1ogQPWaRajOHYVtuJG0hhe+2WzohM4CQJm2DYRIWsl1rPMTU4M7Yc/3EJxBbZG1Q\n7u+m7Qnhc9eNI7cq3gyadmvOcoAVkoeJJqp8NWddeDBxxlka3oLP4/N/NYvi1hFoRVL4W0Ax3CXQ\ngx+2DV5U2mhLP5R2rqwZsRpY+RIrq4VlEH6km9BDH9dfTyLTcVqCJA4epG2feGI6tlIQQyhSw5rc\nQ2hY8I0izMCBxd04zLET1DYQlZV82QB4oYAIOhCG0HgYTyTJTpKydIpF6Ihgu0l0zyDmEUKD3qWS\nzql//iqAPYLCO98KXC7iyAcHcd119PDbtAk4oFMCNB424WAsfX2e9Sz6Edh+Mh3/2c+UDy4LBc2L\ng6fMyEOg22gaFdheDWbYhG+1Wwcdcc89wPe/n7Yxnv98Wkuhnqu4uG7VBVAC56TwA82EoevthC9P\nShK+rsMfHMMIZsCDEMzQ2wj/KRM/wkNDz0KjPI4R/DIm/GGWrOipVBDf0+KBXfg03gV25ztxn/UO\nxBkcTjwx2W5GO77/OW/GT2+ax3/veBda62sAaCF8Azj//PjfDRuABzAIVpsHvEThs3q6GounFdKT\ntFLcfP/7dEzPex6NpAoFPG0rWVtn/zpds0gUToHrdlT4sW3Rg6XDAiL8aHgUmJmA4ZHC13mAQ+NP\nxdhr6UH5nvdkXQwBlfBPtIEG3QM1Y+ZAOINDxVPavqorKcVllS+v5sKFjU99CigULLz2zeJ0SjY2\n4xAKcDFX2oyhxiEMYxZHCjb0wTJwkCa3NT0diWbrNPJssNUj/PWh8H2fGtqSLR0LeujhFa8ArrqK\n5uVSwQmHDxPrAcCrXpW8Li0djeLMDe6DGyYCswDdb8LiLngXwk+5LZUWhW+TwudhCPAIETMoz4iY\ntH3j7ygKXyx6KvtK8WnM00Mia1iuYscO4ItfpCGwVGfj4xgejm15BLpNitBpoolCZiCUhPQmx7dZ\n8XnY8OJOpnMfoW4S4fs1WuVpLILwTz8d+OM/bn+99cEmSNar0nUKAko9EEdzdVL4MkNnswl/aAM0\ncLiHxXyIauk4DkreLCbHTkNkF1EUyo4XihiwaZ+/jX+h51KL/VCAg7M8xb5SR44Z7VgfKOEj+PNU\n9EjWuQJAqyE8Pk6RVEZtjkLQhHLXauk8wa5WTF9DuZ0XvAB4xjOS4yoWKessAONiSmnAC8X4mrQS\nvh76iDQzaYbqpK2XbemwSCF8UDoOzgEN4YLFYFJQ7q9VSRS+BS9u5oPhDNxSe2M+6ckJNcqFgkGD\nih7t3Alcc03CEUbJiucKDm07DwAwimloBRsbd4jItYz0JjIy6R0fLLe9t1JYH4QvExUtkfC5bkJX\nVgkeONCyKZXw1c4kCV8nSych/CKsyBGE3/ukbdxAZectFCivSBRBi0JwplFueaHwT9ycKHxWog43\n0Er4+sL+fRukf92yWjnSLcD1wFyHCl0vFDYvj19+qFBAAU6s8A1OBOCaFVT8Geg8TEi4nxAXV1b+\n8jwi/MAU56gS/jOfmfwt5wYajbghNCdrcF3gff87UcW84WAwnEE0PAJeLKKERlw0vmIR4V9wqWhI\nLfbI+fjv5J8rrkjnNcpox3EMe6dn9wKEv2GDEjoLxPdWr6XXq7iacl2y0pzI61Us0gP35puBl7+c\nXpPKJYPwtchPh4rKh0oYxFlU1YVjkWZAR0ijpaFhRExDEQ6aTVL4Cze+jOMF6JqIi6gmUKvwKsJS\n+/XeXE5WPOs8AOcUxuoxuzVNVyqUde6pz6XzQQitaIOJuRyWZauK63DCtowiuyuE9UH4cpi9VEvH\nSC8L379/AcJXIchR5hExuA8YJoJCBQOoUpiktbDCVxsPGxeZIaXXODSMCFps6URMT+X9sbhC+ELh\nD4Yz8SKmQcynV132AumFtxBUaNpgnksVlbpMAscdWiF8myfJugzuI9TowTgQ0AMqWIyl0ys6EH6Y\nRfj/8R/J38rDTq/QZ5szDn71K6B2JFH4zak6hjAPbXQEKJDCl4QvM6f+ybsEEbeEN+6AyJz27W8D\nn/0sUnF5Gd55l2kYKtohoqLURVgAKdFUaUgxgtEbacK/d+hC+uPwYaRXqwnI61UoEIG+6EXxW86I\nOP6bb4ZfVQg/DGEGSe4lAPEDSVMVvmLphMyAAVL4rFREYNLD1HEAfSkKX5QUVAnfcQAecVjw43Uj\nKSgEYMJHswlEjpcK15TQxkjqP4xTYJ2R2ENa0U7EQ1afUayt1cL6IPw+K/y5uZbRfifCN5RVhkET\nOiJEpoWgPIQhzMWhWb3CGBdjRKnWtp1ACj8MwQThh8yI1wzEMcmWBa1MHXoYM6gyIgwTAU2GLgZ/\n9VdEQs99buplblqA7+H/b+/MgyS56jv/+eVVV0/3jOaSNIc0GEFYAh14rEVAiDUm0PhCK683QuEw\nAq/XCnysvTYO2wqM1wdEYJtQ2LsYb7DYgHexBYtlI+NjOWwHvgTIhgUJEBYIi9ExEjOamT7rfPvH\ny5f5Kqu6zuyu630iJqa6uqors6rym9/8vt/7Pb++1VFe1oFpQmUEv1Si2Npkc0M7mUBpx9cMCuxp\nasFvFXZA8E3p4Hq8rqkRfHNysdcbtEX2Va/Ss1J/8zeTmdDV85t8+cu6f77h6+/X/Zv2ftN+pFwi\npMEeVvVnYa4YzGzYjDU/YnoIdil77OXwe2HinuwSfaUSycpQQHJCC9a14G/+9u/y+u95nDe9Lx44\nLpe7N7CzHX6GR59/St947LG27qf1J7+Bp1qcjayxr1j8/PoWKhZ82+Erz08Fv1SiWdAVaGtrENAA\nb0iHH6XRIqQOv7apM3Qzy7eNePD/iRMvJaDBxga0tqo0ulXd/eiP8je8nB/n7axcnsYzQaXQVuLb\ngbnPatq20zjBR3ciDFp1foh38Rl0lcil4VndO7VW06G+Lfj/+q/YHblafkjUiJ1fENKsLLOfs3io\nwY7UmHJF2vfnyJFE8D3VpOVph28EP+krUigk69Yuc5F1LxWvfhO/Ooii7n1aowJevUrY3MIv9xF8\nM6XWcvhAMjU9VDWafkQzLKZzBQo7F+lQSx1+kS2a5uRy6pReMDzrZoMA3vY2uOyyZJGY6vlNzp5t\nF/zSJ/8GgCte/x3JFdYlnNMNyN78Zl1ialffHEq7OP7498Urk+Uo+KaRWVbwRdCVO4ZY8MNNLfiF\nvWX+x32X2615umNFjVmKFZ9z7KN17tlkHQaA81/SveDPF7YT/Ni8lDojnRKbeOUizUhXoCWC36cI\nIcEIvvk+Zhz+5sV0MfQObrwRlOLZ49cS0NBtdKrVtkVLEp73PH7ihX/DR3kVh05kBN84/G4f4Jve\nBHfc0T6tf4eZjyqdb/1W3V+k28EzACoICVSdd/HDgJ4l9+u/dwDu3auXxIH26hy7ooJ4qbKtOBQM\nQ9SeFQ4Rz94a4Ei9js+yl/P8otn8WIDUC6/VZZlWpKMbvcWuqJk6fDNQuodVHvcPEs/1SGrsx8Uv\nRfjNdSK2tl9QxWAOMJNXxZ+LV9sCFRHSoOmHtMIC+5TOeZJBvzyJBcpr1FAqdfjJ1cSBA/CRj/T8\nE+GyfmxtdYuLWyQrLAEUn9VitnT18eQK61KeIti/V8cW2RLThx6CD34QfuRHOOLH6yl3+852mYVj\nevT0iq+3E/zkPpMcGIcfC363Re570qXta7GoeyotP3OO6lp6tbz2lTMcBC4U0pMdUUQLIWhsJYuL\nBCW7SicgoKbjsUqJVkFHOqursEyzvXNoL4zgm8dHaZXOxgZsrcaN27oJfowXBoTUWa8Ctdq2VXf3\n3ad9WqWRRgPa4cfHQrdI58ABXSWyi8yHw/d9nUsO4abbCHw8qznZYWL3df483H13fGeXSCemFUQU\njcMPQ9TKStKlr2s+mOFzXMcneHnnVfRNN+kMv9VCVAslHg1rZaE2hx9fli6xznqQOvx+ZaGDEi4V\nKLFJRF33d+9F0jQnPtCMo6ttJicr5Ye0omLa9K7fuMAoWI6uXu8i+ANg9rV+UQ8677EcfmXtKTal\nhERhkvUXqSbL7XVw4ADcGq/w+VQXwX/hC7fdDtNrxZr934GJdLxCpyDavWpMhp/0Whr0uHn72/X/\nXeKeYlGvidw6e47qeppJrz2hT+hbJasSRoSqFAkam8nygd0inSJb+KUCrdLORDpG8Ls6/BivEBLQ\nYGsLpLZ9RHvllfHHZ00GLB5aTn8e9CS1w0zHVkwY8X18mrpmnRY/zd3pL0273Gz3QgsVhJRaWghU\nFCErK+nixEOchJJj/w1vgIcfxq8U2yIdJT4N0lnBoelOGEVtX9otP3UZSX30mBT2RMlErnClj2Bm\nI53YsX73hfdB/Uf0Q/wQFRbwifPLEa/OemId4LVaKviqcEmfJ6ZE8b42Lm5yYRNWwnXOc5C99Wco\n1y/yjeBSStbjgI6F19swA8JnukQ6f//37StyWLzgBfptzVaI2DS9eDC0i8Nvy6njesLC1mC9lhKu\nvlpb2S6tqkslXQmkLq5SW08dfvUJPduuWmyv+qp6JYLGVtIXqi3S8XWkE1JHinrykol0fJqDi2c2\nTon/L/t6TogRfPvqIotEQRLpePVa0v+m72sCy0eXYS3+fvcrjd4l5sPhj4kEWvC34sWfr+eznQ96\nznO2fX4riCi2dKQjYYh3Sfrl3nZ5wS4kxultb4M//VN8X7eKlVaa4Te8MOk77jdr+svveUn/GtDL\nwJmVq4YZNO5FcaWQrMK158CQGX4cUb3pws+kyyT6EcrK7U1Zaa4knUdrVKuW4A8RHxX2xpVYa9rh\n7/XX2FhKSxY3C/qzbut62kvwS3GtezeHv2cPHD267VN7iT3o1hgAhT29Bf8P/kxvc3HzXOc29ON7\nvqdrN9pyWVcCqfVNahupw28+oU9stVK74Ne8ImFjM4l0wrIV6XgBEXphGSlEUCy1O/xgRIfv++D7\nrBSrnDtHEj0FPRy+H+lIZ20tvqLudzxbgh9cspwe1E7wpwcj+CpeoeZI+yqM8Eu/1NZ7vIMgpKxi\nwY9CgiEF3yxtlu2Y53nx+p4ty+FLWkLqN6uJa7EdfjWsJH1s+ubtA1JaiRLBXz7U52+aMjMj+N/1\nXQDcH7w0KSlt+e2dQb1+A8GjsI3DH0bginvjdhax4O/zLtDYeyBZzahe0vGZWYsY2L4lAegDf3lZ\nx4WQ65VNI14Namml0wHbE5t+63/qAtKljbgRXHYC2ggcOQJbFGmsbSbN/QDk6TO0EN0Y0KLu68mJ\n5rtibx+en7ZGDkOI24asrmqHL4M6fGM87PG3QoHlQpVnn7UEv9xD8IshAU3OPKUoUG0zVl2x+zst\nW5GOE/zpwQh+M65fP85j7Q+wqiu60Ta5KooI96cHvAwwIPZHf6Rbh2ePO7MYBM1W4vCbEiQlpH6z\nlrgXe6ygHlbSPLecj8MPKoVkKb8DR/uI80/+pJ6Zeccd+uebbuLxA9dylv1tgq+s3N4MeuZKRvDr\n9dEFv7GhY4DLm4+hjh5PrgYbFX1yN2sRA+0HfTfsSW39HjsEzZY+nEvLvR1+lQKblFjayk/wr7hC\nO/zWxlbSEA0gOHeGDX8PUbFdamp+iaC+lXwfxHLtLT9IBT+KkHJahx8wxMSrG27QrunXfi29r1hk\nJdoc2OGbsY+nn2gQUWtrudAVe8B9eTl9b3ex1r4XTvDRE1UCGslBHJFZ/erUqZ7PV1auJ1FIdNCa\nuNPPEaCd/fOe1/13LTyk1YwHbX2aohc6AfDrqcO3v2i1qJJU7WTX0RwZax/7Cv7x4/DAA20nyo3y\nAV7U/HSyTFzLD9tmH8ryDnQMtCKdNoc/xACxce6tzSpr5xscqp0mvOrK5LsisXi3Ofx+JxQj+MvL\nuQ7mXX5MH877DncKmO2gtyiyRZFSPS7/zUHwjx0DSiUaq5tJcz+A0sUzrHorHY0tG0Ea6dQJ2hyw\nygg+cSdYM/Fq4Pfsssu0y7/55vS+cplTz/w+Fy8o6hvx+EEvhx/n+08/0aBAFb8yhIFaXk5H2+2W\nHBPECT6pw7cnp2xeda3+sigFJ070fr4lthKFFC5PB3iHLnnL0BKd4ftKt1ZoeLpqAMBvVFMhjtod\nvlkMfe+hfBx+28DeCBU1X73yFVymnkxK+lQQosqWux1xDkVPLIdvZ/jDjBcUV/TfaG7WKJ87ja+a\nLF97JRvobNbfr8V7zwHr/RlU8Hs1JBqBlX3a+YbFTkG0SzW3KLbPvM3hKiMIYPlgkaC+mcyeBais\nP82qt9IxLtzyI7xmDRqN9klh6CUakzUWwhCp6EhnfV07fBk0w+/G6dOUm2u86OxHk+ip16CtOVE+\n86R2+KYT7ECsrGjz89a3wj33jL7NOeIEH5BQC37SbhjwDh/oP0pmsMTWK4QEL0yXnx9X8O0MX0c6\nqcP3GrWuDr9eqKTuOa9yR1sURvibp09ol6X+5RFAD3Q3DqSlrv7KDnQMzEY6mw09EDiE4JsoRG1V\n2Xv+awBUrrmSdfT7UYiv5swVFdB9lqrNDgl+8n3tUsdvRzrG4QN6LCKncQRV1IugmP44ACvVp7lI\np8NvBbphIY26bods4/ttDt+r6EhnY13h0+poHTEKleq5gRx+EAv+2afqFKgSLA3p8EG39Lzuut6P\n3SWc4ANeLPhJu2Eges6xgZ9v5+dSiHS9dYw/ZoauHX5LdwmMq3SSSOfCuVQ8rIO8Wah01B6PjX3Z\nP4Lgr1+i30/1la8COtJpHUrXEI2Wd2DQNhPpNNfinurDjBd4ennH1laNlTU9mC/HjuLF5aR7n9ve\n/wjoL6DxQjG5fTYGE4t0E/yoPdIxDn/LKw9ubPpRKlFUW0lzP4CV1nkuSKfDV4GuNpNGQ/eHsn/n\nB3qWOmjBLxcpscWWqe/PIQbzGtUkeuop+LH7P/e0dvjR0hAOP+/PNwec4ANe0Onw5dj25XFZlOXo\nsn05xhV8hddWpdO0Bf/rj6Zxk2WhGoVK+mXLy+Hbgj+CI2wtabfTOqcnWqkgpHVpWpZULO1AFUPG\n4bfWRxB89AzW5maVqJ426bsKfaVSedkN+r5oiAzfTLC6eLH344bFVKV0iWi2c/imfDcPTI8lb7O9\nz/6ZrS6RThgRtHSkk3X4bc3RoiiJVepr+vgcK9KJV5BfqT2TRDo9BT+Ox86d0Q6/rfy2H1NSzEEo\n3gAAGpZJREFUmWPjBJ/U4Rcth883f/P2T8gg1gGet+C3ZfhtkY7CO/2YLo+AdodfrLStXJULtuCP\n8DeNGKiLeqBQBSGN56Z9ZnZi3pV5T0wdfnNd93jxloZ7sbpE1NZqaa5sRzZmtN1+T/pFOmYSn8q5\nLe6Agl+lkLhqM1krD0xUFmystt1/oUukQxDiqzrS7B7pJIRhUnLcWNOf31iRzk/8BC3xqNQvDOTw\nzYSw89/Qg7bhIIO2U+jsDW6mLVrwS+gv0+arXk3pyUfhla8c+PmmcRZ0Cr53ae+Szn40Y8EXWrQ8\nj5anJ4KU2NTr15r4yDqimsUKZnXDHRH8XnXm25B02LygN6wVRISH9vEP3MQnuJkX7ITgi9AKIwp1\n7fDVhnb4/pAOv+4VqK/V0j46tqCalhvDRDpG8PPukmhK/7qccIK2gVyhRlx9lBXbMTAnUr+L4Gcv\nNFWkHb40GjQlI7hBd4dvTthjOXwRquESpcYqDbNUaKV/pCP1qp4VPkCrFL72tW1nTE+asRy+iPwH\nEXlIRFoicjLzu7tE5BEReVhEbhlvM3cWL0y/QOolL4PPfa5n75wstuBnWweXjgw+jb8bSYafiXT2\nEk/cMbM6LYevypX04M+h5K7j72QWRxmEsOBRJUKtpg6/VIKX8g/cxVt3pJUO6JnGJtIxgm86YA5K\n04+or1epsK4XCLcz8uxsTuhfcWSes1OC383hZ8qDd8LhmxOpv94eVV1kubMzSRgRUkc1GjS9TKST\nEXxjosy6BuMO2taiJUrNNZqb/XvpmJNNcrIfxEBdein9W49OhnEjnQeB7wU+Yd8pIlcDtwPXAKeA\nd4jIGKflncWL0k0LKsNnmt6S5fDjL/1X0dn6ZZePl+Mp8ZJIp+X5NH1dlvkSuV8/wFR6WHlhq1RJ\n2yvmJfh2u4ARSijDUGfHsqrFQAVhm8jvSKSDnhRnBm0Thz9kpNMMClDTkU6zGIvpe94DP/iD6YPs\nHegnCldcocv1TJ+mvDCRTheHv7m/fUzKOPymn5/ge/Gs7mCz0+F3xNlRqBcIqtU7rjIkE+kYx9/a\nyMHhA7XCHkqttWRwuVt30bbXxxL8fr10ppyxTpVKqS8CSOfgxK3APUqpKvCoiDwC3Aj84zivt1P4\nlsMfKKPLPt8SECP41/NZSmxyZszvR0t8RNWRuEqn5YVUWOeD6t/rB3Tp26LKOyD49mzjQWc6WhjB\nr6ylDn83BF+vp6vr8L3N0Rx+K4gooB0+pVhMX/va9j7mw0RnxaJeUyFvGttXsQSlkNfxbk5+52H4\n89Tht7z8Ih3j8KPaKlUpUIhXZLvASjLUZJBIO3yp1WhkV5HKOHwjukbw2zp/jkC9oFekeyouy+xW\n1ZTdlqEc/hSzUxn+EeB+6+fT8X1TiT0LcZB2xh3P39Pp8H/795f5/OeHz7qz6EhnS/f6iR3+Ac6m\nDzjWWT6qypXU8ecl+N3WOB0CI/jeqm7YlRX8vDazgzjSqdaguDmawzdXCRXW8ZZ3b8HpofmWb4Gv\nfnXbJRLfy+toxgljkuHnGemYFtH1Vc4HBzhc12WsP/MrK1z3fe2PldjhS71Gw+8j+PHP5gpt3Ein\nUVxiibW0q+cwgj/vDl9EPgZc2uVXb1RKfWjcDRCRO4E7AY5nFhbZLexIZ5QPNFjuFPzXvGbszQKM\nw48z/Njht2GvqBTT2HcwjV36VYwMismFe3WC7EEY6l4r3kbcRjqM2gR/JybaAlAqUmSL1RoUjGAM\n2ZlTRQUiaqwEG/h7pljw3/1u+Kmf6tr7yXytL1zQ73V9NXbNg64POwBm7YBK4wL1KH2frn/5CmRC\nACnEDr9Ro5GdnLiNw5eqqdIZL9JpFios8VQy8apnXX820pl3h6+UGrxcJeVxwLaeR+P7uv39dwLv\nBDh58uTuLd9uYUc6o3yg4UoqqsEIkVAvTIbv0QLP010mDZ/6VNdaX69SShW0Wu34/ch85jMdq30N\ninH4BhWEbW/1jgl+pUKFdR6vAbHDH3aEWCId6fh+s3cbgve8J43SJkGlAjfd1PVX5r2+eFEP+9RW\n83f4JipbVhc441vFCl0G+b2Cdvheo3NhcD/qnuEbwffGdPhmIL++gJHOTtXh3wfcLiIFETkBXAV8\naodea2zavmAjfKD24hdRId/JFkp8PKsOv03wt5maH4bAL/+yzkluuCG/jbn+erhktKqjboJvn6vy\nuhDJIkta8KtVUsEfdsCgqB1+Wa333tDXvhZ++IdH3tadxDj8RPBNpBPkJ/hmOcgiVZq+dRx1EXwp\naocftPT6xjZtJaRWpCM1I/jjOXwVj+uYssyegj9ng7bjlmXeJiKngZuAPxOR/wuglHoI+ADwBeAv\ngR9TylpDcMooVMaLdGyHn/fgo450mklrhbZBtowt/t7L7+cVfFyfs26+WS+y2WOlrt3ERDptd1jk\nNbs/ixH8Wg2kOprge4V40Fat59rOeDexHX65TGIcVI6Rjt0eoxH0Fny/EOLT0pVPmYXBg1L3SCdo\n5DNoqwpFClSTskzn8AdEKfXHSqmjSqmCUuqwUuoW63dvUUp9k1Lq+Uqpvxh/U3eOqDiewy/s20HB\n93SG79OErMPPDM494P8b/ppX7FzFyxh0OPxwd5ySt1TRA3Q18LZGE3y/pAdtS2pjZgXfzvCLRVCx\nyKocyzILK+nn2woiuPNO/UOXvM6UMq9wgVbG4YfF7pFOkXwcvqncag7i8Ods0Na1VoD2MsMxBT/3\nCUTi6UiHLpFO5sVMfLxT8cg4ZAXfHGRf/zp8+tM7+MKVCkuxw/eqI2b4JS0QZebD4ReLJO+/yrEf\nv91nphUU4B3v0Ct7dXkNs/7Bfs7qk4PNNoO2prnhuA5fhhH8RRu0XQj88SKdorWG6M5FOi2U5yWZ\n60VvheXMgK0pw54Fh28OpKNHey7jOj6VNMMPqutseSWKw+ZHkXb4S9Inw59izNe6Vosdvlkpzctv\nzMl2+M2woI+rbWZlm3bYy6x2CH6T7hm+aZk8tsMvasGXpot0FpMxHX4QpgdN3mKrPB9PNZNIx1yC\nrwadA7bGGE2jJmUzfJXjYGFPlpYox4If1tbZ8od36IePFTi0t0ZRqjtwCbc7ZNevaQbxrFiV39J7\nbcs89jmOigfTmCcr+F62SicWZBPptK1/OwISC35Inab4vbtaukHbOSR7CTkk5vvyl9zS0yyMgp3h\n25HOmt/pnMwxNgsOf9zp8QNTqVCgphc/qa9THUHwpRBR9qpIvd7bDU4x9te6WIRqoN+HoJVf2W5p\nydfLFQJesbfglw+lM+2y4znX3mAdj90y/DEjHa9YwENRYrN/L6E5c/gu0oH2g3jED7TMOjUicl+q\n2Mrw8X22Iu3su02JNwf1tAt+lQg/2KVe4SZzX18nqq9TDUfI4AsF2NjQ7Yxn1OFlHX411IIbtPKb\nNxCGsI5e7L5tBbAu9BL8NkH3/Q6HP26kY1ahW2JteMGf0c/f4Bw+tB8NIwr+JuX27DEntMNPB23X\ny7rFQberULPpebdZzwM70qkT7lgZZgeW4Bfq69RGEfwogi0tNvPg8AuF1OHnGa2JpCf1futAeCtp\npNNRsZUd5M04/HEjHSP4e1jtP/FszgZtneBD+4c44hn8F34BTp3KaXss2jJ836dW0AdKN3/8/d+v\n/+8ys37i2IKvkF0XfG9jjWJznfqogm+YUcHPOvxGGH8WYb4CVkX/vb4zzq3mSR3rPmeb82UFP8rP\n4bf6laXOWaTjBB867c8I/Oqvwl/swGwDI/geCjyPZ1euBODjR+7oeOxdd8G5c7od97QRhnAe3Yen\nxObuC/7muhb8woiRjmFGL+mzGX7B0xUqKuf9MYJfPNSncaBVm5/t1d/h8LORzpgZvombKqz3F/z4\ntQ8UXaQzP+QQ6ewY4hGo+OD0fDb2HKbEBh8+8Z87HyrbdluYOEEA59BtGQKakxH81jqNyDl8PfFK\n70d132XbPGM0WrGk7Luij+C3OfwhI50xHX6b4PeLtOLXPlRxDn9+sD/EHCei5IHyfIJWLPi+j+/D\nFiXCaPoWSO5FGKaCDzvXSqGDuEbVr25Qbq2nC5gMg/39mFHBzzr8B/bfwht4G5//wbtzfZ2DV+j3\nu6/Dt46zICv42UgnM/Fq3AzfL+vXK7PRf6ax2c6NjbZtmVWc4EP70TBlK80rzydQcSWF5yfHwpSd\nl/piO3wYaQ2V0Yjr5qWmZ8o2S2M6/Bm9pM86/GfOetzNG7js+eOv2WCzcln8/g7R/jQoD+bwzcSr\ncfvhB5bDV/0E3Px+c1N/9lOmD8PiBB+m+jJNeT4R8YxAPxX8WTMaQQDPkuZNu+bw48+2uRGvSTuu\n4M/aGx+TdfgmUbnyypxfyHRTHUAY6/Hi5R2LDvXJ8Md1C+YEU2G9f5XSmHN0po0Z84k7xJQLfoI/\nuw5/YpGO+WzX1oioo0YR/DmIdLIO//3vh7/6qx0Y4P+t39Id2m6+ue9DW0EB6nW2Wn0inUyGP+6X\n3xb8zX6CL6K3p9mcap0YlBmTjR1ims/ctjJ63sw6fM9Lq3TMz7tCfJAWN+OlFcuLGenYGlos6v5F\nd3QWeo3Pc58Lf/d3Az002hPBOTj5kkk5/A02BzmQgmBuBN9FOjDVH6Tyuzv8XcvAc0IEPKudwq4J\nfpzh71Na8FlaTIdvMy0zsSU+eQ6b4Y/r8NsipGhAwYeZPdnbOIcP03MEdCMT6RihnDXBB62V3/Av\n5wPVWzmwyw7/ErTgyyirpc9Bhm/TZY3zyWDe16yQbiP4ZXKqlLFezysM8LfM602xMRwUJ/jQVhM8\nbdgOX1lVOrvmkHMkCOD2Gx/n4x+H/7PLgr+fs4BeAWvUvwFMtzkYkB1bP3hYzPuaFfxtMvzE4eco\n+P4ggj9HDn8GZWMHmOJSK7GV3Z99wTeLtOzaFUrG4Xt7xszwr7gij62aKFPj8E0f720EPsHzaIm3\nMw6/uFgOfwZlY7Foz/DTQdspPkdtSximgr9rJyzPo+mHieD7y2MK/jT2rRiSqRH8974XXvYyeMEL\n2u/v0gyq5YcUiL88OQp+MIjgmxPQHAi+i3QMr3vddC5uYWX4MgcOvxq3X9/N7W8GBfY3daQTrIwZ\n6cziG59hahLM666Dv/3bzvu7Cb4XQDzTNlfBLy1WpOME3/Dud096C7qzTZXOLDp8O9LZTd1sFCoc\nqj4NjOjwp3EJsRH4nd+BM2dmYMBfRLee/bZvS+4yTc5aCN64O2CdMPxBBH+OIh0n+NOO357hm173\ns2g0JxLpAPXSMisXz+ht2DeCvZ0TwX/96ye9BUOQaT2rfC1VdULGll07wy8NcFVvBH8OHP4MysaC\nkXH4rZa+OasOfxKRTqOsQ+vzrBAcOTz8H5iDypxZpxX37a+TQ1msLdyVAa749u/X/8+Bw3eCP+3Y\ngh/4yTCDad43S9iCv5uxQmtJC/4/8yKKpRHOlHPi8GeZRlHXkjYkB8G3xwAGEfzL4hbSiy74IvIb\nIvIlEfmciPyxiOy1fneXiDwiIg+LyC3jb+piIrYyel7Sm+rZZyezPeMwqUjHtNP9Z1402rj8HEy2\nmnUa5RwF3z6mhhF8F+nwUeAFSqlrgS8DdwGIyNXA7cA1wCngHSIy7UNF04mljOL7ieCfOzeh7RmD\nSUU6HNallPfx6tFKEmcxP5szmiU99pKL4NsMI/iNRr6vPQHGOuyUUh9RSpl34X7gaHz7VuAepVRV\nKfUo8Ahw4zivtbAE7Rn+1Vfrm6985WQ2Zxwm5fAvvOW/82L+kb/l5nm4Kl9Imnk6fJtBBN9MTZ76\n8qb+5Fml8x+B98e3j6BPAIbT8X2OIbEjHQl8jh2Dp59Ox5FmCdN0EHZX8JePrvBJXjz+H3rFK8b/\nG46RkFh0cxm0tRlE8E2kd/Bgvq89AfoKvoh8DOg2vfCNSqkPxY95I9AA3jfsBojIncCdAMePHx/2\n6fNPpkoHZvd7Z8+Y303BX1nJ4Y/UarNZCzsnBJdowa+pCQj+a14DX/sa/NzP5fvaE6Cv4CuleoYH\nIvI64LuBb1fKVInzOHDMetjR+L5uf/+dwDsBTp48qbo9ZpGRwJ5pO9uCY4997ubVcS6LxbiB24lS\n2K8Fv5pdLGVcBqnAKhTgzW/O93UnxFiHgoicAn4WeLlSyi4UvA/4AxG5G7gcuAr41DivtbBYamWL\n/yxiC+9ux6H33quXJXXMJsVDWvC3xp921c4gDn+OGNf7vB0oAB8VXclwv1Lq9Uqph0TkA8AX0FHP\njymlmmO+1mLSJdKZVSYp+Lfdtruv58iXcJ8W/Kuvybliygn+4Cilntvjd28B3jLO33cwWZXMGTsV\ncXG4YyjiQdtRljPoyYIJvjvsppy2DN9FOo5FZadafDrBd0wTTvAdDuBw3AMp7ynmTvAdU4U9aOuq\ndByLysmT+v/sYimj8qY36f8XrE/SbCvIAtDm6ufI4bsM3zEUS0vw4IPwnvfk8/d+5VdAqYX7Irp+\n+FOOhLbDnx/Bn/FdcUyCa66Z9BbMPIt1eptB5inDd5GOwzFZnOBPOfMk+M7hOxyTxQn+lGNHOl4w\n2x+Xy/AdjsniDrspxwvnZ6ati3QcjsniBH/KaRu0dZGOw+EYAyf4U47L8B0OR144wZ9y7Ehn1gXf\nRToOx2Rxgj/lzGuk4wZtHY7dxx12U47t8OepSsc5fIdj95ltBVkAXKTjcDjywgn+lNNWhx/Otko6\nh+9wTBYn+FNOm8hHOa/nucvYgi85L1zkcDj64wR/yvEia9C2MNuCb0c6TvAdjt3HCf6UY4u858+2\nSgauN6vDMVGc4E85Uiomt2e9lNEJvsMxWWZcQuYfv2AN2s74p2VHOg6HY/eZcQmZf+xqllkXfOfw\nHY7JMuMSMv84wXc4HHkx4xIy/8yT4LtIx+GYLDMuIfOPLfizXsroHL7DMVnGEnwR+VUR+ZyIfFZE\nPiIil1u/u0tEHhGRh0XklvE3dTGZJ4fvBN/hmCzjSshvKKWuVUpdD3wY+EUAEbkauB24BjgFvENE\n3GT6EZgnwXeRjsMxWcaSEKXURevHCqDi27cC9yilqkqpR4FHgBvHea1FxffhNu7l1Xxo5gXfOXyH\nY7KMfQiKyFuAO4ALwLfFdx8B7rcedjq+r9vz7wTuBDh+/Pi4mzN3+D78CbcBs+/wS6VJb4HDsdj0\nlRAR+ZiIPNjl360ASqk3KqWOAe8DfnzYDVBKvVMpdVIpdfLgwYPD78GcM0+Rjvt4HY7J0tfhK6Ve\nOeDfeh/w58B/BR4Hjlm/Oxrf5xiSeRL8Sy6Z9BY4HIvNuFU6V1k/3gp8Kb59H3C7iBRE5ARwFfCp\ncV5rUZmnskzXA9/hmCzjZvhvFZHnAy3gX4HXAyilHhKRDwBfABrAjymlmmO+1kJiD3TOeDt8AO69\nF06cmPRWOByLiSil+j9qlzh58qR64IEHJr0ZU8XmJpTL+narNfsu3+Fw5I+I/JNS6mS/x814Kjz/\nFArpbSf2DodjHJzgTzmzPlDrcDimBycnDofDsSA4wXc4HI4FwQm+w+FwLAhO8B0Oh2NBcILvcDgc\nC4ITfIfD4VgQXMPaGeDee11bAofDMT5O8GeA226b9BY4HI55wEU6DofDsSA4wXc4HI4FwQm+w+Fw\nLAhO8B0Oh2NBcILvcDgcC4ITfIfD4VgQnOA7HA7HguAE3+FwOBaEqVriUESeQa+NOyoHgG/ktDmz\nwKLtL7h9XhTcPg/HFUqpg/0eNFWCPy4i8sAg6zrOC4u2v+D2eVFw+7wzuEjH4XA4FgQn+A6Hw7Eg\nzJvgv3PSG7DLLNr+gtvnRcHt8w4wVxm+w+FwOLZn3hy+w+FwOLZhLgRfRE6JyMMi8oiI/Pyktycv\nROSYiPy1iHxBRB4SkZ+M779ERD4qIv8S/7/Pes5d8fvwsIjcMrmtHx0R8UXkMyLy4fjnud5fABHZ\nKyIfFJEvicgXReSmed5vEfmp+Dv9oIj8oYgU53F/ReT3RORpEXnQum/o/RSRbxGRz8e/+28iIiNt\nkFJqpv8BPvAV4DlABPw/4OpJb1dO+3YZ8KL49h7gy8DVwK8DPx/f//PAr8W3r473vwCciN8Xf9L7\nMcJ+/zTwB8CH45/nen/jfXkv8J/i2xGwd173GzgCPAqU4p8/ALxuHvcXuBl4EfCgdd/Q+wl8Cngx\nIMBfAN8xyvbMg8O/EXhEKfVVpVQNuAe4dcLblAtKqSeVUv8c314Fvog+WG5FCwTx//8uvn0rcI9S\nqqqUehR4BP3+zAwichT4LuBd1t1zu78AIrKCFobfBVBK1ZRS55nv/Q6AkogEQBl4gjncX6XUJ4Bz\nmbuH2k8RuQxYVkrdr7T6/771nKGYB8E/Anzd+vl0fN9cISJXAjcAnwQOK6WejH/1FHA4vj0P78Vv\nAj8LtKz75nl/Qbu5Z4B3x1HWu0Skwpzut1LqceBtwGPAk8AFpdRHmNP97cKw+3kkvp29f2jmQfDn\nHhFZAv4I+C9KqYv27+Iz/lyUWonIdwNPK6X+abvHzNP+WgToy/7fUUrdAKyjL/UT5mm/48z6VvSJ\n7nKgIiI/YD9mnva3F7u9n/Mg+I8Dx6yfj8b3zQUiEqLF/n1KqXvju8/El3nE/z8d3z/r78VLgVeL\nyNfQ0dwrROR/M7/7azgNnFZKfTL++YPoE8C87vcrgUeVUs8operAvcBLmN/9zTLsfj4e387ePzTz\nIPifBq4SkRMiEgG3A/dNeJtyIR6J/13gi0qpu61f3Qe8Nr79WuBD1v23i0hBRE4AV6EHe2YCpdRd\nSqmjSqkr0Z/jXymlfoA53V+DUuop4Osi8vz4rm8HvsD87vdjwItFpBx/x78dPT41r/ubZaj9jOOf\niyLy4vj9usN6znBMehQ7p5Hw70RXsHwFeOOktyfH/XoZ+nLvc8Bn43/fCewHPg78C/Ax4BLrOW+M\n34eHGXEkfxr+Af+WtEpnEfb3euCB+LP+E2DfPO838MvAl4AHgf+FrkyZu/0F/hA9TlFHX8n90Cj7\nCZyM36uvAG8nnjQ77D8309bhcDgWhHmIdBwOh8MxAE7wHQ6HY0Fwgu9wOBwLghN8h8PhWBCc4Dsc\nDseC4ATf4XA4FgQn+A6Hw7EgOMF3OByOBeH/A9dw5+UjEItIAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#As an example, I plot an example 1000 values of the x velocity (column index 0), both true and predicted with the Wiener filter\n", "#Note that I add back in the mean value, so that both true and predicted values are in the original coordinates\n", "fig_x_wf=plt.figure()\n", "plt.plot(y_valid[1000:2000,0]+y_train_mean[0],'b')\n", "plt.plot(y_valid_predicted_wf[1000:2000,0]+y_train_mean[0],'r')\n", "\n", "#Save figure\n", "# fig_x_wf.savefig('x_velocity_decoding.eps')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.4" } }, "nbformat": 4, "nbformat_minor": 1 }