{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Douglas Rachford Proximal Splitting\n", "===================================\n", "\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This numerical tour presents the Douglas-Rachford (DR) algorithm to\n", "minimize the sum of two simple functions. It shows an\n", "application to\n", "reconstruction of exactly sparse signal from noiseless measurement using\n", "$\\ell^1$ minimization." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "from __future__ import division\n", "%pylab inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Douglas-Rachford Algorithm\n", "--------------------------\n", "The Douglas-Rachford (DR) algorithm is an iterative scheme to minimize\n", "functionals of the form\n", "$$ \\umin{x} f(x) + g(x) $$\n", "where $f$ and $g$ are convex functions, of which one is able to\n", "compute the proximity operators.\n", "\n", "This algorithm was introduced in\n", "\n", "P. L. Lions and B. Mercier\n", "\"Splitting Algorithms for the Sum of Two Nonlinear Operators,\"\n", "_SIAM Journal on Numerical Analysis_\n", "vol. 16, no. 6, 1979,\n", "\n", "\n", "as a generalization of an algorithm introduced by Douglas and Rachford in\n", "the case of quadratic minimization (which corresponds to solving\n", "a positive definite linear system).\n", "\n", "\n", "To learn more about this algorithm, you can read:\n", "\n", "\n", "Patrick L. Combettes and Jean-Christophe Pesquet,\n", "\"Proximal Splitting Methods in Signal Processing,\"\n", "in: _Fixed-Point Algorithms for Inverse\n", "Problems in Science and Engineering_, New York: Springer-Verlag, 2010.\n", "\n", "\n", "\n", "The Douglas-Rachford algorithm takes an arbitrary element $s^{(0)}$, a parameter $\\ga>0$, a relaxation parameter $0<\\rho<2$ and iterates, for $k=1,2,\\ldots$\n", "$$\n", "\\left|\\begin{array}{l}\n", "x^{(k)} = \\mathrm{prox}_{\\gamma f} (s^{(k-1)} )\\\\\n", "s^{(k)} = s^{(k-1)}+\\rho\\big(\\text{prox}_{\\ga g}( 2x^{(k)}-s^{(k-1)})-x^{(k)}\\big).\n", "\\end{array}\\right.\n", "$$\n", "\n", "It is of course possible to inter-change the roles of $f$ and $g$,\n", "which defines a different algorithm.\n", "\n", "The iterates $x^{(k)}$ converge to a solution $x^\\star$ of the problem, i.e. a minimizer of $f+g$.\n", "\n", "Compressed Sensing Acquisition\n", "------------------------------\n", "Compressed sensing acquisition corresponds to a random projection\n", "$y=Ax^\\sharp$ of a signal $x^\\sharp$ on a\n", "few linear vectors (the rows of the matrix $A$). For the recovery of $x^\\sharp$ to be possible, this vector is supposed\n", "to be sparse in some basis. Here, we suppose $x^\\sharp$ itself is sparse." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We initialize the random number generator for reproducibility." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "random.seed(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dimension of the problem." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "N = 400" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Number of measurements." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "P = round(N/4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create a random Gaussian measurement matrix $A$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "A = randn(P,N) / sqrt(P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sparsity of the signal." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "S = 17" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We begin by generating a $S$-sparse signal $x^\\sharp$ with $S$ randomized values.\n", "Since the measurement matrix is random, one does not care about the sign\n", "of the nonzero elements, so we set values equal to one." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sel = random.permutation(N)\n", "sel = sel[0:S] # indices of the nonzero elements of xsharp\n", "xsharp = zeros(N)\n", "xsharp[sel] = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We perform random measurements $y=Ax^\\sharp$ without noise." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y = A.dot(xsharp) # matrix-vector multiplication in Python, more precisely dot product of a 2-D array with a 1-D array." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compressed Sensing Recovery with the Douglas-Rachford algorithm\n", "------------------------------------\n", "Compressed sensing recovery corresponds\n", "to solving the inverse problem $y=A x^\\sharp$, which is ill posed because\n", "$x^\\sharp$ is\n", "higher dimensional than $y$.\n", "\n", "\n", "The reconstruction can be performed by $\\ell^1$ minimization,\n", "which regularizes the problem by exploiting the prior knowledge that the solution is sparse.\n", "$$ x^\\star \\in \\arg\\min_x \\norm{x}_1 \\quad\\mbox{s.t.}\\quad Ax=y$$\n", "where the $\\ell^1$ norm is defined as\n", "$$ \\norm{x}_1 = \\sum_{n=1}^N \\abs{x_n}. $$\n", "\n", "\n", "This is the minimization of a non-smooth function under affine\n", "constraints. This can be shown to be equivalent to a linear programming\n", "problem, for wich various algorithms can be used (simplex, interior\n", "points). We propose here to use the Douglas-Rachford algorithm.\n", "\n", "\n", "It is possible to recast this problem as the minimization of $f+g$\n", "where $g(x) = \\norm{x}_1$ and $f(x)=\\iota_{\\Omega}$ where $\\Omega =\n", "\\enscond{x}{Ax=y}$ is an affine space, and $\\iota_\\Omega$ is the indicator\n", "function\n", "$$ \\iota_\\Omega(x) = \\choice{ 0 \\qifq x \\in \\Omega, \\\\ +\\infty \\qifq x \\notin \\Omega. } $$\n", "\n", "\n", "The proximal operator of the $\\ell^1$ norm is soft thresholding:\n", "$$ \\text{prox}_{\\gamma \\norm{\\cdot}_1}(x)_n = \\max\\pa{ 0, 1-\\frac{\\ga}{\\abs{x_n}} } x_n. $$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def prox_gamma_g (x, gamma) :\n", " return x - x/maximum(abs(x)/gamma,1) # soft-thresholding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the 1-D curve of the thresholding." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-1.0, 1.0, -0.80000000000000004, 0.80000000000000004)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "q/8PAFIY33RARSoAAAAASUVORK5CYII=\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(9,6)\n", "t = arange(-1,1,0.001)\n", "plot(t, prox_gamma_g(t,0.3))\n", "axis('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The proximity operator of $\\gamma$ times the indicator function of $\\Omega$ is projection onto $\\Omega$ \n", " and does not depends on $\\gamma$.\n", "$$ \\mathrm{prox}_{\\gamma f}(x)=\\mathrm{prox}_{\\iota_\\Omega}(x)=P_\\Omega(x) = x + A^* (A A^*)^{-1} (y-Ax). $$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pA = pinv(A) # pseudo-inverse. Equivalent to pA = A.T.dot(inv(A.dot(A.T)))\n", "def prox_f (x, y) :\n", " return x + pA.dot(y-A.dot(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We set the values of $\\gamma$ and $\\rho$.\n", "Try different values to speed up the convergence." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "gamma = 0.1 # try 1, 10, 0.1\n", "rho = 1 # try 1, 1.5, 1.9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Number of iterations." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "nbiter = 700" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " \n", "__Exercise: Implement nbiter iterations of the Douglas-Rachford algorithm.\n", "Keep track of the evolution of the $\\ell^1$ norm.__

" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "s = zeros(N)\n", "En_array = zeros(nbiter)\n", "for iter in range(nbiter): # iter goes from 0 to nbiter-1\n", " # put your code here\n", " En_array[iter] = norm(x, ord=1) \n", "x_restored = x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "We display the original and the recovered signals." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "c22STxljPDvJS5O8Zk21zkZVXdVdwxS2ZR6JuczVtsxlW+aRbNdcLlR68962ZW9vyzwSc5mrbZnL\n", "tswj2a65HMfFh9x+ZZJ7xhjvT5KquiXJdUnuXLrPi5P8RJKMMd5eVU+pqsvGGA/uHqzq6oeS1BSF\n", "H98lSR766+QjjyQXVZInZeXaPukJVVc/8thx3pyqqz90fuPsruV8xpjiuMvz2D3uUZ6XKWo6H+eO\n", "l3zSm6uurmmOt9c8LqmDn5fD5n4+z81e6zKFdazPYftl91zWuUfWNfYlSZ45kuwx7tR75ST+DZ3k\n", "miw7zveW3XX+gz9Pnvzw9DVujC3uzWcdZb9sc29eHvt8/w1tc29OHfy8XKi9eXncvZ6XC7E3775t\n", "9/Nyofbm5WMd9//+x+/NhwXTy5Pcu3T5viSft8J9rkjyuOaXPOuw452Qj0/yoiQ/8VFHe/yfJXnW\n", "RY8f51mXHL+WVcaY4rjJuXnsN+75mKqmox7v456YPGsN4z7rksOfl8Pmfr7Pze51mcI61meV/bI8\n", "l3XukXWNfXbcb8/jx516r5zUv6GTWpNlx/2eu/vxv3jpzp8zy1InZ0t781lH3S/b2pv3GntV29yb\n", "97p+lcesevtum9Kb9xp3twutN+9321Ees029ea9jHeexx+/NhzWjseI4uyvY53GfsOJw6/a9Sf5N\n", "jl7PpYvH7h7nKOMdZYwpjpucm8d+456PqWo66vF2z2Wqcfda51Uecz637zbVXI5Tw1HG3MvyXNa5\n", "R9Y19tlxL91j3Kn3ykn9GzqpNVl23O+5x3381tnS3nzWUdd7W3vzXmOvapt7817Xr/KYVW/fbVN6\n", "817j7nah9eb9bjvKY7apN+91rJN67N5qjP37W1V9fpKbxhinF5e/J8kjY4zvX7rPf0lyZoxxy+Ly\n", "XUm+dPfbhapq1UYKACsZY1xwL5vqzQDM2VF782GvmL4zybOr6hlJHkjy1Umu33WfW5PcmOSWRbP8\n", "s71+huVC/M8DAKyB3gzA1jkwmI4xHq6qG5O8KclFSW4eY9xZVTcsbn/tGOMNVXVtVd2T5ENJvnHt\n", "VQPABUpvBmAbHfhWXgAAAFi3A3+P6RRW+SXgc1ZV76+qd1XVbVX1jsV1T62q/1VVv1NVb66qp3TX\n", "uZeq+vGqerCq3r103b61V9X3LNbprqr68p6q97bPXG6qqvsWa3NbVV2zdNss51JVp6rql6vqt6rq\n", "PVX1bYvrN25dDpjLRq1LVT25qt5eVbdX1W9X1X9YXL+Ja7LfXDZqTZZV1UWLmn9hcXnj1mWO9OY+\n", "29Kbt6UvJ3rzHOeiN89zLmetrTePMdb2lZ23GN2T5BlJnpjk9iTPWecx1zCH30vy1F3X/UCS7178\n", "/WVJ/mN3nfvU/sVJnp/k3YfVnp1f0n77Yp2esVi3J3TP4ZC5vCLJd+xx39nOJTufrf28xd8/Jsl7\n", "kzxnE9flgLls4rpcsvjz4iRvS/JFm7gmB8xl49ZkqcbvSPLfk9y6uLyR6zKnr+jN3bVvRW/eZx4b\n", "+b3mgH62ieuiN89sHgfMZePWZKnGtfTmdb9i+ugvAR9jPJTk7C8B3zS7Pxzi0V9cvvjzK062nNWM\n", "MX41yZ/uunq/2q9L8voxxkNj55e235Od9ZuFfeaS7P3LkmY7lzHG748xbl/8/S+T3Jmd3ze4cety\n", "wFySzVuXv1r89UnZ+U/7n2YD1yTZdy7Jhq1JklTVFUmuTfLfcq7+jVyXmdGbG21Lb96WvpzozZnv\n", "XPTmGc5lnb153cF0r1/wffk+952rkeQtVfXOqvqWxXWXjXOfbvhgkst6SjuS/Wp/enbW56xNWatv\n", "rao7qurmpbcNbMRcaucTNZ+f5O3Z8HVZmsvbFldt1LpU1ROq6vbsPPe/PMb4rWzomuwzl2TD1mTh\n", "h5N8V5JHlq7byHWZGb15frZpX2/i95pH6c3zmYve/KhZzSVr7M3rDqbb8MlKXzjGeH6Sa5L8q6r6\n", "4uUbx87r1Bs5zxVqn/u8XpPkmUmel+QDSX7wgPvOai5V9TFJfi7Jt48x/mL5tk1bl8VcfjY7c/nL\n", "bOC6jDEeGWM8L8kVSb6kqq7edfvGrMkec7kqG7gmVfUPk/zBGOO27H1GeaPWZWa24XnRm+dp477X\n", "LNObHzWLuejNjx1i7UWuYN29ed3B9P4kp5Yun8pjU/PsjTE+sPjzD5P8z+y8/PxgVX18klTVJyT5\n", "g74Kz9t+te9eqysW183WGOMPxkJ23k5w9q0Bs55LVT0xO43vp8YYP7+4eiPXZWkuP312Lpu6Lkky\n", "xvhgkl9M8oJs6JqctTSXz9nQNfmCJC+uqt9L8vokf6+qfiobvi4zoTfPz1bs6w39XpNEb156+Kzm\n", "kujNmddc1tqb1x1MH/0l4FX1pOz8EvBb13zMyVTVJVV16eLvH53ky5O8Oztz+IbF3b4hyc/vPcIs\n", "7Vf7rUm+pqqeVFXPTPLsJO9oqG9li41/1ldmZ22SGc+lqirJzUl+e4zxI0s3bdy67DeXTVuXqnra\n", "2bfPVNVHJfmyJLdlM9dkz7mcbRYLs1+TJBljvHyMcWqM8cwkX5PkrWOMr88GrssM6c3zsxX7etO+\n", "/5+lN89vLnrzPOey9t481v+pTddk5xPB7knyPes+3sS1PzM7nyR1e5L3nK0/yVOTvCXJ7yR5c5Kn\n", "dNe6T/2vT/JAkr/Ozs8TfeNBtSd5+WKd7kryou76D5nLNyX5ySTvSnLH4h/AZXOfS3Y+he2RxZ66\n", "bfF1ehPXZZ+5XLNp65Lk7yT5v4t5vCvJdy2u38Q12W8uG7Ume8zrS3Puk/82bl3m+BW9ubP+rejN\n", "e8xjI/vyoja9eWZzOaCfbeKa6M0rzqUWDwAAAIAW634rLwAAABxIMAUAAKCVYAoAAEArwRQAAIBW\n", "gikAAACtBFMAAABaCaYAAAC0EkwBAABo9f8BPOablArDCpgAAAAASUVORK5CYII=\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (subfig1,subfig2) = subplots(1,2,figsize=(16,7)) # one figure with two horizontal subfigures\n", "subfig1.stem(xsharp)\n", "subfig1.set_ylim(0,1.1)\n", "subfig2.stem(x_restored)\n", "subfig2.set_ylim(0,1.1)\n", "subfig1.set_title('$x^\\sharp$')\n", "subfig2.set_title('$x_\\mathrm{restored}$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the original signal is highly sparse, it is perfectly recovered.\n", "\n", "We display the convergence speed of the $\\ell^1$ norm on the first half iterations, in log\n", "scale." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/condatl/anaconda/lib/python2.7/site-packages/IPython/kernel/__main__.py:1: RuntimeWarning: divide by zero encountered in log10\n", " if __name__ == '__main__':\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "iVBORw0KGgoAAAANSUhEUgAAAiQAAAFwCAYAAACIBGAMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", "AAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmYXFWd//H3l4QlYQ9bCElI2EPYdxiQgIAMiIjI4Mq4\n", "OzqK+nNHlKgzbijq47iMwzCPiuCKyiJgBBpB2UkgK0nIQkI2si90k4R8f3+cc7tv37pV3bV1VXd9\n", "Xs+Tp6rOvbfqdBGST87yvebuiIiIiDTSdo3ugIiIiIgCiYiIiDScAomIiIg0nAKJiIiINJwCiYiI\n", "iDScAomIiIg0XN0CiZmNMrMHzGy6mU0zs6vr9VkiIiLSv1m96pCY2XBguLtPMbNdgKeAN7r7zLp8\n", "oIiIiPRbdRshcfdl7j4lPt8IzARG1OvzREREpP/qkzUkZjYGOB54rC8+T0RERPqXugeSOF3zO+Bj\n", "caREREREpJvB9XxzM9se+D1ws7v/Mee4bqQjIiIygLi7VXJdPRe1GvAzYJW7f6LIOV5pxwc6M5vo\n", "7hMb3Y9mpe+nNH0/pen7KU7fTWn6fkqr5u/1ek7Z/BPwDuAcM5scf11Yx88TERGRfqpuUzbu/jAq\n", "vCYiIiK9oMDQvNoa3YEm19boDjS5tkZ3oMm1NboDTayt0R1ocm2N7sBAVbc1JL36cK0hERERGTCa\n", "dQ2JiIiISK8okIiIiEjDKZCIiIhIwymQiIiISMMpkIiIiEjDKZCIiIhIwymQiIiISMMpkIiIiEjD\n", "KZCIiIhIwymQiIiISMMpkIiIiEjDKZCIiIhIwymQiIiISMM1PJCYMbTRfRAREZHGanggAd7S6A6I\n", "iIhIY5m7N+7DzRx8OXCCO0sa1hERERGpmpm5u1sl1zbDCMmPgJvNGNTojoiIiEhjNEMg+U9CPz7f\n", "6I6IiIhIYzR8ysbdzYyRwJPAu925u2EdEhERkYr19ykb3FkMvBn4XzMmmrFro/skIiIifacpAgmA\n", "Ow8DpwBHAPPNeFdjeyQiIiJ9ZXCjO5AWR0reYsZ44E4zdnDnp43ul4iIiNRXUwWShDvTzTgfeNCM\n", "1e78rtF9EhERkfppykAC4M5cMy4CJpmxzp1Jje6TiIiI1EfTrCHJ484zwOXAL804tdH9ERERkfpo\n", "6kAC4M5DwLuBP5lxZKP7IyIiIrVX10BiZhea2Swzm2Nmn630fdy5C/gkcI8Z+9WuhyIiItIM6lYY\n", "zcwGAc8B5wEvAk8Ab3X3malzyiqgYsZXgdOAC915tcZdFhERkSo0a2G0U4C57r7A3bcAvwIurfI9\n", "vwzsAFyTd9CMS824pMrPEBERkT5Wz102BwCLUq8XQ3ULU93ZasZbgafMeMidtuSYGccCPwUGmXGy\n", "O/Or+SwRERHpO/UcIanLXJA7S4B3Ab8wY2jq0CXALcDPgavq8dkiIiJSH/UcIXkRGJV6PYowStKN\n", "mU1MvWxz97ae3tide814DPgw8O3Y/M/AdcDW2PblinotIiIivWJmE4AJNXmvOi5qHUxY1PpaYAnw\n", "OFUuau3+/pwK/AI4PDatA8YAG4BVwBh3Vlf8A4iIiEhZmnJRq7tvBT4C3AvMAH6dDiM18Hh8PAXY\n", "F9jizmp3tsTPG1/DzxIREZE6qmvpeHe/G7i7Pu+Nm3Ez8E7CDp45qcPTCYHkoXp8toiIiNRW097L\n", "ppduBh4DnqV7IJkGHNWQHomIiEjZmr50fCnuzCOsU/kYMDt1aDqozLyIiEh/0a8DSXQzMBL431Tb\n", "PMICVxEREekH6rbLplcfXsVq3K73YHtgrHvXCIkZOxF23QxViXkREZG+0ZS7bPqKO1vSYSS2dQBr\n", "QDfiExER6Q/6fSApYSFwYKM7ISIiIj0byIHkBWB03gEz3m7Gz8w4qI/7JCIiIjkGciBZABxkxnZm\n", "DDfDAMw4HbgeWAn83owdGthHERERYWAHkgeBS4H7gbnAH8wYAnwH+DzwKUKJ+X9tWA9FREQEGNiB\n", "5D5CcbRlwN5ABzAZGALc7I4DXwK+oFESERGRxur3235Lvz+XAA+7syZuD74MeDIWVEvOuRe43Z0f\n", "1qsfIiIiraCqm+YO5EDSuz5wFNAGvMGdfzSyLyIiIv1ZS9chqZY70wjrSP5gxvsb3R8REZFW1PIj\n", "JAkzDgb+ThgpebzR/REREelvNEJSA+48D3wW+E6yRVhERET6hgJJdzcDw4FTG90RERGRVqJAkhJv\n", "xPcL4G1JmxlXm7HajBs0ciIiIlIfCiSFbgGuNGOwGccDXwDOBS4kbBsWERGRGlMgyXBnLqHs/GsJ\n", "FV2/7s4UwvqSTzWwayIiIgOWdtnkMOMDwP8DdgcOc2eDGYOBRcDZ7sxuaAdFRESakHbZ1N6NwF3A\n", "Fe5sAHBnK/An4PXJSWYcZ8aXzRjVmG6KiIgMDBohKYMZVwDvcudiM0YQ7o3zV+BY4AR3Nje0gyIi\n", "Ig2kEZK+8wBwVrwZ38eBX7nzdmAF8OaG9kxERKQfUyApgzsrgbnAWcB7gO/FQz8E3teofomIiPR3\n", "mrIpkxnXE3bgrHPnnNi2C7AM2M+dTY3sn4iISKNoyqZv/QnYBfhG0uDORsJ6kjMb1SkREZH+TIGk\n", "TO487M5h7tybOdRGmMrBjCFm3GnGk/GmfSIiIlKCAkntPA0cH59fA7wC/BH4ccN6JCIi0k9oDUmN\n", "mDEG+AcwGlhMGC1ZCMwB3ujO5NS55k7jvngREZE6aLo1JGZ2vZnNNLNnzOw2M9u9Hp/TZBYCOwFX\n", "AovdmRPrkvwOeENykhnDgZlmPGvGXo3pqoiISHOp15TNX4Dx7n4sMJtwT5gBLY54tAHfAX6VOnQX\n", "cHHq9Zdj2wPAN/uqfyIiIs2s7lM2ZnYZcLm7vyPn2ICZsgEw483Ab4ED3Xkhtu0IrAH2jKctAY4j\n", "rDGZDRygrcIiIjIQNN2UTcZ7gD/3wec0gzuAtyRhBMCdV4DngXHAGcAcdxa5swJ4FLioIT0VERFp\n", "IoMrvdDMJgHDcw5d4+53xHO+AGx291tKvM/E1Ms2d2+rtE+NFsPHr3MOTQWOIYySPJVqfwA4nTCq\n", "IiIi0q+Y2QRgQk3eq15TNmb2LuD9wGvdvaPIOQNqyqYYMz4H7APsATzuzn/H9vOAL7nzmtS5g+Od\n", "hUVERPqVppuyMbMLgU8DlxYLIy1mOmHK5mjCaEniKeB4MwYBmHE5sNGMm81UI0ZERFpHvf7S+wGh\n", "vPokM5tsZj+q0+f0F88BRwFHAtOSRnfWAGuB0fEOwt8n7Mg5Gq0tERGRFlLxGpJS3P3QerxvPzYf\n", "2J+woHV95tgi4ID4a5k795nxXeDDwJ3JSWYMJiyKfUq7ckREZKDRtEAfcGcLMA94Iufwi4QwMoFQ\n", "xwTg98Br4pbhxI+AW4G/JFM8IiIiA4UCSd+ZCTyW0/4iMJJQav5BAHc2EKZ5TgYw4wDgzcARgANv\n", "6YP+ioiI9BkFkr7zb8BNOe3JCMnBwKxU+0PAmfH5lcAfYlD5IVBQZE5ERKQ/UyDpI+4scydvx9Fi\n", "wgjJyPg8MYWwCBZCMPlLfH47cKYZu9arryIiIn1NgaTxXgROBNa7055qnwccFJ+PI2wdJi5onRqv\n", "ERERGRAUSBpvGjAWusrNR/OAg+J24DHAnNSxx4FT+qR3IiIifUCBpMHcWQ08Q2EgWQIMA44FFsay\n", "9InOQGKGmfFTM+aZcUZf9FlERKTWFEiaw/3AgnSDO9ti2/l0Hx0BmAEcHp+/kXA/nM8Dt8R6JSIi\n", "Iv2KAklz+DLw1Zz2+YSRkGU57WPNMMKOm++482tgIXB5+kQzLjLjRrPO9SgiIiJNR4GkCbizPpaR\n", "z1pKmLJZkTl/HfAKYWfOeXRVdP05YcQEgBhCfgZsAm5XQTUREWlWCiTNbRlhQeuKnGPzCOFjnjsr\n", "Y9tfgdembsz3duBWdz4GdAAX1Le7IiIilVEgaW5L42NeIJkPXAo8mzS4sxBYT1f9ksuB38bnNwJX\n", "1aebIiIi1VEgaW7J2pG8QPIM4f43UzPtU4CjzdiZsPD1H7F9EuH+OFaHfoqIiFRFgaS5lRoh+SUw\n", "iMJAMp0wQnIoMNedV2P7PMAIU0AiIiJNRYGkuRUNJO4sAD4JPJI5NB0YTxgdeS51vhNGS05P2swY\n", "lLmjsIiISEMokDS3ZYTdNKvyDrpzgzvrM80zyAkkqWNHAJixF6FK7EIzTqhlp0VERMqlQNLE4n1r\n", "DnFnaxmXzQUOJEzbZAPJc8Bh8flnCXcU/iLw3ezaEjOONOPkijouIiJSJgWSJufe7Q7AvTm/gzCi\n", "cg4wK3N4NnBYDB/vBK4H/o9wL53xyUlmjCOElTvNuLjy3ouIiPSOAsnANA/Yl8IRktmEEZJxwGbC\n", "otethMJqr0ud90Xga8C7ga9qZ46IiNSbAsnANB9YHiu6doqvNwJvAx6IC10B7gUuhLDQlVBA7dfA\n", "PcDuwPF91G8REWlRCiQD03wKR0cSs4G3Ao+l2h4FTowjIScQwszieIO/PwPn1rOzIiIiujPswPQw\n", "YSQkz2zgLML24MQKwAnTPMcAT6SO/QO4og59FBER6aQRkgHInUnuXF/kcDJyMj11vgMzCWtLxgAL\n", "Uuc/ApxR+16KiIh0USBpPbOBZe4FtU1mELYKHwgsTLUvBHY2Y3cAM7Yz40ozju2T3oqISEtQIGk9\n", "Se2RrDnAwWRGSOLoyQvA6Nj0GeBa4H4zDqlnR0VEpHUokLQYd1a7c2POoeWENSTZERIIgeRAM3YA\n", "ribs0vkemWBjxmlmTDXj2tr3XEREBjItapXECmAEsD8UFGNbSBghORlY6s5UM1YAs8zY3p0tcYfO\n", "TcAPgU+b0ebOw33YfxER6ccUSCSxAjiOsOV3c+ZYMmUzmLgDx53lZjxPWPD6IHA0sKM7P4wjKR8E\n", "BRIREemduk7ZmNknzWybmQ2r5+dITbwEDKNwugbilA1wIvBUqv0+4DXx+XnApPj8ZuCNZgq8IiLS\n", "O3ULJGY2Cjif/L/gpPm8FB/z/nstAYYTKrZOTrVPJ2wVhlDb5AEAd14CXiR1fxwREZFS6jlCcgNh\n", "R4b0A/GmfOvpXoMksRLYGxiZOZ7ULoEwgvJ86tgjwGm17qeIiAxMdQkkZnYpsNjdn63H+0vdrCB/\n", "hGQlYbHrrsDqVPsswt2DtwNG0X0x7OOERbAiIiI9qjiQmNkkM5ua8+sNwOeB69KnV91T6QtL6D7K\n", "kVgF7AWsive3AcCdDcAawh2EdyMEmsQ8Qk0TAMy4woxZZlxVh36LiEg/V/GiQ3c/P6/dzI4CxgLP\n", "mBmEYf6nzOwUd1+Rc/7E1Ms2d2+rtE9StTfRfQQEAHdeMWMD3QNHYilhd86SdFgBFhH+22PGUOAn\n", "wIeBH5pxv3vXaIoZw4AjgEdSdyAWEZEmZ2YTgAk1eS/3+v75b2bzgRPdveAvOjNzd9foST8Qt/jO\n", "d+e8TPskwvTMa9w5K9W+GyGs7AJcBbzZnUvM+D5hpOUr8bwdCDt39gL+x73byJqIiPQj1fy93heV\n", "WvUv3oFhJfkjJGsJNUgWpRvdWQ9sBfYkpOc74qHbgEtTp76VEFyOBz5mxt417bWIiPQLdQ8k7n5Q\n", "3uiI9DulAsk4QqjIWkRY7HoMkCxw/jtwkBn7xNcXAr92ZzlwO/COWnZaRET6B93LRnqrVCAZS7gX\n", "TtYiwsLWcYSaJbizFZgKHBV357yWroJqf4LuU0IiItIaFEikt24F7slpXwsMIj+srAJOAZbFHTmJ\n", "acBRhK3E29x5IbY/Apweg4qIiLQQ/cEvveLOPe48nXNoTXzMGyHZQNg9k61tMo2w7mQUdIYR3FlC\n", "KM52WNUdFhGRfkWBRKq1Nj7mjZBsAA4ghIy06YSy8qPILIYlrDVJqr9ixtFmvM2M7WvTXRERaUa6\n", "+ZlUKwkkxUZIRgBzMu1LgP0IdUoWZ44ldxbGjNGEG/gtAY4Erq1Nl0VEpNlohESqlQSSl3KObSCs\n", "E8mOkKwi3Bsnb4RkITGQAP8K/Aa4CPhILKAGgBmDzPhy/KXfxyIi/Zz+IJdqrQXWuvNKzrGNhFG4\n", "bCBZSyiYNpb8EZID4/O3AjfHtSUPAJekznsv8M+EXTmfqOYHEBGRxlMgkWrNI9y7KE+ys6ZbIIkl\n", "5lcDx1I4QvICMDqWmx8LPBnbswXVPgx8GvgocLWZph9FRPozBRKpijsd7vykyOENmce0VYTAMT/T\n", "vpAwQnI4MCfWLYGwJfhEADP2Ag4C/hF3/qwCTq/4hxARkYZTIJF6yh0hiVYCrwDLMu0rCOtLxgMz\n", "Uu3zgGFm7AmcDTzszpZ4rA267qMjIiL9jwKJ1NPG+JgXSFYBCzJ3CMadVwlB5SRSgSSe9yyhDP14\n", "YErqsoeAM2vXbRER6WsKJFJPPY2QzCty3UZCQbUXMu1TCRVeDwBeTLU/TggwnbTzRkSkf9Ef2lJP\n", "pQLJKgrXj6SvOwBYl2lfAgynMJAsBXY1Y2cAMw4DFpvxlBm7VNh3ERHpQwokUk+lFrX+AvhpietG\n", "UhhIVgD7kgkkcTonWQwL8B/A9wkl6r+YfXMzdtEIiohIc9EfylJP7cA2ckZI3JnmzjNFrtsA7EFh\n", "IFlOqPCaHSEBWACMMWNX4HXAjcDXgHeaMSg5yYy3EEZn7tJWYRGR5qFAInXjjgM3EQJAOZLFsHkj\n", "JCOBPSksVb8AGENY3PqkO6vceY5QQfYMADN2AK4nFFPbHbi8zH6JiEidKJBIXbnzfnc2l3lZMsWT\n", "F0iOB1bE3ThpCwh1TY4g3LwvcR9dNUpOjtc+BHwL+Pcy+yUiInWiQCLNqNhi2OWE37NP51yT1C85\n", "Angu1T4FOC4+P5OwRRjgXuAELXoVEWkOCiTSjDYAr+TcHycJKk/kXLMJGEqo8NpjIHGnnRBszqhR\n", "n0VEpAoKJNKMNlI4XZOsSQF4LOeaTcDOFAaSmcBYM4YAh9G9+utDwD/VosMiIlIdBRJpRhvICSTR\n", "/u78Jaf9ZcIdhPcl1CsBIJaXX0HYnbMf3UvVPwcckrww4wAzvmLG+Oq6LyIi5VIgkWZUNJC4F9z7\n", "JrGJEEY6cha8rgBGA0OAtan2eYSb9GGGAX8klKa/M24fFhGRPqJAIs2o1AhJMZsIVVzzirCtAI4G\n", "lqemfSAVSIBjCYtiLyOsO3lr+g3MONGMb5ixT5n9EhGRXlAgkWY0G3i0zGs2EeqTFAskx1BYu2QZ\n", "sFvcafNm4LcxsPwC+JfkpFiS/k7CtuLb42iKiIjUkAKJNB13HnPn2jIvezk+lhoh6TbdE0vOzycE\n", "jROBv8VDdwNnxIWwAFcBjxBGTfYEJpTZNxER6YECiQwUm+JjOSMkECq5DiPswJkDnVuCnyOEGICz\n", "gT/FAHMTqvAqIlJzCiQyUPQ0QrIz5C6I7QB2I5SkT999OF2/5DS6ppDuA86ttrMiItKdAokMCHH0\n", "op38QJLsrPllzrEOYBywOFPifjJwvBnDCYFlTmyfAgyP7SIiUiN1CyRm9lEzm2lm08zsm/X6HJGU\n", "l8kPJPcBF7ozM+dYB2FqZk6mfTZwMHAgMDcGHuKW4mmEEvVA2DKsha4iItWpSyAxs3OANwDHuPtR\n", "wLfr8TkiGZvICSTuvOzOvUWu6QBGENaSpC0n1DXZB1iZOfY8saCaGYOB24GVZpxWeddFRFpbvUZI\n", "PgR83d23ALh79g97kXrIDSQ9aCcsan05076CEEj2pjCQzCWMngBcGa//MPB/2ZESM7Y3Y6cy+yQi\n", "0nLqFUgOBV5jZo+aWZuZnVSnzxFJKzZlU0oHsBeFgeQlwujIvhSOnsylq+T85cD/AL8BDDg1OcmM\n", "vYHpwDyzzh07IiKSY3ClF5rZJMhd2PeF+L57uvtpZnYy4Q/rg3LOFamlSkZIOsgZIXFnsxkbCNuB\n", "n89c8zxwiBmDgAuA97vjZvwKuIKuHTkfJdQ2mQp8HXh9mX0TEWkZFQcSdz+/2DEz+xBwWzzvCTPb\n", "ZmZ7ufuqnHMnpl62uXtbpX2SlldpINmZwhESCNM24ymsGruCMKoyCljtTvL7+kHgq6nzriKspZoN\n", "XGvGge4sLLN/IiJNy8wmUKNikRUHkh78kVCr4UEzOwzYIS+MALj7xDr1QVrPD4Bny7ymIz7mBZLl\n", "hFok2TUkLwNDCdM26dGTycCxceRkGKGq63R3tpkxCTgfuLHM/omINK04iNCWvDaz6yp9r3qtIbkJ\n", "OMjMpgK3Ev6lKFJX7tztzotlXtYeH4uNkOxG6UAyN/X5a+M1hwInA08m24WhM5CIiEiOuoyQxN01\n", "76zHe4vUWKkRkkcJN93LLmrtAHYiE0iiqcBRhGJrT6baHwGuqbazIiIDlSq1SqsrFUhuAM4irAHp\n", "FEc9OgjrS+ZlrllCWOy9P/BCqn0eMMqM7aGzmNpbzHhN1T+BiMgAoEAira5oIHHH3XnYHc+5rp1w\n", "/5vsdM4yQiDZC1ideq/NwIuEOwsDvBf4CvBbs66twiIirUqBRFpdqRGSUl4G9gPWZ9qXx/ZhQHYh\n", "9xzCNmKAjwPvBq4lM5Vjxq5mTDTjvDL7JCLSbymQSKsrtai1lJcJVVyz24yTEZJhpEZIojnAoWYc\n", "TBhBeQT4FXB2LKKW+A5hUeyvzDoDjIjIgKZAIq2umhESozCQpEdIsoFkOaH66wRgkjvb3NkAPBTb\n", "MGMvQnG1dwPfBT5fZr9ERPolBRJpddUEEiicssldQxJtAHYhVC1O3134CSC5vcKZwKPurAB+DlwS\n", "65qIiAxoCiTS6qoJJNtyrltOWOw6lMKwspGuQJLenfMkcGJ8fgLwFIA7i+L7nYiIyACnQCKtrppA\n", "sjG7A8eddmArMChnd84GYFdCIJmfan+aEESIj0+njj1AGDURERnQFEik1bVnHnvrZQpHQBJPF2kv\n", "NkKyHNjZjKHAMcAzqWMzgMPL7JuISL+jQCKtrgPY7M7WMq9rp/iN/O4r0r6RsL5kZ0IIAUK9E2Ap\n", "oZjaPoR1KInngCOSF2a83ow5ZnykzP6KiDQ1BRJpdesI914q18sUDyQTyR/V2EAoN78sZzpnKXAg\n", "sD3dp49mJe9lxhDgf4EvAV80Y1z2A8zYufc/gohI81AgkZbmzmZ3PlTBpUWnbNzZ4t693HyUTNlk\n", "q7tCCCTjgDWZsLKEMJ2zB2Fr8HPu3Ar8H/Ce9BuY8QNgnRmfKPNnERFpOAUSkcqUGiEpZmN8zN6s\n", "D0IgORJYm26M4WQJobbJRcCf46GfA1cm58UCalcCxwLXmnFAmX0TEWkoBRKRylQSSJLzi42QFASS\n", "aD2wG6F668OxbSZh5GREfP1u4P/cmQ78FnhbmX0TEWkoBRKRyswFppV5TbI2pNxAsoEQSEYDC6Bz\n", "5ORxQkghPrbF53cSRlNERPoNBRKRCrhzmzvXl3nNNmAT+VM2C4B9gTU5x9YTdt/sRQguiceBU8ww\n", "wlTNlNj+AHBy3EYsItIvKJCI9K0N5I+QJKXki03ZHAkscefVzDVjgRGAE7cLu7OJUHhN9UtEpN9Q\n", "IBHpWxvJDyQvEmqiFAskRwMLM+1J7ZJxwPTM7pyZsR0AMw424w1m+n9eRJqT/nAS6VvrgBXZxjid\n", "8zzFA8lRwAuZ9iWE0ZE9gFWZYzOJBdXM2BN4ELge+EoVfRcRqRsFEpG+9Rbg0SLH5lB8DcnBFB8h\n", "2Z3CmijpEZL3EarHng18JNY06WTG5WZ81Izte/tDiIjUmgKJSB9yZ24cDcnzeeB3Oe3rAaMwkKwj\n", "VHbdn8JAshAYFZ9fANzmzjLgXkIoAsCMCcD3gHcAH+/1DyIiUmMKJCJNwp1Z7rnrS5Kw8ULm/OQe\n", "OIdTGEjWArvHcvOnEXbeQNgSfE7qvA8B3wDeCXzOjB2r+iFERCqkQCLS/JKwkR0hgbCO5AgKA8k6\n", "wtqSg4DF7p3HHwFOBzBjEHAxcEssdf8cYVpHRKTPKZCINL8kTCzKOZaMkKzLtK8jrC0ZlbnueWBI\n", "LC1/MLDCvXPdyp3A62vVaRGRciiQiDS/9cBL7t3uApxYCuxK4QjJy4T1JQeTCiRxmmcqYcHrMcCz\n", "qWseBk6qXbdFRHpvcKM7ICI9eg64tsixpHJrt0DijpuxDhgPLM5cswgYSSiqNjXVPgMYb4ZlapqI\n", "iNSdRkhEmpw7m9z5aZHDS+JjdoQEwsLWoymc6llMmMo5BJid+pyVhOJsIwDM2N2Me834tRa7iki9\n", "KZCI9G+5IyTROkJBtWwgWUQIJLtSuPZkBmFUBeDLhHL0Q4HPZN88LooVEamJugQSMzvFzB43s8lm\n", "9oSZndzzVSJSgSSQZIMFhBGSPYB5mfbFhCmbXQil7NPmAmPjDfveBlwHfAH4oFnXFK8ZZwGrzbhb\n", "wUREaqFeIyTfAr7o7scDX4qvRaT2So2QJEHh+Ux7eoQkG0hWA3sSRknWu7PAnWcJ999J/8PiekIN\n", "kyHA+yvuvYhIVK9AspSw5RDCv9BerNPniLS6VcDthLsIZ42FzvvkpL0IHEAYIcletwYYRqhH0pZq\n", "fxg4A8CMI4DRwG+A/wDeXc0PICIC9dtl8zngYTP7NiH0nF6nzxFpaXE3zKVFDu8OuVuF18Rj7RSO\n", "kKwhbBUeTNjdk/g7cAXwHeBM4C/ubDXjQeBQM0a4dy6wFREpW8UjJGY2ycym5vx6A/C/wNXuPhr4\n", "BHBTrTosIr12KmGXTTfuvEoIIvtRfMpmBN1HNp8ATojPxwPT43ttAe6nezl6EZGyVTxC4u7nFztm\n", "Zje7+3nx5e+AG0ucOzH1ss3d2yrtk4h0ce82wpG1BtgN2JTTviewA90DySJgRFzAOh6YlDr2DGE3\n", "j4i0GDObAEyoxXvVa8pmrpmd7e4PAueSqnWQ5e4T69QHESluDbC/O5tz2vckrP3qnIJx5xUzVhJG\n", "TsYTtgcnpgHvSV7EmiXnAY+6s6o+3ReRZhAHEdqS12Z2XaXvVa9A8gHgh2a2I2Ge+gN1+hwRqcxa\n", "CqdroCuQ7E/hYvSFhJv17Uf3Ow9Po/sIyXeBC4AOM05yp6NWnRaRgasuu2zc/Ul3P9Xdj3P30919\n", "cj0+R0Qqtob8nTlrgDFAe869c14g3ANnU2bnzjzCdM6O8aZ9VwKnEALNlek3MGOUGZ80Y//a/Bgi\n", "MlCoUqunpv9tAAAgAElEQVRIa1pD/ghJUmAte/8bCCMk48js3ImLZNcAexEWtz7gzmrgv4D3JefF\n", "wmr3ARcCvzfTnz8i0kV/IIi0ptxAkhr5uCXnmhcJ97/J20q8iq76JQ/GtvuAE8wYEl+fS5gqeh2w\n", "IyGYiIgACiQirarYCAnAZYR6I1kbgH0pHkj2Ak4j1CwhTvlMJWw/hjB9c0sMPb8ALq+08yIy8CiQ\n", "iLSmYotaceePObtviOcXCySrCYFkJGFqJ/F3QkgBOBZ4JD7/I3BJvGeOiIgCiUiLmg48XeY1pQLJ\n", "KsKW4KGEcJKYAxwUg8fhxOqv7iwAnFDCXkREgUSkFbnT5s5XyrxsI7ATxQPJkcDyWM4+sYCwa2ck\n", "sNGdtaljzwDHlNkHERmgFEhEpLeSKZ5iUzZH0XX34cQCQiA5ApiVOfYsqUBixufMeMSssNy9iAx8\n", "CiQi0lulAskqQgXXZZn2hYQ7Ax9I97UlEAqqjQcw41jg44RbTfxSa0tEWo8CiYj0Vk+BZBiZERJ3\n", "2gkLaA/KuW4pYU0KhNLz/wXcABhhizAAZuxkxj1mPG/G4dX+ECLSnBRIRKS3SgWSpBrzlpxjSwgj\n", "JNkS8iuBfeLzM4H74/qTW4DXp857d3z8EfDjMvssIv2EAomI9FZyZ+CCQOLOfOBEwghHVjvh/jiv\n", "ZNpfAvY2Y1fCDpynYvuDhAJribcQwsj3gaPNGFNh/0WkiSmQiEivxBLx7eSPkODO0zGYZHUQ7h5c\n", "bITkKGCme2dgeRI41Iw9Ylg5EbjXna3AbcAVVf8wItJ0FEhEpBwbKRJISmgnJ5DESq5OWF+yJNW+\n", "mVC/5ND4a24qrPwVOKOinotIU1MgEZFyVBJIio2QQJi2GQ+syLTPIwSVw4DZqfYpwHFlfr6I9AMK\n", "JCJSjmpGSLJrSCBM24wHlmfa5wFjKQwkzxPWneyZNJgx3oxxZfZJRJqMAomIlKPSEZIhFB8hOZLS\n", "IyRzksZ4Y76pxIJqZpxBWAT7NzNOL7NfItJEFEhEpBwzgcVlXtMeH/MCyXLgEIoHkpHAC5ljLxDu\n", "mwPwJeCzwOeA69InmbGdGVeZcUqZ/RWRBlAgEZFec+e97jxR5mUdmce0x+JjdspmCbA/4d457Zlj\n", "K4B9zRgCnAXcCtwMnGzWGVQgBJVPAXeZcUSZfRaRPqZAIiL1lgSRvDUkD8bH7AhJB7AjIZBkr1sB\n", "7AecAMxw5+W4C+dB4BwIoyPAR4Arge8QwomINDEFEhGpt1JTNjPi45JMewchjOyYc90KQsn504FH\n", "U+3301Vy/hRgrTszgZ8Dl5qxU0W9F5E+oUAiIvVWdMrGHXfH3FmTOfQKXYEkO0KynBBIDifcoC/x\n", "OHB8fH4moWYJ7iwh3GlY9UtEmpgCiYjUW6kRkmLSUzbFRkj2JuzSScwFDo53Cj6E7tuFnyRM8YhI\n", "k1IgEZF6K7WGpNQ1xUZIkkCyD6lA4s5qYBshqBxMqFmSeAoFEpGmpkAiIvVWyQjJVmAQsDPFF7Xu\n", "QyisljaXEEYOoXsgeZpUIDHjBDP+asZ7y+iTiNSRAomI1Fupbb+53HG6pm2y120EtgBj6D5lAyGE\n", "HEmoU7Iw1T4XGGOGxSmdnxB25XxdVV5FmoMCiYjUWyUjJMn52+JdfjvFsDIXGAwFi2EXEe4OvCLe\n", "pC+5pp2ue+qcEh//E/g+8P/Sb2DGe8xYpNETkb6lQCIi9VbJGpLk/GIhZi6w2p1XM+0vE9aQbMq5\n", "Zhmh2NoZwF9jGfpfAxfHURPM2Bv4NvDvwDfNGFVmn0WkQgokIlJvyQhJuYGko8Q1cyicroEQSPYi\n", "/347S4HhwMmELcIQpng2Q+e0zcXAA+7cDvweeHuZfRaRClUcSMzsCjObbmavmtkJmWOfN7M5ZjbL\n", "zC6ovpsi0o91AFuzUy+9vK5YIJlL4YJWKB1IkhGSzkASp38eJNQtAbgEuCM+/yWh0quI9IHBVVw7\n", "FbgM+O90o5kdSfif+EjgAOCvZnaYu2+r4rNEpP/qoPz1I1B6yuYeYFVOezthyiYvrCwlLHYdQ/cd\n", "OLOAQ+PzY4AvxuePAYebMdS97Dsci0iZKh4hcfdZ7j4759ClwK3uvsXdFxD+JaO7bYq0rnbKn66B\n", "EiMk7ix3586cQz2NkBwKdMR73yTmAIfG+9+MBhbEz3gFmE5X9VcRqaN6rCEZQffbky8mjJSISGta\n", "CnyggutKTdkU8zIwhOJrSMYDqzPtcwhBZQRhoWz67sJPEKZ4ADBjqBmnJotgRaR2Sk7ZmNkkwiKw\n", "rGvc/Y6c9mK8rF6JyIARd8LcVsGlpaZsimnPPKYtIwSSeZn2ucBBhGJq8zPHZsRrMGMQYRpnH+B/\n", "6JraEZEaKBlI3P38Ct7zRei2VW5kbMtlZhNTL9vcva2CzxSRgafSEZL0Y9pSYHcyIyTubDJjA2Fq\n", "ORtIlgDnxeeXAeuBC4DpZvw43rgPCNVfCetT/hAXy4oMeGY2AZhQi/eqZlFrWnr48nbgFjO7gTBV\n", "cyhdW+wKuPvEGvVBRAaWShbDlgoky+Jj3mLYDYStvy9k2pcSduYAXAHc6M5SM/4IXA78AMCMg4B7\n", "CYtpDyLUMhEZ8OIgQlvy2syuq/S9qtn2e5mZLQJOA+4ys7tj52YAvyEMdd4NfNjd9a8FESnXK5Q/\n", "QlJqymY1oeR8dg0JhHL0I4B1mfYldAWSEwlTNhB2+VyYOu9DwI2EbcOfM2OnMvst0vKq2WXzB3cf\n", "5e5D3H24u/9z6tjX3P0Qdz/C3e+tTVdFpMXUdMomVmZdTv4IySbCerkNmfZlwHAz9iTc0O+52P5X\n", "4DVmnaPMFxGmauYCzxCCiYiUQZVaRaRZ1XrKBsIUTLERkuHxsVPc+ruBsI7k2aRUvTur4/scaMYI\n", "Qlh5Ml52O3Bumf0WaXkKJCLSrGo9ZQMhkBQbIdmHwhESCNM2J1G4vuQ54HDCOrlZcQQGwpq5U8vo\n", "s4hQu0WtIiK1VsmUTRJEio2QfIowbZO1kbA4f2POsWXAERTuFkwCyUpgYap9MnCEGUMyNU1EpASN\n", "kIhIsyp7yibeL2czRQKJO3PcWZ9zKAkieSMkqwg1StZm2pNAciCpQOJOB6G2yTgAM3Y047tm/MCM\n", "IWX8OCItRYFERJrVncBvK7iuneJTNsVsio95IySrCFt512TanwfGkgkk0SK6KlS/l1B+/jDg42X2\n", "S6RlKJCISFNy5xl3Hqng0pcpPmVTTE8jJDtROEKyDtiNEEiy60tepCuQfBiYCHwU+GRqZw5mjDTj\n", "cTN+ESvBirQsBRIRGWgqCSQ9jZBA4QjJemBXQmXq3EBixr6EYPKgO7PjeaelzvsecH98j38rs88i\n", "A4oCiYgMNL+jcAqlJz2NkEDhCMkGQiAZRljYmpaMkBwLTEmVkv8zoWYJZgwFXgd8DfgK8EHdtE9a\n", "mQKJiAwo7nzOvSAg9GQTsMWdzTnHio2QbCBM2exBYYXXJJAcB0xJtf+DUPEV4CxCWFlPKL09jLCF\n", "WKQlKZCIiIQRkrzRESg9QrIHsC3urElLAskxwLOp9pnE3TfAmcR7gMQaJn+n+3SOSEtRIBERCYEk\n", "b/0IdFV27RZI3NlC2JacDSoQap3sG38tSbW/AOxtxi6ExbDzUsceAU4vu+ciA4QCiYhImLLpaYQk\n", "Oy0DYWFrXiBZD+xOmNLprHsSS8/PJtQvGUnYHpx4HDg5/SZmHG7G9r3ov0i/p0AiIgJTgW8VObYW\n", "eGMsupa1gfxA0kGo/LovFBRim0MotDaK7oFkHjA6eWHGR4EngMcUSqQVKJCISMtzZ707Py9yzN35\n", "U5FLc0dI4q6adYRRkGwgWU1YwDoSWJxqXwHsbsZOZuwAfIFwT5zVwHvSb2DGLma8wYzdevzhRPoJ\n", "BRIRkcptoHD3TWIdsAOFUz1rCZVf2907658kC1uXEBbDXgDMcWcmcAPw9sx7/Az4DnCXmf4cl4FB\n", "v5FFRCpXbMoGukZGsotl1wFH0X26JrGIMJVzIvBQbLsfOM6MYQBmHENYa3IMsDMhvIj0ewokIiKV\n", "K7aoFULw2BBHPrLthxPuIpyVBJKjCetakpv1/YNQtwTgfODOeCfhHwPvq+YHEGkWCiQiIpUrNUKy\n", "jsL1I0n7gcBLOccWEwLJUcRAEk0FjozPzwXui8/vBs5WhVcZCBRIREQq9xNCqfo868jfKryW8Gdv\n", "XiBZCQwHxgDPpdqn0xVITgQeBXBnMeG+ParwKv2eAomISIXcmezerbhZ2nqKj5BA4f1vINRDGUGY\n", "6tmSap8BjI+7b4bRfbrn78AZZXVcpAkpkIiI1EepKRvIHyHZCOxH4ULYWcARhLCyLBZYS8wkNUJi\n", "xllm/JcZYyvtuEgjKJCIiNRHsSmbUoFkE2HKplsgiTfg244QPBZnrnmBWFDNjD2BPwFDgV9qS7D0\n", "J/rNKiJSH0vJ30mTLIItFkjyRkgg1Ds5inDjvrTOQAJcCUwi7LzZBZiQPtGML5hxhxn796L/In1K\n", "gUREpD5+CXw8p30D4BSfstmV0oGk6AgJ8EbgV3Gr8W+AS5OTzDgL+CBhsexNvf4pRPqIAomISB3E\n", "kvPZGiRJRdbZhBGUrKRyazkjJIuBEWYMAsYDk2P77cDFqfPeC1wPXAucYKadOdJcFEhERPqYO0fE\n", "dSFZpQLJWkLg6DZC4s4rhPvdHA7sSRgxgbBVeH8zdo2vzwb+Ggut/ZYwmiLSNBRIRESax8bMY9oa\n", "Qqn47AgJhEByOjArGZWJO3FmAkeaMYqwpmRWPP9vdFV+FWkKCiQiIs2jpykbKFxDAtABHE9X4EhM\n", "I0zzjAcmx7sQQ7hPzj9pF440E/1mFBFpHr0JJEtyjrUTapRki61NJwSS4aTWrLizlBBiRiZtZphK\n", "0EsjVRVIzOwKM5tuZq+a2Ymp9vPN7EkzezY+nlN9V0VEBjZ3tgKv0BVM0tYAL8U1I1kdhPUj7Zn2\n", "RYQwMpzCLcgL6apfsgfwCDDDjAMq/gFEqlDtCMlU4DLCfKSn2l8CXu/uxwD/Cvyiys8REWkVmyi+\n", "qDVvugZCIBlGuK9N2mpgL4oHkgPj848A8wlF1b6ZfXMzdjJj+950XqRSg6u52N1nAZhZtn1K6uUM\n", "YIiZbe/uWxARkVKKBZIFhDUhedrJHyFZQwgqw4HHMscWAgfGaZq3Ah8g/CNzsRm7JbuAzDgOaIvt\n", "E9xz78EjUrW+WENyOfCUwoiISK9sJCeQuPOAO1cVuabYlM1qugJJsRGSEcA+wCMxhDxE9/olXwW+\n", "SLjD8MfK+klEytDjCImZTSL8Zs66xt3v6OHa8cA3gPNLnDMx9bLN3dt66pOIyABWbISklA7Ctt5i\n", "gWQz+YHkUsJN+2amirjdS6hZcqsZOwPnAv8CjAIeNmNi5uZ+0sLMbAKZWxRUqsdA4u5Fw0QpZjYS\n", "uA14p7vPL/H+Eyt5fxGRAer7wJQez+quPfOYWEcIKgcAyzPHVhLCymGEcvKJZwkBBOAk4Fl32oHZ\n", "ZqwGjq6gfzJAxUGEtuS1mV1X6XvVcsqmcyGJme0B3AV81t0fqeFniIgMaO7cXME6jY742C2QxFGP\n", "dYQRkjWZa7YA2xMqvM5OtU8HjoprS84A/pE69hAqqCZ1Uu2238vMbBFwGnCXmd0dD30EOBi4zswm\n", "x197V9lXERHJlxtIotXA9FRRtMRWwij54aRGSNx5ia4aJeMJIyaJh4F/qlGfRbqpdpfNH4A/5LT/\n", "B/Af1by3iIj0WrEpG4iBJKc9GSHZm8LpnOeAQwiLXdPHZgEfTZ9oxlD3gu3GImVTpVYRkf6vpxGS\n", "GTntSSDZIT5PW0moX7IPoa5UIl27BDPeAKw143ZVeZVqKZCIiPR/pQLJ98gZySZM2Wwff2UDSVJQ\n", "LRtIVgC7xN03EIqoXUxYNPvm7AeYMUr3y5He0m8UEZH+r+iUjTv3uudWeN1CmLbPCySryAkkcZHs\n", "ImC0GQcTap/cRwg9b0+/gRkfJVR//UEFP4+0IAUSEZH+LxkhKWctRzJlsz1hF07aasLUzNa45Tct\n", "mbY5H7gnhpS7gHPNGAoQR1C+SNjw8CYzxpfRL2lRCiQiIv1fqSmbYkpN2awiFEx7KXsR8AKhSNrh\n", "xFL27qwmLIQ9Pp5zATDFnSeBnwD/Vka/pEUpkIiI9H+VBJJSUzarCYEjL5BsBIYCBwHzUu3TgXHx\n", "+UmEuwdDGD2ZUEa/pEUpkIiI9H/thDuuZ6deSklP2eSNkOxHfiDZTNiZkxdIjozPTwCeis+fAcaY\n", "sUcZfZMWpEAiItL/dQDtOcXPSulplw3AkznXbQZ2BMYSFq0mZtA9kDwN4M6W+D6nltE3aUEKJCIi\n", "/V8H5U3XkLpB3o4UDyR/yrl0M2Gbb4c761LtzwGHm7ED4R45L6aOzSDcM0ekKAUSEZH+r50yA0mU\n", "rCPJBpIVwC3A5JxrkkCyIueavYA9gLWZ0ZoFwJjkhRmjzbhMNUokTb8ZRET6vwXApyu4bivgqdES\n", "ANzZ6s7bi0wBbQZ2BV7JtG8AhhBql6zN6d+Y1OsfAP9D2BosAiiQiIj0e+5sdudXFVy6hcLRkZ7k\n", "BpIYXtYQFrsWDSRmjANOJtQoudqM/crttAxMCiQiIq2rZoEkWk240/uaTPsCukZIrgR+7c5c4Hbg\n", "HclJZmxnxt1mLDXTVuFWo0AiItK6tlL7QJI3QrIS2DlWcr2Yrnvr/JLu98A5ExgN/DvwU7Pq7kgv\n", "/YsCiYhI66pkhGQLsAulA0m3EZI4nbOJUFBtFDA3HpoCjEvdKfgtwM/duY1QC+X8Mvsm/ZgCiYhI\n", "66p0yqZUIDmYwhESCLuAdiHsxEl26KyKj8Pi49HA4/H5/cDpZfZN+jEFEhGR1lXplI1R3pQNhFop\n", "BwKr3dkKnSMnc4FD4jmHAnPi80cJC1+lRSiQiIi0rkpHSCA/kKwilJXPLmqFMEIyFliaaZ8LHGLG\n", "rsBuwJLY/hhwSmo6RwY4BRIRkda1hfLufwOlA8ni+Lg+51gH+YHkecI0zyHA8+5si+0vAYMIIUVa\n", "gFYwi4i0rq1Q9ghEqUDyc2An4MGcY8UCyUrCVM7BdC12xR03YzEwErqVqJcBSiMkIiKtq5opm4KR\n", "FXdedefH7t3uY5NIpmyWZdrXEsrNDyOEk7QkkABgxu5mXGPGoDL7LP2ARkhERFpXuWEESo+QlNJB\n", "WPC6OtO+BtgT2J3CkZDOQBLXmPwZOJYwkvKbMj9fmpxGSEREWlelu2ygskCyD+GeN2nJCEleIFlE\n", "1wjJhwmjK+8G3pd9czP2N2OPMvskTUSBRESkddV6l00p7YQFqqUCSXYxbHrK5hDgL4TtwEenTzJj\n", "N+BvwJ2q7tp/KZCIiLSuvgwkHfExG0iSKZvdKBwhWQYMj8/HAvMJIWWIGXunzruEUL9kR+C8Mvsl\n", "TUKBRESkdfXllE17fNyYaS81ZZMcgxBIFsRiatOAo1LnHQc8TFhXcmmZ/ZImoUAiItK6mmGEZAPh\n", "Hjd7UThlswbYM+6qGQksjO3PEha3Jo4n3BfnduCiMvslTUKBRESkdTU8kMRCaOsJd/ktNkJyAPCS\n", "e+dnPg6cChAruR4HTAZmA0PNOKDMvkkTqDiQmNkVZjbdzF41sxNyjo82s41m9snquigiInXSiCmb\n", "7AgJhOBRKpDsCyxPtafvczOBsNZkWZzO0T1w+qlqRkimApcRVjbnuQG4q4r3FxGR+qpkhCQ5v9IR\n", "kuwaEuiqTZINJBsJlV/3yhybTZjK2Q/4APDfMYxAuAfOqWX2TZpAxduj3H0WgFlh1WEzeyMwD9hU\n", "cc9ERKTeyi4d786rZrxKbQPJo8CJZNaQxPLxyejJ+lT7NjMuIoy2fIOutSUAM4F3ltk3aQI1X0Ni\n", "ZrsAnwEm1vq9RUSkpioZIYEwbVPJlM2m1M3z0u4FcO8MLWkFgSSe+4g7L7vzjDtrU4fmE3bk9MiM\n", "4zLbh6WBSo6QmNkkuvaAp13j7ncUuWwi8F13f9nyhk9ERKRZbKH8m+tBZYGkg/zREQiB5Ooix9YQ\n", "br6XdwfhPPOBsWZYahqnmMnAfwP/1sv3ljoqGUjc/fwK3vMU4HIz+xZhMdI2M2t39x/lnWxmE1Mv\n", "29y9rYLPFBGR8m2FHv/SzlPpCEneglbc2Qz8oMh1awmB5O+9+RB31pixjVBsLXvfnE6piq5revO+\n", "ks/MJhAWFletViV2OxO2u7+ms9HsOmBDsTASz59Yoz6IiEh5ttB3gaSDIoGkB2uBk4C7y7hmPnCm\n", "GXcAo4DlyZZhM/YEBtFVx2QHM8bGtg2EpQzr3cMaSDN2dmeTGTvG91rrXnBXYuK5wwDcu4JQnBLa\n", "BViYjNgkfSj2Ppn33I5wU8JN7ixN+pM6PgZw927raDBj5/gz7eLOEjNGE3YiFdyluRru3mbGtPCc\n", "lfHv/YpUs+33MjNbRNhedZeZlfObRUREGm8aML2C6+6j+zbc3pgPPFjBZ60kBIHsDpxSJhF2em5P\n", "KJaWrur6CeA/CQFnIfB6wndwD2H3zncJO0gxY3dgUSzMNjqe8/4Sn/sFCm/8915gFnBMqu3jwEd7\n", "+bPsGD/3i2aMJ+wiSrsp/uoUA9ZU4GbgxXin5L8Q7gdUD08DT1T7JtXssvkD8Icezvlype8vIiL1\n", "5c6tFV73rxVcM5cQBsq1kPAv/d6uIcGdzxA2V2DWucj1qXh4PvAO4Enga8AdwC3uvN2MlYRlB8n0\n", "0UGEqZ/93ZlDz3+hzwfGZ/ryTTNOAw4Fnkmdd24vf5b25HPNeBNwmBnbJYuD3XPf57D4MyeDDgcR\n", "pr0W5pxblThyNBJwM7av5r1UqVVERJrZ/PjY60CSsYDuu26S1/OBlzKfkYSXBfH12Mxjbz5rTE57\n", "dudPtk+9NZYw6jOiF+dBCCEPAKeTmoaqsdGEn2cxYSSrYgokIiLSzKoNJPPpHhLS4WNlTtsrwNL4\n", "utxAUmzLcba911uTM3rbn+T4CsJ01Dl0/Yy1loS7Sn+mTgokIiLSzGoRSNJ/US4GXiX8qz4ZIVmQ\n", "elyYqpUylrB2ZUwvP2sBcGBciNpTH/aJ0x3l6G1/xsTzFsRf59D1M9bamPjeCiQiIjKgrSRU/a4m\n", "kJxoxhUA7mwFXojtGwg7htIjJOmRhLGEhbhvMuu5HH2cEllPYf2ubn9Zu/MqIZQcmD7JjCFmfCv+\n", "OinnI5L+vNeMb2SufW+87lLgjHhe8vPsQ84IiRlXm/VcxNSMD5nxtfh8ePycS8wYB1xFjUZIarXt\n", "V0REpOZi+fh/ofJ/4c8i7KpJF2X7IPCP+N5vSr33bYQdI4lbgBnAeZBbRTbP56Fga+184L8ybRMp\n", "3Aa9ja5ppLxt1T8EHgZeR+F27XXx2o2EHUZ3ELYbLwA+FV9nrct5nzxrgSHx+dbU52wh7GL6LTCM\n", "sAD4ml68Xy5zr2QLem2Ymbu7qrmKiIgMANX8va4pGxEREWk4BRIRERFpOAUSERERaTgFEhEREWk4\n", "BRIRERFpOAUSERERaTgFEhEREWk4BRIRERFpOAUSERERaTgFEhEREWk4BRIRERFpOAUSERERaTgF\n", "EhEREWk4BRIRERFpOAUSERERaTgFEhEREWk4BRIRERFpOAUSERERaTgFEhEREWk4BRIRERFpOAUS\n", "ERERaTgFEhEREWm4igOJmV1hZtPN7FUzOyFz7Bgze8TMppnZs2a2Y/VdFRERkYGqmhGSqcBlwN/S\n", "jWY2GPgF8AF3Pwo4G9hSxee0JDOb0Og+NDN9P6Xp+ylN309x+m5K0/dTPxUHEnef5e6zcw5dADzr\n", "7lPjeWvcfVuln9PCJjS6A01uQqM70OQmNLoDTW5CozvQxCY0ugNNbkKjOzBQ1WMNyaGAm9k9ZvaU\n", "mX26Dp8hIiIiA8jgUgfNbBIwPOfQNe5+R5HLtgfOBE4C2oH7zOwpd7+/qp6KiIjIgGXuXt0bmD0A\n", "fNLdn46vrwT+2d3fFV9fC3S4+7dzrq3uw0VERKSpuLtVcl3JEZIypD/8XuAzZjaEsJj1bOCGvIsq\n", "7bSIiIgMLNVs+73MzBYBpwF3mdndAO6+lhBAngAmA0+5+9216KyIiIgMTFVP2YiIiIhUqyGVWs3s\n", "QjObZWZzzOyzjehDo5nZTWa23MymptqGmdkkM5ttZn8xsz1Sxz4fv69ZZnZBY3rdN8xslJk9EAvv\n", "TTOzq2O7vh/AzHYys8fMbIqZzTCzr8d2fT8pZjbIzCab2R3xtb6fyMwWxKKVk83s8dim7wcwsz3M\n", "7HdmNjP+/3WqvpvAzA6Pv2eSX+vM7OqafT/u3qe/gEHAXGAMYUfOFGBcX/ej0b+As4Djgamptm8B\n", "n4nPPwt8Iz4/Mn5P28fvbS6wXaN/hjp+N8OB4+LzXYDngHH6frp9R0Pj42DgUcLONn0/3b+j/wf8\n", "Erg9vtb30/XdzAeGZdr0/YSf92fAe+LzwcDu+m5yv6ftgKXAqFp9P40YITkFmOvuC9x9C/Ar4NIG\n", "9KOh3P0hYE2m+Q2E/xmIj2+Mzy8FbnX3Le6+gPAf9ZS+6GcjuPsyd58Sn28EZgIHoO+nk7u/HJ/u\n", "QAj5a9D308nMRgIXATfStej+/7d39z42RHEYx7+PsIUlRCReN7EFnWB1WEIIm6BFIaJQKVSbsP8E\n", "lUZQbKHwGqIRofYSu14jIlGst93ViGhE/BTn3Luzl4jE5cjO80lu9syZW8w8d7Lzu2dmznU+k7U+\n", "VFD7fCTNAXoj4gxARHyNiI84m5/ZSjqXj9CmfEoUJEuAkcry69xnsCAiRnN7FFiQ24tJOTXUJjNJ\n", "y0gjSXdwPk2SpkkaJuVwOyKe4nyqjgP9QHWWaOczIYCbku5LOpT7nA90A+OSzkp6IOmUpE6czc/s\n", "Bc7ldlvyKVGQ+C7a3xBpvOtXWU35HCXNAi4CRyLiU3Vd3fOJiG8RsRpYCmyUtLllfW3zkbQTGIuI\n", "IX4cBQDqnU+2PiLWAH3AYUm91ZU1zmc60AOcjIge4DNwtPqGGmfTJKkD2AWcb133J/mUKEjekK45\n", "NcKxtZQAAAGcSURBVHQxuYKqs1FJCwEkLQLGcn9rZktz35QlaQapGBmMiCu52/m0yMPJ14G1OJ+G\n", "dcBuSa9I3+C2SBrE+TRFxLv8dxy4TBpGdz7pXPQ6Iu7l5QukAuW9s5mkjzSlx3hebsuxU6IguQ8s\n", "l7QsV1l7gKsFtuN/dBU4kNsHgCuV/r2SOiR1k34v6G6B7fsnJAk4DTyLiBOVVc4HkDS/cRe70gSE\n", "20hz/jgfICIGIqIrIrpJw8q3ImI/zgcASTMlzc7tTtIPoj7G+RAR74ERSSty11bgKXCNmmfTYh8T\n", "l2ugXcdOobtz+0hPTrwEjpXYhtKv/GG+Bb6Q7qk5CMwDbgIvgBvA3Mr7B3Jez4Htpbf/L2ezgXTt\n", "f5h0oh0Cdjif5r6uBB7kfB4B/bnf+fyY1SYmnrJxPmlfu/OxMww8afwPdj7NfV1FmtjzIXCJ9JSN\n", "s5nY307gAzC70teWfDwxmpmZmRVXZGI0MzMzsyoXJGZmZlacCxIzMzMrzgWJmZmZFeeCxMzMzIpz\n", "QWJmZmbFuSAxMzOz4lyQmJmZWXHfAcKv4b9WXDVtAAAAAElFTkSuQmCC\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(log10(En_array-En_array.min()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The convergence is linear in practice. Convergence up to machine precision (1e-14 here) is achieved after a few hundreds of iterations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " \n", "__Exercise: test the recovery of a less sparse signal.\n", "What do you observe?__

" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "S = 31\n", "random.seed(0)\n", "sel = random.permutation(N)\n", "sel = sel[0:S] # indices of the nonzero elements of xsharp\n", "xsharp = zeros(N)\n", "xsharp[sel] = 1\n", "\n", "y = A.dot(xsharp)\n", "\n", "# put your code here" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "LyO+ouuY3Gfq2Scpfem4NLOnyf4BAACQyt1TfyRdLemBhOd+X9IbQo8/Jel7Y8p5+npeNZAOPCy5\n", "S5926Rc9+Hv0c+Bh6VWDLDFnW0d59Y7r/tHH1sf9rsenrb/KOPPUP035tLLj5xP38S1527FIu8W/\n", "9kcfC9Zbbn/M2tezt2U1/aTqvjrptWVtW5XrmNxn6tknk/vSp1068FST/aPavidvOoau/9CG/PDD\n", "Dz/8lPlT5LiSdQVpiekPhB5/StJr8wQp7V8ef3l6X+SL+uhn7mixxgqvo7x6x3WXE3eVceapf5ry\n", "aWXHzye11f6v5m3HIu0W/9r3+eRY8+2PrH09e1tW00+q7quTXlvWtlW5jsl9pp59Mrkv1RtL3T8k\n", "VbQhP/zwww8/7fopclxJHcqbwWOSZkKPXzxcto6Z3Rp6uOLuK2tL7Ngy/vsDCavbvnXqCBPXUWa9\n", "o7qTmnTa+quMM0/905RPKzt6PrGtNudvxyLtFvfaSyO/89Sbtq48fT3altO8tmxlt3naa+t4L2Vd\n", "x6Q+k7fOaU3qS3XHUi0z2ytpb8NhAACACpSRmN4l6d2S7jSz10v6uidcX+rut06u6sz59NWdPTdt\n", "gNnWUbTeUd0XE56btv4q48xT/zTl08qOnk9sqwv527FIu8W99mLkd556s64rrm63yeutup9kUXab\n", "j16btu1ZVbmOSX0mb53TmtSX6o6lWsN/Zq6MHpvZLY0FAwAASpXldjG/K+n/lfRyM1s1s58ys5vM\n", "7CZJcvclSX9lZicl3S7pZ/OHs7oozZ8cP35f5PkDp6TTh/PXH7eOsuod1f2lx9fH/a4npq+/yjjz\n", "1D9N+bSyo+evj1nPgVPS6ofyt2ORdot77Z8/If3UE8mx5t0fWft61rYsK648ym7zrNteRnxF1zGp\n", "zxSNO6tJfel6SfMX6osFAAAgp7aNNw4m8pg7GlwH9cbPSW+9b3w9WJkT/4zWUV6947rf+LnxtVxv\n", "va/YBDnVxJmn/mnKp5Vd+/z+r0bLFWnHIu0W99q0WMtp/+S+Pl1blt9PmmjzsretynWk95nq90lK\n", "X7ql6f5R3XbLm46h6z+0IT/88MMPP2X+FDmu2LCCypmZuycNm4srH8QX/bvcmKqpd1S3JJVRf5Vx\n", "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\n", "aujxo5Jel6HMiyWtS0yll6as70pJ+yTdMZxd7b07hjmvpJduS4k1oysl3Sbpnu3B45ftnlQ63tcl\n", "vXRTet2S9NLt68tlEW2LsrY/XP/jki4J1R9dZ9540sqOnj82fP4lV68tl6cdR/ukSLvFvXYUi4br\n", "/65fyhbPtOsK9/Xnb5ZeOiGmtJjrEt6P+7ZKdzxnfQxJ75VoHXHxl7VtZaxj0ns+/Po3bBv23c3S\n", "HcPPlqJ9Jc2kvvSGbcPnNg9j2TbclmpDSo2xaF2j92RN/3/pnizHbgAAWiUtMc36X/Xot4OE170w\n", "pZoPSHp/qNzdob/TXpvVB0J1vylnvTsSXhetWznrH9UVbouytj9c/5u0Ns7oOvPGk1Z29Pxtkedf\n", "GHpemq4dR/ukSLvFvfYDkTLftWn6erOsK9zXw/0ra1tW1U8mCe/HpBiS3ivROuJeW9a2lbGOSe/5\n", "8OtHfbqKz64kk/pS3L5J2ydVmPTZkqeufjOzP1CQgUf9orv/foYqGjgjDgBAMeaefPwys9dLutXd\n", "9w8f/4Kkp939g6Ey/1HSirvfOXz8kKQ3R4fymhkHSgBAqdx9Q542NbM/kvTz7v5nMc+lHrtDZTk2\n", "AwBKlffYnHbG9D5J15jZ1QrGfb5T0o2RMndJerekO4cHw6/HXV+6Ub88AABQkaTjapZjtySOzQCA\n", "9pg4K6+7X1SQdB6T9CVJH3X3B83sJjO7aVhmSdJfmdlJSbdL+tmKYwYAYEMysx81s1VJr5f0STM7\n", "Olz+IjP7pJR87G4qZgAAspg4lBcAAAAAgKpNPGNahq7f5NvMHjGzL5rZ583sT4bLLjezPzCzvzSz\n", "u83seU3HGcfMfsvMnjSzB0LLEmM3s18Y7qeHzOz6ZqKOl7Att5rZo8N983kzmws918ptMbMZM/sj\n", "M/tzMzthZgvD5Z3bLxO2pVP7xcy2mNlnzewLZvYlM/u3w+Vd3CdJ29KpfRJmZpuGMf/+8HHn9ksb\n", "cWxuTl+OzX05Lkscm9u4LRyb27ktI5Udm929sh9JmySdlHS1pM2SviDpFVWus4Jt+LKkyyPL/r2k\n", "9wz/fq+kf9d0nAmxv1HSayQ9kBa7gpuwf2G4n64e7rdLmt6GlG25RdLPxZRt7bYomGnze4Z/b5f0\n", "F5Je0cX9MmFburhftg1/XyrpXkn/pIv7ZMK2dG6fhGL8OUn/RdJdw8ed3C9t+hHH5qZj78WxOWE7\n", "OvlZM+F41sX9wrG5ZdsxYVs6t09CMVZybK76jOkzN/l29wuSRjf57pro5BBv1/hGgXdI+pF6w8nG\n", "3T8j6e8ii5Nif4ek33X3Cx7clP2kgv3XCgnbIsVP/tHabXH3r7j7F4Z/n1Vww/ur1MH9MmFbpO7t\n", "l28N/3yWgi/tf6cO7hMpcVukju0TSTKzF0saSPoNjePv5H5pGY7NDerLsbkvx2WJY7Pauy0cm1u4\n", "LVUem6tOTONu8n1VQtm2ckmfMrP7zGx+uOwKH888/KSkK5oJLZek2F+kYP+MdGVfHTSz+83sN0PD\n", "BjqxLRbMmPkaSZ9Vx/dLaFvuHS7q1H4xs0vM7AsK2v6P3P3P1dF9krAtUsf2ydD/Jel/lfR0aFkn\n", "90vLcGxunz716y5+1jyDY3N7toVj8zNatS2q8NhcdWLah5mVfsDdXyNpTtK/NrM3hp/04Dx1J7cz\n", "Q+xt366PSPpHkr5H0hOS/sOEsq3aFjPbLunjkm529zPh57q2X4bb8l8VbMtZdXC/uPvT7v49kl4s\n", "6U1mdl3k+c7sk5ht2asO7hMz+yFJf+3un1fCbVG6tF9apg/twrG5nTr3WRPGsfkZrdgWjs1rq6g8\n", "yAyqPjb//+3dv2oUURTH8e8pDKgIIoIKpkhhaaWVjSD4rxHs0kjQd7AwT+EL2BghpSFgI+IDWBiN\n", "IiKClYqxsrXwWMwdXWU3Rsgw94bvB5Ykk2z2/Dize7hkcnfohelHYH7i63n+XDVXLzM/l49fgYd0\n", "f37+EhHHASLiBLA1XoX/bVbtf/fqZDlWrczcyoLucoL+0oCqs0TEPrrBt5KZa+Vwk32ZyPKgz9Jq\n", "XwAy8xvwCDhDoz3pTWQ522hPzgHXIuIDsApciIgVGu9LJZzN9dkT53WjrzWAs3ni7lVlAWczdWUZ\n", "dDYPvTD99SbfETFH9ybf6wM/5q6JiAMRcah8fhC4BLyiy7BUfmwJWJv+G6o0q/Z1YDEi5iJiATgF\n", "PBuhvh0rJ37vOl1voOIsERHAPeBNZt6d+FZzfZmVpbW+RMTR/vKZiNgPXAQ2aLMnU7P0w6KovicA\n", "mbmcmfOZuQAsAk8z8wYN9qVCzub67InzurXX/56zub4szuY6sww+m3P4XZuu0u0I9h64M/Tj7XLt\n", "C3Q7Sb0AXvf1A0eAJ8A74DFweOxaZ9S/CnwCvtP9P9HN7WoHlkuf3gKXx67/H1luAfeBTeBleQIc\n", "qz0L3S5sP8o5tVFuV1rsy4wsV1vrC3AaeF5ybAK3y/EWezIrS1M9mZLrPL93/muuLzXecDaPWf+e\n", "mM1TcjQ5l0ttzubKsmwzz1rsibN5h1mi3EGSJEmSpFEMfSmvJEmSJEnbcmEqSZIkSRqVC1NJkiRJ\n", "0qhcmEqSJEmSRuXCVJIkSZI0KhemkiRJkqRRuTCVJEmSJI3KhakkSZIkaVQ/AeTK6yUBnozGAAAA\n", "AElFTkSuQmCC\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (subfig1,subfig2) = subplots(1,2,figsize=(16,7)) # one figure with two horizontal subfigures\n", "subfig1.stem(xsharp)\n", "subfig1.set_ylim(0,1.1)\n", "subfig2.stem(x_restored)\n", "subfig1.set_title('$x^\\sharp$')\n", "subfig2.set_title('$x_\\mathrm{restored}$')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/condatl/anaconda/lib/python2.7/site-packages/IPython/kernel/__main__.py:1: RuntimeWarning: divide by zero encountered in log10\n", " if __name__ == '__main__':\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "iVBORw0KGgoAAAANSUhEUgAAAiEAAAFwCAYAAABuLatIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeUZVWVgPFv2w0okiSnVhglR9FBJDYCiiJRkgiSRIEh\n", "yIiAqCRzwoQgkkRyUrQV0VZpRFByhpYwIKElSBAFJO7549zWoqj87nv3VdX3W4tF1U1nV13ot/uE\n", "fSIzkSRJ6rTXNB2AJEkan0xCJElSI0xCJElSI0xCJElSI0xCJElSI0xCJElSI1pOQiJiUkRcEhG3\n", "RsQtEbFfHYFJkqSxLVqtExIRCwMLZ+YNETEHcC2wRWbeXkeAkiRpbGq5JyQzH8rMG6qv/wncDiza\n", "6nMlSdLYVuuckIhYAngrcGWdz5UkSWNPbUlINRRzPrB/1SMiSZLUr4l1PCQiZgEuAE7PzAt7nXNz\n", "GkmSxpDMjDqeU8fE1ABOBR7LzAP6OJ91Bat6RMQRmXlE03Go8H10H99Jd/F9dJc6P9frGI5ZC9gR\n", "WD8irq/+2biG50qSpDGs5eGYzPwDFj2TJEnDZPIwPk1rOgC9wrSmA9CrTGs6AL3CtKYDUHu0PCdk\n", "0AacEyJJ0pjRbXNCJEmShs0kRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIk\n", "NcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIk\n", "RJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIk\n", "NcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIk\n", "RJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNcIkRJIkNaLlJCQi\n", "To6IhyPi5v6vYaNW25EkSWNLHT0hpwAbD3LNVjW0I0mSxpCWk5DMvAx4YpDLlmu1HUmSNLZ0ak7I\n", "gh1qR5IkjRKdSkIW6FA7kiRplJjYmWYOny/i80fCywlMy8xpnWlXkiS1IiImA5Pb8uzMbP0hEUsA\n", "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(log10(En_array-En_array.min()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convergence is much slower in this setting." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }