Skip to content

Instantly share code, notes, and snippets.

@aahoo
Created October 18, 2017 19:47
Show Gist options
  • Save aahoo/9304fd2994cd3776d90d9c2bff367148 to your computer and use it in GitHub Desktop.
Save aahoo/9304fd2994cd3776d90d9c2bff367148 to your computer and use it in GitHub Desktop.
Lab 3
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"from scipy import misc\n",
"from imp import reload\n",
"from labfuns import * # checkout labfuns.py for more details\n",
"import random"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lab 3: Bayes Classifier and Boosting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bayes classifier functions to implement\n",
"\n",
"The lab descriptions state what each function should do."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# NOTE: you do not need to handle the W argument for this part!\n",
"# in: labels - N vector of class labels\n",
"# out: prior - C x 1 vector of class priors\n",
"def computePrior(labels, W=None):\n",
" Npts = labels.shape[0]\n",
" if W is None:\n",
" W = np.ones((Npts,1))/Npts\n",
" else:\n",
" assert(W.shape[0] == Npts)\n",
" classes = np.unique(labels)\n",
" Nclasses = np.size(classes)\n",
"\n",
" prior = np.zeros((Nclasses,1))\n",
"\n",
" # TODO: compute the values of prior for each class!\n",
" # ==========================\n",
" for i,k in enumerate(classes): # Iterate over both index and value\n",
" prior[i] = np.sum(W[np.where(labels==k)[0]])\n",
" assert(abs(np.sum(prior) - 1.0) < .00001)\n",
" # ==========================\n",
"\n",
" return prior\n",
"\n",
"# NOTE: you do not need to handle the W argument for this part!\n",
"# in: X - N x d matrix of N data points\n",
"# labels - N vector of class labels\n",
"# out: mu - C x d matrix of class means (mu[i] - class i mean)\n",
"# sigma - C x d x d matrix of class covariances (sigma[i] - class i sigma)\n",
"def mlParams(X, labels, W=None):\n",
" assert(X.shape[0]==labels.shape[0])\n",
" Npts,Ndims = np.shape(X)\n",
" classes = np.unique(labels)\n",
" Nclasses = np.size(classes)\n",
" \n",
" if W is None:\n",
" W = np.ones((Npts,1))/float(Npts)\n",
"\n",
" mu = np.zeros((Nclasses,Ndims))\n",
" sigma = np.zeros((Nclasses,Ndims,Ndims))\n",
"\n",
" # TODO: fill in the code to compute mu and sigma!\n",
" # ==========================\n",
" for c_idx,k in enumerate(classes): # Iterate over both index and value\n",
" k_idxes = np.where(labels==k)[0] # Get logical indexes for points with label k\n",
" Xk = X[k_idxes,:] # Get the x for points with label k\n",
" Wk = W[k_idxes] # Get the W for points with label k\n",
" # equation 13\n",
" mu[c_idx] = np.average(Xk,axis=0,weights=Wk[:,0])\n",
" x_mu = Xk - mu[c_idx]\n",
" # based on equation 9 & 14\n",
" # sigma[c_idx] = np.transpose(x_mu).dot(x_mu)/float(Xk.shape[0]) # not boosted\n",
" sigma[c_idx] = np.transpose(x_mu).dot(np.multiply(Wk,x_mu))/np.sum(Wk)\n",
" sigma[c_idx] = np.diag(np.diag(sigma[c_idx])) # turning into a diognal matrix\n",
" # ==========================\n",
" return mu, sigma\n",
"\n",
"# in: X - N x d matrix of M data points\n",
"# prior - C x 1 matrix of class priors\n",
"# mu - C x d matrix of class means (mu[i] - class i mean)\n",
"# sigma - C x d x d matrix of class covariances (sigma[i] - class i sigma)\n",
"# out: h - N vector of class predictions for test points\n",
"def classifyBayes(X, prior, mu, sigma):\n",
"\n",
" Npts = X.shape[0]\n",
" Nclasses,Ndims = np.shape(mu)\n",
" logProb = np.zeros((Nclasses, Npts))\n",
"\n",
" # TODO: fill in the code to compute the log posterior logProb!\n",
" # ==========================\n",
" for i in range(Npts):\n",
" for k in range(Nclasses):\n",
" x_mu = X[i] - mu[k]\n",
" # equation 11\n",
" logProb[k][i] = -.5*np.log(np.linalg.det(sigma[k])) \\\n",
" -.5*x_mu.dot(np.linalg.inv(sigma[k])).dot(np.transpose(x_mu)) \\\n",
" +np.log(prior[k])\n",
" # ==========================\n",
" \n",
" # one possible way of finding max a-posteriori once\n",
" # you have computed the log posterior\n",
" h = np.argmax(logProb,axis=0)\n",
" return h"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The implemented functions can now be summarized into the `BayesClassifier` class, which we will use later to test the classifier, no need to add anything else here:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# NOTE: no need to touch this\n",
"class BayesClassifier(object):\n",
" def __init__(self):\n",
" self.trained = False\n",
"\n",
" def trainClassifier(self, X, labels, W=None):\n",
" rtn = BayesClassifier()\n",
" rtn.prior = computePrior(labels, W)\n",
" rtn.mu, rtn.sigma = mlParams(X, labels, W)\n",
" rtn.trained = True\n",
" return rtn\n",
"\n",
" def classify(self, X):\n",
" return classifyBayes(X, self.prior, self.mu, self.sigma)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Assignment 1: Test the Maximum Likelihood estimates\n",
"\n",
"Call `genBlobs` and `plotGaussian` to verify your estimates."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x21cac99d4a8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X, labels = genBlobs(centers=5)\n",
"mu, sigma = mlParams(X,labels)\n",
"plotGaussian(X,labels,mu,sigma)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 91.7\n",
"Trial: 10 Accuracy 88.3\n",
"Trial: 20 Accuracy 91.7\n",
"Trial: 30 Accuracy 95\n",
"Trial: 40 Accuracy 91.7\n",
"Trial: 50 Accuracy 91.7\n",
"Trial: 60 Accuracy 90\n",
"Trial: 70 Accuracy 95\n",
"Trial: 80 Accuracy 95\n",
"Trial: 90 Accuracy 88.3\n",
"Final mean classification accuracy 92.2 with standard deviation 2.84\n"
]
}
],
"source": [
"testClassifier(BayesClassifier(), dataset=(X,labels,0), split=0.7)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Assignment 3\n",
"\n",
"Call the `testClassifier` and `plotBoundary` functions for this part."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 84.4\n",
"Trial: 10 Accuracy 95.6\n",
"Trial: 20 Accuracy 93.3\n",
"Trial: 30 Accuracy 86.7\n",
"Trial: 40 Accuracy 88.9\n",
"Trial: 50 Accuracy 91.1\n",
"Trial: 60 Accuracy 86.7\n",
"Trial: 70 Accuracy 91.1\n",
"Trial: 80 Accuracy 86.7\n",
"Trial: 90 Accuracy 91.1\n",
"Final mean classification accuracy 89 with standard deviation 4.16\n"
]
}
],
"source": [
"testClassifier(BayesClassifier(), dataset='iris', split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 61\n",
"Trial: 10 Accuracy 66.2\n",
"Trial: 20 Accuracy 74\n",
"Trial: 30 Accuracy 66.9\n",
"Trial: 40 Accuracy 59.7\n",
"Trial: 50 Accuracy 64.3\n",
"Trial: 60 Accuracy 66.9\n",
"Trial: 70 Accuracy 63.6\n",
"Trial: 80 Accuracy 62.3\n",
"Trial: 90 Accuracy 70.8\n",
"Final mean classification accuracy 64.7 with standard deviation 4.03\n"
]
}
],
"source": [
"testClassifier(BayesClassifier(), dataset='vowel', split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x21cac99d128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plotBoundary(BayesClassifier(), dataset='iris',split=0.7)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Questions\n",
"\n",
"1) When can a feature independence assumption be reasonable and when not?\n",
"\n",
"2) How does the decision boundary look for the Iris dataset? How could one improve the classiffcation results for this scenario by changing classiffer or, alternatively, manipulating the data?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Boosting functions to implement\n",
"\n",
"The lab descriptions state what each function should do."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# in: base_classifier - a classifier of the type that we will boost, e.g. BayesClassifier\n",
"# X - N x d matrix of N data points\n",
"# labels - N vector of class labels\n",
"# T - number of boosting iterations\n",
"# out: classifiers - (maximum) length T Python list of trained classifiers\n",
"# alphas - (maximum) length T Python list of vote weights\n",
"def trainBoost(base_classifier, X, labels, T=10):\n",
" # these will come in handy later on\n",
" Npts,Ndims = np.shape(X)\n",
"\n",
" classifiers = [] # append new classifiers to this list\n",
" alphas = [] # append the vote weight of the classifiers to this list\n",
"\n",
" # The weights for the first iteration\n",
" wCur = np.ones((Npts,1))/float(Npts)\n",
" for i_iter in range(0, T):\n",
" # a new classifier can be trained like this, given the current weights\n",
" classifiers.append(base_classifier.trainClassifier(X, labels, wCur))\n",
"\n",
" # do classification for each point\n",
" vote = classifiers[-1].classify(X)\n",
"\n",
" # TODO: Fill in the rest, construct the alphas etc.\n",
" # ==========================\n",
" # Adaboost step 2\n",
" correct = np.equal(vote,labels) # boolean vector denoting correct classifications\n",
" err = wCur.ravel().dot((1 - correct)) # .ravel() gives a flat view of an N-D array\n",
" # Adaboost step 3\n",
" eps = np.finfo(float).eps # to avoid log(0)\n",
" alpha = .5*(np.log(1-err+eps) - np.log(err+eps))\n",
" alphas.append(alpha)\n",
" # Adaboost step 4\n",
" wCur[correct] = np.exp(-alpha)*wCur[correct]\n",
" wCur[~correct] = np.exp(alpha)*wCur[~correct]\n",
" # normalizing wCur i.e. dividing by Z\n",
" wCur = wCur/np.sum(wCur)\n",
" # ==========================\n",
" \n",
" return classifiers, alphas\n",
"\n",
"# in: X - N x d matrix of N data points\n",
"# classifiers - (maximum) length T Python list of trained classifiers as above\n",
"# alphas - (maximum) length T Python list of vote weights\n",
"# Nclasses - the number of different classes\n",
"# out: yPred - N vector of class predictions for test points\n",
"def classifyBoost(X, classifiers, alphas, Nclasses):\n",
" Npts = X.shape[0]\n",
" Ncomps = len(classifiers)\n",
"\n",
" # if we only have one classifier, we may just classify directly\n",
"# print(alphas)\n",
" if Ncomps == 1:\n",
" return classifiers[0].classify(X)\n",
" else:\n",
" votes = np.zeros((Npts,Nclasses))\n",
"\n",
" # TODO: implement classificiation when we have trained several classifiers!\n",
" # here we can do it by filling in the votes vector with weighted votes\n",
" # ==========================\n",
" for c_idx, classifier in enumerate(classifiers):\n",
" # based on equation 15\n",
" votes[range(Npts),classifier.classify(X)] += alphas[c_idx]\n",
" # ==========================\n",
" \n",
" # one way to compute yPred after accumulating the votes\n",
" return np.argmax(votes,axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The implemented functions can now be summarized another classifer, the `BoostClassifier` class. This class enables boosting different types of classifiers by initializing it with the `base_classifier` argument. No need to add anything here."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# NOTE: no need to touch this\n",
"class BoostClassifier(object):\n",
" def __init__(self, base_classifier, T=10):\n",
" self.base_classifier = base_classifier\n",
" self.T = T\n",
" self.trained = False\n",
"\n",
" def trainClassifier(self, X, labels):\n",
" rtn = BoostClassifier(self.base_classifier, self.T)\n",
" rtn.nbr_classes = np.size(np.unique(labels))\n",
" rtn.classifiers, rtn.alphas = trainBoost(self.base_classifier, X, labels, self.T)\n",
" rtn.trained = True\n",
" return rtn\n",
"\n",
" def classify(self, X):\n",
" return classifyBoost(X, self.classifiers, self.alphas, self.nbr_classes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run some experiments\n",
"\n",
"Call the `testClassifier` and `plotBoundary` functions for this part."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 90\n",
"Trial: 10 Accuracy 88.3\n",
"Trial: 20 Accuracy 91.7\n",
"Trial: 30 Accuracy 95\n",
"Trial: 40 Accuracy 91.7\n",
"Trial: 50 Accuracy 91.7\n",
"Trial: 60 Accuracy 90\n",
"Trial: 70 Accuracy 95\n",
"Trial: 80 Accuracy 95\n",
"Trial: 90 Accuracy 88.3\n",
"Final mean classification accuracy 92.1 with standard deviation 3.01\n"
]
}
],
"source": [
"testClassifier(BoostClassifier(BayesClassifier(), T=10), dataset=(X,labels,0), split=0.7, ntrials=100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Results for regular classifier without booster copied from above:\n",
"\n",
"`Final mean classification accuracy 92.2 with standard deviation 2.84`\n",
"\n",
"It seems that for this classification case, boosting hasn't improved anything."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 95.6\n",
"Trial: 10 Accuracy 100\n",
"Trial: 20 Accuracy 93.3\n",
"Trial: 30 Accuracy 91.1\n",
"Trial: 40 Accuracy 97.8\n",
"Trial: 50 Accuracy 93.3\n",
"Trial: 60 Accuracy 93.3\n",
"Trial: 70 Accuracy 97.8\n",
"Trial: 80 Accuracy 95.6\n",
"Trial: 90 Accuracy 93.3\n",
"Final mean classification accuracy 94.7 with standard deviation 2.82\n"
]
}
],
"source": [
"testClassifier(BoostClassifier(BayesClassifier(), T=10), dataset='iris',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 76.6\n",
"Trial: 10 Accuracy 86.4\n",
"Trial: 20 Accuracy 83.1\n",
"Trial: 30 Accuracy 80.5\n",
"Trial: 40 Accuracy 72.7\n",
"Trial: 50 Accuracy 76\n",
"Trial: 60 Accuracy 81.8\n",
"Trial: 70 Accuracy 82.5\n",
"Trial: 80 Accuracy 79.9\n",
"Trial: 90 Accuracy 83.1\n",
"Final mean classification accuracy 80.2 with standard deviation 3.52\n"
]
}
],
"source": [
"testClassifier(BoostClassifier(BayesClassifier(), T=10), dataset='vowel',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nLHcAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x21caea31710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"plotBoundary(BoostClassifier(BayesClassifier()), dataset='iris',split=0.7)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now repeat the steps with a decision tree classifier."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 95.6\n",
"Trial: 10 Accuracy 100\n",
"Trial: 20 Accuracy 91.1\n",
"Trial: 30 Accuracy 91.1\n",
"Trial: 40 Accuracy 93.3\n",
"Trial: 50 Accuracy 91.1\n",
"Trial: 60 Accuracy 88.9\n",
"Trial: 70 Accuracy 88.9\n",
"Trial: 80 Accuracy 93.3\n",
"Trial: 90 Accuracy 88.9\n",
"Final mean classification accuracy 92.4 with standard deviation 3.71\n"
]
}
],
"source": [
"testClassifier(DecisionTreeClassifier(), dataset='iris', split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 95.6\n",
"Trial: 10 Accuracy 100\n",
"Trial: 20 Accuracy 95.6\n",
"Trial: 30 Accuracy 91.1\n",
"Trial: 40 Accuracy 93.3\n",
"Trial: 50 Accuracy 95.6\n",
"Trial: 60 Accuracy 88.9\n",
"Trial: 70 Accuracy 93.3\n",
"Trial: 80 Accuracy 93.3\n",
"Trial: 90 Accuracy 93.3\n",
"Final mean classification accuracy 94.6 with standard deviation 3.67\n"
]
}
],
"source": [
"testClassifier(BoostClassifier(DecisionTreeClassifier(), T=10), dataset='iris',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 63.6\n",
"Trial: 10 Accuracy 68.8\n",
"Trial: 20 Accuracy 63.6\n",
"Trial: 30 Accuracy 66.9\n",
"Trial: 40 Accuracy 59.7\n",
"Trial: 50 Accuracy 63\n",
"Trial: 60 Accuracy 59.7\n",
"Trial: 70 Accuracy 68.8\n",
"Trial: 80 Accuracy 59.7\n",
"Trial: 90 Accuracy 68.2\n",
"Final mean classification accuracy 64.1 with standard deviation 4\n"
]
}
],
"source": [
"testClassifier(DecisionTreeClassifier(), dataset='vowel',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trial: 0 Accuracy 86.4\n",
"Trial: 10 Accuracy 88.3\n",
"Trial: 20 Accuracy 88.3\n",
"Trial: 30 Accuracy 90.3\n",
"Trial: 40 Accuracy 84.4\n",
"Trial: 50 Accuracy 79.2\n",
"Trial: 60 Accuracy 89\n",
"Trial: 70 Accuracy 87\n",
"Trial: 80 Accuracy 86.4\n",
"Trial: 90 Accuracy 83.8\n",
"Final mean classification accuracy 86.5 with standard deviation 2.9\n"
]
}
],
"source": [
"testClassifier(BoostClassifier(DecisionTreeClassifier(), T=10), dataset='vowel',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAD8CAYAAABpcuN4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl4VeW59/959px5ThhCAMkACQgKUsW5pU6BiqIotNaB\n1vrzqG1tPbWn7zkOV7We1p5XRami1WM91YITgwy+rbbFlvaIKHNICEMiJGSAhEw7e3x+fzx7JTvJ\nzrwzP59eudZew15rJcV1r3v63kJKiUaj0Wg0nWEa6hvQaDQazfBGGwqNRqPRdIk2FBqNRqPpEm0o\nNBqNRtMl2lBoNBqNpku0odBoNBpNl2hDodFoNJou0YZCo9FoNF0SFkMhhHhVCFEphNjfyf4rhBBn\nhRC7Az//EY7rajQajWbgsYTpPP8NPA/8rotjPpFSLurpCZOTk+WUKVP6eVsajWa4cuzYsdMff/zx\nDmAmOroxlPiB/V6v9ztz586tDHVAWAyFlHK7EGJKOM5lMGXKFD777LNwnlKj0QwjXn75Zcu4ceNm\npKSk1JhMJq0lNET4/X5RVVWVe+rUqVeAb4Q6ZjCt+EVCiD1CiK1CiLxBvK5GoxmGTJkyJSIlJaVO\nG4mhxWQyyZSUlLMozy4k4Qo9dcfnwGQpZYMQ4jpgPZDV/iAhxN3A3QAZGRmDdGsajWYoEEKgjcTw\nIPD/Q6eOw6B4FFLKOillQ+DzFsAqhEgOcdwaKeU8KeW8lJSUwbg1jUaj0XTDoBgKIcQ4IYQIfJ4f\nuO7pwbi2RqPRdEZpaall0aJF50yaNGnmtGnT8i6//PLMvXv32gsLC21ZWVkDEiJ3Op0iPz//nIyM\njJnnnnvu9MLCQlvw/k8//TRi+vTpudOnT8+Ni4ubM3HixFnTp0/PXbBgQXZvrnPJJZdk1dTUhOUZ\nH5bQkxDiLeAKIFkIcQJ4BLACSClfBG4C/j8hhBdwArdKPQhDo9H0Em8zorkWkyMev8VBv54hfr+f\nb3zjG5krVqw4/cEHHxwF2LFjR0RZWZl16tSp7vDccUeeffbZ5Li4OG9paen+NWvWJDz44IPpmzdv\nPmrsnz9/vvPQoUMHAZYuXTpl0aJFZ++8886a9ufxeDxYrdZOr/O3v/3tcLjuOSzWRkq5XEo5Xkpp\nlVKmSyl/K6V8MWAkkFI+L6XMk1LOllJeKKXcEY7rajSasYHfB/veJHbDSiZtvZ/0DSuZtO9NYv2+\nvp/zgw8+iLFYLPJf//Vfq4xtCxYscF5zzTUNwccVFhba5s6dm5ObmzsjNzd3xh//+McogJKSEuu8\nefNypk+fnpuVlZW3bdu2aK/Xy9KlS6dkZWXlZWdn5z722GOpIa4bf9ddd50GuPPOO2t27NgR4/f7\ne3TP69evj1mwYEH2okWLzsnLy8sF+OpXv5qZl5c3IzMzM++//uu/WkL6aWlp51ZXV5v3799vz8rK\nylu2bNnkzMzMvMsuuyyrqalJ9OZvNVjJbI1Go+kzB9YSe+BtEmMm4LHYkV4X4sDbJALMWkFdX865\nd+/eiNmzZzd1d9yECRO8n3zySVFkZKTct2+fffny5efs37+/4NVXX0382te+dvY///M/T3m9Xurr\n603/+Mc/IsvLy62HDx8+AFBdXW1uf76Kigqb4bFYrVaio6N9FRUVlvHjx3t7ct+7d++O2rNnz4Gs\nrCw3wFtvvXUsLS3NV19fb5ozZ86M2267rSYlJaWNCT127Jj997///dH58+eXXHXVVdP+53/+J/7u\nu+/u4KV0hjYUGs1Yxe2G+nqIiQGbrfvjhwhvM6JoM/GGkQCw2JExE/Ac3kz8jBup728YqivcbrdY\nuXLl5IMHD0aYTCZKSkrsABdeeGHj9773vSkej8d000031SxYsMA5ffp015dffmm//fbbJy1evPjs\nDTfc0MGIhYq6CyF6fP9z5sxpMIwEwJNPPpm2bdu2eFBGqKCgwJ6SktLGAGZkZLjmz5/vBDjvvPMa\njx8/bu/xHwDdDanRjD38fti0CR54AB56SC03bVLbhyHNtZj8boRhJAwsdqTPrXIWfTnvrFmznHv2\n7Ins7rgnnngiLTU11VNQUHBw3759Bz0ejwng2muvbdi+fXvhxIkT3XfcccfU559/PiklJcW3f//+\ng1deeWX96tWrU2+99dYp7c83btw497Fjx2yg8gwNDQ3m1NTUHgfRIiMjW/6PWr9+fcyOHTtidu3a\nVVBYWHgwJyenyel0dvh72Gy2lr+d2WzG6/X2KvSkDUUfkBIOb1VLjWbEsXkzrFsHCQmQkaGW69ap\n7cMQRzx+k02Fm4K3e10Isw3piKdPFm7x4sX1brdb/PrXv26J6//1r3+N3Lx5c3TwcWfPnjWPHz/e\nYzabWb16dZLPp57pRUVFtokTJ3p+9KMfVX/rW9+q/vzzzyPLy8stPp+PO+64o/bnP//5yX379nUw\nRPn5+bWvvvpqEsBrr72WcNFFF9WbTH17FNfW1prj4+O90dHR8rPPPnPs27cvqk8n6gZtKPpAdQFs\n+z5UHxrqO9FoeonbrQxCejrYA9EHu12tb9mi9g8zLA5kdj619WVYDWPhdSHqy7Bm5VPb17CTyWRi\n48aNRz766KPYSZMmzczMzMx75JFHJmRkZHiCj/vBD35Q+dZbbyXNnj17elFRkSMiIsIP8OGHH8bk\n5ubmzZgxI3fDhg0J//qv/1px/Phx6yWXXJIzffr03Lvuumvq448/fqL9db///e9X19TUWDIyMmau\nWrVq3NNPP93hmJ6ybNmys06n05STk5P7yCOPTDj33HMb+3qurhDDtUp13rx5crhpPTnPKC/ii1fg\nk6fg0ofhvO+AEBCRONR3p9H0gNOnVbgplPJBaSn86leQlDQot/KnP/3JvXDhwn09OdbvUwntw5uJ\n97mVJ5GVT23eLdSZOqSLNX1hz549ybNnz54Sap9OZveQ6kJYuwTcjWC2QlQK7FoDn74Atii4ZT0k\n5wz1XWo03WAkrl2uVo8CWtdjYobu3rrAZFbVTTNupD5cfRSanqNDTz0kOQcWrVGeg8kK9li1jEiC\nxS8PvJE4sLOJ5/7yBU/u2c5/f6RjXn3l5PEvOHrX9ZRfmMvRxx8Y6tsZfGw2yM+HEyeUcQC1PHEC\nrrtuWFc/gQpDRY/Dp43E4KINRS+YfCmcvxI8jeA8rZbnr4SMS4b6zjSaXpCfD8uWQW2tCjfV1qr1\n/PyhvjPNMEWHnnpJwfuAgBlL4cA6tT7/vqG+K42mF5hMsHgxXH31iOij0Aw92lD0AumHpGy49jlI\nnQmzb4edL6jtQvtmmpGGzTZoiWvNyEYbil4gTLDoxdb1tFlt1zUajWY0ot+DNRrNmGU0y4wDPPro\no2m9FQAMhTYUGo1mxCD9cGAdsTIMaiOGzPhll11W/+WXX+4/cuTIgV/84hcny8rKOtfuDgPBMuP3\n3XdfxYMPPpgevN+QGT906NDBhQsX1v785z8/cejQoYM7duwo6u21fvOb36Q1NTX1+zmvDYVGoxkx\nlH+B448PkXFqN47+nmskyowD/Nu//du4WbNmzcjOzs798Y9/PB6gpqbGdNlll2Xl5OTkZmVl5b32\n2msJjz32WOqZM2csCxYsyOmLNxKMzlGEwOcGVz3YY8Csi0E0miGnoQIzEgreI85Zg+Xgu8TFTMCD\ngOg0+jSVYiTKjK9duzautLTUtmfPngIpJVdccUXWH//4x6jjx4/bJk2a5Nq+ffthgNOnT5uTkpJ8\nq1evHrdjx47C5OTkfkzu0IaiDdIPRZvh8GZlLMw2yMqH7Hxd1aQZgwwTGfJTe7CvvYFMTxMmsxUZ\nkYhn7+9I+eK3pFoj8d/yPsXjZuMaqOsPJ5nxDz/8MPbPf/5zXG5ubi5AU1OTqaCgwHHJJZc0Pvro\no+n33nvvxCVLltReddVVYdV80o+/IIo2q94IRwLEZajlgXVqu0YzZhhmMuTjZuPKX02JIx6fyYK0\nReM3WZCOeHz5v6Gkr0ZiJMqMSyn58Y9/XG7kMEpLS/c/8MADp88///zmXbt2HczLy3P+5Cc/mfTw\nww+P6+Wfo0u0oQjgcytPIjYdLAEJHItdrR/eovZrNGOCYShDnnkNDefeRpXHiam5FovHienc26jK\nvJqG7r8dmpEoM37NNdfU/e53v0uuq6szARw5csRaXl5uOXbsmDUuLs7/L//yL2ceeOCBit27d0cC\nREVF+Wpra/v9nNehpwCuemUMLO3mPlns4HOp/ZG6N0kz2ulOhvzqq4csDFW0kQQEZF1LTeEHJBRt\nIuGyn1HV/TdDY8iM33vvvZOeeeaZcXa7Xaanp7tWrVr1ZfBxP/jBDyqXLl06bf369QmXXHJJfbDM\n+HPPPTfOYrHIyMhI3+9///tjx48ft65cuXKK3+8XAJ3JjC9dunRqRkbGzLi4ON/atWuP9PSeb7nl\nlrMFBQWOefPmTQeIiory/+EPfzi6e/fuiH//93+faDKZsFqt8je/+U0JwO233161cOHCnAkTJrj7\nUjVloGXGA/jcsPUBFW4yjIXfB+568DjhulVDm9g+sLOJjxoLaUioZ0J1Knd8bfrQ3cwI5uTxL3A9\n/igRBw/jvG4h5/zHc0N9S8OLQZQh763M+Pu3kXHhD6mceAHNJz8l4p/PkHLDG5RqmfHwoGXGe4CR\nuD6wDmImwtkSNZjIXQeJWVD8oU5qa8YAw1SG3GSGpW9SaqxPnI8zeF0zsOjHXhDZ+ZC3DCr2QNlO\nNZBownxIm6OT2poxwgiXIdcMDNqjCEKYIPNqKNwISTmqj8Jwa42kdubVurdCM8ox5Ma3bGn1JLQM\n+ZhGG4p2uOpB+iAivu12ndTWjBm0DLmmHdpQtMPoxva62lZAeV1gtqv9Gs2YQMuQawLoHEU7jKR2\n3QllHEAt605A1nU67KTRaMYeYTEUQohXhRCVQoj9newXQojnhBDFQoi9Qojzw3HdgcJIajfXwtlS\ntcxbprZrNJrRw1DIjG/dujU6Nzd3hsVimfvaa68ltN9/6tQpsyEznpycPDs1NfVcY725ubnHkuE3\n3XTTlD179ti7P7J7whV6+m/geeB3ney/FsgK/HwF+E1gOSwRJshZrBLXWhxQoxk+ePGJZrwmBxa/\nBXO/msAMmfEVK1ac/uCDD44C7NixI6KsrMxqiPYNBOecc477tddeO/7UU0+lhdo/btw436FDhw4C\nPPjggxOio6N9jz/+eEWo+5dSYjaHbiR55513jofrnsPiUUgptwNnujjkeuB3UvFPIF4IMT4c1x5I\nzDaVuNZGQqMZWvxI9nEydiN7J21lf/pG9k7ax8lYP323FUMlM56Tk+P+yle+4uypbEcw+/fvt2dl\nZeWtWLEiIy8vL7e0tNS6fPnyyTNnzpyRmZmZZ8iOA8ydOzdnx44dER6Ph5iYmDn33nvvxJycnNw5\nc+ZMP3nyZK+chMFKZk8EgtviTwS2lQ/S9TUazQjmAGWxBylPjMbhsWCSXvziIOWJALOY2EGhtScM\nlcx4fzly5IjjlVdeOXb55ZeXAjzzzDMn0tLSfB6PhwsvvDBn165dNXPnzm0O/k5DQ4P5iiuuqF+9\nevXJ73znO+kvvPBC8pNPPnmqp9ccrGR2qLhah1cBIcTdQojPhBCfVVX1WcJFo9GMIrz4xGEq4w0j\nAWDBJKNxeA5TGe/F1+9Rn13hdrvFihUrpmRnZ+fefPPN044cOeIAJTP+1ltvJT/44IMTPv3004iE\nhAR/sMz4O++8E5uQkNCvORChmDRpkuvyyy9vMXCvvvpqYm5u7oy8vLzco0ePOvbu3RvR/jsOh8O/\nbNmyOoC5c+c2HT9+vFdxksEyFCeASUHr6UBZ+4OklGuklPOklPNSUlIG6dY0Gs1wphmvyYdfGEbC\nwIJJ+vCLZrx9eo4Nlcx4fzFECQH27dtnf+mll9K2b99eVFRUdPCyyy6rczqdHQynxWJp+duZzWbp\n8/XOuA6WodgIfDtQ/XQhcFZKqcNOGo2mWxxY/OZAuCl4uxe/MGOSDix9GpQxVDLj4aS2ttYcFRXl\nS0hI8JWUlFi3b98eOxDXCUuOQgjxFnAFkCyEOAE8AlgBpJQvAluA64BioAm4MxzX1Wg0ox8LZplF\nam37HEUDzdZcxp/pa/XTUMmM//Wvf41ctmxZZl1dnfmjjz6Kf+KJJyYUFxcf6MvvcPHFFzdlZWU1\nZ2dn52VkZLjmzp3b5/kcXaFlxkcIWmY8PGiZ8eFDr2TGkRygLPYwlfG+gCeRRWptHhPqTCFToJre\nomXGNRrNiMaEYBYT62Ywrj5cfRSanqMNRRjxuXWDnkYzkFgwy2jMYa8k0nSNNhRhQPrVrIrDm5Wx\nMPSi9KAjjUYzGtCGIgwUbVaDjWLTleKs16XWQUmBaDQazUhGv+/2E59beRKGkQC1NAYd+QZMMUaj\n0WgGB20oQuBzQ2O1mnTXXVGYq14db2mn0Rg86Eij0WhGMtpQBCH9ULgJtj4AH9wN798GO3+jtndG\n8KCjYPSgI41m+DOaZcYBnnnmmaTS0tJ+pxi0oQiiaDPseQPMDuUJeF3w+Suw7y1wdqKNqwcdaTSD\nhwz0U8h+qMYaGDLjl112Wf2XX365/8iRIwd+8YtfnCwrK7OG4VY7xZAZX7x48elQ+w2Z8UOHDh38\n9re/XXXPPfdUGOsOh6NXv/gbb7yRfOLEiX7/PjqZHcDnhn2/h+Mfg88DJjNYo6D2GHzwPZVzuHUD\nJOd0/K4x0OjwFhVuMtv1oCPNEOJ2j9pZ16eoc/yJgoxEoorHE9fc/Tc6pzOZcVDS4sa2wsJC24oV\nK6Y6nU4TwLPPPlv69a9/vbGkpMS6dOnScxoaGsw+n0+sWrWqZOHChQ233HLLlL1790YJIeQ3v/nN\n6kceeaQy+Lo5OTluUJ3hfWHVqlVJa9asSfV4PGLevHkNr7/+eqnf7+fmm2+eevDgwQgppbj99tur\n0tLSPAUFBZErVqyY5nA4/Lt37y7oraEx0IYigKserJGQvRiKt4Lfq7wBn1uVuF7169BGAvSgI80w\nwe+HzZvVj9utjER+vvrp40NpuNCIyyyBAsrjnHgsBZTHxeDwCCAKe5/6KkaizPjOnTsdGzZsiP/8\n888LrFYry5cvn/zyyy8nZmdnu86cOWMpKio6aFw3OTnZ9+KLL6auWrWq1DCAfUUbigDGw92RAOPO\nhxN/B+kDvw/SzoVpX+/8u1JC8TbIvEYNOtJohoTNm2HdOkhPB7sdXC61DrB45NZpn6LOvo7PMj34\nTGZMMgKrZy8nU77gy1QrZv8y5hWPI9bV/Zn6htvtFitXrpx88ODBCJPJRElJiR2UzPj3vve9KR6P\nx3TTTTfVLFiwwBksM7548eKzN9xwQ59mZXTG1q1bY/fu3Rs1a9asXIDm5mZTenq6e8mSJWePHj3q\nuPPOOyctWrQo7Ncd2a8ZYSQ411AVkOdKzFLGwlXftYdQXQDbvg/VhwbnXjWaDrjdylAYRgLUMj0d\ntmxR+0co44h1XcfMEgdWn0BIGxa/QEgHVl8+s0r6aiRGosy4lJLly5dXGzmL48eP7//Vr35VPm7c\nON+BAwcOXHrppQ2rVq1K/eY3vzk5nNfVhiKI7HzIvQls0TDlqzB+LnztKZh0YejKJ+cZaDoNRZug\nsQqKNqr1zhLfGs2AUV+vjIG9XZ224VnUj+w67UxSG85lYpUXn6kZj8WLz3Qu6VXTSOmzWupIlBm/\n9tpr6zds2JBYXl5uAVUhdfjwYVtZWZnF7/dz11131Tz++ONlxnWjoqL8dXV1/Q5/6dBTEMIE06+H\nrGu7zzVUF8LaJeBuBLMVolJg1xr49AWwRcEt6zvPaWg0YcdIXLtcbY2FsR4z8uu0C6lIAEEmqTVF\nVCYUUZFwKZl9HoU5EmXG58+f73z44YfLrrzyymy/34/VapWrV68uMZvNfPe7350ipUQIwRNPPHEC\n4Nvf/nb1PffcM6W/yWwtM94PSj6BrfeDt1l5Ie4GsETAdasg45LwXkvLjIeHUS0zvmlTxxzFiROw\nbNmwzFH0VmZ8PbszvsLUyonEN5+kNuJ/OZayhDmlWmY8PGiZ8QFi8qVw/kr4+y9VWazfC/PvC7+R\n0Gh6RH6gHnvLllZPYtmy1u0jGBOCGzmv1FifSLwzeF0zsGhD0U8K3gcEzFiqhAAL3lfGQjNykEiK\nqSKTFMRIfjs1mZTncPXVHfsoRnFvhWbg0Yaih4SaNSH9kJQN1z4HqTNh9u2w8wW1XcuLjxyqaeBD\nDhDPPFIY+bF8bDZICtRpj+LeCs3goQ1FN3Q3a2LRi63Hps1qu64Z3viQNOGmiAoaA8so7AggglHy\n1j1Keys0g4s2FN2gZ02MTiRQRg2b+QQTgihs7KKUnZRgxcwtzCOZ6G7PM6zprrfi6qt1GErTI7Tv\n2QV61sToRQDJxBCBFTMm7IFlBDYWc+7INxIw6nsrNIOHNhSd4HNDbYkqfdWzJkYnEVg5j0l48OHE\njRsf55FOBolDfWvhIbi3IphR1FvRX4ZCZvzRRx9NmzZtWl52dnbuRRddlF1UVNTGrQuXzPhNN900\nZc+ePfbuj+webSjaETyTYvvP4eT/QtkuVfpqoGdNjB4KqABgOuMQwKHA+qjASFyfONFqLIzeiuuu\nG5lhp+ZmwalTZno5lyEUQyUzPnfu3Kbdu3cXFBUVHVyyZEnND3/4w/Tg/T2VGff7/Rhd4qF45513\njs+ePTssGljaULTDyEnY45VX4XHB8b/AvjdVN7anWc+aGE0kE8UK5nMVuSznApKIIhyzDoYN+fmq\nl6K2FkpL1XIk9lb4fPDmm7GsXDmJ++9PZ+XKSbz5ZixdPCi7ozOZ8WuuuaaNLEhhYaFt7ty5Obm5\nuTNyc3Nn/PGPf4wCKCkpsc6bNy9n+vTpuVlZWXnbtm2L9nq9LF26dEpWVlZednZ27mOPPZba/rqL\nFy+uj4mJ8QNccsklDeXl5T1+kuzfv9+elZWVt2LFioy8vLzc0tJS6/LlyyfPnDlzRmZmZt6Pf/zj\n8caxc+fOzdmxY0eEx+MhJiZmzr333jsxJycnd86cOdNPnjzZq/y0TmYHEZyTqD2uxAFjxqtQU1MV\nnPwUmmvhgnv1rInRQj6zWj6nEdtmfdjRl16IrnorRhJr18by9tuJTJjgwW6XuFyCt99WMcIVK/qk\nlDocZMZfeumllIULF57tzX0fOXLE8corrxy7/PLLSwGeeeaZE2lpaT6Px8OFF16Ys2vXrpq5c+e2\nmdXR0NBgvuKKK+pXr1598jvf+U76Cy+8kPzkk0+e6uk1taEIwph/bbLAmcNgj1Wfo9OU9zDxQkCq\nuRO6T0IzaISjFyK4t2Kk0dws2Lw5vsVIANjtkgkTPGzeHM+NN9bTRw2jnjBQMuOrV69O3LNnT+RL\nL71U2Jv7mTRpkuvyyy9vMXCvvvpq4htvvJHs9XpFVVWVde/evRHtDYXD4fAvW7asDlTo65NPPulV\ntYZ+3AVhNNO569UcClPAjPq9SvgvOhWkVyexNYOM0QuRkAAZGWq5bp3aHm7cbjh9enjJktfWmnC7\nRYuRMLDbJW63oLa2T8+xoZQZX79+fczTTz89fsuWLcURERG9MnKGKCHAvn377C+99FLa9u3bi4qK\nig5edtlldU6ns0P+xmKxtFzDbDZLn8/XqxyPNhRBGM10TYGIpc8NHic4ayE2QyexNUPAYM2Z8PuV\nqOADD8BDD6nlpk1q+1ATH+/HZlPhpmBcLoHNJomP79NNDpXM+N///veI+++/f/KGDRuKJ06c6G2/\nvzfU1taao6KifAkJCb6SkhLr9u3bY/tzvs4IS+hJCHEN8CxgBl6RUj7Vbv8dwK+Ak4FNz0spXwnH\ntcNNdr6qfKp8HCr3q+l1Qigvo3If5N3a6mloNANOT3ohwhFSGs4d3A6HJD+/tkOOoqzMys03n+lr\n2GmoZMYfeuihSU1NTeabb755GsCECRPcH3/8cXFffoeLL764KSsrqzk7OzsvIyPDNXfu3D7P5+iK\nfsuMCyHMQBHwdeAEsBNYLqU8GHTMHcA8KWWP5fKGUma8cBPsfwtOF0NNMQhzQNdpOiSeA3nLBr8r\nW8uMh4feyIz78OPCix0L5qFyvt1u9XafkNBxzkRtLTz7bP+T04NxjRD0RmYcn08ltDdvjsftVp5E\nfn4tt9xShzmsY6nHLAMtMz4fKJZSHgUQQvwBuB442OW3hilG5VNMOpwuguQZgR1SNdlFj1dd2ZlX\n6/LY0YpEUkQlh6nEjx8TJrJIJZvUwVeXNRLXnc2ZCMcDfLC8lv5gNqvqphtvrKe21kR8vH8gE9ia\ntoTjNWkiEOyqnQhsa89SIcReIcQ7QohJoU4khLhbCPGZEOKzqqo+D67qF0blk0AltM3WwI9NrQt0\nV/ZIQCI5TGWfeiKKqOQgZTiwEksEDqwcpIwiKgfgTnvAQPdCjKQObodDMm6cTxuJwSUcHkWoV6z2\n/yduAt6SUrqEEPcArwNf7fAlKdcAa0CFnsJwb73GqHySgMmsKp5MlsDSrLZ3ltAOJUWuGRr6Kh3u\nw89hKokhAkvgPcqCiRgiKKaSTFIGNgwVqldioHshOvNaSkpGXmOeZkAIh6E4AQR7COlAWfABUsrT\nQasvA/8ZhusOCEbl04F1EDcFTheC2aG8iKRsaChXOYpgQ9CdFLlm8HDiRkKfpcNdePHjbzESBhZM\nNAVyFpEDIUHek16JgeyFCJ6O19wMpwK9WH/6E3zyiZ5hMcYJh6HYCWQJIaaiqppuBVYEHyCEGC+l\nLA+sfgMoCMN1B4zsfFXt9NlvoLlGzcK2Ranl7Ns6dmVrKfLhQTUNrOUzPPg6lQ7vDjsWTJjwtjMW\nXvwBldkBKnkb6qqjYK/l7beVwcjIGH4VUJohod+vB1JKL3Af8CHKAKyTUh4QQjwuhPhG4LAHhBAH\nhBB7gAeAO/p73YFEmFRJrCMBZtwE8+6F3JshKknt83uh6bTyHrQU+fAhmWgWcW6/pMPNgcR1PU68\nqPJ8L37qcZJJ6sCEnQarV6KnfPJJq5EY6nvRDAvC8nokpdwCbGm37T+CPv8U+Gk4rjUYGA//+MlB\nD3+bCkHR0QcxAAAgAElEQVTtXA2FG0H6VIgp/SJwnYXIlLbnCJYijxyhygkjkckkch6T2MFRfPjx\nIbmAySGlwyXQhLtD+Ws2SsetmEqaAp5ELhNatneLlLBtG1xzjXrj6I7hVHU0nO5lECgtLbXce++9\nGXv27Im02WwtfRR2u10uWrQoy9BsCiePPvpo2htvvJFsNptlUlKS9/XXXz+enZ3dYoFPnTplvuKK\nK3IAqqurrSaTSSYmJnoBdu/eXeDoRSL/mWeeSbrxxhvPZmRk9KuxTwccQ2BUPrWfQ3G2RGlAWaMg\ndhI0Visp8pJPoOgDpS5rtKXoLu6hoyfS4X5UqOpPFLCVAxRS0VIhJRDkkMY15LGQGVxDHjmk9bw0\ntqAAvv99OHSoZ8cPp6qj4XQvofD7Yd262HB0jI90mfGe8MYbbySfOHGi37+PNhQhMKqWvC5VEutp\nUoaj+pASCrTHqB6LM0XKW7AEkt0V+9R2r0tLkQ8VEtmtdLgHPz78mBBdlr+aMRGJrefhpjNnlE7S\npk1QVQUbN6r1M2fU/s50lNrPjZASDh6EL7/s+dyIcGk0DfcZFl984eChhzLYvdvR31ONRJlxgFWr\nViXNmjVrxvTp03O/9a1vZfh8PjweD0uWLJmanZ2dm5WVlffzn/889eWXX04oKCiIXLFixbTeDj1q\njxajCIHZBpnXwT//r5IVh0BeohomX67Wg9VlbdGQcA7UHINTX4AtRlVGaSnywUcgupQO9yPx4CUS\ngTngIYSl/LWwEJYsgcZGsFohJQXWrIEXXoCoKNX5vGdP5xVNwVVHFRXw8cfw5JPdl6eGQ1m2PcH3\nYngSQz3DoqLCjJTw3ntx1NRYePfdOCZM8CAEpKX1aSjFSJQZ37lzp2PDhg3xn3/+eYHVamX58uWT\nX3755cTs7GzXmTNnLEVFRQeN6yYnJ/tefPHF1FWrVpUuWLDA2dNrhEIbiiCC+yCQ6keIgN6TWX32\neZT3YKjLGn0WKXnqp+YoXPmYmmOhGX548IVswet3+WtOjjIM99+vykujo6GhAWJj4dZbYceO0BVN\nwb0RF18M8+bBiy8qQ1FfDzU16h9eYmLo3Eeoaqm1a2HXLnjkkZ7lSNoz3GZY7Nlj54YbMmlqMmG1\nShITPfzudyn89repREb6ef/9YsI0yS0Uw0lmfOvWrbF79+6NmjVrVi5Ac3OzKT093b1kyZKzR48e\nddx5552TFi1a1OV1+4I2FLTtg/C6oOGU2jbxQtWV7QvkG6oKoHIvxE9RzXfeZhWWSskLrLuUl6GT\n10OLRFJMFZmkdMgrWFv8iLaEpfz10kth5Ur45S/VA9vrhXvuUbmK9hVNEyfC6tUqPOXzQVMT/P3v\nar/NBqmpbT2S9evVcd//PmzYADNmdF4tFREBzzwDN9wAs2f3/fcZLjMsZs92sXp1CT/4QQYulyAq\nyk9jo4moKD/PPlvaVyMxa9Ys5/r16xO6O86QGX/33XeP+f1+IiIi5kKrzPi7774bd8cdd0x94IEH\nKu67777T+/fvP/j+++/Hrl69OnXt2rWJb7/99vH25zRkxj/55JPC3siMSylZvnx59bPPPlvWft+B\nAwcOvPvuu3GrVq1KfeeddxLeeuutkp6etzt0joLWPghHAlgj4cQ/4NReJQhoMqttJjOk5kFcBjSf\nAUc8OM9AYrZqxNN5ieFDNQ1s4wAnqMFH26SnCYEVCxLZ4luEtfz1/ffVW/zSpWr53nuhq4hKSuDw\nYWUEMjJg6lTIzQWLRYWuYmPVMikJfv1rSE7umPsoLW17bqdTGZzjx9Xn995rmyMZyVxzTQO33VaF\n02mittaC02nittuquPrqPquljkSZ8WuvvbZ+w4YNieXl5RZQFVKHDx+2lZWVWfx+P3fddVfN448/\nXmZcNyoqyl9XV9dv1cQx71EYpbARSSqsdHgLuOqAeqUie/ZLmHa18sZ9bkjMgqt+peZUlP4Njvw/\nqPtSeRw6LzG0OHHjR/J3jlCHk20cIIUYziGFWUxo8S6smDBjwo+kDmfvy187w++H7Gx47jmYORNu\nv119NplaY/2gPINDh5QxMKqI7HY4/3yV4zh+XIWcrFa4+Wb40Y9C5z4iI2HOnNay1bVrleEwmZRX\n8cYb8NprrR5JTk7/fr+hZuPGBISAa6+t4YMPEti0KYGf/azPonAjUWZ8/vz5zocffrjsyiuvzPb7\n/VitVrl69eoSs9nMd7/73SlSSoQQPPHEEycAvv3tb1ffc889UxwOh7+3pbXB9FtmfKAYLJnxxmr4\nw/WqtNVTr4yFMAFShZ8wwbg5MO0q5TG0lxgfLH0nLTPeNUZXdhPuljASSPxIBIKvMp15ZLDr+HYS\nH/8vIg4epum6hYz/j6cHXkZ806a2eYTaWrVt/vyOD++XXlKGxOMBh0N5GY8+2jH3EREBq1Ypg2Kc\n+9QplYB2OiEtTSmuGsddcsnA/X59pNcy47fdlsEPf1jJBRc08+mnETzzTApvvFGqZcbDQ1cy42M+\n9FR/Eqr2Q9rsgDqsWYWZMKnPthioOQINlaE9BrNN5SR0uGloSSaa65iJBCwILJgQCKyYySKVSuqo\noI49lLaEowT0rvy1r7RXf3U6ISsLJk9ue1xNjfIyli9X67feCpMmwbRp6nNjowolNTaqXMgll7Q9\ntxDqvDabyo8EHzfSMZvhzTdLueACNQt6/nwnb76pjcQgMWZDT84zyjD88/+qhHT5roAHAfilKjCJ\nSoWkLKg7CQseVDkKzfAljViSiKSKBmTAHEwgnhgc1OPkEKdw4cMdyE6Ern8KTb+GGIWqIvrww7Ze\nRlmZCh3ZbPDBByrEtHEj1NWp5LXFogzMwoXw+ecqF3LffR3PvXSpCkktXarObxyn0fSDMWkoqgth\n7RIVdvI2K6/B56ZFHF2YQEjwOgMd2g4l56EZ3tixcBb1wplENNU0UEEdZdTixU8UNqIw48aDGx9l\n1JBAQ5caUCGHGLnjya6PQMTE9q5sNLiKKFSvwk9/Cm+9pdajo1UoyedTjW6Fha35iIceggMHVE4k\nWFk2IQGmT4fnn2/NkbzwQtvjwk0oWfQeIqXE7/cLk8k0POPfY4hATqXTdvcxaSiSc+C6F+DtmwMa\nTnZlHLwuFXayxajqprovob4MZn1LNdVphjcmBGnEYgJSiGUcsZyglkis1NCEGRMWrBBIaycT08ZI\nhCqrNYYYxRCBxQ/xm/+MdfNHnHVbibfF9b25rbNehaio1vLa2lq46CIVTsrKUt9zuVTXtpEkb3/O\nF19sXZ81q+16OAlDo9/x48edVVVVcSkpKWe1sRg6/H6/qKqqigP2d3bMmDQUoHISiVlQXaBCTn4/\nTP0aeBqhcp/KXfi9qmS2qVpVQOn5EsMbgWAFF1BEJcVU4sNPOvFkkkoNjfyDo7jxIJGYMRNBWwmc\n9sOO2g8xStr8MSnrtuFMT6PSbibWFYepv/Lb7XsVjPLa666D11+H4mLViGcwXMT5wiCL/rOf/ez4\n/PnzS0+dOjUTnS8dSvzAfq/X+53ODhizhsIeo0pfpYSUGVB1AM4UQt6tKtRkcageCUdMx/kSUkLx\nNsjsoTioZuAJziHkkEYmKbjwYsPMEarZwVFceInHjAT8QV52Z8OOnHhahhgJt5vEzX/FlT4OYbch\n8eCzWzEZ8ttXX93z0Etn6rLB5bXZ2VBZqQyFlK3HDQdxvu5k0Xv4t6iqqvLOnj37G90eqBlyxqyh\nMFkg7Vy1TJ2pPIwT/4Sa463bQs2XyLwazhTDtu/DrRuUkdEMHSFzCKSSTSqR2CikggOcJAo7OaRh\nwtdmIFF3w47SiMWLH0d9I8LtQdptLSW3Zkx9e8M31GWNDmuD9qGjb39bvaUbTXWGON+yZUMrqTHG\npMg1Y9jdEyb45maYe7cS/vO5IP1CyFkEMeNUuevpw62y4Ra7asSrLYGiTdBYBUUb1QAj5yhofB2p\nGDkEB9YOSrBG6CiWSHJIIwo7ZgQWVEmlpPthR7OYSD1OXDERSJsV6XLhwkMiUZgQnb/hh1Jz7Upd\nNtTx7ctqa2uHXpwPhr8UuSbsjFmPApSxyFmsvIQWMUCg9BOVxD6yDRy3QlQK1JVB8RYo2a4S4FEp\nsGsNfPqCGpN6y3qVJNcMHu1zCNBWCXYCcSHnXxv4A2VuXQ07MuTJi22VfJl/Eenr/khs+lQS7VGh\n3/A7S/JmZsKNN3bssH7+efW9iy9WZa3tk8LDSZzPwLjH9jmK4eDtaAaEUeVR+NytI0p7Q3DTnLsB\nMi6Fsl3gblTzJZy1yutY8BN1nMkakBi3KumPxS9rIzEUNOOhlsYOMn8WTC1Ndcb861CYgr7X2bCj\n4CFG5+bfzfhl3yWp1oMo/TL0G76R5E1IUBpOCQlqvbhYGYaEBGUAYmKUwbBaVff11Kltj9+8ufWc\nRsJ7OD2Ah6u3oxkQRoVHEaz+6nOrB35Wfu+rlIz+CneDkvKwOODkP5VIoCMBLv8/qpv30xcCUuNe\nmH8fZIyCxteRSD3NnOQssUQSS+scG0PCIxIbWaS2lrdiwhdoxTNjwlBjM4YdXUseqcQwm3Q+owQZ\nyEVAYIiRyQGLvwFXXxP6Db+rJO/mzcoziI5WRqOiQn03J0dpPPUjKTwkDFdvRzMgjAqPIlj9NS5D\nLQ+sU9t7Q8JU+PqvwJGo1GETp0H0OEiYpgzCztXwv89Cc41KfiOg4P0B+ZU0XeDETRNujlCFH0k5\ntTjx4MHXQQk2m1RymYALD3U48eLFjrXNP3xj2FEqKvZoDDvqdPRpZ2/4RpLXbIb9+5WMBqiHf3Gx\naqY7cUJ1WU+frpReCwq6TgoPd4ajt6MJOyPeozDUX2PTO69S6k6Hqb1HYouG0ydbvYYpX4XK/RAz\nUf1kzlH7Fjyk5lM0VoEjTus9DQbtq5RisNOAi918iQlBJinMZGKLEqwROjLKZU/jwzNQ70dRUVBe\nDv/4Bxw9qozAuecqD6GsDM47T23Pz1fzJvLylKprY6P6roFOCmuGGSPeo3DVB2Q22r2UWezqYe7q\nwUtZe4+k7oSS70gLzHw5/IEyPFYHZC+CuHRlMA5vAQT86Sew9QHVlCc7bYLXhINQVUoOrCQQyQ3M\nYQlzyCGtgzdghKJMnXkJ4eC995Q205kzSnqjsVHpMm3frgYVRUXBokXKSIASBZw7V82mGI7zqTWa\nACPeUBjy3t52lXrewFQ6eycvZUbi293Q1iORUlU05S2H6PFw/etK0qO9t3C2BM4UqaFG/Ql3aXqP\nUaXkwYcTN258nM8kskkbeCXY9kgJW7fCvn3wL/+ilo2NKrxUXg7HjqkwVHx86HLSzEylFquTwpph\nzIgPPRmJ6wPrWh/2xrS5vGUdH/Dtw0zSr9RhJy1Q+4VQXgPA2VLVUDflirZei98H1YfAFquMCPQ+\n3KXpH8FVSgcp5xAVzGdql9+RSMqpIzGsNxJonnv9daXL9PnnKjdh9BlYrcprWLJEdWOHKiddvFgZ\nBp0U1gxTRrxHAaq6KW+ZKmE9W6qWnU2bax9mikxV3kHlgbbHGR5JZJIyRHUnWr0WVz246yF5emB2\nRYDehLs0fceoUlrBfK4il+VcQBJRLT0PnVFNQ5t5FP2iffPcn/+sQkrTp6uEdlOTGj40a5Yqe126\ntOtyUp0U1gxjRrxHAaEb50K90YdKfNsiIfVclZROOEett/dIDINzeIsyBMKiBAXj2kmPdxfu0oQH\no0rJwKhS6oxgLae+zqNoQ2Gh8hCCm+d++1s4e1YNHzKZVKipthZ27lTzIBwOXU6qGbGMCkNhYDTO\ndUZnie/UPHDVQlMVOIV62OferAyQlKENUfGHPQ93aYaOjlpOvZtHEZKcHNU81348qVGl5HCo7ZGR\nyrv49FNlJEymjmqxGs0IICyGQghxDfAsYAZekVI+1W6/HfgdMBc4DdwipTwejmv3huDEd7Cx8LmV\nh3DVr9Q+e4wS/vvDEuVlGMJ/wYaovZdhtnce7tKEl95MmzOqpLaxHy/+LudR9IpLL1VjRo3ZEV6v\nCjGNHw9FRa1yHG43vP02zJsHN9zQt2tpNENMvw2FEMIMvAB8HTgB7BRCbJRSHgw6bCVQI6XMFELc\nCvwncEt/r91bukt826KV0XDVtxX+i0pVSe6IoCxoT8NdmvDRlVJsp81xtNVy6moeRa8xZkcsXaqa\n6Y4eVUYjNlZVPYHyLhwOJQCYn9+3cFM/pshpNOEgHB7FfKBYSnkUQAjxB+B6INhQXA88Gvj8DvC8\nEEJIKQd9qlVXnkCLhEcjmK09E/7rLtylCR9tps0FNJwOUgZADmldfteokppAPNB2HkWfCJ4dMXMm\nrFihylyNMaYGRgWUlL2X3w7DFDmNJhyEw1BMBL4MWj8BfKWzY6SUXiHEWSAJqA7D9XtFV55Acg4s\nWgNb7w/M0o5WfRa2WLhuVVsjYXge2pMYHLpTis0kpSUM1T40Fazl5KGYpiBdqD7TfnbE+efDL34B\nDz+s8hMOhzISdXXKoERE9L7TOgxT5DSacBAOQxHK52/vKfTkGIQQdwN3A2RkZPT/zrqgM09g8qVw\n/kr4+y9DC/+FS4BQ0ztceENKhlsw0RQwDBFYOw1NGVVRJ1Fd2tYgUcCwsWQJfPEFrF2rDIXN1mok\netJpHRxigrBMkdNowkE4DMUJYFLQejoE4gEdjzkhhLAAcUCHcT9SyjXAGoB58+YN2bD1gvcBATOW\nqnxGwfvKWEBrH0ZwjiN4TKpmYLBjaZEMDzYWhlKsHUu/QlNhwWSCxx5T3sXGjSrcZBiJrjqtQ4WY\nLr20VfMpGD1FTjMEhMNQ7ASyhBBTUS9stwIr2h2zEbgd+AdwE/DxUOQnQtF+/rX0Q1I2XPucGoc6\n+3bY+YLa7vf2X4BQ0zUSSTFVZJLSJkFtDngH7Q1BPU5ymQDQ49DUgGIyqeqm3nRahwoxbdmiGvrG\njWtrLLRgoGYI6Pd/OVJKL3Af8CFQAKyTUh4QQjwuhDAGp/8WSBJCFAMPAg/397rhorpAzb+uPqTW\nhQkWvaiMBEDaLLUuTOERINR0TTUNfMgBqmnosK+9ZLgLD7lMIJvULkNTRs4C1FS7QXlD6WmndWcz\nLDIy1JuLFgzUDAPC0kchpdwCbGm37T+CPjcDN4fjWuHCeUZ5E92VwQbTWR+G7sjuP8Hd0424KaKC\nKOwIwIalJTkdLBke3EfRXWjKhplCKijkS6bixoqfJtxthhMNCcYMi1AhpnHjYOFC+NvfWj0JLRio\nGQJGVWd2T+mqDNYaCV95AHKXgSO2bSiptwKEmp7RsXvaxi5K2UkJEphEAjbMbZLTkbT9Y3cXmjpC\nNQcpw4EFEwKBoAE3RVSSI1OVYN81gfjjYGKEptrnI1wulRC/+Wb1o/soNEPImKzTMcpgIxLbzb9O\nhMzr4KOfwgd3h54x0RsBQk3PCDVjQpkFQQpRxBNJLBE4sHKQMoqoDHmeUKGp6YxjPLEUUUEMEW3m\na5sRFFOJr+CAUoA9dGiwfuVWjN6IEyc6DzFpwUDNEDMmPQqfG1JyYc4d8I9fq/yCzw0TvwLH/6K8\nBFc9xGbAnjdUiMpsDSS8dUf2gBDcPe3Djw8/cUQyjvgeJ6eDp9k146GEMxyhmgLKKaOO8cQSHB00\nu32YTp/Bt+nvmKuqVKVSaiD+GB09eG/xRihpyxYdYtIMS8aUoWjfA1H8IfjdkLUI9v2P+rHFgjUK\nynfByU+VgXDXQ00x3LoxtO6TJjwEz5g4QBm1NHEOyW2OCe6baB9+MjBj4gS1FHKKGCKIxEYVDVRQ\nBzQDIHx+YnbtZ8Z5t2C1RikF2DVr4Pnn1UkuvrhVr2mgu6FNJq0sqxnWjClDEdwDYbap5HVsOsy4\nESbMhf/3I5A+sEYEqpuscM7X4HQRNFb2LOGt6RvB3dOpxDCLibzPbjz4sNI69CO4byKY4G5s6Fgq\nm0Q0ldRTTzP4JdIkqM+Zgih3Ipp9rQqwUkJWFkydOvjd0FpZVjNMGTM5ivazKISA6derMtjDW1QY\nKiVXSXa4G5SEh7sBij6A04eVgdi1Bl46D169WCXENeHDmDGRGggOjSeOrzGdBprxBnSZjOR0Jqkt\nYSeJpJAKtnKAP1HAVg5wgHI8eJFI/IFi2CSiSPVHkbjzENbKakzOZqIrarHPu1C9xZ8+reZLjB+v\nGuZCdUO73b37pdxudd7efk+jGWaMGY+iqx4IVx3Ul0P9KUAqb8NVp/IRXi/Yo8Ee17nuk2ZgyCYV\ngGIqaQp4EkbfhEH7bmwPPnZRQi1NRGDDhCCRKJKIInPzTsSOQixmKyaTBYvHi3jzLdUZnZOjEshH\nj8LXv972RnrbDa3F/DSjjDFjKDrrgagrg+ItcPyv4GlUhsB1Vv23jgesMdB8Fs4cUSKBwbpPmvDS\nXswvODkdav5EKKHAszhx4sGMQCIxYaaaBqTbxeTNH+FOHw9HToLPC41OFXJKSVH5gf37Yd8+NaUu\nNhbMgZBXb7uhuxLz03kIzQhkzLzeGD0QwbOvPc0qSX3RQ2CxQfQ4tTQ7VBI7JU+9AAqzUjX0OgM6\nUJqwEip8VEhFSw+1GRORgU6KYNp3Y/uRnKERB1bsWEkkKhB8ktTVV5HgthJti1ZylH6pZkbk5rbK\ngEdGqpjkBx+on8JCpQTbXTe0lLB1q1p21mk9cSKsXq3Gov7oR3D33WqehT8M87s1mgFmzHgU0HEW\nhbtRSXd85QcqrATKePhcKpcRkaQ6uBOzlHFJOAeiU1T1lFaKDR99FfNr343tCxLoMCFIJYZUYvDi\nxxkTSbQthia3F4xZFCahYotmM5SWqsl0cXEqmX3smBphWlsL997bdalqQYHqw9iwQZXXhuq0LilR\n57dYoLxcHbNjB3z+uRIS1CEpzTBmTP3rNHogrngELvkpJGUpY/HZb5RB8DZDdJoyBM4a9XKZlK1C\nVRYbRMTD157SRqIzfAFZDF8vhgJ1N2eiq3MZ3dj1OFuqoQCacZNIVKD/Wv3PbHNgyl+kksstF/ep\neRHnnANHjiiPwm6HvDxYtEhVOWVkqHBRqAf5mTPqfJs2gdGH4XYrL8FonjOuc+iQ8jiOH1cd14mJ\n6mftWli/vq1XotEMM8aURwGt8h3OWnCeVv9dHv2TKot1NyhvwlCK9fsBv0psJ2aDJULrOYWiryNK\nAZpw48ZLVLueiJ70S0DbhLcPP9HY8eInjgiANjIe5vw8aK6EwoOBWKJHzYuYPFk9yN1uZSSM3ER8\nvDIkoZLYhYVq/kRjI1itrX0YL7yg/lGdd546l92uvl9Xp4xNXFzHMambNsG0aa1eyYwZPf/jazSD\nwJh7NzbkO6LTVE7CHBibLMwqWe1IgOQ85U3UlSovIzFb9VZkXae7sENhhI4cWHsktQGteYk/U0Q5\nZymkgtM0YMyz6qxfoj1Gwvsa8ljIDG5hHhdyDi68HRRmMZnggrmQmgZRUTAtUz3gKytVCCo7W4Wd\nDh9WD/uuktg5OcowJCYqQxEbq5ZJSfD738N3v6vCVqWl0NQEU6ao2RSWoN/H61X31NQE773X6pWc\nPq28FY1mmDDmPApoO8XOEqGS1BYHIGDc+TDxAqjYB9UHVG+FNUoZCa3n1JHejCgNJjgvkUYsldRT\nQR0SSTQOmnCTx4Qez5AwEt5Al5VSgHo9EkBaKjz8tHrj375dPazLy5VA4I03qkT2smWdJ7EvvRRW\nroRf/lIZFa9XJasvu0ztD65w2rwZfvKTtmNSq6rU9YqLYefOtl5JVJQKSeXoOmzN0DPmPAoDY4qd\nNWAgTFZAQvVB5U2MOxcmXgiX/Ttc+6zKbejcREd6OgcimPbGJYkoUonGi58jVAf6JpQEeF+nR3RW\nKdUBoxv60kuVeuy+fapDe98+tX7RRV1///331T+YpUvV8v2gsrhgMb/rr4dbblGewpkzymDMmgUX\nXqgMhM3W1it5+WVtJDTDhjH56DOm2K34ADKvhbTZKqQUPV4lt6sOqeonayTET9bhpq4IrjwKpqvQ\nkcpLeDAF8hdGwtmKiRgcZJHGOOIooLzL8FXYKCxUhuKnP1VhqPR0tfzpT9X2wk7a8P1+Fa7asgWe\nflp5DVlZoUtejTGpTz0Fc+eq/EVKCtx/P/zwhyrXYXSHr1wJl+hmHc3wYcyEnnzutmqvi15U23Ou\nhzPF4POoqqaoFKjcB40VcNGD2kh0R3dzIILf6I2kdxEVlFFHFQ0kEUUMDk7TiBUrEn9AZFwM3hjT\nnBx8a15E3P8AotmFMHSf4uJg1arO3+xNJnjxxdb1WbParoc6/sYbVUVVcNPdV7/a6pWsW6e8kvvu\nC+/vqNH0g1FvKNorxhqNd9n5rTOwJ14IZ0vgzGHw+wLlsA6Y9vXuz6/pmdQGtM1LjCeWLznDEZzY\nMdMcyCekE9/iaXRW+dTZXO2+0FKxdWkiGSuvJeuX/43Z5cTq9SPuu29g3uyDxf8Mr+S552DmTLj9\ndpWj8Pt1b4Vm2DDqDUWwYqwxke5AQE1h0gJlPKwOVQ2VmKnKY812qD+pwlAWx9De/0igO6kN6JiX\nkIHvmQAnHvxInHgopw4RyFv4kCHDV8Zc7XjmkUL/6pWDjdek9/+CEIKSpZcxZd3HWAfjzb63XolG\nMwSM6leW9oqxoJax6ao722Jv1X8CMJlVXsLv1TOwe0L7BruuEsjBSW8ZkNpQsyLsmBDE4sCKGTde\nqqgPSIK3VYp14qYpME/bmKvdhBsnfVNnlQTJkfuhKXsK+7a8TMnTP+Mfm5/Dn5WpJTY0Gka5R9GV\nYqzPpQyEnoHde/rSYBec9DaqmQTQjAcLJqJxYMZDIy78SE7TyBVkt4SvupqrbcXMzZxPNI7Q5bCd\n4Ee2VmyZ4PCLjwPqP4raWZk0v7iYSEyqEU8L+WnGMKPaUHSmGOt1tXoM7fWfzHY9A7s7+qLNFJz0\njsaBQODBhzfQTQ3gwIoFE1NIwombKSS1GB5jrvY29uPFjw0LbrzYMZHHBD6lpNdd4SZEG60og5aK\nLc5KPbAAABNQSURBVL8JNm/ScuGaMc+oNhRG4ro7j0HPwO45fW2wg7ZJ7wisVFKHH0kTrhbPYiIJ\nmDBhwdwhN2HM1f47R/AGJAAnk0oV9b0WFATVc9e+YsuDj1qamMkEzJu3di4XPtDT7jSaYcSofy3K\nzldGobkWzpaqZSiPwZiBrY1E1/Slwc4gWG5jNukkEU0kViS0NNb5Q0yxM5BIPudLmvFiw0IzXg5y\nimgcvRYUNMgmlVwm4MLNl5zhMJU04+GIu4zaze8g0yeGZ9qdRjOCGdUeBbQqxmqPITy0l/Y26Kk2\nk0EpNaSTSAZQRQNnceJHUk0jVwblJoIppAIvPnIZTxwRnKGRIiqopalN9VNPBQWh1XipxHwZacRh\nw4yoP02t+yxeewrJbf4AvZx2p9GMAka9R2GgPYbw0F7aG0LPsu6KYK/EhIk0YskklWmkMIE4Jgfl\nJgx8+CmmiukBIwGQQCTxRHKGxpbZ2Mb99MZo+fBzlGoSiMJGQDk2JgazzUGNq6bNuXs97U6jGQWM\nGUPhc0PTabXU9I/WcI2no0JrDwgl+2FqkfHomJsAZVy8+JCBmXWgvIEUonHjbQl59dZoGeduH06T\nNhu1+VfgOFGBz+UMHOjqftqdRjMK6VfoSQiRCKwFpgDHgWVSypoQx/mAfYHVUinlN/pz3d7QVWe2\nFvnrGz1psOuK3sh+gMpNlHCaMs4GKpUEiUSRRBRxRNCMBy8+6vB22hXeFZ2F0yryL6MZDxO3HABX\ntfIkli3retqdRjMK6W+O4mHgIynlU0KIhwPrPwlxnFNKOaef1+qW9npO0HVndo4uXOkXwdLevaUz\n2Y8sUjgcqJ4ywk9FVHKIUyQTxRkaMWGmmgZ8+LFhZh5T+my0jN8jpOEyuZi0eBmmqxO67qPQfRaa\nUU5/DcX1wBWBz68DfyG0oRhQOvMapn29687szKt1zmKo6MwrqaK+jTxH23JcgRkTZ2hEtmvKE4g+\nGy3oRq/KJkInrv1+1WOh+yw0o5z+Goo0KWU5gJSyXAjRmb/vEEJ8BniBp6SU6/t53TZ05jW46rru\nzHbVqwS3ZugwvBInbiS0keeIwh7QgWoNCSURTSJRePHThKtNU15/6FM4bfNm3WehGRN0ayiEEH8C\nxoXY9bNeXCdDSlkmhDgH+FgIsU9KeSTEte4G7gbIyMjo0Ym70nMq2a5GnHbVma0ZerqT50gjtk3+\nwJhfEaopr790GU4LDjGBMhSGkYC2fRZXX63DUJpRQ7f/lUkpF3a2TwhRIYQYH/AmxkPoKTNSyrLA\n8qgQ4i/AeUAHQyGlXAOsAZg3b16PRpt1pefk98DUr0HxNq3lNJzpXJ7DzLXk4cTT48S3QTilyEOG\nmC69tLVUNhjdZ6EZhfQ3kLoRuD3w+XZgQ/sDhBAJQgh74HMycDFwsJ/XbSFYzykYw2vIXdqxMzv3\nZlXxJPs2ZVMTZiQSN17mkI4HH07cuPFxHulkkNinclxDiryaht7fUEMDHD6sltAaYkpIgIwMtdyy\nRc27drX7h6f7LDSjkP767U8B64QQK4FS4GYAIcQ84B4p5XeAGcBLQgg/yjA9JaUMm6HoTs/J4ujY\nmX2mGP6wBBLOgZQZ4boTTVcY8h6hYv/GQ92BFYDpjOMg5RyigvlM7VX+oLNchwAiukt2e71qXOm7\n76rPFouadX36dMcQU0aGmn1dUgKTJ7d6EidOqBJaHXbSjCL6ZSiklKeBr4XY/hnwncDnHcCs/lyn\nO3qiAGu2qWmTrnoo2gSNVVC0EaJS1faIxIG8w7FLV5LkzXjaPNQjsHEj55FCNLNJ5zNKAnLkKnTU\nXTlud7mOW5jX9c0+9hj8/veQmgoOBzQ3w5tvKg9iyZK2x9rtMG4cLFwIf/tbqyeh+yw0o5BRofXU\nEz2n6kJYu0RNrTNb1WzsXWvg0xfAFgW3rFdT7jThpTNJ8jqa+ZRjbR7qjbh4jy9aHur5vXy/6C7X\nkUw0J4O/UH1axR+FUGGmd99tNRKgluPHQ2Fh2yQ2KMPgcMDNN6sf3UehGcWMqmLvrvScknNg0Rrl\nOZisYI9Vy4gkWPyyNhIDQVeS5JXUcR0zicAa0GVSywhsLOZckonu0zUNKfJQuY62N+eHokI4dEit\nl5ercJOj3exbhwMiIqC4uDUf0V7Kw5iBrY2EZpQyqgxFd0y+FM5fCZ5GcJ5Wy/NXQsYlQ31no5Pu\nJMnTiO3ZQ72XFFABqFyHAA4F1gGob1BGwusFtxc2blQ5CLtd5SSam9uerLlZhZ6++U2orYXSUrXU\nISbNGGJUhJ56Q8H7gIAZS1UCvOB9mH/fUN/V6KQnkuTBD/XgBHZfkUiSieJa8kglpm2uo7AIfvZ/\n4OwZcLnBZoE1a+CFFyAqCq68ErZta5ujqKxURmLZMpWn0CEmzRhkTHkU0g9J2fDNLXDV07BiMyRl\nqe2a8NOdJLkJQTJRrGA+V5HLci4giaiWIUZqRoS7RwOIDASCfGaRGphPkUYs+cxSCfGcHLjn/2/v\n3mPkKss4jn+fmdndll4wpVt6WRBCt2tbWsVU1Ij/KGihSAWjkSAhsYma2AQTE9GQSAwxmhCMIZI0\nBY2JooZEy21buYgGE7ygiKXbst2CCsuSbi+BLrtltjPz+Md7pp22s7PbnZ13hp7fp9mcnpmTfc50\nt+c57+W8z9cgkywlns1BW1voNrrvPrjnnpAURkZgaChsb7oJ7rgjHK8uJkmpVLUoLAPXbjmxf/6a\nk/elPtWmwE60htIlLOQox1jP6uPHli/qjtPP/qozpep+eG7V++Dcc2H/odD1NDoKmzfDFUn/4513\nwm23hTGLJUtg7vTGSkTOJqlKFNIYtabAnvoMRDtZXuYgv2f3hElgoplSMHkd7CkZHQnbRZ3QPwzb\ntoVkUTZ3LnR31x9H5CyRqq4naYzyhX0WbcxnNrNoYxev8yJDx7uNys9AvMzB047dzRB7k9Vfas2U\nmmod7JpKDm3tYUyipzs8dd3dHZbpEJGqlCikLqde2B3nTcY4yNv8mQEe40V28joFilNKApPNlCpX\nspu2jMHi8yGbfP81a2DLFi0LLlKDup6kLqde2A8xykHepo0s73CMId7kVQ6xk0HWsowiRXKcvJBe\njgxjFeMbk82UEpG4dBsldam8sJdwDjNKOzne4Rh5inSQYw6zGCXPAMOMJKmlUmUSmGym1JlWrxOR\n+ul/Xco4zgDDx6eg1qvywp6ngCd/Rskzh3YyZMgkg9TlxfneYqxmEpjOarEi0jhqx6dMeaXWcqnR\nmVC+gO9l//GWxSzamJMs4FfCyWB0kGMuHVxMJ69x+PSSo4lpVZur1/g4HDkCzz4bqtNZ/VXzRM4W\nShQpUdfy25OovLD3JTOYDvF20mZwxjmW1L92cmRZzRJWs2TSJDDZarEzorIo0fAw/OEP8IMfJA/m\nqcEtAkoUqTCV5benuwhfpSwZ1rCMDtr4B//lMGO0k6WTeZzL7NOq0jU8CUxFby/84hewdGl4Ejuf\nh/vvDw/lXX01LND68yJKFCkwleW3Z0q5dXEJC9nNG7zKYUo4eQqtN85Q8FB/4umn4dgxyGbD8xX/\n+Q989auhWNHDD4elP0RSTIkiJcrLbz/LKxQpUcT5EO+te6XWieTIspYuVrO0ahfTjNa0nq5iAc45\nJ4xJ7NgRVpRtbw/jFZkM3H23koQImvWUKjWX326Q8jjDROVPp1XTeqZkcyExLF4MH/xgaFUcPRoS\nxcqVcNVVzTs3kRaiRJES5eW3J1qpNZajjDOWDKaXB9XHGOco41HPA4CchZoSg4PQ1xde6+6GYjGM\nV2iVWBFAXU+pUV5+u6y8UmtMsQbVz8iGDWHm0/PPh1bF4sVw882wa1d4XTOfRJQoJJ6Yg+pTlsnA\nxo1hhpOKEolUpdsliWrKNa1jU1EikQkpUUh0zRhUF5HpU9eTRFWzpnWzpsmKSE2pThTFcciPQMc8\nyKrHIYpWGFQXkTOTykThJdjbCwO9IVlk26F7A6zYEOpqi4jICalMFHt7oe9BmN8FuQ4o5MM+QM9n\nmntuIiKtJnX3z8Xx0JIoJwkI2/ldMLA9vC8iIifUlSjM7PNm1mdmJTNbV+O49WbWb2b7zOzb9cSs\nV34kJIPcydU4yXVAMR/eFxGRE+ptUewCbgCemegAM8sC9wJXA6uAG81sVZ1xp608cF3In/x6IQ/Z\njvB+2jhOP/sZJU/xlDKlIiJ1JQp33+Pu/ZMcdjmwz91fcfdx4DfAxnri1qM8cH1k8ESyKOTDfvc1\n6Zv95DjP8T8e4gV6eZEd9NHP/uhrQIlI64oxmL0MeK1ifxD4cIS4E1qxIWwHtofupmwHrP7CidfT\n4ijjDHCAf/EqBUrkKTCP2exkEIAezm/yGYpIK5g0UZjZU8DiKm/d7u4PTyFGtaeoqt6umtlXgK8A\nXHjhhVP41tNjmTC7afmn0/scRXmBviO8QwajjSxv8Bav8xZZjAzGcjobX6taRFrepInC3a+sM8Yg\ncEHFfhcwNEGsrcBWgHXr1jW87yPbDuec1+gorWkhc7mKlTzEvzFC3YgiJdowlrMIA/IUWqNcqYg0\nVYzbxeeAbjO72MzagS8Cj0SIK5O4hE4WMpciJQoUKeIs5lzm0EGWDB3pfMxGRE5R7/TY681sEPgo\n0GtmjyevLzWz7QDuXgA2A48De4AH3b2vvtOWmZAlwzgFHGcBczDgACOMcJTlLFK3k4gAdQ5mu/s2\nYFuV14eAayr2twPb64klM89xungPl3EhBxlhHrM4xCgrWcIKFjX79ESkRahvIcUM41rWAlBMZj11\nkFNLQkROokQhQOiG0sC1iFSjW0cREalJiUJERGpSohARkZqUKKT1ucOOHWErItEpUUjr27MHbr0V\nXnqp2Wcikkqa9SSt6/Dh0Ip49FE4cAAeeQQWLQIzWLCg2WcnkhpKFNKa+vvhs5+F0VFoa4POTti6\nFe69F+bMgYcegp6eZp+lSCqo60laU09PSAwLFoREMX9+2J53Htx3n5KESERKFNK6Pv5x2LQptCoO\nHQrbTZvgiiuafWYiqaJEITUVKTHGePNKpG7bFsYkPve5sN122tJiItJgGqOQqhxnL8MMMEyJEhky\ndLOIFSzCqtaiaoBSCVasgHvugUsvhVtuCWMUpRJkdI8jEosShVS1l2F2M8Q8ZpMjQ4ESu5N6U9FK\npGYysGXLif01a07eF5EodFsmpylSYoDh40kCIEeGecxmH8PN64YSkaZQi+JdYvWHzmE1l0WJladA\nidLxJFGWI8NYshz5u3Wl2WUXXQY/m0qpdxEpU4tCTtNBjkzS3VSpQEklUkVSSIlCTpNNBq5HOHo8\nWRQoqUSqSErp1lCqKpdC3ccwY0lLYhVLVSJVJIWUKKQqw+jhfJbTqRKpIimnRCE1qUSqiOgWUURE\nalKiEBGRmpQoRESkJiUKERGpSYlCRERqUqIQEZGalChERKQmc/dmn0NVZnYA+F8DvvVC4GADvm+r\nx057fH325pko/nvdvTP2yciZa9lE0Shm9g93X5e22GmPr8+ezs8uM0NdTyIiUpMShYiI1JTGRLE1\npbHTHl+fPb3xpU6pG6MQEZEzk8YWhYiInIFUJgozu9PMdprZC2b2hJktjRj7LjN7KYm/zczeEyt2\nEv/zZtZnZiUzizITxczWm1m/me0zs2/HiFkR+2dmNmxmu2LGTWJfYGZ/NLM9yb/5rZHjzzKzv5vZ\nv5P434sZPzmHrJn9y8weix1bZk4qEwVwl7uvdfcPAI8B340Y+0ngUndfC+wFvhMxNsAu4AbgmRjB\nzCwL3AtcDawCbjSzVTFiJ34OrI8Yr1IB+Ka7rwQ+Anw98mfPA59w9/cDHwDWm9lHIsYHuBXYEzmm\nzLBUJgp3P1KxOweINlDj7k+4eyHZ/SvQFSt2En+Pu/dHDHk5sM/dX3H3ceA3wMZYwd39GeBwrHin\nxH7D3Z9P/j5CuGAuixjf3f3tZLct+Yr2u25mXcAG4P5YMaUxUpkoAMzs+2b2GnATcVsUlb4M7GhS\n7FiWAa9V7A8S8WLZKszsIuAy4G+R42bN7AVgGHjS3WPG/zHwLaAUMaY0wFmbKMzsKTPbVeVrI4C7\n3+7uFwAPAJtjxk6OuZ3QNfHATMaeavyIrMprqZpqZ2Zzgd8C3zilNdtw7l5Muli7gMvN7NIYcc3s\nWmDY3f8ZI5401llbM9vdr5ziob8CeoE7YsU2s1uAa4FPegPmJ5/BZ49hELigYr8LGGrSuURnZm2E\nJPGAu/+uWefh7m+a2Z8I4zUxBvY/BlxnZtcAs4D5ZvZLd/9ShNgyw87aFkUtZtZdsXsd8FLE2OuB\n24Dr3H0sVtwmeg7oNrOLzawd+CLwSJPPKQozM+CnwB53/1ET4neWZ9WZ2WzgSiL9rrv7d9y9y90v\nIvzMn1aSePdKZaIAfph0xewEPkWYmRHLT4B5wJPJ9NwtEWNjZteb2SDwUaDXzB5vZLxk4H4z8Dhh\nMPdBd+9rZMxKZvZr4C9Aj5kNmtmmWLEJd9U3A59IftYvJHfYsSwB/pj8nj9HGKPQNFU5Y3oyW0RE\nakpri0JERKZIiUJERGpSohARkZqUKEREpCYlChERqUmJQkREalKiEBGRmpQoRESkpv8Du/j0KPX/\nLt4AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x21caeb747f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"plotBoundary(DecisionTreeClassifier(), dataset='iris',split=0.7)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x21caeca02e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"plotBoundary(BoostClassifier(DecisionTreeClassifier(), T=10), dataset='iris',split=0.7)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bonus: Visualize faces classified using boosted decision trees\n",
"\n",
"Note that this part of the assignment is completely voluntary! First, let's check how a boosted decision tree classifier performs on the olivetti data. Note that we need to reduce the dimension a bit using PCA, as the original dimension of the image vectors is `64 x 64 = 4096` elements."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"testClassifier(BayesClassifier(), dataset='olivetti',split=0.7, dim=20)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"testClassifier(BoostClassifier(DecisionTreeClassifier(), T=10), dataset='olivetti',split=0.7, dim=20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You should get an accuracy around 70%. If you wish, you can compare this with using pure decision trees or a boosted bayes classifier. Not too bad, now let's try and classify a face as belonging to one of 40 persons!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"X,y,pcadim = fetchDataset('olivetti') # fetch the olivetti data\n",
"xTr,yTr,xTe,yTe,trIdx,teIdx = trteSplitEven(X,y,0.7) # split into training and testing\n",
"pca = decomposition.PCA(n_components=20) # use PCA to reduce the dimension to 20\n",
"pca.fit(xTr) # use training data to fit the transform\n",
"xTrpca = pca.transform(xTr) # apply on training data\n",
"xTepca = pca.transform(xTe) # apply on test data\n",
"# use our pre-defined decision tree classifier together with the implemented\n",
"# boosting to classify data points in the training data\n",
"classifier = BoostClassifier(DecisionTreeClassifier(), T=10).trainClassifier(xTrpca, yTr)\n",
"yPr = classifier.classify(xTepca)\n",
"# choose a test point to visualize\n",
"testind = random.randint(0, xTe.shape[0]-1)\n",
"# visualize the test point together with the training points used to train\n",
"# the class that the test point was classified to belong to\n",
"visualizeOlivettiVectors(xTr[yTr == yPr[testind],:], xTe[testind,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
}
],
"metadata": {
"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.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment