{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np;\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", "np.random.seed(1337)\n", "\n", "kwargs = {'linewidth' : 3.5}\n", "font = {'weight' : 'normal', 'size' : 24}\n", "matplotlib.rc('font', **font)\n", "\n", "def error_plot(ys, yscale='log'):\n", " plt.figure(figsize=(8, 8))\n", " plt.xlabel('Step')\n", " plt.ylabel('Error')\n", " plt.yscale(yscale)\n", " plt.plot(range(len(ys)), ys, **kwargs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\LaTeX \\text{ commands here}\n", "\\newcommand{\\R}{\\mathbb{R}}\n", "\\newcommand{\\im}{\\text{im}\\,}\n", "\\newcommand{\\norm}[1]{||#1||}\n", "\\newcommand{\\inner}[1]{\\langle #1 \\rangle}\n", "\\newcommand{\\span}{\\mathrm{span}}\n", "\\newcommand{\\proj}{\\mathrm{proj}}\n", "\\newcommand{\\OPT}{\\mathrm{OPT}}\n", "\\newcommand{\\grad}{\\nabla}\n", "\\newcommand{\\eps}{\\varepsilon}\n", "$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "\n", "**Georgia Tech, CS 4540**\n", "\n", "# L7: Gradient Descent Algorithm\n", "\n", "Jake Abernethy, Benjamin Bray, Naveen Kodali\n", "\n", "Quiz password: descent\n", "\n", "*Tuesday, September 10, 2019*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### No class on Thursday Sept 12!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Danger!\n", "\n", "> **Warning:** In this lecture, we will abuse notation and pretend that $\\nabla f(x)$ is a column vector. Always remember that it's *actually* a row vector, and we're just pretending!!!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Gradient Descent\n", "\n", "For $f : \\R^d \\rightarrow \\R$ is differentiable, **gradient descent** performs the following iteration: follows the direction of steepest descent from a starting point $x_0 \\in \\R^d$:\n", "\n", "
\n", "Gradient Descent\n", "$$\n", "\\begin{align}\n", "x_{t+1} = x_t - \\eta_t \\grad f(x_t)\n", "\\end{align}\n", "$$\n", "
\n", "\n", "* Initial iterate $x_0 \\in \\R^d$\n", "* $-\\grad f(x_t)$ is the direction of steepest descent from $x_t$\n", "* $\\eta > 0$ is called the *step size*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Lipschitz Continuity\n", "\n", "A function $f : \\Omega \\rightarrow \\R$ is **$L$-Lipschitz continuous** on its domain $\\Omega \\subset \\R^d$ provided that\n", "\n", "$$\n", "| f(x) - f(y) | \\leq L \\norm{x - y}_2 \\quad \\forall\\, x,y \\in \\Omega\n", "$$\n", "\n", "\n", "
\n", "Part A: Give an example of a function that is not Lipschitz on $\\R^d$ but is Lipschitz on a subset.\n", "\n", "Part B: Prove that a Lipschitz continuous function is continuous, that is, for all $x_0 \\in \\R^d$ and $\\eps > 0$ there exists $\\delta > 0$ such that for all $x \\in \\R^d$, $$\\norm{x-x_0} < \\delta \\implies |f(x)-f(x_0)| < \\eps$$\n", "\n", "Part C: **(Save for Homework)** Prove that if $f$ is differentiable, convex, and $L$-Lipschitz, then $\\norm{\\grad f(x)}_2 \\leq L$.\n", "\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Def: Smooth / Strongly Convex\n", "\n", "Recall that a function is convex if it is lower bounded by its linear approximation at every point. But a function is *strongly convex* if it is also lower bounded by a *quadratic* approximation as well. More precisely, we say $f(x)$ is $\\alpha$-strongly convex if the following holds for every $x, x_0 \\in \\text{dom}(f)$:\n", "$$ f(x) \\geq f(x_0) + \\nabla_{x_0} f \\cdot (x - x_0) + \\frac \\alpha 2 \\| x - x_0 \\|^2 $$\n", "Similarly, a convex function is called $\\beta$-smooth if the inequality goes the other way!\n", "$$ f(x) \\leq f(x_0) + \\nabla_{x_0} f \\cdot (x - x_0) + \\frac \\beta 2 \\| x - x_0 \\|^2 $$\n", "\n", "+ **Equivalently** a twice-differentiable $f(x)$ is $\\alpha$-strongly convex iff $\\nabla^2_x f \\succcurlyeq \\alpha I$\n", "+ **and** a twice-differentiable $f(x)$ is $\\beta$-smooth iff $\\nabla^2_x f \\preccurlyeq \\beta I$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Quadratic Forms\n", "\n", "
\n", "Let $A \\in \\R^{d \\times d}$ be symmetric and positive-definite and define $f(x) = \\frac{1}{2} x^T A x$. \n", "\n", "* Is $f$ smooth? If so, with what smoothness constant?\n", "* Is $f$ strongly convex? If so, with what constant?\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Answer: Quadratic Forms\n", "\n", "$f(x) = \\frac{1}{2} x^T A x => \\nabla^2 f(x)=A$\n", "\n", "* $f$ is $\\lambda_{max}$-smooth. A function is $\\beta$-smooth if $\\nabla^2 f\\preccurlyeq\\beta I$, which means $A$'s eigenvalues are less than or equal to $\\beta$. $\\beta=\\lambda_{max}$ satisfies this.\n", "* $f$ is $\\lambda_{min}$-strongly convex. A function is $\\alpha$-strongly convex if $\\nabla^2 f\\succcurlyeq\\alpha I$, which means $A$'s eigenvalues are greater than or equal to $\\alpha$. $\\alpha=\\lambda_{min}$ satisfies this.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Three key facts about gradient descent from reading\n", "\n", "Let $x^*$ be the minimizer of $f$, and let $\\|x_0 - x^*\\| \\leq R$.\n", "\n", "1. If $f$ is convex and $L$-lipschitz, and we set $\\eta = \\frac{R}{L\\sqrt t}$ then\n", "$$f\\left(\\frac{1}{t}\\sum_{i=0}^{t}x_i\\right) - f(x^*) \\leq \\frac{R L}{\\sqrt{t}}$$\n", "1. If $f$ is convex, $\\beta$-smooth, and we set $\\eta = 1/\\beta$, then \n", "$$f\\left(x_t \\right) - f(x^*) \\leq \\frac{LR^2}{t}$$\n", "1. If $f$ is $\\beta$-smooth and $\\mu$-strongly convex, and set set $\\eta = 1/L$, then \n", "$$\\|x_t - x^*\\| \\leq R \\left(1 - \\frac{\\mu}{\\beta}\\right)^t $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Gradient Descent for Lipschitz Continuous Functions\n", "\n", "Our goal for today is to prove the following:\n", "\n", "
\n", "Theorem: If $f : \\R^d \\rightarrow \\R$ is convex, differentiable and L-Lipschitz on all of $\\R^d$ and $||x_0 - x^*|| \\leq R$, then there is a step size $\\eta > 0$ such that the iterates of gradient descent satisfy\n", "$$\n", "f\\left(\\frac{1}{t}\\sum_{i=1}^{t}x_i\\right) - f(x^*) \\leq \\frac{R L}{\\sqrt{t}}\n", "$$\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Step 1: Problem\n", "\n", "Show that \n", "$$f(x_t) - f(x^*) \\leq \\frac{1}{2\\eta} \\left(||x_t - x^*||^2 - ||x_{t+1} - x^*||^2\\right) + \\frac{\\eta L^2}{2}$$\n", "\n", "> *Hint:* First, show that $u^T v = \\frac{1}{2} (||u||^2 + ||v||^2 - ||u - v||^2)$ for any $u, v \\in \\R^d$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Answer\n", "\n", "First, notice that $f(x_t) - f(x^*) \\leq \\nabla f(x_t)\\cdot(x_t - x^*)$ since $f$ is convex.\n", "\n", "Next, notice that \n", "\\begin{eqnarray*}\n", "\\|x_{t+1} − x^*\\|^2 & = & \\| x_t − \\eta \\nabla f(x_t) − x^∗\\|^2\\\\\n", "& = & \\|x_t − x^∗\\|^2 − 2 \\eta \\nabla f(x_t) \\cdot (x_t − x^∗) + \\eta^2 \\|\\nabla f(x_t)\\|^2 \\\\\n", "& \\leq & \\|x_t − x^∗\\|^2 − 2\\eta \\nabla f(x_t) \\cdot (x_t − x^∗) + \\eta^2 L^2\n", "\\end{eqnarray*}\n", "\n", "Rearranging, dividing by $2\\eta$, and combining with the previous statement, we have\n", "$$\n", "f(x_t) - f(x^*) \\leq \\nabla f(x_t)\\cdot(x_t - x^*) \\leq \\frac{1}{2\\eta}(\\|x_{t} − x^*\\|^2 - \\|x_{t+1} − x^∗\\|^2) + \\eta L^2/2\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Step 2: Problem\n", "\n", "Using the previous step, prove for any $\\eta > 0$ that\n", "\n", "$$f\\left(\\frac{1}{t}\\sum_{i=0}^{t}x_i\\right) - f(x^*) \\leq \\frac{R^2}{2\\eta t} + \\frac{\\eta L^2 t}{2}$$\n", "\n", "> *Hint:* Sum over iterates and identify a telescoping sum. Then, use Jensen's inequality (i.e. the definition of convexity).\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Answer\n", "\n", "\\begin{eqnarray*}\n", "f\\left(\\frac{1}{t}\\sum_{i=0}^{t}x_i\\right) - f(x^*) & \\leq & \\frac{1}{t}\\sum_{i=0}^{t} f\\left(x_i\\right) - f(x^*) \\\\\n", "& = &\\frac{1}{t}\\sum_{i=0}^{t} (f\\left(x_i\\right) - f(x^*)) \\\\\n", "& \\leq & \\frac{1}{t}\\sum_{i=0}^{t} \\left(\\frac{1}{2\\eta}(\\|x_{t} − x^*\\|^2 - \\|x_{t+1} − x^∗\\|^2) + \\eta L^2/2 \\right) \\\\\n", "& \\leq & \\frac{\\|x_{t} − x^*\\|^2}{2t\\eta} + \\eta L^2 / 2\n", "\\end{eqnarray*}\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Step 3: Problem\n", "\n", "Now we have\n", "\n", "$$f\\left(\\frac{1}{t}\\sum_{i=0}^{t}x_i\\right) - f(x^*) \\leq \\frac{R^2}{2\\eta t} + \\frac{\\eta L^2 t}{2}$$\n", "\n", "\n", "\n", "**Show** Since this holds for all $\\eta > 0$, we should pick the step size that gives the best bound. Which $\\eta$ should we choose? What bound does it give?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "(Solution: $\\eta = \\frac{R}{L \\sqrt{t}}$)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Conclusion: Lipschitz Case\n", "\n", "Using $\\eta = \\frac{R}{L \\sqrt{t}}$, we obtain the following bound:\n", "\n", "$$\n", "f\\left(\\frac{1}{t}\\sum_{i=0}^{t}x_i\\right) - f(x^*) \\leq \\frac{R L}{\\sqrt{t}}\n", "$$\n", "\n", "* Lipschitz continuity is a fairly weak assumption\n", "* By imposing stronger conditions, we can get better convergence rates" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Remark: Projected Gradient Descent\n", "\n", "Suppose we want to minimize $f : \\Omega \\rightarrow \\R$ within some convex set $\\Omega \\subset \\R^d$ instead of the entire space $\\R^d$. We can still apply gradient descent as long as we **project** back onto the convex domain $\\Omega$ after each iteration. Let $\\Pi_\\Omega(x) = \\min_{z \\in \\Omega} \\norm{z-x}_2^2$ be the projection of $x$ onto the convex set $\\Omega$.\n", "\n", "\n", "
\n", "Projected Gradient Descent\n", "$$\n", "\\begin{align}\n", "y_{t+1} &= x_t - \\eta_t \\grad f(x_t) \\\\\n", "x_{t+1} &= \\Pi_\\Omega(y_{t+1})\n", "\\end{align}\n", "$$\n", "
\n", "\n", "#### Problem\n", "Show that Projected Gradient Descent achieves the same convergence rate by making a minor adjusment to the proof. (*Hint:* you may want to use a fact from your homework!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Implementation\n", "\n", "> Adapted from [Moritz Hardt's lecture notebook](https://ee227c.github.io/code/lecture4.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "## Projected Gradient Descent\n", "\n", "We start with a basic implementation of projected gradient descent. Note that this implementation keeps around all points computed along the way. This is clearly not what you would do on large instances. We do this for illustrative purposes to be able to easily inspect the computed sequence of points." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def gradient_descent(init, steps, grad, proj=lambda x: x):\n", " \"\"\"Projected gradient descent.\n", " \n", " Inputs:\n", " initial: starting point\n", " steps: list of scalar step sizes\n", " grad: function mapping points to gradients\n", " proj (optional): function mapping points to points\n", " \n", " Returns:\n", " List of all points computed by projected gradient descent.\n", " \"\"\"\n", " xs = [init]\n", " for step in steps:\n", " x_step = xs[-1]\n", " # Fill this in:\n", " x_update = None\n", " xs.append(x_update)\n", " return xs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Warm-Up: Optimizing a Quadratic\n", "\n", "As a toy example, let's optimize $f(x) = \\frac{1}{2} \\norm{x}^2$, which has gradient $\\nabla f(x) = x$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [], "source": [ "def quadratic(x):\n", " return 0.5*x.dot(x)\n", "\n", "\n", "# What is the gradient of this function?\n", "def quadratic_gradient(x):\n", " # FILL THIS IN\n", " return None\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the function is 1-smooth and 1-strongly convex. Our theorems would then suggest that we use a constant step size of 1. If you think about it, for this step size the algorithm will actually find the optimal solution in just one step." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "x0 = np.random.normal(0, 1, (1000))\n", "_, x1 = gradient_descent(x0, [1.0], quadratic_gradient)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indeed, it does:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1.all() == 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what happens if we don't have the right learning rate." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAH/CAYAAACW6Z2MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4m+XZBfBzS94zw87eey87HowyQykQNnH2tg1llRYopUBL6QcUChRoKbazE5I4ZTZQ9izgETs7IXtvO068p/R8f1h+Jad2EtuyH43zuy5dlm69kk5acA7veCRKKRARERG5KpPuAERERETnw7JCRERELo1lhYiIiFwaywoRERG5NJYVIiIicmksK0REROTSWFaIiIjIpbGsEBERkUtjWSEiIiKX5qM7gLcTkYkAJoaGhiYOGjRIdxwiIqI2k5ubm6+UirzQdsLl9l1DdHS0ysnJ0R2DiIiozYhIrlIq+kLb8TAQERERuTSWFSIiInJpLCtERETk0lhWiIiIyKWxrGgmIhNFJLWwsFB3FCIiIpfEsqKZUmqtUiopPDxcdxQiIiKXxLJCRERELo1lhYiIiFwaywoRERG5NJYVzXiCLRER0fmxrGjGE2yJiIjOj2WFiIiIXBrLChEREbk0lhUiIiJyaSwrRERE5NJYVjxQcUU1nvvPT6iotuiOQkRE1GIsK5o5+9Ll0soazF68Dinf7cP8pTkor2JhISIi98ayopmzL12+d+V65B48AwD4fk8+5izJRmlljVPem4iISAeWFQ+T/LP+CPIzG48z9xVg1qJsFFdUa0xFRETUfCwrHia+f0csmxuDEH8fY5Zz8AymL8xGYRkLCxERuR+WFQ8U3acDls+LQWiAvbBsOnwW0xZm4kxplcZkRERETcey4qHG9mqPVYlxaBfka8y2Hi3ClLRM5JdUakxGRETUNCwrHmxE93CsSoxDh2A/Y7bjRDGmpGbiVFGFxmREREQXj2XFww3tGobVSXGICPE3ZrtPlWByaiZOFLKwEBGR62NZ0czZ66w0ZFDnUKQnx6FzmL2w7MsvxaSUDBw5U9Zqn0tEROQMLCuaOXudlcb0jwzBmuR4dG8XaMwOFZQhISUTh06zsBARketiWfEivTsGIz05Dj072AvL0bPlSEjNwP78Uo3JiIiIGsey4mV6tA/CmuR49I0INmbHCyuQkJKBPaeKNSYjIiJqGMuKF+oaHoj0pDj0j7QXllPFlZicmomdJ1hYiIjItbCseKlOYQFYnRSPwZ1DjVl+SRUmp2Zg69HWO9mXiIioqVhWvFhkqD9WJcVhWNcwY3amrBpT0zKx6fBZjcmIiIjsWFa8XIdgP6xKjMPoHvarkYoqajB9QRZyDxZoTEZERFSLZYUQHuSL5fNjEdW7vTErrqzBzIXZyNp3WmMyIiIilhWyCQvwxdK5MYjp28GYlVZZMHvxOvywJ19jMiIi8nYsK2QI8ffBkjnjcemAjsasvNqCuUvW4dtdeRqTERGRN2NZ0awtlttviiA/HyycNR5XDIo0ZpU1ViQuzcEX209qTEZERN6KZUWztlpuvykCfM1InRmFa4d2MmZVFivuXpGLT7Ye15iMiIi8EcsKNcjfx4w3pkXhFyO6GLMaq8K9Kzdg7aZjGpMREZG3YVmhRvn5mPD6lLGYOLqbMbNYFR5cvQHvrj+iMRkREXkTlhU6Lx+zCX9LGIPbx3Y3ZlYF/OZfm7Bm3WGNyYiIyFuwrNAFmU2CF+8ajYTonsZMKeDRdzZjReZBjcmIiMgbsKzQRTGbBM/dPhLT43rVmz/x/lYs/mG/plREROQNWFbooplMgmduGYG5l/atN3967XakfLtXUyoiIvJ0LCvUJCKCJ28airuv6F9v/tzHO/D6l7s1pSIiIk/GskJNJiL47fWD8cDVA+rNX/p8F17+bCeUUpqSERGRJ2JZoWYREfz6usH4zYRB9eavfbUHf/mEhYWIiJyHZYVa5P5rBuJ3vxhSb/bmt3vxzIc/sbAQEZFTsKxQiyVf0R9P3TSs3mzRD/vx1AfbYLWysBARUcuwrJBTzL2sL565dUS92fLMg3j8vS0sLERE1CIsK+Q0M+J64y93jISIfbZ63WE88vZmWFhYiIiomVhWyKkSxvfCS3eNhsmhsLyz/gh+lb4RNRarvmBEROS2WFY0E5GJIpJaWFioO4rT3D6uB/42eSzMDo1l7aZjuH/VBlTVsLAQEVHTsKxoppRaq5RKCg8P1x3FqW4e3Q1/nzIWPg6F5eOtJ/DLt3JRWWPRmIyIiNwNywq1ml+M7Io3p0fBz2z/x+yLn04haVkuKqpZWIiI6OKwrFCrunZYZ6TOjIKfj/0ftW935WHe0nUor2JhISKiC2NZoVZ35eBOWDx7PAJ87f+4/bDnNGYvzkZpZY3GZERE5A5YVqhNXDogAkvmxCDIz2zMsvYXYOaibBRVVGtMRkREro5lhdpMXL+OWD4vBqH+PsYs9+AZzFiQhcIyFhYiImoYywq1qajeHbBifizCAuyFZdORQkxdkImC0iqNyYiIyFWxrFCbG92zHVYmxqFdkK8x23asCFPTMpFfUqkxGRERuSKWFdJiRPdwrE6KQ8dgP2O240QxJqdm4lRRhcZkRETkalhWSJshXcKwOikOkaH+xmzPqRIkpGbieGG5xmRERORKWFZIq4GdQ7EmOR5dwwOM2f78UiSkZOLImTKNyYiIyFWwrJB2fSOCkZ4Uj+7tAo3ZoYIyJKRk4uDpUo3JiIjIFbCsOIGIjBeR10Rki4iUiMgxEflQRKJ1Z3MXvToGIT05Dr06BBmzo2fLkZCSib15JRqTERGRbiwrzvFbAJMAfAPgIQCvABgMIEtEbtCYy630aF9bWPpFBBuzE0UVSEjJxO6TxRqTERGRTqKU0p3B7YnIJQBylFJVDrP2ALYBOKGUGneh94iOjlY5OTmtmNJ9nCqqwLQFWdh9yr5HpWOwH1bMj8XQrmEakxERkTOJSK5S6oJHIbhnxQmUUj86FhXb7AyArwEM05PKfXUKC8CqpDgM6RJqzE6XVmFKWia2Hi3UmIyIiHRgWWld3QDk6w7hjiJC/LEqMQ4jutv3pJwtq8bUtExsPHxWYzIiImprHldWRCRURG4WkWdE5GMRyRcRZbsNucj36CIir4rIXhGpEJGTIrJWRK5pQo5LAVwBIL25fxZv1z7YD2/Nj8Ponu2MWVFFDaYvyELOgQKNyYiIqC15XFkBcA2ADwA8AeB6AB2b8mIRGQVgK4AHAPQDUAkgAsBNAD4Xkccu4j06AVgJ4CCAp5vy+VRfeKAvVsyLQVTv9saspLIGMxdlI3PfaY3JiIiorXhiWQGAUwD+g9qikHSxLxKRQAD/Rm3B2QBghFIqHEB7AC8BEADPich153mPUNtnhwKYqJQqau4fgmqFBvhi2dwYxPbtYMzKqiyYvTgb3+/mUTYiIk/niWVlrVKqs1LqRqXUHwF83oTXJgPoDaAEtUVjGwAopYqUUg8DeN+23XMNvdhWdtYCGArgJqXU1mb+Gegcwf4+WDInBpcNiDBmFdVWzF26Dl/vPKUxGRERtTaPKytKKUsLXj7N9nOlUupoA8+/aPs57tzzX0TEF8DbAC4BcIdS6scW5KAGBPqZsWBWNK4cHGnMqmqsSF6Wi8+3n9SYjIiIWpPHlZXmsh2+ibI9/LSRzTIB1F07e7XDa00A3kLtOTIzlVKftFZObxfga0bKjChcO7SzMauyWHHPilx8vOW4xmRERNRaWFbshqL2nBSgdjG3/6GUsgLYaXvouH7KXwHcBeBLAD4iMt3x1lqBvZW/jxlvTBuHX4zoYsxqrAr3rdqADzY2tEOMiIjcmY/uAC6kq8P9Y+fZru45x+3rVqidYLuda0ULclED/HxMeH3KWPx6zSb8e1Pt/yUWq8JD6RtRbVG4M6qH5oREROQs3LNiF+xwv/w825XZfobUDZRSVyqlpLFbY28kIkkikiMiOXl5eS2M7318zCa8kjAGd4yzFxOrAh55exNWZx/SmIyIiJyJZcWu0VLRWpRSqUqpaKVUdGRk5IVfQP/DbBK8eOcoTInpacyUAh57dwuWZRzQlouIiJyHZcWuxOF+4Hm2C2pge9LIZBL8360jMTO+d735Ux9sw4L/7tOUioiInIVlxc7xPJVu59mu7jmnXHoiIhNFJLWwkF/Q1xImk+Dpm4dj3mV9683//NFP+Oc3ezWlIiIiZ2BZsdsBQNnuD29oA9slyoNtD7c740OVUmuVUknh4eHOeDuvJiJ44sahuOfK/vXmf/lkB177cremVERE1FIsKzZKqWIAObaHDV3RAwCxAOpaxZetHoqaTETw6M8H48FrBtabv/z5Lvz1051QSjXySiIiclUsK/WttP2cJiJdG3j+YdvPXKXUzgaeJxcgInhowiA8fN2gevO/f70Hz328g4WFiMjNeGRZEZGIuhtqv4SwTjvH52yHdRyloPabkkMBfCgiw2zvFyoiLwC43bbd4639Z6CWu+/qgXj8hnrfioDU7/bh6bXbWViIiNyIpy4K19iiJRnnPO4L4EDdA6VUuYjcgtpDPOMAbBORItSuqWJC7TktjyulPnNWUBGZCGDigAEDnPWW5CDpZ/3hazbh6bX2U4yW/HgA1RYrnrllBEymNr9inYiImsgj96y0hFJqE4ARAF4DsA+AP4DTAD4CMEEp9byTP48n2LayOZf2xf/dNqLe7K2sQ3js3c2wWLmHhYjI1XnknpXzrRp7ka8/AeBB2408wLTY3vA1mfDbdzej7gjQmpwjqLYovHjnKPiY2duJiFwVf0OT15g0videnjQajkd+3ttwFL9K34hqi1VfMCIiOi+WFfIqt43tgVcnj4XZobF8uPk47lu5HlU1LCxERK6IZUUzrmDb9iaO7oZ/TB0HX7O9sHy67STuWZGLyhqLxmRERNQQlhXNeIKtHteP6II3p0fBz+FclS93nELislxUVLOwEBG5EpYV8lrXDO2MtFnR8Pex/2vw3a48zF2yDmVVNRqTERGRI5YV8mpXDIrE4tnjEehrNmY/7j2N2YvWoaSShYWIyBWwrJDXu2RABJbOjUGwn72wZB8owMyFWSiqqNaYjIiIAJYVIgBATN8OWDYvFqH+9qWH1h86ixkLslBYxsJCRKQTy4pmvBrIdUT1bo8V82MRFmAvLJuOFGJKWiYKSqs0JiMi8m4sK5rxaiDXMrpnO6xMjEP7IF9jtv14EaakZiKvuFJjMiIi78WyQnSOEd3DsTopHhEhfsZs58liTE7NwKmiCo3JiIi8E8sKUQMGdwnF6qQ4dAr1N2Z780qRkJqJ44XlGpMREXkflhWiRgzoFIr05Hh0DQ8wZvvzSzEpJQOHC8o0JiMi8i4sK0Tn0TciGGuS49G9XaAxO1xQjsmpmTh4ulRjMiIi78GyQnQBPTsEYc3d8ejdMciYHT1bjkkpGdibV6IxGRGRd2BZ0YyXLruH7u0CkZ4Uj34RwcbsZFElElIysetkscZkRESej2VFM1667D66hAdgdXIcBnYKMWb5JZWYnJqJ7ceKNCYjIvJsLCtETdApNACrk+IwpEuoMSsorcLUBZnYepR7x4iIWgPLClETdQzxx6rEOIzoHmbMzpZVY0paJjYcOqMxGRGRZ2JZIWqG9sF+eGt+HMb0bGfMiitqMGNhNtYdKNCYjIjI87CsEDVTeKAvls+Lwfg+7Y1ZSWUNZi3KRsbe0xqTERF5FpYVohYIDfDFkjkxiOvXwZiVVVkwZ0k2/rs7T2MyIiLPwbJC1ELB/j5YPDsGlw+MMGYV1VbMW5qDr3ec0piMiMgzsKxoxnVWPEOgnxlpM6Nx1eBIY1ZVY0XS8hx8tu2ExmRERO6PZUUzrrPiOQJ8zXhzRhQmDOtszKotCr98az0+2nxcYzIiIvfGskLkRP4+ZrwxbRxuHNnVmNVYFe5ftR4fbDyqMRkRkftiWSFyMl+zCa9OHoNbx3QzZlYF/Cp9I97OPaIxGRGRe2JZIWoFPmYTXpo0BndG9TBmSgGPvL0Jq7IPaUxGROR+WFaIWonZJHjhjlGYEtPLmCkF/O7dLViWcUBbLiIid8OyQtSKTCbBs7eNwKz43vXmT32wDQv+u09TKiIi98KyQtTKRAR/vHk4Ei/vW2/+549+whvf7NGUiojIfbCsELUBEcHjNwzFvVf1rzd/4ZOdePWL3VBKaUpGROT6WFaI2oiI4OHrBuOhawfVm7/yxS789bOdLCxERI1gWSFqQyKCB68diEevH1xv/o+v9+K5j3ewsBARNYBlRTMut++dfnnlADxx49B6s9Tv9uHptdtZWIiIzsGyohmX2/de8y/vh6dvHl5vtuTHA/j9+1thtbKwEBHVYVkh0mjWJX3w7G0jIWKfrcw6hN++sxkWFhYiIgAsK0TaTY3thRfuGFWvsPwr9wh+s2YjaixWfcGIiFwEywqRC7gruif+ljAGJofC8v7GY3hw9UZUs7AQkZdjWSFyEbeM6Y7Xp4yDj0Nj+WjLcdz71npU1lg0JiMi0otlhciF3DiqK96YNg6+Znth+Wz7Sdy9PBcV1SwsROSdWFaIXMx1w7sgdUY0/Hzs/3p+vTMPictyUF7FwkJE3odlhcgFXTWkExbOioa/Q2H57+58zFmSjdLKGo3JiIjaHssKkYu6fGAkFs8Zj0BfszHL3FeAWYuyUVxRrTEZEVHbYlkhcmGX9I/AsnkxCPH3MWY5B89gxsJsFJazsBCRd2BZIXJx4/t0wPJ5MQgNsBeWjYfPYvqCLJwtq9KYjIiobbCsELmBsb3aY+X8OIQH+hqzLUcLMSUtCwWlLCxE5NlYVojcxMge4ViVGIcOwX7G7KfjRZicmoG84kqNyYiIWhfLCpEbGdYtDKuT4hAR4m/Mdp0sweTUDJwsqtCYjIio9bCsaCYiE0UktbCwUHcUchODOociPTkOncPshWVvXikSUjJw7Gy5xmRERK2DZUUzpdRapVRSeHi47ijkRvpHhiA9KR7dwgOM2YHTZZiUkoHDBWUakxEROR/LCpGb6hMRjPTkePRoH2jMjpwpR0JKBg7kl2pMRkTkXCwrRG6sZ4cgrEmOR5+OQcbsWGEFElIzsOdUicZkRETOw7JC5Oa6tQtEenI8+kUGG7OTRZWYnJqJnSeKNSYjInIOlhUiD9A5LADpSfEY1DnEmOWXVGJKWia2HePJ20Tk3lhWiDxEZKg/ViXGYWjXMGNWUFqFqWlZ2HzkrMZkREQtw7JC5EE6hvhjVWIsRna3X11WWF6NaWlZWH/ojMZkRETNx7JC5GHaBflhxfxYjO3VzpgVV9ZgxoIsrDtQoDEZEVHzsKwQeaDwQF8snxeL8X3aG7PSKgtmLszGj3vzNSYjImo6lhUiDxXi74Olc2MQ36+jMSuvtmDO4nX4bleexmRERE3DskLkwYL8fLBo9nhcPjDCmFXWWDF/aQ6+2nFSYzIioovHskLk4QL9zEibGY2rh3QyZlUWK5KX5+KTrSc0JiMiujgsK04gIiEi8rSI/EdE8kREichjunMR1QnwNePN6VH4+fDOxqzaonDvyvX4cPMxjcmIiC6MZcU5IgA8BWAkgA2asxA1yM/HhL9PHYcbR3U1ZharwgOrNuC9DUc0JiMiOj8f3QE8xHEA3ZVSx0SkD4D9euMQNczXbMKrCWPgZzbhvQ1HAQBWBfx6zSZUWxQmRffUnJCI6H9xz4oTKKUqlVLcl05uwcdswl/vGo1J0T2MmVLAo29vxltZBzUmIyJqGMsKkRcymwTP3z4K02J71Zv//r2tWPIDdwwSkWvxuLIiIqEicrOIPCMiH4tIvu2EVyUiQy7yPbqIyKsisldEKkTkpIisFZFrWjs/UVsxmQR/vnUEZl/Sp978j2u3I/W7vXpCERE1wBPPWbkGwHvNfbGIjALwFYC6lbSKUHsC7U0AbhSRx5VSz7c4JZELEBH8YeIw+PmYkPrdPmP+7H921F4tdNUAjemIiGp53J4Vm1MA/gPgaQBJF/siEQkE8G/UFpUNAEYopcIBtAfwEgAB8JyIXOf0xESaiAh+94shuO+cYvLipzvxyue7oJTSlIyIqJYn7llZq5R6v+6B7eqci5UMoDeAEgATlVJHAUApVQTgYRHpD+BWAM8B+MxZgYl0ExE8/PPB8PMx4eXPdxnzV7/cjSqLFY/+fDBERGNCIvJmHrdnRSllacHLp9l+rqwrKud40fZz3MWe/0LkTh64ZiAevX5wvdk/v9mLP3/0E/ewEJE2HldWmktEQgFE2R5+2shmmQAKbfevbvVQRBr88soBeOLGofVmC7/fjz/8exusVhYWImp7nngYqLmGovacFADY1tAGSimriOwEEANgmONzInIfgHa2GwBcJSJ1//u+rpQqBJGbmH95P/j5mPDUB/Z/FZZlHERVjRXP3jYSJhMPCRFR22FZsevqcP98C7zVPdf1nPnDqD3fpc51thsArIB9jwyRW5gZ3we+ZhMef28L6o4ArV53GNUWhRfuHAUzCwsRtRGWFbtgh/vl59muzPYzxHGolOrT1A8UkSTYrlbq1avXBbYmantTYnrB12zCo29vQt0RoHfWH0GN1YqX7hoNHzOPJBNR6+NvGrs2/89EpVSqUipaKRUdGRnZ1h9PdFHujOqBVxLG1NuT8sHGY3hg9QZUW6wakxGRt2BZsStxuB94nu2CGtieyKPdMqY7Xp8yFj4OheU/W07gnhXrUVnTkgvwiIgujGXFzvE8lW7n2a7uueOtmIXI5dwwsivemDYOvmZ7Yfnip5NIXp6LimoWFiJqPSwrdjsA1F2XObyhDUTEBKBuEYrtzvhQEZkoIqmFhTz/llzfdcO7IHVmNPx87L86vtmZh/lLc1BexcJCRK2DZcVGKVUMIMf2cEIjm8UCCLfd/9JJn7tWKZUUHh5+4Y2JXMBVgzth0azxCPC1//r4fk8+5izJRmlljcZkROSpWFbqW2n7OU1Ezr00Gai9PBkAcpVSO9soE5HLuWxgBBbPjkGQn9mYZe4rwKxF2SiuqNaYjIg8kUeWFRGJqLuh9ksI67RzfM52WMdRCoCDAEIBfCgiw2zvFyoiLwC43bbd4639ZyBydfH9O2LZ3BiE+NtXQMg5eAbTF2ajsIyFhYicxyPLCoA8h9t6h3nGOc/VW9xEKVUO4BYApwGMA7BNRAoBnAXwCGrPafmdUsppX2LIc1bInUX36YDl82IQGmAvLJsOn8W0hZk4U1qlMRkReRJPLSvNppTaBGAEgNcA7APgj9ry8hGACUqp5538eTxnhdza2F7tsSoxDu2CfI3Z1qNFmJKWifySSo3JiMhTCL9J1TVER0ernJycC29I5KJ+Ol6EaQuyUOCwR2VgpxC8NT8WncICNCYjIlclIrlKqegLbcc9K0TkFEO7hmF1UhwiQvyN2e5TJZicmokThRUakxGRu2NZISKnGdQ5FOnJcegcZi8s+/JLkZCagaNnz/eVW0REjWNZ0Ywn2JKn6R8ZgjXJ8ejezv6tFQdPl2HSmxk4dLrsPK8kImoYy4pmPMGWPFHvjsFIT45Dzw72wnL0bDkSUjOwP79UYzIickcsK0TUKnq0D8Ka5Hj0jQg2ZscLK5CQkoE9p4o1JiMid8OyQkStpmt4INKT4tA/0l5YThVXYnJqJnaeYGEhoovDskJErapTWABWJ8VjcOdQY5ZfUoXJqRnYepTnahHRhbGsEFGriwz1x6qkOAzrGmbMzpRVY2paJjYdPqsxGRG5A5YVzXg1EHmLDsF+WJUYh9E97CeTF1XUYPqCLOQePKMxGRG5OpYVzXg1EHmT8CBfLJ8fi6je9u8XLa6swcyFWcjad1pjMiJyZSwrRNSmwgJ8sXRuDGL7djBmpVUWzF68Dj/sydeYjIhcFcsKEbW5EH8fLJ4zHpcO6GjMyqstmLtkHb7dlacxGRG5IpYVItIiyM8HC2eNxxWDIo1ZZY0ViUtz8OVPJzUmIyJXw7JCRNoE+JqROjMK1w7tZMyqLFbcvSIXn2w9oTEZEbkSlhUi0srfx4w3pkXh+uFdjFm1ReHeleuxdtMxjcmIyFWwrGjGS5eJAD8fE16fOhYTR3czZharwoOrN+Dd9Uc0JiMiV9DssiIiD9hu3S68NTWGly4T1fI1m/C3hDG4fWx3Y2ZVwG/+tQnp6w5pTEZEuvm04LWvALAAeNNJWYjIy5lNghfvGg1fswnpOYcBAEoBv31nC6osCjPiemtOSEQ6tOQwUD6AYqVUlbPCEBGZTYLnbh+J6XG96s2ffH8rFn2/X1MqItKpJWVlPYBwEYm84JZERE1gMgmeuWUE5lzap978Tx9uR8q3e/WEIiJtWlJWXrO9/kknZSEiMogInrppGJKv6Fdv/tzHO/D6l7s1pSIiHZpdVpRSHwN4GMDdIrJcREY7LxYRUW1heez6IXjg6gH15i99vgsvf7YTSilNyYioLTX7BFsR2We7WwNgKoCpIlIO4DRqT7xtiFJK9W/uZxKR9xER/Pq6wfA1m/DS57uM+Wtf7UGlxYrHrh8CEdGYkIhaW0uuBurTwCzIdmsM/zPoHCIyEcDEAQMGXHBbIm92/zUD4etjwvMf7zBmKd/uQ3WNwpM3DWVhIfJgLSkrVzkthRdTSq0FsDY6OjpRdxYiV3f3Ff3hazbhmQ+3G7NFP+xHtcWKp28eDpOJhYXIEzW7rCilvnVmECKiizHvsr7w8zHhyfe3GrPlmQdRbbHi2dtGsrAQeSAut09EbmdGXG/85Y6RcDzys3rdYTz89iZYrDzaTORpWnIYqB6pPWA8GEDduit5AHYqnq5PRK0gYXwv+JpNePhfm1DXT95dfxTVFoWXJ9WugktEnqHF/zaLyAARWQKgEMA2AN/YbtsAFIrIYhHh2aNE5HS3j+uBv00eC7PDoZ+1m47h/pUbUFVj1ZiMiJypRWVFRG4GsAHADAAhAOScWwiAmQA2iMhNLYtKRPS/bh7dDX+fMhY+DoXlk20n8Mu3clFZ09gqCkTkTlryrcv9AawGEAxgH4BkAAMBBAIIsN2/G8Be2zZrbK8hInKqX4zsijenR8HP4dDPFz+dQtKyXFRUs7AQubuW7Fl5FLWl5GsAo5RSaUqpvUq843ZOAAAgAElEQVSpSqVUle1+KoDRAL4F4A/gkZZHJiL6X9cO64zUmVHw87H/Wvt2Vx7mLV2HsqoajcmIqKVaUlYmoHaRt2SlVHljG9meS0btYaHrWvB5RETndeXgTlg8ezwCfO2/2n7YcxqzF69DSSULC5G7aklZ6QqgUCm150IbKqV2AThrew0RUau5dEAElsyJQZCf2Zhl7y/AzIVZKKqo1piMiJqrJWWlDECQiPheaEMR8UPteSuN7oHxViIyUURSCwsLdUch8hhx/Tpi+bwYhPrbV2dYf+gsZizIQmEZCwuRu2lJWdkCwBfArIvYdpZt280t+DyPpJRaq5RKCg8P1x2FyKNE9e6A5fNjERZgLyybjhRi6oJMFJRWaUxGRE3VkrKyHLXnobwmIvOlgW8RE5EAEXkAwGuoPb9laQs+j4ioScb0bIeViXFoF2TfAbztWBGmpmUiv6RSYzIiagpp7gKztnLyCewn2p4A8F8AR1F75U9vALEAOqK21HwG4Bdc0bZh0dHRKicnR3cMIo+040QRpqVl4bTDHpUBnUKwcn4sOoUFaExG5N1EJFcpFX2h7Zq9Z8VWOm4FkIrastIVwCQAvwJwD4AbAUTYnnsTwG0sKkSkw5AuYVidFIfIUH9jtudUCRJSM3G8kKfSEbm6Zu9ZqfcmIr0A3A5gHOp/N9B6AO8qpQ61+EM8HPesELW+fXklmJqWhRNFFcasV4cgrEyMRY/2QRqTEXmni92z4pSyQi3HskLUNg6dLsOUtEwcPWvfo9K9XSBWJsaid8dgjcmIvE+rHwYSkfUikisi/Zr7HkREba1XxyCkJ8ehVwf7npSjZ8uRkJKJfXklGpMRUWNacjXQMAADlVL7nBWGiKgt9GhfW1j6Rdj3pJwoqkBCaiZ2nyzWmIyIGtKSsnIUtVf5EBG5na7hgVidFIeBnUKMWV5xJSanZuKn40UakxHRuVpSVj5F7Qq2sc4KQ0TUljqFBWBVUhyGdAk1ZqdLqzAlLRNbj3JVaSJX0ZKy8mcApwG8KSIRTspDRNSmIkL8sSoxDiO6hxmzs2XVmJqWiY2Hz2pMRkR1WrIo3M8ADAbwEoBqAMsAZKD2kmVLY69TSn3XrA/0cLwaiEivwvJqzFyUjU0OBSXE3wdL5oxHdJ8OGpMRea5Wv3RZRKyoXfANqD135WLeSCmlfC68mfdhWSHSr7iiGrMXr0PuwTPGLMjPjEWzxyOuX0eNyYg8U6tfugzgkMPt4DmPG7sdbsHnERG1qtAAXyybG4PYvvY9KWVVFsxenI3vd+drTEbk3bgonGYiMhHAxAEDBiTu3r1bdxwiAlBeZUHishx8v8deUPx8TEiZEYWrBnfSmIzIs7TFnhVyAqXUWqVUUnh4uO4oRGQT6GfGglnRuHJwpDGrqrEieVkuPt9+UmMyIu/UkhVsz4jIaa5gS0SeKMDXjJQZUZgwrLMxq7JYcc+KXHy85bjGZETepyV7VvwAmLmCLRF5Kn8fM96YNg43jOxizGqsCvet2oAPNh7VmIzIu7T0BFs/ZwUhInJFvmYTXps8FjeP7mbMLFaFh9I34p3cIxqTEXmPlpSVfwPwF5EJzgpDROSKfMwmvJIwBneM62HMrAp4+O1NSF93SGMyIu/QkrLyLIADANJEZKhz4hARuSazSfDinaMwJaanMVMK+O07W7A844C2XETeoCULtN0C4J8AngKwQUQ+xsWtYLusBZ9JRKSNyST4v1tHwtdswrKMg8b8yQ+2ocqiMO+yvhrTEXmulpSVJahdtbbum5dvtt0uhGWFiNyWySR4+ubh8DObsOD7/cb8mQ+3o6rGinuu7K8xHZFnaklZ+Q4Xt8Q+EZFHERH8/sah8PUx4Z/f7DXmf/lkB6otVjxwzUCN6Yg8T7PLilLqSifmICJyKyKCR38+GH5mE1790r769Muf70K1xYpfTxgEETnPOxDRxeIKtkREzSQieGjCIDzy88H15q9/tQfPf7wD/DoTIue46LIiIg+IyLxGngsRkbALvP4VEVnY1IBERK7u3qsG4Pc31L8oMuW7fXh67XYWFiInaMqelb8B+FMjz+0GUHCB108GMLsJn0dE5DYSf9YPf5w4rN5syY8H8MT7W2G1srAQtURTDwOd7wCsVx+cFRFfEfmTiBwSkQoR2SwiU3XnIqK2M/vSvvi/20bUm72VdQiPvbsZFhYWombjOSvOkwrg9wDeB3A/gMMA3hKRmVpTEVGbmhbbGy/cOQqO59auyTmCR/61CTUWq75gRG6MZcUJRGQcag9x/VEp9YBSKg3ATQC+AfCiiPhrjEdEbWxSdE+8PGk0TA6F5d0NR/Gr9I2oZmEhajKWFeeYBMAK4B91A1V7Vt3fAXQCcKWeWESky21je+C1KWNhdmgsH24+jvtWrkdVDQsLUVOwrDjHOAB7lVLnnmSc5fA8EXmZm0Z1wz+mjoOv2V5YPt12EvesyEVlTaPfSkJE5/C4siIioSJys4g8IyIfi0i+iCjbbchFvkcXEXlVRPbaTpY9KSJrReSaRl7SDcDxBubHHJ4nIi90/YgueHN6FPzM9l+3X+44hcRluaioZmEhuhgeV1YAXAPgAwBPALgeQMemvFhERgHYCuABAP0AVAKIQO05KJ+LyGMNvCzQtl09SikrgGrb80Tkpa4Z2hlps6Lh72P/lfvdrjzMXbIOZVU1GpMRuYemLrffQUS+amgOAI08V2+bNnIKQA6AdQCOovZKnQsSkUAA/0ZtwdkAYIZSapttwbunAPwGwHMisl4p9ZnDS8sB/M9JtCJiAuBre56IvNgVgyKxePZ4zFuag3LbHpUf957G7EXrsGjOeIT4t+Sr2og8m1zs6ooi4owzwpRSyuyE92mUiJiVUhaHx30A1H016lCl1I7zvPZXAF4BUAJgiFLq6DnPvwfgVgDrlVJRDvPPAfRWSg06Z/seqL2E+XGl1HPnyx0dHa1ycnIu/AckIreWvb8AcxZno7TKfghoXK92WDI3BmEBvhqTEbU9EclVSkVfaLumVPmlLcjTZhyLSjNMs/1ceW5RsXkRtWVlnIgMcSg+uQCuFpEO55xkG2v7ub4FmYjIg8T07YBl82Ixe1E2iitrDwGtP3QWMxZkYdncWIQHsbAQneui96y4q4vdsyIioQAKUbsS7x1KqXcb2MaE2q8VCAdwr1LqDds8CrWHnZ5USv3ZNhMAXwEYDqCnUup/zmlxxD0rRN5l0+GzmLEwC0UV9nNWhnUNw4r5segQ7KcxGVHbudg9K554gm1zDYX9KwO2NbSB7YTZnbaHwxzmuQCWA3jadhXRfABrUbu+ym8vVFSIyPuM7tkOq5Li0N5hT8r240WYkpqJvGL+yiByxLJi19Xh/rFGt7I/1/Wc+XwAzwK4HbWLw/VG7Qm6ixt7IxFJEpEcEcnJy8trRmQicmfDu4VjdVI8IkLse1J2nizG5NQMnCyq0JiMyLWwrNgFO9w/39U7ZbafIY5DpVSVUupJpVRPpZS/UmqkUmrF+T5QKZWqlIpWSkVHRkY2MzYRubPBXUKxOikenULtFxTuzStFQkoGjp3lhYREAMuKI6/+1mgi0mdApxCkJ8eja3iAMTtwugwJqRk4XFB2nlcSeQeWFbsSh/vnW8QtqIHtiYhapG9EMNYkx6N7O/uvn8MF5ZicmomDp0s1JiPSj2XFzvE8lfMtj1/3XEPL6zeZiEwUkdTCwkJnvB0RubGeHYKw5u549O4YZMyOni3HpJQM7M3jfx+R92JZsdsBoO467uENbWC7dHmw7eF2Z3yoUmqtUiopPDzcGW9HRG6ue7tApCfFo1+k/TS6k0WVSEjJxK6TxRqTEenDsmKjlCpG7VopADChkc1iUbvGCgB82eqhiMgrdQkPwOqkOAzsZD+PP7+kEpNTM7H9WJHGZER6sKzUt9L2c5qInHtpMgA8bPuZq5Ta2cDzRERO0Sm0trAM6RJqzApKqzAlLRNbjvCwMXkXjywrIhJRdwPQ3uGpdo7P2Q7rOEoBcBBAKIAPRWSY7f1CReQF1K6hAgCPt/afgYioY4g/ViXGYUT3MGNWWF6NqQsyseHQGY3JiNqWR5YVAHkON8fv5ck457leji9SSpUDuAXAaQDjAGwTkUIAZwE8gtpzWn53zjcutwhPsCWi82kf7Ie35sdhTM92xqy4ogYzFmZj3YGC87ySyHN4allpNqXUJgAjALwGYB8Af9SWl48ATFBKPe/kz+MJtkR0XuGBvlg+Lwbj+9h3FJdU1mDWomxk7D2tMRlR2/D4LzJ0F/wiQyK6kNLKGsxfmoOMffaCEuBrQtrMaFw+kKtgk/vhFxkSEXmYYH8fLJo9HpcPjDBmFdVWzFuag693nNKYjKh1sawQEbmRQD8z0mZG46rB9j0pVTVWJC3PwWfbTmhMRtR6WFY04wm2RNRUAb5mvDkjChOGdTZm1RaFX761Hh9tdsri2kQuhWVFM55gS0TN4e9jxhvTxuHGkfYloWqsCvevWo8PNh7VmIzI+VhWiIjclK/ZhFcnj8GtY+xfZ2ZVwK/SN+JfOYc1JiNyLpYVIiI35mM24aVJY3BnVA9jphTwyNubsTLrkMZkRM7DskJE5ObMJsELd4zClJh661zi8fe2YOmPB/SEInIilhXNeIItETmDySR49rYRmBXfu978D//ehgX/3acpFZFzsKxoxhNsichZRAR/vHk4Ei/vW2/+549+wj++3qMpFVHLsawQEXkQEcHjNwzFvVf1rzd/8dOd+NsXu8BVy8kdsawQEXkYEcHD1w3GQ9cOqjf/2xe78eKnO1lYyO2wrBAReSARwYPXDsQjPx9cb/7GN3vx7H9+YmEht8KyQkTkwe69agCeuHFovVnaf/fj6bXbWVjIbbCsEBF5uPmX98PTNw+vN1vy4wE8/t5WWK0sLOT6WFY046XLRNQWZl3SB8/eNhIi9tmq7EN49J3NsLCwkItjWdGMly4TUVuZGtsLL9wxql5heTv3CH6zZiNqLFZ9wYgugGWFiMiL3BXdE69MGgOTQ2F5f+MxPLh6I6pZWMhFsawQEXmZW8d2x+tTxsHHobF8tOU47n1rPapqWFjI9bCsEBF5oRtHdcUb08bB12wvLJ9tP4m7V+SiotqiMRnR/2JZISLyUtcN74KUGVHw87H/VfDVjlNIXJaD8ioWFnIdLCtERF7s6iGdsWBmNPwdCst/d+dj7pJ1KKuq0ZiMyI5lhYjIy/1sUCQWzxmPQF+zMcvYdxqzFmWjpJKFhfRjWSEiIlzSPwJL58Yg2M9eWNYdOIMZC7NQWF6tMRkRy4p2XBSOiFxFTN8OWD4/FqEBPsZsw6GzmL4gC2fLqjQmI2/HsqIZF4UjIlcyrld7rJwfh/BAX2O25WghpqRloaCUhYX0YFkhIqJ6RvYIx6rEOHQI9jNmPx0vwuTUDOQVV2pMRt6KZYWIiP7HsG5hWJUYh4gQf2O262QJJqdm4GRRhcZk5I1YVoiIqEGDu4RidVIcOoXaC8vevFIkpGTg2NlyjcnI27CsEBFRowZ0CsGa5Hh0Cw8wZgdOl2FSSgYOF5RpTEbehGWFiIjOq09EMNKT49GjfaAxO3KmHAkpGTiQX6oxGXkLlhUiIrqgnh2CsCY5Hr07BhmzY4UVmJSSgT2nSjQmI2/AskJERBelW7tArEmOR7/IYGN2qrgSk1MzsfNEscZk5OlYVoiI6KJ1DgtAelI8BnUOMWb5JZWYkpaJbce4uCW1DpYVzbiCLRG5m8hQf6xKjMPQrmHGrKC0ClPTsrD5yFmNychTsaxoxhVsicgddQzxx6rEWIzqYf/dVVhejWlpWVh/6IzGZOSJWFaIiKhZ2gX5YcX8WIzt1c6YFVfWYMaCLGTvL9CYjDwNywoRETVbWIAvls+Lxfg+7Y1ZaZUFsxZl48e9+RqTkSdhWSEiohYJ8ffB0rkxiO/X0ZiVV1swZ/E6fLcrT2My8hQsK0RE1GJBfj5YNHs8Lh8YYcwqa6yYvzQHX+04qTEZeQKWFSIicopAPzPSZkbj6iGdjFmVxYrk5bn4ZOsJjcnI3bGsEBGR0wT4mvHm9Cj8fHhnY1ZtUbh35Xp8uPmYxmTkzlhWiIjIqfx8TPj71HG4cVRXY2axKjywagPe23BEYzJyVywrRETkdL5mE15NGIPbxnY3ZlYF/HrNJqzJOawxGbkjlhUiImoVPmYT/nrXaNwV1cOYKQU8+vZmvJV1UGMycjcsK0RE1GrMJsFf7hiFabG96s1//95WLPlhv6ZU5G5YVoiIqFWZTII/3zoCsy/pU2/+x7XbkfrdXj2hyK2wrBARUasTEfxh4jAk/6xfvfmz/9mBv3+1W1MqchcsK0RE1CZEBI/9Ygjuu2pAvflfP9uFlz/fBaWUpmTk6lhWiIiozYgIHv75YPx6wqB689e+3I0XPt3JwkINYlnRTEQmikhqYWGh7ihERG3mgWsG4rfXD6k3++c3e/Hnj35iYaH/wbKimVJqrVIqKTw8XHcUIqI2dc+V/fHkTcPqzRZ+vx9/+Pc2WK0sLGTHskJERNrMu6wvnrlleL3ZsoyDePy9LSwsZGBZISIirWbE98Hzt4+EiH22et1hPPL2ZlhYWAgsK0RE5AImx/TCi3eOhsmhsLyz/ggeSt+IGotVXzByCSwrRETkEu6M6oFXEsbA7NBY/r3pGO5ftQHVLCxejWWFiIhcxi1juuP1KWPh41BYPt56AvesWI/KGovGZKQTywoREbmUG0Z2xRvTxsHXbC8sX/x0EsnLc1FRzcLijVhWiIjI5Vw3vAtSZ0bDz8f+19Q3O/Mwf2kOyqtYWLwNywoREbmkqwZ3wqJZ4xHga/+r6vs9+ZizJBullTUak1FbY1khIiKXddnACCyZE4MgP7Mxy9xXgFmLslFcUa0xGbUllhUiInJpcf06YtncGIT4+xiznINnMGNhNgrLWVi8AcsKERG5vOg+HbB8XgxCA+yFZePhs5i2IBNnSqs0JqO2wLLiBCISIiJPi8h/RCRPRJSIPKY7FxGRJxnbqz1WJcahXZCvMdt6tAhT0jJxuqRSYzJqbSwrzhEB4CkAIwFs0JyFiMhjjegejlWJcegY7GfMdpwoxuTUTJwqrtCYjFoTy4pzHAfQXSnVE0CS7jBERJ5saNcwrE6KQ2SovzHbfaoEk1MycaKQhcUTsaw4gVKqUil1THcOIiJvMbBzKNKT4tAlLMCY7csvRUJqBo6eLdeYjFoDywoREbmlfpEhSE+OQ/d2gcbs4OkyJKRk4HBBmcZk5GwuW1ZEJFREbhaRZ0TkYxHJt524qkRkyEW+RxcReVVE9opIhYicFJG1InJNa+cnIqLW17tjMNKT49Czg72wHDlTjkkpGdifX6oxGTmTy5YVANcA+ADAEwCuB9CxKS8WkVEAtgJ4AEA/AJWoPRH2JgCf82odIiLP0KN9ENYkx6NvRLAxO15YgYSUDOw5VawxGTmLK5cVADgF4D8AnkYTTlwVkUAA/0ZtwdkAYIRSKhxAewAvARAAz4nIdee87kqHvTcXul3rpD8jERG1UNfwQKQnxaF/pL2wnCquxOTUTOw8wcLi7nwuvIk2a5VS79c9EJE+TXhtMoDeAEoATFRKHQUApVQRgIdFpD+AWwE8B+Azh9ftAnDPRX7GT03IQ0REraxTWABWJ8Vj+oIs7DxZW1DyS6owOTUDy+fFYkT3cM0JqblctqwopVrytZrTbD9X1hWVc7yI2rIyTkSGKKV22D7zGIA3W/C5RESkUWSoP1YlxWH6gixsP14EADhTVo2paZlYPi8Wo3u205yQmsPVDwM1mYiEAoiyPfy0kc0yARTa7l/d6qGIiKjNdAj2w6rEOIzuYd+TUlRRg+kLspB78IzGZNRcHldWAAxF7TkpALCtoQ2UUlYAO20PhznjQ0XkPhF5AsB9ttFVIvKE7cZ9j0REbSg8yBfL58diXC/7npTiyhrMXJiFrH2nNSaj5vDEstLV4f75Fmqre67rebZpiocBPAPgN7bH19keP4PaE3uJiKgNhQX4Ytm8WMT07WDMSqssmL14HX7Yk68xGTWVJ5aVYIf751vGsG7FoBBnfKhSqo9SShq5HWjoNSKSJCI5IpKTl5fnjBhEROQgxN8HS+aMxyX97atflFdbMHfJOny7i7933YUnlhW58CauQSmVqpSKVkpFR0ZG6o5DROSRgvx8sGj2ePxskP33bGWNFYlLc/DF9pMak9HF8sSyUuJwP7DRrYCgBrYnIiIPFOBrRuqMKFwzpJMxq7JYcfeKXHyy9bjGZHQxPLGsOJ6n0u0829U9x39KiYi8QICvGf+cHoXrh3cxZjVWhXtXbsDaTfwuWlfmiWVlBwBluz+8oQ1ExARgsO3h9rYI1RgRmSgiqYWFhRfemIiIWsTPx4TXp47FxNH2/5a1WBUeXL0B764/ojEZnY/HlRWlVDGAHNvDCY1sFgug7nLiL1s91HkopdYqpZLCw3l1MxFRW/A1m/C3hDG4fWx3Y2ZVwG/+tQlr1h3WmIwa43FlxWal7ec0EWno0uSHbT9zlVI7G3ieiIg8mNkkePGu0UiI7mnMlAIefWczlmce1JiMGuLSZUVEIupuqL9WSTvH52yHdRylADgIIBTAhyIyzPZ+oSLyAoDbbds93tp/BiIick1mk+C520dielyvevMn39+KRd/v15SKGuKy3w1k09hF8BnnPO4L4EDdA6VUuYjcgtpDPOMAbBORItSuqWJC7TktjyulPoNmIjIRwMQBAwbojkJE5HVMJsEzt4yAr9mExT8cMOZ/+nA7qi1WJF/RX184Mrj0npWWUEptAjACwGsA9gHwB3AawEcAJiilntcYz8BzVoiI9BIRPHXTMCRf0a/e/LmPd+D1L3drSkWOXHrPilKqRQu8KaVOAHjQdiMiImqQiOCx64fA32zCa1/tMeYvfb4L1RYrHpowCCJus+aox/HYPStERERNISL49XWD8ZsJg+rNX/tqD57/ZAeUUo28klobywoREZGD+68ZiN/9Yki9Wcq3+/CnD7ezsGjCsqIZF4UjInI9yVf0x1M3Das3W/zDATz5wVZYrSwsbY1lRTOeYEtE5JrmXtYXz9w6ot5sReYh/O7dLSwsbYxlhYiIqBEz4nrjL3eMhOO5tek5h/Hw25tgYWFpMywrRERE55Ewvhdeums0TA6F5d31R/Gr9I2otlj1BfMiLCtEREQXcPu4Hvjb5LEwOzSWtZuO4f6VG1BVw8LS2lhWiIiILsLNo7vh71PGwsehsHyy7QR++VYuKmssGpN5PpYVzXg1EBGR+/jFyK54c3oU/Mz2vz6/+OkUEpfloqKahaW1sKxoxquBiIjcy7XDOiN1ZhT8fex/hX63Kw9zl6xDWVWNxmSei2WFiIioia4c3AmLZo9HgK/9r9Ef957G7MXrUFLJwuJsLCtERETNcOmACCydE4NgP7Mxy95fgJkLs1BUUa0xmedhWSEiImqm2H4dsWxeDEL97d8LvP7QWcxYkIXCMhYWZ2FZISIiaoGo3h2wYn4swgLshWXTkUJMXZCJgtIqjck8B8sKERFRC43u2Q4rE+PQLsjXmG07VoSpaZnIL6nUmMwzsKxoxkuXiYg8w4ju4VidFIeOwX7GbMeJYkxOzcSpogqNydwfy4pmvHSZiMhzDOkShtVJcYgM9Tdme06VICE1E8cLyzUmc28sK0RERE40sHMo0pPi0CUswJjtzy/FpJQMHC4o05jMfbGsEBEROVm/yBCsSY5H93aBxuxwQTkmp2bi4OlSjcncE8sKERFRK+jVMQjpyXHo1SHImB09W46ElEzsyyvRmMz9sKwQERG1kh7tg7AmOR79IoKN2YmiCiSkZmL3yWKNydwLywoREVEr6hIegNVJcRjYKcSY5RVXYnJqJn46XqQxmftgWSEiImplncICsCopDkO6hBqz06VVmJKWia1HuXTFhbCsaMZ1VoiIvENEiD9WJcZhRPcwY3a2rBpT0zKx8fBZjclcH8uKZlxnhYjIe7QP9sNb8+Mwumc7Y1ZUUYPpC7KQe7BAYzLXxrJCRETUhsIDfbFiXgyie7c3ZiWVNZixMBuZ+05rTOa6WFaIiIjaWGiAL5bOjUFs3w7GrKzKgtmLs/HDnnyNyVwTywoREZEGwf4+WDInBpcNiDBmFdVWzF2yDt/sPKUxmethWSEiItIk0M+MBbOiceXgSGNWWWNF0rJcfLH9pMZkroVlhYiISKMAXzNSZkRhwrDOxqzKYsXdK3Lx8ZbjGpO5DpYVIiIizfx9zHhj2jjcMLKLMauxKty3agM+2HhUYzLXwLJCRETkAnzNJrw2eSxuHt3NmFmsCg+lb8TbuUc0JtOPZYWIiMhF+JhNeCVhDO4Y18OYWRXwyNubsDr7kMZkerGsEBERuRCzSfDinaMweXxPY6YU8Ni7W7A844C2XDqxrGjG5faJiOhcJpPg2dtGYkZc73rzJz/YhoXf79eUSh+WFc243D4RETXEZBL86ZbhmHdZ33rzZz7cjn9+s1dTKj1YVoiIiFyUiOCJG4fi7iv615v/5ZMdeO3L3ZpStT2WFSIiIhcmIvjt9YPxwDUD681f/nwX/vrpTiilNCVrOywrRERELk5E8OsJg/DwdYPqzf/+9R48//EOjy8sLCtERERu4r6rB+LxG4bUm6V8tw9/+nC7RxcWlhUiIiI3kvSz/vjDxGH1Zot/OIAn3t8Kq9UzCwvLChERkZuZc2lf/PnWEfVmb2UdwmPvbobFAwsLywoREZEbmh7XGy/cMQoi9tmanCN4+F+bUGOx6gvWClhWiIiI3NSk8T3x8qTRMDkUlvc2HMWv0jei2oMKC8sKERGRG7ttbA+8OnkszA6N5cPNx3HfyvWoqvGMwsKyQkRE5OYmju6Gf0wdC1+zvbB8uu0k7lmRi4pqi8ZkzsGyQkRE5AGuH9EVb06Pgp/Z/lf7lztOIWm5+xcWlhFMovgAABS6SURBVBUiIiIPcc3QzkibFQ1/H/tf79/tysPcJetQVlWjMVnLsKwQERF5kCsGRWLx7PEI9DUbsx/3nsbsRetQUumehYVlRTMRmSgiqYWFhbqjEBGRh7hkQASWzo1BsJ+9sGQfKMDMhVkoqqjWmKx5WFY0U0qtVUolhYeH645CREQeJKZvByybF4tQfx9jtv7QWUxfkIXCMvcqLCwrREREHiqqd3usmB+LsAB7Ydl8pBBT0jJRUFqlMVnTsKwQERF5sNE922FVUhzaB/kas+3HizAlNRN5xZUak108lhUiIiIPN7xbOFYnxSMixM+Y7TxZjMmpGThZVKEx2cVhWSEiIvIC/9/evYfJUZV5HP/+ciNXkhgCAQQSQQIhAkKQgLIGEHTRIOqjqCgGgcDuougu3tBHV10FdRVRcSGoi8hFWB9EQFS84GWXRAgCKsjFYAAJBJJA7jfIu3+c05mi0z3TMz3T3dPz+zxPPdVVdU736Tc1lberTtWZOmkM3597GDuO2W7rukVPr+XES+az5Nn1TWxZ15ysmJmZDRB77Tiaa844jJ3HDt+6bvHydZw4bz6PrVjXxJZ1zsmKmZnZADJlh1Fce8Zh7DpuxNZ1j61Yz4mXzGfxsrVNbFl1TlbMzMwGmN1eNJJrzzyMPSaM3LpuycoNnDhvPoueXtPEllXmZMXMzGwA2nXcCK6ZexgvmThq67qlqzZy4iULeHDp6ia2bFtOVszMzAaoSWOH8/25M9l7p9Fb1y1bs5G3z1vAfUtWNbFlL+RkxczMbADbccxwrj59JvvuvP3WdSvWbuIdly7gT39vjaFgnKyYmZkNcBNGb8fVpx/Ky3btGPpl5frNvPNbC7jr0Wea2LLEyUovkHSIpK9J+pOkNZKWSLpJ0oxmt83MzKwW40YO44rTDuXA3cZtXbd6w3O8+9u3c8fiFU1smZOV3vIR4G3Ar4EPAhcAU4HfSzquie0yMzOr2dgRQ/neqa/gkMnjt65bs/E53vOd25m/aHnT2qWIaNqHtwtJhwMLI2JTYd144F7gyYg4qKv3mDFjRixcuLAPW2lmZlabtRuf47TvLmT+wx0JyvChg7j05Bkc8dKJvfY5ku6MiC6vQvjMSi+IiNuKiUpe9wxwKzCtOa0yMzPrmVHbDeE7cw7hiJfusHXdhs1bOPW7C7n1/qca3h4nK31rF2BZsxthZmbWXSOGDebSk2dw5NSOMylbtgTPbWn8FZmWTVYkjZF0vKTPSvqJpGWSIk/71PgekyRdKGmRpA2Slkq6UdLRDWj/K4FXA9f09WeZmZn1heFDB3Pxuw/mmGk7MXiQ+Po7Xs4x03ZqeDtats+KpBOAH1bZvG9E3N9F/f2BXwET8qpVwGhSghbAuRFxfi81t/yzdwTuALYAB0REl0/WcZ8VMzNrVZuf38IfHnmGQ18yoevC3dAufVaeAm4GPg3MrbWSpBHADaRE5S5gekSMBcYDXwYEnCfp2LJ6swpnb7qaXlPls8fkNo8BZteSqJiZmbWyoYMH9Xqi0h1DmvbJXbsxIq4vLUia3I26ZwB7AGtICcPjADlxOEfSnsAJwHnALYV6DwL/VONn/KV8RU6SbgT2BY6JiD93o81mZmZWQcsmKxHxfB3VT8rzq0qJSpkvkZKVgyTtU7qkFBFLgIt78oGShgI/AA4Hjo+I23ryPmZmZvZCrX4ZqNvyZZiD8+LPqhRbAJQGPDiqFz5zEHAl8Drg5Ij4ab3vaWZmZknLnlmpw76kPimQHsq2jYjYIukB4BX0znNQ/hN4K/BzYIikd5V93hW98BlmZmYDUjsmKzsXXi/ppFxp286dlKlV6Qm1x+SpnJMVMzOzHmrHZGVU4fX6Tsqty/PR9X5gRMzqST1Jc8l3Oe2+++71NsPMzKwttV2fFTouAbW8iJgXETMiYsbEib031oKZmVk7acdkZU3h9YhOyo2sUN7MzMxaTDsmK8V+Krt0Uq607Yk+bIuZmZnVqR2TlftJj9MH2K9SgXyr8dS8eF8jGlWNpNmS5q1cubLrwmZmZgNQ2yUrEbEaKA2yU+nOHIBDgbH59S/7vFGdiIgbI2Lu2LFjuy5sZmY2ALVdspJdlecnSap0a/I5eX5nRDzQoDaZmZlZD7R0siJph9JEGoSwZFxxW76sU3QJ8AhpMMGbJE3L7zdG0heBN+dy5/b1dzAzM7P6tPpzVp6usn5+2fIUYHFpISLWS3oj6RLPQcC9klaRnqkyiNSn5dyIuIUmkzQbmL3XXns1uylmZmYtqaXPrNQjIu4BpgNfAx4GtgOWAz8mjYh8fhObt5X7rJiZmXWupc+sRERdD3iLiCeBs/NkZmZm/ZAioutS1uckPU3qZ9NbdgCW9eL7DVSOY/0cw/o5hvVzDOvXFzHcIyK6fIS7k5U2JWlhRMxodjv6O8exfo5h/RzD+jmG9WtmDNu2z4qZmZm1BycrZmZm1tKcrLSvec1uQJtwHOvnGNbPMayfY1i/psXQfVbMzMyspfnMipmZmbU0JytmZmbW0pysmJmZWUtzstJGJE2SdKGkRZI2SFoq6UZJRze7ba0gD2R5vKTPSvqJpGWSIk/71FBfkuZKmi/pWUmrJd0l6UOShjXiOzSbpN0lfSDvV49K2pjjcI+k86uMcl6sP0zShyXdLWlNjuP8HNe6nljdn0iakffDn0r6q6SVOZaPS/qRpBO6qO84lpE0WtJjhb/pOZ2UdfwASXMK8ao2remkfuOOiRHhqQ0mYH/SkwUjTyuB5/PrLcBHm93GZk/ACYX4lE/7dFF3KGlcqVL5jcC6wvLtwOhmf8c+jt9ueV+Ksv3sucLyCuDIKvW3BxYWyq7NcSwt3wgMafb3bFAsLy6L42pgfdm6HwBDHceaY/rVsvjN8X7YZczm5O+8CXiyyrSoSt2GHhN9ZqUNSBoB3ABMAO4CpkfEWGA88GVAwHmSjm1eK1vGU8DNwKeBud2o9x/AccAG0h/4SGAUMJv0H/QhwCW92dAWNDjPfwy8FXhR3s9GkmLzN9I+d72kSRXqXwocTIrXbNIo6CNJ8dwAvIH07zIQzAc+SIrHmIgYExEjgN2BL+UybwE+WqGu41hG0kHAWcDvayju+G3rtoiYVGXas0qdxh4Tm53Zeap/Aj5Ax6+zXSts/2Hefmez29rkOA0uW55MDWdWgEn5DzKA91fY/kY6zmDt3+zv2YfxGwsc0Mn2feg4O/Cpsm0vL8T6+Ap1z87b1gE7Nvu7NnsCvpfjsahsveO47XceBNxBOsNXjM+cCmUdvxd+3zn5+/66m/Uafkz0mZX2cFKeXxURj1fYXvqldlAtfTPaVUQ838OqbwG2I13y2OahSBHxI+BB0hmsd/a4gS0uIlZGxD2dbL8fWJAXDy7bXIrLAxFxQ4Xq80jxHQG8ud62toE78nyXsvWO47beB8wA/isi7uqirOPXOxp+THSy0s9JGkPHfww/q1JsAWmnAjiqzxvVfo7M899GxIYqZW7J84Ee3+V5PrhsfSmGt1BBRKwHfpcXB3oMAQ7P87+VrXccCyTtCnwWWAp8ooYqjl/vaPgx0clK/7cvKXsFuLdSgYjYAjyQF6c1olFtphSzivHN7svzfQfS3QRFkoYAr8yLfy6sF+kSEdQWwwG5j+a7WfaXdBFwYl79jcJ2x3FbXwfGAOdExMrOCjp+ndpP0r2S1uc7ev4s6QJJU6qUb/gxcUi9b2BNV7xVdEkn5UrbOr211CoqxayW+I7O0+o+bVFr+hfStewtwOWF9duTOt6B99EXkPRi4LEKmzYAn4+IbxbWOY4FkmYDbyL1t7iihiqOX3U7kG7QeIYUp/3ydIak0yLiqrLyDT8m+sxK/zeq8Hp9J+XW5fnoPmxLuyrFuJb4wgCMsaT9gc/nxW9ERPEXl/fR6p4nXcJYSrp9FFJH0fMonFXJHMdM0ihSfDaTkuRaOH7bWgJ8CpgODI+ICaTv/XrSmZERwOWS/qGsXsOPiU5W+r8BecmhSTzqZwX5QXDXk25dvBP4SHmRwmvHsCAinoh8iyjpP4appLNSnwbulrRfobjj2OEzpNu8L4iI+7oqnDl+ZSLiloj4TETcGxGb8rqNEXEzqd/UX0n9z86v9hYNaqqTlTZQfLrgiE7KjaxQ3mqzNs9HdlKmuG3AxFjSi0gd6aYADwGvr9DhrhiPWmI4YOJXFBFbIuLBiDgV+ArpP+MrJJWO044jIOlA0i3Gj5GSllo5ft2Q+wCVzpbOlDSxsLnhx0QnK/1f8Zph+W2OVNj2RB+2pV2VYlxLfNcwQA5yksaS7kCbDjwKvCYillYouoqOg5v30dp8Pc8PJD0bBBzHkgtJv/Y/Tuo3O7o4Fcptl9eV/tN0/Lqv9JA9kZ5LVdLwY6KTlf7vfjpOxe1XqUD+ZTY1L9Z6ytQ6lGJWMb5ZqXf8XyI/Famd5T4DN5Oeb/EkKVF5tFLZHI+/5MVaYuh9FIrPS9oTHMeCPfL8clKnzfKp5OK8fB84fj1U7dJZw4+JTlb6uYhYTRrnAuCYKsUOJT19FOCXfd6o9nNrnh8haXiVMqXYt3188/AON5KuaS8nJSoPdVGtFMOK+2iO6xF5se1jWIPiLaPFX6WOY30cv+55ReH1I4XXDT8mOllpD6Xbyk6qMurtOXl+Z0Q8UGG7de460iBd44DTyjfmWyinkn55XN3YpjVWHkn1OtJDoZ4Fji2786eaUlz2kfSGCttPJyXU60nDQ7QtSYNreO7Eh/L8OdI4QiUDPo4RMTkiVG0qFD0lr5tcWDfg41fS1T4oaXs6xqa6PSKeLmxu/DGxmeMSeOqdidSxdnHeMe4EpuX1Y4Av0jEWxrHNbmuzJ9LzBEpTcZyQmWXbBpXV+wIdY4a8mzzOEGkgr9Jo11c2+/v1cewGk0YCDtL1/5ndrH9NrrsMOK7wnifTMVrr55r9PRsQx8n57/S9wIsL6weR+qhcWdgvv+I4dju+XY267PjF1v1wAXAqsHth/TDgdcCfciyeB46qUL+hx0TlN7d+TtIBpNNtE/KqVaR72weRdppzI6La7WcDhqRad/gpEbG4UG8o6fbc4/KqjaQ/4lLnvTuAoyNdlmtL+VkLv8mLG+gYwqGSxyLikLL62wO/omN4iHWk/yS2y8s3AW+KiOd6rdEtSNJkXvgY/Q2kSz1j6IgFwGXA6eXxcBw7V/gbPyUiLquw3fGj6n64lvRQuKF53TrgzIj4XoX6DT0m+jJQm4g0wNx04GvAw6Q/vOXAj4FjnKjUJyI2k4Y+P5P0a2QjKQm8m/RckVe1c6KSFY8Xw4GdOpkmlleOiFWkfi4fBe4hxW8jKZ5nkEbBbev/ILIlpMfpzyPtPytJp9M3kzoufpu0P51SKR6OY30cv62WAu8HriUNx7KOdAlsHakf5BdIZ+m3SVSg8cdEn1kxMzOzluYzK2ZmZtbSnKyYmZlZS3OyYmZmZi3NyYqZmZm1NCcrZmZm1tKcrJiZmVlLc7JiZmZmLc3JipmZmbU0JytmZmbW0oY0uwFmZl2RNAR4F/B24ADSGFhrgSdJw0v8FvhVRNxRqHMgcAKwuNIYMWbWf/hx+2bW0iRNBG4GZhRWbyCNRbI9UBrqfmVEjCvUmwP8N/CbiJjVkMaaWZ/wZSAza3VXkBKV1cCHgZ0jYkROTMYCxwDfBJ5tXhPNrC/5MpCZtSxJ+wDH5sX3RsQPitvzqK6/AH4h6ZxGt8/MGsNnVsyslb2s8PqmzgpGxPrSa0lBugQE8GpJUTbNKq8v6VWSvi/p75I2Slou6ReS3iFJFcrPyu+1OC/PlnSrpGckrZE0X9I7e/CdzayMz6yYWX+xK7CoxrJLgRGkPi2bgRVl2zcVFyR9gXSJqWQ1MA44Ok/HSzopIrZU+jBJZwNfBQJYmT97JjBT0mER8b4a221mFfjMipm1sjsLry/KnW27FBGTgLPz4m0RMalsuq1UNicaHwaeBv4ZGB8R2wOjgLcBT5DuQvpIlY+bCHwJuJzUn2Y8sAPw5bz9LJ9hMauP7wYys5Ym6bvAyXlxE/A7YAFwBykRebpKvTl0cTeQpHHAY8Bw4JURcXuFMjOB20gdeCdFxKa8fhZway72c+C1UXZAlXQZ8B7gr8De5dvNrDY+s2Jmre504CukRGUY6bLMx4Hrgack3S7ppEr9SmrwFmA08L+VEhWAiFhAepbLeODgKu9zXpVE5HN5vhfp+TBm1gNOVsyspUXEpoj4N2A34EzgauAhUv8QgENItzdfI6m7x7TD8/xQSU9Wm4Ddc7ndKrzHZuD/qrT9IdJlJICDutk2M8vcwdbM+oWIeAq4JE9I2gmYDXySlES8lZQ0XNiNt905z0fkqSsjK6xbVro0VMXj+XNq6m9jZtvymRUz65ciYmlEfIt0xmJpXv3ebr5N6Rh4QUSohumyHjS1J5enzKzAyYqZ9WsRsQz4UV7cu5vVS0nOtDqasIOkYZ1sL529qdgR2My65mTFzNrB2jwvXo4pPROlszMb8/P81ZIm9PCzhwKHVdogaS9gl7z4hx6+v9mA52TFzFqWpCmS9uyizEjS6MoAdxc2rcrzcVT3P6REZzjpWSmdfc74TjZ/rMrdSB/L84eAezp7fzOrzsmKmbWy/YAHJF0n6W2SSpdUkDRK0mzSc1em5NXFzrX35vk0SYdWevOIWE5HQnGKpGslTS98xvD8GP6LqHLHD7AOOAr4tqQdc71x+am4pT40/+5nrJj1nB8KZ2YtS9JrgZ+WrV5PutwztrDueeCTEfH5svq/Af4hL64gPUYf4O35+Smlcp8APkPHJaN1wMb8GaUfdYsjYkqhzizSQ+EeIT1q/wLS7dTPltW7KCLOqvlLm9k2nKyYWUuTtDfpFuVXAdNJYwQNIyUeDwO/Bb4VEfdWqDuBlIT8Y6EewJER8euysi8DzgKOBF4MDCZ1iv0jcANwXb59ulR+FjlZiYjJ+SzPvwIvJ/Vj+SPwjYi4su4gmA1wTlbMzHqgPFlpbmvM2pv7rJiZmVlLc7JiZmZmLc3JipmZmbU0JytmZmbW0tzB1szMzFqaz6yYmZlZS3OyYmZmZi3NyYqZmZm1NCcrZmZm1tKcrJiZmVlL+3+IqeDNhUc/XQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xs = gradient_descent(x0, [0.1]*50, quadratic_gradient)\n", "error_plot([quadratic(x) for x in xs])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Constrained Optimization\n", "\n", "Let's say we want to optimize the function inside some affine subspace. Recall that affine subspaces are convex sets. Below we pick a random low dimensional affine subspace b+U and define the corresponding linear projection operator." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# U is an orthonormal basis of a random 100-dimensional subspace.\n", "U = np.linalg.qr(np.random.normal(0, 1, (1000, 100)))[0]\n", "b = np.random.normal(0, 1, 1000)\n", "\n", "def proj(x):\n", " \"\"\"Projection of x onto an affine subspace\"\"\"\n", " return None\n", "# What is this???" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x0 = np.random.normal(0, 1, (1000))\n", "xs = gradient_descent(x0, [0.1]*50, quadratic_gradient, proj)\n", "# the optimal solution is the projection of the origin\n", "x_opt = proj(0)\n", "error_plot([quadratic(x) for x in xs])\n", "plt.plot(range(len(xs)), [quadratic(x_opt)]*len(xs),\n", " label='$\\\\frac{1}{2}|\\!|x_{\\mathrm{opt}}|\\!|^2$')\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The orangle line shows the optimal error, which the algorithm reaches quickly. The iterates also converge to the optimal solution in domain as the following plot shows." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "error_plot([np.linalg.norm(x_opt-x)**2 for x in xs])" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }