{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Gradient Boosting: a practical guide" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.ensemble import GradientBoostingRegressor" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## An example: the california housing dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import fetch_california_housing\n", "from sklearn.metrics import median_absolute_error\n", "\n", "\n", "calhousing = fetch_california_housing()\n", "\n", "X, y = calhousing.data, calhousing.target" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ ".. _california_housing_dataset:\n", "\n", "California Housing dataset\n", "--------------------------\n", "\n", "**Data Set Characteristics:**\n", "\n", " :Number of Instances: 20640\n", "\n", " :Number of Attributes: 8 numeric, predictive attributes and the target\n", "\n", " :Attribute Information:\n", " - MedInc median income in block\n", " - HouseAge median house age in block\n", " - AveRooms average number of rooms\n", " - AveBedrms average number of bedrooms\n", " - Population block population\n", " - AveOccup average house occupancy\n", " - Latitude house block latitude\n", " - Longitude house block longitude\n", "\n", " :Missing Attribute Values: None\n", "\n", "This dataset was obtained from the StatLib repository.\n", "http://lib.stat.cmu.edu/datasets/\n", "\n", "The target variable is the median house value for California districts.\n", "\n", "This dataset was derived from the 1990 U.S. census, using one row per census\n", "block group. A block group is the smallest geographical unit for which the U.S.\n", "Census Bureau publishes sample data (a block group typically has a population\n", "of 600 to 3,000 people).\n", "\n", "It can be downloaded/loaded using the\n", ":func:`sklearn.datasets.fetch_california_housing` function.\n", "\n", ".. topic:: References\n", "\n", " - Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n", " Statistics and Probability Letters, 33 (1997) 291-297\n", "\n" ] } ], "source": [ "print(calhousing.DESCR)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']\n" ] } ], "source": [ "print(calhousing.feature_names)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=1000, random_state=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's start with a quick baseline model: linear regression (aka. Ordinary Least Squares):" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 11.1 ms, sys: 1.11 ms, total: 12.2 ms\n", "Wall time: 8.61 ms\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.pipeline import make_pipeline\n", "\n", "%time lm = LinearRegression().fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train error: 0.413, test error: 0.419\n" ] } ], "source": [ "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, lm.predict(X_train)),\n", " median_absolute_error(y_test, lm.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def scatter_predictions(y_pred, y_true):\n", " plt.figure(figsize=(6, 6))\n", " plt.xlabel('prediction')\n", " plt.ylabel('true target')\n", " plt.xlim(-1, 6)\n", " plt.ylim(-1, 6)\n", " plt.scatter(y_pred, y_true)\n", " \n", "scatter_predictions(lm.predict(X_test), y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is pretty bad: the errors (off-diagonal predictions) seems to be heteroschedastic and there is a saturation effect with many samples with `y_true == 5`. Let's check:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(y_train, bins=50);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can filter out the \"anomalies\" and make the target variable marginal distribution more \"Gaussian\" by taking the log:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(np.log(y_train), bins=50);" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 12.4 ms, sys: 2.77 ms, total: 15.2 ms\n", "Wall time: 14 ms\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.compose import TransformedTargetRegressor\n", "from sklearn.pipeline import make_pipeline\n", "\n", "\n", "lm2 = make_pipeline(\n", " StandardScaler(),\n", " TransformedTargetRegressor(LinearRegression(),\n", " func=np.log, inverse_func=np.exp)\n", ")\n", "%time _ = lm2.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train error: 0.348, test error: 0.360\n" ] } ], "source": [ "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, lm2.predict(X_train)),\n", " median_absolute_error(y_test, lm2.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scatter_predictions(lm2.predict(X_test), y_test)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 9.27 s, sys: 1.44 s, total: 10.7 s\n", "Wall time: 3.24 s\n", "train error: 0.217, test error: 0.235\n" ] } ], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.preprocessing import FunctionTransformer\n", "\n", "plm = make_pipeline(\n", " StandardScaler(),\n", " PolynomialFeatures(degree=5),\n", " TransformedTargetRegressor(LinearRegression(),\n", " func=np.log, inverse_func=np.exp)\n", ")\n", "\n", "%time plm.fit(X_train, y_train)\n", "\n", "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, plm.predict(X_train)),\n", " median_absolute_error(y_test, plm.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scatter_predictions(plm.predict(X_test), y_test)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# from sklearn.neural_network import MLPRegressor\n", "\n", "# mlp = make_pipeline(\n", "# StandardScaler(),\n", "# MLPRegressor(hidden_layer_sizes=(50, 50), activation='relu')\n", "# )\n", "# %time mlp.fit(X_train, y_train)\n", "\n", "# print(\"train error: %0.3f, test error: %0.3f\" %\n", "# (median_absolute_error(y_train, mlp.predict(X_train)),\n", "# median_absolute_error(y_test, mlp.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# scatter_predictions(mlp.predict(X_test), y_test)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 12.5 s, sys: 71.4 ms, total: 12.6 s\n", "Wall time: 6.45 s\n" ] } ], "source": [ "from sklearn.ensemble import RandomForestRegressor\n", "\n", "rfr = RandomForestRegressor(n_estimators=100, n_jobs=2)\n", "%time _ = rfr.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train error: 0.074, test error: 0.198\n" ] } ], "source": [ "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, rfr.predict(X_train)),\n", " median_absolute_error(y_test, rfr.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scatter_predictions(rfr.predict(X_test), y_test)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model size: 152.3 MB\n" ] } ], "source": [ "from pickle import dumps\n", "print(f\"Model size: {len(dumps(rfr)) / 1e6:.1f} MB\")" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1000, 8)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "147 ms ± 35 ms per loop (mean ± std. dev. of 7 runs, 3 loops each)\n" ] } ], "source": [ "%timeit -n 3 rfr.predict(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### New Histogram-based Gradient Boosting Trees" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "from sklearn.experimental import enable_hist_gradient_boosting\n", "from sklearn.ensemble import HistGradientBoostingRegressor" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 12.3 s, sys: 254 ms, total: 12.6 s\n", "Wall time: 3.37 s\n" ] } ], "source": [ "hgbr = HistGradientBoostingRegressor(max_leaf_nodes=256)\n", "%time _ = hgbr.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train error: 0.103, test error: 0.178\n" ] } ], "source": [ "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, hgbr.predict(X_train)),\n", " median_absolute_error(y_test, hgbr.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scatter_predictions(hgbr.predict(X_test), y_test)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model size: 2.4 MB\n" ] } ], "source": [ "print(f\"Model size: {len(dumps(hgbr)) / 1e6:.1f} MB\")" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.02 ms ± 3.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%timeit -n 10 hgbr.predict(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Early stopping" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 18.2 s, sys: 163 ms, total: 18.4 s\n", "Wall time: 4.97 s\n" ] } ], "source": [ "hgbr = HistGradientBoostingRegressor(max_leaf_nodes=256,\n", " n_iter_no_change=10, validation_fraction=0.1,\n", " scoring=\"loss\", max_iter=10000)\n", "%time _ = hgbr.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train error: 0.080, test error: 0.172\n" ] } ], "source": [ "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, hgbr.predict(X_train)),\n", " median_absolute_error(y_test, hgbr.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "147" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hgbr.n_iter_" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model size: 3.6 MB\n" ] } ], "source": [ "print(\"Model size: %0.1f MB\" % (len(dumps(hgbr)) / 1e6))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10, 5))\n", "ax.plot(hgbr.train_score_, label=\"train\")\n", "ax.plot(hgbr.validation_score_, \"--\", label=\"validation\")\n", "ax.set_xlabel(\"Boosting iteration (trees)\")\n", "ax.set_ylabel(\"Negative loss (MSE)\")\n", "ax.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Explaining what the model learned" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp8AAAGRCAYAAAAjCtjlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd5hU9fn+8fezvcDSe1ukiA0Q1woioAhWxIJgQ6Niixrzi9FojCZfo0RNNLFFrGisoKjBioKKIiK9C1hoLtJ3Ydk+n98fcyArsssszMyZnblf17XXzpw5cz7P7uw98+yp5pxDRERERCQakvwuQEREREQSh5pPEREREYkaNZ8iIiIiEjVqPkVEREQkatR8ioiIiEjUpPhdQLg1bdrU5ebm+l2G1HEVgQqWblxKaUUpTbKa0L5Be5Is9P/VZs2atdE51yyCJcY05VD8pgwqg+KvmjIYd81nbm4uM2fO9LsMqcO2FG+h/9j+JG1K4sruV/L0nKfJaZDDmDPGMKDjgJCaUDNbGYVSY5ZyKH5TBpVB8VdNGdRmd5EqtpVu49SXTmXJxiVMOH8CY84Yw2eXfoaZMfCFgbR/sD3Xv3s9k7+fTGWg0u9yRURE6hw1nyJV3P3Z3cxYO4NXznmFQZ0HAdC7fW/mXT2P5896niPbHMlTc57i3NfOJeACPlcrIiJS98TdZneR/fHmN28y8ICBDD1o6M+m10urx8U9LubiHhdTVFbEko1LSE1O9alKERGRuktrPkU8yzctZ9mmZZze9fQa58tOyyavdV6UqhIREYkvaj5FPO8sfweA07qc5nMlIiIi8UvNp4hn4rKJHNzsYDo26uh3KSIiInFLzacIUFhayKcrP+X0LjVvchcREZH9o+ZTEkZJRQlz8uewvWz7Lx6b9O0kKgIVe93fU0RERPaPmk9JGLdMuoVeY3pR/976dP5XZ658+0q2lW4DYOLyiTTKaMSx7Y71uUoREZH4plMtSUJYX7SeMbPHcFqX0zi6zdHM+2kez859lpn5M3l7+Nu8s+wdTulyCilJioSIiEgk6ZNWEsJD0x+itKKUv5/8dw5seiAA7694n/PGnUf3f3dna8lWHeUuIiISBdrsLnGvoKSAR79+lHMOPmdX4wkwuPNgpl42lazULFKSUhjcebCPVYqIiCQGrfmUuPf4zMcpLC3kD33+8IvHerbsyexRs1lVsIrGmY19qE5ERCSxqPmUuBNwAVYVrCInPYf05HQenP4ggzoNolerXnucv0W9FrSo1yLKVYqIiCQmNZ8Sdx6d8Sg3vH/Dz6btaa2niIiIRJ+aT4k7n636jNb1W3PzcTezaccmmmQ1oW+Hvn6XJSIiIqj5lDg0O382x7U7jt8c8xu/SxEREZHd6Gh3iStbirfw3ZbvOKLVEX6XIiIiInug5lPiypx1cwCqPbhIRERE/KXmU+LK7PzZgJpPERGRWKXmU+LKrPxZtG/QnqZZTf0uRURERPZAzafEldn5s7XWU0REJIap+ZS4UVhayLJNy+jVUs2niIhIrFLzKXFj7rq5ABzRWke6i4iIxCpfm08ze8bM1pvZwmoeNzP7l5mtMLP5ZqZVWlItHWxUe8qgiP+UQ0k0fq/5fA4YXMPjpwBdvK9RwONRqEnqqNn5s2lVrxUt67X0u5S65DmUQRG/PYdyKAnE1+bTOfcZsLmGWYYAz7ug6UBDM2sVneqkrpmVP0ub3GtJGRTxn3IoicbvNZ970wZYXeX+Gm/az5jZKDObaWYzN2zYELXiJHYUlRWxdONSHWwUfiFlEJRDkQjSZ6HElVhvPkPinBvjnMtzzuU1a9bM73LEB/N+mkfABbS/p4+UQxF/KYNSV4TUfJpZBzM7ybudaWb1I1vWLmuBdlXut/WmieyyrXQb//zqn0B8H2zkUw6VQRGPPgtFwmOvzaeZXQmMB57wJrUF3oxkUVW8DVziHel3DFDgnMuP0thSB0z5fgrd/92dcYvG8cfj/0i7Bu32/qQ6yMccKoMi6LNQJJxSQpjnOuAo4CsA59xyM2sejsHN7GWgH9DUzNYAdwKp3jj/Bt4FTgVWADuAy8IxrtR9xeXF3PrRrfxrxr/o3LgzUy+bSu/2vf0uK5IikkNlUCRk+iwUCZNQms9S51yZmQFgZimAC8fgzrkRe3ncEQy8JLhtpdvITM0kJSmFWT/O4qIJF7F041KuP+p6Rp80mqzULL9LjLSI5FAZFAmZPgtFwiSU5vNTM7sNyDSzgcC1wH8jW5ZIUElFCde8cw3PzX0OgJz0HIrKimhZryUfXvQhAzsN9LfA6FEORfylDIqESSjN563A5cAC4CqCq/+fimRRIgDrtq9j6KtDmb5mOtcdeR3NspqxpWQLmSmZ3Nz7ZhpnNva7xGhSDkX8pQyKhEkozWcm8Ixz7kkAM0v2pu2IZGGS2FZsXkH/sf3ZXLyZ8eeN55yDz/G7JL8phyL+UgZFwiSUUy19TDBgO2UCH0WmHJGgv33+NzYXb+aLX32hxjNIORTxlzIoEiahNJ8ZzrntO+94t+P+6A7xT3F5Ma8tfo1zDz6Xni17+l1OrFAORfylDIqESSjNZ5GZ7Tpzt5kdARRHriRJdG8ufZPC0kJG9hjpdymxRDkU8ZcyKBImoezz+RtgnJn9CBjQEjg/olVJQhs7byztG7SnX24/v0uJJcqhiL+UQZEw2Wvz6Zz72sy6AQd6k75xzpVHtixJVGsL1zLpu0nc1uc2kiykq78mBOVQxF/KoEj4hLLmE+BIINebv5eZ4Zx7PmJVScL6z/z/EHABLulxid+lxCLlUMRfyqBIGOy1+TSzF4BOwFyg0pvsAAVOwso5x9h5Yzmu3XF0adLF73JiinIo4i9lUCR8QlnzmQcc7F3eSyRiZv44kyUbl/DE6U/4XUosUg5F/KUMioRJKDvVLSS4Y7VIRL288GXSktMYdsgwv0uJRcqhiL+UQZEwCWXNZ1NgsZnNAEp3TnTOnRmxqiThBFyA8YvHc3Knk2mY0dDvcmKRcijiL2VQJExCaT7vinQRIl+v/ZrVhau5e8DdfpcSq+7yuwCRBHeX3wWIxItQTrX0qZl1ALo45z4ysywgOfKlSSIZt3gcqUmpnHmgViLsiXIo4i9lUCR89rrPp5ldCYwHdh4F0gZ4M5JFSWJxzjF+8XgGdhqoTe7ViJccbi3Zyofffuh3GSK1Fi8ZFIkFoRxwdB3QGygEcM4tB5pHsihJLDN/nMnKgpWce9C5fpcSy+Iih3+a8idOefEUnpz1pN+liNRWXGRQJBaEss9nqXOuzMwAMLMUguc2EwmL8YvHk5KUwpBuQ/wuJZbFRQ7vPfFeVmxewaiJo8jfns8dfe9g588kEuPiIoMisSCUNZ+fmtltQKaZDQTGAf+NbFmSKJxzjFs8jhM7nkjjzMZ+lxPL4iKH2WnZvDX8LUb2GMmdn9zJpW9dyvJNy/0uSyQUcZFBkVgQSvN5K7ABWABcBbwL/DGSRUnimJ0/m++3fs95B5/ndymxLm5ymJqcyrNDnuX242/nxfkv0vWRrpzw3Am8OP9FKgOVe1+AiD/iJoMifttr8+mcCzjnnnTOneecO9e7rU0NEhaPfv0oGSkZnNXtLL9LiWnxlkMz4+4Bd7PqplXce+K95G/L56IJF9HziZ68s+wd6vCPJnEq3jIo4qdq9/k0swXUsD+Lc657RCqShPHD1h94Yf4LXJt3LU2ymvhdTkyK9xy2rt+aW/vcyi29b2H84vHcNvk2Tn/5dIZ2G8ob57/hd3kicZ9BET/UdMDR6d7367zvL3jfL0I7WUsY3PfFfRjGzb1v9ruUWJYQOTQzzjvkPM7qdha/n/R7HvrqIVZsXkHnxp39Lk0kITIoEk3VbnZ3zq10zq0EBjrnfu+cW+B93QKcHL0SJR6tLVzL03Oe5rKel9E2p63f5cSsRMthanIq1x0V/Iz/YMUHPlcjkngZFImGUA44MjPrXeXOcSE+T6RaD0x7gMpAJbf2udXvUuqKhMlh58ad6dSoE+9/+77fpYhUlTAZFIm0UM7zeTnwjJk1AAzYAvwqolVJXFtftJ4nZj3BRd0vomOjjn6XU1ckVA4HdRrE2HljKa0oJT0l3e9yRCDBMigSSaEc7T7LOdcD6AF0d871dM7NDsfgZjbYzL4xsxVm9otVYGZ2qZltMLO53tcV4RhX/PWnKX+irLKMP/T5g9+l1BmJlsPBnQdTVF7EF6u/iPRQIiFJtAyKRNJe13yaWTpwDpALpOy8uoNz7i/7M7CZJQOPAgOBNcDXZva2c27xbrO+6pz79f6MJbFj+prpPDHrCW465iYObHqg3+XUGYmWw/4d+5OalMoHKz5gQMcB0RpWpFqJlkGRSAplf5W3gCFABVBU5Wt/HQWscM5955wrA17xxpE4VRGo4OqJV9Omfhv+3O/PfpdT1yRUDuul1aN3+97a71NiSUJlUCSSQtnns61zbnAExm4DrK5yfw1w9B7mO8fM+gLLgJucc6v3MI/UAY/MeIR5P81j3HnjqJ9e3+9y6pqEy+HgToO59eNb+XHbj7Su3zrSw4nsTcJlUCRSQlnzOc3MDot4JXv2XyDXO4nvJGDsnmYys1FmNtPMZm7YsCGqBUpo1hau5Y4pdzC482DOOegcv8upixIuh4M6DwLgw28/3O9liYRBwmVQJFJCaT77ALO8naHnm9kCM5sfhrHXAu2q3G/rTdvFObfJOVfq3X0KOGJPC3LOjXHO5Tnn8po1axaG0iScKgIVXPDGBQRcgIdPeZid+0pJrSRcDnu06EHLei354Fud71NiQsJlUCRSQtnsfkqExv4a6GJmHQkGbThwQdUZzKyVcy7fu3smsCRCtUgE3TH5Dj5b+RkvDH1BV6zZdwmXQzPjlM6nMHbeWNYUruHUzqdyzsHn0LVJ12gML7K7hMugSKSEcqqllQT/Kxvg3d4RyvNCWG4F8GvgA4JBes05t8jM/mJmZ3qz3WBmi8xsHnADcOn+jivRNXHZREZ/MZpRvUZxUfeL/C6nzkrUHD5w8gPcfvztFJcXc9vk2+j+eHfeX6GDkCT6EjWDIpFgztV8aVozuxPIAw50znU1s9bAOOdc7xqf6JO8vDw3c+ZMv8sQ4Lst35E3Jo/chrlMu3waGSkZfpcUNWY2yzmXF8blJXwO1xSu4cyXz2TRhkVMOH8Cp3Y5NazLl/iiDOqzUPxVUwZD+a9tKMHV/EUAzrkfAR2qLDXaXLyZU18MNgfjzhuXUI1nhCR8DtvmtOWjSz7isOaHMfTVobz9zdt+lySJJeEzKBIuoTSfZS64etQBmFl2ZEuSuq60opShrw7l+63f8+bwN+nUuJPfJcUD5RBonNmYSRdPokeLHgx9dSj3Tr2XgAv4XZYkBmVQJExCaT5fM7MngIZmdiXwEfBkZMuSuirgAlz61qV8tvIzxp41lr4d+vpdUrxQDj2NMhsxeeRkhh0yjNsm38aZL5/J5uLNfpcl8U8ZFAmTvR7t7px7wMwGAoVAV+BPzrlJEa9M6qTRn4/mlYWvMPrE0Qw/dLjf5cQN5fDn6qXV46WzX6JPuz7c9MFNHPf0ccy4cgY56Tl+lyZxShkUCZ9QTrUEsADIJLi5YUHkypG6bOrKqdwx5Q6GHzqc3/f+vd/lxCPlsAoz47qjruPgZgcz8IWBjPrvKF4+52WdR1YiSRkUCYO9bnY3syuAGcDZwLnAdDP7VaQLk7pl446NjHh9BAc0OoAnTn9CDUCYKYfV69+xP//X//94ddGrjJk1xu9yJE4pgyLhE8qaz5uBw51zmwDMrAkwDXgmkoVJ3RFwAS6ZcAkbdmxg+uXTtekzMpTDGtzS5xY+XfkpN75/I8e0PYYeLXv4XZLEH2VQJExCOeBoE7Ctyv1t3jQRSitKufTNS3lvxXs8OOhBDm91uN8lxSvlsAZJlsTzQ5+ncWZjLnjjAioCFX6XJPFHGRQJk1DWfK4AvjKztwju5zIEmG9mvwVwzv0jgvWJz1ZuXcmoiaNITUqlUWYjmmU146QDTmJAxwEUlhYy9NWhTFs9jb/0+wvX5F3jd7nxTDnci+bZzXn01Ec5+7Wz+c/8/3Bpz0v9LkniizIoEiahNJ/fel87veV918l1E8CYWWP46LuP6NmyJ0s2LiF/Wz4PTn+Q7NRsstOyKSwt5NVzX2XYIcP8LjXeKYchOKvbWeS1zuPPn/6ZCw67gLTkNL9LkvihDIqESSinWvozgJllOed2RL4kiRXOOV5Z9AondjyRDy/+EAhuZv/kh094+5u3WbZ5GX8d8FeOanOUz5XGP+UwNGbG3f3vZvCLg3lq9lNce+S1fpckcUIZFAmfUI52P9bMFgNLvfs9zOyxiFcmvpuxdgbfbfmOEYeO2DUtPSWdQZ0H8ehpjzLp4klqPKNEOQzdyZ1Opk/7Ptz92d3sKFePIOGhDIqETygHHD0EDMLbsdo5Nw/QZWsSwMsLXyYtOY2hBw31uxRRDkNmZvx1wF/J357PozMe9bsciR/KoEiYhNJ84pxbvdukygjUIjGkMlDJq4te5dQup9Iwo6Hf5QjKYW307dCXQZ0G8fuPfk//sf15ZeErlFaU+l2W1HHKoEh4hNJ8rjaz4wBnZqlm9jtgSYTrEp99uvJT1m1f97NN7uIr5bCWXjn3Fe4ZcA8rt65kxOsj6PpIV6atnuZ3WVJ3KYMiYRJK83k1cB3QBlgL9PTuSxx7ecHL1Eurx+ldT/e7FAlSDmupYUZD/nD8H1hxwwrev/B9UpJS6PtsX+6Zeg+VAa2wklpTBkXCJJSj3TcCF0ahFokBzjk27NjA60teZ8iBQ8hKzfK7JEE53B9JlsSgzoOYc9Ucrpp4FbdPvp2ZP87k9WGv6zKwEjJlUOTn3lr6FnPWzeFPJ/yJJAtpL85dqm0+zexhgifS3SPn3A21Gkli2oKfFnDxhItZtmkZxRXFAFx4mN5n/aYchk9Oeg4vnf0S3Zt357bJt/HKwlcYcZh2K5GaKYMiv7Ro/SIumnARBzU9iFv73EpGSkatnl9TqzoTmAVkAL2A5d5XT0Bnbo4jRWVFDBs/jHXb13Htkdfy4KAHmThiIoM7D/a7NFEOw8rM+H3v35PXOo//9+H/o7C00O+SJPYpgyJVbC7ezJBXhlAvrR4Tzp9Q68YTaljz6ZwbC2Bm1wB9nHMV3v1/A1P3sWaJQTe8dwPfbPyGjy75iAEdB/hdjlShHIZfclIyj536GEc/dTR3TrmTBwc/6HdJEsOUQZH/qQhUMHz8cFYXruaTkZ/QJqfNPi0nlI30jYCcKvfredOkjlpdsJrtZdsBeGnBSzwz9xluP/52NZ6xTTkMoyPbHMmoI0bx8IyHmf/TfL/LkbpBGZSEtq10G5dMuIRJ303i8dMe59h2x+7zskK5tvtoYI6ZTQGM4El179rnEcVX//3mv5z5ypkAtMhuQUFpAb3b9ebOfnf6XJnshXIYZn8d8FfGLx7PyDdH8u4F79Kqfiu/S5LYpgxK3Am4AOu2r8O54G7NDTIaUC+t3i/mm/njTEa8PoLvtnzH3f3v5leH/2q/xg3laPdnzew94Ghv0i3OuXX7Nar4oryynN9N+h1dm3Tl0h6X8u2WbymuKGb0iaNJSQrl/xDxi3IYfk2ymjD2rLEMGz+MvCfzmHD+BF0uVqqlDEo8Kass4z/z/8Poz0ezfPPyXdNTklLon9ufod2G0q1pN+aum8vM/JmMWzSOFvVaMGXkFPp22P8Le4XUcXgBe2u/RxNfjZk1hmWblvH28Lc548Az/C5Hakk5DL/Tup7GtF9N46xXz6Lvs30Zc8YYLulxid9lSYxSBiUWBVyA1QWr2Vqyla0lWykPlNMiuwUt67Uk4ALMzp/NrPxZfLvlW8oqyyivLGf6mumsLlzN4S0P51+D/7XroKEVm1cwYekErn332l3Lb1O/DRd3v5j7T76fxpmNw1KzVncliIKSAu769C765fbTieNFqujRsgdfX/k1w8YNY+SbI9m0YxM3HXuT32WJiOzRttJt5G/PZ+H6hUxcNpF3lr/D+qL1e31em/ptyEjJIDU5lW5NuzHmjDEM6jToF+c7Hn3SaBZvWMyawjX0bNmTFvVahP1nUPOZIEZ/PpqNOzbywMAHdGJtkd00zWrKexe+x4VvXMhvP/wthaWF/OmEPykrIgmgvLKcTcWbyEzJpF5aPZKTkn/xeEFpAdvLtlMZqCTgAgBkpWaRlZpFanIqW4q3sKl4E5WBSnq07BGWXdlKK0pZWbCSxRsWM231NKatnsa8n+btOmAYoEF6A07pcgr9OvSjWXYzGmY0JNmSWV+0nnXb11ERqKBXq14c3upwctJzahjtf8yMQ5ofwiHND9nvn6E6NZ1kvsZ1q865zeEvR8Jt045NPD/veR6c/iAXdb+II1of4XdJUgvKYfSkp6TzyrmvcOV/r+SuT+8if3s+9w28L+Q3bIlPymB8KS4vZuqqqXyw4gOmrprKqoJVrC9aj6tyHYHMlMxdV+ypdJWUVJTUaoxGGY0Y1HkQp3Q+hePbH09uw9xd/8huKd7CyoKVACRbMgWlBUxbPY0vVn/Bkg1LdtWxo3wH+dvyd91PS04jr3Uel/W8jLY5bWlZryUHNDqAo9scTWpy6n7/XqKtptZ8FsGrOuzpX38HHLC/g5vZYOCfQDLwlHNu9G6PpwPPA0cAm4DznXM/7O+4iaCgpIDr3r2OcYvHUVZZxnHtjmP0iaP3/kSJNcphFKUkpfD0mU/TLKsZD0x7gDeXvsnok0ZzSY9Lan35OIkbymAdUlZZxuINi1nw0wKWbVrG8s3L+WHrD2wp2UJhaSGbdmyiPFBOenI6x7Y7ljO6nkHbnLY0y25GcXkx28q2UVRWtKvpS7IkctJzyEnPoX5afVKSUkiyJByO4vJiisqLKKsso1FGI5pkNaGssowPvv2Ad5e/yysLXwGgVb1WdG3SleWbl/Pjth/3WHeXxl3o2bLnrkYyPTmd3Ia5dGzYkS5Ngo/ty8ncY1VNJ5nvGMmBzSwZeBQYCKwBvjazt51zi6vMdjmwxTnX2cyGA38Dzo9kXfHAOcfIN0fyzvJ3uCbvGq7sdSWHtTjM77JkHyiH0ZdkSdw38D6GHTKM69+7nsveuowHpz/IDUfdwIjDRpCVmuV3iRJFymB0BVyArSVbWV+0nk07Nu3axL2jfAdfrf2Kz1Z+xuz82WSnZdM0qymNMxtTGaiktLKUbaXbWLZpGeWBciCY5dyGuXRq1InchrnkpOfQJLMJfTv05YTcEyKW5eGHDifgAiz4aUFwc/maaXy7+VsGHjCQQ5odQqfGnTCMSldJRkoGR7Y+MiL7VcaykHZKMLNGQBeClxcDwDn32X6OfRSwwjn3nTfGK8AQoGrghvC/86iNBx4xM3M7T0gle3T/tPt565u3eGjQQ9x4zI1+lyNhohxGV17rPL741Re8tOAl7vviPq747xXcPOlm+uX227UJrW/7vtxw9A3aNzRBKIORU1ZZxj++/Ad/nfrXn+3TWJVh9GjZg/MOPo+yQBkbd2xkS/EWUpJSqJ9WnxbZLTij6xn0aNmDHi160KlxJ9KS/bkCapIlBeto2YNrjrzGlxpi2V6bTzO7ArgRaAvMBY4BvgT293I4bYDVVe6v4X/nT/vFPM65CjMrAJoAG3ercRQwCqB9+/b7WVbd9skPn/CHj//AsEOGccPRN/hdjoSJcuiPJEviou4XceFhFzJ11VQe/fpRFq5fiGGUVJTwxpI3WF+0nrsH3K0GNM4pg5Hz6Q+fcs0717Bk4xLOPPBM+uf2p3l2c5pkNtl14E5KUgo9WvagYUZDn6uVcAhlzeeNwJHAdOdcfzPrBtwT2bJqxzk3BhgDkJeXFzf/CdbWpz98yvDxw+nSuAtPnfGUPgzji3LoIzOjb4e+Pzu5csAFuHri1dzz+T0kWRJ/6f8XZS6+KYNhVlJRwi2TbuFfM/5FbsNcJo6YyGldT/O7LImCUJrPEudciZlhZunOuaVmdmAYxl4LtKtyv603bU/zrDGzFKABwZ2tpYpVBau4edLNvLboNdo3aM8b579B/fT6fpcl4aUcxpgkS+Lfp/8b5xx3T72bddvXcf3R19O9RXe/S5PIUAbDaMFPC7jgjQtYuH4hNxx1A/eedK/2p04goTSfa8ysIfAmMMnMtgArwzD210AXM+tIMFjDgQt2m+dtYCTBTRvnApPjaR+XcHh2zrNc9+51ANx1wl3c3PtmBTg+KYcxKMmSeOKMJ8hKzeKxmY/x1Jyn6N6iO5cffjm/OvxXe7xGstRZyuB+mJ0/m7Fzx7Jww0KWb1rO6sLVtMhuwbsXvMspXU7xuzyJMqvN36+ZnUDwP673nXNl+z242anAQwRPL/GMc+6vZvYXYKZz7m0zywBeAA4HNgPDd+6UXZ28vDw3c+bM/S0t5hWXF/Prd3/NM3OfYUDHATw75FnaN6g7+/jEOzOb5ZzLi9CylcMYtHHHRl5d+CrPz3+eGWtn0DCjIdfkXcONR9+YcEeyxgJlcP8y6Jxja8lWVhasZE3hGsoqgz9mZaCSNYVr+G7Ld6wqXEX9tPq0rt+a1vVbc3jLwzmyzZFkpWbhnGNlwUqmrpzK4zMf58s1X5KZkkn3Ft3p0qQL3Zp048ojrqR5dvN9rlFiW00ZrLb5NLMc51xhdSfYjdUT68b7h15RWRETlk7gvi/uY8H6Bfzx+D9yV7+7fnFFBvFXuD74lMO66as1X3H/tPt5Y8kbNMpsxDNnPsOQbkP8LiuhKIN7zmDABbjwjQtpmN6QxpmNaZDRgA1FG/ih4AdWbl3JlpItbCvdRmFpIcUVxdUuPyc9hw4NOrC9bDs/bvuR0spSIHhg0EFND2JN4Rq2lGwBoHPjzvz6yF9zac9LaZDRIDI/sMScmjJY02b3l4DT+fkJdqt+3+8T60roSipKuPG9G3lp4UtsL9tObsNc3rngHU7tcqrfpUlkKYd10NFtj2b8sPEs2bCEiyZcxFmvnsW1edfywMkPkJma6Xd5UjtxlcEd5TuYnT+bLcVb2Fy8mUpXueuE5rkNc+nSpAv10+rvWqPZoWEH2ua03XWCc8NoXb81jTMb7zrAzjnHhh0b+Hrt10xbPTRiq30AACAASURBVI056+ZwbNtj6dWqF71a9eKI1kfoIg3yM7Xa7F4XxOsal79P+zu/m/Q7Lut5GZf2vJQ+7fsozDEskpv86oJ4zeG+KK0o5fbJt/P3L/9Ou5x2XH/U9Vx5xJU6ZUyEKYN7z6BzjqLyIrJSs/R5ImFXUwb3+tdmZh+HMk0iZ1vpNkZ/MZqBBwzkmSHP0LdDX71RJBjlsO5KT0nngZMf4ONLPqZz4878/qPf0/Yfbbnqv1cxbfU04m0FQLyKxwyaGfXS6unzRKKu2s3u3g7OWUBT76oOO09gl0PwhLcSJQ/PeJiNOzbyf/3/z+9SJMqUw/gxoOMABnQcwNx1c3lo+kO8MP8FxsweQ6dGnTjv4PMY3Hkwx7Y71rcrssieKYMi4VfTvztXEdzHpZv3fefXW8AjkS9NALaWbOX+afdzetfTObrt7he9kASgHMaZni178txZz/HT737iuSHPkdswl/un3U+/sf1ocl8Tbnr/pl1HFktMUAZFwqzaNZ/OuX+a2SPAbc45rXLzyYNfPsjWkq38pd9f/C5FfKAcxq/66fUZ2XMkI3uOpKCkgMnfT+aNpW/w0FcPMTN/JuPOG0fLei39LjPhKYMi4Vfjjh7OuUrg7CjVIrvZULSBB6c/yDkHncPhrQ73uxzxiXIY/xpkNGDoQUN5YegLvHT2S8z6cRZ5Y/KYsXaG36UJyqBIuIWyl/HHZnaO6aLFUfe7Sb+jpKJE+3oKKIcJY8RhI5h2+TRSk1M5/tnjeWbOM36XJEHKoEiYhNJ8XgWMA0rNrNDMtplZYYTrSnhTvp/C8/Oe5+bjbuagZgf5XY74TzlMID1b9uTrK7+mb4e+XP725Vz7zrXaD9R/yqBImOz12u7OufrRKET+p7SilKvfuZoDGh3AH/v+0e9yJAYoh4mnaVZT3rvwPW7/+Hbum3YfT895mjb129A2py3HtTuOK3pdQefGnf0uM2EogyLhs9fmE8A7vUQXIGPnNOfcZ5EqKtGN/nw0yzYt44OLPtDVUGQX5TDxpCSl8LeBf2NAxwFM+WEKawrXsLJgJQ9Me4C/ffE3Tux4Ioc2P5RNxZvYtGMTxRXFVAYqqXSV9GzRkyuPuJKeLXv6/WPEDWVQJDz22nya2RXAjUBbYC5wDPAlMCCypSWmVQWruOfzexhx6AhO7nSy3+VIjFAOE9ugzoMY1HnQrvs/bvuRZ+c8y9NznmbG2hk0yWpCk8wmZKVmkZyUTDLJPDP3GR6b+Rh5rfMY1WsUww8dTv10rbzbV8qgSPiEsubzRuBIYLpzrr+ZdQPuiWxZievhrx6mMlDJ6JNG+12KxBblUHZpXb81t/e9ndv73l7tPFuKt/Cf+f/hiVlPMGriKH774W+54NAL6N+xP82ymtE8uzmpyamUV5ZTEaigc+POak5rpgyKhEkozWeJc67EzDCzdOfcUjM7MOKVJaDtZdt5cvaTnHvwubRv0N7vciS2KIdSK40yG3H90dfz66N+zfQ10xkze8yuqyrtSXpyOqd0OYVhBw/j9K6nqxH9JWVQJExCaT7XmFlD4E1gkpltAVZGtqzE9OycZykoLeCmY27yuxSJPcqh7BMz49h2x3Jsu2N55JRHWFWwivVF61lftJ6KQAWpyakATF05lXGLx/Hm0jdJT05nUOdBnHvQuRzd9mja5bTT/ufKoEjYmHMu9JnNTgAaAO8752LyvB95eXlu5syZfpdRawEXoOvDXWmW3YwvL//S73JkP5nZLOdcXoSWrRxKRARcgGmrpzF+8XheX/I6awrX7HqsWVYzOjfuzIFND6Rbk240y25GVmoWWalZNM5sTPPs5jTLakZJRQkbdmxg446NlFeWA5BkSTTLbkZuw1waZjSMys+iDCqD4q+aMljtmk8zywCuBjoDC4CnnXOfRqZEmbhsIt9u+ZZ7TtQuRPI/yqFEU5Il0ad9H/q078M/Bv2D2fmzWbJhCasKVrGyYCUrNq/ggxUf8Nzc5/Z5jJz0HBqkNyAjJYPM1Ez6tOvDBYddwLHtjiXJQjn1dHQpgyLhV9Nm97FAOTAVOAU4mOAO1xIBD05/kPYN2nP2QbqCm/yMcii+SLIk8lrnkdf6lysuCksL2VqylR3lOygqK2JT8aZdm/IzUzJplt2MpllNSU9Ox+GoDFTyU9FPrNy6kpUFK9lWto3SilK2lmzl2bnP8tjMx2jfoD2t6rWitLKUssoyyivLKQ+UUxmoJD0lnezUbOql1aNdg3Z0btSZzo07c3yH4zmg0QGR/lUogyJhVlPzebBz7jAAM3sa0EWGI+RfX/2LT374hPsH3k9KUkinXpXEoRxKzMlJzyEnPScsy9pWuo03l77JhKUTKCovIj05nbTkNNKS00hJSiE5KZnSilKKyovYVrqNGWtn8Nqi1wi4AE+c/gSjjhgVljpqoAyKhFlNnU75zhvOuQpdzjYy7pl6D7dPvp2h3YZyw9E3+F2OxB7lUOJa/fT6XNzjYi7ucXHIzymrLGPl1pU0zmwcwcp2UQZFwqym5rNHlevWGpDp3TfAOefC829vgqoIVPDHyX/kb1/8jYu6X8SzQ57VWk/ZE+VQZDdpyWl0adIlWsMpgyJhVm2345xLjmYhicI5x8RlE7nlo1tYsnEJVx1xFY+d9lhM7mgv/lMORfylDIqEn1a1RVFBSQFDXx3KlB+m0LVJV14f9jpDuw1Fm3FEREQkUaj5jJLKQCUXvHEBU1dN5ZFTHmHUEaN2ndxZREREJFGo+YySO6bcwbvL3+Xx0x7n6ryr/S5HRERExBfa0TAKXl34Kvd+fi+jeo1S4ykiIiIJzZfm08wam9kkM1vufW9UzXyVZjbX+3o72nWGw/yf5nPZW5fRu11vHj71Yb/LEdklkXIoEouUQUlUfq35vBX42DnXBfjYu78nxc65nt7XmdErLzwKSgo457VzaJjRkPHDxpOWnOZ3SSJVJUQORWKYMigJya/mcwjBS5bhfT/LpzoixjnHZW9dxvdbvue1816jZb2Wfpcksru4z6FIjFMGJSH51Xy2cM7le7fXAS2qmS/DzGaa2XQzqzaUZjbKm2/mhg0bwl7svvj7l39nwtIJ3DfwPvq07+N3OSJ7Evc5FIlxyqAkpIgd7W5mHwF7Wt13e9U7zjlnZq6axXRwzq01swOAyWa2wDn37e4zOefGAGMA8vLyqltWVORvy+e2ybcxdu5YzjnoHG465iY/y5EEl6g5FIkVyqDIL0Ws+XTOnVTdY2b2k5m1cs7lm1krYH01y1jrff/OzD4BDgd+ETi/OedYsnEJ4xeP5/5p91NaUcrvjvsdd/W7SyeQF18lUg5FYpEyKPJLfm12fxsY6d0eCby1+wxm1sjM0r3bTYHewOKoVRiCikAFv3n/N7R7sB2HPHYId35yJyd2PJHF1y3mvoH3kZWa5XeJIjWJixyK1GHKoCQkv04yPxp4zcwuB1YCwwDMLA+42jl3BXAQ8ISZBQg2yaOdczEVuAemPcA/v/onZ3U7izs738nATgPJbZjrd1kioYqLHIrUYcqgJCRfmk/n3CbgxD1Mnwlc4d2eBhwW5dJCtnjDYu785E7OPfhcxp03zu9yRGotHnIoUpcpg5KodIWjfVAZqORXb/2K+mn1efTUR/0uR0RERKTO0LXd98GD0x/kq7Vf8dLZL9E8u7nf5YiIiIjUGVrzWUvrtq/jjil3MOTAIQw/dLjf5YiIiIjUKWo+a+mxrx+jtKKU+wfer9MoiYiIiNSSms9aKC4v5vGZj3N619Pp0qSL3+WIiIiI1DlqPmvhxQUvsnHHRl21SERERGQfqfkMkXOOh6Y/RI8WPeiX28/vckRERETqJB3tXkW/fv0A+OSTT37x2KTvJrFowyKeG/IcZlbjvKEuc1/mi+S8+zJ/pJYRi2NJ9O3v6+tHTsM1z77MG4nnx+pY4p99fZ0j8XkYzufvy/Mi+TOFO0+xlE+t+QxBeWU5D0x7gBbZLXSEu4iIiMh+0JrPGqwpXMOTs57kqTlP8eO2Hxl94mjSU9L9LktERESkzlLzuZuS9BIemv4Qry95nS9WfQHA4M6D+fdp/+a0rqf5XJ2IiIhI3abm0zMnfw6LD17MhuYb+OqDr+jeojt39buLi7pfxAGNDvC7PBEREZG4kNDNp3OOD779gL9/+Xc++u4jkpsk03Z1Wz6+72O6Nunqd3kiIiIicSehms+nZz9NeaCcykAl28q28cL8F1i8YTGt6rXi3hPvZeJdE0mpSFHjKSIiIhIh5pzzu4awMrMNwMrdJjcFNvpQTihitbZYrQtit7aqdXVwzjXzsxg/VZPDUPn1+voxbiL9rNEeVxnctwzGyvtrLNShGvavhmozGHfN556Y2UznXJ7fdexJrNYWq3VB7NYWq3XVNX79Hv0YN5F+Vj/HldDFymsUC3WohsjVoPN8ioiIiEjUqPkUERERkahJlOZzjN8F1CBWa4vVuiB2a4vVuuoav36PfoybSD+rn+NK6GLlNYqFOlRDUNhrSIh9PkVEREQkNiTKmk8RERERiQFqPkVEREQkauKm+TSzZ8xsvZktrObxfmZWYGZzva8/RbG2DDObYWbzzGyRmf15D/Okm9mrZrbCzL4ys9wo1pdsZnPMbOIeHrvUzDZU+b1dEcW6GprZeDNbamZLzOzY3R43M/uX9zubb2a9olDTgVV+F3PNrNDMfrPbPL79rdUVZtbOzKaY2WIvEzfuYZ6wvr4hjhn2186v/Ic4bkTyvZf3FN/e6+Tn9vS5aWaNzWySmS33vjeKcA17zGU066guK2bW0fsbXeH9zaZFqoYqtfwsOz7V8IOZLfDeE2Z608L7ejjn4uIL6Av0AhZW83g/YKJPtRlQz7udCnwFHLPbPNcC//ZuDwdejWJ9vwVe2tPvB7gUeMSn39tY4ArvdhrQcLfHTwXe836/xwBfRbm+ZGAdwRPpxsTfWl35AloBvbzb9YFlwMGRfH1DHDPsr51f+Q9x3Ijkey/vKb691+nrF6/FLz43gfuAW73btwJ/i3ANe8xlNOuoLivAa8Bwb/q/gWui8Jr8LDs+1fAD0HS3aWF9PeJmzadz7jNgs9917IkL2u7dTfW+dj/SawjBZgtgPHCimVmkazOztsBpwFORHqs2zKwBwTfGpwGcc2XOua27zTYEeN77/U4HGppZqyiWeSLwrXNuX6/kk7Ccc/nOudne7W3AEqDNbrOF9fUNccyw8yv/IY4bdiG8p/jyXie/VM3nZtXXZyxwVoRrqC6XUaujhqwMIPg3GvEa4JfZ8XIR1RpqENbXI26azxAd661Wf8/MDonmwN6q9LnAemCSc+6r3WZpA6wGcM5VAAVAkyiU9hDweyBQwzzneJs9x5tZuyjUBNAR2AA8622CeMrMsnebZ9fvzLOGKDQTVQwHXq7mMd/+1uoab7Pr4QTXNlQVsde3hjEhAq+dX/kPYVwIf7739p7i13udhKaFcy7fu70OaBGtgXfLZVTr2D0rwLfAVu9vFKLz+bJ7dpr4UAMEG+8PzWyWmY3ypoX19Uik5nM2wc2jPYCHgTejObhzrtI51xNoCxxlZodGc/w9MbPTgfXOuVk1zPZfINc5151gIMfWMG84pRDcHPS4c+5woIjgqv6Y4O13cyYwbg8P+/q3VpeYWT3gdeA3zrnCGBgzIq+dX/kPYdyw5jvE9xSpI1xwG2tUzsdYUy6jUcfuWQG6RXK83cVYdvo453oBpwDXmVnfqg+G4/VImObTOVe4c7W6c+5dINXMmvpQx1ZgCjB4t4fWAu0AzCwFaABsinA5vYEzzewH4BVggJn9Z7d6NznnSr27TwFHRLimndYAa6qsqRlPsBmtatfvzNPWmxYNpwCznXM/7f5ArPytxTozSyX4YfOic+6NPcwS9td3b2NG+rXzK//VjRuBfO/1PQV/3uskdD/t3L3F+74+0gNWk8uo1wE/y8qxBHf1SfEeivTnyy+yA/wzyjUA4Jxb631fD0wg2IyH9fVImObTzFru3K/IzI4i+LNH5Q3PzJqZWUPvdiYwEFi622xvAyO92+cCk73/LiLGOfcH51xb51wuwU3Ik51zF+1We9V97M4kuD9OxDnn1gGrzexAb9KJwOLdZnsbuMSCjgEKqmwWiLQRVLPJ3c+/tbrC+/08DSxxzv2jmtnC+vqGMmYkXju/8h/KuOHOdyjvKfjwXie1UvX1GQm8FcnBashl1OqoJitLCDah50ajhmqyc2E0awAws2wzq7/zNnAysJBwvx4uwkdNReuLYCOQD5QTXGt2OXA1cLX3+K+BRcA8YDpwXBRr6w7MAeZ7L+KfvOl/Ac70bmcQ3IS7ApgBHBDl318//nd0XdW67q3ye5sCdItiTT2Bmd7v7U2g0W6vqQGPEtw3ZwGQF6W6sgk2JA2qTIuJv7W68gX0IbjZZj4w1/s6NZKvb4hjhv218yv/IY4bsXzX8J7i63udvn72Gu3pc7MJ8DGwHPgIaBzhGqrLZdTqqCErB3h/oyu8v9n0KL0uVbMT1Rq88eZ5X4uA273pYX09dHlNEREREYmahNnsLiIiIiL+U/MpIiIiIlGj5lNEREREokbNp4iIiIhEjZpPEREREYkaNZ9xxsxc1ZM6m1mKmW0ws4m1XM4nZpbn3f5BJ0kX+TkzO8vL2z5fCcXMDjGzyWb2jZktN7M7dp5nVERqZmbbd7t/qZk9EsXxm5pZuZldHa0x44Waz/hTBBzqnSgXgifLjdZVf0QSyQjgc+97rXkZfRsY7Zw7EOgBHAdcG7YKRSSSziN4PuB9eg9IZGo+49O7wGne7Z9dice7esEzZjbDzOaY2RBveqaZvWJmS8xsApC5+0LNLNd7/EkzW2RmH+5scs2ss5l9ZGbzzGy2mXWK/I8p4g/vOtR9CJ6Ue7g37RUzO63KPM+Z2blmlmxm95vZ12Y238yu8ma5APjCOfchgHNuB8GT3N+6cwwze9bMFnjPO8ebPtjL2Dwz+9ibdpeZ/a7K2Au9vOaa2VIze9HL7ngzy4r4L0jEZ97f/mQvOx+bWXtv+nNmdm6V+bZ731uZ2WdmNtfLz/He9JPN7Esvc+O87O80Avh/QBsza1tlmZeb2TLvc/bJnWtjvSspve69F3xtZr2j8KuISWo+49MrwHAzyyB45Yavqjx2O8HLdh0F9Afu9y6hdQ2wwzl3EHAn1V/juQvwqHPuEGArcI43/UVv+s61N9G6zKWIH4YA7zvnlgGbzOwI4FVgGICZpRG8JOw7BBvUAufckcCRwJVm1hE4BJhVdaHOuW+BemaWA9zhPe8w51x3YLKZNQOeBM7xsnZeCLUeCDzmZbsQrVmV+JHpNYtzzWwuwStp7fQwMNbLzovAv/ayrAuAD5xzPQluhZjr7W72R+Ak51wvglfc+y2AmbUDWjnnZgCvAed701sTzO4xBK/XXnW3nH8CD3rvBecAT+37j163pex9FqlrnHPzzSyX4H9l7+728MnAmVXWkmQA7YG+eOH0nj+/msV/75yb692eBeR614Ft45yb4D2/JFw/i0iMGkHwgwSC/+yNIPgh9U8zSwcGA58554rN7GSge5W1LQ0I/hO3NyfhrVUFcM5tMbMzvOV+703bHMJyVjvnvvBu/we4AXgghOeJxLpir1kEgvt8Anne3WOBs73bLwD37WVZXwPPmFkq8KZzbq6ZnQAcDHzh7YqdBnzpzX8+waYTgu8BzwB/B44CPt2ZTTMbB3T15jsJOLjKbt05ZlbPOfezfVcTgZrP+PU2wQ+YfgSvybqTEVxr8k3VmWtxjENplduV7GHzvEg8M7PGwADgMDNzQDLBa1PfDHwCDCL4wfTKzqcA1zvnPthtOTv/6as67QBgu3OusJbHHVXw8y1ZGVVu734NZV1TWRLZrqyYWRLBhhLn3Gdm1pfgLmvPmdk/gC3AJOfcnvbpHAG0NLMLvfutzWxv/1QmAcdoBY02u8ezZ4A/O+cW7Db9A+D6nUfUmtnh3vTPCG52wMwOJbi5PiTOuW3AGjM7y3t+uvYrkzh2LvCCc66Dcy7XOdcO+B44nuCm98u82+97838AXOOtUcHMunq7urwI9DGzk7zpmQS3PuxcQzMJuG7noGbWiODBDX29zfY7G2GAH4Be3rReQMcq9bY3s2O92xcQPEhKJN5N439bDi4Epnq3f+B/u5WdCezMZQfgJ+fckwQ3h/cimLfeZtbZmyfby29XoJ5zro33HpAL3EuwIf0aOMHMGplZCv/bNQ3gQ+D6nXfMrCcJSs1nnHLOrXHO7Wkfl/8jGLb5ZrbIuw/wOMF9zZYQ3G9m1h6eW5OLgRu8zfXTgJb7VrlIzBsBTNht2uve9A+BE4CPnHNl3mNPAYuB2Wa2EHgCSHHOFRPcd/SPZvYNsIDgB9fOU8XcDTTyDn6YB/R3zm0ARgFveNNerTJ+Yy/TvwaWVantG+A6L9uNCGZdJN5dD1zmfSZdDNzoTX+SYHM4j+Cm+SJvej9gnpnNIbjl4p9e3i4FXvaW8yXBfTirfQ9wzq0F7gFmAF8QbHYLvHluAPK8g6AWAwl7iiZzTltgRETikbfv90Tn3KE+lyKSMHbux+mt+ZwAPLPzmAgJ0ppPERERkfC5yzv6fiHBXXLe9LmemKM1nyIiIiISNVrzKSIiIiJRo+ZTRERERKJGzaeIiIiIRI2aTxERERGJGjWfIiIiIhI1aj5FREREJGrUfIqIiIhI1Kj5FBEREZGoUfMpIiIiIlGj5lNEREREokbNp4iIiIhEjZpPEREREYkaNZ8iIiIiEjVqPkVEREQkalL8LiDcmjZt6nJzc/0uQxLcrFmzNjrnmvldh18aN0l3bdpm73W+/HXbyW7etNrHi0pK2bFpB5lNm2FJNf+vvG1zAWZGZlYGyWmpYPaLx7LrNap+rKIiKnfswJJTqJ/dYK/j1cb2LVtwgcrgHTOSUlLJyagftuVHSsAF2FawmdSUTLLT0v0up1Z+2rI6oTMoEsvirvnMzc1l5syZfpchCc7MVvpdg5/atM1mwocn1ThPIOC492/TOOrXo/b4+MefzOKHz1dzyMirSUlPrXFZn70+iabZmXRuehjL1sykeO0GXGVg1+PND86l5yEnV/v8rz/5gvTvv2PwyRdjVZrW/VVeWsLkl56j3XFnc0L7XmFbbrgFApWUl5VQWLCB9WuLyc+fT3n5Djq0P4YDszLISq/nd4m1dt/4GxM6gyKxLO6aTxGpG/LX7qB5q7RfTA8EArw+dgoA3a/89V6bwTmLl1Py40aOP/dKAPLatKlVHTM++pSSdfmcMuiSWj1vbxbOWcrqWZM4rffwGte4RtuKhatZs3YWO3Zson37Y1i16iuys5uSk9OaoqKNNGzYjlMO6keSaa8sEYkMNZ8i4ov160to0iK4RnNHQTGvPj4JAEuCtke2oeEhZ4W0nI2fzuGY0y7apxqKt26l6PvvOPW0X+3T86sTqKxgzayPOPvEK0hJqXmtbbQ45/hs0n8JBCoY1LXPrqb+iMZnVJmrgz/FiUhCUfMpIruY2Q/ANqASqHDO5ZlZY+BVIBf4ARjmnNuyv2OtLVhLfmpv6gPrf9hEq+4taJp3bq2XEygtIzUzs9bPm79gKesmfcgpQ66s9XP35pPXXqJNz34x03h+/fnnAOTUb8kxLTv6XI2IJDo1nyKyu/7OuY1V7t8KfOycG21mt3r3b9nfQUqLA6Q1DDZnyzeuIyWj9m9H5cWlJKX9ctN9TVwgwBevv0XFtm2cdvbVpIT5QJqvp3xGek5jjmvRLazLrU4gUEnB1vWkpKSRlp5J8Y5CMjLqUVxcyNJ5i8nMakRJSQEDDsjTpnQRiQlqPkVkb4YA/bzbY4FPCEPzWVHhSE4ONkOBigAVKT1qvYyCH/LJ7NCiVs+Z/t4k0ho1ZmDvs2s9Xii2rFrK2f0vi8iyq3LOMfWjd8jJaUVBwVpSUzPJzmrK1oJVNGzQjrLyHSSnpHNUs7ZY8/YRr0dEJFRqPkWkKgd8aGYOeMI5NwZo4ZzL9x5fB+yx2zOzUcAogNZts/Y6UHKyEQgEj0hPSrafHZ0eqmWr19I+q1OtnrNj5UpOG7LnI+z3146CzaTXbxTWI+b3ZOGsRZSVbic9vR5HN28PVZvL5m0jOraIyP5S8ykiVfVxzq01s+bAJDNbWvVB55zzGtNf8BrVMQCH9Wi8x3mqSk4xAhXBhrND/Was3L4I6FqrYiuKiklrE/ppgCrLy0nOyIhYczhryif07donIssGWDb/O9atW0RJaSGnHjyA5CS9hYtI3aN3LhHZxTm31vu+3swmAEcBP5lZK+dcvpm1AtaHY6yMjCRalX0OjCArJ4MlLy+j0YInSE5JoumBTWjcY++bxc2MQGVFyGOWbN1Kak6D/ai6ZqXbt5LTIDLnNS8tKWL23Jfp2X0YPRo0jMgYIiLRoL3PRQQAM8s2s/o7bwMnAwuBt4GR3mwjgbfCMd5hBxzATz+WAtD2oJb8+h/DGX7NyZx9aX/y5/1E0Ya9H1B/ZL+jWLLos5DHTM/JoXz7tn2ueW/SsnIo2r7fJwLYo/SMbM678BYqKkqYMPdtthUXRGQcEZFIU/MpIju1AD43s3nADOAd59z7wGhgoJktB07y7u//YK0y2ZBfvut+UlISqekpZNRL5/xrBrL8jRf2uoyMhvUp37Yj5DFT0tNx5eV7n3Ef1WvRni/XzI/Y8pOTUzg07zBOPHUES7Zv490lUygqiVwzLSISCdrsLiIAOOe+A35xyLlzbhNwYrjHS01NorJyz7uGZmSn07B9A7auzKdhh1Y1LseSkwhUBkhK9v9/6e5H9uCzN8ZFfJz09Cx6HHU4JcVd+GLqZLKzmrB+wzc0b96NwsJ8nAtw6kH9Il6HiMi+UPMpIr6p6bif7KZZlO8o2esyklKSwQUIeUNOBI9ET05JxQUqI7b83WVk1uOEk8/07vXeNX3RrEVRq0FEpLb8Qri1yQAAIABJREFUX1UgIiJhtXLVV36XICJSLa35FBHfuBpOyFRZXklqCJvSAxWVtVqbGYjgPp/lpSVYUvT+p6+oKGPK++NJS80mK6sxGzYup2WLQ0hLy45aDSIitaXmU0R8U1PPuH7JRg4dWfMJ051zBErLSUpODmm82V/NIrN1m9qUWCtf/PdNBhx2csSWD7B07nI2bfqWrQWrye3Qm/6djiE7o37wwbbeJT1bHRDRGkRE9oeaTxGJORVlFZhZcH/OGkyfPJ2cw0K/wtHWefMYNOji/S1vj6a99x7JqenUz2kSkeUvnbucFd9OoXHjjvTv2AuzIyIyjohIpKn5FBFflJZWkpK651WfH02eRbuj976GsmDeCvqef1VI41WW/X/27jtMyvJq/Pj3TNte2WVpS2+C0qQJFgQVJSoxdo3RBKNvoolpr0l802PyJnl/KZpibDGa2I3YYgkqVUF6753FZVlge51yfn/MLC7rltndKQucz3XttfPM3M9zDgs7nLmfu9QjIrjcnnblGY73n/0HKbm9mXnmxRG/NsDqD5dRXVPK1eOuisr1jTEmlmzCkTEmLmpr/CQmNf8WdHTHMVL6z2zzGuJyhj3GsrasHE9WdrtyDFcg4OOiYedH5doA9d4axuTYnu3GmFOD9XwaYyJu964Kbr5qQYuvPz13GvX1Adye5gtHb7UXd0pSRHPye+sRd5Te8trcyb5zUlO7k5SQHN0gxhgTI9bzaYyJi/o6P25PCzOOorAUp7++HofbHfkLA9GuPisrijhaXhTVGMYYEyvW82mMibiBg9J4eu60Ntt1dr13T3Z62G23b9+NOyOjcwGbsW75OtyJ0V3aKDEpg27p0RkyYIwxsWY9n8aYuHB7HPi8LfcYamuLgIbkzZwUdrzawkIm9fzU7qGdooEAhRuWMGvCZyN63cYCAT9HjuwkOSE1ajGMMSaWrPg0xsSFx+Okvq75AjMpM4na0sqIxvPX1eFOjOw40mX/+Q+5Q8fhcIS3zmhHrFiymIz0XlG7vjHGxJoVn8aYuAj2fAaafS25WxK1JWURjSdR2NO9uuQwU3udFfHrNpaYkM45vYZENYYxxsRSXItPEfmbiBwWkY0tvC4i8qCI7BSR9SIyLtY5GmOiw+USfL7mez5dCS58dZ/eBlNVObJlL3sXrGLfotVUH2jHJJwoFJ9ZfYezYOfSiF+3sdLSA5RXl0Q1hjHGxFK8Jxz9HfgT8FQLr18GDAl9TQIeCn03xpzk3O6Wx3y6Ep3UNSk+D63dzvI/vYAnJYkj2/bSfeQgysoqKNS3mPz1u0jt3j0WaZ9g7JQJzHvqURhxYdRiZGX1Y1edj/E25NMYc4qIa8+nqi4CjrXSZDbwlAYtAzJFpGdssjPGRJPDIQSav+vOyH798JesOOG5Zb9/hot/8zUufeDbXPXUT3G4nYz45Z2MuvF6lj/0MNrSxRqEMYGpvUQEcTjDmhzVUf2H9aa2pjRq1zfGmFjr6mM+ewMHGh0XhJ47gYjcISIrRWRlcXFxzJIzxkRHz8G5HNl54udSRUlID3b/pXTPpqroGASU7iNHUFNSGo3aMiwiEpXxpA02rFrN4JToLuVkjDGxFO/b7hGhqo8AjwCMHz8+Tv8FGWPaq6WaTURwuhwEfD4cruDbVO6IgSz51d/pNWEEB5aso8eYYeAQ/LU+NBCIxpDONkWzx7NBVmZfcjOyoh7HGGNiJayeTxHpJyIXhR4niUhadNM67iCQ3+i4T+g5Y8wpoLXaLW9kd45s3Xf8eMp3bqH7WYMp3rSbnuPPYMLd1wV7HDXAhT+8r9U93v1eH+KM/HJIqxZ9SEpOdJdB2rP3A5xRXMrJGGNirc2eTxH5MnAHkA0MIlgA/hWYEd3UAHgNuFtEniM40ahMVQtjENcYEwOt9VYO7dWLnYfXEnzbAYfTwfDZF3yqndPjISU3t9U4az5aSVKf/FbbtFdNRRlHd2/g6hlzInrdplJScqJ6fWOMibVwbrvfBUwEPgJQ1R0iEpFppSLyLDANyBGRAuDHgDsU56/Am8AsYCdQDXwxEnGNMV2fO8GFr95//Lh0XyHL//g8GlDO+dZNrPvHm+yev5Lteb2Y/LWvkpHfcnFZtXs306de1eFcyosPkZaTd3xsZyAQYOEL/2D2tFujOt5z1YfL6J47LGrXN8aYeAin+KxT1fqGN1gRcQERGeikqje28boSLH6NMacZt8eFv953/PiDXz/JWTddit/r462v/z/G33k13W6/nITlpax8/Amm//iHLRaC/tpaPEnJ7c6hpqKMxS8/jyc5nbqKEjLzhzBhxnTmP/cPep45FY8nsjsmNVVUtInZoz4T1RjGGBNr4RSfC0XkPiBJRC4Gvgq8Ht20jDGnvSaFpK+mjvypoxERVv31XwyaOZnNxcX0GjeW9c8+12oPZHt7JzUQYPErL1NfU8HlU64nITEFVWXh3hXMe/JhcgaN5two72wEkN9nAiJdfVESY4xpn3CKz+8Bc4ANwJ0Eb4U/Fs2kjDGnh9YmHAVvfHxSNAYareM58oZLTmgb8PtR1WaLTF9tLeJ2h52T3+vl3X8+Tt7wCZzXZ/Tx50WEaQMmwoCJYV+rsyoqiyhy+uiRFdnxqsYYE0/hFJ9JwN9U9VEAEXGGnquOZmLGmNObBhRxfFJMjrh6Or7qWtwpSZxx1Sc7ClUWFZF31pkt9m6uW72BpB7h700x76mH6TPuIs7JGdzx5CPkzHFjWL9ylRWfxphTSjj3c94jWGw2SALejU46xhgTtPnAAZKyEo8fD7vyAtwpnx5jmZqXx9lfvK3F6/jKyzkza2DYcV0JKV2i8ATYtn4rPfJGxjsNY4yJqHCKz0RVrWw4CD1u/8h9Y8xJQUScIrJGRN4IHQ8QkY9EZKeIPC8inljkUVlUiSNzalhtD65c1eJrAZ8XpysmKUeU3++j6PBWRqYktt3YGGNOIuEUn1UiMq7hQETOBmqil5IxJs7uAbY0Ov418HtVHQyUEBwDHnWVxVWk5GaG1fbYrt0tvhbwenG2Y8xnV7Fr034G9J8S7zSMMSbiwhnz+Q3gRRH5mODo/x7A9VHNyhgTFyLSB/gM8AvgWxIcSDkduCnU5EngJ8BDrV1n964Kbr5qQYuvPz13Wihey9fwewM4PScWjSV7Pmb/krVUF5cAUJnsIXucm7Ouv7bF63jLykhOb8f2lHHYprM5e/ctZebwTy+qb4wxJ7s2i09VXSEiw4GGlY63qao3umkZY+LkD8C9QMMWut2AUlVtWHCzAOjd3IkicgfB3dDweCKwPFCTqfDr//kmu99dzsCLJtJ9ZHDXo8q9B/jwgT/S95zJjLy6+UXk1evF5Tn5brs7nR4cYttqGmNOPeH0fAJMAPqH2o8TEVT1qahlZYyJORG5HDisqqtEZFp7z1fVR4BHAM4ana0NvZuRsv31xXzumV/gcH5S2NYVD6LfZ77Av+/5VovF58mqW/YA29PdGHNKCmdv938Q3Fx5LdCw150CVnwac2qZClwpIrOARCAdeADIFBFXqPezD3AwHsmJ00nloaOk9z5xH/eaY8cQRwQXYo/I/m2dV3hoA3TvG+80jDEm4sLp+RwPjAhtdWmMOUWp6veB7wOEej6/o6o3i8iLwDXAc8CtwKsxSajJgNDJ37iR/3zrd6T17k5K9+AYzqKCIjYWlnH2l74Y9nXajtveRKMjO2tAvFMwxpioCKf43EhwklFhlHMxxnRN3wWeE5H7gTXA4/FIovfEkVzz/P9yeNPu4xOO6vdmMvnimyLb89lF1NdXtt3IGGNOQuEUnznAZhFZDtQ1PKmqV0YtK2NMXKnqAmBB6PFuICp7SrZ6P6WFF7uP/GTB+G0Pbmu78GzvTZsuco+nrPzjeKdgjDFREU7x+ZNoJ2GMOT21eke8vbfLI3AdX309Dlf81wStr69lQP+pLW4ZaowxJ7M271Wp6kJgL+AOPV4BrI5yXsYYE3NVpUdJSGvHmqBRsvA/rzAk8eRbHsoYY8LRZvEpIl8GXgIeDj3VG3glmkkZY04PHbntHtkgJ6qrqsCdEP/dg1OSs0lLDm93J2OMOdmEM0r/LoJLsJQDqOoOoHs0kzLGnB662m33tJwe1JQVRyZuJ/gDvrYbGWPMSSqc4rNOVesbDkTERZcZkm+MMZGTlJaOtyb+s8wrKg7FOwVjjImacIrPhSJyH5AkIhcDLwKvRzctY8xpLw633buK3r3HxjsFY4yJmnCKz+8BxcAG4E7gTeAH0UzKGBMZIhL/AYwdFYfb7hGN20Frli7n6JGdcc3BGGOiqc2lllQ1ADwa+jLGnAREZArwGJAK9BWR0cCdqvrVWMTfvauCm69a0OLrkd73/VRSW1vOzOHnxzsNY4yJmhaLTxHZQCtjO1V1VFQyMsZEwu+BmcBrAKq6TkS6XEXT1Wa7A2gggKrGZY3NN+c+Tr++k3HIqbdjkzHGNGit5/Py0Pe7Qt//Efr+eWzCkTFdnqoeaFJA+WMVe+CgtLB6N2NR32k7i8/0Hv2Yv3sZ0wedE6WMWtYtexAizpjHNcaYWGrx47Wq7lPVfcDFqnqvqm4IfX0XuCR2KRpjOuBA6Na7iohbRL4DbIl3UvHgSk6mtrI87PYTL5rBsd0bo5hRyyZdMI3iI9vjEtsYY2IlnHs7IiJTGx1MCfM8Y0z8/BfBuxa9gYPAGD65i9FltNYpKQ4h4A90OkbqoMEs3bUs7PYiQkafIby3Y0mnY3dEbW0ZtfXVcYltjDGxEE4ROQf4i4jsFZF9wF+AL0U3LWNMZ6jqEVW9WVXzVLW7qn5eVY/GO6+mWrvtntEng/KColbPd7hc+OrqW20z+uxR+Gtr25XXpItnUFt2lLkLn6KmOvxe00iYcdn1rCs9EtOYxhgTS+HMdl8FjBaRjNBxWaSCi8ilwAOAE3hMVX/V5PXbgP8j2HMD8CdVfSxS8Y05VYnIg808XQasVNVXY51PR0wafwbLV71PZr+bW2yTlJ9L+cGDZA8c0GIbp8dDt4mT2hVbRDj/qqupq6rknVdewuFyk9ytJ6Oz+pGW1o3EpNR2Xa89XG4PJSX7+NBXz5Reg6MWxxhj4qXN4lNEEoCrgf6Aq2ECg6r+rDOBJTiq/s/AxUABsEJEXlPVzU2aPq+qd3cmljGnoURgOMFNISD4O7yH4AfJC1X1G3HLLEx5A7pRMreM3q20OWvMCNYuXc3EVorPzkhISWXGzbdRW1lOxdHDrN26i5JVb3DJ5KvJzOoRlZgA02Z+ljVLVxDQgM18N8acctosPoFXCfaYrALqIhh7IrBTVXcDiMhzwGygafFpjGm/UcBUVfUDiMhDwGLgXIIbRnQJrY35dDjbLroSM9PwVVSFFctXX0fxvp1UlR4FhcTUdLJ79yUpLRNxtB4rMTWdxNR0cvsN5tCufFbt28WMKBafIg6OleyhrlseSZ6UqMUxxph4CKf47KOql0Yhdm/gQKPjAqC5e2NXh9Yn3A58U1UPNG0gIncAdwD07ds3Cqkac9LJIrjAfMMwmRQgW1X9IhLJD5Gd0tmllrzVtTiTEtpsV75lM6/8ay7puT1Jzc5FHA6qSo9SWniAMTOvYfDE8JdA3bvrIKOyov8+I+Ik0X3yblBljDEtCaf4/FBEzlLVePSWvA48q6p1InIn8CQwvWkjVX0EeARg/PjxtgapMfAbYK2ILAAEOB/4pYikAO/GM7FI8tXU4gij+Cx4+V/MvuvHpGbnnvB8wO/nxZ/dzYBxU3C6wnk7BF9tFUlJaR3Ktz0yM/PjstC9McZEWzjvtucCt4nIHoK33QXQCOxwdBDIb3Tch08mFkEwSOPZuY8R/A/VGNMGVX1cRN4kOLwF4D5V/Tj0+L+jHT/c7TXbXP+9jQZ+rx+HM7xF2Z1uz/HdiwACfh8+bz2epBSCuwi3EsfnY80HH1H28S7qq8pIPuvisGJ2xqFDG6HnoKjHMcaYWAun+LwsSrFXAENEZADBovMG4KbGDUSkp6oWhg6v5DRdJNuYjgj97rwqIoOAOSJyg6qOjHdejbXZsddGA3dSAv7a1pdaAsg9/wLe+cv95J95NqlZuYBSU1HOvnUfMfSc6Tidrb8VvvP4n8gZMpbLJ12Dy+1pM14k9MgbGbdtPo0xJprCWWppn4icCwxR1SdEJJfgWLJOUVWfiNwNvENwqaW/qeomEfkZweVgXgO+LiJXAj7gGHBbZ+MaczoQkV7A9QQ/0J0F/C/BD3gxEYntNQP+QJuFlzs5vOLzvBuuYf3IM0natI+yw8EbLEnpWcy4/TufuhXf1PoV60nvNZAZQ6a22i7Sho8ZwbsfLubiwe1bJsoYY7q6cJZa+jEwHhgGPAG4gX8CnX4nVtU3gTebPPejRo+/D3y/s3GMOV2EJt/dSHBC3wsEN4l4VVV/GtfEWtDaXfX6Wi+uxNZvqbsSPATaWGQeYMMLL+IcP5kR53967mRbvYulB7ZzwRkXtBkj0pKT06mqKo55XGOMibZwbrtfBYwFVgOo6sciEv3R9saYjvgTsBS4SVVXAojISTkJz1vrw5UQ3iSgtuQMHUJJC2ND2+pdVRSnI7xxpZEkIuT3mRDzuMYYE23hrF5cr8ER+goQmi1rjOmaegLPAr8VkW0i8nOCdyu6pNZ6Pr113jaLT1VFHG2Piew5ZgyOZmazB/x+fN7We07F4SQQ8LcZIxr2H1gel7jGGBNN4RSfL4jIw0CmiHyZ4DItj0Y3LWNMR6jqUVX9q6peAMwASoEiEdkiIr+Mc3rtUlftxZXYRvEZUIILcLRu0a/+j9IN64/PdG9w7ON9rH3nX9TXVLcep80I0ZGe3itOkY0xJnraLD5V9f8BLwH/AoYCP1LVP0Y7MWNM56hqgar+VlXHE1wtojbeOTXWtBBsat323aT3an1uY8AfQMLYCam2rJT9zzzNjmXz8Xu9x+Pn5A/k4Oa11FVXtniut7qC5OT0NmNEgyMOt/uNMSbawt00eAPBrfkW0YW25jPGNE9EkkXkhyLySKOnV7dxTqKILBeRdSKySUR+Gnp+gIh8JCI7ReR5EYnIWkNlpV7SM1surkr3l+HO+9SeEidQnw9xtV2gOVwuhnztHvasWcrad/5FXXXV8bGeTren1UJYA4G4FYGlpZ/a0M0YY056bRafInI7sBz4HHANsExEvhTtxIwxnfIEwU0hpoSODwL3t3FOHTBdVUcDY4BLRWQy8Gvg96o6GCghOIO+044U15LZreXhqN3PyCExI4yezzb2ZYfgXunidDDzq/9DeXEhi5/5CwWb17Ltw3dJSE7B5e6aw2L79B4X7xSMMSbiwplK+t/A2IbdhkSkG/Ah8LdoJmaM6ZRBqnq9iNwIoKrV0sa07tDEwob7z+7QlxLc0rZhA4gngZ8AD3U2Qa/Xj8fTckq9xvakss2BAgphTDhKyctFQrPdL/ziN9mzZhlbFr+NOJ1M+OwtJGdkt3xyHNd4Lzy0EXJ7xy8BY4yJgnCKz6NARaPjitBzxpyWan21FFUW0S+zX7xTaU29iCTxySoVgwj2bLZKRJzAKmAw8GdgF1Cqqr5QkwKCa4g2d+4dwB0Avfokt5mgiHBwXx1bX1hFj8G5DBrXF4CKo5WkZkd2UY3Jd32VrQcPA8FtNfuPnsiAsZMjGiM6TspVsowxplXhFJ87gY9E5FWC74SzgfUi8i0AVf1dFPMzpksJaIBbX7mVhXsXsu3ubWQkZsQ7pZb8GHgbyBeRpwluCnFbWyepqh8YIyKZwFxgeLgBVfUR4BGAs0Znt1k1VVZ4eevFI3QbuovFz63iwlsnsWdNAYkpHvqM6Enqed3CDR0Wf20t+3Ysp+xwIQG/D3dCErn9BpPVqy/uhMSWT4xj/dezx6j4BTfGmCgJZ8LRLuAVPnkLfhXYA6SFvow5bXz/3e/zwqYX+M6U73TlwhNVnUdwnPZtBNf9HK+qC9pxfikwHziH4DJrDR9U+xAcP9ppq1ccJSXNye0PXsesuy7gvceX0mNQDrn9sln8zAq2vbUjjKsIBNquDos2bmTHgw+wa+USAFyeBOqqK/ng+UdY+fozLc52b7TEcVwUHFwVt9jGGBMt4ezt3jDjNVlVW18Mz5hT2F9X/pXffPgbvjL+K3z7nG/HO51WichUYK2q/ltEPg/cJyIPqOq+Vs7JBbyqWhq6ZX8xwclG8wlONnwOuJXgB9BW7d5Vwc1XLWjx9afnTqO8zEtSSvDz79YPdtHvrF5Mu2VSQy6sXbWD3he28ed0Otpcsglg40sv0+uKK7lgxLQTnh836zre+P0POXZwHz2HjPzUeVUlR0hIa2U8aJRlZubHLbYxxkRLOLPdzxGRzcDW0PFoEflL1DMzJg4KKwp5f8/7VNVXHX+uuKqY//vg/7jrzbuYNWQWD172YJtbMnYBDwHVIjIa+BbBOxhPtXFOT2C+iKwHVgDzVPUN4LvAt0RkJ9ANeDwSCY6fmIPDIfx81p+prarHW+9j34aD+L1+dq85QPaArDavIQ4HBAJttnO63fhrg7OX/F4vfq8Xb10t3toanG4PDmfzn8M3rljDhN5ntu8PFkEap52VjDEmmsIZ8/kHYCbwGoCqrhOR86OalTERsr5oPXO3zOUH5/+g1f25CysK+fUHv+bhVQ9T66vF7XAzJX8KqZ5U3tn1Dr6Aj+kDpvP8Nc/jckRmv/Eo86mqishs4M+q+riItLpEkqquB8Y28/xuYGJ7gg8clMbTc6e12iYlzcXlN+QSGHIZWT3SWf7qepbNXcehXe/iTnAzcc6neyKbqi2twJXa9uSms66/liV/fZT/LF9Dt/wBiDjw1tVycPMaBo4/j259BjR7nt9Xj8ud0Ob1o6Ws/CBwdtziG2NMNIT1v6iqHmjS02Mfx02XF9AAt71yG2sOrSEjMYNvTP5Gs+0eWfUI97x9D16/l1tH38rs4bP5YP8HzNs9j72le/nm5G9y6+hbGdm97WKoC6kQke8DnwfOFxEHXWiP94MHqlixfjeeM2fSb0AOAOfeMJ49awtAlcpeijvJ3eZSSxtWb2b4wLZnrXcbPJhh3/w2vfaUUPLxfgKBABm5PRl9yVUkprQ8dH3YWSNYuXUbF2f3bNefLxJUlb75k2Ie1xhjoi2c4vOAiEwBVETcwD3AluimZUznvbT5JdYcWkN+ej73vXcfVwy9gkHZg05o87c1f+PON+5k5qCZ/HnWn4+/fuWwK/k1v45H2pFyPcG1Oeeo6iER6Qv8X5xzOu4ff9tJcXkNZ09Jwu/zs2H+dnYu38cZ5w2CkUm43S4qa9vubK0tPELqOT3abOetqaVixw7yhp5L3sCwJ/CTkdeLmqVLw24fSbU1FRQVbYZueXGJb4wx0RLObPf/Au4iuLbfQYI7n9wVzaSM6Syv38sP3v8BI3NHsuRLS3A73dz++u0E9JPxgc9seIbbX7udSwZdwqs3vPqpwvRkpqqHVPV3qro4dLxfVdsa8xlVgUaz0tesPMpVt3Qnu1cGc389j00LdnC0tpLnf/M2a+d6wyo8GzjC2NvdW1NN3eGidue8ZcMOnO6I7CbabpvXbCI9o1dcYhtjTDSFM9v9CHBzDHIxJmL+vvbv7Di2g1dveJW+GX357SW/5cuvf5lfLPoFPdN68lHBRzyx9gku6H8Bc6+fS4IrfuP6okFEKvhkjSAPwVvulaoal/Whdu0oZ//eKi68uCeHi2rYtqWM0mM5lDlL2b5sD5f9+VL8iecz7NBRFv7sUfpdMK7NrTXbo7a0FFd6ervOUVUK1y/mqunx2U04EPBzbp9hcYltjDHR1GLxKSJ/pJUF7lT161HJyJhOUFWqvdX8dOFPOafPOVwx9AoA5oydw/ObnudHC34EQGZiJlePuJrHrniMZHfbE1ZONqp6fCBjaFvN2UBctvSpq/Mz58bFVFR4eXXexfgDyvQrsli5uIy1m98mKT2RpMxEKmvB6XHh9/oiWngC7Ni5l5Hp/dt1zrJ3/kO3gaNwtjATPpp83nqKj2wHKz6NMaeg1t5VV4a+TwVGAM+Hjq8FNkczKWPCoaqsK1rHG9vf4PXtr7Pq41X49ZO5cE9/7unjSyKJCM9e/SwL9i5gdN5oBmcPPhmWS4qI0J7tr4jIj4HvxTr+T7+/hmtvHoDH4+RPv9vMf/9gFLd/uzcfFU4mfUwZCSkeGgZDHPhgPRl92x7D2V6+qioS89q3J0bFob1cPaPVBQKixh/w0Td/QlxiG2NMtLVYfKrqkwAi8hXg3Ia9nUXkr8Di2KRnTPNKa0uZ89ocXt7yMoIwsfdEvnXOt0h2J+MUJyNyR3BB/wtOOCcnOYdrRlwTp4xjS0Q+1+jQAYwH2pg7HnkvPrOH3TvL+eXvxlOwv4pf/2w985dtIeOCm+mTAX2G90BV2VZxiIDPj8PjYtgVUVrJrZ0fNlyJKdTVVZOQEPue8eqqUsrLC6Fb5AtxY4yJt3DuJ2UB6cCx0HFq6Dlj4mJ14WquffFa9pft5xfTf8GcsXPIS7UZwU1c0eixD9hL8NZ7TPXOT+YPD58DQJ++KYy5wM1vvreHL/x+D8MmB9fWFBFUFYfLyeCZ50QvmTB2Qmosu/9IFmxfwsyzLolSQi3zeJKpq6+IeVxjjImFcIrPXwFrRGQ+IMD5wE+imZQxAP6An4AGUJTiqmLe2/Me83bP48VNL5KbksvC2xYyJX9KvNPsklT1i3GOz+L5hzjvwmDPnc8XwOVycNk1OewqH86G97aRlp1CTt8sPIluRITasko+XrmFgTPCu90czraaDToyxGL0pDG89/Sadp8XCYlJqeTm2HhPY8ypKZzZ7k+IyFtAw2rH31XVQ9FNy5zOarw1/Pe8/+ahlQ+dsDQSQG5yLjeddRO/ufg35CTnxCnDrk9E+gB/JDhmG4JDZe5R1YJYxC84UM2dX1jCnx6fwvRLeuFwBIu/FYvKWP/eUQo2F7Jvw0F6DulOdu/mGv0JAAAgAElEQVRMsi/Mo66yCvWHv3+F+v1IGMssBbW/+BSRdt+qj5SjRw5QVlZga3waY05J4e5wdAh4Ncq5GMPGwxu58V83svHwRuaMnUP/zP4IQqonlQv6X8CovFE4JNyC47T2BPAMwQmCENzp6Ang4lgE9/kCfO/Ho1mx7Mjx4rOgag+/vb+EK745naLdRzi85yhDJw+geN8xlv55OWfeeiaDLgl/Qn7AH0CcLW+ZejIr2FXExF5D4p2GMcZExUmxSbU5de0v289bO95iy5EtbD2ylYX7FpKekM7bN7/NzMEz453eySxXVZ9odPx3EWl+f9Eo8PuVN18rYPOGEl57eR+9+rnx1gc4WlDP+08s5VvPfLJ2ZmlROSUvVbP60bmc9z9zcCWEtwvo+m27cSaGvwB8e27THz8nEJ+dhKuqjpDa89TZ9MAYYxqz4tPEVFltGbtKdrHi4Aqe2fgMi/YtAiDFncLwnOHcMuoWfn7hz20CUecdFZHPA8+Gjm8EjsYquMMh+KWO/kMTKSyoo7JCICWX5PQSDm4tYtWbG+k/ug/demeSmZfOGZcPZe0Lb4ZdeFYfKaXw9SWcf/NXw2qvfh9OV/vf7tyJKSw9spNzcga3+9zOCGiAZYf2MrlH/5jGNcaYWGhtkfns1k5U1WOtvR4OEbkUeABwAo+p6q+avJ4APAWcTfA/zutVdW9n45rYqvXV8psPfsMfl/+RI9VHjj8/PGc49194P9eNvO60WnczRr5EcMzn7wluFvEhELNJSPkDPfz+mWGsr5nJ63+YT/G+Y9z5lxvw1fv48KU17Fi+jy1LdqEBpehIKeruzuBLwpvpXn20jPkPv8T5N38FV0J4PZ8Bnw+HK7zCtrGpV17Fghf+CdNiW3yeO2MWW9ZsjWlMY4yJlda6AlYR/E+ruYpAgYGdCSwiTuDPBMegFQArROQ1VW28gP0coERVB4vIDcCvges7E9fEji/g452d7/D1t7/O7pLdXDnsSs7NP5dB2YMYnjOcM3LOsIIzSlR1H3BlvOLXaAZbApfjToCr7r2Yh7/yHM/88HWu+Z9LOf+mCVQcreTwvmNUHK3i8EvLGXrFefQY0/bs7vqqGuY/9EKo8Ax/S1T1dbDnMyERT1IaZaWHycjs3u7zO8rpdLFv/1LGZl9pY5yNMaec1haZHxDl2BOBnaq6G0BEniO4DmHj4nM2nyzr9BLwJxER7cjgLRNVFXUVLN6/mPl75rPs4DL2le7jYMVBAhpgeM5w3r3lXWYMnBHvNE95XWVb3IZf0YA/gMPpYPoXJ7Nz+T48icHex7RuqaR1C26huXbtTnqNHxHWdauPlJI2YgCuxMT25eP34+jgNpnDxo5i1f6dTI9h8QmQldkv+HO0z2fGmFNMWO/GIpIFDAGOv+Or6qJOxu4NHGh0XMAnyzl9qo2q+kSkDOgGHGncSETuAO4A6Nu3byfTMs1RVQrKC1hVuIqtR7ay7eg2dh3bRXF1MUeqj3C0+iiK4nF6GN9rPBcOuJB+Gf0Y2m0o1428Do8z/IkhplNWNnr8U+DH8UhCRAgEgoUnwNBJA+h7Zq9OX9eVmECgtq7d56nfj8PRsZnx6vcz1JPZoXM7RQRnB3M2xpiurM3iU0RuB+4B+gBrgcnAUmB6dFMLn6o+AjwCMH78eOsV7aRNhzfxs0U/o85Xh9PhpM5Xx6rCVRyq/GR5156pPRmcPZgzu59JTlIOPdN6MiV/ClPyp5Dsjv12hCaoYVtcABH5RuPjWPL7/DgcwcKz/Egl6TmpJKaEf5u8Je6kBPy19e0+TwMBHB1clqng4DGGJbY6BD4qSksPAGNiHtcYY6ItnJ7Pe4AJwDJVvVBEhgO/jEDsg0B+o+M+oeeaa1MgIi4ggxjO2D0dvbPzHa576Tqc4qRvRl98AR8OcXDRwIuY1HsSE3pN4IzcM0hPSI93qqZtcfsgVlVSA8CS51eR0yeT9JzUlhu3YxSNr64eh7sDt89VO7xg/OBh/dm4diO9+wzv0Pkd1af3uJjGM8aYWAnnXbxWVWtFBBFJUNWtIhKJfd9WAENEZADBIvMG4KYmbV4DbiXY03oN8L6N94yev678K3e/eTcju4/kjRvfID8jv+2TjGlGbWUdH28vYsjEfuQNiNxOVBs27yQhrwO9kCIdLkAze/Sh+ti77Y/ZSZWVhyn2CLkZnR+uYIwxXUk40ygLRCQTeAWYJyKvAvs6G1hVfcDdwDvAFuAFVd0kIj8TkYZZuo8D3URkJ/At4HudjWs+raiyiOtevI6v/PsrzBw8kyVfXGKF50lKRCpEpFxEyoFRDY8bno9VHp5kDxsX7Aiv8GxHQVh36CiDc0a3Ox8R6dAi8wDicJCQlsXLC57ktaUvsHD/6g5dp72GjRrBxpLDMYlljDGxFM7e7leFHv5EROYTvPX9diSCq+qbwJtNnvtRo8e1fLI9YNR5/V7mbp3L6sLV7Di2g/1l+7l2xLV8+5xvd2rgf423hiR3UgQz7byABiisKOStnW9x77x7qfZWc/+F9/Pdc7+Ly2F7D5ysVDUt3jkAVJfVkN0ro812ZYcrcCeG9+/tw3eWUL23kJSp7Z91Hqiv79SyXufNDr4N1lVXMf/ZJ6jJGUxScnSHnnTL6UNebCfYG2NMTLS2yHy6qpY3WWx+Q+h7KtDpRea7Cq/fyz/X/5P7F9/P7pLduB1uBmYNJD0hne+++13e2P4GT131FP0z+7d5rXp/Pe/veZ83tr/BhsMb2HpkK4erDvPApQ/w9UnRXeVGVdl5bCf5Gfkkuk5ciqakpoT397zPvN3zWLx/MbuO7aLOH5w1fF7f83j0ikcZlhOJ0RTGQHJGEuMvP6vNdi//bT7Drmt97fva0grmPzaXtKH5TPvC19qdi6+uHnG5EEfH18usq6okISWVhOQUUnPz8Xrr6FofJ40x5uTRWpfDM8DlnLjYfOPvnVpkPh4S70/Er36c4sQhDlwOFy6HC1/AR0V9BeN6juPVG15l1pBZuBwuVJV/rP8Hd795N6P/Opq7JtzF9SOvZ1TeKLwBLx8VfMTCfQspriqmylvFkeojzN87n/K6clLcKYzpMYYrhl7BtqPbuHfevVw08CJG5Da/nqHX78XlcLXYO6OqHKo8RI/UHp9qU++v57mNz/G7pb9jXdE6PE4Pk3pPYlzPcewv28/6ovXsKtkFQJonjfP7nc9nhnyGgVkDGdptKNP6T7OFrE1EZeYFO2BrK+soP1pJalYySWmJx//tqiofrttCcnYSntTmV0fw1XlZ+PQb+CprmPLZW/GkpHQolyXPPE/2hIkd+4OEvP3o7+k+fCLnXDoTpzsBr7f9yz11xKCRfdi8qYARyZ1fKcAYY7qK1haZvzz0PdqLzcfMvVPvxR/w41f/8e++gA9/wM/MwTO5YugVJxR2IsIXRn+B8/qex9ff/jq/+eA3/O+S/2VA5gAOVx2myluFIKQnpJPiSSHNk8Y1Z1zDVWdcxUUDLzre+1hUWcSZD53JLXNvYdmcZbidn2zzp6o88NED3DvvXgZnD+aWUbdw/ZnX4wv42F2ym21HtrHkwBIW7VvE4arD9M3oy7UjrmXWkFnsOraLRfsX8e7udzlUeYgRuSP4/czfc7D8IIv2L+KhlQ/RP7M/Y3uO5bYxtzGt/zQm9Z50QnxjouWfD76FCCR3S6a2rJa6yvoTJv24k1wMmt1yr+e8B56m+8xJjOg+ocM51FdVgyqTc0d2+BoAKTl9qCzaj7euFofLHfXis7a2kvKyYlJTs1FVyqqOEVA/6clZOG1YjDHmJBfOOp/vqeqMtp47Gfzswp916LwBWQN4/cbXKa4q5uUtL/PvHf+mb0ZfZgyYwbT+08hKymr1/LzUPB6+/GGufuFqfrH4F/xk2k8AqKqv4o437uCZDc9wyaBLqKqv4r737+O+9+874fz89HwuGXQJo/NGs3DfQh786EF+u/S3AHRP6c75/c5nztg5zBw007arNF2Gr87Hmbd+tcPnOxI9nSo8AdTvw5kUgRvkAu7kNDQQ6PCSTeGqqS5nxbJX2bljBX37nYlLurNox39wiIOUxHQum3AT3dLyopqDMcZEU2tjPhOBZCAntMNRwztuOsGdh047uSm53Dn+Tu4cf2e7z/3cGZ/jllG3cP+i+1m8fzGqyt7Svewt3csvpv+C7537PRziYHfJbt7Y/gaZiZkMzBrIoKxB9Ezrefw635nyHUprS1myfwlDuw1lSPYQKzhNRIhIPvAUkEdwaM0jqvpAaNz380B/YC9wnaqWxCvPU11R0R6OHi3gS3c+yLrV77By2Vt89TM/BWDD3mUs2fQWsyffFt8kjTGmE1rr+bwT+AbQi+C4z4YKpxz4U5TzOiU9eNmD1PhqKKwoxCEOBmUP4qHPPMTMwTOPtxmYNbDNiUmZiZlcPvTyaKdrTj8+4NuqulpE0oBVIjIPuA14T1V/JSLfI7jk2Xdbu1DAr1QVV3U8kTov/prO39reuGELzqQI7LilwZ7PNUuWoqpR/cAXCPhxu4NDdtyeRJKSPtnaM9GTgsM+bBpjTnKtjfl8QET+BNynqj+PYU6nrMzETF689sV4p2FMs1S1ECgMPa4QkS0E73LMBqaFmj0JLKCN4vNoURnn//b7Hc2DeQ8+Q88rzu3Q+Q2qjx2jZM0aLv9s++9UNFZfU43Tk8Clo2byzob/ULjxA8654hudumZrUlIycbk8LF/6CqWlh3A4nLy7azlnZvdk58cbSU9ufZiPMcZ0da2O+VRVv4h8DrDi05jTiIj0B8YCHwF5ocIU4BDB2/Kt8tYEeP9//tLi67P+dG+Lry2b/xFpZ/RjeNbYdmR8Il9tLR88+TSzrrqzU0ssAWxctYGU7ODQl5lnXULlgAmkpGS2cVbH5fUYyLgJs9i47n2GDJ1Ej2mDefvVv/Hvne8yst8Exg+ZFrXYxhgTC+FMm3xPRK4GXratLY059YlIKvAv4BuhtX6Pv6aqKiLNvg+IyB3AHUDH9l8HVq7YwNEl65l++zfbfe7y9xdRU1CAv7YW9fu56LIv4PJ0fomiikN7Of+MC44fp6ZGt+dRVemeN4Dpl8w5/tyos6625ZaMMaeMcP6HuJPg1pY+EakltM6nqkZ3ew9jTMyJiJtg4fm0qr4cerpIRHqqaqGI9ASa3fNRVR8BHgHIGd5fW+vdbGr5B6s5umQdSf16MO22r7VrTKUGAix88mkSu+cxfepVeCIxxjNk7bLVBPw+0tMjtz99W1r7s+85tIU6Xy3D+3S8V9gYY+ItnO01u8R2fcaY6JJg1fM4sEVVf9fopdeAW4Ffhb6/GqmY3po65j/2Mp5uGVzw+bvafYvc7/Wy4NEnyBp3NlP7jo9UWgDUVlVQtHkZV190e0Sv25bKyhLKSw/jdLlxuTy4XB665yex+UANRYe3g6oVn8aYk1pY98ZCSy0NAY7v2aiqi6KVlDEmLqYCtwAbRGRt6Ln7CBadL4jIHGAfcF1bFyovPsY7Dz4TPAgtLJ/QPYvx0ybiraljy4491B46Rl3hESZefjPJ2dmtX7AZ1UeP8cE/nyFv+kVM6nZGu89vTV11FQuefZIrp30BifHuX6s+eo21q/9Ddrde1NfVEAj4Cagf9UNdfRXnjZwV03yMMSbSwllk/nbgHqAPsBaYDCwFpkc3NWNMLKnqEj5ZUq2pdm0qkZqRw/nX3nH8OOAPUFl0iBXvLsKZkkhCtwxGjbmYlIvbfzs74A/w4b9ewVdZyWVXfhl3QmLbJ4VJVVn65ptUHf2Yz5x7IwkJkbuFHy6XO4FzL7iBsydecfy5XZsKACjc/m9b19cYc9ILp+fzHmACsExVLxSR4cAvo5uWMeZk1rRAcjgdpPfqxeReN3T4mgG/n5ULP6Bswwa6TZ7M1PzI3mbfsHIjB9cvInfwGGaOmtn2CVEyYNA4qqtKqautIiExhUAgQCDg58zUZDQrn9Sk6M20N8aYWAin+KxV1VoRQUQSVHWriAyLembGGAOsXLyM8s2bQITUwYO5/Oqv4ujk8klNLX37bWpKivnc9C/hdMZ37/RevYeecLxny8c4HE4ARvbr3HajxhjTFYTzLlsgIpnAK8A8ESkhOO7LGGOiauXiZVTv28tln/lSxAvOBrWV5dSUHGb2uTdF5fqR0LDMkj/gw+mIb3FsjDGdFc5s96tCD38iIvOBDODtqGZljDnt1ZSUULZhPZ+ZfUdUxzkue+vfzBhzWdSuHwkBDeAQB/9e8TQj+45nUM+R8U7JGGM6rMXiU0QSgf8CBgMbgMdVdWGsEjPGnLzKP/6Y93700xZfn/GzH7d6vt/rY8lTTzMryoVnIBCgvroi6gvHd5YjNOP+ykm3xjkTY4zpvNZ6Pp8EvMBi4DJgBMHJR8YYExWqyvL/zKdi+za6XzgjIjsUtWbd0lWk9xwQ1RgdUVZ6mMrKY9TVVVNUdISsjG5kpeaQ6In97HtjjIm01orPEap6FoCIPA4sj01KxpiTXXqvXm32bja16oOPKFm9mvQRI7ni6q9GKbMTVR45yLmDJsUkVrgOHtjC6pVvUllZQmpqFtWV9RTsLqfWW8PUEZdyRv7YmK89aowxkdRa8elteKCqPltbzhgTrkDAT/WxY/jr60lITcWTmtpiW29NLYufeprEvB5cftV/tXuXo86oqzhGWgy3zgzHgvee5IIZt9InP7hw/q5NBYxITqDOW8uzCx4kL7MP3dLz4pylMcZ0XGvF52gRKQ89FiApdGx7uxtjWlVVWsbqeQsQj5uaggJypkxlzNmjmm278NG/MePim0jOiM+4y672wTohMQW/34fPW8+erR8j4sDrryfBnQjC8WWXjDHmZNVi8amq9g5njOmQ9LRsLj7vagAC4338e+7D6NgzP9WruerD5aQMGBC3wrPlDZ3iZ9SYi1i76i2KDu2irtJNv8REdgZ8bNm/irzMPqQkpsU7RWOM6RRbMM4YE1UOp4uss8/mw1feYOrnrjzhtdK1a5l1xe1xyqxrGjr8HLrnDWD71mUcPryVmlC9PnrgFFtiyRhzSrBR68aYqDt3wGRqCwtR1ePP1ZaV405Px+GM300WpyeB6qqyuMVvjqqSmdWDbunjuemcL3DFpC9wtPwQfXOHxDs1Y4yJCCs+jTEx4c7IwFdTc/x444bNJPboEceMYMrls3l7+dy45tBUwxjU2toKVh4pBMDldEdthydjjIm1uLybiUi2iMwTkR2h780O+BIRv4isDX29Fus8jTGR40pLp6ak9Phx/bFjjO42tJUzoi8hOYWkzFwWHVgT1zyaM+SsATidHgAmDptu22oaY04Z8foo/T3gPVUdArwXOm5OjaqOCX1d2UIbY8xJwJ2Wxrade44f1x46RGpWbhwzCpp6+RUc3rYy3ml8iseTyL79SwEY2nt0nLMxxpjIiVfxOZvgDkqEvn82TnkYY2JkeGJPAnV1AAT8AVDF5fHEOSsQh4O8MyadMB61q3C5kuKdgjHGRFy8is88VS0MPT4EtLRicqKIrBSRZSLSYoEqIneE2q0sLi6OeLLGmM5zuT0EvMG9K1Z/sIyUAV1nW8sxk8ex1lsS7zQ+pXvuULy++ninYYwxERW14lNE3hWRjc18zW7cToPdDS11OfRT1fHATcAfRGRQc41U9RFVHa+q43Nz438bzxjzaS5PAoHaOmpKSji2YgXnDTs/brl0xV7O5lRVHWF50d54p2GMMREVtRHsqnpRS6+JSJGI9FTVQhHpCRxu4RoHQ993i8gCYCywKxr5GmMip+zwx7z54E8+9fzRI4W8Oe8dPnv3z3C63bFPLKTxrkYaCEAX2+WoQUpKDmdlZMc7DWOMiah43XZ/Dbg19PhW4NWmDUQkS0QSQo9zgKnA5phlaIyJuG45PcnO7E5qdvz2Uy/avZVDu7ZQV10JBMd8NhSjPm89qoG45dbU4eLtJCWkxDsNY4yJqHit3fEr4AURmQPsA64DEJHxwH+p6u3AGcDDIhIgWCT/SlWt+DTmJJDRvRezvv6TeKfRrA+ef5TcvoNwutwkpKaRmdeHrJ75QBIfLn6egUPG0yf/jHinSXlZMW53YrzTMMaYiItL8amqR4EZzTy/Erg99PhD4KwYp2aMOYWVFX1MXVUlA8efS11VJVUlRziyfxeFOzdRVRPg47ULGTthVrzTBODg7hIu6D823mkYY0zE2arFxpjTRkJqGufeeCfd+w/FnZBIfU011WXHqK+pZt3ihXTLySctrVu80wSgrPwgR3xJ9Mlpdp6lMcactKz4NMacNhJT0sgfOe74sScpGU9ScvBg8UK65fSJU2aflpiYTkqirfNpjDn1WPFpjDlteOtqObBpNalZOWT16os7ITimcueuw+SPv4QRjtQ4Z/gJn68OtzMj3mkYY0zEWfFpjDktFO7YzJbFb+PyeCjeuxNESM3OJanHMLoPG8+EtN7xTvEEx47twZ3bdXpijTEmUqz4NMacFnatWkx27/6Mmfk5ADZv2MWxvZso3raS7No6OPe6OGd4ol49R5PgttvuxphTT7zW+TTGdDEi8jcROSwiGxs9ly0i80RkR+h7Vjxz7JSAEvD78NXXoap4ktO4bMwsvnD9jzhUuIvdu1bHO8MTHChYEe8UjDEmKqz4NMY0+DtwaZPnvge8p6pDgPdCxyelcZ+5jtrKcrYsfof1K9YT8Puoq6umtqaSqspSsrJ6xDvFE7hc1utpjDk12W33VkybNg2ABQsWxOwa7WkfbttoXLO9bSNxXle5/qlKVReJSP8mT88GpoUePwksAL4b6dgNW3F2ZmH6tq6RnJHNkEnT2Pbhuxxc8j7eihLWuBPonT+cHr0Gk5Xdq9nzXnru5wBcc8MPW40f6XY5OYOPP352wR8BuHHa11o9pyWdPb8z4hnbGNM1WfFpjGlNnqoWhh4fAvJaaigidwB3AKRkxW/7zNbk9htMbr/B7Nx1mC3P/T/8Pi9TzruBjMzu8U7tUwoL10Nev3inYYwxEWe33Y0xYVFVBbSV1x9R1fGqOj4xNT2GmXWMx5NEUnI6qWnZ8U6lWd2yB8Y7BWOMiQorPo0xrSkSkZ4Aoe+H45xPhwT8PqrLSijavZVN67Yz1hMsOFWVHduWoRqIc4afVldfEe8UjDEmKuy2uzGmNa8BtwK/Cn1/Nb7ptN+BTavZsvgdHA4naTndOVpcij81h/r6GlxOD3V1NYh0vc/hlZXF8U7BGGOiwopPYwwAIvIswclFOSJSAPyYYNH5gojMAfYBXWsxzDCseOUfnHPtHJIzs/HW1sD2fSRXVFFRfpTUtGxGj7043ik2q2/fSfFOwRhjosKKT2MMAKp6YwsvzYhpIhHkravFk5RC7oChuNweAEq9aZwR8LBh3XtUlh+ltqaSxKSus61mg/37P+Ls7CvinYYxxkRc17vXZIwxEeJOSGTg2VN55Vf/zYb3XuPI/t0EfF4SE1NJSk6nvr6mSxaeAImJ6QTneBljzKlFTrU3NxEpJnh7MBZygCMximXxTq54/VQ1N0rX7vLC+D2M9d+15dA140czh9P6d9CYruyUKz5jSURWqup4i2fxTPt0hZ+95RD/+F0lB2NMbNltd2OMMcYYEzNWfBpjjDHGmJix4rNzHrF4Fs90SFf42VsO8Y8PXSMHY0wM2ZhPY4wxxhgTM9bzaYwxxhhjYsaKT2OMMcYYEzNWfIZJRJwiskZE3mjmtQQReV5EdorIRyLSP8rx+orI/NDr60VkVidj7RWRDSKyVkRWttBmWuj1TSKysJPxMkXkJRHZKiJbROScFtpNEBGfiFzTiVjDQnk3fJWLyDeatLk59HPcICIfisjojsYznxCR/NC/082hfzf3NNNGROTB0O/OehEZF4ccpolIWaN/Iz+KcA6JIrJcRNaFcvhpM20i/h7Szvi3iUhxo5/B7ZGK3yROTN9HjTFdk22vGb57gC1AejOvzQFKVHWwiNwA/Bq4PorxfgC8oKoPicgI4E2gfyfjXaiqzS70LCKZwF+AS1V1v4h072SsB4C3VfUaEfEAyc3EdBL8Of6nM4FUdRswptE1DwJzmzTbA1ygqiUichnBCRC2sXbn+YBvq+pqEUkDVonIPFXd3KjNZcCQ0Nck4CEi+7MPJweAxap6eQTjNlYHTFfVShFxA0tE5C1VXdaoTTTeQ9oTH+B5Vb07QjFbEuv3UWNMF2Q9n2EQkT7AZ4DHWmgyG3gy9PglYIaISBTjKZ+8eWcAH3c0VphuAl5W1f0Aqnq4oxcSkQzgfODx0LXqVbW0maZfA/4FdDhWM2YAu1T1hJ13VPVDVS0JHS4D+kQw5mlLVQtVdXXocQXBoqN3k2azgac0aBmQKSI9Y5xDVIX+bJWhQ3foq+lMz4i+h3QgftTF+n3UGNN1WfEZnj8A9wKBFl7vDRwAUFUfUAZ0i2K8nwCfF5ECgr2eX+tELAj+R/QfEVklInc08/pQIEtEFoTafKETsQYAxcATodtvj4lISuMGItIbuIpgL1gk3QA820abOcBbEY572gvdQh0LfNTkpeO/OyEFRKk4bCUHgHNCt6XfEpGRUYjtFJG1BD9MzVPVFn8OEXoPaW98gKtDQx9eEpH8SMVuJNbvo8aYLsqKzzaIyOXAYVVd1YXi3Qj8XVX7ALOAf4hIZ/4uz1XVcQRvgd4lIuc3ed0FnE2w12Im8EMRGdrBWC5gHPCQqo4FqoDvNWnzB+C7qtrSf1LtFrq9fyXwYittLiRYfH43UnENiEgqwV7sb6hqeRfMYTXBfcBHA38EXol0fFX1q+oYgr3qE0XkzEjH6GT814H+qjoKmMcnPZAREev3UWNM12bFZ9umAleKyF7gOWC6iPyzSZuDQD6AiLgI3go/GsV4c4AXAFR1KZAI5HQwHqp6MPT9MMHxkBObNCkA3lHVqtC40EVARyflFAAFjXpeXiJYjDY2Hngu9DO4BviLiHy2g/EaXAasVjfXAxkAAAZUSURBVNWi5l4UkVEEbwfOVtWO/t2ZJkJjDP8FPK2qLzfT5PjvTkif0HMxy0FVyxtuS6vqm4BbRDr8+9Sa0BCT+cClTV6K5HtIu+Or6lFVrQsdPkbww2Ykxfp91BjThVnx2QZV/b6q9lHV/gRv276vqp9v0uw14NbQ42tCbTo0pirMePsJjl9ERM4gWHwWdySeiKSEJmIQuv19CbCxSbNXgXNFxCUiyQQnhGzpSDxVPQQcEJFhoadmAJubtPn/7d1biFVVHMfx70+DtKRQkopwGou00Cm0DCszLKVC0igrx1LGh/Ja0I3sSkRBFPQgZYVGmRoKZmJWXrpRSZalOZq3Lho9SFSWFoph/nvY6+hpcKZx5rjPHPt9Xmaf/+y91p7NrL0Xa619/t0jojpdg/nAxIho7WhULY1MuUuqAhYAoyNiSyvrsSSt13sJ2BgRzzSy2yJgjDL9gZ0RsT3Pc5B0SmFtoaQLye6LJev0SOqaXtpDUkdgCLCpwW4lu4e0pP4G62yH0cL23Zi876Nm1rb5bfcWkvQY8EVELCJ7uM2S9C2wg+zmeiTruxuYLulOsvWada24SZ8MvJGevccAr0XEEknjASLihYjYKGkJUE+2XmtGRDTsoB6O24E5aSr8e2BscX2tKPeQUqd6CDCuKFZc3yNka8umpeuwLyIuKPV5/A9dAowG1qX1hgAPAFVw4Nq/TbZ05FtgNzC2DOcwApggaR+wBxhZ4k7PqcDM9G0L7ci+qWJxjveQ5tR/h6RhZN8OsAOoK2H9jcr7PmpmbYPTa5qZmZlZbjztbmZmZma5cefTzMzMzHLjzqeZmZmZ5cadTzMzMzPLjTufZmZmZpYbdz4rkKRrJYWks1t4fLWkPZK+krRB0qvpi7jNrJla2w5TGb0kvS9ps6RvJD3sfOZmdrRz57My1QKfpJ8t9V1Kt1dDllXmxlKcmNn/SKvaYfrC90XAkxHRkyxr2MXAxJKdoZlZG+TOZ4VJOaoHkKXYHJlicyUNLdrnFUkjJLWX9LSkVZLqJY1rWF5E/A18DpyWju0g6WVJ6yStSfnOm4rXSVooabmkbZImS7or7bNSUpe03x1plLVe0twjfJnMjqgStcNRwIqIWAYQEbuBycCUQh1Fba5e0vUpfpWk1ZLWSnovxR6VdE9R3evTDEe1pE2S5kjaKGm+sixlZmZl485n5RkOLElpIH+VdD4wjzRymbIGXQG8RfZg3BkR/YB+wK2SuhcXJqkDWbrMJSk0CYiIqCEb0ZmZ9mksDtAbuC7V8QSwOyL6AJ8CY9I+U4A+EXEuML6UF8SsDErRDnsBXxYXGhHfAZ0knQA8nI6rSe3mfUldgenA9RFxHnBDM861JzAtIs4BduGRVTMrM3c+K08tUBg5nJs+vwMMknQscDXwUUTsIcvTPialFfyMLIXkWenYM1P8J2B7RNSn+ABgNkBEbAJ+AHo0EQf4ICL+iIifgZ3Amym+DqhO2/VkKTVvIUvhZ1bJStUOmzIYeK7wISJ+A/qncrem2I5mlPNjRKxI27PJ2rKZWdk4t3sFSVPYlwM1kgJoT5bb/V7gQ+BK4CYOPhQF3B4RSxuUU01a8ynpJGCFpGEpv3JL7C3a3l/0eT8H/8eGAgOBa4AHJdVEhDuhVnFK2A6ryNpEcewM4M+I2HWY7x3t49+DCR2KthvmUHZOZTMrK498VpYRwKyIOD0iqiOiG7AVuJRsym9s2i5MoS8FJhTeZJfUQ9LxxQVGxC9kU+L3p9DHwM2F/YEqYHMT8f8kqR3QLSI+AO4DTgQ6HfZfb9Y2lKodzgEGSBqc4h2BqcBT6bjlZMtdSL/vDKwEBhaWzxTWVAPbgL4p1hcoXl5TJemitD2K7CUpM7OyceezstQCbzSIvZ7iy4DLgHcj4q/0uxnABmC1pPXAixx6tHshcJykS4FpQDtJ68gepHURsbeJeHO0B2anY9cAUyPi92Yea9bWlKQdpin54cBDkjaTLVNZBTybjnsc6JxeHloLDEpLW24DFqTYvKL6u0j6muylpS1F57YZmCRpI9AZeL4UF8HMrKUU4RkYM7OjUVpiszgiepf5VMzMDvDIp5mZmZnlxiOfZmZmZpYbj3yamZmZWW7c+TQzMzOz3LjzaWZmZma5cefTzMzMzHLjzqeZmZmZ5eYfwZ6/uHWQCo8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.inspection.partial_dependence import plot_partial_dependence\n", "\n", "features = [0, 5, 1, 2, (5, 1)]\n", "\n", "plot_partial_dependence(hgbr, X_train, features,\n", " feature_names=calhousing.feature_names,\n", " n_jobs=-1, grid_resolution=50,\n", " fig=plt.figure(figsize=(10, 9)))\n", "fig.suptitle('Partial dependence of house value on nonlocation features\\n'\n", " 'for the California housing dataset');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## XGBoost and LightGBM\n", "\n", "XGBoost and LightGBM provide efficient implementations with many features and a scikit-learn compatible interface. \n", "\n", "They also support out-of-core and distributed model fitting although via a different API.\n", "\n", "The new Histogram-based model of scikit-learn should be computationally competitive but (on single machine multithreads) but do not have all their features yet." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from xgboost import XGBRegressor\n", "\n", "xgbr = XGBRegressor(learning_rate=0.1, max_depth=8, n_estimators=100)\n", "%time xgbr.fit(X_train, y_train)\n", "print(\"train error: %0.3f, test error: %0.3f\" %\n", " (median_absolute_error(y_train, xgbr.predict(X_train)),\n", " median_absolute_error(y_test, xgbr.predict(X_test))))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%timeit -n 10 _ = xgbr.predict(X_test)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": true } }, "outputs": [], "source": [ "print(\"Model size: %0.1f MB\" % (len(dumps(xgbr)) / 1e6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Limitations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Regression with homogeneous feature interactions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Trees required to approximate X1−X2:\n", "\n", "10 trees:\n", "\n", "\n", " \n", "1000 trees:\n", "\n", "\n", " \n", "Credits: https://github.com/pprett/pydata-gbrt-tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Multiclass classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The training time, model size and prediction latency of Gradient Boosted Trees scale linearly with the number of classes...\n", "\n", "The following are possibly better models for multiclass classification with a large number of classes:\n", "\n", "- Random Forests\n", "- Linear models: multi-nomial logistic regression: might require extensive feature engineering to model non-linear interactions in original space. The nystroem method or polynomial features migth be useful in that case.\n", "- Neural Networks (MLP)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### High-dimensional feature spaces\n", "\n", "GBRT models tend to work better on lower dimensional space (typically less than 500 features). Using feature importances or other feature selection strategies might help focus the feature engineering effort. But it cannot deal with very high dim bag of words feature for text classification for instance.\n", "\n", "For very high-dimensional data, linear models will be much faster to train and possibly yield much better results. GBRT models can still be useful to blend predictions of other models, for instance:\n", "\n", "- free text fields in database columns + few numeric or categorical fields\n", "- train one TF-IDF (Bag of Words features) + logistic regression model per free-text field\n", "- train a GBRT model that uses logistic regression models' probabilistic predictions concatenated with numerical and (integer coded) categorical fields to compute the final predictions." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }