{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "*This notebook contains an excerpt from the [Deep Learning with Tensorflow 2.0](https://www.adhiraiyan.org/DeepLearningWithTensorflow.html) by Mukesh Mithrakumar. The code is released under the [MIT license](https://opensource.org/licenses/MIT) and is available for FREE [on GitHub](https://github.com/adhiraiyan/DeepLearningWithTF2.0).*\n", "\n", "*Open Source runs on love, laughter and a whole lot of coffee. Consider buying me [one](https://www.buymeacoffee.com/mmukesh) if you find this content useful!*\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [03.00 - Probability and Information Theory](03.00-Probability-and-Information-Theory.ipynb) | [Contents](Index.ipynb) |\n", "\n", "\"Open\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DF-azaVjrT3v" }, "source": [ "# 04.00 - Numerical Computation" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WCLFmnilZJC6" }, "source": [ "We now use computers for a wide range of reasons, from watching movies to reading books to playing games, but originally computers were designed and used to solve computational problems. \n", "\n", "Numerical analysis or scientific computing is defines as the study of approximation techniques for numerically solving mathematical problems. \n", "\n", "__Numerical Computation__ is necessary for problem solving in that very few mathematical problems have a closed form solution. If an equation solves a given problem in terms of functions and mathematical operations from a given generally-accepted set in a finite number of standard operations, it is said to be closed form. But since most of the problems we deal in real life are non closed form, we use numerical methods to solve it. \n", "\n", "Linear equations, linear programming, optimization and numerical partial differential equations are main branches of numerical computation. These may sound far off from what you deal with in daily life so let me give you few examples, you know how plane ticket prices seem to go up whenever they want, that is an optimization problem, Google's page rank that ranks web pages is an eigenvector of a matrix of order about 3 billion, all these problems are solved using numerical computation. We will look at some of those methods in this chapter.\n", "\n", "Optimization and solving systems of linear equations is at the heart of almost all machine learning and statistical techniques. These algorithms usually require a high amount of numerical computation. These evaluations can be difficult when the function involves real numbers, which can't be represented precisely using a finite amount of memory, which brings us to our first section." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "0x5dgEesF1XN" }, "outputs": [], "source": [ "\"\"\"\n", "At the moment of writing (06.06.2019) the only build that supports tensorflow probability is the tensorflow \n", "nightly build so we will use that to install tensorflow 2.0 and tensorflow probability.\n", "\"\"\"\n", "# Install tensorflow 2.0 and tensorflow probability from the nightly build\n", "!pip install --upgrade tf-nightly-2.0-preview tfp-nightly" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "05SSSlwwSW2f" }, "outputs": [], "source": [ "# Imports\n", "\n", "import tensorflow as tf\n", "import tensorflow_probability as tfp\n", "\n", "from matplotlib import pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "\n", "import numpy as np\n", "\n", "# plt axis colors setup\n", "plt.rc_context({'axes.edgecolor':'orange', 'xtick.color':'red', 'ytick.color':'red', 'text.color':'orange'})" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "hQYa3NWorU1v" }, "source": [ "# 04.01 - Overflow and Underflow" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TZIi9BksaDMc" }, "source": [ "Representing infinitely many real numbers with a finite number of bit patterns represents a fundamental difficulty in performing continuous math on a digital computer. This means that for almost all real numbers we incur some approximation error in the form of rounding error. Rounding error is problematic when it compounds across many operations, and can cause algorithms that work in theory to fail in practice if they are not designed to minimize the accumulation of rounding error.\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 102 }, "colab_type": "code", "id": "vG3Nnyq_rVoC", "outputId": "6358e9d6-cd32-41e3-e2c7-aef8e7038a89" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x + y = 0.30000000000000004\n", "Rounded x + y: 0.3\n", "Check if .1 + .1 +.1 == .3: False\n", "What if we pre round before adding: False\n", "What if we post round after adding: True\n" ] } ], "source": [ "\"\"\"\n", "In the same way, no matter how many base 2 digits you’re willing to use, the decimal value 0.1 cannot be represented \n", "exactly as a base 2 fraction. In base 2, 1/10 is the infinitely repeating fraction\n", "\n", "0.0001100110011001100110011001100110011001100110011...\n", "\n", "One illusion may beget another. For example, since 0.1 is not exactly 1/10, summing three values of 0.1 may not \n", "yield exactly 0.3, either:\n", "\n", "Also, since the 0.1 cannot get any closer to the exact value of 1/10 and 0.3 cannot get any closer to the exact \n", "value of 3/10, then pre-rounding with round() function cannot help:\n", "\n", "Though the numbers cannot be made closer to their intended exact values, the round() function can be useful for \n", "post-rounding so that results with inexact values become comparable to one another:\n", "\n", "Binary floating-point arithmetic holds many surprises like this.\n", "\"\"\"\n", "\n", "x = 0.1\n", "y = 0.2\n", "\n", "print(\"x + y = {}\".format(x + y))\n", "print(\"Rounded x + y: {}\".format(round(x + y, 1)))\n", "print(\"Check if .1 + .1 +.1 == .3: {}\".format(1 + .1 + .1 == .3))\n", "print(\"What if we pre round before adding: {}\".format(round(.1, 1) + round(.1, 1) + round(.1, 1) == round(.3, 1)))\n", "print(\"What if we post round after adding: {}\".format(round(.1 + .1 + .1, 10) == round(.3, 10)))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0eH-1wLub-VN" }, "source": [ "__Underflow__: occurs when numbers near zero are rounded to zero. This can be particularly devastating, think of division by zero, some software environments will raise an exception but other will result with a placeholder not a number value.\n", "\n", "__Overflow__: occurs when numbers with large magnitude are approximated as $\\infty$ or $- \\infty$.\n", "\n", "One function that must be stabilized against underflow and overflow is the __softmax function__:\n", "\n", "$$\\color{orange}{\\text{softmax}(x)_i = \\frac{exp(x_j)}{\\sum_{j=1}^n exp(x_j)} \\tag{1}}$$" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "id": "hoFPmxjob_AS", "outputId": "69e6d670-f8da-4bb0-abbc-66bd95f1b704" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Softmax Underflow [nan nan nan]\n", "Softmax Overflow [nan nan nan]\n", "Underflow Solved: [1. 0. 0.]\n", "Overflow Solved: [0. 0. 1.]\n", "Tensorflow Softmax Underflow: [1. 0. 0.] \n", "Tensorflow Softmax Overflow: [0. 0. 1.]\n" ] } ], "source": [ "def softmax(x, solve=False):\n", " \"\"\"Softmax implementation\"\"\"\n", " if solve:\n", " z = x-max(x)\n", " else:\n", " z = x\n", " numerator = tf.math.exp(z)\n", " denominator = tf.math.reduce_sum(numerator)\n", " \n", " return tf.divide(numerator, denominator)\n", "\n", "\n", "# Underflow example\n", "\"\"\"\n", "If c is very negative, exp(c) will underflow, meaning the denominator will become 0\n", "\"\"\"\n", "\n", "underflow = tf.constant([-12345, -67890, -99999999], dtype=tf.float32)\n", "print(\"Softmax Underflow {}\".format(softmax(underflow, solve=False)))\n", "\n", "# Overflow example\n", "\"\"\"\n", "When c is very large and positive, exp(c) will overflow and the expression ends up being undefined\n", "\"\"\"\n", "\n", "overflow = tf.constant([12345, 67890, 99999999], dtype=tf.float32)\n", "print(\"Softmax Overflow {}\".format(softmax(overflow, solve=False)))\n", "\n", "# Solution\n", "\"\"\"\n", "Both of these can be solved by evaluating softmax(z) where z = x - max_i x_i.\n", "This works because subtracting max results in the largest argument to exp being 0, getting rid of overflow\n", "and atleast one term in the denominator has a value of 1, which gets rid of underflow\n", "\n", "Compare the overflow and underflow examples\n", "\"\"\"\n", "\n", "underflow = tf.constant([-12345, -67890, -99999999], dtype=tf.float32)\n", "print(\"Underflow Solved: {}\".format(softmax(underflow, solve=True)))\n", "\n", "overflow = tf.constant([12345, 67890, 99999999], dtype=tf.float32)\n", "print(\"Overflow Solved: {}\".format(softmax(overflow, solve=True)))\n", "\n", "\n", "# compare the solution with the tensorflow softmax implementation\n", "underflow_softmax_tf = tf.nn.softmax(underflow, axis=None)\n", "overflow_softmax_tf = tf.nn.softmax(overflow, axis=None)\n", "\n", "print(\"Tensorflow Softmax Underflow: {} \\nTensorflow Softmax Overflow: {}\".format(underflow_softmax_tf, overflow_softmax_tf))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "d3uIn1lPrZ6-" }, "source": [ "# 04.02 - Poor Conditioning" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TSwxWe30iCyb" }, "source": [ "Conditioning refers to how rapidly a function changes with respect to small changes in its inputs. Functions that change rapidly when their inputs are perturbed slightly can be problematic for scientific computation because rounding errors in the inputs can result in large changes in the output.\n", "\n", "For example, the function $f(x) = A^{-1}x$. When $A \\in \\mathbb{R}^{n \\times n}$ has an eigenvalue decomposition, its __condition number__ is:\n", "\n", "$$\\color{orange}{max_{i, j} \\Biggr | \\frac{\\lambda_i}{\\lambda_j} \\Biggr | \\tag{2}}$$\n", "\n", "This is the ratio of the magnitude of the largest and smallest eigenvalue. When this number is large, matrix inversion is particularly sensitive to error in the input.\n", "\n", "This sensitivity is an intrinsic property of the matrix itself, not the result of rounding error during matrix inversion. Poorly conditioned matrices amplify pre-existing errors when we multiply by the true matrix inverse. In practice, the error will be compounded further by numerical errors in the inversion process itself." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 255 }, "colab_type": "code", "id": "1UEpG4o-rapB", "outputId": "de8672b3-7b40-44d1-cf7d-a86e1841209b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A: \n", "[[4.1 2.8]\n", " [9.7 6.6]]\n", "\n", "Value of x: \n", "[[ 1.0000000e+00]\n", " [-3.0517578e-05]]\n", "\n", "Solving for new x: \n", "[[0.3399811 ]\n", " [0.97002774]]\n", "We can see how the solution changes dramatically for a small increase in value\n", "\n", "Condition Number of A: 1623.00927734375\n" ] } ], "source": [ "A = tf.constant([[4.1, 2.8], [9.7, 6.6]], dtype=tf.float32)\n", "b = tf.constant([[4.1], [9.7]], dtype=tf.float32)\n", "print(\"Matrix A: \\n{}\\n\".format(A))\n", "\n", "# solve for x, from Ax=b, x = A^(-1) b\n", "x = tf.linalg.matmul(tf.linalg.inv(A), b)\n", "print(\"Value of x: \\n{}\\n\".format(x))\n", "\n", "# Now lets see what happens if we add 0.01 to the first component of b\n", "b2 = tf.constant([[4.11], [9.7]], dtype=tf.float32)\n", "\n", "# We can also use tf.linalg.solve to solve a systems of linear equations\n", "x_solve = tf.linalg.solve(A, b2)\n", "print(\"Solving for new x: \\n{}\".format(x_solve))\n", "print(\"We can see how the solution changes dramatically for a small increase in value\\n\")\n", "\n", "# let's now calculate the condition number for matrix A using ||A|| * ||A^-1||\n", "condition_A = tf.math.multiply(tf.norm(A), tf.norm(tf.linalg.inv(A)))\n", "print(\"Condition Number of A: {}\".format(condition_A))\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "o7BG2Q6_rbI2" }, "source": [ "# 04.03 - Gradient-Based Optimization" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "BFlhfprht5BQ" }, "source": [ "Most deep learning algorithms involve optimization of some sort. Optimization refers to the task of either minimizing or maximizing some function $f(x)$ by altering $x$. We usually phrase most optimization problems in terms of minimizing $f(x)$. Maximization may be accomplished via a minimization algorithm by minimizing $-f(x)$.\n", "\n", "The function we want to minimize or maximize is called the __objective function__ or __criterion__. When we are minimizing it, we may also call it the __cost function, loss function__, or __error function__.\n", "\n", "We often denote the value that minimizes or maximizes a function with a superscript *. For example we might say $x^* = arg \\ min \\ f(x)$.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3DO2wa2-vJ1T" }, "source": [ "Suppose we have a function $y = f(x)$, where both _x_ and _y_ are real numbers. The __derivative__ of this function is denoted as $f^{'}(x)$ or as $\\frac{dy}{dx}$. The derivative $f^{'}(x)$ gives the slope of $f(x)$ at the point _x_. In other words, it specifies how to scale a small change in the input to obtain the corresponding change in the output:\n", "\n", "$$\\color{orange}{f(x + \\epsilon) \\approx f(x) + \\epsilon f^{'}(x) \\tag{3}}$$" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QyWiLUPEyPeY" }, "source": [ "__Gradient descent__ is the technique of moving in small steps with the opposite sign of the derivative to reduce $f(x)$.\n", "\n", "\n", "![Gradient descent](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0403a.jpeg)\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "lKdh5_kZ3tMA" }, "source": [ "- When $f^{'}(x) = 0$, the derivative provides no information about which direction to move. These points are known as __critical points__, or __stationary points__.\n", "\n", "- A __local minimum__ is a points where $f(x)$ is lower than all neighboring points, so it is no longer possible to decrease $f(x)$ by making infinitesimal steps.\n", "\n", "- A __local maximum__ is a point where $f(x)$ is higher than all neighboring points, so it is not possible to increase $f(x)$ by making infinitesimal steps.\n", "\n", "- Some critical points are neither maxima or minima, these are knows as __saddle points__.\n", "\n", "- A point that obtains the absolute lowest value of $f(x)$ is a __global minimum__." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 500 }, "colab_type": "code", "id": "8rP-VIP3r7OY", "outputId": "41d5568d-c644-4be6-8f05-deea5f5d97c3" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "Let's see how these look like by plotting these. Note that I am using numpy for these plots but we will start \n", "using tensorflow in the upcoming sections. Also, taking the derivatives and most optimizations are \n", "easily done with packages like numpy, scipy or sympy since these are dedicated scientific libraries\n", "whereas tensorflow is a machine learning framework but I am working on bringing a scientific extension to the \n", "tensorflow, please see (https://github.com/mukeshmithrakumar/scientific). \n", "This is work in progress and contributions are welcome.\n", "\n", "\"\"\"\n", "\n", "polynomial = np.poly1d([2,-4,-28,62,122,-256,-196,140,392,240,72]) # Create a one-dimensional polynomial class\n", "polynomial_root = polynomial.deriv().r # Return a derivative of this polynomial with the roots\n", "r_crit = polynomial_root[polynomial_root.imag==0].real # Return the real part of the complex argument\n", "test = polynomial.deriv(2)(r_crit) \n", "\n", "# local minima \n", "x_min = r_crit[test>0]\n", "y_min = polynomial(x_min)\n", "plt.plot(x_min, y_min, 'o')\n", "plt.text(1.5, 200, 'local minima')\n", "\n", "# local maxima \n", "x_max = r_crit[test<0]\n", "y_max = polynomial(x_max)\n", "plt.plot(x_max, y_max, 'o', color='r')\n", "plt.text(0.5, 800, 'local maxima')\n", "\n", "#global maxima\n", "plt.text(-1.5, 1600, 'global maxima')\n", "\n", "# global minima \n", "xc = np.arange(-2.5, 2.6, 0.02)\n", "yc = polynomial(xc)\n", "plt.plot( xc, yc)\n", "plt.xlim([-2.5,2.5])\n", "plt.text(-1, 400, 'global minima')\n", "\n", "\n", "# Saddle Point\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "plot_args = {'rstride': 1, 'cstride': 1, 'cmap':\"Blues_r\",\n", " 'linewidth': 0.4, 'antialiased': True,\n", " 'vmin': -1, 'vmax': 1}\n", "\n", "x, y = np.mgrid[-1:1:31j, -1:1:31j]\n", "z = x**2 - y**2\n", "ax.plot_surface(x, y, z, **plot_args)\n", "ax.view_init(azim=-60, elev=30)\n", "ax.set_xlim(-1, 1)\n", "ax.set_ylim(-1, 1)\n", "ax.set_zlim(-1, 1)\n", "plt.xticks([-1, -0.5, 0, 0.5, 1], [r\"$-1$\", r\"$-1/2$\", r\"$0$\", r\"$1/2$\", r\"$1$\"])\n", "plt.yticks([-1, -0.5, 0, 0.5, 1],[r\"$-1$\", r\"$-1/2$\", r\"$0$\", r\"$1/2$\", r\"$1$\"])\n", "ax.set_zticks([-1, -0.5, 0, 0.5, 1])\n", "ax.set_zticklabels([r\"$-1$\", r\"$-1/2$\", r\"$0$\", r\"$1/2$\", r\"$1$\"])\n", "ax.scatter([0], [0], [.3], s=100, color = 'r', marker=\"o\")\n", "plt.title(\"Saddle Point\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QxZLNQfM45Az" }, "source": [ "In deep learning we often deal with multidimensional inputs with functions that may have many local minima that are not optimal and many saddle points surrounded by very flat regions. This makes optimization difficult, we therefore usually settle for finding a value of $f$ that is very low but not necessarily minimal in any formal sense.\n", "\n", "For functions with multiple inputs, we must make use of the concept of __partial derivatives__. The partial derivative $\\frac{\\partial}{\\partial x_i} f(x)$ measures how $f$ changes as only the variable $x_i$ increases at point __x__. The __gradient__ generalizes the notion of derivative to the case where the derivative is with respect to a vector: the gradient of $f$ is the vector containing all the partial derivatives, denoted $\\nabla_x f(x)$. Element $i$ of the gradient is the partial derivative of $f$ with respect to $x_i$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "sSCjTBlO45am", "outputId": "e9c30869-e50b-4227-b485-2081b75a41b9" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Partial Derivative of dz_dx: 2.0 \n", "Partial Derivative of dz_dy: -1.0 \n" ] } ], "source": [ "\"\"\"\n", "Lets say we have a function z = f(x, y) = 2x - y: The partial derivatives of this equation is:\n", "dz_dx = 2, dz_dy = -1. Let's see how we can calculate this in tensorflow using GradientTape.\n", "\n", "GradientTape records operations for automatic differentiation and we use it with persistent=True \n", "to allow multiple calls to the gradient(). Note that since we are using constants, we need to \n", "ensure that these are being traced when we do the GradientTape, hence we use a watch method.\n", "But when we start working with variables, we don't need to have a watch.\n", "\"\"\"\n", "\n", "x = tf.constant(1.0)\n", "y = tf.constant(2.0)\n", "\n", "with tf.GradientTape(persistent=True) as g:\n", " g.watch(y)\n", " g.watch(x)\n", " out = tf.subtract(2*x, y)\n", "dz_dx = g.gradient(out, x)\n", "dz_dy = g.gradient(out, y)\n", "del g # Drop the reference to the tape\n", "\n", "print(\"Partial Derivative of dz_dx: {} \\nPartial Derivative of dz_dy: {} \".format(dz_dx, dz_dy))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LHTc_dDB45u7" }, "source": [ "The __directional derivative__ in direction $u$ (a unit vector) is the slope of the function $f$ in direction $u$. In other words, the directional derivative is the derivative of the function $f(x + \\alpha u)$ with respect to $\\alpha$, evaluated at $\\alpha = 0$. Using the chain rule, we can see that $\\frac{\\partial}{\\partial \\alpha} f(x + \\alpha u)$ evaluates to $u^{\\top} \\nabla_x f(x)$ when $\\alpha = 0$." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YwOYvtojQ5DE" }, "source": [ "To minimize $f$, we would like to find the direction in which $f$ decreases the fastest. We can do this using the directional derivative:\n", "\n", "$$\\color{orange}{min_{u, u^{\\top} \\ u=1} u^{\\top} \\nabla_x f(x) \\tag{4}}$$\n", "\n", "$$\\color{orange}{=min_{u, u^{\\top} \\ u=1} \\|u\\|_2 \\ \\| \\nabla_x f(x) \\|_2 \\ cos \\theta \\tag{5}}$$\n", "\n", "where $\\theta$ is the angle between $u$ and the gradient. Substituting in $\\|u\\|_2 = 1$ and ignoring factors that do not depend on $u$, this simplifies to $min_u cos \\theta$. This is minimized when $u$ points in the opposite direction as the gradient. in other words, the gradient points directly uphill, and the negative gradient points directly downhill. We can decrease $f$ by moving in the direction of the negative gradient. This is known as the __method of steepest descent__ or __gradient descent__.\n", "\n", "\n", "Well, if you take away all the math, gradient descent simply states that if you move in the opposite direction of a functions gradient, you will be able to decrease it. Think about it this way, if you have climbed a mountain and you want to hike down, you know the fastest way down is from the way the mountain is steepest right. If you have skied, one of the fastest ways to reach the bottom is by skiing from the steepest parts. This is exactly what we do, we find the steepest part and then move in the opposite direction.\n", "\n", "\n", "Steepest descent proposes a new point:\n", "\n", "$$\\color{orange}{x^{'} = x - \\epsilon \\nabla_x f(x) \\tag{6}}$$\n", "\n", "where $\\epsilon$ is the __learning rate__, a positive scalar determining the size of the step." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 439 }, "colab_type": "code", "id": "ANTmu6Ric-C3", "outputId": "c8906429-3a74-418f-be69-c5ab4260297d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting x value: 1.0\n", "Iteration: 0 x: 0.6618226766586304\n", "Iteration: 5 x: -0.38608598709106445\n", "Iteration: 10 x: -0.691019594669342\n", "Iteration: 15 x: -0.7591084241867065\n", "Iteration: 20 x: -0.7734285593032837\n", "Iteration: 25 x: -0.7764040231704712\n", "Iteration: 30 x: -0.7770206928253174\n", "Iteration: 35 x: -0.777148425579071\n", "Iteration: 40 x: -0.7771748900413513\n" ] }, { "data": { "image/png": "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\n8JekGvr/qktaGOem9VMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "f(x,y) = x^2 + y^2 + xsiny + ysinx\n", "f'(x, y) = (2 x + y cos(x) + sin(y)) dx + (2 y + x cos(y) + sin(x)) dy\n", "\n", "If you know chain rule, this can be easily differentiated but if you don't, you don't have to worry, tensorflow\n", "will take care of any kind of function for you using Gradient Tape\n", "\n", "\"\"\"\n", "def f(x, y):\n", " return tf.pow(x, 2) + tf.pow(y, 2) + tf.multiply(x, tf.math.sin(y)) + tf.multiply(y, tf.math.sin(x))\n", "\n", "def grad(x, y):\n", " with tf.GradientTape() as t:\n", " t.watch(x)\n", " out = f(x, y)\n", " return t.gradient(out, x)\n", "\n", "\n", "a = 0.1 # learning rate\n", "x0 = tf.constant(1.0)\n", "y0 = tf.constant(1.0) \n", "print(\"Starting x value: {}\".format(x0))\n", "\n", "update = []\n", "for i in range(41):\n", " x0 -= a * grad(x0, y0)\n", " update.append(x0)\n", " plt.plot(i, update[-1], color='r', marker='.')\n", " if i%5 == 0:\n", " print(\"Iteration: {} x: {}\".format(i, x0))\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-dJzWgUHl0dn" }, "source": [ "Below is an animation of how our gradient takes small steps and finds the global minimum.\n", "\n", "![Gradient descent with tensorflow](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0403b.gif)\n", "\n", "In some cases, we may be able to avoid running this iterative algorithm and just jump directly to the critical point by solving the equation $\\nabla_x f(x) = 0$ for $x$.\n", "\n", "Although gradient descent is limited to optimization in continuous spaces, the general concept of repeatedly making a small move (that is approximately the best small move) toward better configurations can be generalized to discrete spaces. Ascending an objective function of discrete parameters is called __hill climbing__." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eUj0maERUrX0" }, "source": [ "Haha, I had to put this, the perfect analogy for gradient descent would be have you seen these videos where people roll down the hill, \n", "\n", "![Gradient descent example](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0403c.jpg)\n", "\n", "Gradient descent is exactly that, not everyone reaches the bottom (global minimum), they get stuck in pits (local minimum), where you start from the top (initial values) plays a huge part in the path you take and how fast you roll down (learning rate) determines how fast you reach the bottom and if you could potentially jump out of the pits. If you haven't watched these videos, take a look at [this](https://www.youtube.com/watch?v=fiaWyG7iKes) btw, that is just crazy." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cPF1brGEmjSQ" }, "source": [ "## 4.3.1 Beyond the Gradient: Jacobian and Hessian Matrices" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wggGPsxTU681" }, "source": [ "Suppose we need to find all the partial derivatives of a function whose input and output are both vectors. The matrix containing all such partial derivatives is known as a __Jacobian matrix__. Specifically, if we have a function $f : \\mathbb{R}^m \\rightarrow \\mathbb{R}^n$, then the Jacobian matrix $J \\in \\mathbb{R}^{n \\times m}$ of $f$ is defined such that $J_{i, j} = \\frac{\\partial}{\\partial x_j} f(x)$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "id": "KmaMBMQEbI8o", "outputId": "12313714-7eec-494f-97b4-e995cce971eb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Jacobian \n", "[[2. 0.]\n", " [0. 4.]]\n" ] } ], "source": [ "\"\"\"\n", "Using Tensorflow GradientTape, we can easily find the Jacobian of any vector using \"jacobian(target, sources)\".\n", "In this example for f(x) = x^2 we will look at the Jacobian when x = [1.0, 2.0]\n", "\"\"\"\n", "\n", "with tf.GradientTape() as g:\n", " x = tf.constant([1.0, 2.0])\n", " g.watch(x)\n", " y = x * x\n", "jacobian = g.jacobian(y, x)\n", "\n", "print(\"Jacobian \\n{}\".format(jacobian))\n", "del g # Drop the reference to the tape" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ux1iEgS4VAOY" }, "source": [ "We are also sometimes interested in a derivative of a derivative. This is known\n", "as a second derivative. For example, for a function $f : \\mathbb{R}^n \\rightarrow \\mathbb{R}$, the derivative with respect to $x_i$ of the derivative of $f$ with respect to $x_j$ is denoted as $\\frac{\\partial^2}{\\partial x_i \\partial x_j} f$. In a single dimension we denote $\\frac{d^2}{dx^2} f$ by $f^{''}(x)$. The second derivative tells\n", "us how the first derivative will change as we vary the input. This is important because it tells us whether a gradient step will cause as much of an improvement as we would expect based on the gradient alone. We can think of the second derivative as measuring __curvature__. " ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "6zwVXOwAGfm-", "outputId": "07e8cf3e-f4b7-4836-cace-311cba7ea817" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "First Derivative of f(x): 3.0 \n", "Second Derivative of f(x): 6.0\n" ] } ], "source": [ "\"\"\"\n", "We will use tf.GradientTape() to calculate the second derivative of the function \n", "f(x) = x^3\n", "f'(x) = 3x^2\n", "f''(x) = 6x\n", "\"\"\"\n", "\n", "x = tf.Variable(1.0)\n", "\n", "with tf.GradientTape() as t:\n", " with tf.GradientTape() as t2:\n", " y = x * x * x\n", " dy_dx = t2.gradient(y, x)\n", "d2y_dx2 = t.gradient(dy_dx, x)\n", "\n", "print(\"First Derivative of f(x): {} \\nSecond Derivative of f(x): {}\".format(dy_dx, d2y_dx2))\n", "del t, t2 # Drop the reference to the tape" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yZ_kHUupLPTZ" }, "source": [ "Below is a plot of our function f(x) = x^3, f'(x) = 3x^2 and f''(x)=6x:\n", "\n", "![First and second derivative plot](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0403d.png)\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GQf7lXob0s5N" }, "source": [ "The second derivative can be used to determine whether a critical point is\n", "a local maximum, a local minimum, or a saddle point. \n", "\n", "- When $f^{'}(x) = 0$ and $f^{''}(x) > 0$, we can conclude that $x$ is a local minimum.\n", "\n", "- When $f^{'}(x) = 0$ and $f^{''}(x) < 0$, we can conclude that $x$ is a local maximum.\n", "\n", "- If $f^{''}(x) = 0$ then $x$ may be a saddle point or a part of a flat region.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "UQhqZG7BVA4k" }, "source": [ "- If the second derivative is zero, then there is no curvature. It is a perfectly flat line, and its value can be predicted using only the gradient. If the gradient is 1, then we can make a step of size $\\epsilon$ along the negative gradient, and the cost function will decrease by $\\epsilon$. \n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "colab_type": "code", "id": "lY56ugKxQF7b", "outputId": "43f66c6d-0f3a-4c8a-df0f-b6c0ab46e4be" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Plot where second derivative is zero\n", "\n", "x0 = tf.range(-15., 15., 1.)\n", "x = tf.Variable(x0)\n", "\n", "def f(x): \n", " return tf.pow(x, 2)\n", "\n", "def second_derivative(x):\n", " \"\"\"\n", " Note here since x is a variable we are not calling the watch method. \n", " Since we are taking the second derivative, we need to call the GradientTape twice and use the \n", " gradient() method to obtain the gradients.\n", " \"\"\"\n", " with tf.GradientTape() as t:\n", " with tf.GradientTape() as t2:\n", " out = f(x)\n", " dy_dx = t2.gradient(out, x)\n", " d2y_dx2 = t.gradient(dy_dx, x)\n", " return d2y_dx2\n", "\n", "# Original Function f(x) = x^2\n", "plt.plot(x0, f(x0), color='dodgerblue')\n", "\n", "# Second Derivative of f(x)\n", "d2 = second_derivative(x)\n", "plt.plot(x0, d2, color='#FF9A13')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "f-7imtqRYtJ1" }, "source": [ "\n", "- If the second derivative is negative, the function curves downward, so the cost function will actually decrease by more than $\\epsilon$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "colab_type": "code", "id": "8XmRGGIqYseM", "outputId": "aaf14c75-8428-409e-eb4b-2747cfaf56f5" }, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Plot where second derivative is negative\n", "\n", "x0 = tf.range(-10., 10., .5)\n", "x = tf.Variable(x0)\n", "\n", "def f(x): \n", " return -(tf.pow(x, 4))\n", "\n", "def second_derivative(x):\n", " with tf.GradientTape() as t:\n", " with tf.GradientTape() as t2:\n", " out = f(x)\n", " dy_dx = t2.gradient(out, x)\n", " d2y_dx2 = t.gradient(dy_dx, x)\n", " return d2y_dx2\n", "\n", "# Original Function f(x): -x^4\n", "plt.plot(x0, f(x0), color='dodgerblue')\n", "\n", "# Second Derivative of f(x)\n", "d3 = second_derivative(x)\n", "plt.plot(x0, d3, color='#FF9A13')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eUIA6TSYa6ok" }, "source": [ "- If the second derivative is positive, the function curves upward, so the cost function can decrease by less than $\\epsilon$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "colab_type": "code", "id": "DkBr2AC3VBSn", "outputId": "c07105d7-b7ea-4d34-e8aa-f43d1861f455" }, "outputs": [ { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Plot where second derivative is positive\n", "\n", "x0 = tf.range(-10., 10., .5)\n", "x = tf.Variable(x0)\n", "\n", "def f(x): \n", " return (tf.pow(x, 4))\n", "\n", "def second_derivative(x):\n", " with tf.GradientTape() as t:\n", " with tf.GradientTape() as t2:\n", " out = f(x)\n", " dy_dx = t2.gradient(out, x)\n", " d2y_dx2 = t.gradient(dy_dx, x)\n", " return d2y_dx2\n", "\n", "# Original Function f(x): x^4\n", "plt.plot(x0, f(x0), color='dodgerblue')\n", "\n", "# Second Derivative of f(x)\n", "d3 = second_derivative(x)\n", "plt.plot(x0, d3, color='#FF9A13')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WnvCkcytVBkC" }, "source": [ "When our function has multiple input dimensions, there are many second derivatives. These derivatives can be collected together into a matrix called the __Hessian matrix__. The Hessian matrix $H (f)(x)$ is defined such that:\n", "\n", "$$\\color{orange}{H(f)(x)_{i, j} = \\frac{\\partial^2}{\\partial x_i \\partial x_j} f(x) \\tag{7}}$$\n", "\n", "Equivalently, the Hessian is the Jacobian of the gradient. \n", "\n", "If you have been following everything upto now, this should make sense and if it does feel free to skip to the code, but sometimes it's better to recap, so let me explain what Hessian and Jacobian mean and how they are related, starting with the gradients in one dimension, a gradient is simply the slope of a function in a direction, if you have multiple direction (inputs), for each direction there is a different rate of change for each direction and gradient is simply a collection of all of this. Think of throwing a ball, the ball goes further (x direction) and higher (z direction) and if you take the derivative of the directions with respect to time, you get the individual velocities in each direction and the gradient is a matrix of such values. This matrix of gradients is called the Jacobian. Now, let's say you take the derivative of the velocities again, you end up with the acceleration of the ball in each direction (x and z) and this is the Hessian matrix, simple as that." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "colab_type": "code", "id": "DLELEdV0cYV2", "outputId": "dea4efa0-5d95-4b49-fdd1-26bf76d4c50f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Jacobian: \n", "[ -1. -194.] \n", "Hessian: \n", "[ 4. -482.]\n" ] } ], "source": [ "\"\"\"\n", "NOTE: As of 06.14.2019 tf.hessians doesn't work with tf eager mode and the tf.GradientTape doesn't\n", "have a method hessians. There is a bug report open in GitHub \n", "(https://github.com/tensorflow/tensorflow/issues/29781) so as soon as that is resolved the following\n", "code will work and I will fix this cell.\n", "\n", ">>> f = 100*(y - x**2)**2 + (1 - x)**2\n", ">>> x = tf.Variable([1., 1.])\n", "\n", ">>> hessian_matrix = tf.hessians(f, x)\n", ">>> print(hessian_matrix)\n", "\n", ">>> with tf.GradientTape() as t:\n", "... out = f\n", ">>> hessian = t.hessians(out, x)\n", "\n", "But for now, we will look into another way we can get the Hessian using the\n", "equivalency of the Hessian being the gradient of the Jacobian for f(x,y)= x^3 - 2xy + y^6 and for \n", "points x = 1, y = 2, but note that this will return the sum of each column, the final \n", "Hessian Matrix will be:\n", "\n", "[[ 6., -2. ],\n", " [-2., -480.]]\n", "\n", "I specifically took this example from Khan academy so if you want to see how the derivation is calculated, \n", "take a look at: \n", "(https://www.khanacademy.org/math/multivariable-calculus/applications-of-multivariable-derivatives/quadratic-approximations/a/the-hessian)\n", "\n", "\"\"\"\n", "\n", "def f(x): return tf.pow(x[0], 3) - 2*x[0]*x[1] - tf.pow(x[1], 6)\n", "\n", "\n", "x = tf.Variable([1., 2.], dtype=tf.float32)\n", "\n", "with tf.GradientTape() as h:\n", " with tf.GradientTape() as g:\n", " out = f(x)\n", " jacobian = g.jacobian(out, x) # Calls the Jacobian method\n", "hessian = h.gradient(jacobian, x) # We take the gradient of the Jacobian to get the Hessian Matrix\n", " \n", "print(\"Jacobian: \\n{} \\nHessian: \\n{}\".format(jacobian, hessian))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ZESHQxY8VCf4" }, "source": [ "Anywhere that the second partial derivatives are continuous, the differential\n", "operators are commutative, this implies that:\n", "\n", "$$\\color{orange}{H_{i, j} = H_{j, i} \\tag{8}}$$\n", "\n", "so the Hessian matrix is symmetric at such points.\n", "\n", "Most of the functions we encounter in the context of deep learning have a symmetric Hessian almost everywhere. Because the Hessian matrix is real and symmetric, we can decompose it into a set of real eigenvalues and an orthogonal basis of eigenvectors. If you don't recall Eigenvalues and Eigenvectors, I strongly suggest you review [Eigendecomposition](https://www.adhiraiyan.org/deeplearning/02.00-Linear-Algebra#7). But for the sake of completion, the eigenvectors of matrix M are vectors that do not change direction when multiplied with M , and the eigenvalues represent the change in length of the eigenvector when multiplied with M .\n", "\n", "The second derivative in a specific direction represented by a unit vector $d$ is given by $d^{\\top} H d$. When $d$ is the eigenvector of $H$, the second derivative in that direction is given by the corresponding eigenvalue. For other directions of $d$, the directional second derivative is a weighted average of all the eigenvalues, with weights between 0 and 1, and eigenvectors that have a smaller angle with $d$ receiving more weight. The maximum eigenvalue determines the maximum second derivative, and the minimum eigenvalue determines the minimum second derivative. " ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "id": "_Mqr5Uz7VC2B", "outputId": "931bdfaf-4604-488e-d1d1-6a613011c76a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Eigenvalue for the Hessian: \n", "[-480.00824 6.00823] \n", "\n", "Eigenvectors for the Hessian: \n", "[[ 0.00411512 0.99999154]\n", " [ 0.99999154 -0.00411512]]\n" ] } ], "source": [ "# Eigenvalue and Eigenvectors for the Hessian matrix\n", "\n", "hessian = tf.constant([[ 6., -2.], [-2., -480.]])\n", "eigenvalues, eigenvectors = tf.linalg.eigh(hessian)\n", "\n", "print(\"Eigenvalue for the Hessian: \\n{} \\n\\nEigenvectors for the Hessian: \\n{}\".format(eigenvalues, eigenvectors))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FdS983650tV2" }, "source": [ "The (directional) second derivative tells us how well we can expect a gradient\n", "descent step to perform. We can make a second-order Taylor series approximation to the function $f(x)$ around the current point $x^{(0)}$ and if we use a learning rate of $\\epsilon$, then the new point $x$ will be given by $x^{(0)} - \\epsilon g$ which gives:\n", "\n", "$$\\color{orange}{f(x^{(0)} - \\epsilon g) \\approx f(x^{(0)}) - \\epsilon g^{\\top}g + \\frac{1}{2} \\epsilon^2 g^{\\top} Hg \\tag{9}}$$\n", "\n", "I know, that looks complicated, let me explain. There are three terms here: the original value of the function, the expected improvement due to the slope of the function, and the correction we must apply to account for the curvature of the function. What you need to know is:\n", "\n", "- When this last term is too large, the gradient descent step can actually move uphill.\n", "\n", "- When it is zero or negative, the Taylor series approximation predicts that increasing $\\epsilon$ forever will decrease $f$ forever.\n", "\n", "Take a look at the image below. The graph on the left, which is the first derivative of a one dimensional function and the graph on the right is the second derivative of the same function.\n", "\n", "![Hessian derivative directions](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0403e.png)\n", "\n", "In the left diagram, the slope changes a lot, while it is more stable in the right diagram. As you can see, the rate of change of the slope corresponds to how “curved” each loss function is. The sharper the curve, the more rapidly the slope changes.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Nnzwd5x_0sNt" }, "source": [ "In multiple dimensions, we need to examine all the second derivatives of the function. Using the eigendecomposition of the Hessian matrix, we can generalize the second derivative test to multiple dimensions. At a critical point, where $\\nabla_x f(x) = 0$, we can examine the eigenvalues of the Hessian to determine whether the critical point is a local maximum, local minimum, or saddle point. \n", "\n", "- When the Hessian is positive definite (all its eigenvalues are positive), the point is a local minima.\n", "\n", "- When the Hessian is negative definite (all its eigenvalues are negative), the point is a local maximum.\n", "\n", "- When all the nonzero eigenvalues have the same sign but atleast one eigenvalue is zero, the derivative test can be inconclusive, like the univariate second derivative test.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eo0wvHXH0rf8" }, "source": [ "In multiple dimensions, there is a different second derivative for each direction at a single point. The condition number of the Hessian at this point measures how much the second derivatives differ from each other. When the Hessian has a poor condition number, gradient descent performs poorly. This is because in one direction, the derivative increases rapidly, while in another direction, it increases slowly. Gradient descent is unaware of this change in the derivative, so it does not know that it needs to explore preferentially in the direction where the derivative remains negative for longer. Poor condition number also makes choosing a good step size difficult. The step size must be small enough to avoid overshooting the minimum and going uphill in directions with strong positive curvature. This usually means that the step size is too small to make significant progress in other directions with less curvature. " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2VeHZB7ZBMYy" }, "source": [ "This issue can be resolved by using information from the Hessian matrix to guide the search. The simplest method for doing so is known as __Newton’s method__. Newton’s method is based on using a second-order Taylor series expansion to approximate $f(x)$ near some point $x^{(0)}$ and by solving for the critical point, we obtain:\n", "\n", "$$\\color{orange}{x^* = x^{(0)} - H(f)(x^{(0)})^{-1} \\ \\nabla_x f(x^{(0)}) \\tag{10}}$$\n", "\n", "- When $f$ is positive definite quadratic function, Newton's method consists of applying the above equation once to jump to the minimum of the function directly.\n", "\n", "- When $f$ is not truly quadratic but can be locally approximated as a positive definite quadratic, Newton’s method consists of applying the above equation multiple times. \n", "\n", "Iteratively updating the approximation and jumping to the minimum of the approximation can reach the critical point much faster than gradient descent would. This is a useful property near a local minimum, but it can be a harmful property near a saddle point. \n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 281 }, "colab_type": "code", "id": "i8GvcXFY9kEM", "outputId": "50150f13-0234-49db-fdcc-0a98d56a8cfe" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAEICAYAAABPtXIYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnWd4HNXVgN/ZolXv1ZYsWdWWXCT3\nhgs2LtjYlNAEpoXQCb0khEASIJAKhFBCb0tvBowbxr0XWbIkq1q997p9vh+7SvQ5LjNbLNuZ93n0\nWLsz594769WZM+eeIoiiiIKCgoKCgoKCgoLCyVEN9QIUFBQUFBQUFBQUzgYUw1lBQUFBQUFBQUFB\nAorhrKCgoKCgoKCgoCABxXBWUFBQUFBQUFBQkIBiOCsoKCgoKCgoKChIQDGcFRQUFBQUFBQUFCSg\nGM4KCgoKCgoKCoPRC3PRCzVuGisBvSCiFzRuGU9hSFEMZ4UToxdmoRd2oBc60Qtt6IXt6IXJjmM3\noBe2DfEKT45eeBK98MEpzqlAL/SjF7rRCx2O670NvXBm/m2cDZ+7goLC0GLXa03oBb9B792MXtjk\n5nk2oRdudtNYCeiFCifk3nEYpSuOef/vjvdvkDiOiF5Ilj2/wv8cZ6ZxoDD06IVA4DvgH0AoMBz4\nHWAcymV5iIvIFgOAeOBZ4BHgzaFdkoKCgoJLqIF7hnoRp4li4Lp/v7J7dq8AyoZqQQrnLsq2gcKJ\nSAUgW/zI8bofWAeAXhgNvApo0Qs9gIVsMRi9oAOexq6wdMBXwH1ki/0OuWXAU0ACUADcRraY6zhW\nAbwGrARigK+B28kWDRJkHwF+CQQCdcAdgBb4NSCgFy4GysgWx5/0irPFTmAVeqEB2IVe+CvZ4uGT\nXpdeCAfeAWYBNiAfmEO2aEMvxAEvAOdhf0j9iGzxLseabwIeAqKBPcAtZIuVjmMicDvwABABfAjc\nBYw67ueuoKCg8N/8GXgYvfAy2WLHfx3VC6OwO0YmAs3A42SLn6IXRgIHgVCHHnsdWEG2GOmQex/Y\nj103nQdMQy88D7xDtngXemEGdr2Xit2gvYdscYdDdhOwFTgfGAfsBLLJFluOs77/1uvZ4o8nuNZv\ngZXohRCyxXZgMZALBBwz5vH1rl7Y4jjjkEP//hxodMg8gN2ZYgV+Tbb4tuP9IMfntwToA14HnnF8\nZmrgOeAGoAv46wnWrXAWonicFU5EMWBFL7yLXliCXgj595FssRC4DdhJtug/yHh7FruyzASSsXup\nfwuAXsgC3gJuBcKwG8mrHEbpANcAi4Akxzi/OaWsXkjDblROdniNFwEVZItrgGeATxxrPLnRPJhs\ncQ9Qg/2mcPLrshu3NdhvIlHYjXXRoTi/AyqxG/vDgY8d17PCcd6lDrmtwMADygDLgMnYby5XAItO\n8rkrKCgoHMs+YBPw4H8dsYdwrAf0QCRwFfAyeiGdbPEodmMvy3H2bKDH4TABmANsJlt8DLvuusuh\nj+5CL4QC3wMvYtfVfwO+Ry+EDZo9G7jRMa/Xv9eXLVaQLSY41nd8vX5iDMA3jusAu/f5vWOu+cR6\nN1uc7ThrvONaPnG8jgaCsOvvnwP/HHQv/IfjWKLjM7nOcV0Av8Cuw7OAScDPTrJ2hbMMxXBWOD7Z\nYhd2L6qI/Um6Gb2wCr0Qddzz9YIA3ILdE9tGttiN3XAdUGS3AK+RLe4mW7SSLb6LPexj2qBRXiJb\nrCZbbMPu4b1agqwVuxc4Hb2gdShfd2zP1QGhEq7LjN1DHk+2aCZb3Eq2KAJTgGHAQ2SLvWSLBrLF\ngdjk24A/ki0Wki1aHONlohfiB83/LNliB9liFfATdqNdQUFBQQ6/Be5GL0Qc8/4y7A6Gt8kWLWSL\nB4EvgMsdxzcDc9AL0Y7Xnztej8TuAT50gvmWAiVki+87xv0IOAJcNOict8kWix07kZ9yfN3mjF5/\nD7gOvRCM3ZD9+pjjUvTusZiB3zt0+2qgB0hzOEauAn5FtthNtliB3au80iF3BfD8oPvZH0+xdoWz\nCCVUQ+HE2D2cNwAD23ofAM/zH4N2MBGAL7AfvTDwnoA9zg7s8cPXoxfuHiTjhd24HKB60O+Vg46d\nWDZb3IxeuBd4EshAL6wF7idbrJN8ncdnONAm4br+7Jh7neP4v8gWnwXigEqHgj6WeOAF9MLg7TvB\nMWel43XDoGN9gL+L16OgoPC/hj3U7DvgUaBw0JF4YCp6YXAIhwZ43/H7ZmA59t20Ldg91yuxe3a3\nki3aTjDjMP6jwwaoxK7bBji1bssWS2Xr9Wxxm+MB4THgO0co3eAzpOjdY2k9RocPrDccezjgYLnB\n1zmM/76fKZwjKIazgjSyxSPohXewh0uA3RM9mBbscdAZZIu1xxmhGniabPHpk8wSN+j3Edi9vqeW\nzRb1gN6R0Pga9tiylcdZozTslUOGA9s41XXZPdAPAA+gF8YAG9ELex1rHoFe0BzHeB64ng+dWJ1z\n16SgoPC/yhPAAf5/nG019nCLC04gsxm7U6DG8fs27PkVBsfrAY7VR3XYDdTBjADWyF71ifX6yfgA\nu5d93nGOuaJ3j6UFuzc6HnvODdivc+AeUc9/388UzhGUUA2F46MXRqEXHkAvxDpex2H3NO9ynNEI\nxKIXvAAcHojXgb+jFwaSSIajFxY5zn8duA29MBW9IKAX/NALS9ELg5M37kQvxDri5B4DPjmlrF5I\nQy+c74iVNmA3cge8IY1AAlJLy+mFQEcS4sfAB2SLeae8Lr2wDL2Q7Ajp6MS+xWjDnnhSDzzrWK83\nemGmY6ZXgV+hFzIcYwShFy5HGv//c1dQUFA4GdliKXZd+stB734HpKIXVqIXtI6fyf+OY84WS7Dr\n0muxG9hd2HXPZfx/w7kRe4zvAKsd42ajFzTohSuBdMd80jm5Xj8ZLwIXYPeSH8up9O6x13JiskUr\n9jCTpx33oXjgfuyGO45jv3Tcz0Kwe/wVzhEUw1nhRHQDU4Hd6IVe7AbzYezeVYCN2CtINKAXBjKi\nHwFKsVek6AI2AGkAZIv7sCdMvAS0O8674Zg59dgrd5RjLyP0lARZHfbkvRbsW4CRwK8cxz5z/NuK\nXjhwkmv9Fr3Qjd0j8Rj2hJYbBx0/8XVBiuN1D/YM8ZfJFn9yKNaLsCcTVmH33FzpuJ6vsHtPPnaM\ndxh7ZrYUjve5KygoKJyM3wP/qels3ylbiD1Otw677nwOuz4dYDP2UIXqQa8F7N7rAV4AfoZeaEcv\nvEi22Io9fvoBoBV4GFh23KoZJ+dkev3E2PNQfnTkmRx77FR690ngXez1/K+QsMa7gV7s96tt2O9f\nbzmOvQ6sxR4LfgD4UsJ4CmcJgnic75eCwmnHXo7uZrLFDUO9FAUFBQUFBQWF46F4nBUUFBQUFBQU\nFBQk4LrhLAhxCMJPCEIBgpCPINzjeD8UQViPIJQ4/g05xUgKCgoKCqcDRW8rKCgoOIXroRqCEAPE\nIIoHEIQA7B2FLsYeg9qGKD6LIDwKhCCKj7i4XgUFBQUFV1H0toKCgoJTuO5xFsV6RPGA4/du7LUi\nhwMrgHcdZ72LXSkrKCgoKAw1it5WUFBQcAr3JgcKQgL2MjBjgCpER0tgQRCA9n+//v8yt2DvzAbv\n+00kfJSkqfotTYCAj+bYhkgnptXUjhoVwV5BkmXsc5lpMnQT4xOEl1p9aoHjUNfdjVoQiPJ3Tx+L\npq5eLFYrMcGBCMKpz3cFUYSahnZ0XhoiwwJOLaDgEZpbezCYzMRGh5yW//P6jm40KoHIIPd8Zxt7\ne7HabAwLcO47ZLJaqe/vJMI7AF+NVpZsh7kTq81KmC5Usky/pRkQ8dFESp+obX8L2aJ0pXQmcJr0\ntsnahdnWg68mGkFihchucw8Gm4EwrzBUMr70NlGksreNCJ0//lrdqQWOQ3t/P90mE8MDA1G74Q+u\nx2CipbuX4aFBaNWeTy9qae+lr99EbHQwKpWHFYbCcenuMdDc1sOIYaFoNJ7/P2/r6afHYCQuPBh3\n/I93Ggy0GfpJCHLunmMTob6/Ax+1F6E6X1myvZY+ui3dRHlHSb4Wk7ULk60LP22s9Ot3RmeLouie\nH/AXYb8IlzpedxxzvP2UY/wwUZSCzWYVvyufJ+5ueFTS+aIoikarUfzF3tvFt8rflSwzwB9yvhfH\nff0HsdPYL1tWFEWxqbdHTPvH38XHN653Sv5YGju6xcmPvig+8O53bhnvVPzt9Q3izEv/LH61Nue0\nzKdwfL5Zd0iceemfxT+/tk602Wwen++h978XJz78gljf3uWW8Z7c9KOY+o+/iY093U7Jd5n6xfFf\nPyX+7qD87/27R98Xb957m2iwGCTL7Gl4TPy2fK5os1mkT/Qh+0R36dTT8XMa9faO+vvE1RWLZX13\nnyl4Tnw09zeSzx9gdfVhcdSXT4rbG8tky4qiKNpsNnHRB++ISz581y1/axarVbzsL++Li556QzSa\nzS6PdyrWby0UZ176Z/H3z39/WnSFwvEpLK0X51/9d/HmR94X+w0mj8/30bYcccz9fxM35pW6Zbzv\nio6II1/4i7iutMTpMa746XVx+YaXZX8Pd7TsEq/bfZNY1FUsWaas4zPxi9JMsdMo4/qd0NnueQQS\nBC32PvcfIooD9QobHXF0A/F0TW6ZC2g35mO0tRPjO1uyTF7nYYw2I5NDJ8qay2Sz8n3NYc6PGUWg\nl7fcpQLwyeE8TDYrN2ROcEr+WF5etxOz1cY9F8489cku8sXqA3zxw0GuWj6JixeO9/h8Cidm+QXj\nyF4xma/XHuKz709Wlto93HPhTGwivLx2p1vGu358FmabDX1erlPyAVpvFgwbxeqaw5isx+tkfmIm\nhU7EZDOR25knWSbG7zxMtg7aDNJlzipOo962iiaa+nYR7TvL4cg+NV3mLoq6i5kcIk9nA3xddYho\nn0CmRiTIlgXYXVtDcWsLN4zPkrzek7H6wBGK6pq558JZeGk827D3cFEdz7z0A+NHx/LIHQvdsn4F\n5xiVFM0T9y7jSGkDT/3jB2w2z5b/vWzaGBIiQnh+9TYsVin9Yk7OouQUYvwDeDf3oNNjrBgxnuKu\nJgo7G0598iAyg8ehFTTsbdsnWSbGz24T1vcer/+N+3BHVQ0BeBMoRBT/NujIKuB6x+/XA9+4PJeD\n+r4tgIoo3xmSZfa1HcBP7cuogLRTnzyIbY2ldJj6WTFinMxV2rHYbOjzDnHeiHgSQ6RvE5+I8sY2\nvtqdz5UzxhEX/t87qO7kQF4VL779E7MmJ3H7tdIfUhQ8x23Xzmb21BReencT+3IrPTrX8NAgrpo5\nnm/2FlDW0OryeAnBIcyJH8nH+bmYrVanxlgxYjydZgObG0tkyaUFpOKv8Wd/u/QbQKTPDATUNPRt\nk7vMM5/TrLdb+vdjFfuJluHsONB+EBGRSTKdHS2GHrY3lXJR3FjUEkNCjuW9QwcJ9vZmeZq00MGT\nYbJYeGnNTtJjI1k0PtXl8U5GS1sPj/3pG8JD/Xn64eV4aT1rpCucmvOmJHPHdXPYtLOY977cdWoB\nF9Cq1dxz4UzKG9tYta/g1AKnQKNSkT12PDuqqyhrc+4esGR4BlpBxbfV8hwmPmofMoIy2N9+AFFi\nSLGPJpIgrzQa+rY6s1TJuMPjPBN7//jzEYQcx8+F2Lv+XIAglAALHK/dQmPvdsK8x+GllharbLFZ\nyOk4RGZwJhqVPEXybXUuoV6+zIxMcmaprC8vpaG3h5XjMp2SP5aX1mzH20vDLQumumW8E9HU2s1v\n//YtsTEh/PaepahPQ0yewqlRqQR+c/cSRgwL5Ym/fUdDc5dH5/vF/Cn46rT8Y80Ot4y3clwmTb29\nrC2TZ/gOMD0ikXCdH6uq5ClhtaAmK3g8hzoOYbFJ81Z7qQMI8x7vcSU8RJxWvd3Qtw2VoCPCZ5Jk\nmf3tB4nQRRDnEytrrh9q87GKIhfFOefsqO/uZn15KVekj8FbZiz98fh0Ry517V3cu3SWR2ONLRYr\nj//1W/oMJp599GKCA+XFlCp4jqsumsTC2aN58+Pt7Dp41KNzzR+bzLgR0fxz7U6MZnk7c8fjyoyx\neKnUvJ+b45R8iM6X2dGpfFd9GKsozws+MWQCraY2KvqkO4mifc+jzZCLyeq5e6M7qmpsQxQFRHEc\nopjp+FmNKLYiivMRxRREcQGi2OaG9WKwtNBhKiTKd5ZkmaLuYvqsfUwKlRcq0W02sLG+iAtjx6BV\nOZcU+EHuIYYFBDAvIdEp+cEcqW1ifW4pK2dPINTfc0rRbLby+F9WYTRZeObhFfj6eHlsLgX5+Pp4\n8cwjKzBbrDz+11WY3KAcT0SIvw/XzZ7Aj3mlFNa4vms/N2EkcYFBTodraFQqlsSOYXNjCZ2mflmy\nE0Mm0Gftp7D7iGSZKN9ZdJqKHcnI5xCnWW839m0jwmcSGpWPpPP7rf3kdxUwMUR+qMS31bmMDoom\nJVBGUucgPsnPwyaKZI91PTSt32TmjY17mZwUy/TUeJfHOxkvv7+FvCO1PHrHIhJHnF35qec6giDw\n8G0LSRwRwe+f/56Gpk6PzvXLC2fS1NnD57tcDzML9/VlSUoqXx4poNdkcmqM5XFjaTH2sKtZ3kND\nVvB4BAQOtks32qN9ZyJipanfc979s86N2Nhn93xF+0qP7z3QfhAvlRcZgemy5lpfV4jJZmVZ3FhZ\ncgOUt7exs6aKq8eMR61y/aN+Zd0uArx1XDfHPbHSJ+Kf720iv7ieX925mPjYMI/OpeAcI4aF8thd\niyksaeAf72zy6FzXzp5AgI+Ol9e5HuusEgSuHjOOXbXVlDq59XdR3FjMNivr6gplyWUEpaNT6WSF\nawzomQG9oyCfHnM1PeYqWTo7tyMPq2hlYog8XVfR00pee53TOttstfJJfh6z40cyIsj1ULhPd+bS\n2t3HnYunuzzWydi4o4hPv9vP5UsnMH+m6+ElCu7HW6flqQeXY7XZ+M1fPOvwmJIcx6SkWN7cuBeD\nG+a5Zux4ekwmvi2W7nQYzJzoVPw1Or6tkmfIB2gDSAtIZX+79JyeEO8xaFUBNPRtl7tMyZx9hnP/\ndnTqcIK8pMUqi6LIgY4cxgSmo1PLK0u0uiafOL8QxoUMd2ap6PNy0ahUXJExxin5wRTVNbPxcBkr\nZ2cR6ONckqIUtu4p5fPVB7l86QTOnyEvHlzh9DJnWipXLZ/EV2ty2LzbudAHKQT42B/WNuWXU1DT\n6PJ4l6ePwUulRn/YOa/zmOBhxPuF8kNNviw5L5UXY4MyONieIzlmLtArBW91pGI4u8DAZxcly9mR\nQ4AmgGR/eSFyA9+JC2Od07kbK8pp7O3hWjd5m9/auI+pKXFMTJQXbiKHusYOnn15LRmpMdyxco7H\n5lFwnbhhIfz6riUcKWvktQ89FwImCAJ3LJxGc1cvX7jB6zwxZhhpYeHo8w45Ja9Ta1g4bDQ/1h/B\nKDOxOyskk5r+WpoMzZLOVwkaIn2m09S3Q7Kel8tZZTiLopWmvt1E+U6XvH1X1VdFm6mNrJAsWXO1\nG/vY1VzOkuEZTmUlGy0WvjySz8LEZCJ8/WTLH8ur63bh7+3FNbPlXYccWtp6ePbltaSOjFQU8FnC\nrdnnkZYUxXMvr6Wptdtj81wzK4sAHx2vrtvt8lhhvr4sTE7my8J8DBazbHlBEFgcm8Hu5qO0GHpk\nyWYFZ9Jh7qCiV1rMnCAIRPlOp6l/FzbRcx6ic5nGvh34aeLw146QdL7FZiG3M5fM4HGoZCb3ra45\nzMSwEUT7BDqzVD7KyyXG3585CSOdkh/MZzvzaOvp4/aF01we60RYrDb+8MJqBAGevG8ZWq1zIYUK\np485U1O4ZHEmn3y7nz05FR6bZ3JyHBMTh/PWxr0uxzoLjp3Cw81N5DbKq44xwJLYDHosRrY1lsqS\nmxBst3kOdkgP14jynYHB2kKXyTMOpbPKcG43FmKydRLlI33b60BHDgICmcHyEkXW1xViFUUWD8+Q\nu0wA1pWX0mEwcNUY5xJUBlPa0MKGvFKyZ3nO22yziTzz0hoMRjNP3LtUUcBnCVqtmifuXYrJbOGZ\nl9Z4rNxRgI+Oledl8VN+GUV10p78T8bVGePoMhpZUypPiQ5w4fAMbIhsqJe3dTg+eJw9Zk6mEjbb\nuukwup6l/r+GTTTT3L+XSF/pxmNxTwl91n6yQuQlVJd1NVPa3cwSJ3V2bXcXW6sq+Fn6GDQuhtYZ\nzRbe2bSPyUmxHvU2f/DlbvKK6njglguIiZTX2Eth6LjrujkkxIbx9Es/0NktL1dDDrddMI2mrl6+\n2Stvd+54XDwqHW+Nhk8LDjslPzViJEFaH9bWydOjkd4RxPoMlxXnHOVrtxEb+9xTSvVYzirDuanf\n7u2K8JFeUSKn/RBJ/okEauV5INbWFTDCL5RRQVGy5Ab4LP8wwwMCmREnzctyMl7fsBdfnZaVHvQ2\nf7nmIHsOVXDX9XOVuOazjBHDQrnrhnnsy63k89Weq++cfV4Wfjov3vhxj8tjTY2NIy4wiM8LnVPC\nKYGRjPQPY22tPCUcoLVv/+d0SN9yjPCZAgg09nm2lNS5SJshF6vY/+8bmRQOth9CK2gYEyjPAF5T\nV4AAXDB8tMxV2vmyMB8ReyiRq3y9N5/mrl5uvcBz1Y8KS+t5+9MdLJg1ioXnOXfNCkODTqfliXuX\n0tndz59fXeexkIKpKXGMi4/hzY37nC4BOkCgTsfipBRWFRXSb5a/U6hVqVkwbBQb64tkh2uMDx5P\ncU8JvZY+Sef7aCIJ0Cb+22Z0N2eV4dzct5sgr1S8NdLqIXeYOqnoqyQzWF68Wruxj93NR1k0fLRT\nYRq13V1sr67k0tHpstrEHnestk7WHiri8mnjCPaTlpEul+q6dl55fwvTskZy8SKlycnZyIoLxjFj\nYiKvfrCFqlq3FEL4L4J8vblyxjjWHSqhuqXDpbFUgsDP0jPYUV1FTZf8DHNBEFg0PJ09zRW0GXtl\nyWYFj6eyr4p2U7uk83XqYIJ1ozyapX2uYr9xqQj3ll6G7lBHLqMCR8nOSVlXW8CEsBFEestv6W4T\nRb4oyGd67AhiA13z3FptNt7ZtJ9xI6KZkhzn0lgnwmiy8NSLPxAW4s/9v1jgkTkUPEvKyEhuvmom\nm3aVsH6bc0l3p0IQBG5ZMIW69i7W5hS7PN7l6WPoMZlYW+bcTuHi4en0WkxsbyqTJZcZPA6raOVw\np3TPeaTvNFoMB7DajHKXeUrOGsPZYuun1ZBDpAxvc56jS9i4IHkZ1hvri7CKIouGyavCMcDXRwoQ\ngctGO7dlOJj3txxAQOBaD3mbbTaR515di1aj5tE7Fildps5SBEHgkdsXodNpefaVtR4L2bjmvCxU\nKoH3trju2b50lP3v46sjzoVALByWjg2RH+uLZMmNDbbrg7xO6d7uSJ+ptBnysNg8t616LtLUv4cQ\nXQZeamnGbKOhkUZjI+OD5IW4VfS0UtzVxMJhznle99XVUtXVyc/coLM35JVS09rJjfMmeUyfvvPZ\nTipr23j0jkUE+nsuWVzBs1y9fDIZqTG88OZG2juleVPlct6okSRGhfLOpv0ue7anxsYxPCCQLwud\nC/2YEjGSQK0362rlVURK9k/CT+0rq/NrpM8UbKKRNqNzSegn46wxnNsMh7BhdmybSiO38zDB2iBG\n+Mp76l9fV8gw3yDSg2PkLhNRFPmysIApw2JdLmfU2Wfgy935LMlKIzpYvhdFCt9uyCUnv4a7rp9L\neKi/R+ZQOD2Ehfhx9/VzyS2s5Zt1zmU/n4rIIH+WThjF13vy6eh1zYgcHhjI9Ng4viwscEqhjwqK\nIs4vhPUyy9LF+cQSog3hUId0JRzhMwURC60G51vP/q9htvXSbsgnUo7O7rA/zIwLlhcuMfAduMBJ\nw/nLwnz8tFoWJac4JT+AKIq8t2k/cWFBzBvjXNOsU1Fa0Yz+m70smZvBlMwEj8yhcHpQq1U8esci\n+vpNvPDWRo/MoVIJXD9nIkV1zewqqXJtLEHg0tHpbK+upL5bfjK6l0rNvOg0fmoowmyTHjqiElSM\nCcogr/Ow5HtFuM9EBNQ09bkeWngsZ00/zqb+vQhoCPOR5nm1iTbyO/OZILOAfq/ZyI7mcrJHTnbK\nW3CosYGjHe3cMnGybNlj+XxXHv0mM9fPlddyViot7T288v4WJoyJY+l81+P6hhqr1UZDTRuVZU1U\nlTXR3NBFZ3svne29mIz/iany0mkICvEjKMSP8KhARiRFEp8USUxc6FnfIXHJvAzWbing1Q+3MGty\nEhFh7n/gun7ORL7ZW8Dnu/K4eb50o+h4XDIqnYc3rOVgQz0TYobJkhUEgQUxo/igbDfdZgMBWmme\nN0EQGBs8hn1t+7CKVtTCqRNhw7wzEdDQ3L+XKN8Zstb5v0pr/0FELET4SNeFeZ2HidJFEuUtL7dk\nQ90RxgQPI8ZXfpiFwWJmdUkxi5NT8dW61inwUEU9uVUNPHbp+W6p3X8sVquN515ZS4CfjrtvmOv2\n8U83oijS2tRNZVkjlWVNNNS209lm19n9vf9ptqHWqAgM9iUoxI/QiADiRoYTnxRF3MhwvHSud3cc\nSkbGhbPysqm89ckOFs/NYFqW6xVdjmXZxFG8+MN23tt8wOVGPJeMSucfe3axqriQWyfK1/8XDBvF\nN9WH2NtSyYxI6Y3hxgWNZXfbXqr7ayQ5Q7Uqf4J16TQb9spe46k4awznlv69hOjS0aqklXYr7z1K\nr7WPsUHyDMItjaWYbVYWDHOuiPxXRwrQqTUsSU51Sn4As9WKflsOU1PiSBvmmS5QL7y5EZPZwkO3\nLjwrQzREUaTsSD0Hd5WRu/cohw9U0N/3H2U7oGiDQnwJCPpPfLjRYKaqvImOtl66Ov6zPebj60VG\nVjzjJyeSNT2JpFExZ93nIggCD916Adfd/y7Pv7mRpx9e4fY5UmLCmZEaj35bDtfPmYhW43wFlsXJ\nqfx20498eaRAtuEMsGDYKN4u3cmWhhKWymh6MTYogy3NWynrKSc14NReRo3Kh1DvsTT1u997ca7S\n3L8XFVrCvKXlTZhtZgq7j3BeuPSusACN/V3kttdyb/r5ziyTDeVl9JhNXDLKudC8wby3ZT+BPjqW\nT3J9rOPx1docCksbeOLepQSC1aNGAAAgAElEQVQGeCbnxdM01rWzf0cph/aUk7vvKO0t/ykp6eun\nIyjU7tTwD/RhQP1azFYa6zooOlxDZ3sfNqu9dbNKrSJtzHDGT05k/JRExk5MQHMWVoS69pIp/Ljt\nCH/913ref/5GvN38MOCl0XDVzPH8c81OyhpaSYp2vgBAQnAIE6Jj+KqwgFsmyHcwzoxKwketZUNd\noSzDeUyQPYwqtyNPchRBhM9kSjrew2LrQ6NyX7fls8Jwttj6aDcWkBp8o2SZw535CAiyuwVurC8i\nxMuXrDD5SR1mq5Xvi4tYkJhIoE5eYsuxbMgtpamzhyd+Nt+lcU7EnpwKftpZzM1XzyRuWIhH5vAU\nFSWNbPohl81r86ivtifCxY2MYP6yTFLHxhKfGElcYgS+fqf+P+jrNVJ9tJnKsiaKD9eSu7ecN59f\nC89DTFwosxeOYe6ScYxMjfb0ZbmN2JgQbrx8Oq99uJVdB496xIOxcs4Ebn/9K9YeKmbZROcz+v29\nvLggMZnVJUX8dvY8vNTybnrjQ2MJ0/nxY32RLMM5PXA0AgL5nQWSDGewK+Ej7W9gtvWgVSlhTaei\n2bCPUO9xqFXSdgJKe8ow2UyMDZIXZ/xTgz3paX6Mc86Or48UEu3nz7RY1xL5ats6+TGvjBvnTcLX\nA17Q1vZe/qXfxpTxCSyYdXZ1B2xt7mbLmjw2r83jSG41AKERAWROSWR05gjikyKJT4oiOPTUjjGz\n2UJtZStVZU2UHqknd+9RPn17Kx+/sZmAIB9mLchg9qKxjJ8yEpUHvP6ewEur4eHbFnLn4x/z7ue7\nuPWa89w+xxXTx/H6hj3ot+XwuIt2xYpR6Tyx6UeOtDQzOkJea3tvtZaZkUlsrC/i8fEXSja8g72C\nifOJJb8rn2XDLpQkE+EzmeKOt2g1HJJV2edUnBWGc6shBxErET7SQxYOd+aT4JeAv1b6Dc5is7G1\nsYR5MWmoZRbeB9hWXUmboZ8Vaa6XBvpg60Hiw4OZNcr9Ro/FYuWFtzYSGx1M9grXQ0pOB1aLlZ0/\nHeHrD3dw+EAlKpXA+CmJXHHTbKbMTiMswrmQBF8/HWljYkkbE8vCFfb2vq3N3ezdWsSWtXl89s42\nPnlzC+lZI7jkmhnMOH80ahc8rKeLqy6axOqfDvPCWxuZ+Lcb3F6Xe0ZqPCMjQ/lw60GXDGeA5Wmj\n+Lb4CFsrK5ifKC8uVC2omBOdwrraQsw2K1qVtOv01/iT6DeSvM7DXBIrzSsf4TOJI+3/oqX/IDF+\n7r+xnUuYrd10GI8wKuQXkmXyOvNRC2pGBcrrWLqxvogRfiEkBYTLXSbt/f1sqargxswJLldA+nj7\nIQQBrprhmcpEr324BZPZwn03zz9rdsIKD1Xz9Yc72LYhH6vFRtKoGG685wKmzxtN3MgIp65Dq9WQ\nkBxFQnIUsxfZH5b7eo0c2lPOlrV5/LQ6lx++2EdMXCgrsqez8OIJkpwoQ8349FgWzU7n41X7WDZ/\nLMOjXW/5PphQf1+WThjFqn0F/PLCmQT5Op9UujQllT9s+Ylvio/INpwB5sWksqH+CIWdDbJyycYE\nZbC+8UeMVqOkqjth3uMHhdi5z3A+Kx7Hmvv3IaAhVOKWX7+1n7KecjIC5d3QD7ZV02k2MC/auTCL\n74uLCPDScd6IBKfkByisaSK3sp4rZ45HpXK/gvxyTQ6VtW3cfeM8vLRn9rOT1WJlzZf7uGnZ33nq\ngY9obujk5vsXo//xEf74rxtZctkkp43mExEWEcDiSyfxzGs3ov/xEX7x4BLamrp5+sGPuXHZ3/nh\ni31YLa7VxPQ0Wq2aX94wj+q6dr74wf0JbSqVwFUzx3O4upH8auc6SQ0we0QCwd7efF8irzrGAPOi\n0+ixGDnQKi/xZUxQBuW9R+mTWBs0VDcWAQ2tBs/Vyj5XaDXkADbCvSdIlsnvzCfJPxEftfQQhD6L\nid3NR5kbneqUEbaurASLzcZFqa55cA1mC1/tyef8MUlEh7g/r6CwtJ7VP+VzxbKJZ8UO4cFdZdy3\n8jXuW/ka+7aXsCJ7Oq9/cw///PROrvz5HEYkRrrV+Pf10zF93mgeefYKPt70KI88eznBoX68+tz3\nXLvgT7zzj/X0dJ35FXFuXzkbjUbFP9/b7JHxr56ZicFsYdU+15o5hfr4MjMuntUlRU4lds+JTkUA\nNjXIK5GXEZSORbRQ1C1NTqPyIUSXTkv/ftlrPBlnheHcYjhAiG40GpU0hXqkqwgbtn/HxEhlc0Mx\nWkHFjEj52dBGi4V15aUsTEpGp3HNGP10Zy7eWo1H4uQ6u/t569MdTBmfwIyJ0uOLTjeiKLJl3WFu\nueQfPP/k1wSH+vPb57N56/v7+dkNswgOOz1b5cGhflx23Uze/O4+nnjhGkLD/Hnhd19zyyUvsnlN\nnscK17uD6RMTmZqVwDuf7fRIqaOLJo7Gx0vDJztcK/ejVatZmJjMhvIyp1pwT49MRKtSy1bC6YGj\nEREp7JZWQ1Wt8ibUewzNblbC5yIthgMOZ4e08Jkecw+VfVWym57sbj6KyWZljpPOju9KiogPCibD\nCa/ZYNYfKqazz8AV093vbRZFkRff+onQYF+uv8xz7bvdQVFeDY/e/Ba/uuVtWhq7uOPXy/hg/UPc\n8uAS4kZ6JlfnWLx9vJh34Xj+/v6tvKC/jYkzU/j49c3csOSvfPLmZowG+TrmdBEe6s/KS6eyZXcJ\n+/Ncq4BxPEbHRjJuRDSf7sh1+d61NCWVmq4uDjnRgjtM58fYkOFsbpDXEjvVPwWNoCG/S7rhH+4z\ngXZjgVtLiZ7xhrPF1k+7IZ9wGWEaBV2FeKm8SPaXZwBvbihhYng8/lr52zrbqivpMZlYmiJvm/FY\negxGvj9whMWZaS5tpZyItz/dQX+/ibtumHvGbvfVVLTw6M1v8cyDH6PRqHjihWt4/sNbmXF++pBV\nvVCrVUyfN5q/f3ArT754LVovDX98+BMe/vmbVB91vQW1p/jlDfPoN5h469Mdbh87wEfHhVmjWJNT\nRHe/a0Xml6ak0WM2sbWyUrasn8aLyeHxbGmQV5Q/2T8JL5UXBZ3Sy9mFeU+gw1io1HM+BS39Bwjx\nzpDs7CjsPoKISLrMXcLNDSX4aryYFCa/Q2trXx+7aqq5MMU5b/VgPtuZR0JECFNT3N/wZOOOIvKK\n6rjl6vPw8z0zQw66u/p54fdfc881r3K0pJHbHlnKm9/dx/KrpuEzhGtOGxPLY3+5in9+eifpWfG8\n/cJ6brv0RfbvkGewnU6uvGgS0RGBvPTuJqyOJEh3csWMcVQ0t7OvrMalcRYmJaNVqfih1LnGKrOj\nU8hrr5XVwEqn1pHin0xBl3SdHe49ARELbQbp5UdPxRlvOLcb8xGxEOYtvQFIQVchKf7JaFXSEzTq\n+jop7W5mdlSyM8vkh5JiAnU6l1tsrz5whH6Tmcuny2vaIoWquja+WnuIixaMI3GE/HhAT2M2W/jw\n1Y3cftk/KD1Sz92/Wc7Ln9/F9HnOdXD0BIIgMG3uKP756Z3c/fhyjhY1cMfPXuKDVzZiNstrI3o6\niI8NY8XC8axad4iKmla3j3/59LH0myx8f8C1zlfTYuMI9vZ2XglHpVDe00Jtr/SOhhqVhrSAVJlK\nOMuhhN1fVP9cwWoz0G4sIFyGzs7vKsRbpWOkX4JkGVEU2dJYyvSIRLzU8nf5NpSXYhVFLnSxAlJp\nQwsHK+r42bSxbtdTJrOFVz/YQlJ8BEvmud6cxRNsWZvHLSteYO2X+7n0upm8vfp+Lr5mOl5eZ04Y\nYNKoGH7/0kqeff1GVGo1j932Ls89+ikdrT2nFj7N6Lw03HbtbEqONrFms3ONRk7Gosw0Anx0fLbT\nNUMyUOfNzBHxrC4pdi5cIyoFEdjWKK+LYHrQaKr6quk2S6sjHeadCQi0uDHE7ow3nO2xckguadRl\n7qKmv1a252Jbo91bdV6U/AL4JquVDUfLWDAySXZVgGP5fPdh0oZFMHaE+6s4vPHRdry0am668syr\nQ1tf08YD17/O+y9vZMb8dF7/5h6WXjHljK2rrFarWHr5FP71zT3MXJDBB69s5P7rXqeuyv3Gqavc\ndOUMdDotb3y0ze1jp8dGMXp4JJ/vci1sRatWsyAxiQ1HyzBZ5cePDzzwbmmU50lKDxxNnaGeDpM0\ng9uuh4R/6yWF/6bNeFi2s+NI1xHSAlLRqKQbW+XdLdT3dzrt7FhTVsKIwCDSXQzT+GLXYbRqNRdN\ncj0p/FhWrc+lvqmLO6+bc8bpwr5eI3/69Wc889AnhEcH8YL+dm55cMkZnYiXOTWJVz6/k2tum8e2\n9fncfvlLHNjlXPtoTzJ/ZhqjU6J585MdmNzskLGHgY5mQ14p7T2u7ZwtTkqhtruLvKZG2bLpwTGE\n6fyc0tkAR7ql5cRo1QEEeSXTZnBfU7Az6y/xOLQacgjQJuKlllbYfiBoXG5m9tbGUmJ8Ap3KzN5d\nU02X0chiF7tOFdQ0UljTxKVTx7jdc1Fc3sjGHUVcsWwiocHSamGfLjavyePOK/5JbWUrj/3lKn71\npysJDfdMp0R3ExoewKPPXcHjf8+mvqqVu658mZ++90zXPmcJDvTlymUT2bSrhKJy+QruZAiCwGXT\nxlBU10xBTZNLYy1OSqXHZGJntfzYvgT/MIb7BrO9SZ73Ii3A7m2UmmyiVQcQ6JVMq+JxPiEDN6hQ\nb2ltsztMHdQbGhgVKC9Bb2uT3eCZGSU/J6XLaGBHdRWLk1Nc0rVGs4Vv9xcyf2wSof7uqxML0G8w\n8d4Xu8jMiGXyeNeaVribkoI67rryZTatzuXa28/n+fdvISVdfh32ocBLp2XlHfN54aPbCQj04bFb\n3+XtF9ZhMZ85Cd+CIHDL1efR1NLNN+vcr2sunToWs9XKdwfkdV09lgsSk1ELAuvK5D98qASBGZFJ\nbG8qwypKD0lJ8I1Hp9JxpEt6MnmodyZthjxE0T3/x+4xnAXhLQShCUE4POi9JxGEWgQhx/EjrfDe\nIETRRpshV7K3GeyJgTqVjgRf6YrGbLOyq/koMyOTnFKia8pK8NVqXa6m8dWefLw0apZOcH+Nzjc+\n3o6/n46rlk9y+9jOYrXaeO1Pq/njw58QnxTJPz+9k/MWnp0dDGfOT+efn91JQmoUz/3qM1559nuP\nxKc5y5UXTSLQ39sjXuclWWl4azV8tefwqU8+CTPjRuCv9WJNmfz4Q0EQmBWZxM7mo7JauSb4xeOt\n0kn2XgCEeY+jzZiLKEPZn3F4SGcDtBpy8dcmoFNLK6c18NAy8BAjle2NZST6hzPcV37Zro1Hj2K2\n2ViY5Jqz46fDZXT2Gbhkivv11pdrcmjr6OOW7PPOmFA1gB+/y+H+la9hMph57o2buPb288+KEp3H\nkpgazYv621l48QQ+eXMLv77tHbo9kETtLJPGjSArI473v9yFwejehMbUmHDGxEXx5W7pLayPR4iP\nD1Nj41hT5lyI3azIJDpM/RR01EuW0ag0JPsnydTZmVjEXjpN7tldcJfH+R1g8XHe/zuimOn4WS13\n0B5zJWZbt2TPBdiVcLJ/kqwtv7z2WnosRmY5seVnE0U2lJcxN36kS9U0TBYLPxwsYv6YZLcnBRaW\n1rNjfzlXL59MgJ/7Ew6doa/XyO/u+ZCvPtjBiuzp/Pmtm4kefuaXWToZUcNC+PObP+eSlTP4Rr+T\nJ3/5Ab09hqFeFgD+fjquXjGZnQeOkl8sXUlJIdDHm/ljk1l9sAijC9uKOo2GuQkj2VBehtUm3yid\nGZVEn8XEoTbpSS9qQU1KQIpkjzNAqG4cFlsP3eajstd4BvEOHtDZoijKdnYUdRfbnR1+0p0dRquF\nvS2VTnmbwV6GLtLPj8xo6TVkj8fX+wqICQlgWopruS3H0tdvQv/1XqZmJTBu1HC3ju0sNpuNd1/a\nwJ9//TnpmSN4+fO7GDvJ/X0GTifevl7c97tLePDpyyjMqeLea1+jpqJlqJcF2J0BN181k7aOPr5a\n6/7QsEumZFDa0OryTuHCxGTK29spa5Mfpjjw97ujqVyW3KjANGr6a+mxSItRH6ju464EQfcYzqK4\nBWhzy1iDGLhIqYZzr6WXmv5a2Z6LHU3lqBCYFiFfCRxqqKe5r5cFic7F2Q2wtbCCzj6DR+Lk3vpk\nB4H+3ly+VHpNVU/S0tjFgze8zr7tJdz12EXc/ujSs7JN6vFQa9Tc+tCF3P34cvbvKOWB61+nuaFz\nqJcFwGVLsggO9OHNT7a7fezlk9Lp7jeyqUCeAjyWC5KSae3v42CDfON+avhI1ILANifCNWr76yQn\nmwzUk291Y8zcacdDOrvXUo3J1uGUs0MtSNcB+1urMNosslr2DmC0WNhSVcGCxGSXmp40d/Wws6iS\nZRNGu73e/hc/HKSzu5+fXznTreM6i8lk4blHP+Ojf21i0SUTeerV6wkMdm9oylCy4KIsnn3jJnq6\n+rn32tc4vL9iqJcE2JuiTB4fz4df7aHfYHLr2Isy09Cq1Xy737WazgscTavWl8vTu2AvSzc6KNrp\nELvibmkeZD9NLDpVCG1G94S9eDrG+S4EIdexLSjbndhmzEWr8idAmyDp/JLuUkRE2YbzzqZyMkJi\nCPKSXnh/gI0V5agFgbkJ0tZ4Ir7bX0iovy/TU90by3aktIGdB45y1fJJ+Pp4uXVsZ2iobefBG16n\nvrqN37+0kmVXTh3qJXmEpZdP4amXr6OproMHb3idhhq32yiy8fXx4uoVk9mTU+F2r/PUlDgiAv34\nfr9r1TXmxI9Eo1Kx8ah8AzzQy5sxwcPZ1STPEzzQcrukR5ry9teOQKsKpN3gWmjKGYprOnvA2aGT\nVhXIWWfHruZyNIKKyeEJcpfIrppq+sxm5o90rY79DweLsYmiy50zj6Wv38THq/YxLWsk6SmuecTd\ngdFg5vf3fMjmNXncdO9C7n3yYrRneOMsZ8jIiuf5D28jONSPX9/2zhlTsu6mK2bQ0dXP1+vc+6Ae\n5OvNnPSR/HCwGIsLYYXDAgLJiIhkY4VzTpPpkYnktFbTL6OG/0i/kWgEDcUSdwoFQSDEe6zbdLYn\nDedXgCQgE6gH/nrcswThFgRhH4Kwj+b/Xw+3zZBHiG4MgsT218U9JagFNYn+0j3HvRYTue21Tnmb\nATYeLWdizHCCveUb3QN09RvYXHCUC7PS0Lg5c/r9L3fj76fjsiXSM9w9RV11Kw/d+AY9Xf08+/pN\nTJrpWnzhmc6E6ck8+8ZN9PYYefDGN6itHPotwEsWZRLg780HX+1267hqlYolWWlsPXKUzj7nw1MC\ndTomDxvutBKeFjmSwx219Jil15V2RgmH6sbQZjznDGdpOhtOqLfbDHloBF8CvaQZpSU9do/RwMOL\nVHY1H2V8aCx+GvnOgI0V5fhoNMyIdS284vsDhaTHRpIYFerSOMfy3Y95dHb3c8Pl7msR7CyGPhNP\n3PU++3eUcu+TF3PFTbPPqHhrdxMTG8pf3r6Z4fHhPHn3B+ze7JojwB2MHTWciWNH8PGqfW6vsLFs\n4mjaevrYVeJas5XzRyZyoL6O9n75VTqmRYzELNpkdX71UmkZ6ZdAcbf0h5tQ77F0m49isnbJXuOx\neM5wFsVGRNHqyKB5HZhygvP+hShOQhQnEfGfzkIWWz9dpjJCdNKTLkq6S0nwjcdLJV2ZHmytwiLa\nmBou33Bu6OmmsKWZeSNdi/P6MbcUs9XKhW5OCqyqa2PLnhIuWZQ55IXz66paefjGNzEazDz7xk2k\njY0d0vWcLlIzhvOnN2/CbLLw8M/fHHLj2dfHi8sWZ7JtbylVte71gl+YNQqL1caGXNc8NfMSEilu\nbaG2W76CmxqegFUU2S9TCSf4JUj2OAOEeI+ly1SGxXbmJBO5jFSdbT/3uHq73ZhPsG40gsSwi5Lu\nUruzw0+6Du02G8hvr2eKE95mURT5qaKcGXEjXMpJqWxup6Cmye0622Kx8vG3+xg/OpYxaUNbpcLQ\nZ+K3d79P7r6jPPj0ZSy+9MxJLPckwWH+/OnNm0hIieIP933Erk1Dbzxfe8kUWtt7WbfFtSoYx3Le\n6AQCvHX8cNC1a5yXkIhNFNlaVSFbdkLYCDSCij0t8mRTA1Ko6KvEZJMWwhLqsCU7jK6FpoAnDWdB\nGLzHdAkgyz3TaSxCxEqIt7Si7xabhaO9R0kJkBdrvKelAq2gIitMfsenzRX2LeG5CS5u+eUUERcW\nxJi4KJfGOZZPvt2PVqMe8tjm1uZufnXL25hMFp594yaSR58dZYvcRWJaDM+98XMsZtu/W9EOJZdd\nmIVWq+GjVXvdOm56bCTx4cH8cFB6tvPxmJtgN6I2VchPvssMjUOrUrOnWWa4hn8yFb0VmGzStgtD\ndBmAjXY3KOEzBhd1tlU00WksIsRbhrOjp5R43xHo1NIf7Pe3VmFDZGpEgpzlAVDe3kZNV5fLOnv1\nwSIEARZnutYp9lg27iiiqaWb7Isnu3VcuVjMVp564CMO76/goad/xvxlmUO6ntNNQJAvf/zXjSSO\niubpBz8md9/QJgJPGhdPyshIPl61F5vNtVbZg/HSaJg/Npkf88pcSuweGxlFqLcPPzmhs/00XowJ\nGcbu5gpZcsn+yVhFK0d7pckF6+y2pDt2Ct1Vju4jYCeQhiDUIAg/B/6EIOQhCLnAPOA+OUO2G+0d\nc0J00gznyr4qzKJFdpvtPc2VjAkZjq8TW36bKiuI8fcnNTRMtuwArd197C6pZnFWmlu3wDq6+vhh\nUz6L5qQPad3m3h4Dv73zPTrb+3jqletJTHV/Y5ezgYSUKJ565Xq6O/t5/M736O0eumobIUF+LJmb\nwdrNBbR3Sm93eioEQWBJVhp7y2po6XJ+3KSQUIYHBLK1skK2rI9Gy7iQ4extlde6OzkgCYtoobJX\nmtyAXnKH92JI8IDO7jKWYMMsWWfbnR0VJPvLc3bsba5Aq1IzPlT+rtVmx3dqTnyCbNnBrM0pYsLI\n4UQF+bs0zmBEUeTjVftIiA1l+gTXDHtX1/H8775m3/YS7v7NcuYtlV4h5VzCP9CHp16+npjYEH53\nz4dUlLi3Br4cBEHgqosmUVHTxu4c9xrxS7LS6DWa2Hakwukx1CoVs+MT2FpZgc2J8nZTwhPI76ij\nzyI9ATLFYeuVStwp9FIH4K+Nd4uzw11VNa5GFGMQRS2iGIsovokorkQUxyKK4xDF5YiirGykdmMB\n3upIfDQRpz6Z/3x4cgznPouJ/I46JofLT8gzW61sr65kdvxIlwzeH/NKsImi2z0XX687hMlk4Ypl\nE906rhzMZgtP3f8RFaWN/OavV5GacWaUVRoqUtKH8fjfs6kqb+L39344pC26r1w2EZPZyldr3Ztw\nsigz1V6iMc/5epmCIDA7PoEd1VWYnegiOCk8noKOenplxDkny1TC3ppQfDTRZ6/H2UM6G6Q7O6r7\najDZTLKdHftaqxgXMhxvtVaWHMCWygoSQ0KIDZTWUOt4lDa0UNbY5nadfTC/muKjTVx50SS3V+mQ\nw7svbWDDqoOsvON8lvxsaD3fQ01gsC9PvXI93j5afnP7uzQ3SOsw6gnOn5FGRKg/n3y7363jTkmO\nI8TPh7U5ztViHmB2fAJthn7ym+WXt5scHo9FtHGwrVqyTIA2gChdpGSdDRCiS6fDcKYYzh6g3VhA\niC5d8vllPWWEeoUS4iU9ETynrQaLaGOSE4bzocYGekwml5uerD1UwsjIUFKinfdaH4vZbOWrH3KY\nmpXAyDj5nRDdgSiK/PPpbzm4q4x7nriYSbPkZc2fq0yYnsz9v7+UQ3uP8uLvv3Gp+LwrjBgeyoyJ\niXy1JsetCSfJ0eEkRYWyJse1cI3Z8Qn0mE1OlaWbHB6PVRRlKeEgbRARunDZSrjdDUr4XKHdWICX\nKghfjbRKEKW9A84O6d7VXoezwxmdbbRY2F1bw2xXdXZOMSpBYME410qQHsun3+0nONCHhee5vySp\nVNZ/c4CPX9/MkssmkX3rvCFbx5lEZEwwf3j5evr6jDxx9wcY+txbFk4qWq2ayy7MYl9uJWWVzacW\nkIhGrWLBuGQ2FZTRb3K+0cosx9/Vlkr5HvGs0DjUgsDeFnk7hUn+SZT1lEm+jwbr0um3NmKwuJZr\ndEYazmZbLz3mSoJ10hVIWU+5bM/F/tZKVAhkhcqPb95aVYFKEJgZ53xmdltPH/vKalgwLtmtYRob\ndxTR2tHLFUuHztu8+vO9rPlyP1fdPIeFK86M+tFnCvOXZXLNrfNY/81Bvvtkz5Ct4/KlE2jv7OPH\n7a4ZuceycHwqB47W0tLtfLjG9Fi7It1WJU+Rgj3OWS0IshIEARL9EinvlV7NI1iXTq+lGrNVWv3n\nc50O4xGCdemSdVlZTznB2iBCvaRXpTjUVoNVFJkUJl/v7q2rxWi1cJ6LYRob8kqZkDic8AD3hcDV\nNXawfV8Zyy8Yj04n35PuDorza3nxD6vInJLIXY9ddE5Xz5BLYmo0v/7TlRwtbuT53309ZA6P5QvG\nofPS8PnqA24d94JxKfSbLOwokq9vBwj39SU9PMIpne2n1TEqKFpWZQ2wP3R3mrtoNUlrvhLisCk7\njK4lWZ6RhnOn8QggSjacO82dtJhaZWVmA+xvqSItKAp/rfyKE9urKhkbGUWQt/Od+DYXHMUmiiwY\n617Pxddrc4iNCWHy+AS3jiuVI7nVvPLH75k0M4WVd84fkjWc6Vxz+zymzE7jtT+tpvCQdM+oO5k0\nLp744aF8tca9Xanmj01GFGFTvvPNUAJ13mRGxziVpe2n8WJ0UIxswznJP5E2UzvtpnZJ5/9bCZvc\n++BxNmIVTXSZSgnWSa8yUd5TTqJ/oiwDbcDZkemEs2NbVQValYqpw+XLDlDZ3E5pQyvzxzjXsfBE\nfL3uECpB4OJFQxNP3NXRx1P36wkJ8+PRP115VrbQ9jSTZqVy/V3z2fRDLt98uHNI1hAY4MPC2aNZ\nv7WQnl7poWinYlJSLIqVV2IAACAASURBVIE+OjYedq0l9az4BA7U19Fnlu+5nhQWT25bLSab9PC8\nRMduVVmPNC93kG4UINB+LhrOHUb7jShYJy2GbCCrUk79ZrPNSm57LROd8Fx0G40camxg1gjXmpVs\nPFxKTEgAo4dHujTOYMqrmskrquPiheOHJE6us72Xpx/8mNDIAB559nLUbq5Lfa6gUql46JmfER4V\nyNMPfkRHm/uS9KQiCAIrFo6noKSekgrX2q4OJjUmnGEhgWzKl99JajAz4kaQ19RIl1F+ImVWWBx5\n7bWY5Shhx4P3UYkJgkFediPRVe/FuUCXqQwRi2TDudfSS6OxSbaz40BrtdPOjh3VVUyIGYav1nmP\n7k+H7d/p88e4z9lhNltZvfEwMyYlERkW4LZxpWKz2fjzrz+nvaWHx/56NcGhQ5dMfqZzxc9nM23u\nKF7/2xoKclyrfewsKxaOx2C0sHaL+8LEtGo1s9NHsrngqEvNUGbGjcBss7G3tka27ISwOIw2CwUd\n0sPz4nxi0QgajvZKM5y1Kj/8tXF0uujsOCOtmk5TMTpVCN5qaYmBR3sqEBCI95VuBBd1NtJvNZPp\nRBm6PbX27UJXCugbzBZ2FVcxJ12ex+VUrFqfi1ajZvFc6fHh7kIURf72+Jd0tPbwm79eTUDQudOS\n1RMEBPrw2F+vprO9j7/+5osh2f5bPCcdL62aVevd04oU7Ab5vDGJ7Cquos/ofMzczLh4bKLIrhr5\nHvmJYSMwWC0UdjRIlhnhG4cKFRUSyxt5a0LxVofTaXQtqeZcoNPh7AjykubsqHA8nCT4SXc+WGw2\ncttrnSod2uFIWprhQmgdwE8F5aQNi2BYaKBL4wxm695SOrr6WX6B9Dbl7uTzd7axd1sxtz2ylLQx\n/xv19Z1FpVLx4FOXERkdxDMPfUx3l/yGH64yKima1MQoVq075NZ7xryMJDr7DBysqHN6jEkxw/FS\nqdleLT9cI8vhxDwoY6dQo9IQ5xsnuSQd2HXUgHPWWc5Iw7nDWESQTnp5toq+SmK8o/FWSw+byHEk\nDk1wYstvV201Xmo1E2Kcr0e8p6QKg9nCvAz3bfkZjWbWbC5gzrQUggNPv9G65ot97N5SxM/vW/Q/\nX0FDKinpw/jFA4vZu62Y1Z+7t66yFAIDfJg7PZX1WwoxumDkHsvc9CSMFiu7XehIlRkdg7dGwy4n\nvBeZjlJlOTISBHVqHcN8YiQbzgBBXql0mhTDudNUjFrwwV8rTZ9W9NlvrCN9EyTPUdLVRJ/F5FRO\nyu7aGkRgWqzzYRodvf3kHK1jboZ7S8V9tyGPqPAApgxBaF15UT3vvfQjsy7I4MLL/7craEjFP9CH\nX/35Ktpaenj5j98NyRqWXzCOsqoWjpRJdwycihlp8WjUKrYWOB9i56PVkhUT45TOjvD2J9Y3mJw2\nebIJfvFU9lVhE6V5yoN0qfRZajHbemSvcYAzznC2iRa6TWUEeUmvwlDRW0GCX4KseXLaaojyDiDG\nV35Zot011UyIHuZS56lNBeX46rRMSnKfgbl5Tyk9vUaWzf8/9t47So7rPhP9KnWO05PzDDCYQRhk\nAiQYQIoSRdIURYnSMy1ZwbJFH6d9zyt73z6fZ6+92t1je3ftlWRZb+UgSlbOlEiRNnMWEomMAQaY\nHHt6Oueu8P6oqsYABIi6t6qamEF/5/AQwPStW9N171ff/e7v/n7Dll3TKOZn4vjf//0pbN/bjwc/\ndnPN+1/NeOBX92DnLevw1f/+FOamjR1ysLT/u4eRzZfwwhvWCcBd/R3wOh14yQQJOzgOO1rbcZDC\ncW5xB9DmDuAtYhLuxUR+0rCTE3RuQLo8BlmxbtGxGpEqjSLoWA+GMfZKmchNosnZCJ9gPA+yvgja\nTpG/+cDsDFw8j20txjJ+XAmvjKg5avdvsk44L0RTOHR8Ar9y93DNw9rKZRF//Sc/hD/kxh/8vw/W\nDwMSYMPmDnzs0TvxwpPH8PK/mS+oQYr33joEp4PHz545Ydk1fS4nblrXiRdPm8sTvbejC6eXolQh\ndtsbuvBWfJrISe/z9qIgFRAtGcs0omvLVIm+wu11J5yzlUnIqCDoHDD0+WQ5hWQlRbTlBwDHE7NU\nCfTTpRJOx5ZwUwe94FUUBa+cmcAtG3rgMCG+L8cvnj+JtuYAdm4xtx1JClmW8bf/6SdgWQb//j9/\nGCx73Q2r6xosy+IP/+LD4HgWf/tnP4Es08eY0WDH5i60twTx1IunLLumwHPYN9iDV86Mm9pO3NvR\niTOxJSoS3tbQheMJQuHs6UGqkkayYixfa9CxAQpEZMr0p9FXOxQA6fIoAg5jnA0Ak7lJ9HjIOPtY\nfBYRpxcdnhDhHQKHZmewo7UNDo7+0NsrZ8bR4PNgc6d1FV71OXf/ncZyX1uJ73z1RUyMLuL/+k8P\nIRiuxzWT4pHf2o+BTe348n/9Wc3PqPi8Tty1bwOef30ERQt3Cvdv6sd4NI7pZfp81Xs7OiErCo7M\nk4d8bG/oxFIxi8Wi8UxFvVqIrtHiVUGNp9LlNSSc9VWAURKezKtbwSTxzYlSHtO5BLaGycXvm/Nz\nkBUFezroY8HOLyxjIZnBHRvJDsa8ExaW0jhyYhL33bWl5ocCn/z+IRw/NI7P/tF9aG4jf6nVATS1\nBvHbf3w/ThyZwM+/e6CmfTMMg/vv2oIjJ6YwH01Zdt3bN/Yhms7h7Bx9ztE9HZ1QoKYSI8XWcDvm\n8inEisa35Hq8OgkbCzEJWEDCqx2KIqIspxB0GtslLEgFLJai1e/aKE4kZrE13EHsjKZLJZxeipri\nbEmW8frZSdw21GsZv8qygl+8cAo7t3SjtZm+IAsNRk/P4Xv/9DLe+4Ht2LvfeCaUOi6CFzh87vMP\nI58t4cv/7ec17//+u7Ygly/j5QPWcc/tmiZ55cwE9TW2t7ZBYFkcoAjXGNY02XGCncIOdwc4hquG\nf10Lbr4VAutDai0J53T5Ahhw8DuMicopTTh3eYzHrp1IqC/hYQrhfHhuFhzDYEcrfXyzXtry1qFe\n6mtcjmdeOQNFUQ971RLLSxl87Yv/hp23rMO9H3738kavBdzz0E7svnUAj33xGSxH0zXtWx83Vp7U\nvm1IdRTNlHLd3toKgWVxZI7cvdDn98mk8bZdHlVc6Qvya8Hv6AEDHqmyuTROqxmSou4GBBzGzmtM\n5dWQi24Czs5WShjLxrAlTM67b83PQQFwUzu9cD4xtYBUvojbLOTsEyOzmI+mcF+N3WZJkvHFzz+O\nYNiD3/6/f6Wmfa819A604GO/fRde+beTOPRKbc86bN/UhbbmAJ5+0TrO7m4MobsxhNdMcLZbELCl\nuQVHKMyOoWALBIbFiYRxzuZZHh3udkzljIX0MQyDgGMA6TJ91qfrUDifh0/oBsc4DH1+Mj+FJmcj\nvLzxw3Ank3NgAGwOkce7HZ6bxebmFlMpjV47O4GBtka0BI3H910Lz7xyBsNDHWhvqa3j+09/+zQq\nJRG/9yf1hPlmwTAMfvdPHoAoyviH//l0TftubQ5i28ZOPPPyGctOajcFfBhsbzKVVN/FqyR8eJ6c\nhDeG2sCCwUkCEnZzbrQ4m6vi7lpgGQF+Ry/SN7JwltV8sgGHsRRt+guOZJfwlLb4oTI75lWzY3sr\nfXzz62cnwTIMbtlgXRjcM6+cgcvJ4469xkNcrMDTPz6M0VOzePRz98EfcNe077WIj/zGbejsbcTf\n/+UTKFsYNnEtsCyD9962EUdOTCKetC5U5NbBXhy6MI2ySF9Rdnd7B04sLqJEeA0Hx2NDsIXI7ACA\nbk+3Yc4G1EV+unye+l13/QnnygXDzgUAzORniNxmADiVmEefrxFewlygFUnCscUF7DKRTSNfquDN\nsTns22AuB/RKjE3FMDYVw3tvq+2W26m3JvH8E8fw8KdvQ0fPu1Pae62hvSuCj/7GbXjxqeM4eWSi\npn2/7/YhTM7Gcd7Ccq77Bnvw1sQc8iX6MrW72tpxfGGBmIS9vAN9/kYi4QyoTug0EQn3m3IvVjsk\npQQnF4GTM7ZonypMw8/7EBKML/L1Z7glRM69R+bmsLGp2ZTZ8frZSWzuakHIa43QFCUZL/7yHG7d\nvR4etzGTyApk0gV8/UvPYnhXL+68/91Jf7fWIAg8fvf/eQDz03H8+F9er2nf77t9CJKsWHqw+9ah\nHhTKIt4cM5eWrixLOBFdJG67JdSOU8k5IlHb4+lCWkwjWTYWahhwrEdFzqAo0b3rrivhrCgKcpUZ\n+A0K55JUwkJxEd1uQuGcnMPmMLn7cDq2hJIkmhLOb43PoiJJuNlC5+L510bAsgzuusV4JhKzkGUZ\nX/nLJ9HYHMAjv7m/Zv3eCPg/PnMHGlsC+MpfPQnJRDJ6Uuy/eQNYlsELr1tHwjcPdEOUZBwZI3eM\ndezUSPj0EnmRls2hNpxOGU+oD6hhX9HSEoqSsQOJfqEfeXEOolz7nK7XAySlRGR2TGtmB8kO1enU\nAtrcQYSdZGk2VbNjHrtNcHa2WMLJ6QVLOfutk1NIpgu4+1Zjea+twr/8/XPIpgv4nf/4K/UdQgux\n85b12PeejfjuP7xU0zC7/u4m9HZG8MLr1lUv3dXfAY5lcOA8fSrRHdp8e2uBXHxvCrUhUylhOmes\ngitwMVR3pmAsNjrgUDPjpMt0WZ+uK+EsKSUASvWXuhbmCvNQoKDTY3z7Lqad2NwUJBfOb2qnRM3E\nNx84Pw2eY7Gzz5o0dIqi4PnXz2HH5i40hGp3MvrZnx/F+TNz+Mwf3gOXp3aOyY0Al9uB3/r39+LC\nyDyeefzNmvUbDnqwc0s3nn9txLJwjR197RA4DgfP05cV1xeqNKe0N4fasFTMIkpwSrvL0wkFCmYK\nxsS+KhoVZCrm0jitVshKCX7B2JkUWZExW5hFp5ss3vhUYg6bKELrRpZjKIhi9UVOgyNjs5BkBXvX\n0+eAvhzPv34WHrcDe3dYd0D8Wpgai+KJ7x3EfQ/fhP5B+rCVOq6M3/rcvZBECY996Zma9nv3rYM4\ndmYGsQR9XuKV8Lmc2NLVioOj9Jzd6PGgJxii42ztHMMpwgqCAAyHa/gFdaGfodwpvK6Es6yosXJ+\nwZhwni6oXxJJqMZISk0YTkPCRxfm0ebzoc1PXxb18IUZbO1uhcdJv224EuPTy5iai+POm2vnNpeK\nFXzjS89icEsn7rp/W836vZGw/95hbNzWhW98+TkUC/RhDqS485YNmFlI4sJkzJLruR0Ctva0mhLO\nTV4vOvwBHFskc44BNc4ZAFEFQV3UzeSNCWf9IHOmPEF2c2sECmTDZke0tISyXK4ewjSCXKWEyVwc\nm0KtxPd2dEEdMztNmB0Hz0/DwXPY3kt/jZUQJRkvHziPfbv64XRYl470WvjaF56Byy3gE793d836\nvJHQ3hXBBz9+C5792VGMnbOuMMm1cOctG6AosDS7xp6BLpyaWUSuSP/u2d7ahqML88QmzIC/CTzD\nVrWaEfgEH0JC0DBnO7kwHGyQ2uy4roSzpJQBsIarT83kZ+FgHWh2GivNDQBntIcxFKQj4e0mCDhb\nLOH0zCJustC5ePGX58AwqOkBkyd/cBCxaBqf+cN76tt9NoFhGHzm/7wH8aUMnvjewZr1u3/verAs\ngxffsG7rb8/6LozMLiFdIM/FrGNHaxvenKcQzto8P0MQrtHojMDJOg1v+/mEbjDgkCnfmI4zAPgN\nCmf9xdbpNr7jdjatxklupNglPLowj0aPB+0mzI5DF2awracNTsEakXv01DRSmUJNzY6zJ2fwxgtn\n8PCnbkOooZ6z2S786m/eAY/PiW/83bM167OvqxG9nQ140cI45z3ruiDJCt4cpw+x29Hahmguh7ms\n8d0+QD0guD7QVNVqRtHp7jTM2QzDwOfopebs60w4l+DlO8Cxxg7tzRbm0OZqA2uwWhUAjKQW0e4J\nIuAwXp4bAJbzeUynU9jeSi64dRydmIckK9jdT58W6XK8fGAUw0MdiNQogX0xX8b3/+llbN/Tj203\nWVt6to5LMby7DztvWYcffO0VFPO1cZ3DQS+2DnXglYPWZYnYvU5NiH90nP6wydaWVsxnM1jKkZ0e\n9wlOdHnDOJsyfkiFZVi0u9sxWzB2vywjwCt03rChGgDgF3oNfW5WC3/pcBs3IPQX6EYKx/nY4jy2\nt7RRL/AzhRJGZqPYvc46zn7l4Hk4HTxu3lm7MI1v/v3z8Afd+NCv76tZnzci/EEPPvzJW/HLF0cw\neppedJLijr0bcOz0DFIZa85ZbOttA8+yps6mbNOy2BxfJHffBwOtRI4zoHLKXGHecOltv9CLTGWC\n+N6A60w4y0oZPofxbBOzhTkiAgaAs6kFDAXICfh4VH2IW5vphfPhCzPgWRZbe6yJL5tbTOL8xBJu\n32MsDZQVePIHB5GM5+rbfTXCr//u3UglcjUtinLH3gFcmIphdoG+etRKbO1pA8+xOHyBPCG+jm3a\ngpWOhFuIQjUAlYSNCmcA8Ak9yN6goRoMODi5iKHPzhZm0eRshJMzntHobGoRQcGNFheZa5wulTCW\nSFTHDg3empiDosAy4awoCl45dB57tvfCZVG43rUwcnwah149h498+jZ4vGSZpOogx0MfvwW+gBvf\n/MoLNevzjj3rIckKXjtkTXYft0PA5q4WU5w9FGmEwLI4RsHZQ8EWLBWzWC4ZN0o6PB2oKBUslYyF\nGfqFPpSkOPG9AdehcDbqXBSkAhKVBJFwLkkixjPL2BBsJr63E4uLau7nZvpyq2+Nz2JTZ7Nl8c2v\nHVZPhN5+U22Ec6lYwQ+//iq27+3H5h3WpdOr4+rYtK0bO/etx4++8WrNYp1vu0k9OPHqIWtcZ5fA\nY0tXC9404ThvbmoByzDVBSwJhoItmMrFURCN51jtcLcjVUkhJxojbr/Qi6xIH8e9msEyDsOO7mxh\nHu0uUrNjEYPBFmLX+JSWCmvYhNnx5tgseI7FcDf9NVZidDyKaCxTM84G1NLa/qAbH3jk5pr1eSPD\n63Phw5/chwMvjeDCCHl4GQ0G17WgOeLHq4etS4u5s78Dp2YWUazQ5XN28jyGGptwgsbsCKo66xzB\nTmGHSzUk5wwaHiQm7eWwRjgzzD+DYaJgmJMr/q0BDPMMGGZU+3/4WpdRIMMnGPtl5grqgGx3G3dv\nz2eWIEOpPhQSnFpaRF84DJ+DLoNEWRRxcnoRO/utyaYBAK8fuYCejgZ0tl3zq7UE//rTI0jEsvjY\nb99Vk/7qUPGxz96JZDyHp390uCb9tbeE0NcVwetH6FL1XAk7+8yRsEcQsC7cgFNR8pR0A4EWKADO\nZ4y3ba+SsLEXn8/RA1mp3SFO07CIswEYLlYlKzIWiwtEnC0rCs6noxikMDtOLqkv3S3N5G11qGZH\nC9wOa8yO14+MgWGAW3bVJkzjwsg8Drx8Fh/6xL6621xDPPjIzfD4nPjOP7xYk/4YhsG+Xf04dGwC\nZUqOvRy7+jsgSjJOTNEfdNzS3IJTS1HiA4IbNI2mn28wgjbNRJ0rGuNsv0GteSVY5Tg/BuDey/7t\nPwJ4DooyAOA57e/XhE8wlitzvqg+zDaXcRIeTasvzg0BGuEcxaYmegI+PR1FWZQsO5ldKJZx9NRM\nzeLkJFHCjx57FZu2d2N4V29N+qxDxZZdvRje1YsffeM1iBWpJn3esrMfx87MIG+Ry72jrx2iJOPU\nND0Jb25qpsrlrO8w6fPfCNrcqsOo88y1YJS3riM8Bos4mzUonGOlZVQUEW0Ewnk2n0ReqmCAkrPb\nfD40uMlyP+vQzY7tvdalbvvlW+MYWt+KcLA2Z1K+/88vw+N14sG621xT+AJuPPjIzXjt2dOYtShD\n0bVw884+FIoVnBih39lbCV2rHJsws1PYjHSphNkMWW7riNOLiNNLxNle3oOgEMBCwRhne4VO0Epg\na4SzorwM4PJgkQ8C+Lr2568DeOhal+EZD/yOXkNdLhQWwDEcmpzGK9aNpqMQWA7d3gbDbQAgUShg\nLpPBZhPC+ag2+LZZRMJHT82gIkq4uUZ5QF9//gwW55L4yKdvq2fSeBfw4U/eiqWFFF577nRN+tu7\now+iKOPNk9aEH2zrUUn46AT91uWmpmYs5LJYzueJ2nV5w3CyPBEJNzobwTEcFgwL5x40unYS3de7\nCos4GwA4xlg1vYtmh/GwB/2Zrfcbz5yk48zSkimz48zsEsqihB0WmR3pbBGnR+dx8/bacPbSQgqv\nPHMK9z68G756ae2a48GP3QyOY/H4t39Zk/52bukGz7M4cNSaQ8pBjwt9zQ1V7UIDff6dojA8BgLN\nOJ8mq+zX6mo1bHawjIA2zx3E9wXYG+PcAkXR35ILAK5sGTDMo2CYw2CYw/6UF27eGNEtFBfQ6GgE\nzxpPEXQ+vYR+XyN4luzXPhNTH96mRhPCeXIenZEgGv3WOA0Hjk7A4eCxdaN1p73fCT/7zi/R0h7C\n3v21Letdh4o9dwyirasBP/tObUh4eKgdLiePgxaRcNjnRk9jCMdMCOeNTap40uejUXAMi35/IxEJ\ncwyHFmezYRJ28024o+OfiO7rOoQxzgYu4W1H3NhJ/kXtu2x1GXePL2jPbH2ATDgXxQouJOKmhLM+\nVq06zH34+CRkWcGe7b2WXO9aePIHB6HICh58ZG9N+qvjUjQ0+rH/3mE88/ibyGXpU3EahcftwPBg\nBw4enbDsmtt723B0gjwXs47BSCNYhqHaKRwINOF8OgqZoO9WV6thswMAbmn7W+L7Amp1OFD91q/8\n2yvKV6Eou6Eou9FknBwXiotEBAwAFzJLWEdIwAAwor2ohwju73KcmJzH1m7rtvwOH5/A9o2dNUmg\nP35uASeOTOADj6gr6DpqD45j8cCv7sWptyZrcuDEIfDYvqkLh45PWnbNrT1tODFFT8IbG9X5N0Io\nnAFgnb8JFzJkW6YtrhYsFo3H2K0pvBNnqz8n5u2F4iI8nBt+3nh2jPOZJbS4/PALZOlDzy0vQ1YU\nDDWa4OypebSF/WgO+qivsRKHjk3C43Zg44D9VfvKZRFP/fAw9u4fRGsn2Q5rHdbhwY/djEK+jOd+\nfrQm/d20rQfnJ5YQT5Kl7bwahrtbkcoXMb2comrvFgT0hkI4GyMPV+n3NyEvVbBQMB7m0epqQUbM\nGj7UTQs7VdAiGEZlCPX/5EuOq0BRFCyWomghEM4FsYK5fBL9fuOhHTpGlpcQcXvQ5KFzixdTWUTT\nOWztseZkdiyexcRMHLu31SazxRPfOwiHk8f7P7SKtqLXIO55aCecLgFPfK82qelu2taD6bkEFmNk\n8WlXw3B3K2KZPBaSZAnxdTS4PWjx+uiEc6AR84UU8qLxmO0WVzOixajhvKBrALZxNqAK5xYXWXaM\nsUwM/RRhGlWzw5RwXsCWLms4GwCOnJjEzi1d4GtgPrz6zEmkEjl8oO42v6sY3NKJDVs68MT3DlAb\nBiS4SdMER05MWXI9fbfl+KSJncLGJmqzAwDGMsbbtrjUHaYFmw0PO2fwzwB8SvvzpwA8btWFk5Uk\nynIZrS7j23CTuWUoAPp95ML5bCyGwUbydjpOTasPcXMXfSq7lXjzpDopdg/bfyCpkC/hhV8cwx33\nbIE/SHfIpg5r4A+4sf/eYbzwi+M12frbqY0vq+Kc9fGvzwcabIhEcHaZ3L3o0+b9RHbZcJsWVwsq\niohE2Zp81qsAtnE2AERLUTQ7jXO2oigYz8bQ7zeWI3olzi7H4OJ5dAeCxG0BIJkrYDaexhaLOHs+\nmsLcYgq7hmtjdvziB4fQ1tWAHTevq0l/dVwdv/LRPZgaW8KpN63bvbsaNvS1wOdxWsbZ61oicPIc\nTs/Qr6E3RBoxlU4hVyY7aN7nU+f9OAlnO9X5Gi2RC3USWJWO7jsA3gAwCIaZAcP8JoC/BPA+MMwo\ngPdqf7cEi0X1IZKQ8HhG/fL7CElYVhScjy9jMGJOOLMMg8F2evdjJY6cmILf58L6Xvr4PaN48akT\nyOdKuP+je2zvq45r4/6P3IRioYwXnzpue1/rupsQCrjxpkXuxYb2JvAsa4qEByONGI0vQ5LJXOAq\nCROEa7Ro/BItWWq8Xh+oMWeLsojlUhzNLuMcuFTMIieWq4seEpxbjmF9QwQc4XkWHfoY3dRprdmx\na7jLkuu9E6bHl3DyzUnc//BNYCl//zqsw/73D8Prd+EXPzpke18cx2LH5q7qeDMLnmMx2NGMUzP0\nZoeunc7HjQtgQM2sERBcRJyt80u0aC9nW5VV49egKG1QFAGK0glF+ScoyjIU5W4oygAU5b1QFLoS\nLVfAkraaaCZ0nAGgx0smnGfSKRREERsayF0PHSOzUfS3NFiWC/To6Rls39gJlrU/u8W//uQIutc1\nY+M2+wm/jmtjcLgTvQMt+NefHLG9L5ZlsG1jJ46etsa9cAk8+loacGaWntQGIo0oSxKm0mQxd90+\nNc5zImechqokbLN78a6gxpy9XF6GDLm6GDGCCY2ze33k3Dtq0uzQx+jGTmvMiaOnZhAKuNHXRX9P\nRvH0j4+A41m894M7bO+rjmvD5XHgrvu24tVnTiGbtqYk9jth++ZOzC4ksbRMFxJ3OTZ2NOPs7BJk\nmS7UZECbh+cIhTPDMOjxNWCSgLMdrANhIbxKHOcaI1paAgMGEYfxQw8TmThaXH64eTLxOqo97PUR\nc8J5qMMat3lpOYPZhSS2b7Y/m8bMRAwjx6dxzwd31lPQXSdgGAb3PLQT507OYmrMfid0++YuzEfT\nWFiyJs55Y0ezOeGsLWBHCcM1XJyANncQkwTbfg2OBnAMh6XiGhTONYb+ImtyGufByaz6wuzxkR1u\nSxWLiOZyWN9AfyjuzEwU7eEAgh6yQ4lXw9HT09i2sdN2HpUkGc8/eRQ33bYB4Yg1hxrrMI97PrQL\n5ZKIV/7t5LU/bBLbN6sm11un6ctlr8SmzmbkSmXMxOkOCHYHgnByPDFnA+qiWY8WMIomV6Ptu4Sr\nUjgvlWKIOBqIyLZvqgAAIABJREFUUtFN5eLooXAu9O2FAUrHOZ7NI5rOYajDGufi2JlZAMC2TfYL\n55eePg6GYXDnfVtt76sO47jzvq1gWQYvPXXC9r62a+Ps+MisJdcb6mjCciaPWIbu1PO6sCqGLiTI\nzdAeXwOmsgnDn+cYDg2OBiyValPAYC0jpn2HJKEaU9k4BJZDm4csTlkfG+tN7BKenVuyzOyILmcw\nH03XhLNPHB5HIpbFex7YbntfdRjHwKZ2dPQ04qWn7efs9T1N8HocOG6RcNZDTEcoDQ+OZdEXDuM8\nBWd3exuwUEihLBmvhtjkaKryjV1YtcK5kaDwCaAK524veWnq8/E4mjxeBJx0zsPZOdVpGWyzhoSP\nn5mB2yXYHt+sKApefOoEhnf3orElYGtfdZChodGPrbv78OLTx20/qd3f3QiP23oSPjdHR2x+pxOt\nXh8uxCmEs7ehGrJlFE3OSDU0rA56LJVi4BgOISFkuM1ULo4uTxgcQ/aa0s2O9WE64VwoVzAVS1p2\nJuW4ZnZs3dhhyfXeCS8+dRxujwN77xi0va86jEM1oIZx7NA4lpesCaG4GjiOxZbBdhw7Yw1nr2+N\ngGMZnKXkbABYH26g4uxubwMUANM544ZHk7MRiXISFblC3J9RrErhHCMUzrlKCculHLoohPN4Il51\nuWgwOq+S+IZ2a2LbTp6bx6aBNttTGk2MLmJ6fAn73z9saz910GH/vcOYnVzG+Dn6EtZGwHEstmxo\nx8lz1pRx3dCmxbvN0YvR/oYGKse5yxtGslxApmI8I0mjoxGxMpnYruPtiJViiDgiYAlE8HQugU4K\nzh5LxOFgOXQG6Bb8FxbUHND6WDWLk2fn4HLytpsdYkXCa8+dxs13DsHpsuY8TR3WYf+9w1AUBa89\ne8r2voYHOzAxs4xsrmT6Wk6BR09TGKPz9MK5P9yAmXQKJdG4cwygqtmm88aFc6MzAgUK4mXLjmi8\nDatOOIuyiFQlhUaHcTdhJq+mk+oiLLUNAGPJBPrC5OStY3Q+hojfgwaf+VRuxVIFFyai2FSDBPqv\nPHMSLMtg392bbO+rDnLc8p5NYFkGL9cgZm7jQCvGpmIoFMnSCV0JIa8bTQEvRhdMkHAojLFEgtht\n10l4Jmc8vVyjsxGpSgplG92LGwGx0jIancY5W1EUTOcSVLuEY4kEekMh6owaukAYsEg4nx6dx2B/\nq+1mx/HD48ikCrj9ni229lMHHbr7m9Gzrrkmcc6bBtqgKMCZ89YYKwOtjeY4OxyGAmAiRZba8yJn\nkwhndd4u14XzRcTLCShQEHEaF8G6zU/qOCcKBSSLRfSF6IXz+YUY1rfSx9qtxLnxKCRZqYlwfu3Z\n09i8s6d+wOQ6RajBi+FdvXjt2dO297VpoA2yrOCcRYcR17dGMLpA7+L2hRuQKZewXCA7oa67lyTb\nfhFN7NnpXtwIWC4vEx3mTpYLyIolKsd5PJlArxmzY2EZTp5DZ4QuB/RKVCoSRsej2DRgXSGVq+G1\nZ0/D6RKwa9+A7X3VQYfb3rsZJ9+cRHI5a2s/G7Xxdua8NVVm17dFMLOcQr5EZyD0abv24wnj3Auo\nKek8nEDG2ZqpGivZt1O46oTzsrZtGiFwnGc1x7nDYzy+DgAmkurDohXOiqLgwmLcMuE8oq0eN663\nl4TnppYxeSGKW99Td5uvZ+y7exOmx5cwPW5vDO7QOnW8jVywxr1Y1xrB+GKcOr1Rb0idx/r8NIpO\njzqPZwm2/XSxVxfO9FB3CdNUnN1JyNmSLGM6lUKvCbNjbHEZ/S30OaAvudZ0DBVRwpDNnC3LMt54\n8Qxuum1DPUzjOsa+uzdBURQcePmsrf34vS50toYwcsGaCnrrW7Q8+FE6MdobpONshmHQ7glhNm88\no0fYEQIDpqoV7cCqE876C4zEvZjNJ+HhHQg53ER9TWrbCvqLmhTziQwK5Qr6W6wRzmfHFhEJe9HY\nYK8L/MaLIwCAm+/aaGs/dZjDLdrz+eULI7b2Ewl70RzxW0bC61oiKFZEzCbo0hv1aCQ8SbjtF3C4\n4BecVVFmBA0OVYAt2+herHUkKkkoUNBAsEuoP6N2QuE8n82gLEvVFzUNLizG0d9Cf65lJc5qc0Zf\nfNqF0VNziC9lcPNdQ7b2U4c59A+2ork9hNefP2N7X4PrWi0zO3QNc2GRzkDwO52IuD3EwhlQDc85\nAs4WWAEBIYB4qR6qUUW8rH7xYYdxR2Eun0K7O0icQ3MimQQDoJOybOt4VH1w/c3WkPC5sUUM9ltT\nyeqdcPClEfQOtKC1g961qcN+NLeF0D/YioOv2OteAMCG/maMjlsjnPX5MBElJ1FAnY8sw2CKUDgD\nQLs7hDki90J3nOnutY6LZkcDEWfT7RLqi6luSuGcL5WxkMxYJpzPjS3C53WivcV82Mc74cDLI2BZ\nBntur2fTuJ7BMAxu3j+EowcuoFS099zE4LoWRGMZJNN509fqagyCZ9mqpqFBTzCIqRS5WdLuCRIJ\nZ0DlmkSF/P1gFKtOOCfKCXg4D5yc03CbuXySOBcooFYNbPX54OSN54teCX2Q9TabF6ClUgWTs3Fs\n6LP3ZHYuU8TJtyaxp57OaFVgzx2DOHV0yvaKVAN9zZicjVtyQFAXJWOUJOzgOLT5/FQk3OYJYr5g\nvJ2DFeDnfUjUhTM1qmaHYJwH5wspeHkH/IJxngeAaW1M9FAK54klLTzPIrPj7PgiBnqbbS98cuiV\ncxja1oVAyPwh9DrsxZ7bN6BUrOD4oXFb+9G1wui4+bMpAsehqzGEMUrHGQC6giFME1Z8BVTOTlWK\nyFWMZwgJO8L1rBorkSgniJwLAFgopNHuphHOaWq3GQAmlpLwu52IWJBRY2w6BllWMGCzcD5+eByS\nKGPXvvW29lOHNdh1y3rIkozjh+0l4YHeZigKMDZlPmQh5HUj5HFhcolejHYFgpihIWF3APN5siqI\nYZvdi7WOZFn97kh4ez6fRhvFLuFMOg2eZdHiowtnm1xS77XPArNDkmSMTcZs5+x0Mo/zZ+brhwJX\nCYZ390Fw8HjrwAVb+9HH3eiENWdgepvCpjl7IZuBKMtE7XTtNl8wztthIYxEue44V5GoJImS6Bel\nChLlPFo95Dk9ZzIpk8I5jt6msCVuw3lt8NudC/TogTE4XQI2buu2tZ86rMHQti44XQLe+qW9JLy+\nVy0GcX7CmswaPU3hqkihQUcggNk0eRnwNncQqUoBedG4cx4SQraS8FpHopyAg3XAzRk/Y7JQSNPt\nEmbUXUKe8mDfRDQOhgG6IvQx0jpmF5IolUWs77GmkMrVcOzgGBRFwY6b19naTx3WwOkSsHl7t+2c\nHfS70dTgwwXLhHMIU7EUJELhq6MjEICkKJjPkBWAaa0KZ7IDgnkpj5JkPo/1lbDqhHOynELIYZzU\nFgvqQ2p1kQlnUZaxkM1SJ9EHgOlYCt2N5gkYAMamYnC7BLQ12xsrd+zQGDZt74bDQReeUkdtIQg8\ntuzstX3br605CLdLwPi0NaVMuxtDmIqZEM7+ABZzWZQliahdi1udzzovGEHIEUKq7jhTI1lJISyE\niAyEhUIaLS4/cV+z6TQ6/fQcObWcRGvID6dgnv/GptS5sq7XZuF8aBxujwMbNtlfmbAOa7B1Tx/G\nzy0gnTQff/xOWNfThDGrOLspjIokYTFJl0pP11JzGTLDo7XK2cbbhQSVA5IVugPo18KqEs6yIiMt\npqtfihEsFtUvu9lNJoAXc1nIioJ2Hzl5A0BZFDGfTFsqnHs7I2BZ+2Ll0sk8JkYXsXV3n2191GE9\ntt7Ui8kLUVtzgzIMg/7uRlyYtIqEQ1hIZlCskFWS0tHu90MBsJAlcy9a3Op81nnBCEJCEKlKGrJC\n57Tc6EhVUgg6jHN2RZawXMpWFzkkmMtk0O6n42wAmLLS7JiOgWGA3g5r4qWvhuOHx7F5Rw94gbO1\nnzqsg/6OPXFkwtZ++roimJxZhiiZ5y59XkzG6MI12v3qfJ4lFM5NOmcTCWf1XlN14QzkxBwkRUKQ\nQDgvac4SqXuhbye0Ugrn2XgaigJLkugDwMT0Mvq6rElrdzWcemsSADC8q9fWfuqwFsO7VBI+dXTK\n1n76uhoxMWNNWrbOBnVezMXpiK1NE0cLWbLFQrPGA1ECxzkoBKFAQUYkE+l1qEhVUkScHStmoeDi\nszIKUZYRzWWpORsAZpaT1bFpFuNTMXS0hOB02pdXOZXIYepCFFvqnL2qsGFLJxxOHiffnLC1n76u\nRpQrEuYWze+YdWlaZmaZkrO1cwfzhJztYDk0ODxYKhpvpy/U68IZF7+EoGDciYgW1Zdds5uMTHUn\nq43SvZiLq6sjK0g4nS1iOZlDb6f9wlkQOGzYUt/yW01Yv6kdgoOvLnzsQk9nAxKpPFIZ8xk89Hkx\nEyePUwaANk0czRM6zroYWyqSCGeVb1IVunu90ZGqpBHkjXO2/oJsIhTOsXwOkqJQc3a+VEY8W7DM\n7JicjaPHZs4+rS2Wt+zosbWfOqyFw8FjcEsnTr9lr9nRq5ltkzPmM0w0B9WzA3MJOh508QLCLhfx\nLiGg6rcoAWcHNL6ph2rg4osrQCCcl4pZOFkePp4srZHuZFE7ztrgag/Tx0jrmJpVB73tJHxsCus3\ntcNho0NSh/VwOHhs2NyB0zYL594OjYRnzZNwW4MW70YpnPV5SUrCXsEJDyeQkbDGN+m6cCaGKIvI\nS3kiztafTZOLLDPGRc6my6ihC4I2CzhbkmRMzyXQ02lvmMaZY1PgeBYDm+tmx2rDpu3dOD8yZ2s+\n5x4tTMiKnUKOZdES8mGWkrMBlbdphHOTy0/kOAcEPxgwyFTs2SVcVcJZ3yolIeFYKYsml484s8VC\nNguPIMDvcBC1q7ZPZMCzLJqCXqr2KzE9pwqV7nb7SFisSDh/eq6eTWOVYmhrFy6MzKNcposZNoJu\njYT18WgGTX4veI7FPKV74XM44BMcWMzliNs2unxYLhlv5+dVkW4XCa9lpKucbdyAWC7pjjOZAF7M\nacLZSyec5xPqvbaH6UM9dCwspVERJVs5GwDOHJ/GuqG2epntVYihrV2QRBnnz8zZ1ofX40Qk7MX0\nvDV56NvDASwk6HmwxefDImGoBgA0On2IlYy3YxkWPt5b5R+rYb9wZpgJMMwJMMxRMMxhM5fKVNQv\nTn+RGcFSMYuIk5xIo7ksmjxe6lRy88k0moM+cJRpkVZiai4BjmXQ1mzeCbkaxkcXUS6JGBrutK2P\nOuzD0HAnKhUJ42etKbF6JbQ0BcDzLKZmzZMwyzJoDfmrYoUGzT4vPQmTuBca39hFwtcdLOVs9Tsj\n4Wz92TQ4yUwHfSw00wrnpBaeFzLPs7pQ6Wqzr/qqJMkYPTWHoeEu2/qowz4MbVWf28iJGVv76WoP\nY9qCXUJA3Y2hDdUAgBavDws5cs6OOL3q2QdFMdzGz/uRsWmXsFaO811QlO1QlN1mLpIRM2DAwMcb\nJ9R4KYdGF7nrG83l0Oyld4sXk1m0hugI/HLMLiTR1hwEz9t3anr09CwAYEN9y29VQo9L15+jHeA5\nFm3NQcwuWONetAR9WEzTZwJp9viwlCd3nCOEjrOH94ABg6xoX9aS6xCWcLb+nfmJHOccQg43BJaM\n75byOXAMgwa38XzRK7GYzIJlGDQGzO8SzmjCudNG4TwzEUOxUK5z9ipFOOJDU2sQ523kbADobA1j\n1oLDgQDQEvIhlslR53Ju8ngRLxSI20dcXoiKjHSlaLiNT/AhK5K/H4xgVYVqZMUcPJwbLGP8tuOl\nHMIO8sp9S/kcmjwmhHMqi+agNcJ5bjGJ9hZrUiRdDaOnZuELuNHSYR/R12EfmttCCIY9OGczCXe0\nhDC7aM2Bi9aQH4tJehe30evBEkWoRoPTQySc1W0/Xz1UgwJ6eJ2PN86F8VIeDQ5y7l3K5RDxeKh3\n+RZTGTQG1BAis5hbTMHl5NFgYwlsfZG8flO7bX3UYS8GNrXj3Cn7QjUAoKM1hHgyj0LReNGnq6E1\n6IMkK4hl6PJPN3m9kBUFywWy9hFt94k0xM6uTEi1EM4KgH8DwxwBwzz6tp8yzKNgmMNgmMNYeucK\nN1kxS0TAiqIgUc5Xv3QSxPJ5NHroSE9RFEQtFM4LS2m0tdhb+OTC2XmsH2qzpMphHbUHwzBYN9Rm\na6gGALS1BLGwZM32V3PAi6V0jmj7bSUaPV4s58kJPOzwIFUuQCbo18d7kZXscS+uQ7wzZwOGeVt3\nfEh2CRPlPMJOcu6N5fNodNML1aVUDi0WcfZ8NIW2ZvKS4SQYO7sAp0tAV5+9BVbqsA/rhtowN7WM\nQt6eCncA0Nqkhh5ZwdtNAXV+LKXodt8i2vwk5W19IZ0sG2/n5b3IrWLH+TYoyk4A9wH4PTDMHZf8\nVFG+CkXZDUXZjaZ3JoCsmIWXgIAzlRIkRUGI0HEuiSIy5RIaKR3nTLGEYkVEk9/8ll++UEYyXagO\nfjsgSTImRhfRN9hqWx912I/+wTZMjC5CrJBV0yNBW1MAmWwR2Zx5om8K+lAWJaTyxrffVqLR7UG2\nUkZRJDuVHnZ4IENBqmw8rZ6X99lGwtch3pmzAcO8rX9nXo5MOJNyNgDECnlEKM0OAIims2i0gLMB\nVaTYydkAMDYyj571zeAscMjreHfQP9gGRVEwPrpoWx96teH5qPmdwmYt2cEipXDWzcgYoXAOaQvp\neMl4Ox/vRVakN2beCfbPOEWZ1f4fBfATAHtoL5WX8kTCWV+dhAjdi0RRfaHSknAsrfbbZIF7EV3W\nCrjYSMLz03GUSyL6NtSF82pG70ALKhUJc9PWFCm5EvRxGF22wL3QREosQydII1os63KBLK+0LspS\nFQLhzHmQE+0tj3vdwELOzok5uFgneNZ4CetkOY+wgzxOOV7IVx0tGsTSuaowMIvFpbStnA0AE+cX\n0TdQ5+zVjL6BFgDApI3CuaVRK/oUMx+20Kg5zstZOi7UhXO8SMrZKh8QmR2cF6IioiybD1G5HPYK\nZ4bxgmH81T8D9wA4SXu5nJiHhzNOjPqLMSiQkXBcexGHXXSHTJY1IdDoNx/ftqhtr+iD3w5Mj6tb\nrT39zbb1UYf96Nae39SFdw55MoOWRlUMLFpAwhFtfiyl6YRzgyaS4oTCOaiRcJKAhD28B/kbIVTD\nas6W8vDwxnlQUdSdgCCVcC5UxwQpKpKEZL6IiM88ZxdLFaSzxepcsQPpZB7JeA7d/fUwjdWM5vYQ\nnC4BU2P2cXZDyAuOYy3h7AafOi9jlJytaypSzg4JOmcbF+w67+Qk6w0P4zYAHVoA/ARqnBcP4NtQ\nlKdpL5YnJGF9dRJ0uIj60R8q7ensZS1wPmKBcF6KazlNG6yJvbsSZsZjAIDO3kbb+qjDfujPb2Yy\nZlsfTREtxm3ZfIaJiOY4x7N0lQjD2vxMEJJwQFD5IE3kXniQvzEcZ+s5m8DsKEoiyrJEbHaURBH5\nSqU6Jkihj0ErOFvfJbSVsyfqnL0WwLIsOnsbbeVsjmPRGPZiKW5eOAsch5DHhTil4xx0ucAyDDFn\ne3gHeIYlyqrh1XgnL+bR4LA26YG9wllRxgBss+ZSCgpSgdBxVr/kACEJJ7VthJCLTHDriOc04W2B\nexHThHOjnSQ8GUOowQuvn+73reP6gMfrREOTH7M2knAk5AXDwBIS1kVKgpKEw9r8TBJu++luJgkJ\nu3k38lIBiqKs7QO0FnI2ABREMs5Oa7uEAUKzI1lUn2WYkrP1MWgJZ2uLyqaIfbuEutCqC+fVj/bu\nCC6MzNvaR2ODzxKzAwAa/B5qs4NlGASdzmo4rFEwDAO/4CIKr9N5pyDR3es7YdWcKqgoFUiKBA9n\nXARntBejXyArt52okjCde5HI5sEwQNBjXojGElkE/W44BPvWOHNTy2jvsbecdx21QUd3BLNT9sU4\n8zyHUMCDWNx82ILf5QTHMtQkHNTmpy6ajKLqOBMIZw/ngQIFRZnuIOONirxUgJszzoPpKmeTcWfC\nrNmhjcGwj47zVyKW1EL1wtbES18Jc1PLYDkWLe319KGrHR3dESzMJiCJ9h3qbgz7sJywRjiHvW5q\nxxkAQi43sdkBqJyQqRg/lO7m1bmcv5GFs75qICHhDCUJp0vqwwk4yQS3jkSuiIDbZUnVwHgyb2su\nUABYmE2grcPe0rB11AatnWEsWlDZ753QEPIikTIvnFmWQdDjQjJPKZy1+ZkqkYlZnQ+yBMLZpfFO\nUaoLZxIUpQJcBGZHVnsxBqg5m044J7VdwrDXvHCOJ9S50WCjcF6YSaC5NQhesK8oVh21QWtnGLIk\nY2nBmvz4V0JD2It40ppQs5DXTZ0JCQCCTld1vpLALzirms4IXKx9nL1qhLP+y7sIhHOuUgLHMHBz\nAlFf6VIRTo6Hk6dzeVP5AkIWuM0AEE/m0BCyj4ArFRGxxTRa64VP1gRaO8JYjmZQLpGlaCNBJGQt\nCeuihRQCx8EjCEgVyUjYyfEQWI7MvdBIuFAXzkQoykUizs6K6jPx8mSmRUrbdaA1O5KaEAh6LBDO\nqRwEnoPPQ3cvRrAwm6hz9hqB/hznZ+wzPCIhL9LZIioWpCoNeV1IUHI2AARdTqSohLOrurA2Are2\nYL+hQzWKkvqFkZKwl3cSxyRmSiVqAgaAVL5oSZgGACRTeYQC9jnOscU0FEVBc7u9lQnrqA2a29Tn\naKd7EQq6kUxbI5wDbifSJpL/+x1OZMrk7b28AznReDunxjsl2b5CBWsRRalEtEuovxh9hOF1+hig\n5W3dQQtYIHaT6QLCQY+tsfDR+WSds9cI9Oe4tGBNWewrIRTQ0rllzIvIgNuFdL5EnR/Z73AiQyGc\nSTnbxalzuWwDZ68e4azFFjpZ48SWE8vw8g7ivjLlEnwO8nY60oUS/FYJ53QB4aB5F+RqiM6rk7Wp\nzd7KhHXUBrpwjs7bKJwDHiRSVglnF9IFM8LZQUnCTmRF4/k9dRKuh2oYh6zIKMklIs6mdZx14exz\n0AnfdKEIj1OAwJkPfUim8ggG7OPsSkVEIpZFU2uds9cC9OdoJ2eHg9pBbAt4O+B2oiJJKFZEqvZ+\nJ53Z4eGdyBFwts47duwSrhrhXNIcZxISzotleAgJGACy5Yop4ZwtlBBwmXcuRFFCNl9C0G8fCcej\nWuokm0t611EbNLaouWOXLSqLfSUE/C4UihVLtv38bicyhKEWK+F1OJCrkCe49/IOFChI2I5k+msV\nFVkNF3JyxrlQfyakhke2rPblp+TtbKEMvwWcDQDpbNFWzk7EslAUBY11zl4TEAQeoQavzZytZRLK\nmheRAbc6T7KUvO0VBOTKdJydJ+BsnuXBMRxKq64AioXQt0iJSFiqwMOTxTcDQK5SNiWcM8USfG76\n9tXr5LTtQ599aeJiUXWyNjTZlzqpjtoholUrW47aSMLaeLSChH0uJ7ImHGefw0FFwm7OgbxEIpzV\n+VwP1TAO/btysMa5UH8mbkLhnCuXwbMsHJSOcbZYgt9tjXBOZQo14exIc52z1woizQEsR82n+Lwa\n9PFoRaiGT1tgZih52+dwoiCKkGSZqJ2HE4iEM6Dy9g0dqqE7PUQkLJbh5sgFbL5chlcw4TgXy/A5\nrRDO6gP320jCyeUsnC4BHq99B1nqqB1cHgfcHgeSy/ZVuQtoKbuyOSuEswPZEr0j4BUcyFXID0K6\neQFF0Xg7QeOdMoHYvtGhOz1OAs4uihXwDAsHSyaA8xWVs2njirPFMrwWcDYAZHMlW4VzUsvHG7Yx\nT3QdtUU44kPCojzLV4KuIbI58yLS51LnSbZIx4UeQTUz84S87eYdKMkiZILYagfruLEd57K27edg\njTvIRakCF2FGDQDIiyLcAnk7QC3dWhYleFzmSVgf5D4bRW0inkWowbu2izpYjLFnxzB/cp76cITd\nCNlMwvp4zFhAwl6nA6IkoyzSxcu5BYGYgAHAxQkoSMbb6bxTVuzLVrLWUNFeWAKBcC5IFTg58mxG\nebECj4lc9/mSNcJZURRkcyV7ObsqnO0rilVHbRGK+KoLIjugZ3jJWGB2eLR5kqM0PGiFs67lSHhb\nYB1VHrISq0Y46/FyAkMinEUqEi5UKnBTpqLLa2nAPCZCPXTktGwDXou2EK+EVDyPYIN96e7WGhRF\nwc8f/Tm+OvxV/IfP/Acs5+0rNkKLYMiDdNI+x9mrhSHlTGTD0OFxaiRKmT7PIwgoEDjHOlwcj5Jk\nXKzrO106D9VxbdBwdkkSqcyOQqUCF0VYno58uVIdi2ZQrkioiBK8NqaiSyfUA16BsL35/euoHYJh\nL1IJ+zjb7RLAsgxyefMi0ixnu7V5SsrbLk3LlYl4W7CFs1eNcBYV9csiCdUoy2L1yyZBURThohTO\nBe2QitthvtJfvqAOco8F8dJXQzqVRyBYJ2CjiJ6IIjmuZiJZ2rCEgS8N4O8O/h1Emc4xtQP+kAfp\npPW5K3Xo4zFXME/CbodGomU6cnPyPIoUbrWTFVAkIFRBc5zFunA2jEqVs+03O4qiSG12AOr408ei\nGeS1uE+Py/y1roZ0Kg+X2wGHBe+YOq4PBEJulEsiihZw6pXAMAzcLqGqKczACs4GQMzbDlZtVyJ4\n1wqMgIoN7+ZVI5z1VQPHGI99K0li9csmgRnhrKdocVlBwkXNvbZROGfTBfhtTHe31jDy0xEAgK/N\nhz/6jT9CopjAHzz1B9jxv3fghfEX3uW7U+EPupGxKF3claCPRytI2KltrxfKdOTm4niUaIQzxxE5\nFzyjuR31UA3D0BeTAoFwLsl0nF0SJWrOBtTx5zQR6qEjX6hzdh3k8GvmVTZtX7pLj8uBPGVc8kro\nYay06ehclMJZX1CT7BTyrICKDZy9aoSzpEhgwBAJ57IsEh8yURQFJUmkrhpY0oWzBSRc1ISzy4It\nxKshny3Ca+NBlrWGs4+fBQAMfnAQW1q34CObPgIAOBk9ifd84z346A8+isnk5Lt5i/D6XMhl7cv+\noI/HkgXygUIOAAAgAElEQVTVCfV5Qhvj7OQ5VGSZ6MAIAAgsh4psPJ0ey7DgGA6SYj4F340CfZdQ\nX3QYQUWWiDkb0EwSCqdaR1kUreFsbU64bHScc5k6Z6816M8zZ0GmoqvB5RIs4Wx9gVmiFM5OXp3f\nZYmMS/UFdZnAQeZt4uxVI5xFRQTHcESH2CqyBIGQhCtaihTatEZlUX1I+uAwg2JZF872bcnlsyV4\nfPWMGkaQmkph/s15AMDQQ0MAgD+7488u+cwPT/8QQ18ewp+/+OfIV+xzfd8JXp8L+WzRtsOL+ngs\nUrrEK6GTMK17oc9TEvcYUIVzmUA4A+pu1/UUknO9QxfOJGYHDWcD6kuYlrMBdfw5rODskvo7O20M\no6hz9tqDV3uedgpnt1Oojk8zMC2cdeeY0CzReYGEt+3i7FUjnCVFIiJgQCVhnlQ4a6sgGvIGLjpn\nggUkXC5rItwmEhYrEioVCS6PfduKawkjj6thGg6/A7139gIAhluG8eGNH77kc0WxiL946S+w8csb\n8fT5p2t9m3C5BciygooZYXviBDA1dcUfCRpxWlEARRcrFZHuWvo8rUhkOUF5hoNIIZzrjrNx6N8v\nqXDmCXkeUHmbVjjLsgJRki0J1ahUdOFsn+NcyJfrnL3G4NJCe4zEOCuKglKmhOREEvNvzmPs2TGc\n+v4pHPrKIRz7l2NXbedw8ChTit2VEHhVNpJybrU9q7UnzOPMa+1IeNsux3nVnC5QhTOZzpcUGQJh\nG1F7mPpDIkVFVNtbUbq1XBHBMADH2bO+0Sep04LUeTcC9DCNgfsHwK/YBfjTO/4UPz7z40s+e1v3\nbfgvd/0X7OvaV9N7BFaScAUOkjCf6Wng298GvvUtVTh/7nPA//gfb/sYz7HgOBYlCxxnQRvbZVrh\nrLcn3PbjWRYVhYy468KZDDJ04WycvyRFpuLeikzXDrj4IraGs7VrCeavdTUUC2VEtAqhdaxeKIqC\ncraMQryAzKRa1Gb0mQuQ3kqgEC+gEC+gGC8iv5yv/r2wrP5fFq/MXc3Dzdj2iW1X/JnAc5ZwNs+y\nYBh6zuarwpmsvaAtqEUCwW0XZ68a4SwrMlgCJ0JRFEiKAo6QTM0K52p7C8RuRZQg8GThKSQoa5PI\naWMoyFpBIVHAxIsTAC6GaejY3rodHxz8IB4/+3j13w7OHoSkSBAoUmuZhUOLrywb2ZZLJoEf/hD4\n5jeBl18GVoZ3vPbaVZvxHAuRkjgvvY46pyXKsBJ9R4k0xnllO9bg/GLBQsb1mbv7eoSsLUxIeFtS\nZKrdPlGWqTlXlNRnahVnAxddOTtQLot1zr4CxJJ4iaFRK6wUwCvFbSFeqIretwlg7T+5os6RvFMB\nNgCv/s/XMZIiHzuCV4C7wQ1/29WL4gg8h1LevHBmGAYcyxJX/tNR5XyZjEt1LSfBeL8sw0Im+LxR\nrJrZJysyWILIEv0Fx1K41ACIBXe1vUnhfcm1RNk2txm4KKyEelqja2L0yVEokgJWYLH+vvVv+/mf\n3vGnePzs43hkyyM4OHsQY4kxPPidB/H8p57Hno49Nb1X3e2qXG1brlgEfvELVSw/+SSwsmR1KAR8\n9KPAxz8O3H771fvgueruihlwrCpaRcptP04TvSQuxCXtFBkOg8KOYZiqGKzj2tAXMyyML/xFWaZK\nRyfJMvGO5Mq2AMCy5g0KfRzzFrjXV0OlLNY5W4MiK5h8eRJHv3YUzqAT933xPvprvYMA1kVwMV68\nRBBfLoBpwWrNGReHQMAPT8QDd4Nb/S/ivvjny/7uiXjgCrsMLRh43hqzA1B3+sxytkTIpbrBQWKS\nMAxLbKoYgf2zj2HuBfAFAByAf4Si/CXNZWQoRM6r/mVxhG4tbTsd+iqKVnhfei17hbOsk7yN24pr\nBXqYRt9dfXAF336ifVf7Ljyw4QH88b4/RtgVxq3/fCvms/O471v34aVPv4QtzVtqdq+8FjcsroxB\nlmXVUf7Wt4Af/ABIpS7+zOEAHngA+PVfB+6/H3Be++ARyzKQKR2HldDnCe1BxiqZEjrBupgj6ZcF\nC+VGcJwt4mxFc3oYAkGrQCES2jpkKNScrXO+JWaHxqkcZ18lVkmUwdnoaK8GpKZSOPr1ozj22DEk\nxhIAgM8e/iwAdU5XcpUrhjhcLoAvF8FmBbAO3QHWxa27wQ1Xg+tSQbxCBOfECn7nE1/B/X9/P+79\n8G5L7uFyqC6xNfzFmhCkNAIYADjNOCVpx4Kp8pCVsFc4MwwH4MsA3gdgBsAhMMzPoCinyS+mENGp\n/kJkCElY3zKmDY+o9msBb0oyeagJ0fUl65yWtQyxKGL0qVEAwOBDg1f93Jfu+xJ6gj1gGAbPfOIZ\n3PHYHYgX4rjnX+7Bq595Ff3h/prcr/5SlURZjVX+5jfV2OWZmUs/eOedqlh++GHVaSaAKpzNk7A+\nz2i3/aokTHgvDJV7cQM4zhZyNg0HK4QGiQ5ZoWsHXBx7VoTE6eOQtZm3ORsd7esVlUIFIz8ZwdGv\nHcXYc2O4ZA3LAD/5xE9sFcBVh7fBdYkgvpIrTBoysryUAaBxtk2wyuwAVN6l5UJazr4ouI33y4C1\nJbuU3Y7zHgDnoShjAACG+S6ADwKgEM4AKJwIWio0S6FWxSXbFN4M4OKLzU6SXwsYe24MlZyaGnDw\nwasL595Qb/XPm5s346mPP4X3fP09mM/O433/8j68+huvos3fZvftgk3EAQDKwx8GTrx+6Q+3blXD\nMH7t14CuLvo+WMYS71Vfs9Fei3aekS6o1TY3BCzmbHs5zEpYeZt2/sqKotwwZoeiKJg9OIujXzuK\nk989iVLqKvnpFSB2JnbV6wge4e0hDpoAvqoIDrvBu2oTEqM/T7tSiAIAwzKw7PImhp8ugGuxe2cX\n99g9KjoATK/4+wyAvZd8gmEeBfAoAOAb3TbfTh11kEMP02i/qR2BDuOn2fd07MHjjzyO+799P8YS\nY7jnm/fgpU+/hAZ3g/U3ufKQ39FFoPth4JzqkqOzUxXLH/84MDxsfd91rCVcm7OBOm/XURPIogyx\nKCLYE0TPHT2YeWMG+diV8+Pv+YM9aN3e+vZQiBoK4DpuDLz7o0lRvgrgqwCAp3dfYwlCvkKhXdOY\nXQtZtXK0cQFahVXbN2sRsiRfUi2QFHf3343vfeR7+Mj3P4KT0ZO4/1v349lPPgufw0d2oW99C7j3\nXiASufhvVznkJwfUrB/MRx4GPvuIesjP4l0FWSYLnboazI5v2nlG43bcANHNxkHA27XgMCtg5W3a\n+SszjDVhUqsBnMChd38vevf3AlDne/x8HDNvzGD69WnMvDGD6MkoFFlBdj6LHV/c8e7eMCX052lX\nBi1APUhp2eVNDL9a8oFdfdktnGcBrNwP7tT+jQJkW8MM5XYAzaGhK/ZrwQPjWIY69tPQ9bWDhzcK\nCdNg9sAsctEcgLenoTOKh4Yewj9/8J/xqZ9+CgdmD+Ch7z6EJz72BFy8gbK5uRzw+7+viuNi0dAh\nP2nb/cAPx8F9/j8DfU1U93wtyLI128VmD+NWMzcQ3ks1TImgX0VRiLP0rEJYxtk0HMyAoeJelqFr\np7cFrDE79HFopxnBcewNa3YwDIPIQASRgQi2fVLNV1xKlzB7cBbTb0wjM5eBv/3qKdmuV8haHnrW\nzmQAsmJZWKZsggulappKsvZVric6bCzbshix+y1wCMAAGKYPDOMA8AiAn9FciCUkVJ0MSfPD6umx\naPPK6u9vKw4RsSxrq6jVhbNEmVbmRoBeLbBhfQOaNtGL0E9u+yS+cO8XAADPjT+HX/vRr127FOjx\n48Du3cBjjwGBAPAnfwL09AB33QX84z9eFM133qn+fXER+NGPIG3fCQC2nry3ioTNOi0XD6ARttP+\nT3TgGPKNEOdsGWcz0DOmkBzmYahyZbNg6Dlb53wLuJaz8FpX7cOiHOprBc6AE/3v7cf+P92/KkUz\ncPFQoJ2cLclydXyahXoYl67tRdOCsE+Qc70CuvMs14K9wllRRAC/D+BfAZwB8H0oyimaS5Emstad\nY1IBq69maJ1erloW0jxx8iZyJRqBoFWVM1WaeY3j7E8vhmmYXbn+u73/Dn++/88BAD8d+Sk++/PP\nXnl8Kgrwla8Ae/YAI6pwRzwO/PVfX8yMsXUr8Fd/pZbFfuEF4Dd/s5oZQ3+eggUlhK8GUZLAW0Dy\n+jwTaItXUKYSEynytcuKQpRLflXCQs6uZi4hEMIcw1CluWJZljgvrA597FiSXlEv7mBjdgTBwaFS\nrgvntYSKljrUYWN+blGyLo2hKJmo1EnJ2TQ1NmRFsmWX0P4YZ0X5BYBfmL2MmjeQwLlgGCoXgjfp\nOOvVp0TCEsBXvBbP2eosOLSUOeViXThfCbGRGJbPLQOgD9O4HH+2/8+QKCbwhQNfwGNHH0PIGcLf\nvP9vLoryRAL47GeBH/3o7Y3DYeDRR695yE+vCGlnkQRRoq/Udvl1APMFh0iLX1SLXhC4ETLkGyFU\nwzrOruZdJSiRy7LExWwAgGcYapf3otlhXuzqFQPtNjzKxYpt16+j9ihpz9NWzhYlywrziDL9taqc\nTSucSQrhERbOM4pV8xZgwUImrDnOsyxEwnroeile0nY6BG0wWVFVzeHgIMuKbSTs1Eozl4rla3zy\nxkJiXE2oP/JT1e31NHnQeUunJddmGAZ/8/6/wae3fxoA8L8O/C98/uXPqz984w1gx44ri2YAyGaB\nvXuvmRmjWFCfp8ttT7lvWVYgirIl7khF0ksU05FwpepYk7UXFQkCwxIWVZLAEZSPvtGhf1ckO4U8\nw0Ek5HlAff7mOdu8SaFX7SxfrWqnBXC6hKrQqmNtQH+ednE2oLraTgs4W5RkKAp9WfkKZXVlkaKd\npMhgbeDsVSOcOZaDRCycOWIXQdAeSplSrOoCoGyB4+zQttrLNoVSCAIHjmdRyNeF80p870Pfw9Rr\nU1XhvOEDGyw9tMEyLP7hA/+ADw19CADw+Zc/j7P/7XNq9ovJSfVDggA0NKgxzcPDwL59wHveA3z/\n+8DsO5/VKhYqYBimujCyGroooBW7l1xLEysOSveiKrwpSFhfJBtuUxfOROC170oiELQ8peMscBw1\n57IsA55lUbJAOOuLyZKN4W9uj6PO2WsMF80Oh219lCoSHBZUCa5yLiVn6wtcgZR/tXYkvC0pUpWH\nrMS7n47OIHiGJ3YiBIZDhbCN/gKvUJKwk7fOvXA5dRKuwGPDhGIYBm6PE/ncVZLK36AoxAv45j3f\nRCWvugCdezsx9twYXEEX2ne3W9IHz/L49sPfxkd/8FE8uuFjGOQ3AY/8HuD3qwcBDZS9vhpy2SI8\nPqdtqY2KJfV7cVsgzHWxQkvoulgiFd6iIhETt0rCq4Yy33Vw2vcrKcZFpIOlc5wdHEdtdgDq+Ctb\nwdkObRevZJ9w9nidWJxL2nb9OmqPXFZ9B3u89Lx/LZRKFbic5jlbnydOSuOk2p6Qs3UtR8LbkiJV\nechKrJq3AM/wUKCoX4TBFYRKpmQExjAMHByHImE7HU7NJS5asFWnk3ChWEE4aPpyV4TX50QuW7Tn\n4qsUiqRURTMAPPHbT8AVcuF3Tv6Opf24eBd+9sjPLBe4+UwRXp99BFzURIE+Ps2gpM0TF+VBxpIk\ngmdZ4ni5skQmnBWFjHvqQHWRUSEQzgJL5xw7OQ5FkZ5zXQJfHYtmoJsdhZJ9oRRen6vO2WsMuYz6\nPL1+AylKKVEoVarj0wx0beOk5mw6s6NqkhDwtqiIEFjrZe6qCdXQ7fZrpvBaASfLo0wR9+bkeJQp\nSdgtqGKiWDZPnG73ReFsF3wBN7LpOgmvhHKFQ0b3fvFeoqqBRmGHK5xJF+ELuC2/ro6CFhPvtiAe\nT58nLoHuWiVRgosjJ8aSLMJBQKi6+ONtIOG1Cl04k3C2g+VRIvi8DifHo2RKOAsoVizgbJe6M1i0\nnbMLtl2/jtpDf5728nalOj7NoMrZlMaJvsB18WRcWtZ4wUnAwaIigmesD1lcNcJZYLXUaYpxQnJy\nfPXLJoFb4KndC5cW41awQDh7tEGeK9gXzxYIeZBOXrmE6Y0K+bIt38EPDmLrr299l+6GHJlUHoGg\nx7br6+PRivChgu44Ux5aKYgVOAkJGFCdaieB4K7I2ql31r7DO2sNtJxdotjtc/E8CmaEs4NHwYK4\nZK9H52z7wt8CITfy2RLESj0l3VpBJpUHz3Nwe+yJcVYUBfl8yRrO1rSNm9JxrgpnQrNEX1CT8rYd\nnL36hLNMQsICCiK5gHXzAjUJe7QYorwFwtnrUbfbc3n7SDgY9taF82VY6Ti7G9x44P97wNZSqFYj\nlfj/2XvvMDmu+0r0VOecu6d7ck4Y5EgSYBIpSBRJibISlazglWX7+T1LTs9a7T5LovXZcnjap7Vl\nhZUl+UmiFSyKYiaYAIIk4gCYASbn0NPT0zl3dXXtH9U1omkSqFuhZwbo833zD2bq3kJV3VOnzv2F\nLKwO5YRzNiufcM4WKmPpxY2VL5WInQuAE84kTvW6cFbAvbheIYazDWot8owIztaK43oeJp1WFs7W\n6zRQqyhkFEzesznMAIBkosbb1wsSsSxsTpNi75lCsQSmzMrE2dw6Ec/ZFceacKeQ/6AmcZzpMq0I\nZ28h4czdpCIBCRvVWlHbfkatFjmR23Y6jQYatQoZGUq8Wcy8cFaOhB0uM+KRtGLjb0WwzG+E8z3/\ndA8sfssGng05EtE0nG7lzjmV4UJ7rGbp8XjZAg21ihKdaJKlaZhFhHnkGBpGtXDip1luDepqjrNg\n8NeqWBbOX0a1FgUxwlmjEc3ZAGDW65CVgbMpioLFbEBaQbPD4eKEczyaUWyOGqqLeERZzuafR6sM\nyYeZdbNDHBdmK+vUTBjqkavwgkEj/LhimVaEs7eMcNavC2fh5GZQa5EtkZOhWatFmhZPoha9bv3h\nkgJeOKcUTARxuC3IZgrr5XBq+E2oRv/7+zHwwYENPhsyFIslpFN5ONxmxeZIZeQj4XS+CLNeJ9pp\nydLF9bwCEuQZmmjLr8Dwwlm5clHXG3QiOZtmy6AJc1NMOh0yEhxjs0GHtAycDXC8rSRn8wIrtpZS\nbI4aqotYNA2HS0Gzo/I8WmQwO3hT0CIyXpoXzkYCAQwAuVIRWpWaqNlVsVxYN13lxJYRzjwJF8rC\nv+RNGp1I4ayTtG1nMeqRkkGI2izcQ55UkITdXisAIBqukTAPtszC5DXhnn+8Z6NPhRjR1SQAwO2V\nP5GRB0/C/PMpBel8AVajhNJ7xSIsOnJizJaKMGuEH8eLP71KuWol1xt+w9kEjnPlZUoadmHR6lAs\nM6JrOVsMeqTz8rjENqtBUc52+TjOjtQ4+7pBZDUJd+W+KgH+ebTLULUjVVknFoM4LkzTRejVGuI6\n0KScDXDcoyfYWRSKLSOc+RdWgRFObka1FllGhHDW6ZAuiidRq1EeEtZpNTAatEiklMugdtdxAisc\nSig2x1YDy7C491v3wuxVzrVVCmu8cPYpJ5wTqRz0Og30MtQETeULMIuMlQOAdLEIsxjhzBSJQjX4\nD3adAiR8vWKds0nMjsr1JeVt/hnIFMUZFlajDmmZdt1sFoOynF35KF6rcfZ1AabEILaWVpSzk5Vy\nd1ZZzA5unVjFCudiERYRFTmyJbLwOoZlUGJLipgdW0Y4G9TcDSdxL8waHTIiQi6sOh1SIgkYAGxG\nPZI5eRwHh82IhIKlh3x+BwAgvFIjYR4DDw6g74G+jT4NUQgHufvoCyhU+BtAPJmFQ6aySclcAXaT\neDJPFQuw6siJMUMXYNYSCOfKB7tBpVyd1esNKkoFnUpHZHaYtZW8DprMeLBWhHNKpOFhMxqQyhfA\niOha+EY4bCZFOVtv0MLuNNc4+zpBJJxCuczC51eWswHu2ZSKZC4PjUolOsY5VSjAIoazSwUix3md\ns9Xyc/bWEc6Vr4Y8I1yQmjV6ZEoFsOx/rst7NVj1etEEDHAknJApOcRhNyGmYPa0t7JYV4O1TlQ8\njv7D0Y0+BdFYXeHuo1dJEk7k4JCp3F0ym4dNinAuFGEV0WUxUyrCrBF+XL7M8Y5eXQvVIIFepSfk\nbO7FmC4RCufKM5AqiBXOleNlKCPntJvWhYpS8AXsWF2uCefrAfy7V0nO5jWEUwbDI5ktwGYS35k2\nVSxUibO5tVxznAEUysJJ2KrVo8SWiStr2PR6ZGladNtth9mARFYex9llNyOaUC57Wm/Qwum2ILRU\nE848DI6t6yquLMVgd5phNCkn8KKJLFwyCedENg+HSOFcKpeRpouwEboXxTKDQrkEq5aAhCviz6iA\ne3E9w6A2rL/AhMCq4a4vqXDmn4GkSOFsN3OCQg7edtpNyBdKyCqYcF3X4ERoOabY+DVUDytL3H2s\na3AqNkc0noXZpJMlvC6ezcFuEi/AU4UCbCKEc7qU3zScvWWEs1HN3agsI3wLzKLlLliKcNvPrq8k\n5YkkYYfJiEQ2h/KbdKAjhcthRiSmbNkhf6MTwcWoonPUUB2sLMYQaFSOgAEgGs/A5ZAe/82yLGKZ\nnOhQDd5dtBvIjk/TlXg/jfDjchUSroVqkMGoNiBHwNn8izFNyNmOyjOQEM3Z3PGxtPQQC35tKMnb\ngUYXQksxlGUILalhY7GyGANFUairdyg2h1ycDQDxjHizAwAS+fy6xiJBii6sazoh4Hnnhg7V0Kl0\nUEFFRMK2deFM5iLwL+J4XhyJOi1GMGV2PftUCjxOM+LJLEqMcgRZ3+TG8nxEsfFrqB6W5iMINLkU\nG59hyojFM3A7pZdOSueLKDFlOM3i3It4gVvXTkLhnOSFMyEJU6AUIeHrGUa1kVA4V0wLkZydEMnZ\nLgv3DMYy0oWzx8kJlGhcQeHc5AJNM7U45+sAS/MReOps0MngBr8VIrEM3DIJ52g6C4dIzgaAWD6/\n/qFLghSdh43AceZ5x6SWvxnYlhHOFEXBqDYgW1KehJ2GConmxW3buSzcjYqmpce5uV0WsKyyJNzQ\n6sZaKFmr5bzFUSzQCAcTaGjxKDZHLJkFU2bhlaHmKL8+3FZxxBbPcVxA6jgni+TCOctkYVQboCKo\nIVoD99ISY3Yki2QC1rGJONtTWRvhqHKNpRpa3ACApbma4bHVsTwXQWOrcpwNAOFoav25lIpYJiea\ns1mWRaJALpxZlkWSzhNzNvCbaAU5saXeAiaNaf1iCIFdV4lbIyRhp7FCwjlp7sVaSjoJ8wJlNaJc\nzc7GitCqkfDWxtJcBCzLrr9UlUC48hx6ZehyFamsD160kCJacRf5D12hSNIVwa0jIOFSThECvt5h\nUpuQLQnnQZNGBw2lQoIm416jRgO9WoOYaMeZewYjMghnr4urx6soZ7d6AQCLs2uKzVGD8mBZFotz\na4qaHSzLYi2alsXsYMplxNI50ZydKhZRKpeJOTvPlECXGdi1wo/jece0pYQzRf0lKGoJFHWh8iO5\nmwRHwsKdV/4iJwlJ2FW5qVGRJOyxVmLcUtJd4joPV9txVcEuUU1tHAnPT60qNkcNymNhJgwAaOnw\nKTYH/xz63NKL9fMixWMTt4UYrXzYuoxkxMh/SDt0wsk/w2Rg1my9ut5EUIKzNUZkCMwOiqJg1xnX\ndwVIjnMZDevPBCn0Wg2sRv36x5wUWMx6mIw6RTnb5bHAYjXUOHuLIxpOIZPKo7ndq9gc8WQWRZpB\nnQxNsWKZHMosC49Ixzmaq5glpJy9bnYIP47nHZNG/lAN4T1nxeH/Bcv+nVyDmTUmIhJ2VC5yrEBG\nhvxN5W8yKXjhHE7KIJwrnf1Ca0nJY70VGts8UGtUmJ0MKTZHDcpjZiIElVql6LZfiBfOHunCmV8f\nYrf9fkPCZMfHi+QknC1lFYmV24SQl7PVZuSYHBiWgZoS1inMoTMiViTnXrfRhIhIzgY43g4n5Qmv\nqPNYFeVsiqLQ3OHDzESNs7cy+PvX0qmc2REKy2d2rEnmbN7sIOXsSh1qEuFcykJNqRVJ6N5SoRpm\njQUZAsfZpjNABWr9RSkURq0WZq0Wa1lxJOwwG6BRq2QRzlazAWaTDiurypGwVqtBU5sX0+Mris1R\ng/KYHg2iqdWjaJLJSjgJo0ELu1X69lc4mYZGpYLLLI6EI9ksDBoNzFqy/2+smAUFEG37pZkMLBp5\nYgRvJPDXjCRcw6EzEXM2ALhNJkREcjYA+GxmWTgbAPxeG1bCynE2ALT3BDAzvlKrrLGFMTPGvXPb\newKKzcE/hwGf9DrRq5X14bOL48K1LHe8x0TG+bz56dQL3/XLlDIwq82i601fDUoL5/8DFHUJFPU9\nUNSb18iiqM+Aos6Cos4iHL7qYBaNBemScEdATalg1xkRLZKTodtoEi2cKYqCz2bBakIe98LvtSO4\nqmz2dEdPAFOjQUXnqEFZTI0G0d7jV3SOYCgBv9cmCxmtJjJwW01QqcSNtZbNwmMyEZ9LrJiFTWuA\nRiWc/jKlDMwKbPltQlybswHBvM2Ht6QJDA+nzoRogZyzPSazaM4GAK/djFWZaub7fXYEFW6J3dHj\nRzZTWK8DXMPWw+ToMrx+O6wydWJ9MyxXtINfhpbe4Yqm8dnECudKQjih4xwV5TinFQuvkyacKeoY\nKGr4TX7eDeCbADoA7AIQBPD3bzoGy34bLLsPLLsP3qvH+Vg0ZqRLGZRZ4V/YLr0ZUcJQDQDwms3r\nX0diUGeXTzjX19mxHFK2QUlXfz2i4RQiCjrbNSiH6FoKa6tJdG1rUHSepVAc9XXy1BsNJVKoc4jf\nPgxnM/CayIkxWsjArRdO/CzLIl1Kw6qRvtW54ZCDswHBvG2tOM4khodbbxYVquExmbCWzRB3iuXh\ns1mwmkzLUn+/oc6BdLaAREq51tud/dxan7yyrNgcNSiLyZFlxTl7ORSH1WKA1Sw9ZCGUSIOiuI9M\nMQhXNJWb0HHmP6Q9BLydKqXX+UduSBPOLHsXWHbgTX5+BZYNgWUZsGwZwHcAHJB6slaNFSxYosoa\nbrvYcZoAACAASURBVL0ZkTy5gPWazFjNiBfOfocVIZmEc6PfgeVQQhZCfyvwi3f88pJic9SgHCYq\nL8+uvnrF5iiXWSytxNHol0k4x9OoE7nlBwDhjDjhHClk4NQLJ24+Rve6CNWoMmdbtNw1S5WEJ8q5\n9GbEClkwBAYJAPjMFtDlMuIiS9L5HVaUmLIsJekaA9waWQwqZ3i0dvmg1aoxNlzj7K2IdDKHpbkI\nuvuV42yAewYb6uRp5x2Kp+G2mKBVC8tXeCPC2SycBgN0hMdHChmoQBHlpaRLGVg2peN8NVDU64N2\nHgAwLHVI/sWVosnci4iIbb86i0WicLZgJZ6SRew21btQpBmsKphs0tEbgFqjwtjwomJz1KAcxoYW\noFJR6OpXzr0IR1MoFEtoapDeYIVlWazEUwg4xbu4oUwGdRZyMbuWT8NrIHEuONFn1V4HjvPVoABn\n845PisRxNphRBkuc1F1n5l6SoYw4w8Jf2f0IxqVXw2gKcFEui0Hlwii0Wg06egMYr3H2lgRvUvVs\nb1J0nsVgDM0ycDYABONJBJziQz5W02nUWch5NJJPw6U3Q0UQlpcqJRXjbCVjnL8GihoCRV0CcAeA\nz0kd0Fa5CMmScAHpMVgQLpATaZ3ZglSxgCxNEx8LAH6nDcUSI4t70VTPkfD8snIkbDDq0Nblx+jF\nBcXmqEE5jF5aQGtXHQwmnWJzzFdiKZsD0lt6R9M55OkSAiJDNfIlGolCHj6zCOFcSMNNkGSSoivC\n+XoI1bg6FOBs7iWbpIVztreyHRsm3Cnkn4VQWpxw5j/ilmPSDYr6OgfUKgrzy1HJY10NPdubMH55\nCSWaUXSeGuTHyKUFUBSF7gHlzI5CgUZoLbn+IScVwVhq/QNTDFYyadSJ4uwMkdlRZstI0cqF1ykn\nnFn2Y2DZ7WDZHWDZ+8GykjPPbBoRJGywIFsqIlMi64rnrzhZK2lx7kODiztXOUi4pfK1OLekLAn3\n7WzC6NAimFKNhLcSGKaM0UuL6NvRrOg880tcg5zmRunuRbCyLupd4rYQVyriiHcZhSJXopGiC/Aa\nhBNqovKhbtdKT67Z1FCAs3UqHQwqPZK0cB71VF6Qa4SGxzpni3Sc6yucHYxK52ytVo1AnUNxzu7f\n1YxCnq5VRNqCuDI4j5YOH8wW+cul8ZgPxsCykMVxZlkWwVgS9RIc51A6TczZABDOp9Z5QQgypQzK\nKCvG2VuqHJ1dy71kyYQz94IM58kEsL+ynbAi0r3gH67FiPTMaqfdBKvFgNlFZTv7bdvdgnyuiKmx\nGglvJcxOhJDNFDCwp0XZeZaisJj0cDukx40tRrl1wX9gkoJflwErmaPA84CPQDjzfGO73oWzQrBp\n7USczd+b1RwZZ/vMFlAQb3bYjAZYjXosyiCcAaC10YU5hTm7fxf3sXz5/Jyi89QgLximjJGL89i2\nW2HOXuCev9ZG6d1k11IZFEqMaM4uMgzWshlizgaA1XyKyHFO0LzZIU9s9xuxpYSzTWsFBWr9ogiB\nWBIOVITzckociTZUnDReIEgBRVFoa3JjZkHZ9qr8Ih4+P6voPDXIi6FzswCAbQoL55mFNbQ2uWUp\nRcd/UDaKdJyDKW49Bwjj5VZFCOc4zZ2r7foP1VAEdq0NCVo4D/Jmxyqh2aFTq+ExmbGcEh+j3Oi2\nYzEiT0JfW5MH88sx0AqGUXj9dtTVO2qcvcUwPbaCbKaAbXuU3SWcXYxAraLWwz2lYGGtwtlucZy9\nmkmDxW9MSaEolcuI5DNEnM3zjVJmx5YSzipKBZvWijgtnNj8Ru7ChfJkApjf9hNLwia9Fl6bef1h\nk4r2Jg9mFiKiSy0JgddvR6DJhaGzs4rNUYP8uHR2Bv4GJ3wBeapdvBlYlsXMfATtzfJ0JVxYS8Bt\nNcFsEBeTvVT5oK0ndC9CFTFWZxROqIliAlaNFRqV0o1Wr084tPb1jw8h0Ks1cOpMxJwNAA1Wm2iz\nAwCa3Q4syLBLCABtzR4wTBkLCiYIAsCO/W0YOjdba4SyhTB0bgYAsH1vm6LzTM+voaneCZ1WOnct\nVD4omz3i3jNLSW5dNljJxOxaIY0y2HUtJwQ83zi0yrwTt5RwBjjrPV4ULpzrKl8pKzkyMtVrNPCa\nzOsvaDFo8jgwvyYPabY1e5BK5xGOylPi7q2wY18bhs7OgGFqJLwVwDBlDJ2dwY79yhJwJJZBIpVD\nW5M8wnluLYZmt3hSW04l4TaaYNCQdQ0MVXigzkjmODsU2vK7EeDQOYjMDoC7PyHCXUKA+5BakuA4\nN3scWIomQDPSXeL2ylqZmrt6Yy+p2LGvDcl4FrO19ttbBhdPTaO+2Q2vX1lemZoLo1U2zo5DraJE\nxzjzJiSp2cFrN5+BwOzghbOuFqoBAHBqnYgRkLBZq4dVqycWzgDQZLNhMSleOLd6nJgNy7Pt19nK\nNRmYnF2VZby3wq6D7Uin8pgcqRXV3wqYHgsilchh18F2ReeZqDx3/HMoFfNrcbR4xW8fLiaTaLSR\nE/hKLgGzRgerVnhCTqwYg0OnnJt/vcOhdSDH5FBgCoKP8RvtWMmRO7+NNs5xLovcmWvxOsCUWSzL\nEOfc0uCCRqPC5KyywnnXwQ4AwOCpaUXnqUEelGgGQ+dmFefsTLaA5VACXa0+WcabC8fQ4LJDqxFX\nw3khWclrIXSceR4ImIQfFyvGYFDpYVQr05Fx6wlnnRMxAscZ4Eg4mCUn4QabHYtJ8dt2rT4nouks\nEllxBflfj84WXjhXh4TPvzKp6Dw1yIPzr3L3aeeBDkXn4Z+7jhbpwjmdLyCczKDFK16MLiQTxAQM\nAMFsEn4jmQsRo+NwKrTldyPAWfnoiBWF7775jTbRnF1kGIRF1uBv9XHVB2bD0ncKtVo1WhrcmJxT\n1uzw+u1obPXUOHuLYHRoAdlMAbsPKsvZU/NcTpRcZsfsakyS2bGQTMBnNkOvIQsbWclyH7EkvK20\n2bEFhbMDqVIKdFl4feV6ox1BEe5Fk82O5VQSJZGxY62Vh0wOEjab9GjwOzA+oywJO90WdA804PSJ\nMUXnqUEenDo+hs6+eri9yiauTcysIuCzwyZD6aTZVW49tPnElUhiymUsp5JospNvwy3nEqg3CT+u\nVC4hSSfh0snTQOBGBH/torRwHqw32ZGg88RlRJtt3L2dT4rb6eM5eyYkTxm5nnYfxqdXFc1NAYD9\nR7px6cw0clnhrn4NG4PTJ8ah1qiw56ZOReeZmOZCd7rbpDvOTLmMuXAMbT4pu4QJNNnEcHYcJo0O\ndpJdQjoOl06e2tVvhi0nnPmLQeI615vsWBbhXjTb7WBYdj2onRTtddwLY1omEu5u82FsSvk4toO3\n9mD00iLiEWXjqWuQhkQsg9GLCzhwa7fic41Ph2QhYACYXuXWg1gSDqZToMtltNjJHYVgNoF6Auci\nTsfBgl13TWsgh7PC2dGCcB7k79FylkwA8x9Tc3FxwtluMsBlMWFKLs5ur0MskUUkJr4LrRAcvLUH\nNM1g8LUpReepQTpOvTiKgd0tMFuVq98MAGPTIThsRnhc5A1H3ohgLIVCiRFtdgDAfCIuirOXs0nU\nG+1E1ZyixRgc2ppwXodbx9UjjBaFE1uDyYEknUeKJguZaHVwF34uIY6EG1x26DRqzITkqeXZ01GH\n4GoCyVROlvHeCodu7wPLsjh1vOY6b2acOj6GcpnFTXf0KTpPKpPH4kocvZ1+WcabWolAo1ahSWR2\n9mxFFJGScKZURKyYRYNJ+HHRSngBzzs1kIM3O8gcZ+4ekRoejTY7VBSF+YT4ELuOOtf6x51U9LTX\nAQBGp5StjT+wpxVmqwGvvjCi6Dw1SMPyfARzU6uKczYAjE2F0Nvhl6V86HRFw3TWiePBHE0jmE6j\nxSFGOMeJOJthGcSKMXj0ynH2FhTO3BdPpChcjDaYuYu+ROhetFZu8mxcXKiFRq1Cq9eJSZnci94O\nTriMKuw6t/f44at34JXnrig6Tw3S8OrzI/D67ejsq1d0ntFJ7nnr7aiTZbypUAStXie0anFJJvx6\n5D9shYJf/zwfCEGkwPGMS18L1RALnUoHq8aKCIHj3Gjm7u1ilox7dWo1Gq020ZwNAO11bkytyFP6\ns6vNB5WKwsikssJZo1XjwK09OPXSWK3z6yYG/2FzSGHhnC/QmFmMyMbZkyscD7b7xfEgbz6ScjbA\ncQAJZ8eLCbBgFQ2v23LCmX+BRQgc50ZThYQzZMLZazLDrNViRgIJd/o9mFyRp3FJT2URXJmU3An3\nqqAoCrfc2Y/zr00hk5ae2FiD/MhmCjh7cgI33dkni6NwNYxUnreeDnkc58mVCDr94t2AmXgMRo0G\ndRayLcilDLeOSdwLnmc8NcdZEtw6F5HZ4dGbYVBrsETI2QDQ5nRK4uyugBuZQhErcfFl7XgY9Fq0\nNXkwMqF8N9Zb3taPZDyLS7U6/JsWJ569jI7eAPwNyoURAJzbXC6z6O0MyDLe5EoEPpsZNqO48JIZ\nkWZHophDii4QcjbHM0py9pYTzrx7sVYQTsLr7kWGjEwpikKbw4npmHjHuCvgRjCWQionPWnDajag\ntdGFK+PKCmcAOPL2AdDFEk69NKr4XDWQ4/TxMdDFEm69e0Dxua5MBNFU75QlMTCTL2IpmkRXQHxt\n0elYDG0OJ1SEHwwLlfXfbBbuRKwV1mDRWKBX64nmquE/wqN3E3E2RVFoMDnX7xkJ2pwuzMRjoh3j\nLj/3bE4E5TE8+rsCuDIZRLmsbILgvlu6oDdoceLZYUXnqUEcwisJjF5awJG3K8/Zlyc4jbCtWx6z\nYyK4JpmzAaCNUDjzmq3JLPw4nmfcCu4SbjnhDAAevQdrBeGkZtcaYNMaMJchF8DtLhemJAjn7oDM\nJNxdj8vjQcWztHt3NMJTZ8Pxp2skvBlx/OkhuLxW9O9WtmUry7IYHlvGtm55nAt+HfDiRAymY1G0\nO8lJcSETg1mjg0MnvLbnWjFSc5tlAM/ZJLzVbHZiXgRndzhdyNI0gmlxjjEvEMZl4uyBngDSmQLm\nluTJdXkrGIw6HLytByePXamFa2xCHH+Ge5ceuXub4nNdHltGfZ0dTrtZ8lg0w2AqFJUonKOoM1tg\n0ZF1ip0XI5yL3LpVMi9lSwpnL6FwpigKzWaXKPeiw+nCciqFLC28/N3r0V3P1VAcW5an/vKO3gYk\nUjnMLckTN/1WUKlUuPXodpx9eQKppLLJiDWQIZPK48yJcdz69gGoVMou4YVgDPFkDjv7GmUZbyzI\nrYOeenG1RfMlGovJBDpc5MJ5LhNFi8VNFNqyVliDVy9P560bGR69BzRLI1kSXqGI52xSk6Cj8lEl\n1vCwGvWod9pk5Gxu7QyNKt9U6rZ37EAilsGF07VmKJsNLz55CV399WhoUZZPWJbFxZFF7OhrkGW8\n2dUYaIYRzdkAtxbFcDb/4UyySxgurMGutSm6S7h1hXMxgjIrvL5ys8WFuTT5F3+ni/tqEUvCdXYL\nHCaDbCTMC5gLVxZlGe9quP2dO1AqMXj5mZrrvJnw8rHLoGkGt79zh+JzXaw8Zzt65SHhseUwrAY9\nAk5xdaenYzGw+I04IsFcOopmAueizJaxVliDpyacJYP/+AjnhfNgs8WFHENjNU/mHPMv6MmohJ3C\neg9Gl+Th7MaAAy6HaX0tKYn9h7tgthrw/GMXFZ+rBuFYnF3DxOWlqnD2/FJUXrNjWZrZwbIspqNR\ndIrg7Pl0FB69BSaNcKd6rRCGR6csZ29R4exdLzkiFK0WF5azCRTLZFtYXRXhPBkRt81GURR6GrwY\nWZKncUljwAG304wLlxdkGe9q6OqvR3O7F88+Oqj4XDUIxzOPnEdDiwc92+UhxqvhwuVFuBwmNDfI\nEy82sriKvkaf6ITG8co67HKTESNdZrCUjaHFInz7Lk7HQbMl+Azy1K++keHTcy/dVYKdwhYL98zN\npckEsMdogsNgwEREfKhFf4MPc2sxZAtkDVjeDBRFYWdfIwavLCgeYqfTa3Hr2wfw8rHLtcTuTYRn\nf3UeKhVVFeE8WPlA29XfJMt4I0ur0GvUoms4L6dTSNNFYs4GgNl0BG1WspCL1fwafAZ5uiW+Fbak\ncP4NCQt3BFrMbpTBYoGQhFvsDmhVKoxHxZNwX4MPE8EIaBniziiKwq7+Jly4sqg4CVMUhbe/Zy+u\nXJjH3JSyHQtrEIaFmTAuD87h6AN7FK+mwbIsBq8sYGdfoyxz0QyDieAaehvEk9pEdA3qStIuCRYz\ncTAsi1aCLb/VijvqVdi9uBHAu/arBeE80mrmXpizhDuFFEWhy+XGRFR8THFvgw8sK1+I3a5tTVhd\nS2E5JL6+tFC8/T17UcjTeOmpIcXnquHaKNEMnn10EPsPd8Ptsyk+34XLC3A7zWgMyNO0aWRxFV0B\nDzRqcXJxgjc7XOQxx3OZKFoIOLtULiFSjMCrrwnn/wTeAQrlhZMw/9UyQ0jCWrUa7U7XutMlBtsa\n60AzzHotRKnYM9CEtWgaC8vSW3lfC3fdvxtarRpP/vyM4nPVcG088fMzUGtUuPvdexSfa2kljtW1\nFPYMyJOAOB2KolBi0N8ovrboeGQN7U4XdIQ1oGfS3Idvq1W4COZFXp1BnlqoNzJ0Kh1cOuf6x4gQ\nBEx26FWa9XtHgm63B+MR8bWY+5sqpT8X5TEM9gxw7t/gsPI7hb07GtHaVYcnflbj7M2AU8fHEA2n\n8M737Vd8LpZlMTi8gD0DzbKYHeUyi5GlVWxrksbZANBD6DgnijlEChm0EXD2WjECFizq9MruEkoT\nzhT1flDUZVBUGRS17w2/+wtQ1CQoagwUdVTSPG+AW+eCmlIjVBDeCKTNwl18MSTc4/FgdE2888A/\ndMML8tTy3LudEzLnhuZlGe9qcLjMuPlt/Tj26CDyOenbljWIRyFP49ijg7j5zn443dLbqF4LZyvP\nF//Sl4rLC9x67W8UT2rjkQi63eTOxUyKW/dtBKEaofwq1JRa0bJGG4IN4m2f3ocQgeOsoii0WtyY\nSZEbDj1uD1LFApZFVtbw2czwWE3rz6xUtDa64XKYcHZoTpbxrgaKonDP+/djcmQZY8PKx1XXcHU8\n/rPT8NTZsP9wl+JzzS5GEIlnZOPs+Ugc6XxRktkxFllDndkCu4GsnClvcpJxNrdelQ6vk+o4DwN4\nL4Dj/+FfKaofwIcAbAPwDgD/BIoS1ybsTaCiVBwJEzjOFq0eXoMF0yly4dzr9iKYTiFZEBcz1ui2\nw24yYHheHhJu8DtQ57HizCXlSRgA7v3AAaRTebz45KWqzFfDm+Olpy4hlcjh3g8cqMp8Zy/Nweuy\nyBbfPDS/AqtRjxaPuOL/qUIBC8kEej3kpDidWoNHb4adoBRdKB+CR+eBWj7q2izYEN6uM/jWX2xC\n0Wb1YFqE2dHrqVQzWhMXYkdRFAaa/Rial8fsoCgKe7e34OylOcXrOQPA2961CwajDr9++JTic9Xw\n1licXcP5Vybxzvfth1qjPI+cuchpgn07WmQZb2iOqwc90Cy+HvToWnh9PZJgOsWZlSSOM88vfoV3\nCaUJZ5YdAcuOvclv3g3gYbBsASw7A2ASgKxve7+hDit5MlLrsHoxlSJ3jvmbPiqRhC/Ny9O4hKIo\n7N/ZivND8ygxwiuLiMXA3la0dtbh1w+fUjyuuoY3B8uyePQnp9Dc4cOO/W2Kz8cwZZwfmsf+nS2y\nxVJfmgtie5MfKpW48cYqW369HvKY48lUGB1WMvIOFVbhvx4TAzeIt/0GP1KlFDKlrOBjOq0eLGZi\nyJXIyoHy28IjEnYKdzQHMBuOIZGVJ8lu/44WxJM5TM3LEzd9NZitBtx13y689NQQ4tGM4vPV8OZ4\n7N9OQaNR452/te/afywDzl6aQ6PfgYDPLst4l+ZXYNJr0VEnzjwpMgwmoxFRnD2VDEOnUq93fhaC\nlfwqjGojrBpxVZuEQqkY5wYArw/mWqz8238GRX0GFHUWFHU2k5pBgREWt+s31GE1v0pUkq7L5sVU\nMowyofjrqwjnK2Hx8W47WwKYCkVk6SAIAPt3tiCdLWBkQvkughRF4d0fPoSp0SCGz80qPl8N/xmX\nB+cwObKMdz94SPGkQAAYnQohmc5j/85WWcZL5wuYXIlgR4t454Jff32E7gXLsphKhdFhE35cmS1j\nJR+C3yDsfItMAufDDxGd1yaEKN6mo8LqE/MuEInh0WHzggWIXWerXo9mmx0jUji7lWv6c2lOHo49\nsKsVAHD6wqws410L9z14CHSxVMtP2SBk0nk888h5HHn7Nrg8ygo5ACjSJZwfnsf+ynMmBy5WzA61\nyH4BU9EI6HKZmLMBYCIVRpvFAw3B3Cv5FfgNfsHvyKHI14nPCxAinCnqGChq+E1+3i1qxjeCZb8N\nlt0Hlt1X1OWQKs4KOsxv8INmS+t9yYWg0+pDlqGxnI0TnaLPbIbbaMJlCSS8u7UeLCsfCe/f0QKV\nisKpwRlZxrsW7rx3F2wOE37xw5NVma+G/4h//9dXYLEZ8bZ7d1VlvtMXZkBRv3nZS8XQ/ArKLIvd\nbeLrQY+sheE0GBCwkL2EgrkkMqUiumzC3eNYMYZiuYiAUZhwTtGzmE3+gui8FEUVeZuxCauxyn+E\nkAjnLit3zyaT5Nzb5/VJ4uyBpjqoVRQuzMrD2R6XBR3NnqpxdkuHD3tu7sSjD7+GYkFcA68axOOp\nfz+HbKaA93z05qrMNzS6jHyhhIO75NmRzBaKGF8OY1dbvegxrlR2fLZ5yXfuJpOr6LaTHRfMryAg\nMEyDZRlMxn9EfF6AEOHMsneBZQfe5OdXVzlqCcDro9MbK/92TaRpYQlv/AstmCMg4cqLc4KQhCmK\nwjavT5J7sb3ZDxVFYXBWnu5RNqsR/V0BvFYlEtYbtLj/wUN47cVRzIzLE/dXgzDMTobwynNXcN+H\nDsJgImtZKhavnp9Bb6cfdqvwmOCr4cLMMiiKWwdicXk1hD4veQ1ofr3zIkwIghVxJ9RxTherk28g\nGFXkbYYVljTs03uhptTr11YIWixuaFVqYs4GuJf1XCKOVEHcLp9Jr0N3vRcXZOJsADi4pw2XRpeQ\nycqz83gtvP8TRxBbS+PZX9Vq8VcTxQKNf//hy9ixvw09A8rX2weA185PQ6NRyZYYeGluBUyZxa5W\n8cL5cngVRo0GrYTlQ1N0HsFckoizC0wB0WJUMGdnS0GwKBGdFw+lQjUeBfAhUJQeFNUGoAvA6Wsf\nRiFNC3sB1Ru4bbTlnHBS664I57EkeZLeNp8P49EICiVxF9ps0KGnwYvBGflI+KY97RidCmEtlpZt\nzKvh3R8+BJNZj4e/+1JV5quBw8PfeQkGow4PVMm5iMYzGJkM4pa9HbKNeX5mGT0BL6xGcW1QiwyD\nscgaBnzkSR/jCW69k7gXyznOZQxUeOZaSNPzoLDlkwhF8XZZoHDWqDTw6b3r11bYMSp0Wr0YFyOc\nfdz9lhJit7etAZfmgqAZ6TX4AeDmPe0olco4fXFWlvGuhV0H29G7own/9r3joGlx764ayPHMI+cR\nWU3hw5+5vWpznjw7jd3bmmAyymOuDM4sgaK4MFOxGF4Noc/jJQ71GE9wa7bbLpzv+Q/yeqOw800J\n1JpvBqnl6B4ARS0CuAnA46CopwEALHsZwE8BXAHwFIA/AMtek3nUlE6wcLZqrbBqLFjKCydhs1aP\nRpMDYwly4bzd50epXJaUbLKnrZ4jYRkaoQDA4f2csDl5ZkqW8a4Fq92Eez90EMefHq41RKkSFmbC\nOP70EO794AHYHKaqzPnK2WmwLHDLfnmEM80wuDgXlBSmMRZZA10uY4cI4TyaDCFgtMOqFV4OaTm3\nDLPaBLtWWMOCFD0Ls1aetuSKQ2beZljh7mnAGCAyOwBup3A0Qb7Ltd3HOU9Dq+KrGe1uq0eeLslW\nz3mgtwE2iwEvV4mzKYrCg5+5HavLcRx79EJV5rzRUSyW8G//6zj6djZh54H2qsw5vxTF/HIUh/fJ\nZ3acm1lCtwSzo1Qu4/JqCNvryHcZR5Pceu8mCK9bqvBKvVGYQy5ll1BqVY1fgmUbwbJ6sGwdWPbo\n6373V2DZDrBsD1j2SUEnQ+kExzgDQIOxgZiEe+x+jIoQzjvquBf2pZD4MIV97Y3I0yVcXpSnLF17\nswcNfgdOnJ6UZTwh+K2P3wK9QYsff+uFqs15I+NH//wCtDoN3vfbh6s25/HTEwj4bOhskaf70sji\nKnJFGns7xAvLiyvcB/IOESQ8llhBL4FzAXAk3GBsEBwWkqbnYNG2Ep/bhkBm3mbBoMgI64jXYKxH\nKL8Kuiw85rbXXodwPo1ogaw6hMdkQr3VKomz97Rzz+y5KXnqIWvUKtyyrwMnz06hJJOBci0cONKN\n7oEG/OQ7L9Zc5yrgmV+eQ3glgY/+3p1VSeQGOM4GgMMHOmUZjy4xuDgbxD4JnD0ZjSBXKmGnKM4O\nwa41wG8U3mlxKbcMNaUW3PwkRc9CqxKXtLmpOgeqKT3S9DzKrLDF3WCsx1JumahEWp+9DnPpCLIl\nsmYeAYsVXpMZF2Ug4bMykTBFUThyoBNnh+aQzlQnZs7uNOP+Dx/C8aeHa7HOCmN2MoSXnhrC/Q8e\ngqMKDU8AIJMt4OylORw50CUb6fPP+14JjvPF0ArcRiMarGQta/MMjdl0BD0EwpllWSzlltAg0Llg\nWQZpeh7WrSKcFUCKFpZr0WhsQBllojjnXjv34hVjeOysC+BCSHxyn8dqRqvXibPTglJ0BOHIgU6k\nMwUMXla+iyDAvSc++nt3YnU5jmceOV+VOW9UFAs0Hv7OS+jb2YQ9N8kjYoXgpVMT6O2oQ51Hnpbe\nlxdDyNMl7G0XH5/NayVxZkcIPXbh1TEAYCm3hDpDHTQqjaC/TxdnRZsdm0o4qygdWJSQoYWRVIOx\nATkmh2gxKniOXrsfLEAcrkFRFHb7AxhcEU/CLosJnX43zkzK183p9kPdKJXKeOVcdbb+AOD9BVT5\nbgAAIABJREFUnzgMk0WP7/9/z1ZtzhsRP/jGMRhNOrz/k0eqNucr56ZRpBncflO3bGOenlpEe50L\nHptZ9BgXVoLY5Q8Qi/nxxCoYlkWfXXicXoyOI8Nk0WgS9tLIlJZQZouw6pSvr71ZkSoKF84AsJQV\nLkR54TwSJ+fe3f4AFpNJhLPiaxkf6GzC+ekl2WrmH9zVCqNBixdfm5BlPCHYf7gb/bua8eNvvYB8\nttYBVik8+pNTWFtN4hN/eHfV3OaVcBIjEyu47ZB8nM1rlH0ShPOFlSDsegPaCBMDS+UyxhIh9NnJ\nBPdidglNRuHmTJKeEc3Zm0o4qykuliZFTwv6+6bKi20hJ1yI9jm4F+iIiJi5nX4/ZuMxxHI54mN5\n7O9owuDskmxxzv1dAXhdFrzwyrgs4wmB1W7CBz99K04dH8Pga9UT7DcSLp6ZxqsvjOADnzpStdhm\nAHjx1XG4nWYMdIvPpH49aIbB4MwS9neIJ+BEPo+pWBS7/ORJKiMJTmz1O4ST8GKW45NGgSTMi8Yb\nVzirBAtnv8EPNaXGQk64cHbqTQgYbbgikrMB4EJQvOGxv7MRmUIRV2QKsdPrtbh5bzteem28Kg2s\nAM74+fTnjiKymsLPvn+iKnPeaIhHM/jJd17E/sPdVYttBoDjp7gPsNtlFM6nJxfQ6XfDaRFfVWlw\nJYhdfjLXGABm0xEUyiX0EnB2jslhrbgm2OwoMikUmDXYtNeBcFbxwrkoTDjzL7ZFAvciYLTBoTPi\nigj3Yo+fExNSXOeDXU3IFUuydRFUqSjcflM3Tl2YqVqJIwB4z0dugr/BiW997QkwVYrVu1HAlBj8\n8988AV+9Aw987JaqzZvNFfHq4AzuuKlbdHe/N+LyfAjZAo2DXc2ix+DX224/uZi/HA/CrjWgweQQ\nfMxiRdQ1CSThZIWvrNrqvSw3E9SUDkmBZodGpUHAEFj/OBGKfke9KM7e7quDRqXC+RXx1YwOdHLl\nvU5PyhdaccdNPYgnc7h4Rb7dx2th2+4W3Hp0AD///stYDZL1Mqjh2vjhPx5DLlvE7/zxO6o673Mn\nR9HV5kNTPZmz+1Yo0CUMzizhkATOThYKmIisieRsbq1ucwg3SvgdrCajMM5O0ZzhZ9WJ4+xNJpxV\nMGr86y+ia8GkMcGjc2M+K5zQKIrCNpEkvKPODzVF4VxQfLzbvo5GqCgKr40Lq1ctBG+7pRdFmqlq\nkqBOr8V/+ZN3YnYyhMd/VutMJSee/MVZzIyv4L98/h3QG7RVm/fls1MoFku44+Ye2cZ8dWIeFAVJ\njvP54DJUFCUqyeRKPIg+B1mIx3x2AS6dC2aNsNCSVHEaBrUXOrXy3cE2I9SUHsmi8J2nZlMjFnJk\nIrTf4cdsOoI0TWYOGDRabPP6cC4oXji7LCZ0BzyycvahPW0wGrR47uSobGMKwac/dxQsy+K7//BU\nVee93jE1GsRTvziL+z90EC0d5M0+xGJlNYHL40HcKSNnX5wLolBicLBLfD3oiytBsAD2BMiF85V4\nEEa1Fu1W4W265ytRB6Rmh00nrgrJphLOAGDTthORcJOpCQsEwhngvmQmkqsoMGQZxkatFtt8dTgv\ngYTtJgMGmurwiowk3N8VQJ3HimMvV5eEb76zD7sOtuMH//MY4pHq1JK+3hGPZvD9bxzDzv1tOHz3\ntqrOfezECHxuK7b3yFdW7ZWxWWxrrIPDLH7L71xwCX0eL8w6svqkRaaE8USIyLkAgIXsgmDnAgCS\n9BRsuuolAm02qCg9cqUV0GVhccRNpiZEizGkaeGcsc3BvYCvJMgNj72BBgyFQihKqMV8c08Lzs8s\nI1uQJz7YoNfi8P5OvPjqOGi6ejt2dfVOfOBTt+L408O4cKoWZicHyuUy/vGrv4bVbsRHfu/Oqs59\nrPLhJadwPjk6C41Khf0d4oXz2eASVBQlKrzucjyIXrsfakq4PJ3PLsCkNsKtcwv6+2RxCmrKAJNG\nXI3qzSecdZ1I0TOCK2s0m5oQzK+gwAh3Igac9SixZVG1QfcG6nFhZUUSCd/S24rh+RXEM+JjpV8P\nlYrCXYf7cObiLGIJ8UkwpKAoCn/whftQyNE1B0MmfO/rTyOXLeD3v3Bf1ZJLACCezOLUhVm87ZYe\n2cI0Etk8Ls2t4OaeVtFj0AyDCytB7K8nF/NjyRBotoztTuHHFss0lnNBtJiFbVOyLINUcUa0c3E9\nYD03RaDh0WLiru1cVrh5sN3JCefhGLlpsa++AQWmhGEJ9Zxv7mkBzTA4I1NFJAC4+0gvkuk8Tl2o\nTvdXHu//5BEEGp34x68+hmKxVp5OKo49OogrF+bx6c8dhdUmT6dVoXj2xCj6uwJo8AsPRbsWTo7N\nYXdbPcwG8Y1Uzi4vo8/jhYXQ7GDYMq7EgxhwkjnV85l5NJuaBb8zk8VJ2HQdoAjE+euxCYVzB8ps\nERlamIvcbGoGC3Y9LlEIBhwbS8K39LaizLJ4VUbX+eht/WDKLJ49UV3XuanNi/d94jCO/foCzpyo\nXoLi9YizJyfwzCPn8Vsfv6Wq230AcOzlUTBMGUdvk8/lfnV8DmWWxeHeFtFjXAmvIlcqYZ8I4TxU\nWd8kJLyUXUIZZTSbhLktGXoRDJu/oR1ntYoTzomisFAx/tqShNi59GbUm+zr95QEe+u5+392WXyI\n3d72Bhh1GpwYmRU9xhtxYGcrHDYjnnrxsmxjCoHeoMXv/8V9WJgJ48f/XKvHLwWR1SS+/bdPYtvu\nFtx1/+6qzj0+HcLUXBhHb+uXbcxQIo2x5TBu6W0VPUaRYTC4siyKs6eSYeQYel2jCUGZLWMhtyg4\nTAPghbN4zt58wlnfBUA4CfPOEIl74Tfa4DVYcDFGTqT767mbc3pJvPMw0FQHh8mAEyPyOQ3tzR70\ndtTh8eeHiepay4EPf/YONHf48D++9AjSSXlc9BsNmVQeX//LX6K53YuPVnm7DwCeeH4Y3e116GyV\np+kJAJwYmYXNqMf2ZvEtW08vc+uMX3ckGIotwa03o95oF3zMXJbrJtViEib2E0Uuo91+AwtnFaWD\nmjIiWRRWXs2qtcKlcxJxNgDscDbgUoycd70mM9qdTkmcrdNocLCzGS+PzsjGrxqNGkdv7cfLZ6cQ\nT2ZlGVMo9h/pxt3v3o2f/ssJjA1XL0HxegLLsvgfX/4VaJrB57/8AFSEbaWl4okXhqHVqHH34V7Z\nxjw5OgsAONInvkLQ5dUQ8qWSKM6+VNFkO1zCRfdKfgXFchGtAjk7X4qiwESvM+GsbQcFNRJFYe6l\nR+eGWW3GbEZ4+0SKorDD2YiLUXLC8JhM6HC6cEoCCatVKtzS24qXR2fBlOUrR3TPnQOYmgtjbFqe\nsklCodNp8MdfeS+ikTS++dePV3Xu6wX//LXHEQ2n8Pkvvxc6ffUSAgHOuRifWcW77pDPbS6XWbw8\nOotbelqhUYunmVOLi2h1OOE1k9eAvhhdxA6n8O5/ADCbnYdJbYRXLywxhRPOKtHZ2dcDKHAfDomC\n8LrELaYWzBFwNsAJ5+VsAuE8eT7FgfpGnFleksS3R/pasRRNYjokvG/AtXDPnQMolcp45viIbGMK\nxe/+6T1wuS34+y/+AoW88E6ONXB4+pfncPr4GD7xh3ejoUV4IpscKNIlPHN8BEcOdMJmlS885PjI\nDOrsFnT5hcUKvxnWzY4Gcsf5YnQRdq0BLWaX4GNmM9wHeItZmHBOVrSlXddFfH48Np1wVqv0sGhb\nkCgIE84URaHV3EIknAFgl6sR85kocRtXADjY2IRzy0soSSDh2/rbEcvkMDQnX/e9u4/0QafT4LHn\nhmQbUyh6Bhrx4O/chuceu4CXn63u1uNWxyvPX8GzvxrEB3/nNvTuEJ+QIRaPPTcEnVaNu2+Vb8tv\neGEF0XQWt20TLyiZchlnlpdwqIHcuYgVsphJR7DbRXY9ZzNzaDW3CBbbieIErNoWaFTVjW3cbLDr\nu5EoTgh2Y1vNLQjmV5Bn8oLn2FW5lxei5GXhDjQ0IVUsYHQtTHwsj1v7uWf5pSvCqj4JQUeLF31d\nfjz23FDVdwotNiM+/5X3Yn46jO9/o9bMigQri1F862tPYMf+Nrz7I4eqPv+J05NIpvO4767tso1Z\noEt4ZWwOt/W3S8qveW1xEZ1OF7wmcrNjMLqIna4mMrMjMwstpUW9UdjOJm/K2vXi615vOuEM8CQs\nPF621dyCxdwi6LLwr+ZdLu5lfEGE63yooRFpuigxzrkFGpUKL8pIwlazAXfc1I1nT4wgl69+d6gH\nP3M7uvrr8fUvPYLQcqzq829FrAbj+PpfPoKO3gA+/Lu3V33+fIHGM8dHcNuhbtgsBtnGffHKNNQq\nCoclxMpdWQsjVSzgYCP5x8TFypb+Trdw0V0ql7CQXRAcpgEAicI4bBKci+sFdl036HISuZIwI6DV\n3AIWLFG4xjZHAFqVWhxnN3LPwauL4msx+x1W9NZ7ZRXOAHDf23Zgen4Nlyfkqe1Pgj03deK+Dx3E\nL//1FZw6Plb1+bciaLqEv/6/fwaKovDHX3lv1UM0AODRZy/B77Vh73bx+SNvxJmpReSKNG7rFx+m\nQTMMzi4v4oAIzk4Uc5hKhde1mVDMZGfRbGqCmlILm6cwDoPaA71afN3rTSmcHboe5EorKDIJQX/f\nZm4FwzJYICiqP+Csh5ZS4XyEPEHvUCMXV31yQXxyn81owN72Brx4Wd6SQPffvQOZbBHPnaw+CWq0\navzF1z6IcrmMh/744VrG9jVQLJbwV3/8MEolBl/42w9Cq9VU/RyePzmGdLaA++/eIeu4LwxPYU9b\nA+wm8WL85Dy3i3RzI3kh/sHIAjSUCtsdwrcLF3NLKLEltJmFvThoJoVsaQkOvXyloLYq7JVrEC8K\n451WUysAYCYzK3gOnVqDAUc9BiPk4tdvsaLd6ZTE2QBwx0AHLswGEU3LF5N81+FeGA1aPPrMRdnG\nJMHvfP4d6OgN4G+/8HOsLNUMj2vhO3//FEYvLeBzX3oAdTI1HSHBYjCGc0PzuO+uHbJVQAKAFy9P\nwajTSmpWdTG0ggxN45Ym8jH4D+I9buGiu8yWMZeZR5u5VfAx8eI47HppceGbUjjz/6l4QViFCP6i\nzWSEJ9sZ1Fr0iyRhj8mEPo8XryyQhYe8EXcMdGAqFMVcWD6y2tHbgNZGN361QSRc3+zGnzz0W5i4\nvIRv/vVjG3IOWwXf/toTGBtexOe//N6qx8jx+NWzF9Fc78KufvENSt6IhUgckysR3L5NWom2Vxbm\n0e1yi4pvPheZR78jAKNGeLw4zx+tAmPleJForwln2HXdACgkCsKEs0Nnh0vnxHSaLEF6t7sJw/Fl\n4hr8AHBLUwvOLC9KKiV6+7Z2lFkWL12Wz3U2GXW4+0gfnjs5hmRaeOiKXNAbtPjiPzwIlmXx0Od/\nUot3vgpeePwiHv3xa3jgYzfjyNsHNuQcHn32EtQqCu96m3zzl8ssXrg8jVt6WqCXYOC8sjAPCsBN\nIhznwcg81BRFVD50ORdEoVwQLJyZcgGp4jQcOmmcvSmFM+/gCBXObp0bNo0N0wTCGQD2upswJJqE\nm3FueRk5WjzJ3FERFseG5Ov4R1EU3nN0J0YmVzAyWf2tPwC4+c5+fOBTR/Dkz8/iyV+c3ZBz2Ox4\n5pFzeOynp/G+TxzG4buq2+iEx+jUCi6PB/GeoztlrRn9/BC3i3LngHjhnC/ROL28iMPNrcTHFpkS\nhmJLRM4FAEylp2HVWODTC6ssEi9wCV0OXR/xOV5v0KiMsGpb16+JELSb20RwdjPoMoMhERWRDje1\nIEvTGJTQwKqvwYeA04rnhuXt0vrA0V0oFEt44vlhWccVikCjC3/21fdhcmQZ33jo0arHW28FTI8F\n8fUvPYKBPS349B8d3ZBzyBdoPPbcEI4c6ITHaZFt3OGFFawm0pI4GwBOzM9iwFcHh4E85+Nsxeww\naYTXfub5o90iLJcmUZwACwYOvTTO3pTCWa92wqjxI168IujvKYpCh6Udk2mysIe9nhbQZWa9BAoJ\njjS3olhmJFXXqHfZ0N/ow7FLwrPRheCdt2+DyajDzx4/L+u4JPjtP7wbe27uxD/+1a9x8bS8MYFb\nHZfOzuAbX3kUuw6245P/590bdh4/e/w8jAYt7rlDXufkmUsT6GvwodEtvAzcG3FmaQlFhsGRZvIY\nvuH4MoplBnvdZMdOZWbQbhaeGBMvjMCoroNBIzwD/HqGQ9+HWEEYZwNAh6UD4UIYSTol+Bg+2fOc\nqBC7JqgpCsfnZ4mP5UFRFN62vROvjM0jnSdr/301dLX5sLOvEb948jwYRr5KSyQ4eFsvPvLZO3Ds\n0UH87F9ObMg5bFZEVpP4f/7w/4fFZsAX/u5D0GiFxdPKjWeOjyCZzuN99+yRddxjlyagUavWE2DF\nIFUo4MJKEEckmB173WQhHlPpaZjUJvgNdYL+ft3suB6FMwA49f2IEbgXHZZ2rORDSJeElyra424G\nBeDsGnnIxf6GBujVGpyQQMIAcHRnN4YXQliKCovnFgKzSY/73rYdz50cw2pE+EtJTqjVKnzhax9E\nQ4sbX/qjH2F6XL7qIVsZsxMhfOn/+hECTS7817/7ENSajSHgtWgaz50cxbvuHIDFrJdt3OVoEpfm\ngnj7TmkJc8fnZ6FTq3FAREWNM5X1TELCmVIWy7lldAh0LgAgVrgimYCvJzj0fcgzYeRKwipX8Nd6\nisDwcOpN6LL51u8xCax6PXYH6nFiXlqI3dGd3aAZBi/IGK4BAB+4dw+Cq0m8fEZeN5sEH/nsHbj9\nnTvwva8/g+ceu7Bh57GZkEnl8cXf/yHSyRy+9I2PweWxbsh5lMssfvrYWXS3+bBTxtA6lmXx9MUJ\nHOpqlpST8uriPBiWFWV2XIotoVhmsI/Q7JhMT6Hd3AaVwA6AscIV6FQO0a22eWxi4bwNGXoBRSYp\n6O87LdwWw1RaOJk5dEZ02+pEkbBBo8XBhkYcn5slPvb1ePtOriTK0xfk7br3vnftAcuy+PkTG+c6\nW2xGPPTNj8Nk0uO//f4PbvhKG+GVOL74ez+A3qDFQ9/8bVjtpg07l188OQiGKeP979or67jPVnZP\nju4UX+oHAI7PzWJ/fQOMWvKa1mfW5tBp9cKpF359pyu8wfPItUAzKaTpOTgNGxNmsxnh1HPXIi7Q\ndW4zt0JNqYl3Cve5mzEYmQddJo9VvrW5FcOrIaxlxSf37WgOwO+w4ukL8iZgH97fiYDPjocf3bjw\nNpVKhc9/5b3Yub8N//Df/x3nX904Eb8ZUCyW8JXP/Rjz06v44j88iM4+slbQcuLUhRnMLkbxofv3\nyRpaNzS/guVYEu/YJY2zX5qbhUWrw+4A+TU6szYHClwUgFDkmByWckuCORsA4oXLcOr7JV8/acKZ\not4PiroMiiqDova97t9bQVE5UNSFys8/kw7t1HM1ZYVu/bWb26CCChNpsoV+wNuCC9EFFMWQcEsr\npmJRLCTEu8WNbjt2NPvx5KC8JBzw2XHbwS48+swlZHPVL03Hw+t34Cv/9HHkczS+8Ls/QCS8MQ74\nRiO6lsJffOb7yGYLeOifPg5fwLFh55LNFfHIMxdx64EuNPjlPY8nBkfR3+hDk0f8uEupJCaiEdzW\nQl4WiS4zGIzMYz8BAQPARHoSFCi0W4TNye+G8Ty1paAQbzv0vQBUgjlbp9Kh2dRMLJwPeFuRZWhc\niZPncNzWyt3fExIMD5WKwtGd3Tg5NodEVr5kPrVahQ/cuxdDY8sYHhMfhy0VOp0G//3rH0Fzuw9f\n/qMf4/KgNId+q6JEM/jrP/8pLpyexue+9AD23ryxZSd/8qsz8LosuOMmeZORnxwcg1atxh0S4ptZ\nlsVLczO4uakZOjX5LurptVl02+rg0AmPjZ5KT4MFK1g4l8o5JIvTcBikc7ZUx3kYwHsBHH+T302B\nZXdVfj5LOrCj4l7ECsKSJfRqPZpMTZhMkZHwfk8rcgyNYRFxzrdXSPjFOWmts9+xuwejy2FZO1IB\nwIffsx/pbAGPPntJ1nFJ0dbtx5f/58cQWU3izz71v7AWEraLcL0gEk7hzz/9PayFkvjyNz6G9h5p\n20RS8dhzQ0il83jwPftlHXcuHMOVxVXcs1taqZ+XZrn1dEcruXC+HA8iy9A46CU7diI9iSZTI4xq\nYcTN8xLvsm4xKMLbGpURdl0HYnnhCW5dlg5MZ2ZQKgtP0N7vaQXAvWxJsc3rg8dkkszZ79zdjRJT\nlj0/5V13DsBqMeBHj5yWdVxSmK0GPPTN34bbZ8MXf+8HGD4/u6HnU23QdAlf/bN/wyvPXcFn/+we\n3HXf7g09n9GpFZwfXsD7790LrYzx1Uy5jKcvjuNIXytsRvFhGhPRCJZTqXVNRIIiU8KF6AIOeFvJ\n5qyYHULD6+KFUbBg4NJLz+mRJpxZdgQsq0jBYJ3aCou2FdG88C543dZOTGWmiUiYj6l5LUxOpG0O\nJ1rsDjw/Iy3W7ejOblAU59bJib7OAHZta8RPHzsHmhZfgkkObNvdgoe++XFEw0n86ae+e8OEbawG\n4/jTT34X4ZUEHvqnj2Ngb+uGnk+pxODhX5/Fzr5GDHTLu+34xPlRUBRwVOKW3wuz02i02dDuJE+6\nO1VZxySOM8MymEpPo8si3FGKFoZh1jZBpxafALlhUJC3nfoBxAqXBVdl6LJ2olguEjVCcevN6LR6\ncSo8S3x+KorCbS1tOD43K6nza39jHVo8Djwh806hyajDe9+xCy+fmcTcYkTWsUnh9lrxte99Gm6f\nDf/1sz/AhVPy9hzYrCgWaHzlcz/hRPOfvwvv+ejNG31K+NEvT8Ns0uH+u+Stt39mchHhZAbv3C3N\nxX5hltNAYnYJL8WWkGdK5LuEqUk0Ghtg0ggLyYsVOC0ph9mhZIxzGyhqEBT1EijqiJgBXPoBxArD\ngkm429qFYrmI+azw2sxOvQl9dr8oEqYoCne0teO1xQVJZel8dgsOdDbh8fOjspcB+tgDB7EaSeHJ\nFze+DfbAnlZ89VufRDKexZ984ruYm1rd6FNSFAszYfzJJ7+LeDSNr377ExsumgHgqZeuYHUthY8+\ncEDWcVmWxePnR7G/owl+h/jkmXyJxsmFedzZKq7t62vhGfTY6uDSC6/9PJ9dQKFcQLe1U9DfsyyL\nWH4ILr187W43ESTxttMwgGI5gQwtTAh3WbhrPpEic24PedtwLjKHoohSone0tiNRyOO8hLJ0FEXh\nXXt6cWZqAaGE8IR0IXjfPXug02rwr788Jeu4YuD2WvG3//I7CDS68N/+4F/xyvPCq6ZsRWRSefz3\nP/hXnD4+hj/84v14z0du2uhTwuxiBC++No4Hju6SNZEbAB4/PwqzXie55v7zM9Po93gRsJJz/6nw\nDFSgcKCykyQEnNkxhW6rcJMmmh+GSROAQSO9Z8K1hTNFHQNFDb/Jz7uvclQQQDNYdjeAzwP4MSjK\n9hbjfwYUdRYUdRbh/5iN7TJsR4GJIlsSRnDdFcdoLEWWaHeTtw2D0QXkSuTi987WdhSYEl6WmKl9\n754+LEYSuDgrb+3lA7ta0dfpxw9/8dqGu84A0LezCX/z3U+hVGLw+Y9/+7pNPhl8bQqf++i3UMzT\n+Jvvfgr9O8V3Y5ILpRKDH/7iNfR01OHQHvFtVd8MwwshzK3F8a490sI0XllYQL5Uwh2t5GWR8gyN\n85F5HCTc8huviLZuqzDHOceEkGfW4DJsTAMEQdgg3uY/JqIFYTuFTp0TXr2XmLMPeduQZ/53e2ce\nH0V9///nZLNX7vuCALnJATkI942AgKB4FUVQq1VR8Wvtt1qrvb5t7WGrrVapdwVFq4IKIrccch8B\nct8JEMh9k2Q3ye7O749NLPIDmdkjWew8H4882MduZuadYfY173l/3ofJpvHbU4cNR+3mxleV9kVQ\nbxiTiCjCl1nSuz9Jwd/Xg8XXp7L960KqXGBlzj/Qiz+/fR8xCWH87okPWffu/u9ln+fac808cfcb\n5J44zU+fu5UbfuDY4IKtrF53GK3GnSWLMq/+yzIw9prYmVvKdaNi0dkx9KTFYOBETTUzo2xrZXeo\noZIkv3B8ZeQ3n+2qwigj2AFWTfJ3ULDj6o6zKM5GFFMu87PhO7bpRhSb+l5nAeXA5R8NRPENRDET\nUcwk+NuDBwJ01mWJZqO0HF0/jR+h2hBKZIrwpJAYei1mjjfJd37HDRmKt0bLjkr7HMA5o+PQqd3Z\nmOXYJ3pBELhvySRqG9rZvHtwmutfSmxiBC+tXUFwmC+/eGQNX348uPl8jmbzumM8+/BqgkJ9+fva\nFcQlSZ+E5Ey27imguq6N+5dMcmhVNsDG4wVo3VXMGW1fAc2OijK81Bom2DB5KqvxLD0WM1NCpYsp\nWB+0g7VBBGikpYb061GA1rHLpg5lkHTbRxONu+ApK8UuwTueko4yLKL01InxwVGoBIGD9fKdX2+t\nlglDI9leXmaXAzgsyI/U4eF8kVXocEfyrsXjULureHfdIYfu11Z8/T3589v3M2VOMm+9uJWX/u9z\nenvlR/tdlYJTZ3n8rtdprm/nuX/eM+g5zf1UVjWyc38ht87PwN/BXZh255XTYezhxkz7WmruOl2B\nWRSZEy1PdwE6ers51VzF5BB5Tnf/g7bUiLPBVI/BVEugzjGa7ZxUDUEIRhBUfa+jgThAdiKwjyYW\nlaCjuVt6cVuCdzzFF0plifCYoGFo3FTsq5Pv/GpUKmZGRbGrosKunDlPnYbZo2PZerIEQ49jR55O\nSI8iOT6c1esP093jGmIXEu7HC6sfYMykWP7x+4385Zl1dHU6bqDAYGDo6uaFX67n5d9uYMzEWF5Y\n8wBhQ/wH2ywAenpNvLvuEIlxYUzMsL3J/eXo7jWx+UQRs0bF4q23fSnRbLGws6KcGSOi0LrLj4Ac\nqC9H7aaS1QvUIloouVBCgqwlvxzcBC2+WvtyuV0OB+i2IKjw1yXTZMyWvE2Cdzwdpg5rhjzOAAAg\nAElEQVSqDdJTJ7zUWtICItlvg+MMMDcmjjNtrZQ025dHfNPYJMpqm8ivqrNrP5cS4OfJrfPT2bGv\nkNODnOvcj1an5ufP/4A7H5zB1k+z+Ok9b1FzzrEF7QONxWJh3bv7eeq+t/H01vH3tStIG29f2oIj\neeejg+i0au68ybHRZoDPjuYR7u/N2Bj5QYqL2VFeRpinF6NCpA0huZjDDZWYRZFJIfLOuTXYEUyA\nRtr9tf9BPkA3UBHn70IQbkYQzgETgS8RhG19n0wDchCEU8A6YAWiKPsb5ia4469NoUlixBkgwSeB\nTnMn5wzSu2ToVGrGBo3gQJ2NIhwdR7PRwPFq+Z05LubmcSlcMHY7dAQ3WKPOP7pjCvWNFwa9w8bF\neHrp+M3Ly7hrxUx2b87msTtWUVoweG2Y7KG8qIaVS/7Jzo2nWPrQDH7z8l14etlepexovtiZS21D\nOw/cMcXh0eavcstoN3Rzyzj7UheyaqppMnRxfYxtUet9dWVkBg5H7y6993O1oZoLpg4SvKUXxzQZ\nswnQJuMmyO8x7RI4WbcDdam09ZRiskjrlTyy79wXyVwpnBwSQ0FrDc3dnXJNZE50DAKwvdy+rhjz\n0hLQqd359KjjV/OWLh6LVuPO2/8+4PB924qbmxv3rJzNs3+9g3NnGnn0B6+yd6v01QVXorWpg189\n+h5vvbiVcdMTeOmDFQwdYX/+q6Moqahj96ESfrBwDH4+jo02n29u43DpWRaPTcbNzfb7QVdvL3vP\nnGZuTKxN95X9dWV4uGtIC5TuvFtEC8XtJSTK0OxmYzZuggZfrX2phP3Y21XjM0RxKKKoRRRDEcXr\n+95fjygm97U0ykAUv7D1EIG6NNq6izFZDJJ+f2Rf5KioXV6185TQGCo6Gjnf1SrbxhkjotCq3NlS\nZt8Qk8zooUQG+rL+sOOFKHP0MNKTI1mz/vCg9nW+FJXKjeWPXMef3rqPbkMvTyx7nfdWfUWPi0TG\nr0ZPj4m1r+/mx3e9htHQzZ/e/CF3Pzp70CYCXg5jdy9r1h0mLWkoY1PlT3W6GuuP5DEkwIdxsfZF\nLraWl6JRqWxqaVRraKfsQgNTQ+VFLvqdtZESRdhsMdLaXUSALlW2jS6Dk3Xbem4sktM1rGky/hS1\ny+sqNDU0FhHrSoNcQjy9yAiPYGuZfY6zt17L3NR4Np8opqvbsSuFfj4eLFk4ht2HSiiucGxE216m\nzk3h1Y8fZXhMCH986iP+9LOPaWlybJGksxBFkT1bclhx6z/IPlbJymcX8csX78TbR3qO7UDw1r8P\n4OWp5Y4bHR9t/vyotVnA4rH2dZjYc7qSbrOJebHyV99EUWR/fTkTg6PQuEm/X54znKfT3EmCj5xg\nxyn8tcmoBI1sOy+Hy04O7CdQl4qIWbIIB2mDCNYGU3hBpgiHWPNz9tuQruGhVjN9xAi2lZdisSPX\nzc1N4JbxKWRVnKey3rFLYIIg8NCyqbS0dfHhxmMO3bcjGJ0ZxaufPMqUOcmsfW03D9/6CtnHHDvS\n1tHkHK/kkdte4b1Xv2LSdUms+mQlqeMcmwbhCP698ThNrZ08sNTx0eYzDS0cLavilvEpdkUuLKLI\ntrISpg0bgadGvrj1p1nJzW8ubC8kUBNAsFZapKm5Ow8RE4HXsuPsZAK1owGBJqO0kc2CIJDonUjR\nhWJZKXZJfuEEaDzYZ+NK4bzYeAobGzjdal8B3m0TUujs7mGrgycJAtxx41h8vHSsWrPX5Qrywob4\n85d3fsSyh2dxYGc+D9z4d7asO4bFjpRFZ1NzrplfPLyGP/3sY4LD/XjpgxUsXDLe4bpoLydyz3Iw\nq4JlN4/D29OxK5cms4VPj+YzKWEEEQGXr/2VytayEgL1ejIj5NfxVHY0cb6r1QbNtvp2id7Sosdm\ni5GW7kKHarbLO87W6IVAk/Gk5G2SfEZS1F4kS4SjvYMY4uHH3lrbIhDzY+Op7+wkq8a+dI3F45Jx\nd3NjnROizinxEcyalMCHG47R0OR6E/x8/T15+s8/4Pf/vAezyczP7n+H3z7xgcu1rTtbUc/vf/Ih\nT933NqZeM79fdTc/f34Jvv7SW6ANFI0tHaz9/CgzJsSRmjjU4ftffzgXdzc3bh5nX+TiVG0NNR0d\nLIizLW/469pSwvU+xHoHX/2X+7CIFgrbi0jySZR847TqkECgzjWKh1wRtcobX02cbM2+YOqQlWLn\nJghMDo1lf10ZZhla38+8WGtKkL0rhWkjIogJDeCTQ45Pg/Py1HLfkklk9TlSroa7WsWyh2exat1K\nohLCeOm3G3h86WtkHSx1KUe/raWTN1/YyoOLX6bg1BkefvoG/v7+Q0THhw22af8fZrOFV1bvISzY\nh9tvGOPw/e8rrKS+rYPbJ9iX72s09bLrdAVzY+Jwd5PvSn7d52tNlek4F7QXEqoNJVArsZj7m2CH\n4zTb5R1njcobX008jcYTkrdJ8kmky2ygsvO05G0EQWBaaCyHG6xLD3K5LioGjUrFllL7RDjI25NZ\no2L4/Gg+RidULa9YNhWzWeS1tfscvm9HkTk5jtc+fYzlj8zi1OFyHr71H/z12XWD7kBXVTbwwi/X\ns+KWf5B1sJS7VszktU8fI3OK6xaJvbF2H70mMw8vn+7wfXf3mvjsaD4zkqMJ9vGya1+bS0vQuKmY\nFSW/MKfHbOJgQwVTQ+Xl2Z3pOkunuYskH+kjWBsNJ/DRxKJR2Rep+b4TpM+gyZiNRZSWvpDka63s\nL2iT11VoemgsLT1d5LbIr40Y4u1DamiY3ZotCAK3TxxNXlUdBeccn1KxeG4qwyICeGX1HpdoKXo5\nIqOCef7t+/npc7fS1trFsytW89T9b3PycPmgOtCtzZ289+pX/HDBi3z23gGmzxvFG58/zk1LJ6JS\nuab7s2V3PiWV9Tx011S0GtvbxF2Jjw7lEOLjybQk+1qS7jl9mq7eXubbkKYBsLeulBjvYIZ4+Ene\nxmQxUdRe/I1eSKHRkIU12JFmg5WXxzWvnEsI0mfQbMyRLsI+fSLcLq+/5vSweAzmXo7ZMMrVS6Nh\nxvAoNpeVYLZzqWrJpFTaDd1sc8LSX0SoH0sWjWHb3gLySxzbM9qR6PQa7loxi39t/gm33D2Zr7fn\n8dDNL/PMinc58nUxZvPALAeazRaO7Svh2RWreeCml9i7NZebl03i3S3/y/JHrkOnd0zOlDMoKqtl\n8+58fnDDGIaESRcnqWzPKaW1y8gPJtnX4sciimwpK2ba8BH4aOV35TjedJYuUw8zwuQJeL+TlixR\nhC1iL03GbIJ0GbJt/G8jSJeBWbTmg0shQBNAuC6cfJmaPTk0FjcE9tba5vzeEJdAXkO93ekaizIT\n0and+fig46PO7u4qVt47narqFj7dKj2KP9AIgsDsRem8tfHHPPLMQs6dbuTnD/6Lh299hS3rjmHs\nGrjamrLCal781acsn/sX1r6+m4yJsfxz/WP89Pe3EhzmutM+O7u6eePDfYxKiGD2FMcUsl1MVVMr\nB4tPc+uEUahV9tXhfFlaRKBeb1Pr0I7ebo43nmFGmLxC8IrOSowWI8k+Mhxn4wl8NXEODXZcG46z\nbgxm0UiLUdr0Ox+1D8M8Islrkzctb3zwCHQqd/bYKsLxCdR3dnLMzu4aY2OGEhUSwIcHsp3ytH73\nrRMI9PPkpXd2YbG4znLa5fD19+RHP5nHmm1Pcs/K2ZwurePXK99j2ZznWfXHTeSdOO1wJ9pisZB/\n8gyr/rSJZXOe55ePrqGipIa7V17Hmm1P8sBP57tkWsbFWCwif39nF/6+Htxz2wSnHOPfB7IZHuTH\n+Fj7hrscrz7fl6Zh29jXPbUlaN3cGR8sL4KS117AUP1QfNXSbqSt3UWYRQNBescvn37fCOx7uGgw\nHJe8TYpvEkUXium1SC+y89PoSQ+MtFmz+1ODNpXYF6Tw0etYkD6SL08U0dZltGtfl2NiRjTj00fw\nzscHaWmT30VkINFo3Lnxjgms3vK//OR3t+CmEnjptxtYMuOP/PGpjzjwVQHdRscWUoqiSFVlA2tf\n382DN7/MyiWr2Ls1l+sXZ/Dmhsf5xYt3MjwmxKHHdAar1x2mubWL/7lvplPyrj8+mIObYK2lsofO\nnh52VVZwfWy8TWkaB+rLMYkW2cGO/LYCBAQSfaQ9VFjEXpqNOQ7XbMevAziBIH2fCBuzCNRLC7en\n+CazrXYHRrMRnUpacr1OpWZScAy7a0t4dvR82RfudVExeKjVbCwutOkprB9BEFg6JY3nPt1F9uka\n0qIibN7X5fDQa1ixfBrP/WMLm3flsXC2648O9gvw5M4HZ3DbD6dweHcRe7bksPXT42z88DBePnpG\nZ44gZcwIRo6OZHh0CJ7e0gsqOjuMnC1voCT/HNnHKsk5VklHuwG1xp2xU+OZMX80E2eORG3HdKWB\nZuuefPKKq3nm0Xl4ejh2TCtAzpkacs7U8PTiGXYVBQJsKC5E7+7OnGj5aRqiKLK7ppgJwVF4uEuP\n/nebuym5UMqc0Oskb9PvBAbpFMf5aujcA/FWR9FozCKBH0raJsUnmR11X1HaUfbNqqEUZoUn8Je8\nHVR3tRHhIS+aGOHtw9iIIWwoLuTRsfYViS2dmsanR/NYfziX+2aNtXk/l0MQBB7/4Szu/sm7/PO9\nr3lm5XyH7t8ZaLRq5t6UwZwb08k/cYZdm7M5sDOfvVtzUWvcSUqNZPS4aBJShhKdEIZ/oJfk89/T\nY+Lc6UYqimrIPlZB9rFK6qutHbFSMobzyDMLmbkg1eU6ZXwXlVWNfPxlFjfMSiExNtzh++/q7mH9\n4Txmj4ojzE/+aOyL2VFRjsFk4sZ426Liu2tK8FXrSQuQ5yfltecT7RmFl7u01MAWYz5m0UiQzrGd\nSa4JT0Cr8sdHE0ej4Rj43y9pmxSfZDbXbKWovZg0f+nVlLPCE9hVW0xRWx2JfvIKBzzUauZGx/Jl\naQm/nj7LpiEO/dyYmcjLWw6w5usTDnecAeZNT2LTzlxWvbeXyWOj8fd17QhqP2q1O1PnpjB1bgpd\nnd0c2VvEySPl5Byt5OCu/yzzBoX6EBLhh5+/J74Bnt9KqTAaemhr6aK1uYP66lYa69q/+Sw0wo9J\nsxJJHx/DuOkJLtWLWSotbV28umYvoxIimDfDvqK9K/H+1yfx0mnsbmfUbTKxpayE2dGxNnXTKGmv\n51xXKw/ET5G1XdGFEkyiiWRf6fnNDYbjeKuj0blLK0r5bydIn0nVhS+xiL2Sel6P9ElAJajIbcuT\n5TjPDLM6zrtqilgWM162nYtHJvHsrh3kNdTbNMShn4SIYMbFRvLhgWyWT8+weyn8UoYNCeCORZm8\n/9lR5k1PJmOUfSs9A4UgCKSMsQY2Hnl6IdnHKjh+oJScY5WsfW03lr4VQ29fPRGRgfgGeOLr74GX\ntx76/GhTr5m2lk5amztpqm+npqr5m9VSb189ozOjuO2eKUycmejSqRhXwmIR+evrO9HrNKxYNs0p\nx9hwrIALxm6WTbW/SO7zogIivL1t6qZhsljYU1vC9DB5RYWdpi7KOypYFHGD5G0ajNYOYv3BV0dx\nTTjOAMH6sZxu/xSz2COpF1+cdxwaNw25bXmyHOeZ4fG4nRTYWVMo23EGuHlkEp8XF/JVZYXNHQIA\nPLQabpswitV7sjjf3MaQAMeKgSAIPLliDvf+72r+8e4efvW49IvRVfDw1DJzQSozF1j/fxtq2ygr\nrOZsRT1nyutprGvn/JkmCk6dpaf7P4WWGq07vn0O9ajMKIbHhDA8JoTohDBCI1xj0p89vLJ6D52G\nbp5cMdfuaPDlqGlpZ3tOCcunZeCpsy/He8+ZSlqNRm4ZKd2BvZid1YUIWB945ZDblotaUEueGGjN\nbz7JcO8bbbDyv5MQ/Vgq2z+htbuQAAmjbnUqHXFeseS15bMk8nbJx4nyDiTGO4id1bY5zgti4/m/\nPbv4rKjALscZ4O7pGax8ewM7c8qYn25b6tF3ce/tE9l1sJjnX9/B6hfvcUrxmDNxV6sYMymOMZOs\nua0d7QZKCs5ztryBM+V11J1voam+nYqimm9NklW5u+Hj54lvgAdRcWFMu34Uw2NCGBEbyrCYYNxs\nSBdwJTZ9lUt24Tl+/uj1Dh+tDdaprO/vO8noYWGkjrAvml3f2cH+qjOsGDMONxtWaI43naGt18Ds\nCHnR6oL2AkRERvlKTzNpMBzHV5OAVuXYGp9r5lsXrM+kvO0Dmo05BOuvHnbXuKlJ9B5Jbpu8iU4B\nWk8yAoexo7qIxxJnyrZzUuQwQjw9+awo3y7HGWDplDTe23uC9/ed5Gc3zbBrX5djxNBAlt8ynn99\nfIi505KYkG5fle1gExzmS3CYLxNnSo9Wfd84euo02/YWcO9tE4ge5pwpWGv3WfvzLp1if5XyZ4UF\nBHl4MHmYbYNZdtYUkR4QSZBOXleP3LY8RvokoHGT5vhbl/wMBOsduwT/fSaoT6frDUclOc4Ao3xT\n+OTcelp7WvHTSL/ZzY5I5K2S/bR0d+Gvled4+Op0XBcdwxfFhfx88jS7IsVTR0YxItif1XuzmJcW\n7/A8VZ1WzZMPzeWJ337Cu58c4qG7pjp0/wONl4+ejAmxZEyQ15Ls+0RjSwer1uwlPTmSBTPtyz2+\nEnvyKzjb2MpjyxfYfU1uLC7CIorcPNK2++yO6kJ0KnemhMj7P89py8NDpSfGS9qsBLOlmybjKaJ9\npD+ES+WaeUyz5qi40WCQPrxjlF8Kdd311BrltQiaEzGS0vZ6Ki80ybQSVG5uLE5IZO+Z0zR2SRs5\neyXC/LyZlx7P+sN5Tik4AVh+y3hGDA3gL69td6mJggry6TL08Pxr2xk+JIDltzqnIPCCoZt1h3OZ\nmxpPuL99VcpNXV3sOl3B4oREmwpMznY0U9RWx5wh8gS8zmjVhNG+0nP76w1HAEHSQ7uCFa3KH19N\nvCzNHu1n/T/JkRnwmBORiFkU2VVjW5HfLSOTaDIY+PrMaZu278fNTWD59Azyq+o4Xn7Orn1dibGp\nw1kwM5kPPj9KaaVr9bhXkIcoirzwxk56TGaeWjHXaYNY3t1znCEBPsweJa+LxaWIosj6wnxSQ8OI\nCQiUvb1FFNlRXciUkFj07ldP37r4uDmtuST7JKESpD3YWtth9hCsl78KdTWuGcdZo/LGX5vUdwOT\nRv+NMadVXougORHWG/GOank9Rfu5JTEZk8XChmJ5rZUux70zMjH09DqluT6ARu3O04/Oo77pAv94\nd49TjqEwMKxas5e6xnZ+9sj1TlvC/eRQDp3dPdw7w/4CuS9KijBZLNySaFue9PZq6/er//sqlZw2\n63ChfidNCvWGI/hpR6JRXXv5k4NJsH4cTcZTmC3SHvwj9UPxU/vJ1uwk3zCGePh9c03IZdrwEQTq\nPVhXKK8T0+W4MTOJAC89/9qTZfe+rsTKe2bg66PnuVe20OOEfv8KA8OOfYXsO1rGj5ZMItJJaYKn\nKqs5dbqG5dMycLezd3V+Qz3FTY3caqNmZzefo8HYwVyZwY4qwzlae1tla7aAu8Pzm+EacpwBQvTj\naTHm0WvpkPT7oboQwnVhnJIpwuEevoz2H8LW87Y5zvGBQYwODWNdQZ7d7eQSIoKZnDCc974+iaHH\nsS18+kmJj+DOm8byxc4c9h+zbXytwuByMKucz7dns2RRJqNHyi/YkIKx18R7X59gfFwkSUPtywUF\nWFeQR0pIKCODpE/7u5ht5wtI8YuQ1UAfILs1h1BtKGE6aX+DydJFszGXECdELr7vhOjHYxF7aJQx\nfjvVbxR57QWYLNIdQkEQmBuRyKH6ctp75K/OqVUqFo9MZFdlOU12rhTq1O4snZLOvsJKis47JyLs\n463nqRXXU3a6gbf+fcApx1BwLrUN7bz45leMSohgySLnrWS9tesovh46u6e7glWzNSoVC+Nty9/f\nej4ftZtKdhu6U63ZALJWCRsMR/DXJaN2c3zjg2vLcfYYj4hZ1tJfml8qRReKMZgNso41b0gShW21\nnO1olmsmALcnpVDc1Ehuvf2TpB6YPY7mji7WO2EMdz8/umMysSOC+dOqrTS3unafUIVv09LWyZ9W\nbSNmWBAPLpXXXUIOnx3Jo/FCFw/Ntt+BzK+vo6CxgduTbMvpO9/ZSl5rNdcPkVdUaDQbKWwvIl1G\nwXCDIQsREyF656S/fJ8J0o/BDTX1XYckb5Pml4bBbKD4grzezNcPSaJXtLCrRtrQlUu5LSmFXouF\nzx2wUnjnlFS8dBre2HnU7n1diSljY1g0ezQfbjjGyfwqpx1HwfGYzRb+8MoWzBYLv/ifBU6bYlh0\nvp69BZUsn5aBh9a+Qu5uk4kNxUXMjYnFTye/zd9/0jRi8FbL61Z1qiWbKM8oyXUPPeY2WroLnKbZ\n15TjHKBLRSXoqe86LHmbdP80zKJZ9jCUuX035G02Rp0XxSegc3fno3z7nd0x0UMZEz2Ef+0+TreT\nluU0and+9fgNdBl7+cMrWwd1TKqCdERR5I+vbqOjs5tfPn4DGif1mu4xmXh71zHSR0SQGTPU7v19\nmJ+LVuVucx/QLeet32e5jnNeWz4m0USan3THud5wEJWgc+jI1v8W3N30BOrSqDdId5yTfRJRC2pO\ntkqLUvcz2n8I4Xpfttio2QmBQaSFhvNRXo7d+uej13Hn5DR25pZSVtto176+i8funcGQUD9+99Jm\n2jucUwej4Hg+3HiME3lVPH7fLKdMde3n9R1H8NZpuXOKdL27ElvLS2nrNtoc7MhuPkeNoV22Zrf2\ntFHRWUm6LM0+AoiEeiiOMypBQ7B+LHUyohexXjF4uXtxokXeqNIhHn6k+g/95gYtFx+tjoXxCWwo\nLuRCd/fVN7gKD8+dQH17J58ekVc0I4foYUE8evd0Dp+s5ONNzsvPU3Ac6zaf5GBWBQ8vn07sCNtS\nHqTw+dF86to6WDF3gt0FLJ09PWwsKmRhfAK+Otv6ZG85n89o/yFEesrLCzzZegpPlQfx3tKLZOq6\nDhGkz0Tl5vhBMv8NhHpMoq2nFINJWtqCVqUl2TeJky2nZDmwgiAwf2gyB+vLae2Rt8LYz52jRlPW\n0mz39FewtqbTa9S8scN5UWcPvYZfP3EDTa2d/HnVNiXgcQ2QX1LDmx8eYObEeG6Y5ZwuGgAlNY3s\nzC3jrqlp+Ojtn0fwQW42w339mBxpWwekLefz0bipuC5cXrDkVGs2IiLp/tIDF3VdB1G7eeOvdc75\nvaYcZ7CKcKepio6eM5J+XyWoSPMbTXZrjqycOYAFQ5MpbKulvL3BFlNZmpJKV2+vQ4oEx8VGkhEV\nwVu7jjkt6gxwy7w0po6NZdV7X5NbZP/NQ8F55JVU8+qaPUwaE81tC+xvan8lekwm3th5lNTh4UyM\nt3/owsaSIjp6e7gzRVqLskupvNBEQWsN84fIy9kzi2ZOteYw2m+05Mrszt5zdPSeIVQ/0RZTFbBq\nNiAr4JHul0ZjTxNVBnmdKRYMTcEkWthuY9R5YVwC3hotH+Rl27T9xfh56lk6JY2t2cVOjTonxobz\n0NIp7D1SyidfnnDacRTsp7W9i1++sJHgAC+edGIXDYDXth/CU6th2TT7i+NKmho5Vn2eO1JG2dS7\n2Sxa2HIun6mhcXip5QUgTraeIkgTRKRe2kqnKIrUdR0kRD8eN8E5K7DXpOMMUNslvSAiwz+dTnMX\nJR2lso41f2gKbgh8cc62dIvU0DCSg0NYm5ttdyRAEAQenjuR+rYO1jsx6iwIAs88No/QIG9++cIX\nSr6zi9LS1sWv/voFwQHe/OJ/7O/N+V18esQabX7k+ol2H0cURdbmnCIxKJj0MNsa8W86l4OA1UmS\nQ8mFUjpMHYzxl/6Q0a8zYR6TZR1L4T/4aOLQqYKpk6HZ6f6pCAhktchzBJN8w4jyCmSTjZqtV6u5\nNTGJraWldrcTBbhn+hj0GjWvbZfeDcoW7rxpLFPHxfLqmr1kFzqnDZ6CfZjNFn779820tHbx+ydv\nxMeJU2mLqxvYkVPGsmnp+Ho4JtqscVNxW6JtEdzDDZU0dnewKFJ6cR9Ya1Ly2/LJ8E+XfO9p6ynB\naG4g1Imafc05zl7qSLzUw2U5zik+yWjcNBxvlifCwTovJoZEs6kq1ybHVxAElo1Kpbjvac1exsdF\nMiZ6CG/uPEJXt3M6bAB4e+p47smbaO8w8usXN2HqG4mq4BqYzBZ+87dNtLZ38ZyTBdjQ08sbO4+Q\nERXhkGjzidpqChobWDoq1SYnXBRFNlXlMj44ihC9t6xts1pOoBbcZU2equ3aj6d7JF4a25YnFaw6\nGOoxmXrDISyiNN3yVfsS5xVLlkzNFgSBhZGjONZ4huquNlvMZemoVHosZj52QH2Kn6eeu6amsy27\nhMJzzuu5LAgCz66cT3iIL7/66xc0tkjrPKUwcLz90UGOZp/mx/fPYmSM/KnEcnhly0G8dVqWOyDa\n3NHTw6eFBcyPiyfQw7aphpuqcvFy18ruppHblkevaCJDVpqG1TfsD7I6g2vOcQYI85hCo/E4Jou0\nPDatSkuKbzInWk5iEeU5gYsiR3G+q5UTTbZVLS9KSMRHq+X9HHmFLpdDEAR+vGAKjRe6eH+fc5fk\n4qJCeOqhOZzMr+IVpb+zS/HPNXvJyj3Lkw/NIT7a/rZw38XafSdpaO/k8QVTHBLVfi/nFF4aDYsT\nbJs6dar5HGc7W7gxUl6ahyiKZLWcJMU3BZ1K2oOGyWKgwXCMME/ndSr5byHMYwq9lg6ajNJTIMb4\np1NlOEe9UV6q3KK+a2NTlW2972MDApk4dBgf5GVjstgfNLh3xhh89Fpe2rzf7n19F16eWv7w1I10\nGrr5xV820t2j9Hd2FfYcKmHN+sMsvG4UN86xLUVNKlkV59hTUMF9szIdEm3+vKiAjt4e7h5tW3G0\nwdTL9upCrh+ShFYlL3XiePMJvN29ZNWk1Hbtx1czEr17iFxTJWOf4ywIf0EQipDjs/AAAAotSURB\nVBCEHAThMwTB76LPfo4glCEIxQjC9fYaejFhHlOwiD2yhqFk+mfQ0ttCRWelrGPNjkhEr1Kzocq2\nnDcPtZrbElPYWl5KXYf9UYC0qAhmJsfwzq7jNHfYv5T4XcybkcyShWNYt/kEn2213/FXsJ/Pt2fz\n0aYsbluQznwnjWftp7XTwDu7jjM9KYqMaPt7Qzd0drKltITbEpPx1NjWGmlDVTY6lTtzZQ49qew8\nTXNPs6w0jQbDcSxiN2Ee3zPHeRB0O8RjAgLu1Hbuk7zNmABrtOx4i7xC5UhPfzICItlYZXt3jOWj\n06i+cIGvKu3va++j1/Hg7PEcKD7DkdKzdu/vu4geFsyzj80nr7iaP76qdEdyBYrKavndy5tJSYjg\niR9d59S0OlEU+dum/QT7eHLXVPvrXkRR5P2cU6QEh5BmY2rdzppCukw9soMdvZZeTrVmk+6XJrkm\npcfcRpMx2+nBDnsjzjuAFERxNFAC/BwAQUgC7gCSgXnAKgSJf7kEgvRjcBc8ZYlwml8qKkHFsebj\nso7l6a5hdkQiW8/nYzTblh6xfHQaZouFtbn2F5wA/PiGyRh7e3l9h3Pz5gAeuXs6k8ZE87e3v+LQ\niQqnH0/hyhw5Wcnf3tzJxIwoVt470+nHe33nETq7e/jxDY4RobW52fRaLCyzMXLRbTax5Vw+s8MT\n8ZRZYHK8JQuVoJJVmV3b9TUqQU/Q92/M9oDrttrNk2D9GGq7pGt2sDaY4R7DOd4sv8PPTcNSKb/Q\nSF5rtextAWZHxxDh7c3qU/K6MV2JOyanEu7vzQub9mGxONeZnTkxgYfumsrO/UW889FBpx5L4bup\nrW/jZ3/8jAA/D/7w1E1Om+jaz87cMrLP1PDo9RPRa6SPtL4SB6rOUtLcxN2p0nOML2XD2RwiPHzJ\nDJKX7pbfVoDRYiQzQLr+WlN4LYR7TJdppTzsc5xFcTui2L8edBjoL3u8Cfg3otiNKFYCZcA4u451\nEW6CmnDPGViQvhTl6e5Jml8qPZYe2ce7eVgq/hpPzne2yt4WYLifH3NiYqntvGDT9pcSHRrILeNT\nKK9twuyApcTvQqVy4zdPLCR2eDDb9tpWqa7gGLbvKyRqWBD/95NFdo9OvRoWi0h5bRM3j0smNizI\nIfus6+zguqhoov0DbNr+fFcr/hoPFg+T35O029xNqu8ovNy9JG9jEU2Ee05HJdg3OMDlGCTdDvec\njrubFyaL9JWy8QGZCIIbPRZ5QYt5Q5IJ0/twvss2zXZ3c+Oe1HQ6errp7JF/z7gUrdqdx+ZPpr3L\nSF2bY+4D38Wym8dxw6wUvjpQjMFov/0KtnH41Gm6e008/8wtBPg5foLdpRRXNxAXHsRNY+2fEghw\npq2VSB9fFtnYb7/XYqbbbOKmyFTZ3TjaTe2EaENI9pG+uthr6cBbHY2/Vl6vaLkIDlvKEYQvgI8Q\nxfcRhFeAw4ji+32fvQ1sQRTXXWa7B4EHAXiLFPQ4r2WErbQShB/O6ydkK4pd8nFV2xS75OGqdvWQ\nwL2ivKrFwUTR7YFHsUseil3yUOyShw2affV1A0HYCVyuBPRZRHFD3+88C5iAtXIODoAovgG80bef\n44ii662LKnbJw1XtAte1TbFLHq5s172DbQSKboNil1wUu+Sh2CUPV7brXnmbXN1xFsXZVznovcBC\n4LqLKhHOA5EX/dbQvvcUFBQUFJyNotsKCgoKTsHerhrzgKeAGxHFixPXNgJ3IAhaBCEKiAOcN3dU\nQUFBQUEaim4rKCgo2Iy9JZ6vAFpgB9bE78OI4gpEMR9B+BgowLoU+CiiaJawvzfstMdZKHbJw1Xt\nAte1TbFLHopdtqPo9uCi2CUPxS55KHbJQ7ZdjisOVFBQUFBQUFBQUPgec01ODlRQUFBQUFBQUFAY\naBTHWUFBQUFBQUFBQUECruE4D9Lobgl23Y4g5CMIFgQh86L3RyAIBgThVN/Pay5hl/WzwTtf37bj\nNwjC+YvO0YJBs8Vqz7y+c1KGIDw9qLZcjCCcRhBy+86RvLGWjrXjHQShHkHIu+i9AARhB4JQ2vev\nv4vYNfjXliBEIgi7EYSCvu/i433vD/45GwgUzXaMXdbPFM2+vD2KZl/dFkW3pdvkOM0WRXHwf2Cu\nCO59r/8swp/7XieJkC2CVoQoEcpFUA2gXYkiJIiwR4TMi94fIULeIJ6vK9k1uOfr2zb+RoSfDvq1\nZbVF1XcuokXQ9J2jpEG3y2rbaRGCXMCOaSJkfOu6hudFeLrv9dPffC8H367Bv7YgXISMvtfeIpT0\nff8G/5wNzN+vaLZj7FI0+/K2KJotzRZFt6Xb5DDNdo2I8yCNgJVgVyGiWDxgx5PKle0a3PPluowD\nyhDFCkSxB/g31nOl0I8ofg00X/LuTcDqvtergcUDahNcya7BRxRrEMUTfa8vAIXAEFzhnA0EimbL\nQ9FsuSiaLQVFt6XjQM12Dcf529wHbOl7PQSouuizc33vuQJRCMJJBGEvgjB1sI3pw9XO18q+pdx3\nBnnJ2tXOy8WIwHYEIQvrGGNXIhRRrOl7XQuEDqYxl+Aq15Y1DQDSgSO49jlzFopm246rnS9X+V65\n2nm5GFfWbHBtDXKN68tOzba3j7N0nD0C1pl2/f/UAMMQxSYEYQzwOYKQjCi2D7JdA8t32Qj/BH6H\nVWR+B7yA9Qar8G2mIIrnEYQQrH11i/qe1l0LURQRBFfpXek615YgeAHrgR8jiu1Y+yJbca1zJh9F\nswfCroFF0WxHcG1oNriaBrnG9eUAzR44x9lVR8Beza7Lb9MNdPe9zkIQyoF4wHGFArbYNdAjc6Xa\nKAhvApucZsfVcd1RwqJ4vu/fegThM6xLlK4iwnUIQjiiWIMghAP1g20QAKJY983rwby2BEGNVYDX\nIoqf9r3rmufMFhTNdr5dimZfCUWzbcc1NcgVdNtBmu0aqRrX2ghYQQhGEFR9r6Ox2lUxqDZZcZ3z\nZb0A+7kZyLvSrw4Ax4A4BCEKQdAAd2A9V4OLIHgiCN7fvIa5DO55upSNwD19r+8BXCVqNvjXliAI\nwNtAIaL44kWfuOY5czSKZjsK1zlfrvC9+g+KZtuOa2rQYF9fjtTsQa8KtVYylolQJcKpvp/XLvrs\n2b7q2mIR5g+wXTeLcE6EbhHqRNjW9/6tIuT32XpChEUuYddgn69v2/ieCLki5IiwUYTwQb7GFvRV\n0ZaL8Oyg2vIfm6L7qsWz+66nwbMLPhShRoTevmvrfhECRfhKhFIRdooQ4CJ2Df61BVNEEPts6Net\nBS5xzgbm71c02xF2Dfb5+raNg/+9+rY9imZf3R5Ft6Xb5DDNVkZuKygoKCgoKCgoKEjANVI1FBQU\nFBQUFBQUFFwcxXFWUFBQUFBQUFBQkIDiOCsoKCgoKCgoKChIQHGcFRQUFBQUFBQUFCSgOM4KCgoK\nCgoKCgoKElAcZwUFBQUFBQUFBQUJKI6zgoKCgoKCgoKCggT+Hxw5kS97aGOjAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "Let's see how Newton's method can be used to solve a quadratic function by applying it once.\n", "We start with a quadratic function x^2 + 5y^2 and when you differentiate it, you end up with 2x + 10y\n", "which would result in a Hessian of [[2 0], [0, 10]] because the derivative of 2x + 10y is 2 and 10.\n", "\"\"\"\n", "\n", "def quad(x):\n", " return ((x[1:])**2.0 + 5*(x[:-1])**2.0)\n", "\n", "def quad_grad(x,y):\n", " return (tf.Variable([2.0*x, 10.0*y]))\n", "\n", "\n", "# Create x and y values\n", "x = tf.linspace(-20.0, 20.0, 100)\n", "y = tf.linspace(-20.0, 20.0, 100)\n", "\n", "# Broadcasts parameters for evaluation on an N-D grid\n", "X, Y = tf.meshgrid(x, y)\n", "\n", "# Reshape X and Y to pack along first dim (row wise) and apply the quadratic function and reshape it to get the original dimension\n", "Z = tf.reshape(quad(tf.stack([tf.reshape(X, [10000,]), tf.reshape(Y, [10000,])], axis=0)), [100, 100])\n", "\n", "# Take the inverse of the Hessian: (1/2, 1/10)\n", "H_inv = - tf.constant([[0.5, 0], [0, 0.1]])\n", "\n", "plt.figure(figsize=(12,4))\n", "plt.subplot(121)\n", "\n", "plt.contour(X,Y,Z);\n", "plt.title(\"Steepest Descent\");\n", "step = -0.25\n", "X0 = 10.0\n", "Y0 = 1.0\n", "\n", "# Here we calculate the Gradient of our function and take the dot product between the gradient and the Hessian inverse\n", "N_grad = tf.tensordot(H_inv, quad_grad(X0,Y0), axes=1)\n", "\n", "sgrad = step*quad_grad(X0,Y0)\n", "plt.quiver(X0, Y0, sgrad[0], sgrad[1], color='red',angles='xy',scale_units='xy',scale=1);\n", "X1 = X0 + sgrad[0]\n", "Y1 = Y0 + sgrad[1]\n", "\n", "sgrad = step*quad_grad(X1,Y1)\n", "plt.quiver(X1.numpy(), Y1.numpy(), sgrad[0].numpy(), sgrad[1].numpy(), color='green', angles='xy', scale_units='xy', scale=1);\n", "X2 = X1 + sgrad[0]\n", "Y2 = Y1 + sgrad[1]\n", "\n", "sgrad = step*quad_grad(X2,Y2)\n", "plt.quiver(X2.numpy(), Y2.numpy(), sgrad[0].numpy(), sgrad[1].numpy(), color='purple',angles='xy',scale_units='xy',scale=1);\n", "\n", "\n", "plt.subplot(122)\n", "plt.contour(X,Y,Z);\n", "plt.title(\"Newton's Method\")\n", "plt.quiver(X0, Y0, N_grad[0], N_grad[1], color='purple',angles='xy',scale_units='xy',scale=1);\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "KBVK0lNS7z7f" }, "source": [ "\n", "Optimization algorithms that use only the gradient, such as gradient descent, are called __first-order optimization algorithms__. Optimization algorithms that also use the Hessian matrix, such as Newton’s method, are called __second-order optimization algorithms__." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "uxbCCGRhP202" }, "source": [ "Deep learning algorithms tend to lack guarantees because the family of functions used in deep learning is quite complicated. But sometimes we gain some guarantees by restricting ourselves to functions that are either __Lipschitz continuous__ or have Lipschitz continuous derivatives. A Lipschitz function is a function $f$ whose rate of change is bounded by a __Lipschitz constant__ $\\mathcal{L}$:\n", "\n", "$$\\color{orange}{\\forall x, \\forall y, |f(x) - f(y)| \\leq \\mathcal{L} \\| x - y \\|_2 \\tag{11}}$$\n", "\n", "This property is useful because it enables us to quantify our assumption that a small change in the input made by an algorithm such as gradient descent will have a small change in the output. " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ci5LjG2Trb90" }, "source": [ "# 04.04 - Constrained Optimization" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "enaamo6eVGrr" }, "source": [ "Sometimes we may wish to find the maximal or minimal value of $f(x)$ for values of $x$ in some set $\\mathbb{S}$. This is knows as __constrained optimization__. Points that lie within the set $\\mathbb{S}$ are called __feasible__ points in constrained optimization technology.\n", "\n", "We often wish to find a solution that is small in some sense. A common approach in such situations is to impose a norm constraint, such as $\\| x \\| \\leq 1$. One simple approach to constrained optimization is simply to modify gradient descent taking the constraint into account.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PkBfy4NuVHH4" }, "source": [ "A more sophisticated approach is to design a different, unconstrained optimization problem whose solution can be converted into a solution to the original, constrained optimization problem. This approach requires creativity; the transformation between optimization problems must be designed specifically for each case we encounter.\n", "\n", "The __Karush–Kuhn–Tucker (KKT)__ approach provides a very general\n", "solution to constrained optimization. With the KKT approach, we introduce\n", "a new function called the __generalized Lagrangian__ or __generalized Lagrange function__.\n", "\n", "To define the Lagrangian, we first need to describe $\\mathbb{S}$ in terms of equations and inequalities. We want a description of $\\mathbb{S}$ in terms of m functions $g^{(i)}$ and $n$ functions $h^{(j)}$ so that $\\mathbb{S} = \\{ x \\ \\mid \\ \\forall i, g^{(i)} (x) = 0 \\ \\text{and} \\ \\forall j, h^{(j)} (x) \\leq o) \\}$. The equations involving $g^{(i)}$ are called __equality constraints__, and the inequalities involving $h^{(j)}$ are called __inequality constraints__.\n", "\n", "We introduce new variables $\\lambda_i$ and $\\alpha_j$ for each constraint, these are called the KKT multipliers. The generalized Lagrangian is then defined as:\n", "\n", "$$\\color{orange}{L(x, \\lambda, \\alpha) = f(x) + \\displaystyle\\sum_i \\lambda_i g^{(i)} (x) + \\displaystyle\\sum_j \\alpha_j h^{(j)} (x) \\tag{12}}$$\n", "\n", "We can now solve a constrained minimization problem using unconstrained optimization of the generalized Lagrangian. As long as at least one feasible point exists and $f(x)$ is not permitted to have $\\infty$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 286 }, "colab_type": "code", "id": "huEEYquLO2Kb", "outputId": "3390b120-67cb-4ed4-a62f-84aedaf0a133" }, "outputs": [ { "data": { "text/plain": [ "[0, 3, 0, 3]" ] }, "execution_count": 20, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\n/wGgsldFIu19LAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "Let's see how this looks by plotting a function f(x) = −(2xy+2x−x^2−2y^2) with constraints \n", "x^3−y = 0 and y−(x−1)^4−2≥ 0 with bounds 0.5, 1.5, 1.5, 2.5. The solution will be where the\n", "two constraints meet inside the bound.\n", "\"\"\"\n", "\n", "def f(x):\n", " return -(2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2)\n", "\n", "x = np.linspace(0, 3, 100)\n", "y = np.linspace(0, 3, 100)\n", "X, Y = np.meshgrid(x, y)\n", "Z = f(np.vstack([X.ravel(), Y.ravel()])).reshape((100,100))\n", "plt.contour(X, Y, Z, np.arange(-1.99,10, 1), cmap='jet');\n", "plt.plot(x, x**3, 'k:', linewidth=2, color='r') # constraint 1: x^3−y = 0\n", "plt.plot(x, (x-1)**4+2, 'k:', linewidth=2, color='b') # constraint 2: y−(x−1)^4−2≥ 0\n", "plt.fill([0.5,0.5,1.5,1.5], [2.5,1.5,1.5,2.5], alpha=0.3) # bounds 0.5, 1.5, 1.5, 2.5\n", "plt.axis([0,3,0,3])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "XYXBAbc0VHpM" }, "source": [ "To perform constrained maximization, we can construct the generalized\n", "Lagrange function of $- f(x)$, which leads to this optimization problem:\n", "\n", "$$\\color{orange}{min_x max_{\\lambda} max_{\\alpha, \\alpha \\geq 0} = - f(x) + \\displaystyle\\sum_i \\lambda_i g^{(i)} (x) + \\displaystyle\\sum_j \\alpha_j h^{(j)} (x) \\tag{13}}$$\n", "\n", "The sign of the term for the equality constraints does not matter; we may define it with addition or subtraction as we wish. " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nXOGjZgOzL55" }, "source": [ "A simple set of properties describe the optimal points of constrained optimization problems. These properties are called the Karush-Kuhn-Tucker (KKT) conditions. They are necessary conditions, but not always sufficient conditions, for a point to be optimal. The conditions are:\n", "\n", "- The gradient of the generalized Lagrangian is zero.\n", "\n", "- All constraints on both $x$ and the KKT multipliers are satisfied\n", "\n", "- The inequality constraints exhibit \"complementary slackness\": $\\alpha \\odot h(x) = 0$" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YruCMnZDruwB" }, "source": [ "# 04.05 - Example: Linear Least Squares" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "97g_Kjn6VLRB" }, "source": [ "Let's see how we can find the value of $x$ that minimizes:\n", "\n", "$$\\color{orange}{f(x) = \\frac{1}{2} \\| Ax - b \\|_2^2 \\tag{14}}$$\n", "\n", "using gradient based optimization.\n", "\n", "First we need to obtain the gradient:\n", "\n", "$$\\color{orange}{\\nabla_x f(x) = A^{\\top} (Ax - b) = A^{\\top} Ax - A^{\\top} b \\tag{15}}$$\n", "\n", "![Linear least squares](https://raw.githubusercontent.com/adhiraiyan/DeepLearningWithTF2.0/master/notebooks/figures/fig0405a.png)\n", "\n", "One can also solve this problem using Newton’s method. In this case, because\n", "the true function is quadratic, the quadratic approximation employed by Newton’s method is exact, and the algorithm converges to the global minimum in a single step.\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 303 }, "colab_type": "code", "id": "dgrix6ojcvXQ", "outputId": "58842efa-7f97-4e4e-d013-843b6c33eafb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "slope (m): tf.Tensor(1.0040492, shape=(), dtype=float32)\n", "intercept (b): tf.Tensor(0.011254057, shape=(), dtype=float32)\n" ] }, { "data": { "image/png": "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\nlAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "There are two ways to solve the above system. Direct method and iterative method.\n", "We start with the iterative method. The optimal solution is where the gradient becomes zero\n", "therefore it is at x = (A^T b)*(A^T A)^{-1} and this is what we will be calculating\n", "\"\"\"\n", "\n", "# Generate random x and y data\n", "x_vals = np.linspace(0., 10., 100)\n", "y_vals = x_vals + np.random.normal(loc=0, scale=1, size=100)\n", "\n", "x_vals_column = np.transpose(np.matrix(x_vals))\n", "ones_column = tf.ones([100, 1], dtype=tf.float32)\n", "\n", "# tensorflow needs its data types in float so we cast the dtypes to float\n", "A_tensor = tf.dtypes.cast(tf.concat([x_vals_column, ones_column], axis=1), tf.float32)\n", "Y_tensor = tf.dtypes.cast(tf.reshape(tf.transpose(y_vals), [100, 1]), tf.float32)\n", "\n", "# Iterative method\n", "tA_A = tf.matmul(A_tensor, A_tensor, transpose_a=True) # We calculate A^T A\n", "tA_A_inv = tf.linalg.inv(tA_A) # And take the inverse of it (A^TA)^{-1}\n", "product = tf.matmul(tA_A_inv, A_tensor, transpose_b=True) # Then multiply it with A to yield (A^TA)^{-1} A\n", "A_eval = tf.matmul(product, Y_tensor) # Finally we find (A^TA)^{-1}*A*b\n", "\n", "\n", "m_slope = A_eval[0][0]\n", "b_intercept = A_eval[1][0]\n", "print('slope (m): ' + str(m_slope))\n", "print('intercept (b): ' + str(b_intercept))\n", "\n", "# Now for each x_val we find the best fit line\n", "best_fit = []\n", "for i in x_vals:\n", " best_fit.append(m_slope * i + b_intercept)\n", "\n", "plt.plot(x_vals, y_vals, 'o', label='Data')\n", "plt.plot(x_vals, best_fit, 'r-', label='Least square fit', linewidth=3)\n", "plt.legend(loc='upper left')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 291 }, "colab_type": "code", "id": "jzknk-aNO20g", "outputId": "15509a75-2405-499b-b11b-eaeb0b79ff65" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtIAAAESCAYAAADQajKDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl8FPX5wPHP5A6QYwmBBJIQCJCE\nIxC570NEFDyKUhQVFdTaatUq1qMeeFel1vJrq71sq9VCVRDkVNBwhiMQCAnhCoQQSEJINgeQe+f3\nx5fsZsl97m7yvF+veWV3dnbmu8sy88wzz3y/mq7rCCGEEEIIIRrHydYNEEIIIYQQwhFJIC2EEEII\nIUQTSCAthBBCCCFEE0ggLYQQQgghRBNIIC2EEEIIIUQTSCAthBBCCCFEE0ggLYQQQgghRBNIIC2E\nEEIIIUQTSCAthBBCCCFEE7jYugGN8nU3nc6htm6FEEIIIYRoz3L3X2S+7l/fYo4VSHcOhZlxtm6F\nEEIIIYRoz77QzjRkMSntEEIIIYQQogkkkBZCCCGEEKIJJJAWQgghhBCiCRyrRroGZWVlpKenU1xc\nbOumCFEnDw8PgoKCcHV1tXVThBBCCNECHD6QTk9Px8vLi9DQUDRNs3VzhKiRruvk5OSQnp5Onz59\nbN0cIYQQQrQAhw+ki4uLJYgWdk/TNPz8/MjOzrZ1U4QQQnQACZkJrDy6krT8NEJ8QpgTMYeogChb\nN6vdaRc10hJEC0cgv1MhhBBtISEzgaWxSzEWGQnyDsJYZGRp7FISMhNs3bR2p10E0kIIIYQQQll5\ndCUGDwMGTwNOmhMGTwMGDwMrj660ddPaHQmkW0LiW7BuEKyPgvXD4OIeNX/PQ5B/pGW2sToUii/W\nvUzS241f76l/wb7Hbbd9IYQQQrSotPw0fDx8rOb5ePiQlp9moxa1Xw5fI91YLV4zlB0L59bCzAPg\n7K6CTVOpem3031um0Q2V9DYMerFtt2lP2xdCCCEEIT4hGIuMGDwN5nn5xfmE+ITYsFXtU4fKSLdK\nzVBxBrh3U0E0gEc36NRTPd48BXKuDmn+vy4Q/6zKXG+ZDhf3qtdX94X0NWqZa7PDMbMhK6b6Nrfd\nDhuGq3Wd/Kuad/B5qChSGfGd96h5p/8DG0epeXt/BqYKNT/ln/DtAPVa9s6aP1dJDvwwQ21jz0Og\n643ffk3LCSGEEKJVzYmYg7HYiLHIiEk3YSwyYiw2Midijq2b1u50qEC6VWqGAmbAlbMqMN33C8ja\nWvNy5ZehxzSYlQSuXpDwEkz7HiatgoRXGrfN0Z/ATfvhxjg4tkwFvcN+C86ecPNBGP855CfDmRUw\nY6eapzlD6udQlAGHX4UbdsINO2ovPTn8GvhPUO0N+glcSWvc9mtbTgghhBCtKiogisVjF2PwNJBe\nkI7B08DisYul145W0KFKO9Ly0wjyDrKa1+yaIdcuMHM/ZG+HrB9h5zwVVPZ9wHo5JzcInKke+w4B\nJ3dwclWPL6c2bpvHlkH6KvX4ylkoPAHuftbLZG4B437YOFI9rygC9+6qfrv7FPDwV/N7z4OC49W3\ncWEbTLp6gtFrFrhZLg81aPuNWU4IIYQQLSoqIEoC5zbQoQLpVqsZcnKGHlPU5DsETv27hkDaFczd\nnzlZSkE0J9DLrz52AUyW91TUMFpjVgxkbYYZseDSSZWH1LQcOvS5H4a9Yz377DeN+2xN3X6D2ymE\nEEII4Zg6VGlHq9QMFRyDghOW58aD0Ll309bVOVS9XzfB5bOQs7f6MmX54GpQwWn+Ubi42/Ka5gqm\nMvU44HpI+wqKL6jnJblw+Qx0Gw0XtqoyC1MZpH1Zc1u6T4LUL9Tj8xug1Ni47de1nBBCCCFEO9Ch\nMtKVNUNVe+1YFL2oeZc+yi9B3C+hNA+cXKBLPxjVxBvr/MdD5z6wbiB4R0LX66ovEzgTTnwMayPB\nOxy6jbG81u8R1QWf4TpVpzz0TXXDICYV5I78k1p+yBL4biy4+oJhWM1tGfIq7Lxb3SjYbRx0Cmnc\n9sd8UvtyQgghhBDtgKZX7Y3B3m0coTMzzmpWcnIykZGRNmqQEI0jv1chhBDCAXyh7We+PqK+xTpU\naYcQQgghhBAtRQJpIYQQQgghmkACaSGEEEIIIZpAAmkhhBBCCCGaQAJpIYQQQgghmkACaSGEEEII\nIZqgQ/UjLYQQQgjhSBIyE6zGv5gTMUeG/rYjkpEWoqWc/Qb2PAw75kHGd7ZujRBCCAeXkJnA0til\nGIuMBHkHYSwysjR2KQmZCbZumrhKMtLNVZIDW65Xj4szQXMGd3/1/Ma94Oxmu7YB/K8L/PSSbdtQ\n1e6FcG4teHSHWYlNX8/lsxC7AIqzQNMg7BGIeLLl2llRDN9PAlMJ6OUQfCdEvVb3e4JvV1OpEQ4s\nhsAZLdceIYQQHc7KoysxeBgweBoAzH9XHl0pWWk7IYF0c7n7wc0H1eOEJeDaBSIXV19O1wEdtA5+\nEaDvAzDgcRUE1yUrBk79C8b+q+bXnVzgut+pYdTLCmHjcAi8AXwGNrwtdW3DyR2u/0H9e5rK4PsJ\n0POmhg11nvgmDHis4e0QQgghapCWn0aQd5DVPB8PH9Ly02zUInGtDh7VtbJLqfBtOOxaAOsHw4Xt\nsG6w5fXkpSr4Bjj9H9g4CtYPg70/A1OF9boOPg/H/2R5nrBEvR9g2+2wYTisGwQn/1pzO2rbbkO2\nnZcI342zPM89YMnCN1b3SeDWtWnvrcozUAXRAK5e4B0JV86p55unQsb36vGhlyDul41fv6apIBpU\nIG0qAzTL6zVtQ9ch/jkVcFe2TQghhGiiEJ8Q8ovzreblF+cT4hNioxaJa0lGurUVnoCx/1aZzEup\nNS+TnwxnVsCMneDkCvt+AamfQ98qWduQeXDgKUumM+1/MHWTejz6E3DvCuVFsGkkBN+hMuUN0ZBt\n+wyES6dUgO3kDAeehus+sF7P9xNVZvha1y2FgOkNa0tTXUoFYzx0G62eR70GCa9A8QU1f9Kapq3X\nVKEy3ZdOQv/HLOuvbRvH/w8yN0NZPhSehP6PNvujCSGE6LjmRMxhaaxKmvl4+JBfnI+x2Mii6EU2\nbpmoJIF0a+vcu/5ygMwtYNwPG0eq5xVF4N7depmu0Spou3IeSrLBzQCdg9Vrx5ZB+ir1+MpZFbw3\nNJBuyLY1J/AZBPlJat2de1fPuN6wvWHbq8+m0VBRAuWXoDRXZckBhr0LPW+svnzZJdh+Bwz/EFy9\n1bzukwAdjn4A02NU8N+UbTg5q7Kd0jzY9hOVmfcdXPs2wp9QkxBCCNECogKiWDx2sVWvHYuiF0l9\ntB1pV4G0pmn1L9QEuq43/c0unS2PnVxAN1meVxRXbgH63A/D3ql7XSFz4exXUJQJveepeVkxkLUZ\nZsSCSyfYPKXKeuvbbiO23W0MXNwJx/8MUzdWf72lMtI37lF/66uRBlVusf0OCL0HgudY5ucdhqIM\ncPNTZR/N2QaAmy/0mAoZGy2BdH3bEEIIIVpAVECUBM52TGqk25JHDyi5oHr6qChRvVcABFwPaV+p\njDNASS5cPlP9/SHz4MxyFUyHzFXzyvLB1aCC6PyjcHF3w7fbmG37jVG1wME/gU69qr9+w3aVvb12\naq2yDl2H3YvAJxIin7bML8qAXffApNWqxvl8DUF/QxRnq0w0qJKZzO/BO6JltyGEEEIIh9auMtLN\nyhy3BSdXGPwKbBoFnr0sgZnPQBj6JvwwAzCB5goj/6RKKKryHaSyvp691M12AIEz4cTHsDYSvMNr\nLiOpbbuN2bZ3BDi7w8Dnmvcd7LxbZYJLLsKqIFVrHNaEWq/snZD6GfgOsZRmDH0bEt+A6N+pAHvw\ny1dv/pvZ+PUXZcDu+0GvUNn8kJ9Cr9lQfgW2zWmZbQghhBDCoWl2H3xWtXGEzsw4q1nJyclERkba\nqEEdyL7HwW8k9L3f1i1xaPJ7FUIIIRzAF9p+5usj6ltMSjtE3QpTYG2EuglRgmghhBBCCLN2Vdoh\nWoFXGMw+autWCCGEEELYHdtmpDXNF037Ck07iqYlo2ljbdoeIYQQQgghGsjWGek/ABvR9TvRNDeg\nk43bI4QQQgghRIPYLpDWNB9gEvAAALpeCpTarD1CCCGEEMJuFBYWomkaXbp0sXVTamXL0o4+QDbw\nTzQtHk37O5rWub43CSGEEEKI9kvXdb788ksiIiJ49dVXbd2cOtkykHYBrgM+QtejgcvA89WW0rRH\n0LQ4NC2O7Ow2bqIQQgghhGgrKSkp3HTTTfz0pz/l/Pnz7Nmzh/Lycls3q1a2DKTTgXR0/ep4zXyF\nCqyt6fpf0fUR6PoI/P3bsn1CCCGEEKINlJSU8PrrrzNo0CA2bdqEr68vH3/8Mdu2bcPFxda39NXO\ndi3T9Uw07SyaFo6uHwOuB47YrD1CCCGEEKLNbd68mV/84hecOHECgAULFvD+++/TvXt3G7esfrYO\n8X8JfH61x45TwIM2bo8QQgghhGgD586d45lnnmHFihUAREZG8tFHHzF58mQbt6zhbNuPtK4fvFq2\nEYWu346uG23anqb6XyvdTVqaB8f/3Drrbi3F2bBpNGyIhgvb4ceb1edwxM8ihBBCiBZXVlbG7373\nOyIiIlixYgWenp68/fbbHDx40KGCaLB1IC3qVpoHJ+wk+DRVNGy5zC3gOwRuiofuE2HqenDzta/P\nIoQQQgib2LZtG9HR0SxevJhLly5x++23k5yczAsvvICbm5utm9doEki3luJs2H4HbByppuydav7F\nvbBprMrYfjcOCo6p+XlJsHEUrB8G66Og4AQcfB4upah58c9ar7/8MsTMgvVDYd1gOKMui3B+I6yN\ngA3XQdwTEDNbzU9YAslLLe9fNxguparH226HDcNh3SA4+VfLMv/rAgeeUdu4GAu5+2HzZLXsDzdC\nUYZ1m4wH4eCvIX21anN5EawOheKLdX8WIYQQQrRrmZmZ3HfffUyePJmkpCT69u3LunXrWLVqFb17\n97Z185rM1jXSLUrTWme9ut6EN+1/EsJ/Bd0nwOU0+PFGmJ0MPhFww3ZwcoHMzXDoRZj4NZz8GMKf\nhD73QEUp6BUw7LeQnwg3H6y+/vMbwbMnTFmnnpfmQ0Ux7H0Ypv0AXv1g57yGtXX0J+DeVQW+m0ZC\n8B3g7qeCdb/RcN3vwFSmguhJq8HDXwXuh34DYz6xrMcwDKJeh5w4GPlH623U9VmEEEII0S6VlZXx\nxz/+kVdffZXCwkLc3d15/vnnee655/D09LR185qtXQXSdiVzM+RX6YSkrADKLqmAd//9UHgC0EAv\nU693GwtJb0FROgTNAe/+da/fdwjEPwPxz0Gv2aqMwngQOvexvDf0XusMc22OLYP0VerxlbOqbe5+\noDmroBpU5jwvEX64QT3XK8AzsMFfhxBCCCE6lpiYGB5//HGSkpIAuPnmm1m2bBlhYWH1vresDP7x\nD+jfH66/vrVb2nTtKpBuUua41Zjgxt3g7GE9O+5x6DEVJq1SpRVbpqj5ofNV9vf8Ooi5GUb9Bbr0\nrX313gNg5gE4vx4SXoIe10PQrbUv7+QCusnyvKJY/c2KgazNMCMWXDrB5imW15w9wMn56ht08BkE\nN8Y2+BsQQgghhONIyExg5dGVpOWnEeITwpyIOUQFRDV6Penp6Tz77LMsX74cgL59+/KHP/yB2bNn\n1/veigr473/h1Vfh1CkYNgz27wcnOy1GttNmtQMBM+DY/1meG6+WNJTlg2cv9fjUvyyvXzqlAufw\nJyDoNshLAFcvKCusef1XzqvAt8+9EPksGA+AdwRcToXCFLXMmf9alu8cCrkH1OPcA3D5tKU9rga1\nrvyjcHF3zdvzCoeSbMi+GkibylRdd0PV9VmEEEIIYVMJmQksjV2KschIkHcQxiIjS2OXkpCZ0OB1\nlJSU8O677xIREcHy5cvx9PTkjTfeICkpqd4gWtfhm29g6FC47z4VRIeHwwsvNPeTta52lZG2mfIr\nsCrI8jziaRi+DOIeUzcOmsqh+yQY9TFE/hp23w9Jb0LPWZb3nPkfpH4Gmit4BsCgF1Xdsv94dWNg\nz5sg+n3L8nmH4eCzgBM4ucLIj1QGedRfYesscO4E/hMtwWvwHXD6U3VDod9o8Bqg5gfOhBMfw9pI\n8A6HbmNq/ozObjDxK3UDY1k+6OUQ/hT4DmrYd+TuV/tnEUIIIYRNrTy6EoOHAYOnAcD8d+XRlQ3K\nSq9bt46nnnqKkydPAjBnzhw++OCDem8k1HXYsgVefBH27VPzevdWGen77gM7HtQQAE23r3qIum0c\noTMzzmpWcnIykZGRNmqQncuKUT11TFlr65aIq+T3KoQQwh4tXL2QIO8gnDRLsYJJN5FekM4nt31S\n6/uOHz/OU089xYYNGwA1qMof/vAHbrjhhnq3uX07vPwybN2qnvfoAS+9BA8/DO7uzfs8zfaFtp/5\n+oj6FrPzOF8IIYQQHV1L1e6K2oX4hGAsMpoz0QD5xfmE+ITUuHxhYSFvvPEGH374IWVlZXh7e/Pa\na6/x2GOP4erqWue29u1TAfSmTeq5wQC//jX88pfQuXOLfaQ2ITXS7VmPKZKNFkII4dBaonZX1G9O\nxByMxUaMRUZMugljkRFjsZE5EXOsljOZTPzzn/9kwIABvP/++5SXl/PQQw9x4sQJnnrqqTqD6EOH\n4LbbYNQoFUS7ehYx+f4Yvt2dyPPPO14QDe0kI63rOlprdSItRAtxqDIqIYSwE82t3W0rjp41jwqI\nYvHYxVafYVH0IqvPsHPnTp588kn2798PwNixY1m2bBkjRtRdAZGUBK+9Bl9+qZ47u5cw7NZtTJkf\nR5l7Jn9JMuLlvdihvq9KDh9Ie3h4kJOTg5+fnwTTwm7puk5OTg4eHh71LyyEEMIsLT+NIO8gq3k+\nHj6k5afZqEXVVWbNDR4Gq6z54rGOFRxGBUTV2N6zZ8/y3HPP8d//qt7AvLp5EX1fNFNumYJbUO3D\neicnw+uvw4oV6qZCd3cYdkssQ36yjl49K0NQ+zwxaiiHD6SDgoJIT08nOzvb1k0Rok4eHh4EBQXV\nv6AQQgizxtbu2oKjZM0b6/LlyyxdupR3332XoqIi3D3cCb81nPF3jaebbzfyivNqPGE4flwF0F98\noQJoNzd45BF4/nl4Oe5vBNr5iVFjOHwg7erqSp8+fWzdDCGEEEK0gjkRc1gauxRQAVd+cT7GYiOL\nohfZuGUWjpA1bwyTycQ7f3qHd19/l8KLqhvdGbfOIPLuSHQfvdYThhMn4M034T//AZMJXF1h0SLV\ntV1wsFp3yAn7PzFqDLnZUAghhBB2q7J21+BpIL0gHYOnwe5KJkJ8Qsgvzrea56jB4Y4dO4i6LoqX\nnniJwouFBA4I5I737qDHAz1I1VPx8fCxWt7Hw4fDR0pYsAAiIuDTT9UohA8/DCdOwEcfWYJoaPhN\njY7C4TPSQgghhGjfaqvdtReOkDWvz+nTp3nuuef48uodgZ39OjP9oekMnTEUzUnDWGQkLT+N/OJ8\nczb5Ypofm/81huNbh6Ob1OApCxeqDHRtxQINuanRkUggLYQQQgjRDI4cHObl5fH222/zhz/8gdLS\nUjw9PQm/NZwbF9yIRyfLDfI+Hj74uvtiLDaSm9aDg1/NIumHIegmJ1xcdB68WsIRGlr/Nu39xKgx\nJJAWQgghRLthq27oGhIc2lMXeWVlZXz88ce89tpr5OTkAHDvvffy9ttv84+Uf2AsMuKBJZDOL86n\nZ/EMTq2Yz6Y1PqBrODlXMOeeHJa+6degALo9khppIYQQQrQL9jx4i720Tdd1Vq9ezeDBg3niiSfI\nyclh0qRJ7Nu3j88++4zg4OBqdczHEzvxzev38tHCX7BptS+uLhqPPgopJ5356j8dN4gGyUgLIYQQ\nop2w527o7KFtcXFxPPvss8TExADQv39/3nvvPW677TarsTgqS1X+b9UeVv1zBGf3RQOqH+iHH1bD\neVe9gbAjk0BaCCGEEO2CPXdDZ8u2nT59mhdffJHly5cD4Ofnx6uvvsqjjz5a45De27bBm29G8f33\nKsD39IRHH4Vnn4XAwFZvrkORQFoIIYQQ7YI9D95ii7bl5OTw1ltv8cc//pGysjLc3d158skneeGF\nF/D19bVaVtfhu+9UP9A7dqh5XbrAY4/Br34FPXq0WjMdmtRICyGE6BASMhNYErOEhasXsiRmiV3U\nzYqWZc99FLdl24qKinjvvfcICwvj97//PeXl5SxYsIDVO1bjeZMnT2992vx/wGSCVatg1CiYOVMF\n0QYDLFkCZ87Ab38rQXRdNF3Xbd2Ghts4QmdmnK1bIYQQwsFU3uhl8DBY9fNrbwN7iOazp54xrtXa\nbauoqODTTz/llVdeIT09HYDp06fz3nvv4RzobPV/IPdSIfHfR5C58X5OnVC9c3TvDs88Az//OXh5\ntVizHNMX2n7m6yPqW0xKO4QQQrR79nCjl2gb9txHcWu1Tdd11q5dywsvvEBSUhIAQ4cO5d133+XG\nG28EYEnMEgweBro4+RP3TTS7VownP0uVdwQHqxsIFy6ETp1avHntmgTSQggh2j17vglNiObYtWsX\nzz33HDuuFjaHhoby5ptvcvfdd+PkZKngPXEum4yY29n79VguG7sA4BecTeTta9iydBFubjZpvsOT\nQFoIIUS7Z883oQnRFElJSfzmN79h9erVgOqJ4+WXX+bRRx/F3d3dvFxGBnz4IXz1xw8ovaLmB/Y/\nz4R7ttNjeCx+XXwliG4GCaSFEEK0e3Mi5rA0dimAVY30ouhFNm6ZEI2TmprKq6++ymeffYau63Tq\n1Imnn36aZ599Fm9vb/NyJ07A++/Dv/8NpaUA7gQMSWLMvK0MHptJQYn6P/BwxEKbfZb2QHrtEEII\n0e5VDjBh8DSQXpCOwdMgNxoKh5KVlcUTTzzBgAED+PTTT3FxceHxxx8nJSWFN954wxxE79kDd94J\n4eHwt79BWRnccQfs3Qubvqtg6PgLnCuU/wMtRTLSQgghOgR7vglNiNrk5eXx6yW/5l9/+RdlxWWg\nwew7Z7PsvWX06dMHAJMJ1q9XGeht29T73NxgwQI1iMqAAZVrk/8DLU0CaSGEEEIIO3Pp0iWWLVvG\nb9/7LYX5hQAMGDeAEfeMwDnQmULPQkpL4YsvVAB95Ih6n4+P6r7uiSdkFMK2IIG0EEIIIUQrakz/\n0cXFxXz88ce88847XLhwAYCgqCBmPDKD4EHBAGRcKObpVy5wZK26mRDA2z+f8NkbuP6O09w9fBaB\nDpZ5tuf+v+siA7IIIYQQQrSShg4GVFZWxj//+U/eeOMN82Aqo0ePxvdmX0ZNHIWT5kRepi+7vxrD\ngXXRlBWrHjj6RRTR/YZPiZ5+jK5eXRxysCG7HDBJBmQRQgghhGicls6M1jcYUHl5OZ999hlvvPEG\np0+fBiAqKoo333yT2bNn89rW10g+6EXS6hs5sm0gukn1E9F3RAofvRXGTtd3ySs2OvRgQ448YJL0\n2iGEEEIIgSUzaiwyEuQdhLHIyNLYpSRkJjR5nWn5afh4+FjN8/HwITU3lc8//5yBAweycOFCTp8+\nTUREBMuXLyc+Pp6bb76FlSs1Vv/6Wf73q2dIihmMpulETNvLrN/9hlXfXmbGDDhbUPP6HWmwodq+\nI0f4DJKRFkIIIYSgdTKj1w4GpJt09n2/j7j/xvHvM/8GICwsjFdffZX58+dz+bIzy5bBsmWgEtSd\n8fIpZ8hNuwmavorIMC/mRMwzt6c9DDbkyJ9BAmkhhBBCCFpnKPnKwYB0k875vef58d8/knsmF4De\nvXvzyiuvsGDBAs6edeHXv4a//x0KCtR7w8LgqafggQdc6NJlAjCh1vVXttURBxty5M8gpR1CCCGE\nEKjMaH5xvtW85mZGB3cfzNCcoaz45Qq+fv1rcs/kEtAzgI8++ohjx47Tv/9C5s1zoV8/+OADFURP\nmgSrVsGxY/D449ClS+3rv3awodKKUjq5duLDPR+yJGZJs8pS2oojD5hk+4y0pjkDccA5dH22rZsj\nhBBCiI6pJTOjJpOJlStX8tprr5GYmAhAUFAQv/nNb5g//0G++cadsWMhPl4t7+oK8+fDk0/CiHr7\nirBWOdhQ1d4vunfubq7xdoSg1FEHTLKHjPSTQLKtGyGEEEKIjq0lMqMVFRWsWLGCqKgo5s6dS2Ji\nIkFBQfz5z39m+/aTZGQ8yoAB7tx/vwqiu3WDl1+GM2fgs88aH0RXVbXG20lzwuBpwOBhYOXRlU1f\nqaiTbTPSmhYEzALeAp62aVuEEEII0eE1NTNaXl7OihUrePPNNzl69CigMtDPP/8CQ4Y8xMcfu/HE\nE1BefnU7Uar++e67wcOjZdreGjXeom62Lu34EPg14GXjdrQ7jjpCkBBCCOFIysrK+OKLL3jrrbc4\nceIEoG4ifPbZl/H0XMBHH7kSd3UsOScnuOMO+OUvVR20prVsWxy59wtHZbtAWtNmAxfQ9f1o2pQ6\nlnsEeASAT+WH0BBVa6Sq9oPpCDVSHYGc5AghRNPYw/6zsg2nsk+RG5tL/FfxnD97HlDd2D366Ntk\nZ9/BkiXOXLyo3tO1KzzyCPz85xDSiqGMI/d+4ahsN0S4pr0D3AeUAx6AN7ASXb+31vfIEOENsiRm\nSbUz0srnS6YssV3DhH0OgyqEEA7AHvafCZkJvPPjO5z78RzxK+O5lHMJgN59Q5l35184dmw6337r\nhMmklh82TPW6MX8+eHq2SRPt4mSjIey+nXY/RLiuvwC8AHA1I724ziBaNJjUSNkvRx4GVQhRO7sP\nCtoBW+8/8/Ly+NVLv2LXl7soLigGwD+0H936P82FY3fy3nv+gOp946674LHHYOzYli/fqI8j9H7R\nnq6c20OvHaKFtUY/mKJlOPIwqEKImrXGsNKiOlvtP7OysnjhhRfo3bs3P/zjB4oLivHvM4OwkVvI\ny0wi+fufk5PmT69e8MYbkJYGn38O48a1fRDtKNpT7yL2EUjreoz0Id1y5kTMwVhsxFhkxKSbMBYZ\nMRYbmRMxx9ZN6/DkJEeI9qc9BQX2rK33n6mpqTz22GOEhoby29/+loKCUrqFPI0h+CjZpzeRsm8a\nZcVuBA87xtwlKzh9Gl56CQJM2HAdAAAgAElEQVQCWqU57Up7SirZRyAtWpQjjxDU3slJjhDtT3sK\nCuxZW+0/k5KSuO++++jXrx9//vOfKS4OISzsG7y9C7mY9juMZ8Nx63yF0Xfs4r6/vsWUV97ipZ9F\n4uraos1o19pTUsnW3d+JVuIINVIdUeVJTtVaykXRi+TfSggHJl2OtY3W3H/qus6OHTt49913Wbdu\nHeCKps2lR4+XycoaSEqKWm74cJg9/yylkZ+SWZpytR5eElWN1Z56F7Fdrx1NIb12CCGEsDP20JuE\naBqTycSaNWt47733iI2NBcJwdn4UN7dHKCryBqBTJ9Xrxs9+1rxRB4U1u79Bt4G9dkggLYQQQjST\n3QcFwkpJSQn/+c9/WLp0KUePngJ+govLLygvn2ReZsgQePRRuOce8PGpfV2inbL77u+EEEKIdkLK\n6RxDbm4uH3/8McuWLSMrywA8hJPTg5hMXSkvV309z5sHDz9sm67rhOORQFoIIYQQ7drp06f58MMP\n+fvfl3Plys3A18B4AEwmNXDKww9L9lk0ngTSQgghhGiX9uzZwwcf/J4vv0xF1xcCJwEvALp00bn7\nbo1HHlE3EUr2WTSFBNJCCCGEaDcqKir45ptvePfdT9i3bwDwG2CI+fVx4+Chh2DuXI0uXWzWTNFO\nSCAthBBCCIdXUFDA3/72T95//zBZWbOAbwDVuXPXrhU8+KAzixZBZKRNmynaGQmkhRBCCOGwTp06\nxZIlX7JihQelpfOAJwFwcjIxY0Y5jzziwqxZzri52bad0rNL+ySBtBBCCCEciq7rrFmzk1deOUJC\nQjTwnPm1Xr0Kefzxztx/vxOBgfYxgHPVvsaDvIMwFhlZGrtU+hpvB+oNpDVN+xB4Rdf1gjZojxBC\nCCFEjQoLi3nppR38+986+fmTgQkAuLpe5pZbrrB4sT9jxnjZ3Y2DK4+uxOBhMI9+Wfl35dGVbR5I\nS2a8ZTXkVO3nwElN036mafb20xRCCCFEe6brsHZtJiNG7MLHp5Bly6aTn38D4ExwaBIffZRHfn5n\nvv7a3277fk7LT8PHw7pfPR8PH9Ly09q0HZWZcWOR0SoznpCZ0KbtaE8aUtoRBfwe+Aj4uaZpT+m6\nHtOqrRJCCAciGR7RGjr67yotTefNN1NZvtyFwsJgIAAAZ9ejDBi3h1H3H8Pkm864sYvx9PS1bWPr\nEeITgrHIaM5EA+QX5xPiE9Km7bCnzHh7UW9GWtf1Y7qu3wzcAngCWzRN+0rTtN6t3johhLBzkuER\nraGj/q7y8uBPfyohPPw8vXvr/O1vfa4G0Vl0DfqM65/8NS9u/C8/XXKa0D5uGDwMrDy60tbNrtec\niDkYi40Yi4yYdBPGIiPGYiNzIua0aTvsJTPenjS4Cl/X9XXAIFRF/3QgWdO0tzRN69xajRNCCHtX\nNcPjpDlh8DQ4zMFd2K+O9LsqKYFVq2DGjEK6dSvn8cfdOX68J1CKu/s33HXXf0hNreC2P/7IuNs8\ncHKy1G44ShAYFRDF4rGLMXgaSC9Ix+BpsMmNhiE+IeQX51vNs0VmvD1pVK8duq6XA0s1Tfs38A4q\nqH5A07TndV3/rDUaKBquo18GFMIW0vLTCPIOsprnKAd3Yb/s4XfVmseUigrYuhU+/9zEihXlXL7s\nhhpx0ARsJixsD889158FC27D3d0dgJDT9lEe0VRRAVE2PybPiZjD0tilgPo95RfnYyw2sih6kU3b\n5cia2i+MAYgBdgKBwL80TdutadrIlmqYaJyOehlQCFuTDI9oDbb+XbXGMUXXYe9e+NWvoFevCq6/\nHj75xOlqEB2Pi8vz3H33c8THd+Pkyd/w8MM/NQfRYD/lEbaQkJnAkpglLFy9kCUxS5r872AvmfH2\npCHd3wUAo6pMI4DKAhsdSAT2AlOAWE3Tfgc8r+u63hoNFjWTGwiEsA3J8IjWYOvfVUseUxITYfly\nWL5cJyWlsizDGUgBviAkZBe/+tWNPPDA8/j61n7TYGUQWDVLvih6Ubs/xrV0H9T2kBlvTxpS2nEe\nFTBrQC6wC9gNxAJ7dV0vBNA0zQV4Fnj96vLPt0aDRc3s4TKgEO1BYy9nd9SDu2hdtv5dNfeYcvw4\nrFihAugjRyrnakAGsBxn5y+5/fZe/OIXP2fq1JdoaO+6HTEIlESZfWtIIP1XrgbPuq4fr22hq/XT\n72ia5g08gATSbcpeutYRwpE1NfPTEQ/uovXZ8nfVlGPKqVPw5ZcqgI6Pr/pKDvA1sIKgoBR+9rOH\nWLToawIDA1ur+e2KJMrsW72BtK7rjzZynYeAHk1rjmgqW18GFKI9kMyPEEpDjymVwfOXX8L+/Zb5\nmlaIrqvgWdN+YPbsG3n44ae4+eabcXZ2bsNPYt8acgVMEmX2rTUGod8EzG+F9Yo6yA0EQjSf9LEq\nhFLXMSUlBd57D0aMgLAweP55FUQ7OxehaV8At6Pr/oSEvMrrr48jLS2FNWvWcMstt0gQXUVDb+js\nyDdZOoJGdX/XELquG4HlLb1eUb+Wvgwo3emJjkYyP6IjqW8fX/WYkpwMX/8dFnwFhw5Z1uHmVoKz\n8zqKij6lomITzs5lzJ49m5/9bBUzZsxwyMC5rY59Db0CZut6eVE3zaE619g4QmdmnK1b0SFUrRWt\nellPstyiPZPfvego6vut67oKmFeuhK+/rnrDIHh4lOLjs5WsrD8DG4Fi+vfvz0MPPcSCBQsICAiw\n1cdqtrbcByxcvZAg7yCcNEtxgEk3kV6Qzie3fdKi2xJN8IW2n/n6iPoWa/GMtGgfpFZUdESS+REd\nRU37eFOFxodfxuF7OopVqyA11bK8l1cZAQF7SU//kKKiNRQXl+Lp6cncuT/loYceYsKECQ3ueaOt\nNSbD3JbHPrkC1j5IIC1qJHcJi45KeuBwPFKG1niV+/jyUhdOH+jD0Z3hHNsZwWVjF/My/v4V9OmT\nwPnzfyQ9/VMKC8sBGDNmDA8++CDz5s3Dx8entk3Yhcb2xNOWxz7pJKB9kEBa1EjOlGsnB20h7EdL\nD1bRERiNkLd3Ftu39SVt/0BKiyyjB/oG5DA2Oovs7L8SF/dHsrMrAAgICOC+++7jwQcfJDIy0lZN\nb7TGZpjb8tgnV8DaBwmkO6CGBIJyplwzOWgLYV+kDK1hTp+Gb7+FNWtg61YoL7/D/FqPsAy69tlK\nYf5/yEn6kQ0brgDg5ubGrbf+hPvvv5+ZM2fi4uJ4IUNjM8xtfeyTK2COz/H+V4hmaWggKGfKNZOD\nthD2RcrQamYywd69KnD+9ls1THclZ2eYOhX6Dj7EoTNvkhy7gazNl82vjxkzhgULFjBv3jy6du1q\ng9a3nMZmmOXYJxpLAukOpjGBoJwpVycHbSHsi5ShWRQUwHffwbp1sH49XLhgec3LC2bOhIkT88jP\n/4KVK//OP/7PMvxgSEgI9957LwsWLCA8PNwGrW8dTckwy7FPNIYE0h2MBILNIwdtIexLRy9DO35c\nBc5r18L27VBWZnktNBRuvRWmTbtEdvZK/ve///DUU1swmUwA+Pj4MHfuXO677z4mTJiAk1NrjNFm\nW5JhFq1NAukORgLB5unoB20h7E1HC5SKilSN8/r1sGEDnDxpec3JCSZMgNmzYfr0ElJT1/Hf/37B\nvHlrKSkpAcDV1ZVbbrmFe++9l9mzZ+Ph4WGjT9J2JMMsWpMMyNLByIATzSe9dgghatJa+4aUFBU0\nr18PP/4IxcWW1wwGuOkmmDULrr++jPj4LSxfvpxVq1ZRUFAAgKZpTJ48mfnz53PHHXc4fN2zEG2i\ngQOySCDdAUkgKIQQLaslkxSXLqmAedMm2LhRBdJVXXcd3HyzCqCHD69g586trFixgq+//pqcnBzz\ncsOHD+fuu+9m3rx5BAUFIYRoBBnZUNRGLnMJIRpLTsDr1pwefUwmOHgQvv9eBc87dljXOhsMMH26\nCp5nzlQDpezYsYMvvviSOXO+Iisry7zswIEDueuuu5g3bx4DBgxo+Q8qhLAigbQQQog6Sf/p9Wvs\njdxnz6rA+fvvYfNmuHjR8pqTk07QwHS6Re1n+MSLPHbbKKICBrFjxw7eeON/rFy5kszMTPPy/fr1\nY968edx1110MHjy4VT6fEKJmEkg7OMkSCSFam733n24P+8H6buTOy4OYGBU0b9kCR49e8/4QmDED\nBow8Q5zHbwnwd8PL1Ysj+45w16L3yTmQQ062pWyjb9++zJ07l7lz53LdddehaVpbfEwhxDUkkHZg\n9pQlsocDmRCiddhzt5n2sh+8tkefnPwrHD8USO+chYx+DuLiVAlHJS8vNSjKjBlwww3Qvz9oGrz0\n3d8oij3Htv+e5diuYxQVFJnfI8GzEPbHdoG0pgUDnwI9AB34K7r+B5u1xwHZS5bIXg5kQoi6NfWE\nt6ndZrbFCba97AcjukYxTXuFf/3vLMf2BZJ9vB8VZZZDrKur6pru+utVvfPIkWoeQGFhIV99tZFV\nq1bx1eqvKLtiKZD2C/YjYlIEXaO7svrp1RI8C2FnbJmRLgeeQdcPoGlewH407Xt0/YgN21TN/ffr\n9OihMWWK2gl6e9u6RRb2kiWylwOZEKJ2zTnhbUr/6W11gm2r/WBpKezbp8o1YmJg504oKuoH9ANU\ndjk6GqZNU4HzxInQubPl/VlZWaxZs4ZvvvmGzZs3U1paan6tW99uDJ48mMiJkfiH+pNXnIfB0yBB\ntBB2yHaBtK5nABlXHxeiaclAL8BuAum8PPj0Ux3QeP99dQNIdLTG5MmYA2uDob61tB57GVzFXgJ6\nIUTtmnPC25RBT9rqBLut9oMlJbB3rwqat26FXbvU4ChVDRqkAuepU2HyZKjaXbOu6xw9eow1a9aw\nZs0adu3aRWX3s5qmMX78eH7yk58QMT6CFRkrzN3o5RXnyaBPTSQlh6It2EeNtKaFAtHAnhpeewR4\nBIBP2zZAzM09BywCJgOTMZlGsn+/K/v3wwcfgKbpDBmiMXEi5qlnz7Zrn72MsmcvAb2oTg4kolJz\nT3gb221mW51gt9Z+sKBABcvbt6tp714VTFc1cKAKmCuTKz16WL9eXl7Orl27zMHziRMnzK+5ubkx\nffp0br/9dm699VZ6VHlzcGZwhxmpsTnq2r9JyaFoK7YfkEXTugBbgbfQ9ZV1LmuDAVkuXLjA+vXr\nWbNmDRs3bqeoaBiVgTWMAtytlg8LUwH1+PEqYx0eri7xtRZ7CJRktET7JP8uoqolMUuqnfBWPl8y\nZYlDb68l9oPnz6vyjB071HTwoPXNgQCDB6uAefJkmDQJunevvh6j0cjGjRtZt24dGzZsIDc31/xa\n165dmTVrFrfeeiszZszA255qBR1Mffu3tv69i3bIIUY21DRXYC2wCV3/oN7lbTyyYVFRET/88ANr\n1qzh22+/JSPDiAqmJ+LkNBlNG09FRSer9/j5wbhxKrAePx5GjAAPD5s0v1XZQ0AvrMmBRFTV1idW\n9nwiV1EBR46owLkyeE5NtV7GxQWGD1cBc2VypKaRtXVdJzk5mbVr17J27Vp27dpFRUWF+fV+/fpx\n2223ceuttzJu3DhcXOzjQrCjq2//tnD1QoK8g3DSnMyvm3QT6QXpfHLbJ7ZosnA0dh9Iq7sm/g3k\noutPNeg9djREuMlkIj4+nrVr17Ju3Tr27dsHOAPDgAl4ed2EyTSWy5etMw6urmp417Fj1TRuHMjI\nraI1yIFEXKulT3jrW5+9nGDn5cHu3RAbq8o19uyBwkLrZby81D65MukxZoz1zYFVXbp0iS1btrBh\nwwY2bNhAWpqlXMXFxYWJEycya9YsZs2aRXh4OIezDtvF99Ce1Ld/k0SCaDYHCKQnANuBw0DlBbQX\n0fX1tb7HjgLpa2VmZrJhwwbWrl3Ld999x6VLl66+0gc3t2kEBt5JWdlIMjK6ouvWtR5BQWqnPXq0\nmoYPh06dqm9D2Ia9BAONJQcS0ZrsNeNcXg6JiSpY3rNHBdDJydWX691bBc4TJqjAecgQcHaueZ26\nrnPkyBE2btzIhg0b2L59u1UvG/7+/tx0003Mnj2bGTNm4OPjY37NXr8nR1ff/k2+d9Fsdh9IN4Ud\nB9JVlZaWsmvXLtavX8+GDRtITEys8qo3vXrdQa9ed1JePoKUFH/y860Da2dntVMfMwZGjVL9jUZG\n1r6TF63HkXfGjtx2Yf/s4URN1yEtTXVDt3evCpzj4uDKFevl3NxUWV3llcCxY+u/MTwnJ4fNmzez\nadMmvvvuO86dO2d+TdM0Ro8ezU033cRNN93E8OHDcXJyqnE99vA9tUcN2b85ahJE2AkJpO3H2bNn\n2bhxIxs3bmTLli3k5+ebX3NxceO66+YTHHwnuj6SlBR/Dh/Wqt3k0rmzKgmpDKxHjIC+fVv3Rkbh\n+AdBOZCI5qjr92OL0qGsLNi/3xI479sH2dnVl+vbV13dq7zSN2wYuLtXX66qkpISdu/ezebNm/nu\nu+/Yt28fVY+PPXr0YMaMGQwaO4icnjlc5GKD/k9JiVXrkf2baFUSSNun8vJy9uzZw6ZNm9i0aVO1\nnbXBYGDSpJvo128eLi7jSUnpyr59GmfOVF+Xr68qA6k6SXDdsuQgKDoqW/eKcOGCyi7v36+muDio\nkhQ269pVJRdGjrSUx/n7179+k8lEYmIimzdv5vvvv2fbtm1cqZLKdnNzY8KECdx4443ceOONREVF\ncTjrcKOv8jj6ybgQHVYDA2m5fbiNubi4MH78eMaPH8/rr79Obm4umzdvNu/MU1NTWb36C+ALAHr3\n7s20adMYPvwmvLymcupUN/btUweVCxdgyxY1VfL1VdmX6GiVwY6OVl3wyY3iTSN9ZDu2jpyxau5n\nr29Alar9NxeXF3Mw8yA5RTlM7zudhMyEBm+rsjzjwAGIj1fTgQOqO7prdemi9mkjR1quzvXp07Dk\nga7rnDx5kh9++IEffviBH3/8kexr0tmDBw9m+vTpTJ8+nSlTptD5mrsNmzLIjL309y+EaB2SkbYz\nKSkp5sB6y5YtGI1Gq9fDw8OZNm0aU6ZMZcCAqZw5080qY3PhQvV1enqqmuuhQ1WQPXQoREWpu9RF\n3SqzcuUV5Zy7dI7sy9m4Orny8qSXuXPQnfW+t6MGcfagI9eIt8Rnb8jVmITMBD6K+4jvT32Pn6cf\nwwKG4eHiUeu2SktVt3OHDqnp4EH1t0pXy2aVQfPw4aqUbfhwGDAAailFrlFqaioxMTH8+OOP/PDD\nD6Snp1u93rNnT2644QamT5/O9ddfT2BgYLO/k5q01L5A9ilCtCEp7XB8FRUVJCQkmDMo27Ztq9Ib\niBIZGcmUKVOYMmUKkyZNxmTqYZXZiY+v3j9qpb59VVA9ZIgKrIcMUQPKyE2N1r5K+oo3tr9BWUUZ\n/p38CfIOwtnJuc6gpCMHcfaiI19Sb4nP3tB11LRc7hUjLpdDmOH1DIcPQ0KCmpKToays+ra6dbO+\nihYdDf36NS5o1nXdHDjHxMSwdetWzlxTE+fn58fUqVOZNm0a06ZNY8CAAVd7Ym0YW/6mZJ8iRBuT\n0g7H5+zsTHR0NNHR0TzzzDOUlZURFxfHli1b2Lp1Kzt37iQ5OZnk5GQ++ugjQGWsJ06cyMSJE7n3\n3omEhoZiNGrmDFDllJQEp06padUqyzY9PdWwt0OGqFG8Bg1SU1BQx629TsxOZErvKdUOnnVdzm3K\nJWDRstpqiGp71BKfvaElCSfSc3DNGUbKmR5cON2dC6e7k3WqO8WFnfj9NevUNOjf33JlrPIqWa9e\njd+/mEwmkpOT2b59u3k6e/as1TK+vr5MmjSJKVOmMG3aNIYMGVJr7xoNYcsyDdmnCGGfJJCuhz1d\nSnN1dWXs2LGMHTuWl156idLSUuLi4szZlx07dnDs2DGOHTvG3//+dwB69eplDqynTh3PL385GGdn\nZ8rK4NgxFVQfPow5a5Sebrm5pypvb0tQPXCg6o4vMhKCgxuXNXJETQlKOnIQZy86cn17S3z2qIAo\nFo9dbN7/+ekRTOUJYleH8UmyOhlPSoKMjP+r8f0eXkWMvs6TIUOwmrp0adpnKikpIT4+np07d7Jt\n2zZ27txJTk6O1TJdu3Y1B86TJ09myJAhOLfgJbZrv5MQnxAWRS9qk2OC7FOEsE8SSNeh6qW0IO8g\njEVGlsYutZtLaW5ubowbN45x48bx4osvUlZWxoEDB6wyNOfOnWP58uUsX74cAG9vb8aMGcO4ceMY\nP348t946mnvusRRLG41qMIPDh9VBMjFR/c3JUaOCxcZat6FTJ4iIUEF1RISawsNV1qm9DIXelKCk\ntYM4ezrBs7XavoumZA/by/fa1MxpebkqBTt2rHKKIjk5iiNH1D6gJh6eJjr3Ok330Iv0CsujU69T\nuAYe5eVZixga2PTvLicnh127drFz50527tzJvn37KCkpsVqmZ8+eTJo0yZwsGDRoULMyzg0RFRBl\nk99ERz4xFMKeSY10HRy9xtJkMnHkyBG2b9/Ojh072LlzZ7WaQScnJ4YMGcKYMWMYM2YMY8eOpX//\n/lYHI11XNzFWZqCSky1TVlbN29Y0NXJYeLi6Qah/fzUNGAAhIY7Vi0hTahNbs55RaiUt6vsuGhMY\nN6UW3p7V9tl1HTIz4cQJy3T8uAqcT55UNwTWpEsX66tRAweq8q/evSHxQvNOQMrLy0lMTCQ2Npbd\nu3eze/dujh8/Xm25yMhIxo0bZw6c+/Tp06gaZ0cm/++FaGNys2Hztcc+hM+dO8euXbvMmZ74+HjK\ny8utljEYDIwePZrRo0czatQoRo4ciX8tHbPm5lqC6qNHLZmsU6egoqLmNri6qhsd+/VTU1iYZQoN\nrX/gBFtoSqaytbKbjn6C15Ja6rtIyEzgvlX3oaHh4+FDcXkxxeXFDO4+mP5+/R3uezWZVJlWSor1\ndPKkCpyvuWfZSlCQOgGunCoD56bUMddE13XS09PZu3cv+/btY8+ePezbt4/Lly9bLefh4cGoUaPM\n3YWOGTMGPz+/5jfAgbWXKyZCOAS52bD52uOltF69ejF37lzmzp0LwJUrVzhw4AC7d+8mNjaW2NhY\nMjIyzCMxVurTpw+jRo1i1KhRjBgxgujoaLy8vOjaFcaPV1NVpaUqmD52TGW7qma/zp2zBNzX0jQI\n6FmKW7fzuHU7S6+QMm64rh+To0Po0wcCAmxTk92Uy7mtdQlYaiUtWuq7WHl0JWUmlYnWNA1PV08A\n0gvScXexvzM7XVdlWKdPV59OnYIzZ+CaKggrBoPlSlHl38qSrKbWMNcmJyeH/fv3s2/fPvbu3cve\nvXvJzMystlxYWBhjx441Xx2LiorC1dW1ZRvTSPYWuNqqrEQIUTsJpOvgSB3pN3WH36lTJyZMmMCE\nCRMAS7YoNjbWfOCLi4vj9OnTnD59mhUrVgCgaRrh4eGMGDGC4cOHM2LECIYNG0aXq0dhNzdLzfS1\nLl+2ZMeq/k1JgbQ0nYxzbnAuFAjlBBDzT8t73dxUaUjv3tZTcLBlai+12bVpjyd4TdVS30Vafhr+\nnf0pLis2B9EeLh5kX8lmap+p1ZZv7QCrvBwyMtRAJWfPqr9nzqj65TNn1FRXVhnUSWfVqz2VU//+\n0FqJ3dzcXA4cOEBcXBz79+8nLi6O1Br63zQYDOYT85EjRzJmzJhar3rZir3fIyOEsA9S2lEPe8tI\n1KS1a+fKy8tJTk5m79697Nmzh/3793P48GHKrukQVtM0BgwYYO6yr3Lq1q1bg7f18vdvkHZGw2Ts\njTHDl7xMAxfSO3H5Qg9Kc3px8WL96+jWzRJUBwWpS9KVfysnRx6MRmolLVrqu1gSs4TjF4+TdDEJ\nD2cPPFw8yC/OR9d0Prv9M6t1NXebJSVq1L5z51T5xblzlunsWTWdP6/KM+ri5aVOIvv2VaP79elj\neRwa2vKZ5ap0XefcuXPEx8dbTdfegwHqZH3YsGGMGDHCHDz369fP7mubpYRKiA5OaqRtwxaBty12\n+CUlJRw+fNgq85SUlFQtuAZVTjJ06FDzFBUVxYABA2rslqq+uvTLly3ZuapTZQCSnq6yefXp0gUC\nA2ueevSwTN262eeNkY5wgtdWWuK7aMwIlrUNQOJZ3pMH+j9HZqa6CTcrS2WVMzJUYFz5uKZR/K6l\naTqdu17Co2s2/oHFDI/wZ8RAf/MVmNBQ8PVtm77dS0pKSE5O5tChQxw6dIiEhAQOHTrExRrOaj09\nPRk6dCgjRowwX62KiIjAxR7/E9WjPd4jI4RoBAmk256tMoX2ssMvKSnhyJEjxMfHc+DAAeLj4zl0\n6FC1m4hA3Ug0aNAghgwZwuDBgxk8eDBDhgzhL8f+Ql5xXpNPCioqVABTGVhXzfZVnYqKGvaZNE1d\nBu/RA/z9LVP37pbHfn7Wk6dnQ78xYU+qBuS9Oocytfud9HAeSE6O6vrt4kXIzobPd3+HU1EP8nJc\nyMtxo6TAm/LCrugVDavndXFRJ2xVr5BUTsHBcMkjmc9T36Obl3eb7kdMJhNnzpzh8OHDJCYmkpiY\nyOHDhzl69Gi1G5JBlWdUXnW67rrriI6OrvUE2RFJRlqIDk5uNmx7thp5yl5qZt3d3c0H1oULFwJq\nmPNTp06Zs1mVU1paGvv372f/NSO/ePt649HTg+69u9MrrBeegZ4493Bm4c0LG9QGZ2fo2VNNo0fX\nvIyuQ36+JUNYdaqaTczKUsFT5dRQnp4qoDYYap58fKwnX1/118tLTe7uHXcUyZZSVgaFhVBQoKb8\n/OpTXp7KDhuNlVMUublR5Oaq975Z69pn1DjXybOA4J7uhPR0N1/RCAxUv8WqVzy6dav7htklMSvo\n5uXdavsRk8lEWloaR44cMU9JSUkkJSXVeNJbWbJV9YrS0KFDCQ4OtvvyjOZwpHtkhBC2I4F0C7JV\nbwr2vMN3dnamf//+9O/fnzvvtFwiNxqNJCUlVct+GY1GCvIKuHDkAokkmpff4ruFyMhIIiIiiIiI\nIDw8nIiICPr27dvoO3pUE98AABYUSURBVPs1TQWvvr6qW6+6lJerIDorS2Uja5oqM5aVU1GRKjFJ\nT29Us8xcXCxBtZeXKkPp3Ln61KmTCtqvnTw8VDBe0+TqWvPk7GyZWqaLM1XjW1GhpvJyFdxeO5WW\nqprhkhIoLrY8LimBK1fUd3ntdPmyZbp0yfK4sNAy1dVjRUM4OVW/0uDnp65ElHmc58vTf8LFKw/f\nrmWYOmVR0ek8Ub0GtEhXeS21HykqKuLEiRMcO3aMo0ePmv8mJydz5cqVGt8TEBBgdZVo8ODBDBo0\niM6dOzf58zgqW45iKIRwHBJIt6CGZIZbo7bVEXf4BoPBqrcQUDcwZWRkkJiYSHJysjlTduTIEYxG\no7l7vqpcXFwICwszB+sDBgwwPw4KCmr2KGcuLqr3g4CAhi2v6yqos850Wj+vKTuan68yp4WFKsCs\nXNYWNM06qK5p0vWap8rgub4b5Vqbk5PlROTaKwBVrwR07Vr9ikHXrur12n86PUn5bxLGYiMFJQX4\nevgQ2W0E/p39W+SkuTFXmMrLy0lNTeXEiRMcP36cEydOmB+fOXOG2kr3AgICGDhwoNU0aNCgRt0Y\n3BFId3NCiPpIjXQLasgoa9LbQuPpuk5WVhZHjhzh2LFjVhm2uoIFDw8P+vTpQ1hYWLUpNDQUd3sc\n+QWVTa2aXa2aga2ahb1yRWVxr83YXpvZrTrVlBUuK7NkjlsyAK4akLu4qMy3m5t1JtzNrfbseU3Z\ndk/P6hn6yudduliCZ0/P1i2Pac362Wv3ExfzLnL2zFmu97kek9FESkqKeUpNTa2xfhnU1aCwsDCr\nKzjh4eFERkbStWvXZrVRCCHaPbnZ0DbqyjjLzSvWWiI7X3n5umomrvJxVm3jl1/Vs2dPQkND6dOn\nj/lv7969CQkJITg4GM8OeNfgtSUZtWWea8tUVwbOTk7tu867JU+KCwsLSUtLIy0tjdTUVFJTUzl4\n9CCJxxPJzcilOL+4zvcHBwfXeEWmb9++uLm5NedjCiFExyWBtP2xl9417EFbZOcLCgo4deoUKSkp\n5r+VU1paGhW1jWF+lb+/PyEhIebAOigoiF69epn/9urVC4/2PvqLqFVDTgQvXbrEuXPnSE9Pt/pb\nGTinpaWRl5dX53bc3d0JDQ0lLCyMvn37Wl1Z6dOnT4c84RNCiFYnvXbYH3vpXcMetEUPJ97e3gwb\nNoxhw4aZ51UGP6m5qfiW+hLlFoVTgROpqamcPn3aHNycPXuW7OxssrOzq/UsUpWfnx+BgYEEBgbS\ns2dP8+PAwEB69Ohhnnx8fOy6hwPpl7rhTCYTubm5OOc4M1mfTOaVTDJSMvhs3WdkZGRw/vx5MjIy\nyMjIID8/v971eXp6EhwcTHBwcLUrJKGhoQQEBDS71l8IIUTrkEC6Ddlz7xptzRY9nFTNgocYQsgv\nziemOIbFMxfzQMADVsuaTCaysrKsAuvKjGJlVvHcuXPk5OSQk5NDYmJizRu9ys3Nje7du9O9e3f8\n/f3x9/enW7duVn/9/Pzo2rWreaor292SgW9HHgpZ13WuXLlCbm6uecrJySE7O5uLFy9a/c3OziYr\nK4vs7Ox6r2ZU8vDwsLqKUfm38kpHSEgIfn5+dn2SJYQQonYSSLchR+xdo7U0Jzvf1CCyMVlwJycn\nc2Z5dC0dUptMJrKzs83Zx2uzkVlZWVy4cIGsrCwKCwvNQXhDeXp6YjAYMBgM+Pr64uPjg6+vLxVu\nFSQVJOHt442Ptw/pLunEbIzhnuH3MCx0GF26dKFz58507vz/7d17jFxXfcDx7/E6+/Bj7d2Y2sYP\nbKOACZDayOURBDEpIqGqcLo1xSDUpBhRoNA/qioFEQkLqYKiSKitkShK05RWEBo3KEYNRIRgIZUE\nAhQcjBPHCWqwGxMc78Nr78Nr//rH3N3Mel8zk525M7PfjzSae8+9M3vub84d/ebcs+cuZcmSJbS3\nt8+aqOU1//mLEREMDQ1x7ty5icfZs2enPAYGBhgYGKCvr4++vj76+/snlvv6+jhz5gyjo6Nl//3W\npa0s717OpnWb2LJhy4xXJbq7uxs6SfZKhSTNzjHSykWlY6RfzNjqPMeonz9/fiKpPn369KTezvHl\ny3tFp7vdeiUWLVrEkiVLWLJkCR0dHbS3t096PtZ/jKUdS1m8eDEtV7TQsriFRVcsYujiEDe84gYW\nL15c2NbSMvG8aNEiUkoTz+PLETHxuHTp0qTlsbExLl68yNjY2MTyhQsXuHDhAqOjo1MeQ0NDDA8P\nTzyPL587d27GeZAr0dHRMelKQHd395QrBqtWraIv9XHPM/ewZvUarlx+Zd3OujNfyW8555oJt6Sm\n4xhp1bNKe+dfTO9pnmPUlyxZwqZNm9i0aVNJ+48POXj++ecn9aL29/ez//v76RjrYPT8KCNDI4Xn\n8yMMnB1gXes6BgcHJ/XUjo6OMjg4yODgYNn1Pnr/0bJfUyvt7e0TPe9Lly5l2bJldHZ2snz58kmP\n8Z78y59XrlxJd3d3yf+st+/QPtavX1/XPffzOUyn1HNtIQ8NkiQTaeWm3JsdHD51mPsev4+IYGXH\nSl616lWsXra65LHVjTRGPaU0kSBe7vj642VNozg2Nsb58+c5d+7cRM9ucU/v0WePcs9j99CROmhL\nbQwODTI4NMh1669j9ZLVU3qRx8bGpvQ2jz+P905P11s93rN9ee92W1sbra2tUx7jvebjj/H18d71\nlpaWan4EU+R159JyzOcwnVKPtxGHBknSfDGRVkMY7/VqbWklCIYuDPGDX/+AazdcS2tLa0m9yuX2\ngtfr5epyfxAsXryYzs5OOjs7p91+PdfzllNvmTjWbSu21c2x1pNGmHVnPpP9Uo+3EX5gSFK1mEir\nIYz3em1fu52HTzxMe0s7bS1t/PTZn/LKVa8suVe51F7wer5cXY1/WvVWyHNrhCsa85nsl3q8jfAD\nQ5KqxclJ1RCe6X+GFe0rWLNsDW9a/yY6ruhg9NIoIxdHqpLcFl+uXpQW0dXRRVd7F/c+fu+8/p1K\nXbPmGvbt3Medu+5k3859JsE1MP4DpqujixMDJ+jq6KqLH1bFerb20DvcS+9QL5fiEr1DvfQO99Kz\ntafs9yr1eOfzb0pSo7FHWg2huNdrzbI1rFm2ZmK9GolMtS9X1+uwEc2u3nvu5/tqRSnH67SekhYy\nE2k1hFpfVq/m5ep6HjaixpdHsl/vPzAkqVoc2qGGUOvL6tW8XF3vw0YkSVJp7JFWw6hlr1c1L1c7\ny4EkSc3BRFqaQbUSd2c5kCSpOTi0Q6oxZzmQJKk5mEhLNTbbeO8DRw6w866dXPWPV7Hzrp0cOHIg\n7+pKkqQZOLRDysF0w0YOHDnArQ/eSmdrJ2uXrqVvqI9bH7wVgN2v3p1HNSVJ0izyTaRTuhH4e6AF\nuIOIz+VanwXEeYzrz/5H99PZ2snKjpUAE8/7H91vIt3EPBclqXHlN7QjpRbgi8A7gauB95LS1bnV\nZwEZn8e4d6h30jzGh08dzrtqC9rJsyfpbOucVNbZ1snJsydzqtHCdPjUYfYd2scH7vsA+w7tq+p5\n4bkoSY0tzzHSrweOE/E0EaPA3cCuHOuzYDiPcX1at3wdAyMDk8oGRgZYt3xdTjVaeGqd2HouSlJj\ny3Noxzrg10XrJ4A3TNkrpQ8BHwLgK04PNh+cx7g+fez3PjYxJrqzrZOBkQEGRge47a235VyzhaM4\nsQUmnu99/N6q3or+1OApHj/9OP3D/XS2d9LV1jX3i0vk0BFJqp76/2fDiC8DXwbg2zsi38o0B+cx\nrk/j46D3P7qfk2dPsm75Om57621zjo82UZo/tf6RuXHFRo6dPsaR00dob2mns62T/qF++ob7OHzq\n8KyfYymfu7ejl6TqynNox0lgQ9H6+qxMVeY8xvVr96t3c+iWQzz58Sc5dMuhkpJox9jOn40rNtI/\n3D+prJo/Mnu29nDkt0dIkWhf3M7w2DBB8JqXvGbW4R2lfu4OHZGk6sozkX4UuIqUNpNSK7AHOJhj\nfRaM2eYxVmMxUZpftf6Rec2aa9i8cjMr2lcwMDJAxxUdXLvhWl7e/fJZe8FL/dyf6X+GFe0rJpU5\njEuS5k9+QzsixkjpY8ADFKa/u5OII7nVZ4Gp1u2vVVuOd59f4z8yi4dM7N2+t6rnyra126YMteod\n6p21F7zUz91hXJJUXfmOkY64H7g/1zpIDcxEaf7V+kdmz9Yebn/4dqCQDPcP99M73Mve7XtnfE2p\nn3sl7y1JKp23CJcamOPdG18lQ61K/dwdxiVJ1ZUiGmgijG/vCG78cd61kOqKs3YsTH7uklRFX00/\n4X2xY67d6n/6O0mzcrz7wuTnLkn5c2iHJEmSVAF7pKUm4GV+SZJqzx5pqcF5UxZJkvJhj7TU4Ipv\nzgFMPN/7+L0Lslfa3nlJUq3YIy01OO9e9wJ75yVJtWQiLTW4jSs20j/cP6lsod6UxVumS5JqyURa\nanDelOUF9s5LkmrJRFpqcN697gX2zkuSasl/NpSagDfnKOjZ2sPtD98OFHqi+4f76R3uZe/2vTnX\nTJLUjOyRltQ07J2XJNWSPdKSmoq985KkWrFHWpIkSaqAibQkSZJUAYd2SFIT8I6OklR79khLUoPz\njo6SlA8TaUlqcN7RUZLyYSItSQ3OOzpKUj5MpCWpwXlHR0nKh4m0JDW4nq099A730jvUy6W4RO9Q\nL73DvfRs7cm7apLU1EykJanBeUdHScqH099JUhPwjo6SVHv2SEuSJEkVMJGWJEmSKmAiLUmSJFXA\nRFqSJEmqgIm0JEmSVIHGmrXjzE9O89X0vzX/u32sYiWna/53G5XxKo/xKo/xKo/xKo/xKp8xK4/x\nKk9+8XpZKTuliKh2RRpfSj8mYkfe1WgYxqs8xqs8xqs8xqs8xqt8xqw8xqs8dR4vh3ZIkiRJFTCR\nliRJkipgIl2aL+ddgQZjvMpjvMpjvMpjvMpjvMpnzMpjvMpT1/FyjLQkSZJUAXukJUmSpAqYSI9L\n6d2kdISULpHSzP8dmtKNpPQEKR0npU8UlW8mpR9m5V8npdZaVDs3KXWT0ndI6cnsuWuafd5GSj8r\negyT0k3ZtrtI6VdF27bV+hBqqpR4Ffa7WBSTg0Xltq+p+2wjpYez8/YwKb2naNvCaF8zfR+9sL0t\nay/Hs/azqWjbJ7PyJ0jphtpVOkdzx+uvSOmXWXv6Lim9rGjb9OdmM5s7XreQ0m+L4vLBom03Z+fv\nk6R0cy2rnZu54/WFolgdI6W+om0LsX3dSUrPkdIvZtieSOkfsngeJqXXFW2rn/YVET4iCHhVwCsD\nDgXsmGGfloCnArYEtAb8PODqbNt/BOzJlr8U8JHcj6m68fp8wCey5U8E/N0c+3cHnAlYkq3fFbA7\n9+Oot3jB4Azltq+p+7wi4Kps+aUBzwaszNabv33N9n30wj4fDfhStrwn4OvZ8tXZ/m0Bm7P3acn9\nmPKP19uKvqM+MhGvwvr052azPkqL1y0B+6d5bXfA09lzV7bclfsx5R2vyft/PODOovWF1b4Kx/zW\ngNcF/GKG7X8Q8K2AFPDGgB9m5XXVvuyRHhdxlIgn5tjr9cBxIp4mYhS4G9hFSgm4HjiQ7fevwE3V\nq2xd2EXhOKG0490NfIuI81WtVf0qN14vsH1Nf7wRx4h4Mlv+P+A54CU1ql89mP77aLLiOB4Afj9r\nT7uAu4kYIeJXwPHs/ZrZ3PGK+F7Rd9QjwPraVrGulNK+ZnID8B0izhDRC3wHuLFK9awX5cbrvcDX\nalKzehXxfeDMLHvsAr6SZayPACtJaS111r5MpMuzDvh10fqJrOxKoI+IscvKm9lqIp7Nlk8Bq+fY\nfw9TvzT+Nrtc8wVSapv3GtaXUuPVTko/JqVHJobB2L7mbl8pvR5oBZ4qKm329jXT99H0+xTaTz+F\n9lTKa5tNuce8F/hW0fp052YzKzVef5ydZwdIaUOZr20mpR9zYcjQZuChotKF1r5KMVNM66p9NdYt\nwl+slB4E1kyz5VNE3Ffr6tS92eJVLCJIaebpXwq/IF8LPFBU+kkKCVIrhalt/gb4zIurcM7mJ14v\nI+IkKW0BHiKlxygkP81nftvXvwE3E3EpK22+9qXaSen9wA7guqLSqedmxFPTv8GC8U3ga0SMkNKf\nU7j6cX3OdWoEe4ADRFwsKrN9NaiFlUhHvP1FvsNJYEPR+vqs7HkKlxwWZ70+4+WNbbZ4pfQbUlpL\nxLNZIvPcLO/0J8A3iLhQ9N7jvY0jpPQvwF/PQ43zNR/xijiZPT9NSoeA7cB/YvuaPl4pdQL/ReHH\n8CNF79187Wuqmb6PptvnBCktBlZQ+L4q5bXNprRjTuntFH7MXUfEyET59OdmMyc6c8cr4vmitTuA\nzxe9dudlrz003xWsM+WcU3uAv5hUsvDaVylmimldtS+HdpTnUeAqCjMotFI4GQ4SEcD3KIwDBrgZ\naPYe7oMUjhPmPt6pY8EKydH4+N+bgOn/a7d5zB2vlLomhiCktAp4M/BL29eM8WoFvkFhDN2By7Yt\nhPY1/ffRZMVx3A08lLWng8AeCrN6bAauAn5Uo3rnZe54pbQd+CfgXUQ8V1Q+/bnZ3EqJ19qitXcB\nR7PlB4B3ZHHrAt7B5CuSzaiU8xFS2gp0AQ8XlS3E9lWKg8CfZrN3vBHozzpJ6qt95f5fm/XygD8K\nOBEwEvCbgAey8pcG3H/Zf5Eey/4791NF5VsCfhRwPOCegLbcj6m68boy4LsBTwY8GNCdle8IuKNo\nv00BJwMWXfb6hwIeC/hFwL8HLMv9mPKOF1ybxeTn2fNe29es8Xp/wIWAnxU9ti2o9jXd9xF8JuBd\n2XJ71l6OZ+1nS9FrP5W97omAd+Z+LPURrwez7//x9nQwK5/53Gzmx9zx+mzAkSwu3wvYWvTaD2Tt\n7njAn+V+LPUQr8L6voDPXfa6hdq+vhaF2ZYuZPnX3oAPB3w4254CvpjF87EonlGtjtqXdzaUJEmS\nKuDQDkmSJKkCJtKSJElSBUykJUmSpAqYSEuSJEkVMJGWJEmSKmAiLUmSJFXARFqSJEmqgIm0JEmS\nVAETaUmSJKkCJtKS1ERSSh0ppRMppWdSSm2XbbsjpXQxpbQnr/pJUjMxkZakJhIRQ8CngQ3AR8fL\nU0qfBfYCH4+Iu3OqniQ1lRQReddBkjSPUkotwM+B3wG2AB8EvgB8OiI+k2fdJKmZmEhLUhNKKf0h\n8E3gIeBtwP6I+Mt8ayVJzcVEWpKaVErpp8B24G7gfeEXviTNK8dIS1ITSim9B/jdbPWsSbQkzT97\npCWpyaSU3kFhWMc3gQvAu4HXRsTRXCsmSU3GRFqSmkhK6Q3Ad4EfAe8E1gNHgfsj4qY86yZJzcah\nHZLUJFJKVwP3A8eAmyJiJCKeAv4Z2JVSenOuFZSkJmOPtCQ1gZTSRuC/gRHgzRHxm6JtLwWOA/8T\nESbTkjRPTKQlSZKkCji0Q5IkSaqAibQkSZJUARNpSZIkqQIm0pIkSVIFTKQlSZKkCphIS5IkSRUw\nkZYkSZIqYCItSZIkVcBEWpIkSaqAibQkSZJUgf8HUs4/ykHBulkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "Next, we try the direct method for another dataset using tensorflows least squares class for function\n", "f(x) = 1 + 2x + 3x^2\n", "\"\"\"\n", "\n", "# define true model parameters\n", "x = np.linspace(-1, 1, 100)\n", "a, b, c = 1, 2, 3\n", "y_exact = a + b * x + c * x**2\n", "\n", "# simulate noisy data points\n", "m = 100\n", "X = 1 - 2 * np.random.rand(m)\n", "Y = tf.reshape(tf.convert_to_tensor(a + b * X + c * X**2 + np.random.randn(m)), [100, 1])\n", "A = tf.stack([X**0, X**1, X**2], axis=1)\n", "\n", "# Solving directly using tensorflow's least sqaures. \n", "sol = tf.linalg.lstsq(A, Y)\n", "\n", "y_fit = sol[0] + sol[1] * x + sol[2] * x**2\n", "fig, ax = plt.subplots(figsize=(12, 4))\n", "ax.plot(X, Y, 'go', alpha=0.5, label='Simulated data')\n", "ax.plot(x, y_exact, 'k', lw=2, label='True value $y = 1 + 2x + 3x^2$')\n", "ax.plot(x, y_fit, 'b', lw=2, label='Least square fit')\n", "ax.set_xlabel(r\"$x$\", fontsize=18)\n", "ax.set_ylabel(r\"$y$\", fontsize=18)\n", "ax.legend(loc=2);" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PZH1Y9orgZWI" }, "source": [ "Now, suppose we wish to minimize the same function, but subject to the constraint $x^{\\top} x \\leq 1$. To do so, we introduce the Lagrangian:\n", "\n", "$$\\color{orange}{L(x, \\lambda) = f(x) + \\lambda (x^{\\top} x - 1) \\tag{16}}$$\n", "\n", "We can now solve the problem:\n", "\n", "$$\\color{orange}{min_x max_{\\lambda, \\lambda \\geq 0} L(x, \\lambda) \\tag{17}}$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "id": "xQvOm7Q6c8V8", "outputId": "51b88236-a259-4d24-ff22-c0df7156e352" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Solving the constrained optimization using Lagrange multipliers yield x: \n", "[[ 3. ]\n", " [ 1.5]\n", " [ 1. ]\n", " [ 2. ]\n", " [-0.5]]\n" ] } ], "source": [ "\"\"\"\n", "Let' take an example: Maximize f(x,y,z)=xy+yz subject to the constraints x+2y=6 and x−3z=0.\n", "We start by setting up the equation:\n", "\n", "F(x,y,z,λ,α) = xy + yz − λ(x+2y−6) + α(x-3z)\n", "\n", "Now set the partial derivatives to zero and solve the following set of equations:\n", "\n", "y − λ − α = 0\n", "x + z − 2λ = 0\n", "y + 3α = 0\n", "x + 2y −6 = 0\n", "x − 3z = 0\n", "\n", "which is a linear equation in x,y,z,λ,μ, Now this can be put into the matrix equation:\n", "\n", "[0, 1, 0, -1, -1] [x] = [0]\n", "[1, 0, 1, -2, 0] [y] = [0]\n", "[0, 1, 0, 0, 3] [z] = [0]\n", "[1, 2, 0, 0, 0] [λ] = [6]\n", "[1, 0,-3, 0, 0] [μ] = [0]\n", "\n", "\"\"\"\n", "\n", "matrix = tf.constant([\n", " [0, 1, 0, -1, -1],\n", " [1, 0, 1, -2, 0],\n", " [0, 1, 0, 0, 3],\n", " [1, 2, 0, 0, 0],\n", " [1, 0,-3, 0, 0]], dtype=tf.float32)\n", "\n", "rhs = tf.constant([[0],[0],[0],[6],[0]], dtype=tf.float32)\n", "solve = tf.linalg.solve(matrix, rhs)\n", "\n", "print(\"Solving the constrained optimization using Lagrange multipliers yield x: \\n{}\".format(solve))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "_JaAxGaic-aa" }, "source": [ "The smallest norm solution to the unconstrained least squares problem may be found using the Moore-Penrose pseudoinverse: $x = A^+ b$. If this point is feasible, then it is the solution to the constrained problem." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "id": "ZYo5HSoQgZ2G", "outputId": "a8a044f6-4578-4cf6-8331-a12a301338ea" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tf.Tensor(\n", "[[-0.75 0.375 -0.24999987 0.4999999 0.12500001]\n", " [ 0.37500003 -0.1875 0.12499993 0.25000003 -0.06250007]\n", " [-0.24999996 0.12499999 -0.08333326 0.1666666 -0.29166666]\n", " [-0.5 -0.2500001 -0.16666664 0.33333343 -0.08333337]\n", " [-0.12499999 0.06250004 0.29166666 -0.08333335 0.02083335]], shape=(5, 5), dtype=float32)\n" ] } ], "source": [ "# Moore-penrose pseudoinverse solution to the above problem\n", "mpp_solution = tfp.math.pinv(matrix)\n", "\n", "print(mpp_solution)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "hnKwfKJ2jLbc" }, "source": [ "If the Moore-Penrose pseudoinverse solution is not feasible, we find the solution where the constraint is active by differetiating the Lagrangian with respect to $x$ and solving for $x$, we obtain:\n", "\n", "$$\\color{orange}{x = (A^{\\top} A + 2 \\lambda I)^{-1} A^{\\top} b \\tag{18}}$$\n", "\n", "We can then find the magnitude of $\\lambda$ by performing gradient ascent using:\n", "\n", "$$\\color{orange}{\\frac{\\partial}{\\partial \\lambda} L(x, \\lambda) = x^{\\top} x - 1 \\tag{19}}$$\n", "\n", "When the norm of $x$ exceeds 1, this derivative is positive, so to follow the derivative uphill and increase the Lagrangian with respect to $\\lambda$, we increase $\\lambda$. Because the coefficient on the $x^{\\top} x$ penatly has increased, solving the linear equation for $x$ will now yield a solution with a smaller norm. The process of solving the linear equation and adjusting $\\lambda$ continues until $x$ has the correct norm and the derivative on $\\lambda$ is 0.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LU--mNoUad4S" }, "source": [ "# 💫 Congratulations\n", "\n", "You have successfully completed Chapter 4 Numerical Computation of [Deep Learning with Tensorflow 2.0](https://www.adhiraiyan.org/DeepLearningWithTensorflow.html). To recap, we went through the following concepts:\n", "\n", "- Numerical Computation\n", "- Overflow and Underflow\n", "- Poor Conditioning\n", "- Gradient Based Optimization\n", "- Constrained Optimization\n", "- Example: Linear Least Squares\n", "\n", "\n", "If you like to read more about Numerical Computation take a look at [Numerical Methods\n", "for Engineers by Steven C. Chapra](http://mechfamilyhu.net/download/uploads/mech144232415981.pdf) or [Numerical Methods for\n", "Computational Science and Engineering by Prof. R. Hiptmair](http://www.sam.math.ethz.ch/~hiptmair/tmp/NumCSE/NumCSE15.pdf). \n", "\n", "This concludes the mathematical preliminaries that we use to develop machine learning algorithms. We are now ready to build and analyze some full-fledged machine learning systems. I am excited, are you 😍." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [03.00 - Probability and Information Theory](03.00-Probability-and-Information-Theory.ipynb) | [Contents](Index.ipynb) |\n", "\n", "\"Open\n" ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "name": "04.00-Numerical-Computation.ipynb", "provenance": [], "version": "0.3.2" }, "kernelspec": { "display_name": "Python 3", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }