{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPython 3.5.5\n",
"IPython 6.2.1\n",
"\n",
"numpy 1.14.1\n",
"scipy 1.0.0\n",
"sklearn 0.19.1\n",
"pandas 0.22.0\n",
"matplotlib 2.2.2\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -v -p numpy,scipy,sklearn,pandas,matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**6장 – 결정 트리**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_이 노트북은 6장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 설정"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"파이썬 2와 3을 모두 지원합니다. 공통 모듈을 임포트하고 맷플롯립 그림이 노트북 안에 포함되도록 설정하고 생성한 그림을 저장하기 위한 함수를 준비합니다:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# 파이썬 2와 파이썬 3 지원\n",
"from __future__ import division, print_function, unicode_literals\n",
"\n",
"# 공통\n",
"import numpy as np\n",
"import os\n",
"\n",
"# 일관된 출력을 위해 유사난수 초기화\n",
"np.random.seed(42)\n",
"\n",
"# 맷플롯립 설정\n",
"%matplotlib inline\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['axes.labelsize'] = 14\n",
"plt.rcParams['xtick.labelsize'] = 12\n",
"plt.rcParams['ytick.labelsize'] = 12\n",
"\n",
"# 한글출력\n",
"matplotlib.rc('font', family='NanumBarunGothic')\n",
"matplotlib.rcParams['axes.unicode_minus'] = False\n",
"\n",
"# 그림을 저장할 폴드\n",
"PROJECT_ROOT_DIR = \".\"\n",
"CHAPTER_ID = \"decision_trees\"\n",
"\n",
"def image_path(fig_id):\n",
" return os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID, fig_id)\n",
"\n",
"def save_fig(fig_id, tight_layout=True):\n",
" if tight_layout:\n",
" plt.tight_layout()\n",
" plt.savefig(image_path(fig_id) + \".png\", format='png', dpi=300)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 훈련과 시각화"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
" splitter='best')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.datasets import load_iris\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"iris = load_iris()\n",
"X = iris.data[:, 2:] # petal length and width\n",
"y = iris.target\n",
"\n",
"tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n",
"tree_clf.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.tree import export_graphviz\n",
"\n",
"export_graphviz(\n",
" tree_clf,\n",
" out_file=image_path(\"iris_tree.dot\"),\n",
" feature_names=[\"꽃잎 길이 (cm)\", \"꽃잎 너비 (cm)\"],\n",
" class_names=iris.target_names,\n",
" rounded=True,\n",
" filled=True\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import graphviz\n",
"with open(\"images/decision_trees/iris_tree.dot\") as f:\n",
" dot_graph = f.read()\n",
"dot = graphviz.Source(dot_graph)\n",
"dot.format = 'png'\n",
"dot.render(filename='iris_tree', directory='images/decision_trees', cleanup=True)\n",
"dot"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.colors import ListedColormap\n",
"\n",
"def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):\n",
" x1s = np.linspace(axes[0], axes[1], 100)\n",
" x2s = np.linspace(axes[2], axes[3], 100)\n",
" x1, x2 = np.meshgrid(x1s, x2s)\n",
" X_new = np.c_[x1.ravel(), x2.ravel()]\n",
" y_pred = clf.predict(X_new).reshape(x1.shape)\n",
" custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n",
" plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n",
" if not iris:\n",
" custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
" plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n",
" if plot_training:\n",
" plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", label=\"Iris-Setosa\")\n",
" plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", label=\"Iris-Versicolor\")\n",
" plt.plot(X[:, 0][y==2], X[:, 1][y==2], \"g^\", label=\"Iris-Virginica\")\n",
" plt.axis(axes)\n",
" if iris:\n",
" plt.xlabel(\"꽃잎 길이\", fontsize=14)\n",
" plt.ylabel(\"꽃잎 너비\", fontsize=14)\n",
" else:\n",
" plt.xlabel(r\"$x_1$\", fontsize=18)\n",
" plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n",
" if legend:\n",
" plt.legend(loc=\"lower right\", fontsize=14)\n",
"\n",
"plt.figure(figsize=(8, 4))\n",
"plot_decision_boundary(tree_clf, X, y)\n",
"plt.plot([2.45, 2.45], [0, 3], \"k-\", linewidth=2)\n",
"plt.plot([2.45, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
"plt.plot([4.95, 4.95], [0, 1.75], \"k:\", linewidth=2)\n",
"plt.plot([4.85, 4.85], [1.75, 3], \"k:\", linewidth=2)\n",
"plt.text(1.40, 1.0, \"깊이=0\", fontsize=15)\n",
"plt.text(3.2, 1.80, \"깊이=1\", fontsize=13)\n",
"plt.text(4.05, 0.5, \"(깊이=2)\", fontsize=11)\n",
"\n",
"save_fig(\"decision_tree_decision_boundaries_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 클래스와 클래스 확률을 예측하기"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0. , 0.90740741, 0.09259259]])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tree_clf.predict_proba([[5, 1.5]])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tree_clf.predict([[5, 1.5]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 훈련 세트에 민감함"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[4.8, 1.8]])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X[(X[:, 1]==X[:, 1][y==1].max()) & (y==1)] # 가장 너비가 큰 Iris-Versicolor"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False, random_state=40,\n",
" splitter='best')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"not_widest_versicolor = (X[:, 1]!=1.8) | (y==2)\n",
"X_tweaked = X[not_widest_versicolor]\n",
"y_tweaked = y[not_widest_versicolor]\n",
"\n",
"tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n",
"tree_clf_tweaked.fit(X_tweaked, y_tweaked)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 4))\n",
"plot_decision_boundary(tree_clf_tweaked, X_tweaked, y_tweaked, legend=False)\n",
"plt.plot([0, 7.5], [0.8, 0.8], \"k-\", linewidth=2)\n",
"plt.plot([0, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
"plt.text(1.0, 0.9, \"깊이=0\", fontsize=15)\n",
"plt.text(1.0, 1.80, \"깊이=1\", fontsize=13)\n",
"\n",
"save_fig(\"decision_tree_instability_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_moons\n",
"Xm, ym = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
"\n",
"deep_tree_clf1 = DecisionTreeClassifier(random_state=42)\n",
"deep_tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)\n",
"deep_tree_clf1.fit(Xm, ym)\n",
"deep_tree_clf2.fit(Xm, ym)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
"plt.title(\"규제 없음\", fontsize=16)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
"plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n",
"\n",
"save_fig(\"min_samples_leaf_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"angle = np.pi / 180 * 20\n",
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
"Xr = X.dot(rotation_matrix)\n",
"\n",
"tree_clf_r = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_r.fit(Xr, y)\n",
"\n",
"plt.figure(figsize=(8, 3))\n",
"plot_decision_boundary(tree_clf_r, Xr, y, axes=[0.5, 7.5, -1.0, 1], iris=False)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.random.seed(6)\n",
"Xs = np.random.rand(100, 2) - 0.5\n",
"ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n",
"\n",
"angle = np.pi / 4\n",
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
"Xsr = Xs.dot(rotation_matrix)\n",
"\n",
"tree_clf_s = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_s.fit(Xs, ys)\n",
"tree_clf_sr = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_sr.fit(Xsr, ys)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"\n",
"save_fig(\"sensitivity_to_rotation_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 회귀 트리"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"# 2차식으로 만든 데이터셋 + 잡음\n",
"np.random.seed(42)\n",
"m = 200\n",
"X = np.random.rand(m, 1)\n",
"y = 4 * (X - 0.5) ** 2\n",
"y = y + np.random.randn(m, 1) / 10"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
" max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
" min_impurity_split=None, min_samples_leaf=1,\n",
" min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
" presort=False, random_state=42, splitter='best')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
"tree_reg.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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hpG5e9VlEImemY0A/wm8AngN8OfAzcAN7n5jlWUTEZFyKQNk2GgAIVIQM1sH7ALuAX4PuNXdP1xtqUREJARlgAwTXcIkUhB33w3sBy4G/gn4SO8yZna1mT1kZs+Z2XTgIoqISEmUATJMRqsugEhTmNm7gDe3fp31/qf3DgN/BbwFmAxVNhERKZcyQIaJBhAiBTCz3we+CHwVeB640sxudvcfdC/n7jtby68OX0oRESmDMkCGjS5hEsnJzH4T2AncD/wp8AngBWBLleUSEZHyKQNkGGkAIZKDmb0B+DfgAPBH7j7n7geB24A/NLPfrrSAIiJSGmWADCsNIEQyap2C/iZwBHi7u/+i6883AkeBv66ibCIiUi5lgAwz3QMhkpG7/5DkwUH9/nYYWB62RCIiEooyQIaZBhAiAZnZKMl+NwosM7OXAi+4+7FqSyYiImVTBkhTaAAhEtYngBu6fj8K7AHWVlIaEREJSRkgjaAnUYuIiIiISGq6iVpERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFL7PxXpCt5us4xpAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n",
" x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n",
" y_pred = tree_reg.predict(x1)\n",
" plt.axis(axes)\n",
" plt.xlabel(\"$x_1$\", fontsize=18)\n",
" if ylabel:\n",
" plt.ylabel(ylabel, fontsize=18, rotation=0)\n",
" plt.plot(X, y, \"b.\")\n",
" plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_regression_predictions(tree_reg1, X, y)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"plt.text(0.21, 0.65, \"깊이=0\", fontsize=15)\n",
"plt.text(0.01, 0.2, \"깊이=1\", fontsize=13)\n",
"plt.text(0.65, 0.8, \"깊이=1\", fontsize=13)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"max_depth=2\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"for split in (0.0458, 0.1298, 0.2873, 0.9040):\n",
" plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n",
"plt.text(0.3, 0.5, \"깊이=2\", fontsize=13)\n",
"plt.title(\"max_depth=3\", fontsize=14)\n",
"\n",
"save_fig(\"tree_regression_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"export_graphviz(\n",
" tree_reg1,\n",
" out_file=image_path(\"regression_tree.dot\"),\n",
" feature_names=[\"x1\"],\n",
" rounded=True,\n",
" filled=True\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import graphviz\n",
"with open(\"images/decision_trees/regression_tree.dot\") as f:\n",
" dot_graph = f.read()\n",
"dot = graphviz.Source(dot_graph)\n",
"dot.format = 'png'\n",
"dot.render(filename='regression_tree', directory='images/decision_trees', cleanup=True)\n",
"dot"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAEYCAYAAADMNRC5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXmcU9Xd/99nMpkMzMIyjIAgIqgggvtCqsJQfbS1tbVS+9QuaKsO1mprF1F+1taWWtxq9dHWMn1wobWtPgVr61KtyIBg3LdRKCKLLLLv2ySZ5Pz+OPcmN+sksySZ5Pt+vfK6ufee3JzJJPecz/luSmuNIAiCIAiCIAhCJpTluwOCIAiCIAiCIPQcREAIgiAIgiAIgpAxIiAEQRAEQRAEQcgYERCCIAiCIAiCIGSMCAhBEARBEARBEDJGBIQgCIIgCIIgCBkjAkIQOohSSlnb4UoprZSqVErdr5R6OEX7CqXUL5RSq5RSu5RS85RShznO29cZEPe6o5RSDyil1iqlAkqpA0qp96xrVXfrHykIgiAUPdb487xS6hOl1I/z3R+h8BEBIZQ0Sqlt1qQ91ePbjraPKKXa7AewPsu3+xVwIfBl4CjgFeBfSilPmv4dCrwO9AW+BAwAhgM3ApOBf2bZB0EQhIJCKfVdpdTH6e6FPQ2l1GVKqU096Pp3AzuAw6znmfRBKaWuscbE25KcH66UekYptUUptV4pdZtSytWFfRbyiAgIodQZAvRK8fgPsM/R9gqgGugNXA+syvK9vg7cpLV+S2u9VWt9B7Af+IJSqi9Qm+Q1Z1nv902t9Zta6z1a6y1a62eAm4AGpVRVlv0QBEEoJD4B3gPa8t2REmYsMF9rHdJahzN8zT+AzwLL4k8opcqBp4HlwGDgZOAC4Kdd010h34iAEEoarbVfa92a7AH0AzY72gatcwHgBIzAyAYFhOK7ADwO7ATeTfIaH+AHfm25MnmUUjVKqU8B0wCf1np/lv0QBEEoGLTWT2itL9Bax98fhdxRAQSzfM21WuvPAduTnDsXOByzaBbSWm8GZgDXWOJC6OGIgBCEJCilKoFDgLVJzilgAvCCZY7N1CT7GPALpdQxlgi4BjgN+LTWWgFHxL9Aa70WOBM4FFiIsVhsBR7CuECdn+3fJgiC0J1Y7p9fU0q9armJvqKUGmId+9ByafmTUqqX1f4KpdSauNdPVUo9qZTabLk3fSeD9z1GKbXA8uPfpJT6mx1nppS6SCm1UCm1wTr377gYtGz7fItS6mWl1LVWfNoWpdTTSqkRKfo2QCk127rWBqXU60qpL1jnqpVSf7SOb1FKLVZKTcjyM093/V5KqZlKqWXW375eKXWrde4kyxXqMOBe6/zxlmvSpiSP/7bfU2u9JmlnDOOBt7XWBxzHlgD9MS68Qg9HVKAgJGckECCJgADOxsQhvIixGhyb4TVvwKzAzMfEMiwHpmitF8Q3tATMIGt3N8ZlKhl9LfensCU2BEEQCoFpwJe11h8ppWYB/wd8DJyIWe1uAb4JNKV4/c+A/9Zav6SUOht4Tin1L6316jTv+UtgI/Bp6z2+jLmPrsO46Pw/zMKLAh4FfgJM7USfTwVewkyIy4E/AU8opU50dkop5cbEq90GXKm1DiulTgUWKKVOxqzWn0l03PkUMDTN3xlDBtffjVnoOkdrvUEpNRT4QCn1lNbaBwyyBNwtWuuHrcu+C9yfaR+SMBCHBd9is+NcgtuT0LMQASGUJEqpZmBiBk3bjMGBY7TWtsvSjdb2Yq31WKXUcCDdoAaA5RZ1PanFwH5gLsZlaRzGypApezCDjiAIQiFws9b6I+v5k8C3gc9YLpf7lVJLgOPSvH6m1volAK31fKXUHsxEPt299lVMrNokrfWLGJGAdY1fKJPh7myMa00tZiGnM33eCEy3Ygb8SqnrgRXAqLjrTsbEAMwCZlljCkAYOAV4C6gDvgr8RWu9OM3fmIy019daP6qUugE4Ril1uvX3twJHYtxku4MyjIuuk7DjnNDDEQEhlCrnEr2JXQNcTFRQ9AE2AccDH1rH/ABKqcsxN/wrgTuVUk9n86aWtaBca73NWjUapbV+3zr9ReA6rfVeTOalsR35wwRBEAqA9x3PDwCfaK33OI4dxCSlyOT19jWSJZqIoLW+Qyn1H+CnSqnfAfdgrAUu4BFM7NpTGKvCShLvsdn2eUVcwPEGaxsvTEYAH2mtx6Tqu1LqLIyV+pdKqT9hBNTulH9sFtdXSp0A/BUjbl7FZBDcQhr3W8vF9idJTn1fa/1YBn3abvXLSX9ruy2D1wsFjggIoSSxAqEBUCYlq7YsBLb7EEDAPmYdPxO4F7hGa/2wZVb/NzAli7f+McY0fRkmA1QLxpwOJs1rC470sEqpzwDPtnPNwVrrbksXKAiC0AHiV5/j97N9fWYv0vofwD+UUqMxYqES2IVZIBrpuM/fSKKAyLbP8YLmaGu7BuOOZLMBGKGUqtNaJws4Rmv9LvA1pVR/4GGM4LmwnffP9Pr3AM9orX9oH7D+/pRore+ncy5MbwBXKKXKtdZ2dq3TMJkNl3fiukKBIGYkQcgApdQhmMHoToeP6LcxQWHuLC/3daXUPuADx/X7YVZnhiRpv53kaWaPzPJ9BUEQihYrUNiexG/AuIX2ATyY+3R/q90k4IdJL5IdJyulLlWGfsCdwNNa63Vx7f6Giad7SClVb/VhoBWIXaaU+p5S6kxlknLsxsQK9MmiH2mvj/n765RSLmUKnt5G948fT2HEwi+VUm6l1GDgVuB/tdb+bn5vIQeIgBCEDNBabwG8WuufO44d1Fp/CxOglw2PaK2riQ2+/iZGKHw/xfsnSzMrN2FBEIQo+zBBzFswabZfwUzq5wAvAC1WxqGrgd91wfu1YIKf12BiMzYD34hvZMVQnAPsBd5WSm0GFmNciDRmDLkdUw9jPcZKfUWmncjg+tdh4uq2AksxY82b2f6x2WCNUecDp2Pcpd4FFmAC1YUiQGndISuhIBQNSqnrgK9qrcdb+30xdRmcgdPpXj8cM3j0Au4CqrXWl6Vo+0tMUZ2pmEC2jzDBz89ggvt+j0nXOk1rrS0XpkeJNYfbHIqxYogLkyAIQg5RSt2CCbAen+++CEI+EAuEIOSeb2MK9tjZPv6IEQxvAZcAXyDWOtEfI2jiHx8gCIJQQiilfp2iPsHkfPetq1FKXZfib70u330TBLFACEKeUUr10lofdOw7g84EQRCEAkMsEEKpIxYIQcgzTvFg7Yt4EARBEAShYBELhCAIgiAIgiAIGVM0dSAGDBighw8fDuvWwZYtMGgQbNoE5eVw/PEA+Ndthl27oV8/PEPr89thQRCEPPPmm29u01oXxc0wMgakYf9+2LsXamqgqio3/RIEQShUOjMGFI2AGD58OG+88QZMnQpNTXDddXDjjdC7N7zxBusvvYkhb/7KNN68l1WX3sTI2xvz22lBEIQ8opT6ON996CoiY0AKfD44+2wIBGDHDpg/H7zeHHZQEAShwOjMGFB8MRB+KzV+v35me+AAABXP/QNFtOSvmjc3510TBEEQ8kNzsxEPoZDZNjfnu0eCIAg9l+ITEIGA2VZXG/eltjYIBuGkk2Ka6YuKLuObIAhCLA88ACefzJ5xn+Kt06+ipcmX7x7ljYYGqKgAl8tsGxry3SNBEITc4PPBzJlm21UUjQtTBNsCUVFh3Jf27IEDBzjkS2fCs3MA2PK5b4n7kiAIxc3//A983xQ2rwVOxIf/tYdpYQHjGkvPd8frNW5Lzc1GPIj7kiAIpYDTfbOiouvcN4vPAmELCI8HevUyzw8cMHZri4FfOiMPHRMEQcghf/lLzK4C3ATYPrc5L90pBLxemD5dxIMgCKVDd7lvFp+AsF2YPB5jgQAjINocqfWDwdz3SxAEIZdMmgSAnahbA0EqqJvckK8eCYIgCDmmu9w3i09AxLswQYIFQgSEIAhFz+c/D4ByuQDwV9SwYlZpui8JgiCUKrb75owZXZt9rnhjINJZIGwrhSAIQrFiL5QMGQJr11I5qJ+IB0EQhBLE6+16182iFhD7dgepBnZfNY0+nxobbSMWiKJk9+7dbNu2jYAIxLS4XC5qamro378/Ho8n390Rugt70aSyMna/xPD5JHBaEAShqyk+AWFNHj98cikjP3wXgD7vLCL83pKov5YIiKKjtbWVzZs3M3ToUHr16oVSqv0XlSBaa4LBIHv27GHt2rUMGzZMRESxYt/nbAHhdOMsEbor+4ggCEKpU7QxEDtffDvmsApLDEQxs3XrVurr6+ndu7eIhzQopaioqGDAgAH069ePHTt25LtLQncRLyBK0AIhxeMEQRC6h6IVEH0+dyZB3NHjZa7oc3FxKTpaW1uprq7Odzd6FLW1tezduzff3RC6i3gXphK0QEjxOEEQhO6h+ASEJQ5GX+ZlxaxmwtZh9fWvRduIBaLoaGtro7y8+DzyuhO3202oBCeVJYNYILot+4ggCEKpkzMBoZRyK6V+rJQKKqW+mqKNUkrNUEotV0otVUr9SSlVldUbOYKoxzV6KauoMPt1ddE2IiCKEnFdyg75vIoc+z5nF9QsALGYs3HAgRSPEwRB6HpyaYG4ElPL6JU0bS4FzgdO0FqPAYLA7Vm9izONK4C9Kt3aGm0jAkIQhGKnMC0QuRkHBEEQhG4lZwJCa/07rfWvgXTLYP8NzNJaH7T27wUuSdVYKdWolHpDKfXG1q1bQevYQnIAbisOwj4OIiAEQShK/nP7kyw8ZwYtTb6CjIHo6nEgYQwQBEEocXw+mDnTbLuTQouBGAGsdOyvBPorpfoka6y1btJan6K1PqW+vp73H3gJtEYDvP66aWRbIJwCQoKoBUEoMpbf+n+MvvFCJsz/KSOnns2GBcvNCVtAhMNmkaXwyXgciB8DcjVwCoIgFCJ26uqbbzbb7rwXFpqAUMSuTNk293b7eXDrfkZ/d1JkPzxxkvnkxIVJKHKWL1/OLbfcwvLly/PdFSGPqEf/ZLaAmwAH3vqPOeF2Q5l1Cy0AK0QGdGgc2L8/dwOnIAhCIZLL1NWFJiDWA8Mc+8OAfcCu9l7YtmsvLivnkgIIWp9cMguECAihSNBac/nll3P33XdzxRVXoHvGCrPQDdQce3jkeZAKqsceYXbKy6P3wcKIg2iPDo0De/dKzQdBEEqbXKauzquAUErVKaWWKKWOsg79EbhCKWUFMHAtME9nMCsq71uD3UgDuK1PTiwQQhEze/Zs1qxZwzvvvMPq1at55JFH8t0lIU8MPnFQ5PnKWfMZfMoQs+N2m9EECtIC0VXjQE2N1HwQBKG0yWXq6nxbIHoDhwO2b+sc4CXgNaXUG0AtZvBol171VYR7mUx/W86/jLKFC8wnl0xAZBkDIX61QiGybds2pk+fzkMPPcSIESN48MEHmTZtmlSXLlUOHow8HdfojS6UuN2FboHoknGgqqp7B04ZBwRB6AnkKnV1zitvaa0bHM/XAUMd+yHgJuuR7YUpP7gfXC4G/nN21Oe3kxYIOyAlEDCrWlKMSCgUBgwYgDPzzLnnnsuWLVvy2CMhrzgEBBAVC+XlBWeB6K5xwOvtnvuzjAOCIAixFE/pXnuwrKuLigfodBrXZAEpMnAIglBwOBdJINYCYQuIwrRAdA3LlsHQoUYwtbVlvq2thTPOgG9/O+XNXcYBQRCEWIpPQAwYEHu8k0HUdkCKvfIkfrWCIBQk8RaIZC5MBWKB6BYOHDCPbNmwwYiPP/4RFixIqgxkHBAEQYgl3zEQXUb4o1UABDbvjHVS7WQMRC4DUgQhE6666iqUUnzyyScJ55YvX05FRQXf//7389AzIa+kskA4XZiK2QLRWdKkbpJxQBAEIZaiERBlATN4urdvjNaAgC5J45qrgBRByASv9UV87bXXEs794Ac/oLa2lltuuSXHvRLyjnP1XeuoWCgVCwQmA5/zkRXtmBZkHBAEQYhSPC5MFgrQQYeTqqRxFboCn898pxoa8j6DGD9+PGAExIUXXhg5/vTTT/Pss8/y29/+ln79+uWre0K+2Ls3+jwYTB4DUcQCorWyL0tbB+PHgwc//Qd5GNzPDx6PWUBKtt261bgwjRgBf/pT3n/bgiAIPYWiEhCRFSe3YyVJCsmVNkrluwfJ6UTBt1GjRtG/f/8YC0QwGOSHP/whY8eOZerUqV3RQ6GHceCjDfS2dwKBWBemwk7j2iWEho/k1I/fiGZKmgeD29MDTzwBF10Exx0n4kEQhB5Nrtc5i0ZAhCp7s3bQKXhOGMOgaVOin54ICKEIGT9+PEuWLEFrjVKKe++9lw8//JAXXngBl73aLJQMLU0+jv14eWR/6R+WMMbpwlQCFgi7DkRWA2iFVasuy9pAgiAIhUQ+Uk0XjYBwHXsMh7+xMPFEeZI/UQaL0qETK/0RCjAJ/Pjx43nmmWdYvnw5/fv3Z8aMGVx44YWcffbZee2XkB+2z21GObz+dz65CA7tMYXkuoys60CIgBAEoQjIR6rpohEQKbHrQDgRC4SQDXYKlgKJgYDYQOpFixbh9/v59a9/nedeCfmibnIDPO/Y/8yp8OaHZqcAC8kVDPb4IGOCIAg9mHykmi5+AZHEAhHesZOPjzyH8OSvMPL2xjx0SuhxdFeJ2w5y+umnU1ZWxuzZs1m8eDHXX389I0aMyHe3hDwxrtFL6JoKXEGzkj764nHwapIsTEVugcgU21f483UVjAOxQAiC0KPJxzpnSQqIsnCI4Svnwx3z2fR/D/H8f93FUZedUUjzQ0FIS01NDWPGjGHRokUMGjSIm266Kd9dEvKJ1hHxAJRkFqZMaWqCa64xH8XT7goWAxvXBljjK6g1AkEQhKzI9Tpn0dSBSEmyGAhMulcFDFr9Cv/d9GmmN/hi6s8JQqFz2mmnATBz5kxqamry3BshVyy9+1lePetHtDQ5bljOJBFQklmYMsHng+9+13w04TDsC5gYiK0bApx9NjIGCILQI/D5YObM/N6zSs4CESZRNbkJckawmeZmr6xACT2CYDBIc3Mzp5xyCpdeemm+uyPkiJYmH2N/dD4KOLj4d7TwIuMavbFF5MAIiBLLwpQJzc1GONgEMAKigkDOAg8FQRA6Q6HkdSk5C0QAD/FDaBvlLHE35CToRBC6grvuuovVq1dz3333oQq11oXQ5ZhsSwY3AbbPbTY7Bw/GNox3YRILBGB8gz0eKCszH8mlV5gg6goCOQs8FARB6AzJMi7lg5KzQKz92WwOPPUiJ7z5YOTYW2d+j5l3iPVBKGx27NjBc889x3vvvcedd97JD3/4w0hVaqE0cGZbClFu9iFRQMS7MIkFAkgSaDi0Av4AA/oEmf+sWB8EQSh88pFxKRnFLyDi0rgefckp8PXT4OiogBh/UhBk4BAKnOeee46vfe1rHHLIIfzgBz/gtttuy3eXhBwz7srxYBUa33bJNcZ9CdILCLFAxGAHGvp8cO8DFXwfqPUERDwIgtAjKJTM8sUvIOKDqF0u3n9uPWMdh8L3/5ayr35Vlp+EguaSSy7hkksuyXc3hHzS2hp5OuTIqujxOAGx/vKfMnhTCy6ApUvFAhGH7UPc228ERNvBQAkMhoIgFAvpMi7Zaaq7W1wU/z0zXkCUl7PtHz7CKMqsyq0qHJLoOUEQCh9HsPT+Xz9A2z8X0mf8GBg3LqbZkHWvRHeuvDJ6bxMLBBD1IVZhE0QdbpU6EIIg9BxSiYRcBliXnoBwuaib3EDgeTceAiYgscwl0XOCIBQ+DgHR+8A2eGcR+p1FqDhXzZiw+rY22LHDPBcLBBD1IQ773RCG8rAICEEQegbpREKyAOvuEhAll4WJ8nLGNXpZMauZDYeZAFR18ZcTJNymCxt56/SrYnOtC4Ig5BOHgFCORzLLgrYeuN0wcKA5KBYIIOpD/NMZRniVhdpA65g2hZBnXRAEIZ50WZjsxRGXq/sDrEvSAgGY4MPA1+HaV6CuLnre5yN81lkMDIUYCPhfe5gWFkSDFQVBELqRliYfwT88zKFDyxg0bUrs4oZDQGiMeNCAcrkSxMGB4cdQdcIomDYN7rvPHBQLRATjQ6zgFnc07W2FcWkqlDzrgiCUJuniGNJlYcplgHXJCgjAJASH2Cquzc2oUCgx17oICEEQupmWJh/HTD0TF2F4A8JPP0TZwgXRUcASEAcPHcEONYDBG14zZuRrr4Xf/CbmWlWrl0Z3HnjAbMUCkUhFhREP9mhMbt0ABEEoUXw+mDPHJLrYutXMSf1+9rV56LPCz2fw4MHPvqM8VJf7I+e9Hg9bB/rZ0+qhttJP1dXmuPO81++Hx2OPJ2zr6zkChnW0+zkTEEqpicBvrPcMANdorV+JazMQuB84Egha7W7UWi/u8BvH+QbHCIrKSrN1ZDahoQGUipiz23BHc60LBY3WWoqqZYGOc9kQ8s/2uc2UEy2VrINxs1dLQPQ65giGvPACDB8OH3/cvmWhQLIw5W0cSEdFBezfb5SCRaHkWRcEoUjx+WDixGi6bQdVwDHOAysSX15lPTrFsmX0h/qOvjwnMRBKqb7APOC7WuvjgB8DTyqlesc1/RWwDThJa30acDfwWKfePFsLhNeLOu20yO6aX/5J3Jd6AOXl5bTJ6mpWBINBXM7fg5B36r8QvdeY+IW42avtwtTbunUOHWq2H32U/sIFUAcir+NAOuxFJoeAsN0AZswQ9yVBELqB5uak4gFi49sicW4FSK6CqM8DlmutfQBa62ZgI3B2XLsNQF/AmtlTbx3rOEmCqCMkExAQHZyBUYcdZNuEC9lw2OmsvKGpQ11oafLRfN5MCcjuRiorK9m3b1++u9Gj2LNnDzU1NfnuRuni87HxS9/hrdO/E7k3HPvFIyOnQ71rY92XIFFAWPew0HPPx1w6jIq93xSGBSJ/40A6LLel+MHc64Xp06Mff2eCqiUgWxCEGGxvFxwJLxzoFMdTodM8uotcuTCNAFbGHVtpHXfyM6AJ2KKU2gVsBT6X6qJKqUagEWDYsBRuXOksEMlcmCBGUOhLL2UA1j/hjtdYCYy8vTFVlxJo+f1iRn9nEoowgec9tDBfLBrdQH19PWvXrsXj8dCrVy9xZUqB1ppgMMiePXvYuXNn6t+N0L34fITPmsCgUBuDAP9rD5lkDadHFy/K+1QlLn07BYTPBwsXAuAKGcuCHVgdpiw2dqsALBB0wziQ0RjQHraACKRO5dqZoGoJyBYEIQGvlz3Hjqf2fR/vcywuwgxzxDqodLELcdt9bR7WrvDjx0MF0W0QD0Pr/dQPSR0DsWPRoq0d/RNyJSAUEL/01UaiBWQ6MAQ4TGu9Wyl1JfCUUup0rXXC0pnWugkz0HDKKackF1rZujDF7SvHVgNq3lzIQkCU//Ze3NiDuwRkdxeVlZUMHDiQTZs24Y//fwoxuFwuampqGDZsGB77NyDkluZmkzrUIpKsYWTUfdKZcSnhWO/exgQeDic0CQMBKmJjtwrDAtHl40BGY0B7ZCAgOhNULQHZgiAkY3trNbXA9dzFC67PMONbxuqZLffNhJtvNveYsjLz0NpasHgS6tPcb1Yrtbaj/c+VgFgPnBN3bBjwt7hjXwN+pLXeDaC1/oNS6hfA8cBbHXpnh4DQgHr11ejdO5WASDOQ6IsmZ/X2/Yf3gffN82D8oC50KX369KFPnz757oYgtI8jrkHjuDdsXxdt056AaGgAtxsdd796d/iFlE+fFmvpLAwLRN7GgXQpETMREJ0JqpaAbEEQktG/1tyPw2XuTt0b4u8x99wD27cXTxrXJ4G7lVLjtNYtSqnTgNHAi0qpJcBlWusVwIfARUqpf2utw0qpCUAt0GGFtGXeYg5x7IcnTKRs0ULzqWbgwuRk5xkXZOW+BDDw5KHwlHm+cpa4LwmCQMxd3V9Rw4r7njP3hgfeibaxaxNYQb7vP/ASw279H2oBli2DO+4waafnzGH3K0vZt62V1q9dzonJ7lGFYYHIyzjQrgtRBgKiM7nVc5mXXRCEnkOf3ibuasrlbn7+rczuDckWQ/J1j8mJgLDM0BcDDyqlNMZsfT7QGzgcsJeNr8ak+HtLKWXP4idrrbd19L39H3wU8Qs2FVuDURtyBi5MTvp7R2XfAUeqTBEPglCi+Hx8PKeZhTRw1BQv3vHR+0LlgBrGjdVwySX4X1hEjFNZczMbfzePPa8sZcymRRFfH/3UU6imJmhsBK+XPkRvoslYv7mcoYD/rvvw/PWvXZIDPFvyNQ6060JkLyA1Nqb1M06ZW32UVawvzahtitZ1pPeCIBQLCZN/K3HDNy4rB2+adkRLRjz4oLmXxS+GtHePSWuF7SA5qwOhtV4AnJrk1FBHm03AJV35voGvToE7lkQi0XW5G2XbibJ1Ydq7N/sOJPFR7nJ8PrbdeAf+VZ/Q+rXLs7aSCILQjfh8hCdO4rCgn4up5LMPvsht/z6Z8fb5XbtgwgQIhYiPSAl/9rMMCoUYRJJUfnPnmklv+2/Pzj+9y1CgYtsG9LYN5lqdzAHeEfIxDqR1IfL54IMPzPN33kny6gxYtgyeftoEtOdRJXTHBEEQhK4hqSXUdil11CtL1g7MsdbW6Jp0NvFU3ZXIoegrUY+8vZGVQOWjs6kceSh1t01LjIHI0IWJjqQJ7e5iXS+9hJ4wgTp7vwOZogRB6EaamykLmnuKBz9nBJtZ/OK4qIBIFutgoUKhBOEQuaNMziweq7kZPhPeELHElhppzfvNzV1zjw4G8xodLZmeBKGwSWoJtVNHOwREsnZgntu3KqWyi6fqrkQOuaoDkVdG3t7IkPWvUrfwidhPzY6BaM8CYacH7IgForsFxLx5CcVG1Ly53fuegiBkTkzAtGKJu4EJ3tiaA5rYfODp7hoHDj8GNWtWRtYH++3/UH51zPVLjfiaDhFs80RncbvzGh2datIhCEJhYN9qXC7H5N8SEH94qDxSIyZZO+cxjwemTs1ukSDpe3cBRW+BSItdhGnnLrZ+6TsMmjbF/EfiBYU9wMQJiNXX3cvGdzZT87ULUsc3dLcL08knJxzKNlOUIAjdiOMuv23Qscyc5+W0EZtjmmynPwPYzv6jTmD3wQrq2jZTuenjpBaDqtUfRAoQZfz2ixp59g44c/kmd+TcAAAgAElEQVRsaj2BLskBXhR4vbTc10xw9hxGBpbSx781JvZh/y4/e1o91Fb6qeqbGBsRfuddytAsvesZxuRxyV8yPQlCYZPMEnpwXxu9gN/c72bNH6KiIJnFtDNB0t0WZK21LorHySefrLOl5bcLtTY2Ah0GHXJ7tF68OHLMeU6D1qecYl44a5beVzMocm4/vfR7s15O/iY33BC9Vnfw9tsxfV035f91z/sIgtBx7N/oGWeY/XXrEu4zGrRetcqcb2hIfr5Xry7uFm/oArh/d8WjI2PAyy+bj9TlMtuXX87snNZaz5ql9RYGaA36sMotCedzzcsva/2rXyX2UxCEwmRnv+Fagz6CldrlMr/fXNOZMaAkXJhSse3JxRFzvgII+tl75XWpX7B3L9x3H3rqVKr2boq8rgK/KQKVDN3NDgNxaRmHXnNh976fIAidJ1WihgEDzLZ37+TnbbdLoUtwuv74/XDLLURcCdK5Bfl88N3vgt8Ke1f+1ry7DaV00xIEoSDpVW5cmHRZeY+0HJa0gKibPIkA5TEionrZGwD4reMx0/+9e6GpKcatQANhXKkLxOVYQOQk65MgCJ0jGEw8VlEB1dXmuQiInGC7/pSVmVvnCy+YYGSfL73fsF0E3BYQvV3+Hjf4C4KQXzxlJgvTD6a5e2Tig5IWEOMavey88IrIvjMQudxTwbMXzmLXaeeifvMbANo2bqbtw1VArLDwff3+/MVAxFeWFQEhCIVPMgtEeTm88op5vn9/5HDI4xATIiC6FNs3+JxzoiLCmaVk/nyYMSPqm+zzwcyZUFdnQiFaMf+PX9zk73GDvyAIecZaSPJOcNPcHLV+2tj3m/jjhUJpB1EDg6ZNIfTUg5S1BVAQSXXoqu7F+U80Ao20PPAS4wCXDkHApFw0lgeFC83EP3zTXOzll+Hee9m1Yguryo/GfcVljHNO8EOhaEXYrkIsEILQc7AtkkksEPrAAdSkSfA//4N+7vnIYkaZ35Hmtbzkb9ldjtdrXJdeeikxCNlZnCk+Veo990Ddzz3wCVx8QWwqcKnJIAhCu1jzwy9cVM7WYGwK5p6QmllGI68X16Jmtt10NwMW/A3tKkeF2qCmJtJk+98XJ+RQLwOoqTZuTdu3w7p1kWJQfYETacb/+iNsn/DZaI2GYFAEhCAISS0Qyj4+dy46HI6mZXY26m6XyBIlkywl8TER27fDoGFGQDgz9/WEgV8QhALAWkjaH3ATirN+dlfthq6kpF2YIni9DHjkbgDKQpbFwC4yB9RNbiDoiInQYPJ+H3KIabB1q/nvOibzCnATIPDRuuj7pAqc7AwiIASh52ENHGHiaj9UVMDkyWi3O3lNCBEQ3UZ7QchJYyKS1BKSmgyCIGSENQ6oCndCrFV31W7oSsQCYdO/f+y+o7jQuEYvLSyi4p47GHpwOVUnjIJp0+B73wNgxSU3U/bFLzDSdqLFDPpBKqgcWmdWqCB54GRnEQEhCD0PazHhwNEn8WHf0zi8chN1YwbBFFOLxjVuHBvvmMOe5ZvoM2oQg/7++zx3WEhqpbAWmh57pJVhleaY1GQQBKFdtI64MP3rhXKaF8VaP7utdkMXIgLCpnfv6F0fYiwQYEQEjU9ED/h86DffQgFHLX+a1jteYO/ok6j5j8niFFYuVvx+AeP+fTe8Zr1GLBCCIEBkMaH6iHpO+tcDiee9XgY/4WWwva8sASEWiLzijIkA2LHfQ3/gsT/6+dfj6QtBCYIgRLDnbmVleM8ow3tGYpP4+02hIS5MNkrFWiEcFoikNDejHYO5mwAHdxyM7Lt0iHFfPy5WNIgFQhAEiN4X3O789kPoFJt2Gxcmd9gf464kNRkEQUiLPR/swWOACAgnTgERZ4FIoKEh4qcM0IabykF9Y9ts3RrjGysCQhBKnPgsTO0tVKR6vVAQ1A+x6kCoVnFXEgQhc+wMnT04s54ICCeOf2TrByvSJ9/1enEtbCZUaXK0r77tcWoPrYlts21brIDI0IVp5Q1NrDrqPFbe0NR+YxEQgtDzEAtEwZJN7vX6oUZAfOWL/i7NtlTo+d8FQegkRWCB6LnSp6vx+dAtLZGUiZ4t6wlPnETZwgWpRwWvl/LBA2H1akZfPA7+HWthWDNnEcOzdGFaef0DjLjrarNzx/OsBEbe3pj6BfECQlYoBaHwEQtEQZJ1ClYrC9NnJ7VCXLuO1oKQNLCCUAIUgYAQC4RNc3PM2KwAghnk4LMnAMFgTGpGgMH3TefAhu3RthlYIDx/fSSmIraaNzf9C8QCIQg9D7FAFCRZp2C1XV2dlmaiIuDmm802G0uCpIEVhBLAdmHqwWOACAgbR0xDtNZDBk6t9j8/EIhMCuzJfzlthLfvirbNJAbirDNjdvVFk9O3FwEhCD0PsUAUJFnnXk8hIDojAnpC/ndBEDqJPQb04BiIntvzrsaKaYjJvT5tSvu2Y3sCEAg4LBBluAgTwoW7qgL2EW3TDkO/dR785dcA7Dzj8+ndlyCqYm1EQAhC4dNBC4R/r5920jsInSDrFKx2IbnW1pjDnakFIWlgBaEE6IALU0fdIrsLERBO4nOvZ0ISF6b947zUtixh5wWXMvD1pyJNl74bZMzEdq7nGIj6Tzqh/fcXC4QgFC6//S27Hn4COz/b/k17eP28mYyq2WDuMxlYIFqafIyznrt3bDb7jQUwehQpWeVeT2GBiBcBYIKiMx34Cz3/uyAImeOc+IN5/tnhbZwAGQuIQoyNEgHRWZwuTJaAqB13OLQsYWBfP3rTpohL0yM/eo8LTz0n/T/duZIVb11IhggIQShMbr0V/ZOf0MdxqGr1B5y1+ieEcZkDGQwe2+c2E0ZRhkaj2D63GURAFAYpBARERUAhDvyCIOQG5++/vNx4oYZC8ER50NQYztCFKZlbZL7vIxID0VmSuDBRY6VzXbo0punY0Nvt+8KKgBCE4uDxx2MSIti4CFOG9dvOwAJRN7mBVippw4UfD3WTG7q6p0JHSeHC5ESCogWhdIn//QeD5rkOZhdEXYixUWKB6CxJXJiorQUg8OFqnNODj1yj+UxDO9dzrmTFi4NkiIAQhMLk+OPhvfeSngrjwkVbRoPHuEYvLcxn+9xm6iY3iPtSIWFbIP78Z3j2WXM/drlitt896GJKKEQbLtyhEP1/44L7HO1GjYJf/Sr/y4mCIHQ5znio8nLzkw+FwFMWNCk7MxQQhRgblTMBoZSaCPzGes8AcI3W+pUk7QYAvwdGA37gea319Fz1M2uSuDDZAqJi746Ypt/4yREc1d4/XSwQgtDjWHlDE2reXPRFk6OJD048Ef74x6Tt/6/sK3wt/OeMszCNa/QWhdtS0Y0Dr75qtvv3m0cSaq1HhK1xDTZuhIkTYeHCwpgVCIKQNakCnJ0T/7o6+N73zLStQmWfhanQYqNyIiCUUn2BecDntdY+pVQD8KRS6git9QFHOw/wFHC91vol61hdLvrYYdK5MMVx1PAM0rg6BYRYIASh4Fn5498x4tffNTvO4o+7d6d8zU7dzzzpwTnAs6Uox4EVK7rmOsFgYTg1C4KQNe3FOdkT/5kzzbqw1qBCUgciU84DlmutfQBa62ZgI3B2XLspwCvA95RSbyil/ggU9qebxoXJxs7cfnD6z+GUU6CpKfX1nC5MaSwQPp/5Mq5ZJQJCEPJJ1Z//N3nxxz17Ur7mu/q35slrr3Vr3wqM4hsHvvKVtKd1ikcCbnfWTs32GJBNkTpBELqeTOOcnHEMlS4zX9x1oDBvbZmQKxemEcDKuGMrreNOJgAnABcAa4FfAI+SOMAAoJRqBBoBhg0b1oXdzYI0Lkw2GjO56LVxNXrjatTUqeZEY5IaDxlYIJxqd78K8UvnSREQgpBTyo4fCxvfjuxHij+mERCRtn/9K2rSpOT3guKjy8eBvI8B9v9t9mxzQ/b7TVyEtVV+P/vaPOze5mfLTg8V+Ang4ejhfqr6ekyijUAAHnooK+uDZHYShMIh07ovtjvTnDnwyf+a+eJrb5ZT4+uZv99cCQgFxM+G20i0gBwCPKy1XgOglLod2K2UqtZa74tri9a6CWgCOOWUU/JTotXpwmQXh0rhwgSOjCxz57YvIFJYIJxqFyUWCEHIJ4f81wnwLxPrsPW8b0RjIDIQEEDqe0Hx0eXjQEGMAY2Naf9/1cB9M+Hmm6Ox1TMaYfp0jEX6zTfh6KOzestCTOkoCKWKFx8rz5tD4O2lDFBbqbrak7CYYG+P2+XnR9s8uNu2AXB0eBmL5vjw9sAfcK4ExHrgnLhjw4C/xR3bAjhH3bDjUZhkYIEI4qYCcy4iICZPTn69DAREjNpVIXA2EwEhCLll167I00MuGB89niYGImamm+peUHwU7zjQDilXKHv3NtsDB1K8MsvrCYKQW3w+OOssBmcQs6qB3sBIx7HD+ZhvzJ4EUxb0uFWAXMVAPAkcp5QaB6CUOg2TXeNFpdQSpdRRVrt5QKNSyl7Cvw540RlgV3DYFoiDB822rAyqqmKarLn1L7x92lW0DrJM7J/7XOoVqwzSuNpmsBkz4FtTxAIhCHnFKRSCjkQJaSwQYWBn1VDUrFmlYn2AYh4H2sF5z45xN+qggEh5PUEQcktzc2YJbyASKxcTMweUtfXMAjE5sUBorXcrpS4GHlRKacya+fkYMXY4mGKtWusnlFJHAq8rpQ4CHwOX5aKPHcYWEPYA4HZDr14xTUY1ToT/N9nk+r7pJhg7NvX1MkzjGknn9ZO4NiIgBCG3OCwQETdGSCkgQpThx8OGux+nfxGkZs2Uoh4HMiBpCkZ7sSlFCtisrycIQm5paAClTGqldkjWQkGPNSPmrA6E1noBcGqSU0Pj2t0J3JmTTnUFtguTPQC43dHqpDZ2TIRddMiyMiTNGyxpXAWhZ+G0QAQCsGQJO67/FbXLlie9wX5w0hTU1MaSLAhXtONAB9m6vzf1wIr3DnDUl/PdG0EQssbrhdGjYdkyOOGESKzD/l1+9rR6qK20Eib4/aj448PqYcwYmDKlR64GSCXqzmJbIJwCwmmBqKiICgd7GwikzqIhheQEoWfhFBCrVqFvvpn+aZofd8+34ayeN1gIXYvPB0tf6M3lwH23HeCSz/bIOYQgCPY88MEH4cQTE+d3f47+tqusRzGQqxiI4qU9FyZnRiaHBSJl3uAMYiBiEAEhCPnF6cK0alX77W2/d6GkaW6GfWHzXahoO9ATXaAFQYCo66o1x8u0LkRPJyMBoZT6vVJKK6UOTXJulFIqoJS6t+u71wNoz4Wpujr63CEgnAVFYtzfOmuByMAPTxCEdvj739kz1svyY79ES1M7lbqcFoj6ehTtFA2Li5ESSpOGBmh1mbXIWtf+nugCLQhFTcbFGu2FX2tBOeX8rsjI1IXJB0wFTgP+HnfuN5iUe7d0Xbd6EMlcmMqiuqxt+y7KfVaVELut3x/JopE2BiIbAVFWZqwPYoEQhM7h86EvmkytDlMLtE59lhYWpIxZaNu8LXojtRYMdFkZ2+tG4TryCPr7nolpv/yJDxg1Zkz39V8oGJLGuVl4vTDk8t4wCy6/5ABDxH1JEAqGbIo1+vf68QBvvu/h5CNJPb8j/T2hp5GpgHjF2sYICKXU54DPAt/VWu/s4r71DJIIiJYmH+Os0659uwlPnETZwgUJQdQJWTR8Pvjoo8ju7p0hk5YkHbaAcLvNdUVACELnaG4GHf0duQmwfW4zJBEQLbOWMPbA3sj+7nfX0Aco69uX+i1LzYJAnMVh2E+m0FI/tCSDqEuJTCYgw0YbF6Yh/Q4kvLZYJhmC0BPJtFijzwdHbvVTD1x0iYe/vhid29nt7d9zXR1cd13xVJDPyIVJa70c2IEREAAopdzA3cD7wKxu6V1PIN6FqaKC7XObIxWPFEDQ+vbFCYgYfD4zWuzYETn08Ts72jedOQUEiIAQhM7S0ICj5CNBKqib3JC06e7H/uVoCaG1680Ty42xZc5bCa+JCBKhqMnIDzpJHQhbeNx8s9m2OwYIgtDlZOqG1NwMHsycbm/Ak/A7d/6er7nGTP+KJTYimyxMrwBnKKWU1loD3weOBs7RWmdWRaMYSWKBqJvcQOD5CjxYgTVu69tnDxLJBIQ92jjoq3fxdHM7ClUEhCB0LV4v6hgrLR+w6q55Ka0F9RPHwILovqdPJWwnsliwfe5CNFE5ooEwrpSCRCgeMqoWbdeBmDcP3ngD/H6G7/Tw+kE/fjx4Dvrpf5EH+pnUkHaKyJTbigq4/PJSKk4oCN1COjckJw0NUGHP9SoqEn7nzoUErY23uVLFERuRrYA4HxillNoB3Az8XWs9v1t61lNIkoVpXKOXFpoJzp7DoYfCoGlWjt/Fi02bOKGw8oYmah/8IwMgEoCpgANUxXzBVt7QhJo3F33RZEbebg0QIiAEoePMm8een97JRj2YwPevjwoF+/cEjLk4deHHUZOGxER/VdkJliwBYS8m2ANMWLlYd/394r5UAmQ0AbHGBL1jR8T6PMh6RNhkPYgNyndavmJ47TWzFREhCBmRymUwk2KN3vEaLAvE0y94EtrHLyTccw9s314c7onZCAjbkHoaMAHwAD/q8h71NKyJRtva9ebDXLsWfD4zQYifJCRxYVp5/QOMuOtqICoetFIorRl6dC9GW5dY9aP7GXH3tWbnjudZCUZEiIAQhI7h86G//GVqtaYG8E99Jhos7UxmcPBg6mts3Rq7v2+f2VouTMkWE0b29FFDSKDDE5B33wXSiIE4Mm3H3LkiIAQhA7IJlk5KMGi25eV4z0iMCsjUktETyUZAvAqEgcuBM4E7tdYZJD0vbjY+Op/BgMvy4tKbN6MmTYIFCxK/KUkERK+/PBQzKCiig0S1J5qFqddfH4pxg1Dz5sLtjdFMTbYlRASEIKTH72fLFy6n98svUGWlPVbEBUtnKiC2bDHbwYNh40bYawVU2791SL6YIBQNnZqAXHYZOkmQQzKhkCwlcEpBMXlyhh0QhNLEFv1r12YWLJ0Sez7nuOfHk4kloyeSsYDQWu9VSi3FWB82Abd2W696EG2vvw1Eb+QKUn8LkwiI8uOPhQ2vx5qm3W5zjbY28y2/4w76b1sec6m69e+y8voHGCkWCEHIik0XX8Og5x9NOB4TLO2MU3IKCJ8P5syBpUth61b8m3fiAVp1BZUAe/aYds5aMEJRk2m2lqQ0NrJqJWy/czZuHcCDn2FHeaguT4xx2LbHw5YNJjaiEj/1QzwQ8NOrr9V++3YjaC+4QKwPgpAGp+gvLzeB0tCxuITXF/s5FWgrq8hqRb4YyPbvfQ0YC0zXWu9tr3EpEPjqpeg7Xo45plJ9C5MIiENOPwKegb01g9Ejj6LP+DEwcSJccolxhzjrLHQoRIXz+kCf1s3U3nU1+44+kWoQASEIGeJ6ZXHS46vunBuNTUhmgbAzpVkxTBoiv0vPpo/NE9ucnWY1SiguMgqWTsPI2xvZcmEj85vNa6tTpIo8+2zwl5kgzB/+EO67z3rPfZbV4/mfwy23wIkndvpvEoRixin6Aa68EoYNy97FyOeDb1wUYCWwba+H1b7itDSkImMBYaVtbQDeAB7prg71NEbe3shKoPLR2VTXVxoBMGVK8m+Ro5BchI/NxKP2zp/B1KnmmF0LYt8+CIVizNTOjC4AbNhgtiIgBCGKz8fGO+YQeHspA9RWqobVwxjz21TjxsGL/0l4yZjJjuJuyQREXKa0tP7oIiBKhq7wcW7PxcH+6oXDJoPLO+8ksXqUW8N5JgVIBaEESBWbFC/6U03Z2qO5GVTAzOda8WTv/tTDycYC8WPgCODrVhpXwWLk7Y0mHqE97EmFPQnx+Wh77G+UA2s+2M9wu509EDgmIc4P3Cki1KCBsHKLCAhBsPH5CJ81gUGh6ERKr1mGWrQIHnqIAd/6FryY5HV2Kmatk7swNTSY2Zt1+0t7ExQXppKiMz7OmRSNi5/wTJ4ML70UZ/VYJAJCEGzSxSZ1VWBzQwM85vaDHwLK0+PTsmZLWgGhlOoPnAccB1wP3K21fiXda4Q0OF2YfD7CZ51FuWVDG3zfdFrGeo0Lhe2Q53JBTQ3s3cuBw45mfc0Yyj//Wfq/+Bj93niRYN8BVI06DFa2iIAQBIAlS9h36dVUhdqSWwgCAVixIvlr7QxK8XVabAHh9cKRR5rXn3giqrWVfW0edh+sIHz2f3HYI46wMLFACBmQaQB2sgnPuHFxE6CXRUAIApjf1S23mFt5OJw8NqkrApu9XnikyQ+XwtAjKji6hKwP0L4F4jzgz8AW4DfAjd3eo2LGKSCam1GhaP29coLRDDC2BSIUigwGVcveYpRddOjAN6CqivLdO9i7eis1IAJCEHw+9FkTqNbmN5A0Z35FBQwZkvz1tgXC6b4EsUHUtvXwb3+DESOoBhOD9P77IAJCyJJsArDjJzz2c7uarbgwCYIjXsgSD2Vl3Vu07fjRZsGpd7/Su+cnJq11oLX+i9Zaaa0Haq2vL+mK011BeblxgQiF4KyzIoc1cRlgbAtEMBidzDhcIlr+9C4aKNNhqpa9YQ6KgBBKneZm0NHvv11XJdS7xhwYPtykVz7kkOSvz0RAWMW+6Ncvto0d32QjLkxCBtiuSS5X9pMce6J0881mu2qdCAhBcMYLlZXBOed0oLZDNtiLSiW4aJRWQAhdjFLRL9lJJ6FqawFoOeGbrJi1IJoBxl5JOnjQ+Fu73VFRAcZSYV/SXmcVASGUOo7Zl7YeuD2U3/oLc/DII80oElcJ3mbF2+24MLW1mToPSkGfPrFtHJWrgZIcTITssV2TZszIfpITb71Y/pEICEFwinKPx7gyZfK78vlg5kyzzYoM6kAUK6WWtjb/2EJgzBjYs4eQcqG+c1VUPEBUQBw4YLa9esVcom5yA+Hny3ARjrpmiIAQSp3x41EuF4RCfDj6AvqMHsKgaVOivwnbwhAvECzuuXU/3zgXvP1TWCB27TLbvn3N0pYTsUAIHSCTAOpUxAdWHz2mHJ5EBIRQ0nQkQLpTxSDt8SR+DCgBREDkEp8vOomx0reW6RBHTf00LTgsEA5rA5AwGRnX6GXPb73UvrckelAEhFDq7NljlmOrqxm17B/R4++8Y7b2by+FBcLTtt/4oJ+fQkDs3Gm28e5LkDh4lOBqlJAdnZq0kDhRGvmhWCAEAbIPkO5UMUixQAg5wY52c6AAN4FoADVELRA2cRYIgNrjjgCngLBfIwJCKFW2bTPb+vrY49XVZtuOBaLWtd94QaWKgUgnIMSFSciSTk1aLGImSqtEQAgljs8Hc+bA0qWwdWtCNfdU22vbPHwxZKq8e0J+hj3kgT+2/zo8HvM+YBJp+EqrkpwIiFzS0GAm+m1tMRliYgKooV0LBABW/EQEewVUSnQIpYp9Ix8wIPa4nb3MTtOawgJx5SX7GOIFFsYKCP+sB+Evc/GELCGxaVPiQCEuTEKWdLaCdQKShUkoZXw+mDChQ9//auAYx75yZPpOms0vGatWwaRJJlFHiYgICaLOJV4vLFoEF16IOuYY9pwwgbdPuyo2gBoSBUQSC0TKIE6xQAglyrLFxgJxcPPu2Eg4W0C048I08NFfs/P08+Ctt2KOe4IH8GzfGI2B2LDBDBTO94izQGx9+rWO/yFCSdCZAOqkiIAQSpnm5k5995XjkcnxpAQCfDynuWPB2D2QnFkglFITMbUkyoEAcE26onRKqZ8BPwGO0lqvyUknc4HXC088AUAf4KRkbZQyQZq2GMhEQNjFsURACCWIzweLbvRxDOBZ+yGhSWfjWmDNypwCIr7KtIPycJC+rz1P+LXnKQMCZR7cYX/qgnROn5PXX485PeDff2blDRNNlXohgowDsXS2mFVMELYICKGUaWhAE03fbZPJxD8bv4101wuXV3Dpgw0sDnUsrqmnkRMBoZTqC8wDPq+19imlGoAnlVJHaK0PJGl/ATAY2JCL/hUk5eXRldIk7hCrtvdhhGNfv/SS+WKLgBBKkOZmODH0JmDMqiHnBN/O5+f3m/iGOAtEwN0bd/BAwiqTO2yERsqCdE6fk4ULI4NXpO28uSACIoKMA11LfBD2m78oN24YIiCEUsTrZX/1QKr3beZVTqOGvfQf5GFwv/ZjGTbt9LBjkxUDgZ/q/h727/DTiocK/ATwUImfYUd5qC5Pcp36ehgzhj8xhcV/8HYqrqknkSsLxHnAcq21D0Br3ayU2gicDfzT2VApNQq4DjgfWJ6j/hUeTgGRxALR8nFtjICIIAJCKEEaGmBDWR8IQwiVOMGvqjI3+v37EywQbYOG4l73YUQA2CJAAWFgX80QygbVm4HDGiiYMiV2ZGhoIOwqpywUnbzpiyZ3y9/ag5FxoAuJD8J+9wMREEJpU+FRsA++UjaPbZ4hzJ8HgzOYwK+JE+OXfgX+8Afz27KL0d1yC1S3c62jfFDxSBfGNRU4uRIQI4CVccdWWscjKKVqgdnA17XWfqXSG5+UUo1AI8CwYcO6rLMFgTMOIokF4uhT+8Dj5nmM+U0EhFCCeL2wbRIwH3aefTEDZlwXO8GvqjJVpPfvT7BA9D52BCsv+RH9Z/2Kvrs/jr2w20Ptc//X/jKS14vrpUVsu/EO/Ks+ofVrl4v7UiJdPg4U9RjQDvFB2Med6IKHEQEhlCwVBAH44Y0VnP75zFf/41MiAzziEAKZFqPrSA2KnkyuBIQCQnHH2nAEcSszSjwCzNBax43iydFaNwFNAKecckpxpR9ypnJNYoE45tTqyPOtw07mkEljzTdeBIRQogwIbDTbm65KvHM74yDig6grK81k//ZGaGpizz2z2XmwEs8JY0whuixGoQELn+jkX1HUdPk4UNRjQDt4vXDPPTB3LkyeDGOOtsaMUPxHLAglQtAIiOuud0Pf7F4aH4/UUSHQ2bimnkSuBMR64Jy4Y8OAvzn2a4ATgJ8rpX5uHRsMPKGUuldr/XC397KQaMcCsSugYL0AACAASURBVPLZDxlpPa9eu5R1ZedzGEQFxH33wUMPsX93kIN7AqgxY6i7bVrpfLOF0mOjERAMHpx4zkpvfPDcL9BrQ+wi+MHXW+hlp2VtbKS2sZHaxCsInUfGgS7E54PrrjN6+KWX4FN3lzMWEiwQnal2LQg9CntxqJ2q0PZvoq4Otm9P/tsoJSHQUXIlIJ4E7lZKjdNatyilTgNGAy8qpZYAl2mtVwBHOF+klFoDfKkYs2+0SzsWiHVvb+UIFGVo3ATY+/p/zIlwGK69Fu6/H4Aq66EXfUh4wtOULVoovwqh6PC9rDll9TrcAOvWwejRjpM++PBDgATxAFC5YSXhiZMoW1g6+bvzhIwDXUh8DMSb7yYKiM5WuxaEnoQOBlHAK2+6GX9W8jb2b8LvN9OlsjITCy2/jezJSR0IrfVu4GLgQaXUa8A9mOC43sDhmIymgoNAq2MVaXliDGHd5Em0UkkQF0EqqDn9WHMiHIannkporwDVFkxaDVsQejI+H/xy0nzcIT8aCF3wxdgk3Cm+87a/iwIIBuS30c3IOJA9Ph8pc8rbMRAul9meeGpiGtdk1a4FoRjxLQmjLPe9T59bnrIOg/2bsJ01wmH5bXSUnNWB0FovAE5NcmpomtcM77YOFTAtTT6O3bUtsq///W9UUxM0RoMyxzV6aWE+2+c2Uze5gXG1H5uww3DYVOJdsyZmgqQBXe5GFXtaAKHkaG6GicF/A5YYiM+f19AAbjfaMm/bIbltuCi3XfLdJZAyowCQcSBz2rMexAdsHtcrUUB0ebVrQShQXnoxiBcI4CYQVClTqNq/CacFQn4bHSNnAkLInO1zmxOLlcydGyMgwIgI7ArWj68z23DY2OMANXo0+wPlVK16n7CrHJe4LwlFSEMD/Lb8ZAhaVoX40cDrheZm1Jw5HPz7s/TaZGJzV9zzLK1/nsehh5JdsLQg5IBk1oO0ftrvJwqIUssKI5QuE71mgShARVpB4PxNpIuBENpHBEQBUje5geDz5bhxuDFNbienfJnljRYOw/r15vlTT1E1cCDU1OCq9MgvROi5NDXB7NkQCLB/l59t1EeyJHm9Xno/eAx8E4L9DqHi6b+nnGn1Ou4BuPpqAMY0ngnf/688/DGC0D5ZWw9SVKKWYFCh2EiWGOD0k0wGJlelu914BvlNdA0iIAoQ4560iIp77uBQ9Qk13788wfqQgCUgti5aRv1WK/vhunVw2GHmeXzqSgctTb6oK1Sjl5YmH8HZc2RlVigMbr0VfvITwFgYegPDWAZrFhF++iHKFi7g+NFuACpGHJb++1pfH33eTqYOQcgnWVsPLAHRuq+N38zMblU1fkImmZuEQiWla581x+lVWyHf2RwhAqJAMe5JmeeU/8+HZYwG6rcuBcxES517bjQyKBg0qSzjijK1NPkYPXUCZYTwP1/JwkX38KlHr474htsTtC7/Rb78Mlt/dh97V22l93FHMmjapTJSCcl5+OHI03jXPm0HP59lpdyw3PdSUlcXedoy+zXzOxOEAiWrlVJLQGz+pI2bb84861L8hOyee6LpYbs7c5MIFSFbUrr2WTUgcLvbvYZ877oGERBFQstSIyBsTGaZICxcaAaWtjazH7fqevCRxyOuUm4C1D7zV9yOWk+RCVpX/sp8PsJnTaA+HKIe0KvmE376YUmjKSTnyCPho48AEhIDRIKf9+83J5LUTHGyYv7HHGU9Hzn1bFqYLyJCKA4sAeHSbWnjJuKJn5DNndt+7EVXIClmhY6Q0rUvixoQ8r3rGnKSxlXofsYeF/1XauzJlTv6a4OIQnemBqw7a0zkdUEq8E88N+Y63ZKdprkZFY6KFEmjKQCwezfrv3kjL336p7Q0OXLwHWVN+YcNQ51wAoH+gwA4OPyYqOj0+02bdgTElpejdSDcBNg+t7kr/wJByB+WgHDTFkntmurW7RwD4tPBTp4cu99d2WkkxayQjHSpiyHq2jdjRtzkP0MLhHzvug6xQBQJxxwTde7wDxxGpfckmGZVnq6ogAMHIBDA915VjPp+7a5RkdetnDWf8Z+uh79PB6B16FH0evyRrpfnDQ041pC7T6gIPYrdky5k6NvNHAq0Lrgrah3Yt880+OlP4fLL8Tz4IFx+Ob0njY9+N1tbzbYdF6bar55P64I7KaeNIBXUTW7otr9HEHKKJSD692ljxg2p3TOSrcDGx1qMG9f9Lh6SYlaIJ1PrQFLXPtsC0Y6AkO9d1yEColgoi1ogKm+ZDlddFT1nWyACgQT1/f4braZ6KTDu26fGFK3r9akTu2f08HpRx46BDz4AwH/IUCr//rjYEUucmncWAcYsGrEONHqj7klVVWbr+D5HyNACYRIULIhJGiAIRYHDAjF9eupmyVZgp09PrDHR3bdjSTErxJNJ6uKU2BaIdlyY5HvXdYiAKBYcAiJhEmUr8kAgQX2feOTeaLvW1uhEzGrfbTgFzwlj5FcsQJnCDr+JsQ7YFojqarNNJiAytEBAXP0UQSgWUqRxjaeQVmAlnabgpFPfzSyCqOV71zWIgCgW0gkIRwxEvPoe9Z89kWavLzrIqX1bo6/rTgFhTwrBLDcIJU9ZWVnku7ByliO4ORMLhC0g2rFACELRkqGASLUCK5lphHzTKetAhkHUQtchAqJYyERAWD8wp/pe/dgejrCaff2igzxxl59j7dd1p4CwJ4Vgit8JgoMY16JMLBAZujAJQtGSoYCAxBVYyUwjFAodtg5kYYEQugbJwlQsOAVEr16x55JNuCzWfhB1YXIFW3n/zRQuTE1N7BlzOhsHn8jeY083lYGBlTc0seqo81h5Q1N2/RULhJAp8RYIe4CwBwzIyoVJEIoSl8tsQyFT8ycLMs1MkyxDTntZcwQhJ4gFIueIBaJYyDAGIp4jB0ZdmGrdBzl+dBIBcf/96GuvpQaoAdgEeuprbHtsPiNefNy0ueN5VgIjb2+nYjYYi8OBA9H9EhIQvpc12+6ew/F16xh22dmlu8zn87HtxjvQy5ZTMaSePuPHpJ70iAVCENpHKSMiQiHzKM98eM/E9zyZlQLEctERxF3M0KWfg1ggco4IiGIhwxiIeIZURwXE/97fyujaJAKiqSmxAjBQu/iZyHENqHlzIRMB4RQPUDIuTD4fvDHhB1wbupcwEHrkV7gWlOCI6/MRPvMs6uxaIFuXod9ZlPAdi5BNDIRYIIRSxhYQbW1ZCYhMfM9TWSlyUXSumBB3MUOXfw5igcg54sJULGQRAxHD3qgL07gjD0YnYs72xxwDOArUWfhHHhNzKX3R5Mz66ox/gJKxQDQ3w3+HHgWsH16pVrFZsAAVDqEg5pES2wIhQdSCkJ4s4iDi8XoT07k6iS8419CQ/JiQHilkZujyz0EsEDlHLBDFQkcExFNPEXrscVz2/sGDydO4nnQSPP44gf6DCO8/SC//btQVV1A7dixc9zoAmy68KjP3JYiNf4CSsUA0NMABqoBt5kCJjrgfrwpyOFExapcUTCoiAgEzMLhcUeuC9X0OrljNJ8MnUOfeTfWhfc25DC0Q4kIgFCW2gMhiUSbT30IqK4Xk1M+OQkqjmy98Pli7Nvp17ejnEPPd7YAFQsaBziEColjINgZi/nz0BRdExQOwsekfDD772OgBu721uuu5phE+/hgeeQTOOAO2bIk0Hfz1szPva4laILxeOHBEFaw2+6XovtTS5GPU7FsBCAO7eg+l7sB6VO/eRihYq0jLx3yJoQeXU1Xt+Ia+8or5vKzvs3vvTg7f+5KxjH1kBMj6V9cz9Or0fRAXAqFoydICke1vIVmGHMmpnx2lXsjM+Z1zueDKK2HKlMSsYO19PvHf3We/HGQisGWnm0Oy7IeMAx1DXJiKhWxjIP75z4QV3zLfkuQWCKd7iH3t+KJz2VgRbAuEvVpcIhYIgN5Vjv9TCd6tts9tphx7cqP4z+mXmaeVlTHf4aOX/Z3ea5ah33/fHPj/7b17nFPVvff/XplLZhiuMyAgCigiFx3rUURTLQy1ta31tFSObe0Frx28tervVDw+rdWW9qGl2up51BYsIPRiPUe01tqLLTKgElSqlrEgKF4oCsj9PplJZv3+WHtn7yQ7yZ7JZTIz3/frNa8kOys7KyuZvdZnfW+xGEydaq76STtMbheooUt/TPOCzOlgxIVA6LF0UEDI/0LXkM1drCfj/s3FYjBypHdK4dtvN7fpsnu5zxOJwKO/NuuVJ/5U6SsjmPz2c0csED2FjrowjR0LJLqRqDNOzywgqqvTC4gOWBHWv3SYiUBMlVNGpNdYIACTKaWE+ed9K9jzeBMDv/DJxFoMeaJuRgPtTwcIECNGOQM/Nw1WfN/8nlxj4zlKbW3mKv/Vr8YPJbs+lRFj97KmjJWmxYVA6LHYmzGnnmp+3LGYE1idfFtTw00tcHnsMDHKKIvFqP1JGdyb4TXpbvv1g/POg8ZG36ticR8pTQr9vWS7/not7L364T5PIABlUbNB2tJe4SuYX+aB3BEB0VPoaB2IoUPNobphtLW00/fwBxzz6bNhxw6njd3+6FFzm2yBcJ/PpxUhHIanvvl3vg8EWixXJlcgd4+nhAVE84Iwp379oyjgyDM/ppnleRcR9Y0h9j3YwMC1y9l+1bc45dop8A3M78llWXAH68dHrKLCuepbRCr7EWw9GG8TpZy6GQ0Z+9DbXQiEHko4DLus+Cr7NgvV1l8cfy9LZccOePNNePhhWLEi6z+VuI+UJsX4XrJdf/0u7N3nqauDd65vhSi0l1X4EgMyD+SOCIiegjuHfnIWAq8YiJ07AQjO+AzBmhr46U/TB1H7cWHyaUVoaoLToi8DroVhckxETyZQul6Du5etiH8nlbRm3cnvLAMHm9/jyM9NMi4X5eXG5cLldnGkuhaGDqVmYND8zsaNg9mzzVV+7954u6qPTIbvfMe4NwGbplzlS/SI37bQ4ygFHwyfuVz97jILxaVY30soBKFH/xO+8jvn2m/NA6HycvbWRDlaWU51RZTgF8sTnnffhqz2RKMcCRoB8aVhzzCEMCDzQKERAdFTcMc3JO9ye8VAWAKCwYOdY8mioAAuTA0NsLrsBIiZINoA9K7c/SUsIAZ/5sPwtLnvZye/0xywao8MGGBuq6pMXIxLQNQ0nA1//KP3690xEDU1NL9eQb31cOyqRTQvmFkQ9ytBKGkaGpzFVVfh0xdE3EdKk6J9L3fcAT/5Sdqng9ZfR+hj3Q7e+irtU6cRWJndEibkhgiInoJ7MZ+MlwuTLSCGDGHL+kOMBFoeWETV2OOdNu3tRhjk0YUpFILh1x4D90HLqAn0eXeDCIgS4dTPnwI3mPvv3/zjnBfhm2+dT9Wvf0HfuioGfPhUJ9XG/v2mQf/+5tYWEG7smg9eJAmI3cuaiBGgjHYCPmIgBKFHEgrBqlUwbx5s3Giuq5FI+tshQ8zrdu6EYJDD+yIcaAnSvyriWP6ynSMYNNn43n/fxNUtWeJr0SbuI6VJIb4Xz5iKJ5/M/cRpUIBuE7NWMSiagFBKTQV+ar1nK3CD1npNUpuhwPeAKcBBIAJcp7VuLlY/uy2uxXzzgnDi4i/Jhal5QZhRSx6jP7BjeTNr/7ifkUDVtrfR295ODGBtbfXlwrR1xSY+WHAtxx4Lw2bPzPiPO3qIcVnq85Ez4d0NEkRdKrhiUaK1QyEcZtu8pbS+sp7Baic1p7vciLLw9k33cOK9N5vf0nug1z2HWrzY+Ed7WSCSySQg3BV2q6upm9FA5OkgFbTSRmXhLCdCzsg8UFjChGia/DgNWf5Nkxd1Kb7vv+nA2uu3v4VLL2XXyDN4sClEA/5eK+4j3YNcgqrTxlSccQa88kre+qiTD1SIWasYFEVAKKUGAo8BF2mtw0qpBuAJpdQJWusjrqZnAH/RWs+yXvefwN3ABcXoZ3fmnd+vY7R1f8ys8xMDYF0WiNceWMXE66fG6z8c84dFnMHI9Cf2KSCG//rHjLD+jdufWpzZfGjvNts70L0ojWspWyD+8dxBPmTdf+rOlzjxzq8wLOa4vel3NqCeegpWrsw6k1QuezhBiCpwnGq9LBDJ9OmTeix+MteZKyupbwzRzHJ2L2uibkaDuC+VKDIPFBa/AbBe7XLyfbfml+dXtHJ7kwRFd2eSfxv33AM33dT5oOq0v6uzzoKFC40L9XHH+bd2pblVkQj7g0PYHqllwLhhWTcxhfxQLAvEJ4CNWuswgNa6SSm1DTgfiNuytNZ/Snrdtkx9VEo1Ao0AI0dmWAT3At7dcJhRmIVaRXIArCsGIrL0twnF48BUR7bTYabsj7e2Oi5MGWIgylx7AFnNh3bQtL2AFAtESbDueUdAnBp7lQBtqb8HO5VqtovzuefCIy/Gf1caUJWVMGUKfOtbpk0mAZHJAuHGsq7VN4bEban0yfs8IHOAg18R4NUuJ993a34pb28lhgRFd2eSfxvLluUWVJ32d2VvIl12Gdx1V176PsD6E4pHsbZDTwQ2Jx3bbB33xGXG/m66NlrrBVrrSVrrSUNsf85eSu0lH+Mo1bRRlurGYV3gY3N+wOjX/gCYBZ295A/OvonXTv+y94kzWSDcMRBuMpkPV6/myFPPAPDuviILiIce4vDoiRyuGcKBU85JX6GmkJSwBWLSOMeFaV+gFltOun8r8VSqWRjxlY8C0FZuLAmqqsq4L9XXm4xhNTUmhzzkJiDKJYyrG5H3eUDmAAd7sVZWll4EhMOwZYtp425n+77PmWN2nZuaOnB5tOaXYKA143sn92Pu3K65BHfle5c6yb+hGTOy/6Yy4f5dJVgvkt1YhW5JsWZfBSSvEqOkETBKqTrgj8CdWuuVBe5bjyCjG8e6dQCURVupi/4LgAPltQROPol+N17FmMZGGB2D636demKfLkxuAk89mdZ23j5lKn1iJkvI4w/u4iYojgtTOIy+4grsZalev4v2KVMJrMrujpNXXBaI9fc8zZFHfk/wii+XhNvNhOMcAXF27SaisWOo3LuDbceeydAP1plCPUuX+huvI8YjpXLaufDXvxrhEQrBY48B0Nqq2WjH6ngJiKRq02nx204oBWQeKCDZAmDd7imBAJx5Jlx1ldPOvu1wHQDrf/CsD7Uy55LsvvJdWQOi1OpPlFoxPfs3tHSpeVxfn3tQtVesy7aNBxgOvL27Pyfk2Geh6yjWduhWSHG0H2kdT0ApNRxYDtyttf5VEfrWY6hvDNHwl9tSF6M7d6YEGfWP7uGDi64ylUMBtm1LDUQCIxL8pHF1c+qp3sebmgjEnBSDI2JGzBTFApGUI10BKtpW/NzpLgEx/uZPMmnN/YydNY3mBSWwHeYKoj5u16tU7DVFBY/9598omzjBPDF+vNP+z3+Gc8/l6PDR7Bs0mrf+8z7nOdvtra7O3B45AqtXo2fMAKCi7Yjzub0ERHItk3T4bSeUAjIPFJhQCG67LbvrUlsbvPSS8W9378R7uTdlxRIQA6pa0753un74fo880ZXvnYwtZm6/3dyWkkVkyRJ48EHTL0j/m7LpiFUnHIa/PW4sED98oH9JfW6hYxRLQDwBnKaUqgdQSk0GxgPPKKWeV0qNtY6Pwkwac7TWvylS33o+l14KJLmiAOqxZc6DT30KXVYWbxNv546B8OvCdOSI9/Hzzkt4+Gr5meZOMSwQLtur/dl0WXnxMzW4XJgCVk/iMStdjUtABLC2i5WC9esTv3cws8BFF8Hq1VRvf5eB+97lhJ98nc23LjDP27+Z/v3NIj8Wg2eeiZ8/IVbHK42vX9ckcWHqTsg80IXY7in2HobWqYtoP25QKXilCc9AXZ3pQyBQ/BoQnfp8BaKUxIwbd79aWhxrRDo6KoSamqBfzMRA7In1L5nPLXScoggIrfV+4BJgkVLqReAe4EJM7Y9ROLEvdwNDgVuUUmusPzFd50pjI2r+fA7WjgJcC+iLZzhtQiECzz7L7inTef+4yUSGWvUgOuHCFF88JrFp+ZaEx5/6D8uhKJ0FYvVqdnzmal4++9rcd+jPOSceEBwtMxNeYNHC4tuNPWIg2ikrjdSjLgFhE9AaPvrR1KKCTU2e31tclLoD7+2MSpMnx9tpcGJ1xALRK5B5oGux3VNmzTKa3WsRndZnPRMdEBDhsLF6tLeb97/nnuzvkc+YhU59vgJRSmLGjV2PEIzIXLQo89h3VAg1NMCAgLFAHCkfUDKfW+g4Rdu+01qvAM7yeOo4V5v/KFZ/eh2NjfRvbGTzrQtQjy1DXzyDMT9qTGwTCjF45ePm/qmnwg744/df5pNHW4zSTBYQ6Rb+aSwQrb9LTK5S9c7r5o6XBSIcRp93HkO15hgg8uJili/6/xi+fjlDBrQy5PZrHfcrP7hEUMXEifDyyzBxov/X5wsPAbH3U18qiRgInn025VA8/aqdOcsWBg0NZhtR63imJXCJ0mQBsX8/TJgQb/fKWbOouPoy87lXeQgIn5aFtb9/n7ZppeE/LGRH5oGuxfZHnzkzvV+722fdl49+BwSEvdhsbzeXj927M7f3Sitqlw+Y2clMnaVSf6KUi+l96EPw4ovmfiyWOftSRzN4hUJw6OQD8LpxYarP4XOXWgxJb0Ps/72MMT9qhGThkEw4jF6/AQVc8MQ1BLAWiWvXwvDhpk1LS3rXoyQB8ca3H2Lf8r/Tr09iwGu/T0+BNfd7C5GmJpQ2thLj7hLhoy/MNQvQg6BnzTL3LRHRvCBM28KljGldz4DITlNldeJEZ5ax+1Rd7exat7VRdDzSuB7zb8d5NCwyP/6xCXYmtSiPqqyEYcPgjTccIRYKwZgx8OabtA0YTOX+Xeyb/HFHlNrj3aePY4HYYWIq6NePM178ufMGHhaIrau3cNw1afrq2g477YUFXNDwZeY2hWQCEQSf+FlEh8MwbZqzMFyRrrRPUqHSdOdqajLuSx1ZbLp3tyMRuO46Z7qw61K6+9TdFpSlImZsNs55hPLv3MUyttFGORVEicbKGf6TKMwvh2jUbO64bkPl5eytiXKkspw+FVGCl3q3c9/23WrCnur7bAYmp/TDz/dYagHxvREREEIqTU1o3Y4isb4DU6fGs+jw7ru0lVfh6UDicmFqnv889T+4AoDWpNaxqgwuTEkxC+2UUZacwGXZMmhspHlBmHGzplBBNN5ebdgAq1Y5s8xx1iK9T5+uFRBeaVy1Z/h6cXn44YSH/2IEu0efxb99cpgRYf/93+YJW0BA/Huu/NrlcNddDDp7fMpzCS5M27aZW7v+g42HgDjml3fTfN6/e1tmmppoRxFAo2jn3LYmmkRACEJeWbrU8VKNRFITsNmLvAsmVHImpBUQmawI2XDvbgcCZv1pk1yXQBaUOfL885z8nS+m1v4B2GX9pSFo/cXb+uWyy2D06IQvyu/3mFPxQyEvlG5SeqHraGigXZUnuKYoMAtuW0AAFdEWjxeTYIHY86gTOFtGNKHZ6FsuMXe8LBlnnx2/e7hmCE9+/L9T21gZfXYva6KcaLwQXsIF0L6y2Atat4CIJvanKHgVkisFAWHFJ9g9+WH5d2j5zePws5+Zq7K9yLfHUWvYudPct8WZO/bFS0Bs325uk3N/ewgIRSx9YHlDAzpYFa958nxFg/jRCkIRcQfOzrg0swtT8kLvlVcSs/xk8q93xyzcd19iyFOyBaNUg5K7DX/7m7d4KCRtiZkQw2G4804jWLN9j6UaQ9KbEAuEkEooxLu33M+oeddShrO4VxUVEAwmCAtPDh3inevn8d6Gg5QNOSZ+2FgRovHXV2BNOF4WCJd1oO+Y4Vz8yKVQe73Tl+nT4+5LdTMa4Glz3F4Ax/tnX1ncLjWlZoEoIm998wEONq0l0Pi1xN39KVNg/nzaaofytynf46uzGxN3c5KzMB08aK7uffpAbW3ic5AoIOyicOksEOvXx+/a31+M8vSB5aEQZSuWs3VpEytpYO5MsT4IQr6ZOdME0La1mUvmzJnOc+7F+iFtCYik62k6tyXo2M6x282nvt7JCpQcA5FTNe1eRFr3oKRNJMgyz+cDV2FSW5RGImZPMVuWrlKOIektiIAQPBnzo0aax9RTec88jju6kZrTx8Hs2QDoXyxCRdP7ux799vcZvfVNRgEtVMeP7582ncErHiVKOaBpo5IKXDva7t15925WJOIE8dqcfnr8bn1jiOjN/QgcOcjBU86hf9se2LTJpBqxnWRXrzaN+/RxAnRLJAaiWBaI5gVh6u82IuzIrN/SzHJHRFjjXXnRJ7hwiUeMTLX1Pba0wOrV7PnmD6gFojpA+RYru5aXBcIdA2ELiGQLxAcfxEWlAtqBFyZcwdRMgeWhEKNCIWambyEIQg6EQmZx5rVAcy/WqaiEFhKu2V5uS7t3O4vBJUs6t9DPFDMgC8rsZHQPsuo3qWAQTjzRzJ+RSNrbQ9EgR/dFqB4YpG95+nZpb8dZawqrA+4A+0AAPvYxY43wKy6F4iMCQkhLfWMIGh9POR5YuYLYeR+hTHsHUVdvfRMwi8FynEll8PFmIblr+tVsPDLSVMy+9jxzxYjFEjPvuBf3kUhqZifbOff++2HBAsqPHCQWKOfdb9xN/eWTzEUqGoVzzjHtxALB7mUr4vfjNRjsRbo9nl41GcCxQGzaRPvs2dRaVqOyo4dov/O7xhfSbYFwB60nuzAlWyAaG2HWrPjOV5QKam8SaSAIXU26BZq7YnEgVgkPkiAgkt2Jdu82xchsCrHQ724B1F1BxrgBe9Pn+OMTrMJeJAiRQ/mJN0m2IGUTD0LXIwJC6DDNrylOSSMekolSQYUd/LzfFI8ZPnUcw2+6yRy7oQza23lt/nMEfnYfIyp3M+Csk+Ezn3FO4mWBiERg3jy49db4oUB7lLGzPkozK6ivrjYXxCNHjAtNqWRh8rI2FMkCUTf9I3FXrygViS5CHRAQyuVypsCJJUnnwpQtiLqxEQUcuGch29SxtN44uzTS2gqCkJElS6A1Us79YK4DMADxnAAAIABJREFU1vZxRneicJjQvHmENm6E/8nPrvahaJABb0T4JEGCRDg01sfrKyvhqqs6lg68m5Pxe3Ffs7NQiABmsSB1P0RACB3GBLcqUhN+prLlB79i3LestO6WgEi4QFk78uNv+BjlltDQrzShHnrIaZNOQDzySMKhhOrGAweaC+K+fYkCok8fE3UFiUHU4TAsXcr+NetpfW8nlSOGMOCciZ1PNp6OYlTdTkP9ZWfCdeb+1u88mLhIzyYg7O9s+PCE+g8AurwcFW1LH0R9wBQNiq19mTJg7z/eZVDy+a06Jf+0dhEPhWUCEYRSJr6IbFdEqCRIq9mUCQbTLwZXr4bzzvPcNNFAjfXHTrLH2rmoASa4D7zh84V2sQOXiOjJloyMi/QOCIhc4k0yja/92A6c7mnj39MQASF0mLoZDbQ+XWEmDDJf5Mf9Rz18y3pgCwh31h1rMR8gaVfbjwvT5Mnw8ssJMiZe3fhfvzQ73vv2wYgRiT759g66/R7hMEydim5rI743vnMD+tVVKK9k47ngFTCeqwXCEj+sX28yIwWD7NkeYdfhKqIfmsTEeVeY/rtcDMZ+ckziOSwBsXVnkF/O9bi4299ZbS1q7FjYtIl3T5hK1YcmMOwzk+HKK70tEG++CU88AUBZzIz3wLV/Y/OtC1IKGUoaRkHoPrgXka0xIyDuntvKhz8RjLs+pfz/PvVU2utdLgG7OQX7WunAoWddg+xpARL3wdLGDVjX7P1t1TzgNQe46Ky1INv49qTx7w2IgBA6TH1jiGaaaFu4lJOONtO/+fn0je2dbTCLeUjc4bAEhHZZNDRWxid7wdvS4m2BmDYNfv5z1KBB7B9Vz+bKiVRcNdPsrD80MPE93RYIe6FrC4imJmhr856E8p1gOt8CwhI/bsGlgUFALaCfe4XYhxfyzuyfMeabn3Ned+hQ4nms72nxb4J8V3tcvN1pXK2JZvQzD5kc3v/8p/Pcww9z+NtzCb693lxc/vxnT6uLemxZSkFDyestCN0H9yKy4geVcBh+NKeVQ/MSg6YT/ocnTEhzNm97dkeEQaezB1npwKHnXIPsIoD29PuLX8DVV2cxqFvX9Rf+Uc3t67Iv4DMFMKezMmQb354y/r0FERBCpzAB1iF44AG4Pr2AeOuhVZxoP/CyQFguTC0nTKDmbRO4pYYOhbvugq9+1bSJxeJuMAQCZkEaiTi73J/9LAMWL+YM9xsPzCAgki0QDQ1GyMRiCWlgNVYV5nzmA/QSELlgiR83Kul+gHZGzbuO1+uGES/1dvBg4nmsmeZILEhMe1y8bdF39Ch88IG5P2SIubW/z3370F/6EjWu07YvW0agvByd1Ed98QySkTSMgtC9sBeRh+aa/Kxl7a1EInDDDeYynbIIHTHC3NbWwtChCTEJKsfMPqojGYD27jVJHT796QT3pZ5yDbIX4jbRKMyfb2JW0ooCaz493F5NjM4v4DNZEbKNb08Z/96CCAghN1xZhdpJLeR29G/POQ+8YiAsC0RN3zLn2HHHwSmnJL7P3r3mtrYWdu0yV5hMPpv2gvXGG+Hmm2n9YC+VwJ7VG6g944TENqEQTJ8Oy5bRMmIMhyNlDN61yVhB8um+BPm3QDQ0xGMS4qdzPW1/HwHa2feHZ50n0lggouVByto9Lt62SNi1y7Tt08ep72CPf7IoARNw/bWvoYD9a9ZzaFcLLV+6KsV9CSSIThC6KxV9KuEgVAdaCQTMZa693WMRussqU9zQYFyHkuhr/RWChF3x5++CW26B8eMT2vSUa5C9EHc7AGivjSE31nwaKaumjM4v4DNZEbKNb08Z/96CCAghN8qchf/+gaMYuO/dhF38Ybv/6bS1F88eFoiEANxIJDVDUrKAcFsgkgVEOAzPWBWwN28GwKpfxKDVT7G39XwTxOsOoraKoVV/ZzbVl19udqra2500sHmgeUGYkc1bGJC9qX9CIVNdad06OO0044oVDHJgy1767tmC7RzWRiWDPj4JbA2RxgJx7Y1BamszxECsXGmaRwNsWhA2lij7uUOHUkLrdXkFyrKbD4Csn13yegtC9yPYrxJ2wOybWgmMg5tuMovH8nLYssVckkMhnOr1gwcXtX/Ju+KvXV9jLOPJGykU9hpUrADtUMjsfS1dagwtf/qTme4yigJrPp12YTVzQpn7mOlzZLMiZBtfmQO6DyIghNxwWSAGffkiOO009txxD4O2bwCg9r3m1Nd4WCASgqS9BMTu3dabDHLapBMQTU0Zd/XVm0ZUvPtmGyuvDTOVJkZt3WqerKx0/lpbzfu4BU8HaV4QpvKeeQzZu5Hx29+ggmhqo1yDqO36GQsXwqRJACYYPBwmOu1jlEeO8PYPH2H8p8fAd6zXpLFAnDghyG1XeryHLcisdpWthxg7a5pJmfuVDyU0jQX7sLf/KAITxlH3w9kyGwhCT8cqMX3Nla1wilMxetEiePBBl+uMbYGw3R+LRPKu+D/fsQTE4cNFWdTbAc2LFpk+FCNA2L0Q9/UZrfl06KjqhJodyWQLdBYrQu9BBISQGy4LBBUV0NjIumW7mbL9/6S4M8XxSOOaVUDs2WNuLUtBRgHR0GD6YjmBJi/P28dPgDXvsHzBm3w19m0CtKMDyvTVTmPat695z8OHOy0gXntgFROvn4otsdIG9uWa2tWdYcpNKET5ccNh82bGXzwx0eqQxgKRNo3rP/6R8DAhZe7VZyc8V37m6Qx5PkNgvSAIPQv7ev3Vr0JLC6FgkJPei9DYGqSCCG1Hgxz32Qi0W/FTb/jNs5ofknfFT/63GngUdv/rcMGz/tgL7pYWZ6+o2AHCvnb1faZx9RPoLFaE3oEICCE33JWVrZ1wk+a1kipXFeoEPNK4pgiI1qTXPvwwAAfe2WV21zMJiFDIXNWs1KZq504ORYPsP1pp/O+r34c1f+LC2JNxi0C8Lp61kxYXEIcOQV1d1mHwouWX/0tZ9ma5B1a7A8STcWdPcouyNBaItALiC1+AZ57xTpkbCDizM5jgSEEQegfhsEnXDPDKK/HDg62/ODtd9//nf8yqugNF3HKxFCTvio87YCItDrx3qOBZf+wFty0elCrRAGGfAkICnQUbERBCbiRbIHDSvE64dirl7R7Vnr1cmNyCwcsCYdFvw0tOm0wXvKQtkITgvB/8AIA+uESLnd3JLSDA00fWL8ecMhjW+GiY5rNunv1zqn6zkKoxx2V2BcokIOyxaWlJGOPDD/6a6MpXnGJ52QSENdGrhQvZ31qVmDIXjHi0zr//7d35jfMQBKF0SeMymjWVqqv+QjbyUR8gYUp4ziSAqKs+XPDFsHvBXV4OV1zhvz5podyrPM/rU0BkclHqyUX4hFREQAi54WGBACvN63dqYceO1Nd4BVG7aW1Nu6iOk01AZMLqZ01VDKySEOrMM+Gll5wFtJ1hKAcB0ff1tf4aRlPjIv51xe2c+ND3TVDye2tpn/IUgVUrva/KtoDwGgd3+lXX+/Q5sgteXeUUy6uvN0+kExBgJvvGRgZAYsrccBh95Eh8wdD/1VWeheIEQeiBuFfIHWFGairndOS9PoB1fe8fOFxQf317QZ22LkaW1xbCvSrteTswn3q5KEkRuN6HCAghNzwsEHHSxA788+F1nHJ9Q+rrbdJYIBL2uNxpXL123jNh9bMs6prw7HPkyQLx9tfv5oTn/+CvsYeAqH7q0fiCXAFE27xnTa0zX/jdAsJFwu5ga6uTXjGTgEhHU1PKIa9CcYIg9ECSXEbZuTNt/YUEV9IOuC/l3W3GdX0vlL++n6rLmYRLoYqqpT1vZzfkCtxfoXQRASHkRhoLBJBWQIy54ZM0V6wwVgovC0Qs5lSLdrGnbiwHv3A1ox+4NTcLhC103At324UnTwKi3yO/iN/XZDbn792wjUFJxwInj4WdrzvnKK9Aec2ara2O61Xy+EOigIhX/TYkFMuz29mfvyM0NNBeVk4g5oynV6E4QRB6KD5W4QkL6v8Hy6f7X2DmPbOPbWE+fDjHE6Un04Laz269p2hqa4NvfAP+8hczf0Wj5rrfgdubY+XMjEVpo5yKWJS6e8rh/0WdOk1r1nQoNiVjf4UejQgIITcyWSDSLOzj2XsaQ6kWCPsK5LFwr/vJt6m78ELIl4BwY5vf3VmYoNMCQo0fBztfT8kA5UXrO++nHKuddCK4EhkFnvx9x92XIDGI2hIHh08+nYMHYPj2V1FVVSZF67XXmnadsUCEQpQ9u4pd/zWPyFvvpy0UJwhC7yXXHeq8Wgry4KKajUwLar+ZjFJE05WzYPHinPpVBYxwH/ggqcHixab+UQdFhKRv7X2IgBBywy0AfFggNK7sPZBogaioMAvhNAKCoUOdBW6+BYRt8Ui2QPjZobKTfK9fz+EtO9nFEGqrzOv2DToRPe5katf8Oe3Lq471yPJkp621mTDB+8WZAqghMYjaou8Z4+m7dKkzu02enD2IOhuhEINXPt651wqC0OMpqR1qt4CYODGty1Vnbg/vi3CgJchpVRE+OC7I0X0RKkcMYcB/EXfv+sa+CBP1OH4cmM3LlaG0Y5EimqxCngWnAwHubiR9a++iaAJCKTUV+Kn1nq3ADVrrNUltFPA94PNADHgZmKW1LpydUciNZAHgxmNh3/xvl6GumeVk73ELkGDQWcB6CYjt2/MjILxcfQ4cMLe2gLAff/e7HJlzF9F9B6msLqeqri/cfLNzcQ2H4SMfgVgMDfQBRrIhftpBn/84jBgBGQTEgJFWzqJ77+XQ/Q/xXvkohpdb6Wpt0u2UZYsD8XBhorLSfFe1tUao7NqVaoERhAIg80DvJZcd6rxn93npJef+hg3p21m4LcmZ3FHtOcB9Ne4LsDPxPWqAz7CBiwJPsf6eldS7PlTGzzpiBLz1Vtb+5kwHAtyF3ktRBIRSaiDwGHCR1jqslGoAnlBKnaC1duXS5DLgQuB0rfVRpdRi4EfADcXop9AJOmiBOO2lhYmvSScgPHb+27/WSGDsWPMgGnXa5MMCYQuGYNBcwR991Dx+/31nMjiEyWU+a5Z53NgIK1bE6zh4TixbtoDd53S0tcGtt6LnzaMvcDKvopPPllz4zcavBcLlwhT//MOGGQGxY0fuFghByILMA0JndqgLkt3HI/FDJrKmpO1gO7ttWXsb9bubAPOBsn5WuybRSScZK3merCbx28pKuOqqTlkfhN5HsSwQnwA2aq3DAFrrJqXUNuB84ElXuy8A87XWdsqYe4HlyMRRunTQApES8+B+fVVVigUiIQC5rc2YcCsqoK2N2BubTaG2DRvSu/h4kUlAVFaaySVLdejojTez846fMSi2C1smuYOT40yYkD1LVDQKTzyRmHXJPtuwYcbyks4CkS0Gwi0gkgOlLYF39JPTqdz2vhnLdevg+OMz91cQOofMA0KHSRcvkJNVoqHBCS7Oglccm/J4TmVp60lFRYIvV9bYCDst+uLFcN552bruG6nfIHSGYgmIE4HNScc2W8cztdsM1CqlBmit9yefVCnVCDQCjBw5Mn+9FfzTQQtE84Kw476U/Hp7BwTiO+4xyijDqtRcUQl1dei2NrN7g1nkt3/hi+lrJHjhJSBsbOfcigpobU2ZEOxJoqzlCMO2v5ryXGTgEIL7XCVXx43LntkoGjXtNm4Ekiah44/PLCCyuTB5VaKurDQzxqum/9Xb3o43b5/+uY6NpSD4J+/zgMwB3YfOLlK9YidytkqEQrBqFcybZ667GXblj+yLsOmdIJVEaCXIyaMj1Aw0sQ7pjh9oCdK/yjwmEoEhQ8z72iluX3vNXPeXLEnoeNY4kQ+siOdjjunAh82M1G8QOkuxBIQCexUYJwok5/BMbmdvD3jk+gSt9QJgAcCkSZP8JLwR8k0mC4SHgBgz63yaWe6ICPfrPWIg9nx6Jlt3Bjn2WBg2e6Z3zYF0NRLSkUlABIMJec3V9u3sf2cPre/tZEDbLir37Uy/o6QUwc9dlJglIxjM7mIVjRpLxe9/b07jemp/tMZUdT50CMJhtv9wEa3/2EAdu6npXwF795qGb71lZoLkMfCqRG1bWbyqx3Z0LAXBP3mfB2QO6B7kskj1ip2YOzcPNQdCIXg8e+KHGqAlDH+23r/Gep//ngu33276UFYGcxrhtttM+5psJ73gAvjrX+HOO42IscRKKOIEXlMZhM9GODQwSN9yS9RY8Q8P//BdRn/t5MLWhRCELBRLQGwFPpZ0bCTwqEe7kUltDgH7Ctc1IScyWSA8Fs4JKVyTX+8hII45+wSOuf32hHOk1BxIVyMhHV5B1Da2tcDlrDvAfs4KmNax5DWQteivrIQPfzhVQGRzYWprSxvj0PeVVebOunW0X3Y5w9pT3xswsRbTppmYDPfV3+3CZAsI22xeUYFOqh7b4bEUBP/IPNBLyXcK12JndPKK3cipD3ZWvE2bUp7qS5IA2ZnoyquBGYs/zQW/XsncplDOi/2Syo4ldCs8d/YLwBPAaUqpegCl1GRgPPCMUup5pZQdZfpL4GqllO3z8XXgMa09tkqF0sCnBSJKGW2UJaZwTX69Vxam5HNaNQd2T5nOriET2DNlesddbjJZIDI9FwrBs8+ipk/nyOgJbB92OkdGT0BNmQLXXGMW7+eem/gavxaINC5KynLT4rXXUOnEg409M7ux3nvb719kxwtW9o7KyriVRV1zDQdOn9L5sRQE/8g80EuxF6llZflZpNpWiTlzus7lJqc+JKfpTkJ5/LmfK6eNc9uafMeCh8PGahMOpz5XCmMpdE+KYoHQWu9XSl0CLFJKaYxJ+kJMtrNROJu8S4GTgBeVUlFgPRI4V9r4tEB88IVvsGnvEOpmNKSPgaiqciwAdoYlrwV9rjUH0omEigrvythJ783jj6c3U7/3XuLjykp/QdQeFggNtFNGgJipgeE6bpPgTuUxM29Z/S9GAkPff5nY++ucdvZnCYUcC4sgFBCZB3ovhSgylo+aA7kGD3e6D1//utl0SkO6YGz7eJQKnq9oYG5D9rfy4z4m9RuEzlC0OhBa6xXAWR5PHedqEwO+Zf0J3QGfFohjG07mWK8LpktA7HntPcqPHWrqH9gL6kwWgc7y1FPex7MFO/uhf//Ex35dmDwsEBtOvYRB445h+LL7aVv2BBVATJXxwdD61AC9iRNh5syUWWDvK+8wEtvUaAejF2BMBcEHMg/0XrItUoudCahLg4dnzQKlYOFC04GkwG0ViXAoamIhqq0YCPvxwWPH8VxoNnNn+nNfkhgHoVBIJWohN/zGQKRbtLoEyMDdb9K+27jZRP/1nvlxvvBCfvrpZs2axPSwNvkQEDU1ZmKwvS38CIg0FoiJj/3ABNkB5QdNsHRAxxi6ewOBlSt8zQLBz0+Hvy9GYzJaBYjm53MKgiDkieTF/D33wO7dhRUTXbGwThBJjY0Z6y30tf7s18XH5xAs/5n/vkqMg1AoihUDIfRU3AIiUxamdItW1+sDOKlZy7XZLde/+Q0sWJCPnjp86Uvm3CSZivNRRC0QgH79Es654YmNmV/jjoFQLllTXQ1vvZUgdhRAm0esQxrG3/LvtFVUo4DW/lYRIhEQgiCUEO7FfCQCN9xgMhydf763334+yHdcRjZsEdCZz+Uldvxiu4997Wtw2WUd7bUgpEcEhJAbbhemDBaI7f+7Kuvr05ZuW7asc31LR2Mjav58Dk6YzP4Bo5zjeVpYt5a5hEgwyI6/Nqd+Nve4uS0Qgwc7x6ur4YorAEfsaDD1MHzOds0PriHQZjJ+1BwwRYj2PPSEz08iCIKQO5mCeCFxMR8ImIVyZxbLHaHQwcPJnzkXEZAPsbNkCTz4oHnttdcWTpgJvQcREEJuZLBAbPvD2vj9oU/+gs23elgSXK9///gQsbKKxMUywIwZeetunMZG+q9/gYHnnxk/FN29L+eravOCMOV7d8Ufb/rdeupmNNBKZaK1wy223DEQyQLCJXa2jJ7CjunX+HZfAti9rAmVFJI36IU/e38XgiAIecbPzrt7MX///cYYXAzLQChkajdAZoHTUbw+cy4iIFexkyxe5s8vrHVH6B1IDISQGxksEEf/sSnR/eaxZfCjJJ9P1+uPm3s9nHgi2+YtpfWV9dTWtNDvxqsy+onmRDhM+++eiKvossMHaJ86rUML9GSSF+x7lr/MOasupZkmgj/9v5z8+h/ME8GgU5fBnbmprs65b7uANTbSv7GRpPBsX9TNaKD16UqCmPfK+F0IgiDkGb+xBu4g6/r64gVUFyKY2usz33abdyYqv8HjuWRKssVLS4sJz9NaAqqF3BEBIeRGBguEnnEJzPtbfDmtL/awJLhfP3QohEIMf7xIV7SmJnDVVlCAbsvtqlo3o4H2pwPxWI6BF30EwKSuHfdNaLAEhEcxOw2oXY71ImtKWR/UN4ZoponKO/6Lk7evyvxdCIIg5JnOBPEWM61oIYKp033m5M/lFi9lZXDllZ7J9HLGtmAsXWrqnEajElAt5I4ICCE3Mlggxvyokc2Y3W598QzGeO1473OKy76xahtjk+vUFpKGBnRFpRENNh2IL/CivjHE3kUXMOiFPwMw/soPO09mylhloV/fmJodKkfqG0PQuJLNty7I/F0IgiDkGb81IIqdxtWmEFmK/H5mt3iJxYxr0ZIlhYnJsMXLzJldM85Cz0P1lOKekyZN0mvXrs3eUMgvmzfDSSeZ+2++CWPG+H9tOIw+9zyUNrv1ESrZNL8psdBcoQmH2TZvKQc2bmfAuGEMm52H7Z+bboJ77zX39+93akOsWeOce9gw2L4dIMHNKyG9bA/53xRKF6XU37XWk7q6H/lA5oDuS5fWZKDrxIv9uW3XIjD7THPmOLEZglBIcpkDxAIh5EamLEzZaGoC7eQnKqeN3cuaoJgCwnKZGp7Pc9bWOvfdqWFdFojWSAw751MMx+UpoYaEIAhCL6Cri50V02UqWayIa5HQXREBIeRGpjoQ2WhooL2ikoDlQtRGJXUzGvLXt65i4EDnvis17BtPbmCsdd+dqWnD/OdoW7iUY4+FYe+sgVdfLVJHBUEQup7eUuwsnaVFXIuE7ogICCE3fPj1pyUUomxlE9vmLWXb+1Bx1cziui8Vir59nfuuwnDvrdnKGEzuZHempvp64IWfmQdTphSli4IgCKWC35iB7k6ypWXp0sTP3FM/t9AzEQEh5IbbhamjFggojAtRV+MWEC7q/mMaLX+tpoJWyojFYx1i086nbIW1FSXuS4Ig9EJ6wwLabWkpL4dFi4yY6Iq4D0HIFSkkJ+RGLhaInopLQDQvcCr11DeG2Dx/Ob88aQ7/y+cdG4S7LKkICEEQhG6PV/Vtd0G4K64oTsVtQSgUsuITciNXC0QPZPOz72Pnohoz63yaWR53zapvDHGoPsRtDWH+vfVJKmgl4Hb6bW/3PKcgCILQPciUVcq2tITDJmVrT4/7EHouYoEQckMsECn86+UPaLcclCpoNZmlXIRCMLcpxKPXLOf9a+Y47kuQICDc1gtBEAShe+CVVSoZtzUi2X3Jy3ohCKWGrPiE3HAFCTcvepH6xg9naNw7qJsxjZanq6igNW1mKbMLFQISnV4PHFZYVSNSrBeCIAilSlfVUihF/GaV8or76OqaGILgFxEQQk6sX/wCE637Y2Z9TBa8GDelZpaze1kTdTMaOjQe6wedx9msQeGyXvTy8RQEobSRRW8iuWSV6uqaGILgFxEQQk7seuqF+H1Z8DrUN4Y6NQ41X7mYo8/en9F6IQiCUErIojeVzmaV6i01MYTujwgIIScGff7jtCz/v5QTlQVvHsjFeiEIgtAVyKI3f/SWmhhC90cEhJATZsG7Qha8eaSz1gtBEISuQBa9+aU31MQQuj8iIISckQWvIAhC70YWvYLQu5A0roIgCIIgCIIg+EYEhCAIgiAIgiAIvimagFBKTVVKvayUWqeUWquUOidNu6FKqflKqQ1KqReVUs8qpeqL1U9BEAQh/8gcIAiC0HMoioBQSg0EHgOu11qfBnwTeEIp1cej+RnAX7TWE7TWk4HfAXcXo5+CIAhC/pE5QBAEoWdRrCDqTwAbtdZhAK11k1JqG3A+8KS7odb6T0mv3YYEewuCIHRnZA4QBEHoQeT1oqyUqgRWeTz1J2Bz0rHNwIlZzjcU+B5wVZrnG4FG62FEKfVahzrcMxkM7OrqTpQIMhYOMhYOMhYO4/J5MpkDSgb5jRtkHBxkLBxkLBw6PQfkVUBorVuBFL9WpdT/AWJJh6NkcKFSStUBfwTu1FqvTPN+C4AFVvu1WutJnex6j0HGwUHGwkHGwkHGwkEptTaf55M5oDSQsTDIODjIWDjIWDjkMgcUK4h6KzAy6dhI63gKSqnhwHLgbq31rwrcN0EQBKGwyBwgCILQgyiWgHgCOM3OpKGUmgyMB/6qlKpTSj2vlBprPTcKM3HM0Vr/pkj9EwRBEAqHzAGCIAg9iKIEpmmt9yulLgEWKaU0xnR9odZ6n1LqeGAUMMBqfjcwFLhFKXWLdSyitZ6a5W0WFKLv3RAZBwcZCwcZCwcZC4eijIXMAUVHxsIg4+AgY+EgY+HQ6bFQWut8dkQQBEEQBEEQhB6MVKIWBEEQBEEQBME3IiAEQRAEQRAEQfCNCAhBEARBEARBEHzTbQSEUmqqUuplpdQ6pdRapZRXrnGllJqjlNqolFqvlPqVUqqmK/pbSHyOxVCl1Hyl1Aal1ItKqWftDCg9CT9jkdT+DqVUm1JqdHF6WDz8joVSarBS6lGl1GtKqb8rpeYWu6+FpAP/H/+rlHrF+v94Til1Xlf0t5AopSqUUt+0fvNfTNOm21w3ZR4wyBzgIHOAg8wBDjIPGAo6B2itS/4PGAjsBkLW4wZgB9Anqd3lwN+BauvxYuC+ru5/F43Fp4CLXY//E3i6q/vfFWPhav/vwM+Bd4DRXd3/LvpdBIE1wEdcx+q6uv9dMA4LgZ/hJJK4GHj/TrhMAAAF9ElEQVSvq/tfgPG4zvrffxb4Ypo23eK6KfNAh8dB5oDU9jIH9PA5oINj0ePngULOAd3FAvEJYKPWOgygtW4CtgHnJ7X7AjBfa33UenwvcGmxOlkkfI2F1vpPWuvHXIe2UaS0vUXE7+8CpdQ44CbgxmJ2sIj4HYuZmMnjG9auzC+BimJ2tMD4HYf3MJNM0Ho8xDrWo9BaP6C1vpvUKtBuust1U+YBg8wBDjIHOMgc4CDzgEUh54DuIiBOBDYnHdtsHc/UbjNQq5QaQM/B71jEUUoNBb4HfLeA/eoKfI2FUqo/ZqfhSq11pEh9KzZ+fxdTMBfRW4DJwLvArwveu+LhdxzuAA4BHyiltgCNwGcK372SpLtcN2UeMMgc4CBzgIPMAQ4yD3SMTl0zu4uAUKSqpyip/U9uF7Vuu8vn9IPfsTCNlaoD/gjcqbVeWeC+FZusY6GUUsASTFXbd4vYt2Lj93dxDPCQ1vodrXU78CNgmlKqbxH6WAz8jsNtwAjgeK31SIxbwx+UUmWF72LJ0V2umzIPGGQOcJA5wEHmAAeZBzpGp66Z3eWCuhUYmXRspHU8U7uRGHW5r3BdKzp+xwKl1HBgOXC31vpXRehbsfEzFv2A04HvKqXWKKXWAMOBx5VSlxell8XB7+/iA+CA63G7668n4HccvgTcq7XeD6C1fhAzkXyo4D0sPbrLdVPmAYPMAQ4yBzjIHOAg80DH6Nw1s6sDPHwGgQwAdgH11uPJwF6gDngeGGsdvwJYBVRaj+8DlnR1/7toLEYB64EZXd3nrh4Lj9e9Q88LoPP7u/gc8BLQz3r8LXpQYGUHxuExYD4QsB5PAQ4Dg7v6MxRoXJqwAui663VT5oEOj4PMATIH9Lo5oINj0WvmgULMAd0ioEprvV8pdQmwSCmlMeaVC4E+mIuk7ae1FDgJeFEpFcVcPG/ogi4XjA6Mxd3AUOAWpdQt1rGI1npqsftcKDowFj0ev2OhtX5cKXUS8JJS6ijG//Xyrul1/unAb+I64KfAy0op2yd6htZ6V7H73AV0y+umzAMGmQMcZA5wkDnAQeaBrOTlmmmnrhIEQRAEQRAEQchKd4mBEARBEARBEAShBBABIQiCIAiCIAiCb0RACIIgCIIgCILgGxEQgiAIgiAIgiD4RgSEIAiCIAiCIAi+EQEhCIIgCIIgCIJvREAIgiAIgiAIguAbERCCIAiCIAiCIPhGBIQgCIIgCIIgCL4RASEIgiAIgiAIgm9EQAiCIAiCIAiC4BsREIKQI0qpaqXUVqXUFqVUMOm5XyilYkqpL3ZV/wRBEITCIXOA0BsRASEIOaK1PgrcARwPXGcfV0rNBa4Cvq61/m0XdU8QBEEoIDIHCL0RpbXu6j4IQrdHKVUG/AM4BjgRuBr4KXCH1vp7Xdk3QRAEobDIHCD0NkRACEKeUEpdBDwJLAc+Ctyntf5G1/ZKEARBKAYyBwi9CXFhEoQ8obX+A/AycD7wCHBjchul1PVKqReVUi1KqaYid1EQBEEoEDIHCL2J8q7ugCD0FJRSnwdOtx4e1N7mvW3AD4GzgFCx+iYIgiAUFpkDhN6ECAhByANKqQuAXwKPA23AlUqpn2qtN7jbaa0fs9qPLH4vBUEQhEIgc4DQ2xAXJkHIEaXU2cBjwPPAl4FvA+3A3K7slyAIglB4ZA4QeiMiIAQhB5RSE4CngE3AdK11RGu9GVgIfFYpdW6XdlAQBEEoGDIHCL0VERCC0EksE/TTwH7gU1rrA66nvwccBeZ1Rd8EQRCEwiJzgNCbkRgIQegkWustmMJBXs9tA/oUt0eCIAhCsZA5QOjNiIAQhCKilCrH/N+VAwGlVBXQrrVu7dqeCYIgCIVG5gChpyACQhCKy7eBO1yPjwIrgYYu6Y0gCIJQTGQOEHoEUolaEARBEARBEATfSBC1IAiCIAiCIAi+EQEhCIIgCIIgCIJvREAIgiAIgiAIguAbERCCIAiCIAiCIPhGBIQgCIIgCIIgCL4RASEIgiAIgiAIgm9EQAiCIAiCIAiC4Jv/H+20NvBt8vR7AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tree_reg1 = DecisionTreeRegressor(random_state=42)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n",
"y_pred1 = tree_reg1.predict(x1)\n",
"y_pred2 = tree_reg2.predict(x1)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"\n",
"plt.subplot(121)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"규제 없음\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n",
"\n",
"save_fig(\"tree_regression_regularization_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# 연습문제 해답"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. to 6."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"부록 A 참조."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 7."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_문제: moons 데이터셋에 결정 트리를 훈련시키고 세밀하게 튜닝해보세요._"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"a. `make_moons(n_samples=1000, noise=0.4)`를 사용해 데이터셋을 생성합니다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`random_state=42`를 지정하여 결과를 일정하게 만듭니다:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import make_moons\n",
"\n",
"X, y = make_moons(n_samples=10000, noise=0.4, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"b. 이를 `train_test_split()`을 사용해 훈련 세트와 테스트 세트로 나눕니다"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"c. `DecisionTreeClassifier`의 최적의 매개변수를 찾기 위해 교차 검증과 함께 그리드 탐색을 수행합니다(`GridSearchCV`를 사용하면 됩니다). 힌트: 여러 가지 `max_leaf_nodes` 값을 시도해보세요."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 3 folds for each of 294 candidates, totalling 882 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=-1)]: Done 882 out of 882 | elapsed: 1.7s finished\n"
]
},
{
"data": {
"text/plain": [
"GridSearchCV(cv=None, error_score='raise',\n",
" estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
" splitter='best'),\n",
" fit_params=None, iid=True, n_jobs=-1,\n",
" param_grid={'min_samples_split': [2, 3, 4], 'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]},\n",
" pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
" scoring=None, verbose=1)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"params = {'max_leaf_nodes': list(range(2, 100)), 'min_samples_split': [2, 3, 4]}\n",
"grid_search_cv = GridSearchCV(DecisionTreeClassifier(random_state=42), params, n_jobs=-1, verbose=1)\n",
"\n",
"grid_search_cv.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
" max_features=None, max_leaf_nodes=17,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
" splitter='best')"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid_search_cv.best_estimator_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"d. 찾은 매개변수를 사용해 전체 훈련 세트에 대해 모델을 훈련시키고 테스트 세트에서 성능을 측정합니다. 대략 85~87%의 정확도가 나올 것입니다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"기본적으로 `GridSearchCV`는 전체 훈련 세트로 찾은 최적의 모델을 다시 훈련시킵니다(`refit=False`로 지정해서 바꿀 수 있습니다). 그래서 별도로 작업할 필요가 없습니다. 모델의 정확도를 바로 평가할 수 있습니다:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8695"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"\n",
"y_pred = grid_search_cv.predict(X_test)\n",
"accuracy_score(y_test, y_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 8."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_Exercise: 랜덤 포레스트를 만들어보세요._"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"a. 이전 연습문제에 이어서, 훈련 세트의 서브셋을 1,000개 생성합니다. 각각은 무작위로 선택된 100개의 샘플을 담고 있습니다. 힌트: 사이킷런의 `ShuffleSplit`을 사용할 수 있습니다."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import ShuffleSplit\n",
"\n",
"n_trees = 1000\n",
"n_instances = 100\n",
"\n",
"mini_sets = []\n",
"\n",
"rs = ShuffleSplit(n_splits=n_trees, test_size=len(X_train) - n_instances, random_state=42)\n",
"for mini_train_index, mini_test_index in rs.split(X_train):\n",
" X_mini_train = X_train[mini_train_index]\n",
" y_mini_train = y_train[mini_train_index]\n",
" mini_sets.append((X_mini_train, y_mini_train))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"b. 앞에서 찾은 최적의 매개변수를 사용해 각 서브셋에 결정 트리를 훈련시킵니다. 테스트 세트로 이 1,000개의 결정 트리를 평가합니다. 더 작은 데이터셋에서 훈련되었기 때문에 이 결정 트리는 앞서 만든 결정 트리보다 성능이 떨어져 약8 0%의 정확도를 냅니다."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8054494999999999"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.base import clone\n",
"\n",
"forest = [clone(grid_search_cv.best_estimator_) for _ in range(n_trees)]\n",
"\n",
"accuracy_scores = []\n",
"\n",
"for tree, (X_mini_train, y_mini_train) in zip(forest, mini_sets):\n",
" tree.fit(X_mini_train, y_mini_train)\n",
" \n",
" y_pred = tree.predict(X_test)\n",
" accuracy_scores.append(accuracy_score(y_test, y_pred))\n",
"\n",
"np.mean(accuracy_scores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"c. 이제 마술을 부릴 차례입니다. 각 테스트 세트 샘플에 대해 1,000개의 결정 트리 예측을 만들고 다수로 나온 예측만 취합니다(사이파이의 `mode()` 함수를 사용할 수 있습니다). 그러면 테스트 세트에 대한 _다수결 예측_이 만들어집니다."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"Y_pred = np.empty([n_trees, len(X_test)], dtype=np.uint8)\n",
"\n",
"for tree_index, tree in enumerate(forest):\n",
" Y_pred[tree_index] = tree.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"from scipy.stats import mode\n",
"\n",
"y_pred_majority_votes, n_votes = mode(Y_pred, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"d. 테스트 세트에서 이 예측을 평가합니다. 앞서 만든 모델보다 조금 높은(약 0.5~1.5% 정도) 정확도를 얻게 될 것입니다. 축하합니다. 랜덤 포레스트 분류기를 훈련시켰습니다!"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.872"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(y_test, y_pred_majority_votes.reshape([-1]))"
]
}
],
"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.5.5"
},
"nav_menu": {
"height": "309px",
"width": "468px"
},
"toc": {
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 6,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}