diff --git a/Coursera/.DS_Store b/Coursera/.DS_Store new file mode 100644 index 0000000..994ccb5 Binary files /dev/null and b/Coursera/.DS_Store differ diff --git a/Coursera/Lesson1/Week4/Building_your_Deep_Neural_Network_Step_by_Step_v8a.ipynb b/Coursera/Lesson1/Week4/Building_your_Deep_Neural_Network_Step_by_Step_v8a.ipynb new file mode 100644 index 0000000..986e1d0 --- /dev/null +++ b/Coursera/Lesson1/Week4/Building_your_Deep_Neural_Network_Step_by_Step_v8a.ipynb @@ -0,0 +1,1498 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Building your Deep Neural Network: Step by Step\n", + "\n", + "Welcome to your week 4 assignment (part 1 of 2)! You have previously trained a 2-layer Neural Network (with a single hidden layer). This week, you will build a deep neural network, with as many layers as you want!\n", + "\n", + "- In this notebook, you will implement all the functions required to build a deep neural network.\n", + "- In the next assignment, you will use these functions to build a deep neural network for image classification.\n", + "\n", + "**After this assignment you will be able to:**\n", + "- Use non-linear units like ReLU to improve your model\n", + "- Build a deeper neural network (with more than 1 hidden layer)\n", + "- Implement an easy-to-use neural network class\n", + "\n", + "**Notation**:\n", + "- Superscript $[l]$ denotes a quantity associated with the $l^{th}$ layer. \n", + " - Example: $a^{[L]}$ is the $L^{th}$ layer activation. $W^{[L]}$ and $b^{[L]}$ are the $L^{th}$ layer parameters.\n", + "- Superscript $(i)$ denotes a quantity associated with the $i^{th}$ example. \n", + " - Example: $x^{(i)}$ is the $i^{th}$ training example.\n", + "- Lowerscript $i$ denotes the $i^{th}$ entry of a vector.\n", + " - Example: $a^{[l]}_i$ denotes the $i^{th}$ entry of the $l^{th}$ layer's activations).\n", + "\n", + "Let's get started!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"4a\". \n", + "* You can find your work in the file directory as version \"4\".\n", + "* To see the file directory, click on the Coursera logo at the top left of the notebook.\n", + "\n", + "#### List of Updates\n", + "* compute_cost unit test now includes tests for Y = 0 as well as Y = 1. This catches a possible bug before students get graded.\n", + "* linear_backward unit test now has a more complete unit test that catches a possible bug before students get graded.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Packages\n", + "\n", + "Let's first import all the packages that you will need during this assignment. \n", + "- [numpy](www.numpy.org) is the main package for scientific computing with Python.\n", + "- [matplotlib](http://matplotlib.org) is a library to plot graphs in Python.\n", + "- dnn_utils provides some necessary functions for this notebook.\n", + "- testCases provides some test cases to assess the correctness of your functions\n", + "- np.random.seed(1) is used to keep all the random function calls consistent. It will help us grade your work. Please don't change the seed. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "from testCases_v4a import *\n", + "from dnn_utils_v2 import sigmoid, sigmoid_backward, relu, relu_backward\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Outline of the Assignment\n", + "\n", + "To build your neural network, you will be implementing several \"helper functions\". These helper functions will be used in the next assignment to build a two-layer neural network and an L-layer neural network. Each small helper function you will implement will have detailed instructions that will walk you through the necessary steps. Here is an outline of this assignment, you will:\n", + "\n", + "- Initialize the parameters for a two-layer network and for an $L$-layer neural network.\n", + "- Implement the forward propagation module (shown in purple in the figure below).\n", + " - Complete the LINEAR part of a layer's forward propagation step (resulting in $Z^{[l]}$).\n", + " - We give you the ACTIVATION function (relu/sigmoid).\n", + " - Combine the previous two steps into a new [LINEAR->ACTIVATION] forward function.\n", + " - Stack the [LINEAR->RELU] forward function L-1 time (for layers 1 through L-1) and add a [LINEAR->SIGMOID] at the end (for the final layer $L$). This gives you a new L_model_forward function.\n", + "- Compute the loss.\n", + "- Implement the backward propagation module (denoted in red in the figure below).\n", + " - Complete the LINEAR part of a layer's backward propagation step.\n", + " - We give you the gradient of the ACTIVATE function (relu_backward/sigmoid_backward) \n", + " - Combine the previous two steps into a new [LINEAR->ACTIVATION] backward function.\n", + " - Stack [LINEAR->RELU] backward L-1 times and add [LINEAR->SIGMOID] backward in a new L_model_backward function\n", + "- Finally update the parameters.\n", + "\n", + "\n", + "
**Figure 1**

\n", + "\n", + "\n", + "**Note** that for every forward function, there is a corresponding backward function. That is why at every step of your forward module you will be storing some values in a cache. The cached values are useful for computing gradients. In the backpropagation module you will then use the cache to calculate the gradients. This assignment will show you exactly how to carry out each of these steps. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Initialization\n", + "\n", + "You will write two helper functions that will initialize the parameters for your model. The first function will be used to initialize parameters for a two layer model. The second one will generalize this initialization process to $L$ layers.\n", + "\n", + "### 3.1 - 2-layer Neural Network\n", + "\n", + "**Exercise**: Create and initialize the parameters of the 2-layer neural network.\n", + "\n", + "**Instructions**:\n", + "- The model's structure is: *LINEAR -> RELU -> LINEAR -> SIGMOID*. \n", + "- Use random initialization for the weight matrices. Use `np.random.randn(shape)*0.01` with the correct shape.\n", + "- Use zero initialization for the biases. Use `np.zeros(shape)`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters\n", + "\n", + "def initialize_parameters(n_x, n_h, n_y):\n", + " \"\"\"\n", + " Argument:\n", + " n_x -- size of the input layer\n", + " n_h -- size of the hidden layer\n", + " n_y -- size of the output layer\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters:\n", + " W1 -- weight matrix of shape (n_h, n_x)\n", + " b1 -- bias vector of shape (n_h, 1)\n", + " W2 -- weight matrix of shape (n_y, n_h)\n", + " b2 -- bias vector of shape (n_y, 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " \n", + " ### START CODE HERE ### (≈ 4 lines of code)\n", + " W1 = np.random.randn(n_h, n_x) * 0.01\n", + " b1 = np.zeros((n_h,1))\n", + " W2 = np.random.randn(n_y, n_h) * 0.01\n", + " b2 = np.zeros((n_y,1))\n", + " ### END CODE HERE ###\n", + " \n", + " assert(W1.shape == (n_h, n_x))\n", + " assert(b1.shape == (n_h, 1))\n", + " assert(W2.shape == (n_y, n_h))\n", + " assert(b2.shape == (n_y, 1))\n", + " \n", + " parameters = {\"W1\": W1,\n", + " \"b1\": b1,\n", + " \"W2\": W2,\n", + " \"b2\": b2}\n", + " \n", + " return parameters " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 0.01624345 -0.00611756 -0.00528172]\n", + " [-0.01072969 0.00865408 -0.02301539]]\n", + "b1 = [[ 0.]\n", + " [ 0.]]\n", + "W2 = [[ 0.01744812 -0.00761207]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters(3,2,1)\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**W1** [[ 0.01624345 -0.00611756 -0.00528172]\n", + " [-0.01072969 0.00865408 -0.02301539]]
**b1**[[ 0.]\n", + " [ 0.]]
**W2** [[ 0.01744812 -0.00761207]]
**b2** [[ 0.]]
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 - L-layer Neural Network\n", + "\n", + "The initialization for a deeper L-layer neural network is more complicated because there are many more weight matrices and bias vectors. When completing the `initialize_parameters_deep`, you should make sure that your dimensions match between each layer. Recall that $n^{[l]}$ is the number of units in layer $l$. Thus for example if the size of our input $X$ is $(12288, 209)$ (with $m=209$ examples) then:\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
**Shape of W** **Shape of b** **Activation** **Shape of Activation**
**Layer 1** $(n^{[1]},12288)$ $(n^{[1]},1)$ $Z^{[1]} = W^{[1]} X + b^{[1]} $ $(n^{[1]},209)$
**Layer 2** $(n^{[2]}, n^{[1]})$ $(n^{[2]},1)$ $Z^{[2]} = W^{[2]} A^{[1]} + b^{[2]}$ $(n^{[2]}, 209)$
$\\vdots$ $\\vdots$ $\\vdots$ $\\vdots$ $\\vdots$
**Layer L-1** $(n^{[L-1]}, n^{[L-2]})$ $(n^{[L-1]}, 1)$ $Z^{[L-1]} = W^{[L-1]} A^{[L-2]} + b^{[L-1]}$ $(n^{[L-1]}, 209)$
**Layer L** $(n^{[L]}, n^{[L-1]})$ $(n^{[L]}, 1)$ $Z^{[L]} = W^{[L]} A^{[L-1]} + b^{[L]}$ $(n^{[L]}, 209)$
\n", + "\n", + "Remember that when we compute $W X + b$ in python, it carries out broadcasting. For example, if: \n", + "\n", + "$$ W = \\begin{bmatrix}\n", + " j & k & l\\\\\n", + " m & n & o \\\\\n", + " p & q & r \n", + "\\end{bmatrix}\\;\\;\\; X = \\begin{bmatrix}\n", + " a & b & c\\\\\n", + " d & e & f \\\\\n", + " g & h & i \n", + "\\end{bmatrix} \\;\\;\\; b =\\begin{bmatrix}\n", + " s \\\\\n", + " t \\\\\n", + " u\n", + "\\end{bmatrix}\\tag{2}$$\n", + "\n", + "Then $WX + b$ will be:\n", + "\n", + "$$ WX + b = \\begin{bmatrix}\n", + " (ja + kd + lg) + s & (jb + ke + lh) + s & (jc + kf + li)+ s\\\\\n", + " (ma + nd + og) + t & (mb + ne + oh) + t & (mc + nf + oi) + t\\\\\n", + " (pa + qd + rg) + u & (pb + qe + rh) + u & (pc + qf + ri)+ u\n", + "\\end{bmatrix}\\tag{3} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Implement initialization for an L-layer Neural Network. \n", + "\n", + "**Instructions**:\n", + "- The model's structure is *[LINEAR -> RELU] $ \\times$ (L-1) -> LINEAR -> SIGMOID*. I.e., it has $L-1$ layers using a ReLU activation function followed by an output layer with a sigmoid activation function.\n", + "- Use random initialization for the weight matrices. Use `np.random.randn(shape) * 0.01`.\n", + "- Use zeros initialization for the biases. Use `np.zeros(shape)`.\n", + "- We will store $n^{[l]}$, the number of units in different layers, in a variable `layer_dims`. For example, the `layer_dims` for the \"Planar Data classification model\" from last week would have been [2,4,1]: There were two inputs, one hidden layer with 4 hidden units, and an output layer with 1 output unit. This means `W1`'s shape was (4,2), `b1` was (4,1), `W2` was (1,4) and `b2` was (1,1). Now you will generalize this to $L$ layers! \n", + "- Here is the implementation for $L=1$ (one layer neural network). It should inspire you to implement the general case (L-layer neural network).\n", + "```python\n", + " if L == 1:\n", + " parameters[\"W\" + str(L)] = np.random.randn(layer_dims[1], layer_dims[0]) * 0.01\n", + " parameters[\"b\" + str(L)] = np.zeros((layer_dims[1], 1))\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_deep\n", + "\n", + "def initialize_parameters_deep(layer_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the dimensions of each layer in our network\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " Wl -- weight matrix of shape (layer_dims[l], layer_dims[l-1])\n", + " bl -- bias vector of shape (layer_dims[l], 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(3)\n", + " parameters = {}\n", + " L = len(layer_dims) # number of layers in the network\n", + "\n", + " for l in range(1, L):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1]) * 0.01\n", + " parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))\n", + " ### END CODE HERE ###\n", + " \n", + " assert(parameters['W' + str(l)].shape == (layer_dims[l], layer_dims[l-1]))\n", + " assert(parameters['b' + str(l)].shape == (layer_dims[l], 1))\n", + "\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 0.01788628 0.0043651 0.00096497 -0.01863493 -0.00277388]\n", + " [-0.00354759 -0.00082741 -0.00627001 -0.00043818 -0.00477218]\n", + " [-0.01313865 0.00884622 0.00881318 0.01709573 0.00050034]\n", + " [-0.00404677 -0.0054536 -0.01546477 0.00982367 -0.01101068]]\n", + "b1 = [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "W2 = [[-0.01185047 -0.0020565 0.01486148 0.00236716]\n", + " [-0.01023785 -0.00712993 0.00625245 -0.00160513]\n", + " [-0.00768836 -0.00230031 0.00745056 0.01976111]]\n", + "b2 = [[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_deep([5,4,3])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**W1** [[ 0.01788628 0.0043651 0.00096497 -0.01863493 -0.00277388]\n", + " [-0.00354759 -0.00082741 -0.00627001 -0.00043818 -0.00477218]\n", + " [-0.01313865 0.00884622 0.00881318 0.01709573 0.00050034]\n", + " [-0.00404677 -0.0054536 -0.01546477 0.00982367 -0.01101068]]
**b1** [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]
**W2** [[-0.01185047 -0.0020565 0.01486148 0.00236716]\n", + " [-0.01023785 -0.00712993 0.00625245 -0.00160513]\n", + " [-0.00768836 -0.00230031 0.00745056 0.01976111]]
**b2** [[ 0.]\n", + " [ 0.]\n", + " [ 0.]]
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Forward propagation module\n", + "\n", + "### 4.1 - Linear Forward \n", + "Now that you have initialized your parameters, you will do the forward propagation module. You will start by implementing some basic functions that you will use later when implementing the model. You will complete three functions in this order:\n", + "\n", + "- LINEAR\n", + "- LINEAR -> ACTIVATION where ACTIVATION will be either ReLU or Sigmoid. \n", + "- [LINEAR -> RELU] $\\times$ (L-1) -> LINEAR -> SIGMOID (whole model)\n", + "\n", + "The linear forward module (vectorized over all the examples) computes the following equations:\n", + "\n", + "$$Z^{[l]} = W^{[l]}A^{[l-1]} +b^{[l]}\\tag{4}$$\n", + "\n", + "where $A^{[0]} = X$. \n", + "\n", + "**Exercise**: Build the linear part of forward propagation.\n", + "\n", + "**Reminder**:\n", + "The mathematical representation of this unit is $Z^{[l]} = W^{[l]}A^{[l-1]} +b^{[l]}$. You may also find `np.dot()` useful. If your dimensions don't match, printing `W.shape` may help." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_forward\n", + "\n", + "def linear_forward(A, W, b):\n", + " \"\"\"\n", + " Implement the linear part of a layer's forward propagation.\n", + "\n", + " Arguments:\n", + " A -- activations from previous layer (or input data): (size of previous layer, number of examples)\n", + " W -- weights matrix: numpy array of shape (size of current layer, size of previous layer)\n", + " b -- bias vector, numpy array of shape (size of the current layer, 1)\n", + "\n", + " Returns:\n", + " Z -- the input of the activation function, also called pre-activation parameter \n", + " cache -- a python tuple containing \"A\", \"W\" and \"b\" ; stored for computing the backward pass efficiently\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " Z = np.dot(W, A) + b\n", + " ### END CODE HERE ###\n", + " \n", + " assert(Z.shape == (W.shape[0], A.shape[1]))\n", + " cache = (A, W, b)\n", + " \n", + " return Z, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z = [[ 3.26295337 -1.23429987]]\n" + ] + } + ], + "source": [ + "A, W, b = linear_forward_test_case()\n", + "\n", + "Z, linear_cache = linear_forward(A, W, b)\n", + "print(\"Z = \" + str(Z))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Z** [[ 3.26295337 -1.23429987]]
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 - Linear-Activation Forward\n", + "\n", + "In this notebook, you will use two activation functions:\n", + "\n", + "- **Sigmoid**: $\\sigma(Z) = \\sigma(W A + b) = \\frac{1}{ 1 + e^{-(W A + b)}}$. We have provided you with the `sigmoid` function. This function returns **two** items: the activation value \"`a`\" and a \"`cache`\" that contains \"`Z`\" (it's what we will feed in to the corresponding backward function). To use it you could just call: \n", + "``` python\n", + "A, activation_cache = sigmoid(Z)\n", + "```\n", + "\n", + "- **ReLU**: The mathematical formula for ReLu is $A = RELU(Z) = max(0, Z)$. We have provided you with the `relu` function. This function returns **two** items: the activation value \"`A`\" and a \"`cache`\" that contains \"`Z`\" (it's what we will feed in to the corresponding backward function). To use it you could just call:\n", + "``` python\n", + "A, activation_cache = relu(Z)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For more convenience, you are going to group two functions (Linear and Activation) into one function (LINEAR->ACTIVATION). Hence, you will implement a function that does the LINEAR forward step followed by an ACTIVATION forward step.\n", + "\n", + "**Exercise**: Implement the forward propagation of the *LINEAR->ACTIVATION* layer. Mathematical relation is: $A^{[l]} = g(Z^{[l]}) = g(W^{[l]}A^{[l-1]} +b^{[l]})$ where the activation \"g\" can be sigmoid() or relu(). Use linear_forward() and the correct activation function." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_activation_forward\n", + "\n", + "def linear_activation_forward(A_prev, W, b, activation):\n", + " \"\"\"\n", + " Implement the forward propagation for the LINEAR->ACTIVATION layer\n", + "\n", + " Arguments:\n", + " A_prev -- activations from previous layer (or input data): (size of previous layer, number of examples)\n", + " W -- weights matrix: numpy array of shape (size of current layer, size of previous layer)\n", + " b -- bias vector, numpy array of shape (size of the current layer, 1)\n", + " activation -- the activation to be used in this layer, stored as a text string: \"sigmoid\" or \"relu\"\n", + "\n", + " Returns:\n", + " A -- the output of the activation function, also called the post-activation value \n", + " cache -- a python tuple containing \"linear_cache\" and \"activation_cache\";\n", + " stored for computing the backward pass efficiently\n", + " \"\"\"\n", + " \n", + " if activation == \"sigmoid\":\n", + " # Inputs: \"A_prev, W, b\". Outputs: \"A, activation_cache\".\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " Z, linear_cache = linear_forward(A_prev, W, b)\n", + " A, activation_cache = sigmoid(Z)\n", + " ### END CODE HERE ###\n", + " \n", + " elif activation == \"relu\":\n", + " # Inputs: \"A_prev, W, b\". Outputs: \"A, activation_cache\".\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " Z, linear_cache = linear_forward(A_prev, W, b)\n", + " A, activation_cache = relu(Z)\n", + " ### END CODE HERE ###\n", + " \n", + " assert (A.shape == (W.shape[0], A_prev.shape[1]))\n", + " cache = (linear_cache, activation_cache)\n", + "\n", + " return A, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "With sigmoid: A = [[ 0.96890023 0.11013289]]\n", + "With ReLU: A = [[ 3.43896131 0. ]]\n" + ] + } + ], + "source": [ + "A_prev, W, b = linear_activation_forward_test_case()\n", + "\n", + "A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = \"sigmoid\")\n", + "print(\"With sigmoid: A = \" + str(A))\n", + "\n", + "A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = \"relu\")\n", + "print(\"With ReLU: A = \" + str(A))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**With sigmoid: A ** [[ 0.96890023 0.11013289]]
**With ReLU: A ** [[ 3.43896131 0. ]]
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: In deep learning, the \"[LINEAR->ACTIVATION]\" computation is counted as a single layer in the neural network, not two layers. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### d) L-Layer Model \n", + "\n", + "For even more convenience when implementing the $L$-layer Neural Net, you will need a function that replicates the previous one (`linear_activation_forward` with RELU) $L-1$ times, then follows that with one `linear_activation_forward` with SIGMOID.\n", + "\n", + "\n", + "
**Figure 2** : *[LINEAR -> RELU] $\\times$ (L-1) -> LINEAR -> SIGMOID* model

\n", + "\n", + "**Exercise**: Implement the forward propagation of the above model.\n", + "\n", + "**Instruction**: In the code below, the variable `AL` will denote $A^{[L]} = \\sigma(Z^{[L]}) = \\sigma(W^{[L]} A^{[L-1]} + b^{[L]})$. (This is sometimes also called `Yhat`, i.e., this is $\\hat{Y}$.) \n", + "\n", + "**Tips**:\n", + "- Use the functions you had previously written \n", + "- Use a for loop to replicate [LINEAR->RELU] (L-1) times\n", + "- Don't forget to keep track of the caches in the \"caches\" list. To add a new value `c` to a `list`, you can use `list.append(c)`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: L_model_forward\n", + "\n", + "def L_model_forward(X, parameters):\n", + " \"\"\"\n", + " Implement forward propagation for the [LINEAR->RELU]*(L-1)->LINEAR->SIGMOID computation\n", + " \n", + " Arguments:\n", + " X -- data, numpy array of shape (input size, number of examples)\n", + " parameters -- output of initialize_parameters_deep()\n", + " \n", + " Returns:\n", + " AL -- last post-activation value\n", + " caches -- list of caches containing:\n", + " every cache of linear_activation_forward() (there are L-1 of them, indexed from 0 to L-1)\n", + " \"\"\"\n", + "\n", + " caches = []\n", + " A = X\n", + " L = len(parameters) // 2 # number of layers in the neural network\n", + " \n", + " # Implement [LINEAR -> RELU]*(L-1). Add \"cache\" to the \"caches\" list.\n", + " for l in range(1, L):\n", + " A_prev = A \n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " W, b = parameters[\"W\"+str(l)], parameters[\"b\"+str(l)]\n", + " A, cache = linear_activation_forward(A_prev, W, b, \"relu\")\n", + " caches.append(cache)\n", + " ### END CODE HERE ###\n", + " \n", + " # Implement LINEAR -> SIGMOID. Add \"cache\" to the \"caches\" list.\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " W, b = parameters[\"W\"+str(L)], parameters[\"b\"+str(L)]\n", + " AL, cache = linear_activation_forward(A, W, b, \"sigmoid\")\n", + " caches.append(cache)\n", + " ### END CODE HERE ###\n", + " \n", + " assert(AL.shape == (1,X.shape[1]))\n", + " \n", + " return AL, caches" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AL = [[ 0.03921668 0.70498921 0.19734387 0.04728177]]\n", + "Length of caches list = 3\n" + ] + } + ], + "source": [ + "X, parameters = L_model_forward_test_case_2hidden()\n", + "AL, caches = L_model_forward(X, parameters)\n", + "print(\"AL = \" + str(AL))\n", + "print(\"Length of caches list = \" + str(len(caches)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**AL** [[ 0.03921668 0.70498921 0.19734387 0.04728177]]
**Length of caches list ** 3
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great! Now you have a full forward propagation that takes the input X and outputs a row vector $A^{[L]}$ containing your predictions. It also records all intermediate values in \"caches\". Using $A^{[L]}$, you can compute the cost of your predictions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 - Cost function\n", + "\n", + "Now you will implement forward and backward propagation. You need to compute the cost, because you want to check if your model is actually learning.\n", + "\n", + "**Exercise**: Compute the cross-entropy cost $J$, using the following formula: $$-\\frac{1}{m} \\sum\\limits_{i = 1}^{m} (y^{(i)}\\log\\left(a^{[L] (i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[L](i)}\\right)) \\tag{7}$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost\n", + "\n", + "def compute_cost(AL, Y):\n", + " \"\"\"\n", + " Implement the cost function defined by equation (7).\n", + "\n", + " Arguments:\n", + " AL -- probability vector corresponding to your label predictions, shape (1, number of examples)\n", + " Y -- true \"label\" vector (for example: containing 0 if non-cat, 1 if cat), shape (1, number of examples)\n", + "\n", + " Returns:\n", + " cost -- cross-entropy cost\n", + " \"\"\"\n", + " \n", + " m = Y.shape[1]\n", + "\n", + " # Compute loss from aL and y.\n", + " ### START CODE HERE ### (≈ 1 lines of code)\n", + " cost = -np.sum(Y*np.log(AL)+(1-Y)*np.log(1-AL))/m\n", + " ### END CODE HERE ###\n", + " \n", + " cost = np.squeeze(cost) # To make sure your cost's shape is what we expect (e.g. this turns [[17]] into 17).\n", + " assert(cost.shape == ())\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = 0.279776563579\n" + ] + } + ], + "source": [ + "Y, AL = compute_cost_test_case()\n", + "\n", + "print(\"cost = \" + str(compute_cost(AL, Y)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
**cost** 0.2797765635793422
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6 - Backward propagation module\n", + "\n", + "Just like with forward propagation, you will implement helper functions for backpropagation. Remember that back propagation is used to calculate the gradient of the loss function with respect to the parameters. \n", + "\n", + "**Reminder**: \n", + "\n", + "
**Figure 3** : Forward and Backward propagation for *LINEAR->RELU->LINEAR->SIGMOID*
*The purple blocks represent the forward propagation, and the red blocks represent the backward propagation.*
\n", + "\n", + "\n", + "\n", + "Now, similar to forward propagation, you are going to build the backward propagation in three steps:\n", + "- LINEAR backward\n", + "- LINEAR -> ACTIVATION backward where ACTIVATION computes the derivative of either the ReLU or sigmoid activation\n", + "- [LINEAR -> RELU] $\\times$ (L-1) -> LINEAR -> SIGMOID backward (whole model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.1 - Linear backward\n", + "\n", + "For layer $l$, the linear part is: $Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]}$ (followed by an activation).\n", + "\n", + "Suppose you have already calculated the derivative $dZ^{[l]} = \\frac{\\partial \\mathcal{L} }{\\partial Z^{[l]}}$. You want to get $(dW^{[l]}, db^{[l]}, dA^{[l-1]})$.\n", + "\n", + "\n", + "
**Figure 4**
\n", + "\n", + "The three outputs $(dW^{[l]}, db^{[l]}, dA^{[l-1]})$ are computed using the input $dZ^{[l]}$.Here are the formulas you need:\n", + "$$ dW^{[l]} = \\frac{\\partial \\mathcal{J} }{\\partial W^{[l]}} = \\frac{1}{m} dZ^{[l]} A^{[l-1] T} \\tag{8}$$\n", + "$$ db^{[l]} = \\frac{\\partial \\mathcal{J} }{\\partial b^{[l]}} = \\frac{1}{m} \\sum_{i = 1}^{m} dZ^{[l](i)}\\tag{9}$$\n", + "$$ dA^{[l-1]} = \\frac{\\partial \\mathcal{L} }{\\partial A^{[l-1]}} = W^{[l] T} dZ^{[l]} \\tag{10}$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Use the 3 formulas above to implement linear_backward()." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_backward\n", + "\n", + "def linear_backward(dZ, cache):\n", + " \"\"\"\n", + " Implement the linear portion of backward propagation for a single layer (layer l)\n", + "\n", + " Arguments:\n", + " dZ -- Gradient of the cost with respect to the linear output (of current layer l)\n", + " cache -- tuple of values (A_prev, W, b) coming from the forward propagation in the current layer\n", + "\n", + " Returns:\n", + " dA_prev -- Gradient of the cost with respect to the activation (of the previous layer l-1), same shape as A_prev\n", + " dW -- Gradient of the cost with respect to W (current layer l), same shape as W\n", + " db -- Gradient of the cost with respect to b (current layer l), same shape as b\n", + " \"\"\"\n", + " A_prev, W, b = cache\n", + " m = A_prev.shape[1]\n", + "\n", + " ### START CODE HERE ### (≈ 3 lines of code)\n", + " dW = np.dot(dZ,A_prev.T)/m\n", + " db = np.sum(dZ,axis=1,keepdims=True)/m\n", + " dA_prev = np.dot(W.T,dZ)\n", + " ### END CODE HERE ###\n", + " \n", + " assert (dA_prev.shape == A_prev.shape)\n", + " assert (dW.shape == W.shape)\n", + " assert (db.shape == b.shape)\n", + " \n", + " return dA_prev, dW, db" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dA_prev = [[-1.15171336 0.06718465 -0.3204696 2.09812712]\n", + " [ 0.60345879 -3.72508701 5.81700741 -3.84326836]\n", + " [-0.4319552 -1.30987417 1.72354705 0.05070578]\n", + " [-0.38981415 0.60811244 -1.25938424 1.47191593]\n", + " [-2.52214926 2.67882552 -0.67947465 1.48119548]]\n", + "dW = [[ 0.07313866 -0.0976715 -0.87585828 0.73763362 0.00785716]\n", + " [ 0.85508818 0.37530413 -0.59912655 0.71278189 -0.58931808]\n", + " [ 0.97913304 -0.24376494 -0.08839671 0.55151192 -0.10290907]]\n", + "db = [[-0.14713786]\n", + " [-0.11313155]\n", + " [-0.13209101]]\n" + ] + } + ], + "source": [ + "# Set up some test inputs\n", + "dZ, linear_cache = linear_backward_test_case()\n", + "\n", + "dA_prev, dW, db = linear_backward(dZ, linear_cache)\n", + "print (\"dA_prev = \"+ str(dA_prev))\n", + "print (\"dW = \" + str(dW))\n", + "print (\"db = \" + str(db))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** Expected Output**:\n", + " \n", + "```\n", + "dA_prev = \n", + " [[-1.15171336 0.06718465 -0.3204696 2.09812712]\n", + " [ 0.60345879 -3.72508701 5.81700741 -3.84326836]\n", + " [-0.4319552 -1.30987417 1.72354705 0.05070578]\n", + " [-0.38981415 0.60811244 -1.25938424 1.47191593]\n", + " [-2.52214926 2.67882552 -0.67947465 1.48119548]]\n", + "dW = \n", + " [[ 0.07313866 -0.0976715 -0.87585828 0.73763362 0.00785716]\n", + " [ 0.85508818 0.37530413 -0.59912655 0.71278189 -0.58931808]\n", + " [ 0.97913304 -0.24376494 -0.08839671 0.55151192 -0.10290907]]\n", + "db = \n", + " [[-0.14713786]\n", + " [-0.11313155]\n", + " [-0.13209101]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.2 - Linear-Activation backward\n", + "\n", + "Next, you will create a function that merges the two helper functions: **`linear_backward`** and the backward step for the activation **`linear_activation_backward`**. \n", + "\n", + "To help you implement `linear_activation_backward`, we provided two backward functions:\n", + "- **`sigmoid_backward`**: Implements the backward propagation for SIGMOID unit. You can call it as follows:\n", + "\n", + "```python\n", + "dZ = sigmoid_backward(dA, activation_cache)\n", + "```\n", + "\n", + "- **`relu_backward`**: Implements the backward propagation for RELU unit. You can call it as follows:\n", + "\n", + "```python\n", + "dZ = relu_backward(dA, activation_cache)\n", + "```\n", + "\n", + "If $g(.)$ is the activation function, \n", + "`sigmoid_backward` and `relu_backward` compute $$dZ^{[l]} = dA^{[l]} * g'(Z^{[l]}) \\tag{11}$$. \n", + "\n", + "**Exercise**: Implement the backpropagation for the *LINEAR->ACTIVATION* layer." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_activation_backward\n", + "\n", + "def linear_activation_backward(dA, cache, activation):\n", + " \"\"\"\n", + " Implement the backward propagation for the LINEAR->ACTIVATION layer.\n", + " \n", + " Arguments:\n", + " dA -- post-activation gradient for current layer l \n", + " cache -- tuple of values (linear_cache, activation_cache) we store for computing backward propagation efficiently\n", + " activation -- the activation to be used in this layer, stored as a text string: \"sigmoid\" or \"relu\"\n", + " \n", + " Returns:\n", + " dA_prev -- Gradient of the cost with respect to the activation (of the previous layer l-1), same shape as A_prev\n", + " dW -- Gradient of the cost with respect to W (current layer l), same shape as W\n", + " db -- Gradient of the cost with respect to b (current layer l), same shape as b\n", + " \"\"\"\n", + " linear_cache, activation_cache = cache\n", + " \n", + " if activation == \"relu\":\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dZ = relu_backward(dA, activation_cache)\n", + " dA_prev, dW, db = linear_backward(dZ, linear_cache)\n", + " ### END CODE HERE ###\n", + " \n", + " elif activation == \"sigmoid\":\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dZ = sigmoid_backward(dA, activation_cache)\n", + " dA_prev, dW, db = linear_backward(dZ, linear_cache)\n", + " ### END CODE HERE ###\n", + " \n", + " return dA_prev, dW, db" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sigmoid:\n", + "dA_prev = [[ 0.11017994 0.01105339]\n", + " [ 0.09466817 0.00949723]\n", + " [-0.05743092 -0.00576154]]\n", + "dW = [[ 0.10266786 0.09778551 -0.01968084]]\n", + "db = [[-0.05729622]]\n", + "\n", + "relu:\n", + "dA_prev = [[ 0.44090989 -0. ]\n", + " [ 0.37883606 -0. ]\n", + " [-0.2298228 0. ]]\n", + "dW = [[ 0.44513824 0.37371418 -0.10478989]]\n", + "db = [[-0.20837892]]\n" + ] + } + ], + "source": [ + "dAL, linear_activation_cache = linear_activation_backward_test_case()\n", + "\n", + "dA_prev, dW, db = linear_activation_backward(dAL, linear_activation_cache, activation = \"sigmoid\")\n", + "print (\"sigmoid:\")\n", + "print (\"dA_prev = \"+ str(dA_prev))\n", + "print (\"dW = \" + str(dW))\n", + "print (\"db = \" + str(db) + \"\\n\")\n", + "\n", + "dA_prev, dW, db = linear_activation_backward(dAL, linear_activation_cache, activation = \"relu\")\n", + "print (\"relu:\")\n", + "print (\"dA_prev = \"+ str(dA_prev))\n", + "print (\"dW = \" + str(dW))\n", + "print (\"db = \" + str(db))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output with sigmoid:**\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dA_prev [[ 0.11017994 0.01105339]\n", + " [ 0.09466817 0.00949723]\n", + " [-0.05743092 -0.00576154]]
dW [[ 0.10266786 0.09778551 -0.01968084]]
db [[-0.05729622]]
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output with relu:**\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dA_prev [[ 0.44090989 0. ]\n", + " [ 0.37883606 0. ]\n", + " [-0.2298228 0. ]]
dW [[ 0.44513824 0.37371418 -0.10478989]]
db [[-0.20837892]]
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.3 - L-Model Backward \n", + "\n", + "Now you will implement the backward function for the whole network. Recall that when you implemented the `L_model_forward` function, at each iteration, you stored a cache which contains (X,W,b, and z). In the back propagation module, you will use those variables to compute the gradients. Therefore, in the `L_model_backward` function, you will iterate through all the hidden layers backward, starting from layer $L$. On each step, you will use the cached values for layer $l$ to backpropagate through layer $l$. Figure 5 below shows the backward pass. \n", + "\n", + "\n", + "\n", + "
**Figure 5** : Backward pass
\n", + "\n", + "** Initializing backpropagation**:\n", + "To backpropagate through this network, we know that the output is, \n", + "$A^{[L]} = \\sigma(Z^{[L]})$. Your code thus needs to compute `dAL` $= \\frac{\\partial \\mathcal{L}}{\\partial A^{[L]}}$.\n", + "To do so, use this formula (derived using calculus which you don't need in-depth knowledge of):\n", + "```python\n", + "dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL)) # derivative of cost with respect to AL\n", + "```\n", + "\n", + "You can then use this post-activation gradient `dAL` to keep going backward. As seen in Figure 5, you can now feed in `dAL` into the LINEAR->SIGMOID backward function you implemented (which will use the cached values stored by the L_model_forward function). After that, you will have to use a `for` loop to iterate through all the other layers using the LINEAR->RELU backward function. You should store each dA, dW, and db in the grads dictionary. To do so, use this formula : \n", + "\n", + "$$grads[\"dW\" + str(l)] = dW^{[l]}\\tag{15} $$\n", + "\n", + "For example, for $l=3$ this would store $dW^{[l]}$ in `grads[\"dW3\"]`.\n", + "\n", + "**Exercise**: Implement backpropagation for the *[LINEAR->RELU] $\\times$ (L-1) -> LINEAR -> SIGMOID* model." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: L_model_backward\n", + "\n", + "def L_model_backward(AL, Y, caches):\n", + " \"\"\"\n", + " Implement the backward propagation for the [LINEAR->RELU] * (L-1) -> LINEAR -> SIGMOID group\n", + " \n", + " Arguments:\n", + " AL -- probability vector, output of the forward propagation (L_model_forward())\n", + " Y -- true \"label\" vector (containing 0 if non-cat, 1 if cat)\n", + " caches -- list of caches containing:\n", + " every cache of linear_activation_forward() with \"relu\" (it's caches[l], for l in range(L-1) i.e l = 0...L-2)\n", + " the cache of linear_activation_forward() with \"sigmoid\" (it's caches[L-1])\n", + " \n", + " Returns:\n", + " grads -- A dictionary with the gradients\n", + " grads[\"dA\" + str(l)] = ... \n", + " grads[\"dW\" + str(l)] = ...\n", + " grads[\"db\" + str(l)] = ... \n", + " \"\"\"\n", + " grads = {}\n", + " L = len(caches) # the number of layers\n", + " m = AL.shape[1]\n", + " Y = Y.reshape(AL.shape) # after this line, Y is the same shape as AL\n", + " \n", + " # Initializing the backpropagation\n", + " ### START CODE HERE ### (1 line of code)\n", + " dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))\n", + " ### END CODE HERE ###\n", + " \n", + " # Lth layer (SIGMOID -> LINEAR) gradients. Inputs: \"dAL, current_cache\". Outputs: \"grads[\"dAL-1\"], grads[\"dWL\"], grads[\"dbL\"]\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " current_cache = linear_activation_backward(dAL, caches[-1], \"sigmoid\")\n", + " grads[\"dA\" + str(L-1)], grads[\"dW\" + str(L)], grads[\"db\" + str(L)] = current_cache\n", + " ### END CODE HERE ###\n", + " \n", + " # Loop from l=L-2 to l=0\n", + " for l in reversed(range(L-1)):\n", + " # lth layer: (RELU -> LINEAR) gradients.\n", + " # Inputs: \"grads[\"dA\" + str(l + 1)], current_cache\". Outputs: \"grads[\"dA\" + str(l)] , grads[\"dW\" + str(l + 1)] , grads[\"db\" + str(l + 1)] \n", + " ### START CODE HERE ### (approx. 5 lines)\n", + " current_cache = linear_activation_backward(grads[\"dA\" + str(l+1)], caches[l], \"relu\")\n", + " dA_prev_temp, dW_temp, db_temp = current_cache\n", + " grads[\"dA\" + str(l)] = dA_prev_temp\n", + " grads[\"dW\" + str(l + 1)] = dW_temp\n", + " grads[\"db\" + str(l + 1)] = db_temp\n", + " ### END CODE HERE ###\n", + "\n", + " return grads" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dW1 = [[ 0.41010002 0.07807203 0.13798444 0.10502167]\n", + " [ 0. 0. 0. 0. ]\n", + " [ 0.05283652 0.01005865 0.01777766 0.0135308 ]]\n", + "db1 = [[-0.22007063]\n", + " [ 0. ]\n", + " [-0.02835349]]\n", + "dA1 = [[ 0.12913162 -0.44014127]\n", + " [-0.14175655 0.48317296]\n", + " [ 0.01663708 -0.05670698]]\n" + ] + } + ], + "source": [ + "AL, Y_assess, caches = L_model_backward_test_case()\n", + "grads = L_model_backward(AL, Y_assess, caches)\n", + "print_grads(grads)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
dW1 [[ 0.41010002 0.07807203 0.13798444 0.10502167]\n", + " [ 0. 0. 0. 0. ]\n", + " [ 0.05283652 0.01005865 0.01777766 0.0135308 ]]
db1 [[-0.22007063]\n", + " [ 0. ]\n", + " [-0.02835349]]
dA1 [[ 0.12913162 -0.44014127]\n", + " [-0.14175655 0.48317296]\n", + " [ 0.01663708 -0.05670698]]
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.4 - Update Parameters\n", + "\n", + "In this section you will update the parameters of the model, using gradient descent: \n", + "\n", + "$$ W^{[l]} = W^{[l]} - \\alpha \\text{ } dW^{[l]} \\tag{16}$$\n", + "$$ b^{[l]} = b^{[l]} - \\alpha \\text{ } db^{[l]} \\tag{17}$$\n", + "\n", + "where $\\alpha$ is the learning rate. After computing the updated parameters, store them in the parameters dictionary. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Implement `update_parameters()` to update your parameters using gradient descent.\n", + "\n", + "**Instructions**:\n", + "Update parameters using gradient descent on every $W^{[l]}$ and $b^{[l]}$ for $l = 1, 2, ..., L$. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters\n", + "\n", + "def update_parameters(parameters, grads, learning_rate):\n", + " \"\"\"\n", + " Update parameters using gradient descent\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters \n", + " grads -- python dictionary containing your gradients, output of L_model_backward\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " parameters[\"W\" + str(l)] = ... \n", + " parameters[\"b\" + str(l)] = ...\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural network\n", + "\n", + " # Update rule for each parameter. Use a for loop.\n", + " ### START CODE HERE ### (≈ 3 lines of code)\n", + " for l in range(L):\n", + " parameters[\"W\" + str(l+1)] -= grads[\"dW\"+str(l+1)]*learning_rate\n", + " parameters[\"b\" + str(l+1)] -= grads[\"db\"+str(l+1)]*learning_rate\n", + " ### END CODE HERE ###\n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[-0.59562069 -0.09991781 -2.14584584 1.82662008]\n", + " [-1.76569676 -0.80627147 0.51115557 -1.18258802]\n", + " [-1.0535704 -0.86128581 0.68284052 2.20374577]]\n", + "b1 = [[-0.04659241]\n", + " [-1.28888275]\n", + " [ 0.53405496]]\n", + "W2 = [[-0.55569196 0.0354055 1.32964895]]\n", + "b2 = [[-0.84610769]]\n" + ] + } + ], + "source": [ + "parameters, grads = update_parameters_test_case()\n", + "parameters = update_parameters(parameters, grads, 0.1)\n", + "\n", + "print (\"W1 = \"+ str(parameters[\"W1\"]))\n", + "print (\"b1 = \"+ str(parameters[\"b1\"]))\n", + "print (\"W2 = \"+ str(parameters[\"W2\"]))\n", + "print (\"b2 = \"+ str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
W1 [[-0.59562069 -0.09991781 -2.14584584 1.82662008]\n", + " [-1.76569676 -0.80627147 0.51115557 -1.18258802]\n", + " [-1.0535704 -0.86128581 0.68284052 2.20374577]]
b1 [[-0.04659241]\n", + " [-1.28888275]\n", + " [ 0.53405496]]
W2 [[-0.55569196 0.0354055 1.32964895]]
b2 [[-0.84610769]]
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 7 - Conclusion\n", + "\n", + "Congrats on implementing all the functions required for building a deep neural network! \n", + "\n", + "We know it was a long assignment but going forward it will only get better. The next part of the assignment is easier. \n", + "\n", + "In the next assignment you will put all these together to build two models:\n", + "- A two-layer neural network\n", + "- An L-layer neural network\n", + "\n", + "You will in fact use these models to classify cat vs non-cat images!" + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "neural-networks-deep-learning", + "graded_item_id": "c4HO0", + "launcher_item_id": "lSYZM" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Coursera/Lesson1/Week4/Deep+Neural+Network+-+Application+v8.ipynb b/Coursera/Lesson1/Week4/Deep+Neural+Network+-+Application+v8.ipynb new file mode 100644 index 0000000..9a4044e --- /dev/null +++ b/Coursera/Lesson1/Week4/Deep+Neural+Network+-+Application+v8.ipynb @@ -0,0 +1,977 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deep Neural Network for Image Classification: Application\n", + "\n", + "When you finish this, you will have finished the last programming assignment of Week 4, and also the last programming assignment of this course! \n", + "\n", + "You will use the functions you'd implemented in the previous assignment to build a deep network, and apply it to cat vs non-cat classification. Hopefully, you will see an improvement in accuracy relative to your previous logistic regression implementation. \n", + "\n", + "**After this assignment you will be able to:**\n", + "- Build and apply a deep neural network to supervised learning. \n", + "\n", + "Let's get started!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Packages" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's first import all the packages that you will need during this assignment. \n", + "- [numpy](https://www.numpy.org/) is the fundamental package for scientific computing with Python.\n", + "- [matplotlib](http://matplotlib.org) is a library to plot graphs in Python.\n", + "- [h5py](http://www.h5py.org) is a common package to interact with a dataset that is stored on an H5 file.\n", + "- [PIL](http://www.pythonware.com/products/pil/) and [scipy](https://www.scipy.org/) are used here to test your model with your own picture at the end.\n", + "- dnn_app_utils provides the functions implemented in the \"Building your Deep Neural Network: Step by Step\" assignment to this notebook.\n", + "- np.random.seed(1) is used to keep all the random function calls consistent. It will help us grade your work." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import time\n", + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "import scipy\n", + "from PIL import Image\n", + "from scipy import ndimage\n", + "from dnn_app_utils_v3 import *\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Dataset\n", + "\n", + "You will use the same \"Cat vs non-Cat\" dataset as in \"Logistic Regression as a Neural Network\" (Assignment 2). The model you had built had 70% test accuracy on classifying cats vs non-cats images. Hopefully, your new model will perform a better!\n", + "\n", + "**Problem Statement**: You are given a dataset (\"data.h5\") containing:\n", + " - a training set of m_train images labelled as cat (1) or non-cat (0)\n", + " - a test set of m_test images labelled as cat and non-cat\n", + " - each image is of shape (num_px, num_px, 3) where 3 is for the 3 channels (RGB).\n", + "\n", + "Let's get more familiar with the dataset. Load the data by running the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "train_x_orig, train_y, test_x_orig, test_y, classes = load_data()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following code will show you an image in the dataset. Feel free to change the index and re-run the cell multiple times to see other images. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y = 0. It's a non-cat picture.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example of a picture\n", + "index = 10\n", + "plt.imshow(train_x_orig[index])\n", + "print (\"y = \" + str(train_y[0,index]) + \". It's a \" + classes[train_y[0,index]].decode(\"utf-8\") + \" picture.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of training examples: 209\n", + "Number of testing examples: 50\n", + "Each image is of size: (64, 64, 3)\n", + "train_x_orig shape: (209, 64, 64, 3)\n", + "train_y shape: (1, 209)\n", + "test_x_orig shape: (50, 64, 64, 3)\n", + "test_y shape: (1, 50)\n" + ] + } + ], + "source": [ + "# Explore your dataset \n", + "m_train = train_x_orig.shape[0]\n", + "num_px = train_x_orig.shape[1]\n", + "m_test = test_x_orig.shape[0]\n", + "\n", + "print (\"Number of training examples: \" + str(m_train))\n", + "print (\"Number of testing examples: \" + str(m_test))\n", + "print (\"Each image is of size: (\" + str(num_px) + \", \" + str(num_px) + \", 3)\")\n", + "print (\"train_x_orig shape: \" + str(train_x_orig.shape))\n", + "print (\"train_y shape: \" + str(train_y.shape))\n", + "print (\"test_x_orig shape: \" + str(test_x_orig.shape))\n", + "print (\"test_y shape: \" + str(test_y.shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As usual, you reshape and standardize the images before feeding them to the network. The code is given in the cell below.\n", + "\n", + "\n", + "\n", + "
Figure 1: Image to vector conversion.
" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train_x's shape: (12288, 209)\n", + "test_x's shape: (12288, 50)\n" + ] + } + ], + "source": [ + "# Reshape the training and test examples \n", + "train_x_flatten = train_x_orig.reshape(train_x_orig.shape[0], -1).T # The \"-1\" makes reshape flatten the remaining dimensions\n", + "test_x_flatten = test_x_orig.reshape(test_x_orig.shape[0], -1).T\n", + "\n", + "# Standardize data to have feature values between 0 and 1.\n", + "train_x = train_x_flatten/255.\n", + "test_x = test_x_flatten/255.\n", + "\n", + "print (\"train_x's shape: \" + str(train_x.shape))\n", + "print (\"test_x's shape: \" + str(test_x.shape))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$12,288$ equals $64 \\times 64 \\times 3$ which is the size of one reshaped image vector." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Architecture of your model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that you are familiar with the dataset, it is time to build a deep neural network to distinguish cat images from non-cat images.\n", + "\n", + "You will build two different models:\n", + "- A 2-layer neural network\n", + "- An L-layer deep neural network\n", + "\n", + "You will then compare the performance of these models, and also try out different values for $L$. \n", + "\n", + "Let's look at the two architectures.\n", + "\n", + "### 3.1 - 2-layer neural network\n", + "\n", + "\n", + "
Figure 2: 2-layer neural network.
The model can be summarized as: ***INPUT -> LINEAR -> RELU -> LINEAR -> SIGMOID -> OUTPUT***.
\n", + "\n", + "Detailed Architecture of figure 2:\n", + "- The input is a (64,64,3) image which is flattened to a vector of size $(12288,1)$. \n", + "- The corresponding vector: $[x_0,x_1,...,x_{12287}]^T$ is then multiplied by the weight matrix $W^{[1]}$ of size $(n^{[1]}, 12288)$.\n", + "- You then add a bias term and take its relu to get the following vector: $[a_0^{[1]}, a_1^{[1]},..., a_{n^{[1]}-1}^{[1]}]^T$.\n", + "- You then repeat the same process.\n", + "- You multiply the resulting vector by $W^{[2]}$ and add your intercept (bias). \n", + "- Finally, you take the sigmoid of the result. If it is greater than 0.5, you classify it to be a cat.\n", + "\n", + "### 3.2 - L-layer deep neural network\n", + "\n", + "It is hard to represent an L-layer deep neural network with the above representation. However, here is a simplified network representation:\n", + "\n", + "\n", + "
Figure 3: L-layer neural network.
The model can be summarized as: ***[LINEAR -> RELU] $\\times$ (L-1) -> LINEAR -> SIGMOID***
\n", + "\n", + "Detailed Architecture of figure 3:\n", + "- The input is a (64,64,3) image which is flattened to a vector of size (12288,1).\n", + "- The corresponding vector: $[x_0,x_1,...,x_{12287}]^T$ is then multiplied by the weight matrix $W^{[1]}$ and then you add the intercept $b^{[1]}$. The result is called the linear unit.\n", + "- Next, you take the relu of the linear unit. This process could be repeated several times for each $(W^{[l]}, b^{[l]})$ depending on the model architecture.\n", + "- Finally, you take the sigmoid of the final linear unit. If it is greater than 0.5, you classify it to be a cat.\n", + "\n", + "### 3.3 - General methodology\n", + "\n", + "As usual you will follow the Deep Learning methodology to build the model:\n", + " 1. Initialize parameters / Define hyperparameters\n", + " 2. Loop for num_iterations:\n", + " a. Forward propagation\n", + " b. Compute cost function\n", + " c. Backward propagation\n", + " d. Update parameters (using parameters, and grads from backprop) \n", + " 4. Use trained parameters to predict labels\n", + "\n", + "Let's now implement those two models!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Two-layer neural network\n", + "\n", + "**Question**: Use the helper functions you have implemented in the previous assignment to build a 2-layer neural network with the following structure: *LINEAR -> RELU -> LINEAR -> SIGMOID*. The functions you may need and their inputs are:\n", + "```python\n", + "def initialize_parameters(n_x, n_h, n_y):\n", + " ...\n", + " return parameters \n", + "def linear_activation_forward(A_prev, W, b, activation):\n", + " ...\n", + " return A, cache\n", + "def compute_cost(AL, Y):\n", + " ...\n", + " return cost\n", + "def linear_activation_backward(dA, cache, activation):\n", + " ...\n", + " return dA_prev, dW, db\n", + "def update_parameters(parameters, grads, learning_rate):\n", + " ...\n", + " return parameters\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "### CONSTANTS DEFINING THE MODEL ####\n", + "n_x = 12288 # num_px * num_px * 3\n", + "n_h = 7\n", + "n_y = 1\n", + "layers_dims = (n_x, n_h, n_y)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: two_layer_model\n", + "\n", + "def two_layer_model(X, Y, layers_dims, learning_rate = 0.0075, num_iterations = 3000, print_cost=False):\n", + " \"\"\"\n", + " Implements a two-layer neural network: LINEAR->RELU->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (n_x, number of examples)\n", + " Y -- true \"label\" vector (containing 1 if cat, 0 if non-cat), of shape (1, number of examples)\n", + " layers_dims -- dimensions of the layers (n_x, n_h, n_y)\n", + " num_iterations -- number of iterations of the optimization loop\n", + " learning_rate -- learning rate of the gradient descent update rule\n", + " print_cost -- If set to True, this will print the cost every 100 iterations \n", + " \n", + " Returns:\n", + " parameters -- a dictionary containing W1, W2, b1, and b2\n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " grads = {}\n", + " costs = [] # to keep track of the cost\n", + " m = X.shape[1] # number of examples\n", + " (n_x, n_h, n_y) = layers_dims\n", + " \n", + " # Initialize parameters dictionary, by calling one of the functions you'd previously implemented\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " parameters = initialize_parameters(n_x, n_h, n_y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Get W1, b1, W2 and b2 from the dictionary parameters.\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " \n", + " # Loop (gradient descent)\n", + "\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: LINEAR -> RELU -> LINEAR -> SIGMOID. Inputs: \"X, W1, b1, W2, b2\". Output: \"A1, cache1, A2, cache2\".\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " A1, cache1 = linear_activation_forward(X, W1, b1, \"relu\")\n", + " A2, cache2 = linear_activation_forward(A1, W2, b2, \"sigmoid\")\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute cost\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " cost = compute_cost(A2, Y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Initializing backward propagation\n", + " dA2 = - (np.divide(Y, A2) - np.divide(1 - Y, 1 - A2))\n", + " \n", + " # Backward propagation. Inputs: \"dA2, cache2, cache1\". Outputs: \"dA1, dW2, db2; also dA0 (not used), dW1, db1\".\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dA1, dW2, db2 = linear_activation_backward(dA2, cache2, \"sigmoid\")\n", + " dA0, dW1, db1 = linear_activation_backward(dA1, cache1, \"relu\")\n", + " ### END CODE HERE ###\n", + " \n", + " # Set grads['dWl'] to dW1, grads['db1'] to db1, grads['dW2'] to dW2, grads['db2'] to db2\n", + " grads['dW1'] = dW1\n", + " grads['db1'] = db1\n", + " grads['dW2'] = dW2\n", + " grads['db2'] = db2\n", + " \n", + " # Update parameters.\n", + " ### START CODE HERE ### (approx. 1 line of code)\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " ### END CODE HERE ###\n", + "\n", + " # Retrieve W1, b1, W2, b2 from parameters\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " \n", + " # Print the cost every 100 training example\n", + " if print_cost and i % 100 == 0:\n", + " print(\"Cost after iteration {}: {}\".format(i, np.squeeze(cost)))\n", + " if print_cost and i % 100 == 0:\n", + " costs.append(cost)\n", + " \n", + " # plot the cost\n", + "\n", + " plt.plot(np.squeeze(costs))\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per hundreds)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the cell below to train your parameters. See if your model runs. The cost should be decreasing. It may take up to 5 minutes to run 2500 iterations. Check if the \"Cost after iteration 0\" matches the expected output below, if not click on the square (⬛) on the upper bar of the notebook to stop the cell and try to find your error." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6930497356599888\n", + "Cost after iteration 100: 0.6464320953428849\n", + "Cost after iteration 200: 0.6325140647912677\n", + "Cost after iteration 300: 0.6015024920354665\n", + "Cost after iteration 400: 0.5601966311605747\n", + "Cost after iteration 500: 0.515830477276473\n", + "Cost after iteration 600: 0.4754901313943325\n", + "Cost after iteration 700: 0.4339163151225749\n", + "Cost after iteration 800: 0.4007977536203887\n", + "Cost after iteration 900: 0.3580705011323798\n", + "Cost after iteration 1000: 0.3394281538366412\n", + "Cost after iteration 1100: 0.3052753636196264\n", + "Cost after iteration 1200: 0.27491377282130164\n", + "Cost after iteration 1300: 0.24681768210614846\n", + "Cost after iteration 1400: 0.19850735037466116\n", + "Cost after iteration 1500: 0.1744831811255664\n", + "Cost after iteration 1600: 0.17080762978096148\n", + "Cost after iteration 1700: 0.11306524562164734\n", + "Cost after iteration 1800: 0.09629426845937152\n", + "Cost after iteration 1900: 0.08342617959726863\n", + "Cost after iteration 2000: 0.07439078704319081\n", + "Cost after iteration 2100: 0.0663074813226793\n", + "Cost after iteration 2200: 0.0591932950103817\n", + "Cost after iteration 2300: 0.053361403485605585\n", + "Cost after iteration 2400: 0.04855478562877016\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "parameters = two_layer_model(train_x, train_y, layers_dims = (n_x, n_h, n_y), num_iterations = 2500, print_cost=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Cost after iteration 0** 0.6930497356599888
**Cost after iteration 100** 0.6464320953428849
**...** ...
**Cost after iteration 2400** 0.048554785628770226
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good thing you built a vectorized implementation! Otherwise it might have taken 10 times longer to train this.\n", + "\n", + "Now, you can use the trained parameters to classify images from the dataset. To see your predictions on the training and test sets, run the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 1.0\n" + ] + } + ], + "source": [ + "predictions_train = predict(train_x, train_y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Accuracy** 1.0
" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.72\n" + ] + } + ], + "source": [ + "predictions_test = predict(test_x, test_y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Accuracy** 0.72
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: You may notice that running the model on fewer iterations (say 1500) gives better accuracy on the test set. This is called \"early stopping\" and we will talk about it in the next course. Early stopping is a way to prevent overfitting. \n", + "\n", + "Congratulations! It seems that your 2-layer neural network has better performance (72%) than the logistic regression implementation (70%, assignment week 2). Let's see if you can do even better with an $L$-layer model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 - L-layer Neural Network\n", + "\n", + "**Question**: Use the helper functions you have implemented previously to build an $L$-layer neural network with the following structure: *[LINEAR -> RELU]$\\times$(L-1) -> LINEAR -> SIGMOID*. The functions you may need and their inputs are:\n", + "```python\n", + "def initialize_parameters_deep(layers_dims):\n", + " ...\n", + " return parameters \n", + "def L_model_forward(X, parameters):\n", + " ...\n", + " return AL, caches\n", + "def compute_cost(AL, Y):\n", + " ...\n", + " return cost\n", + "def L_model_backward(AL, Y, caches):\n", + " ...\n", + " return grads\n", + "def update_parameters(parameters, grads, learning_rate):\n", + " ...\n", + " return parameters\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "### CONSTANTS ###\n", + "layers_dims = [12288, 20, 7, 5, 1] # 4-layer model" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: L_layer_model\n", + "\n", + "def L_layer_model(X, Y, layers_dims, learning_rate = 0.0075, num_iterations = 3000, print_cost=False):#lr was 0.009\n", + " \"\"\"\n", + " Implements a L-layer neural network: [LINEAR->RELU]*(L-1)->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- data, numpy array of shape (num_px * num_px * 3, number of examples)\n", + " Y -- true \"label\" vector (containing 0 if cat, 1 if non-cat), of shape (1, number of examples)\n", + " layers_dims -- list containing the input size and each layer size, of length (number of layers + 1).\n", + " learning_rate -- learning rate of the gradient descent update rule\n", + " num_iterations -- number of iterations of the optimization loop\n", + " print_cost -- if True, it prints the cost every 100 steps\n", + " \n", + " Returns:\n", + " parameters -- parameters learnt by the model. They can then be used to predict.\n", + " \"\"\"\n", + "\n", + " np.random.seed(1)\n", + " costs = [] # keep track of cost\n", + " \n", + " # Parameters initialization. (≈ 1 line of code)\n", + " ### START CODE HERE ###\n", + " parameters = initialize_parameters_deep(layers_dims)\n", + " ### END CODE HERE ###\n", + " \n", + " # Loop (gradient descent)\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: [LINEAR -> RELU]*(L-1) -> LINEAR -> SIGMOID.\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " AL, caches = L_model_forward(X, parameters)\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute cost.\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " cost = compute_cost(AL, Y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Backward propagation.\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " grads = L_model_backward(AL, Y, caches)\n", + " ### END CODE HERE ###\n", + " \n", + " # Update parameters.\n", + " ### START CODE HERE ### (≈ 1 line of code)\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " ### END CODE HERE ###\n", + " \n", + " # Print the cost every 100 training example\n", + " if print_cost and i % 100 == 0:\n", + " print (\"Cost after iteration %i: %f\" %(i, cost))\n", + " if print_cost and i % 100 == 0:\n", + " costs.append(cost)\n", + " \n", + " # plot the cost\n", + " plt.plot(np.squeeze(costs))\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per hundreds)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will now train the model as a 4-layer neural network. \n", + "\n", + "Run the cell below to train your model. The cost should decrease on every iteration. It may take up to 5 minutes to run 2500 iterations. Check if the \"Cost after iteration 0\" matches the expected output below, if not click on the square (⬛) on the upper bar of the notebook to stop the cell and try to find your error." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.771749\n", + "Cost after iteration 100: 0.672053\n", + "Cost after iteration 200: 0.648263\n", + "Cost after iteration 300: 0.611507\n", + "Cost after iteration 400: 0.567047\n", + "Cost after iteration 500: 0.540138\n", + "Cost after iteration 600: 0.527930\n", + "Cost after iteration 700: 0.465477\n", + "Cost after iteration 800: 0.369126\n", + "Cost after iteration 900: 0.391747\n", + "Cost after iteration 1000: 0.315187\n", + "Cost after iteration 1100: 0.272700\n", + "Cost after iteration 1200: 0.237419\n", + "Cost after iteration 1300: 0.199601\n", + "Cost after iteration 1400: 0.189263\n", + "Cost after iteration 1500: 0.161189\n", + "Cost after iteration 1600: 0.148214\n", + "Cost after iteration 1700: 0.137775\n", + "Cost after iteration 1800: 0.129740\n", + "Cost after iteration 1900: 0.121225\n", + "Cost after iteration 2000: 0.113821\n", + "Cost after iteration 2100: 0.107839\n", + "Cost after iteration 2200: 0.102855\n", + "Cost after iteration 2300: 0.100897\n", + "Cost after iteration 2400: 0.092878\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "parameters = L_layer_model(train_x, train_y, layers_dims, num_iterations = 2500, print_cost = True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Cost after iteration 0** 0.771749
**Cost after iteration 100** 0.672053
**...** ...
**Cost after iteration 2400** 0.092878
" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.985645933014\n" + ] + } + ], + "source": [ + "pred_train = predict(train_x, train_y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **Train Accuracy**\n", + " \n", + " 0.985645933014\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.8\n" + ] + } + ], + "source": [ + "pred_test = predict(test_x, test_y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**Test Accuracy** 0.8
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congrats! It seems that your 4-layer neural network has better performance (80%) than your 2-layer neural network (72%) on the same test set. \n", + "\n", + "This is good performance for this task. Nice job! \n", + "\n", + "Though in the next course on \"Improving deep neural networks\" you will learn how to obtain even higher accuracy by systematically searching for better hyperparameters (learning_rate, layers_dims, num_iterations, and others you'll also learn in the next course). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6) Results Analysis\n", + "\n", + "First, let's take a look at some images the L-layer model labeled incorrectly. This will show a few mislabeled images. " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAACN0AAAD7CAYAAABU8nB0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXe4JFla3vmd9Hn9LV/VXV3t7ZieoadngMGJQSuMJLRa\nGdCuBEJagXYF0qLVwwIrjRAI6XkkgRDCLCstCNAIRhY7MDBODONnekxPu+ru6vLu+rzpM2P/yLzx\n/U5VRNe93ZeqrK739zz3qVORkREnTpzvuIh835AkiQkhhBBCCCGEEEIIIYQQQgghhBBCCCG2T+FG\nZ0AIIYQQQgghhBBCCCGEEEIIIYQQQoibDb10I4QQQgghhBBCCCGEEEIIIYQQQgghxA7RSzdCCCGE\nEEIIIYQQQgghhBBCCCGEEELsEL10I4QQQgghhBBCCCGEEEIIIYQQQgghxA7RSzdCCCGEEEIIIYQQ\nQgghhBBCCCGEEELsEL10I4QQQgghhBBCCCGEEEIIIYQQQgghxA7RSzcTRgjhzhBCEkIojf//2yGE\nv/IKjnNHCKERQijufi6FuLlQXAlx86L4FWL3UVwJMRkoFoW4eVH8CjEZKBaFmAwUi0JMBopFISYD\nxeKtiV66eQWEEE6EEFrjin4hhPDzIYSZP4pzJUny9UmS/MI28/QOfO9kkiQzSZIM/ijytRuMG5x7\nb3Q+xGSguLq5uHLQIG5tFL+7g/pFQRRXNxfqF1+7KBZvLhSLgih+dweNUcWrRbG4OygWxatFsbg7\nKBbFq0WxuDsoFsWrRbG4OygWHb1088r5k0mSzJjZm83sMTP7wSt3CCNUxkJsH8WVEDcvil8hdh/F\nlRCTgWJRiJsXxa8Qk4FiUYjJQLEoxGSgWBRiMlAsil1DleRVkiTJGTP7bTN7nZlZCOEDIYQfCSF8\n2MyaZnZ3CGE+hPBvQgjnQghnQgg/HMZSUCGEYgjhn4UQLocQXjCzb+Txx8f7a/j/Xw8hPBVC2Agh\nfDGE8OYQwi+a2R1m9uvjN/L+3pW/8AshHAkh/FoIYTmEcDyE8NdxzHeGEH41hPDvxsd9MoTw2HbL\nIITwSAjhveNjXwghfP94++MhhI+EEFbH1/6TIYTK+LMPjb/+2XGe/8JOy168dlFcpW+HfmcI4blx\nDP3rEEIYf1YIIfxgCOGlEMLF8Tnmx59t5fGvhBBOjsvgB65xrreHEP5wfJ5TIYRvG2//xhDCZ0II\n6+Pt78TXtmJ4dVw+X7rdaxOvbRS/6hfF7qO4Ur8oJgPFomJR3LwofjVGFZOBYlGxKCYDxaJiUUwG\nikXFopgMFIuKxV0hSRL97fDPzE6Y2TvG6aNm9qSZ/aPx/z9gZifN7BEzK5lZ2cz+i5n9rJlNm9kB\nM/u4mf2N8f7faWZPj4+zx8zeb2aJmZVwvL82Tv85MztjZm8xs2Bm95rZsSvzNP7/nVcc50Nm9lNm\nVjOzR83skpn9sfFn7zSztpl9g5kVzexHzeyjONZPmdlP5ZTFrJmdM7PvHR971szeOv7sS8zsbeNy\nuNPMnjKzv43vJmZ2742+n/qbjD/F1VXlkZjZb5jZgo062ktm9ifGn/1VMztuZneb2YyZ/Wcz+8Ur\n8vhzZlY3szeaWcfMHso5zzEz2zCzbxmX614ze3T82Veb2ett9ILmG8zsgpl9c1ZZ6O/W/lP8RmWh\nflF/u/KnuLqqPNQv6k+xqFhULOpvR3+K36gsNEbV3w37UyxGZaFY1N8N+1MsRmWhWNTfDftTLEZl\noVjU3w37UyxGZaFY3I06daMzcDP+jSt9w8xWzeylcUWtjz/7gJn9EPY9aKPFxDq2fYuZvX+cfp+Z\nfSc+++MvE4i/Y2bf8zJ5ygzEcZAPzGwWn/+omf38OP1OM/s9fPawmbW2WRbfYmaf2ea+f9vM/gv+\nr0DUX/qnuLrq3ImZvR3//1Uz+75x+vfN7G/iswfMrGfe6SVmdjs+/7iZ/cWc8/xfjMtr5OnHzezH\nriyLG1139Hfj/xS/0XnVL+pvV/4UV1edW/2i/m7In2LxqnMrFvV30/wpfqPzaoyqvxv2p1iMzqtY\n1N8N+1MsRudVLOrvhv0pFqPzKhb1d8P+FIvReRWLu/BXMvFK+eYkSX4v57NTSB+z0Rtw58JIddts\n9Iu8rX2OXLH/Sy9zzqNm9vzOs2pHzGw5SZKNK85DWanzSDfNrBZCKCVJ0r/GsXPzFEK438z+xfg8\nUzZqFD61w7yLWwvFVcyV35/BuXlNL9kovg5e67shhAa2P2wvH8NvNbN/YiNJvYqZVc3s3dvMu7j1\nUPxeI0/qF8UrQHEVo35R3CgUizGKRXEzofi9Rp40RhXXCcXiNfKkWBTXCcXiNfKkWBTXCcXiNfKk\nWBTXCcXiNfKkWNw+hRudgdcoCdKnbPT2274kSRbGf3NJkjwy/vycjSrzFne8zHFPmdk92zjnlZw1\nsz0hhNkrznPmZb6zXU7ZSD48i5+2kZzWfUmSzJnZ99tIKkuIV8KtFFfX4qyNOnmet28jaf2XJUmS\nGfydtJe//n9vZr9mZkeTJJk3s58xj+GXKxshruRWil/1i+J6cSvF1bVQvyhuJIrF+NyKRXEzcSvF\nr8aoYpJRLI5QLIobjWJxhGJR3GgUiyMUi+JGo1gcoVjcJnrp5o+YJEnOmdnvmtk/DyHMhRAKIYR7\nQghfNd7lV83su0MIt4cQFs3s+17mcP+vmf3dEMKXhBH3hhC2FjUvWE5AJElyysz+0Mx+NIRQCyG8\nwcy+w8x+aRcu8TfM7HAI4W+HEKohhNnxLw/NRp5v62bWCCE8aGbfdcV3c/MsxMtxC8TVtXiXmf2d\nEMJdIYQZM/vHZvYrO/h1MvllM3tHCOHPhxBKIYS9IYRHx5/N2ujN2XYI4XEz+1Z875KZDU0xLHbI\nLRC/6hfFdecWiKtroX5RTASKRcWiuHm5BeJXY1RxU6BYVCyKyUCxqFgUk4FiUbEoJgPFomJxO+il\nm+vDX7aR7PUXzWzFzP6jmR0ef/ZzNvJv+6yZfdrM/nPeQZIkebeZ/YiNftm3YWb/1cz2jD/+UTP7\nwRDCagjh72Z8/Vts5P121sz+i5n9g5eRzIoIIfxMCOFncvK0YWZfZ2Z/0kayVc+Z2deMP/67NloA\n3Rhf569c8fV3mtkvjPP857eTFyHAazautsG/NbNfNLMPmdmLZtY2s7/1Sg40/iXxN5jZ95rZspk9\nYWZvHH/8N83sh0IIG2b29200cNj6XtNG5fbhcfm87ZVdirhFec3Gr/pFcQN5zcbVNlC/KCYJxaJi\nUdy8vGbjV2NUcZOhWFQsislAsahYFJOBYlGxKCYDxaJi8WUJSSL1ZSGEEEIIIYQQQgghhBBCCCGE\nEEIIIXaClG6EEEIIIYQQQgghhBBCCCGEEEIIIYTYIXrpRgghhBBCCCGEEEIIIYQQQgghhBBCiB2i\nl26EEEIIIYQQQgghhBBCCCGEEEIIIYTYIXrpRgghhBBCCCGEEEIIIYQQQgghhBBCiB2il26uEyGE\nnw8h/PCNzocQYucofoXYfRRXQty8KH6FmAwUi0LsPoorISYDxaIQk4FiUYjJQLEoxGSgWBQvh166\n2SXCiO8OIXwhhLAZQjgdQnh3COH1NzpvNwMhhK8OIZy+0fkQtyavxfgNIdwZQkhCCKUbnRdxa/Ja\njKvrifpFcSN5Lcav+kVxM6JYFGL3eS3G1fVEY1SxWygWXx2KRbFbKBZfHYpFsVsoFl8dikWxWygW\nXx23eizqpZvd41+a2feY2Xeb2R4zu9/M/quZfeONzJQQYlsofoXYfRRXQty8KH6FmAwUi0LsPoor\nISYDxaIQk4FiUYjJQLEoxGSgWBSvGL10swuEEO4zs//NzL4lSZL3JUnSSZKkmSTJLydJ8k8y9l8M\nIfxGCOFSCGFlnL4dn39bCOGFEMJGCOHFEMJfGm+/N4TwwRDCWgjhcgjhV7aZv61fE/6VEMLJ8Xd/\nAJ9XQwg/HkI4O/778RBCdfzZV4/f5PveEMLFEMK5EMK3X+N8fzqE8EQIYT2E8HwI4U+Mt397COGp\n8XW9EEL4G+Pt02b222Z2JITQGP8d2c61CfFqmfT4HX/37SGEPwwhrIYQToUQvm28/RtDCJ8Zx9qp\nEMI78bUPjf9dHcfUl+68dIR4ZUx6XKlfFCKfSY/f8XfVL4rXPIpFIXafSY8rjVHFrYJi8arzKRbF\nDUGxeNX5FIvihqBYvOp8ikVxQ1AsXnU+xeIO0Us3u8PXmtnpJEk+vs39C2b2/5nZMTO7w8xaZvaT\nZmml/Akz+/okSWbN7MvM7Inx9/6Rmf2umS2a2e1m9q+2DjgO5u+7xnnfbmYPjPP790MID423/4CZ\nvc3MHjWzN5rZ42b2g/jeITObN7PbzOw7zOxfhxAWs04QQnjczP6dmf2fZrZgZl9pZifGH180s28y\nszkz+3Yz+7EQwpuTJNk0s683s7NJksyM/85e41qE2C0mOn5DCMds1FH9KzPbb6M43Trmppn9ZRvF\n2jea2XeFEL55/NlXjv9dGMfUR7Z5fULsBhMdV0D9ohBXM9Hxq35R3EIoFoXYfSY6roDGqOK1jmLR\n86FYFDcSxaLnQ7EobiSKRc+HYlHcSBSLng/F4itAPuq7w14zO7fdnZMkWTKz/7T1/xDCj5jZ+7HL\n0MxeF0I4mSTJORy7Z6PgPZIkyWkz+wMc85u2cep/mCRJy8w+G0L4rI2C7ikz+0tm9reSJLk4zs8/\nNLOfNbP/G+f9oSRJ+mb2WyGEho0C+qMZ5/gOM/u3SZK8d/z/M8jjb2K/D4YQftfMvsLMPr2NvAvx\nR8Wkx++3mtnvJUnyrvH/l8Z/liTJB7Df50II7zKzr7KR3J0QN5JJj6st1C8KcTWTHr/qF8WtgmJR\niN1n0uNqC41RxWsdxaKjWBQ3EsWio1gUNxLFoqNYFDcSxaKjWHwFSOlmd1gys8Pb3TmEMBVC+NkQ\nwkshhHUbSWwvhBCK4zfB/oKZfaeZnQsh/GYI4cHxV/+emQUz+3gI4ckQwl/dYT7PI900s5lx+oiZ\nvYTPXhpv22JpHITRd0MIdwSXiGqMPztqZs/nXPfXhxA+GkJYDiGsmtk3mNm+HV6DELvNpMfvy8XU\nW0MI7w8j+bq18XkVU2ISmPS42kL9ohBXM+nxq35R3CooFoXYfSY9rrbQGFW81lEsKhbFZKBYVCyK\nyUCxqFgUk4FiUbH4qtBLN7vD75vZ7SGEx7a5//fa6O2xtyZJMmcusR3MzJIk+Z0kSb7ORsH9tJn9\n3Hj7+SRJ/nqSJEfM7G+Y2U+FEO7dhfyftdFbdVvcMd72siRJchISUVtBfcrM7rly3zDyjftPZvbP\nzOxgkiQLZvZbNr5mM0teRf6FeDVMevxmxtSYf29mv2ZmR5MkmTeznzHFlJgMJj2uroX6RXErM+nx\nq35R3CooFoXYfSY9rq6FxqjitYJiUbEoJgPFomJRTAaKRcWimAwUi4rFV4VeutkFkiR5zsx+ysze\nFUL46hBCJYRQCyH8xZDtvTZrI2+31RDCHjP7B1sfhBAOhhD+dBj5vXXMrGEjCSoLIfy5EMLt411X\nbFR5h7twCe8ysx8MIewPIewzs79vZr/0Co/1b8zs20MIXxtCKIQQbhu/vVcxs6qZXTKzfgjh683s\nj+N7F8xsbwhh/pVfhhA75yaI3182s3eEEP58CKEUQtgbQngUeVlOkqQdRh6L34rvXRof/+7tlYQQ\nu8dNEFfXQv2iuGW5CeJX/aK4JVAsCrH73ARxdS00RhWvCRSLEYpFccNQLEYoFsUNQ7EYoVgUNwzF\nYoRi8RWgl252j+82s580s39tZqs2kl36M2b26xn7/riZ1c3sso280t6Dzwpm9n/Y6O2zZTP7KjP7\nrvFnbzGzj4WRvNOvmdn3JEnygplZCOG3Qwjf/wrz/sNm9kkz+5yZfd5Gvms//EoOlCTJx83s283s\nx8xszcw+aGbHkiTZsFEZ/aqNGpFvHV/D1veetlGD8EIIYTWEcOTKYwvxR8jExm+SJCdtJM/2veNj\nPmEjj0Yzs79pZj8UQtiwUQf6q/he08x+xMw+PI6pt223MITYJSY2rraB+kVxqzOx8at+UdxiKBaF\n2H0mNq62gcao4rWEYtEUi2IiUCyaYlFMBIpFUyyKiUCxaIrFV0pIklta6UcIIYQQQgghhBBCCCGE\nEEIIIYQQQogdI6UbIYQQQgghhBBCCCGEEEIIIYQQQgghdoheuhFCCCGEEEIIIYQQQgghhBBCCCGE\nEGKH6KUbIYQQQgghhBBCCCGEEEIIIYQQQgghdoheuhFCCCGEEEIIIYQQQgghhBBCCCGEEGKH6KUb\nIYQQQgghhBBCCCGEEEIIIYQQQgghdkjpep7stsePJVvpYtnf9ykWPV0oJ9heTNPVYsXTZU/3B/00\n3e33fPtwkKaTQvBM+OGt3Wql6eXTS779Utt32jp88GPUKtU0vTg/m6brVd++0ln24xnx4wyQ9wHz\nm3gmA/IbkIdCycss8a9apVZO01Pzvs+g4Nc6bNbTdMmmPV306lBEulTyY5bLTPv1lgv8ruezxHuL\n+9Af+rVvtBppups00/SxNyyamVn9HpTZjH9+8NhUmp7bP0zTUzW/vj0LD6Tp9sDzUq3OpOn9s4tp\neqHu25fa62m6NfA8trvdNF3qeHmElufz1CmvTz/2Nb+ACjgxJDvbZXcuYbj2YppeefITafrimQtp\nuru5mqb77c00PRj0rspKEXWziHahUKml6dq039MZxGu17vWkXve6VL3rUT/m3FHk/sbcxoT3Yeht\n3PrJD6fpzeN/mKY/88kn0/TTz59N08dPep08vGc+TXc2vYynSn6NlaKft1oaxXcFn/e6HsOdTY/L\n0PRY2Wj7Pl/xP/+lNP213/VP/ZqCtx2JeWyZ+bVa4unQ3fDtJb/Pw4Lf2zD0/FjnjG+fev3ExeKl\nS5fSgh70vTEPBW+vhkNv39gPJAm3G9LZ3y3gmIOBby+Vipn7sw9mv7QbMO95scVrzT8O+suobHyf\nTtf7v0Lwa2IfxuOgmKJyKhT8u2bZ92R7+cy7P+Ga+2/lJ77W7DJgIYRCdh77uL5O10crHOfE+HGK\nKI8BByLYJ0Rb/X+HDh+YuFj8pb82nRZYt+9lznFPrYIvMP5Q1s2hl0sBY6PpMsZ5vU6a7vT9oJ2h\nF0vTd7ECxkysJzPV0XkT3MdGx/ft9T0vIXB8jfsY/LvLaDoLuKZKGGRuL+GYPYT0OpryMmYai9PY\njjhDdxMdp9X3fC57V2UV9IsD1jfkrVZi3nwf5qeOExei8banDeXdQjXvjvcvWHac9fu+vdXB+N2r\nk836MCSig/LrYBLR7foxV7oYa7MskfchymPINgNl/K8+0p+4WPz+7/1f0oxPT3s/X5/ydqmKuAyI\ns8U9C2n68B7/7mzdLzodT5rZxvJKmn7x6efT9NLZc56hBPWnwvbAYzeM5ztd1JHafh9Dlip+s888\n/8U0PV/hWIt9TMhMlnDd7KNZf/vsz6L7jszl9EMDpHu8ln3H0vSeQ35dayc/799t+/gvGbKPdwq4\nmALmiMWS38OhMf/4Mu7DYIDx0rgcCpi7Bhyj38seW5XLvH8Y7/DYJW+0qnvvSdO//r6Pp+n3fMDH\n4+sbPnfMGzcFXPf8/N40fe7M6YmLxfOHULO4asRGm40O94na0Zw0j1PKOw63J5mbecxkKz/F7LY5\nYZjx/KxsTHMxht9FHhPuzn1yrxtpXgevm3nIOW/+d7mWtJ1rz8kn0zxXMad8tjbv9HjczrBBflmu\nSd7PBvOmKnnn4i7YfvA7BhMXi2cuDTKvjhntDXzw0Gr7gK7R8nbp+AufSdMbG5fT9KH996fpUtXb\nvQWskx09cqefjGuqXT9XB4OWynguUcfxoj4Jeee6KOcjQ8wvqmXv00voMzi/3c7q1QCDoELIrhBR\n3EQH2k4lcy6tnE/Tn/z8+9N0t+WD/AuXfd34MMr4ofte5/ujXG8/5P0x27anTn0hTZ94+gkzM/vG\nh78y3fapnpfx0rkn0nSruD9NVw49gmP7/lMDH4RXu15vuksn0nRnw9doBn0fqww5l65iexVzp6bX\noRmMc/7Wt/2diYvF3/vQJ9OM79szl24/fs7v40bX69V+rLvNVfy+PzH08vqfjt2Zpt/9H/5zmr7t\n0ME0/ZZH7k7TXzh+Ik33Cz42Pn3a1/7OvOTrrr2t+oO5ewMD1i7W47j2EZp+TcOO14HijF/TocOH\n0/Tioo9pHrjn3jS9b49vX1g8kKZbLa/XLx73+tvrejndfY+v5x886OXRbvt361jXjcYDidfh2pS3\nQ1PTvm5Yw7ODMvq2vLWWVtvb2cvL3rb+/u+8J01vNj1vjTOfMzOzowuYbw+8PP7sX/3fPcNFv5f/\n9Jd8fXcKc8evftNtafr8stehUgnrCRj3Pn96LU3fdsDXxS+v+vrYOx6/PU2XK9nrgm99+IGJi8U7\n7jqS3hiOrQMrQeA9zRuEYG6S00dFz+LQ5+Rt57phIWP9lmv8IW8QFM3nsvM+zBiCXUU0pcy+7mQ7\na4ugGFgGvp3tPZ9xck0iOiK+zLXFQnQ/nQQXHK0ns9gMa26ow1vXxe/FczXWFWYRay6Yq9dnPF4P\n3uf7HH0d5pFD32f9oo9h+qu+XlEeentaQf/XTzy+W/0X0vS7/u0nJi4WX//o671fPLwn3d7v+ZpL\ns+ltTgttPJ/pJ9Fz8WtPFBgXRcTflz72xjRdw7Pw937Qx8Cze8ZjH8xjWBv6eDbDMWqRz745FsU6\nRPQKQk4d4/Z4ZJm9np9EdZzbkUb5sQ4/+nof2/2DH/g+37/n3/3C5z6Zpn/53b+Wpt/zng+k6VrF\ny/hbvukdafojH/+0H+d5f/62Z7/X7al5Hy+l7Q3XpnJIQva4O26asp8/RG1Ezng/b82NbWUSHd/T\nz332qWvGopRuhBBCCCGEEEIIIYQQQgghhBBCCCGE2CHXVemmNuVqEnwLLeDXOEnB33SqlLJ/ytPF\nW2Z9KCB0E6ok8Jv81bGfd2ra33YeHPTz9vCrj8JwlIeZWX8reHGGaX9L2vAm9dqSq3XYMPsNPb4d\najmqN/zVLt+iK+JnrUO8kV2t41egVd9nFW8VloYs++yfH4WQ8/Yuf+XONz75a0X8WpDbh1AG4C9M\nhkh3254+/eTozfE7av5GXPkuz21j3d+OLE/5OWen/G26gCpe4vUNWfaeLg2hAtTzX1xsQtVjiDcu\nu3gzcND3feYX8HPumwq8aThEPBVq2OeVv1gbSl4/I4UrHLLXR93A26WFjF8WBcv+5fKgh3sKZaJ+\nG4op+Ll5v+e/3BiedKWY+j1os+r+i4TtlcF2lEHQ9g08Rvst/IJo81Kabm/4L7I/8uv/IU0PNry9\nOXPBf3GxtJL9q+MhfunEcu1iO8QP0l99BPwKplbDm7xD/2XFRtPLfgPVaeEogjf6GWg28dv/8Sdp\nahtFHHLejJ0Uojefc35Jx35rGCmKZJdFyPmFBv8Xct++vvb2bK6tODOgWkfOG8V5sZX3i4tYKYa/\nzPH9y/jlz3YuKS7L6JOcfGa/sZ6//drnZf4DgnE4LsOAa43e5o6PiANmn5PXRxXBvH0i5Yxhzj3P\nefM+JwsTQwfKIdN1tFHooNjnFDF2HWCcuTjj8drt+XchKmaFhL+K8H3aUMxLMHZM0GbWihgDj8cv\njaa3Cx0o7VSQxyHawhLGMW2cByI5Nl/CHcO9LuT8AovlR8GCRQwfqtg+4C+VUMb8LTeGrjbF8+Ja\nyjm/nGI8Fcq4t1AWKaAcijnxvclhEfbYOiSH8pgGRL+SLuPCp/DL3gq/i2PzXvHnEZs4ZgUXW6Hi\nEPJbiJQnfXtrwoOxWkUdrniscF4YKb4gXYUSTaWcXVepglKq+rh/9oAruHS6UHxp+LiKsUCFr9q4\nnylA9bRchRoq5ovlaZ+nrK/7GO/gvH83UEmCTTkVtiDG0MMcJJ7b5fS1bNeo0AQ1pbZ52ezb67+C\nNfyqOqBt4i8UkwyFttGlUH0EqjNV9tNJ9v44ZmFA1Z5w1edDqtXg+gqRAmv2WLRY9bF/Zdav+1LD\n5xDPvvBSmu7hV3x5/XHULyJvLXYMk8h2lEnyVFvy9om2h+ztkXIMyo5hkXf8rWZiW2oreeffobpN\n9Evq7HF9bn45CS5z+zbSVIKJhqUYP0TqNkzntA1592ob+2z9+i/3WgPjH3nk/vxRYm755f3qMWf+\nk3NPovszcb8bjmm0/RfPXSjBTEOluQ0lCo4hl1dc/WJl7WzmPmX0XQtzrm5DRZlNqJk1m56ftXVf\nt1icdxWLLdFaKtdE6w5QKS8X0XdDbbMP9Z5Y9c371Ly5D+csTeSdim5Uz4mUvos7XSb3c11edQXn\nc5e9r1hduZimj7/4bJquV/wX7+fPuzLOyZPH0/SRwz4+We36us+Jc36cC5dOpunKxmid9JnDruC3\n2fJ1pND18jgEJcDqug+8AwaObfwqfX3Nj9Nd93qwh+vlR/yX7i30eRdWXXWjA9X5edS/Yriujyh2\nzGOPuvLKasOvYfOE37sjUMA5vAcKiVgLvfc8lPHakDfFWKZeo3q3H/PoXfel6Y9/3H+dfunc6TTN\n+VSY3WdmZucueqxuYP1w/6KPSx+4w5Vrzpz2fH3N61xpZ9DwtuanP/ypNF2teZAeXPQYnZ/143NN\ncmnJ83PipRNp+p67/Vxs11dXXbm7gvWdPpSVqHjCxiFS6S5525MEjD/pxoA+6uIlH6v/4n/4Dd8O\nlarVS66QOex7uc2Ph9L3H8R8ZsPj4PTJU2l6L1SsjkCtk88ZXjzj59w3j+dZ6CTLmCTOT/n11fAM\nad+cl9m5ix7HRw+jbZ3sZdRI6T5+fsU6kNe5Z2+PjpPzzcI2npVRvSbJGnjkqNjEKixUjWEOctYb\nuXUbig3REZPsOTNVJqL120J2X8u1WarS5K3nh+h6qXLC54jZ648kWvJnnjk+33pOGfh8GGsOmItO\n45lvBf1TiYq3dY/RGbiMFMz7guqs97Wh6GOhDstvjeryeC4NBwgr+nEmkQrUxlotKnTDbaTufZiV\nfGy3iXW4H4p0AAAgAElEQVSWYfDy5XctJ76ZpmrZ/Lz3OedOu/LKodv8mdRDr3vczOLn14zny5e9\n3T9z1tvpPXtcHfD223ydgGPXkKOqEikvWXbcsI4zTbWdaP8BFXmQxj5veOTONF1Fua41vY411rwf\naMDJoo/+pzLtayRnL3j5nL3k/VK1DvedOR8LBvTZW23MkKpU/mn0HgQnhpESUt6cL2pTcEyqwOas\n2IScOUTIaWe3g5RuhBBCCCGEEEIIIYQQQgghhBBCCCGE2CF66UYIIYQQQgghhBBCCCGEEEIIIYQQ\nQogdcl21G6tVyP4V/NSUPqOE6N66y+VRTnu17ftQ1pqS0cMc+yLKAnH/+T0u6zm4wwWDpsNIXm9x\nzj+fhtxoFZlfh0TjgNJyRUrOQWO3SE1genBgM2QNa7COopwb350qVXMsJyhHR5kkKthTtpvlGm2H\nFH+ONHmeqjll4Sh1RTutSFqvO8rDxnE/yOKUS4Z1ai7Ptln2/LZmIDM/5VJYtYJLYfVxziYkb9eK\nLpXZ7nq620IecYG14PnZTFyCq1SYcO3+CFSCvktdJgMvl1A9hP1fhf5yEbL7kLcs0SYK8mWUEtuq\nJyXKUUe2bChzyEj2Oy7v2S37NdEmjOn2pkv3zXRdMnbhoa/wy4ispnDaoZ+L5deDnO/mkkvT9SB1\nfPm0Swifft7TS5dcRrXX8uOfeMnloUsI5CqsGDaxP+X9u5AIHkIWfwDZ1QbuQ2PsFTIz5bE1jfYo\nwbERKtZGOz8FGb6dk21ds3Nxt8mDEoCxGxBsbNDnUPqTbVEXNmrVCm2WYL+UY+u1Mxup7O8N0aaW\nStTHh0Ui6kMHMumVqst35tlI5cHzhjxpVmP7zWFPXl2ifRXyX8zZnZtzrKni68q2X8rTvB9G3cnV\n70pv5xh5GY6kFdl5ZyvMXvFlWoDwmJTTvXn6whosOUuUl8ZYkeHaR12qQC1zCD3vMPT2tQj71FXY\n8HU7lMCk/acfc7acLSfa6Y3SHdjM0Jk1Gr/hRtLic6Pt+8xAbpv9MpV86UjR68MWChV+zzzsnNAc\nBBQgnfJoibQK9dwyTlyBnUQ/Jz+UXu4jXhdq/kGZYYEyZsvQ4Tgc55piiIwPScuLHsqYYxW4JlgN\ndYVDedYt2nN1cBw6wJXx5djuFdYN2Q5hE/+Liw5k9kuwN+A8knFZh+xzDTe4zGkWx47D7HZvZp/b\nYhTKfsyVk27f0NlwCeQS7XTLoxo0xPcKsDEtY/veAz6mfuaS21DU4ac2O+NzFs69hj3YXmGcyfFA\nmZaUiOOo/4tkxP34LVjuzsDOojLlktB9jI2LsOYYID+0UCqin+GYJ7KRyhnbDPP2YYc83pxE4wH/\nuFTO9teJFOcxPipPH/TNUz7e/8zH/zBNn73g941yz3nXlEc855lAIlujnEZkx5ZSeels2frtWCtl\n2lSxvc5ztc2zmipf+/xsU5iXyAapkJEvs7jD4TFzj5OdzbzGPMkbCualmZ88u7Bc26mrrazyr4Pj\nw5yOnLbzeV4JOWUTRVzedeQNma/tfHxDefb5J9L06prbFE3DVn0w8LWoO4++MU0XzAcPjQ3fp93x\nuePsjLdpjbavB23AOuqRB74sTV+67OsQXBNcHrqtwlY+q2XYt2PAXMK60OLivjRNq86XTj6dptca\nvtZ6/z1+ffv3uB1OixZYLe+vl1f8+iplzju9j5yHrdY+HHM789E+rLI++fn3p+njLz2VpodYZ2lv\nej+aDLx89u5B/wM71LWiryWdP+FWCUPYO9296Gst1UOjdfSTG7huBNTBRb/WAtYZepgzr6x7PdjE\neQLGaPv3+HGm5n2csIr1t6U1WGRgDLBvmvcBFkJNWIpNIP/PL7w7Te/d4/V22PPyvbTq68itc267\nMD/nY6YDdS/3wUW/T/eiPd4Dy7jlsx735bKPEe+7+940XUSsffgzX8C5xtZ/mEN2h1gz7NGe0+tp\nvez7HJj1cx7a7+3ObU+6rdmLax5/BdiEXb7odbbb9jbo6ae+mKY//7nPpukPfeiDaXoGNi9vfexL\n0vTXvuN/8HPRdhvhugGLjM997GNpet9BH4c/+tjb03QPE0ksqdoHP+wWXh/58B+k6QHiPqDh6rQ9\nvlfHc+tnK26zsTDrz7nOnPM29rZjfi+/5C7f57mnPp+mi6tezx643dvBHuZCoebpA/OYq1Syn8HR\nHjb2O6at/eRRCLjmQvaAaDjMXovazppjtDWyEaU9EZ6D5VjKxLaZ4304rksyPjezPu15c/IbnTJy\n0rx2viILX04L450cjs9ok0NbqBx7qZhsix2WJc/LOV+1ivU32hKiDtemvK2qwfaovLWQwjUaLJzV\nYC9VxNyx3fX+rz/EQlXw7Qmsl6M6F7w/K2A9D05IVujBJrTnbUehjTm8TXYs/rGv++Y0Xav4xVWr\n3ueV8Pzv0mXvzz7xqY+m6U202aHAOMu2h2bdnpmGZfiM38tnm37Mhx768jT9VV/xlaNEtB7n9+iF\nF19I092ut/V3HoNF1QNu9ci1Kdq4RUsutIXiOwvD7HSeXVRsKZW9Tsznf/fd5WPa5qaPjZdW/Fnj\nJq6x37/axnt8BWnquedfTNMbeO64uN/X02YWPZ1luTXIsduKpmf4XjGnnR+greE7Jf0erTuzn5EN\nB3geyhcn0P/xmRPbu+0w6euuQgghhBBCCCGEEEIIIYQQQgghhBBCTBx66UYIIYQQQgghhBBCCCGE\nEEIIIYQQQogdcl3tpYaQxCpGkl7UWndZrnXYnlCTaRggpUT90cj6CFZWeLdokCORV674/gdvc1nP\nxfJIBrAW/PMh5UAhu9TtQdYJekixxQStRCL9N887ZBzLkACcmnG5LFpelEuRdn+a7A09nxTVG+JV\nqyKk2sqUSYeceyhS1ovSjTkSfpS+y5GOi2SkUAxVyJTXt2TJOn59zee9oGYW/Fob65Dz3PB6s/hl\nfrzp+myaXh3ARqoDG6CBy3/SAqQ09OumTFdn4HJV00U//kbfJWAnnSSB5Fb3Aj5BvcqTYt4pJUhA\nQn6twLhAjFLWrLi1D2X28fmA7xDSAgQyYj3U5SHu4yCSfPMvt9b9PjY3XWJ3+tDtOI7H/fK5l9L0\nytIl337J0xfPe7oDWed2E/UQbV+j4dtp97G+6fetDDuJIiS6q5Dw6xYo3QirDdio9NhWQg98S3q5\ngXN2Op7HAgpwrQk7FbQjCeRXt1eJcqxrcuTtblarqdiWqZK5nVKbCTTyKRvKfoDyo7S/iKRIKQe/\nHXnVjP0p87gd6W32f8Oc/i+JvBCv/V4wraziPNCSDJYk3CfWjM08fp6UIM8V94s7s3fi9rwi5DG3\nuk5KK1J2MkTXnX3sXAusSPo2p37klFOgpYZl16fCNurIjYTj0lia0/dhf1Krsoy8H9jcpLwlygX9\nVaPFWEQc4TjTlh0L/YKPBdtj+cxCQJuOPqDImMPRWn3u45/MQcqetot93FO6obRRl/bvcynffYd9\nHD2ETG738jm/IpQN3A4MWbB6ObudYDhxIsPx7Z7pbJuhYtSh0P7ON3OmMIMTcFy4NQzn+KGPwT+c\nkGzaFcItgRUYZZeTHJcZqPhbBXksVBhbuA7kAe5m1oLsfXXCf3LRh99YC2Ojes3H9IybMuZN9Qrb\nq2x53iEqcYHtFcqlNucy8HXYXvRbXlmTyCp3lKYdJK2U2U/MwbK4XPO4OXXJJebviOTFMX9COzJd\np02HH7+PYOnCjmpA2y70IR2UdyO4xPXRAy5FXCx7he40IadtgP0AG07kpwQZb45X+5A05j5Rl01p\n6ch2c/QvpYVDjkR5scx5iNenYs1tMYqwl3r6BbeE/fin3d6FFmjDSBoZ+UWadj/sR/sM0kmktA2b\npzy7ox3vg/tHp4PIJi57e2RHtXWuHPunfMukbVxr3jFL29gn7zg5VlaRJV6OnWe36fucW/f0eVcO\nt030LXvQF91zm6dn5zFCyLsupnPq81Z9ie4N+qrcMoh1xPEflk2e90FeHnPGD3lMuL3UZ590S5Ma\n1lNou7Cy5jYvJ08/l6YPH3woTc/Nuh3QZutEmn7+pNsgrW+6FcxM3SvNzLT3hfvm3MqoBTuqC8tu\nO9Xtj/rvk5suX1+r+fEW546k6QHGq1NT3g/RmrhS9D7vhZeeSdNVWBlcxvkvwgKrXPL2vt3ytRja\nH1YwD29NwSYH/Q1tEwjb8nrF1wQvX/CyXFr2Yx454v1rdcrz1un7OGAm8e39JR97DFY9fdexOz3/\nsOFpNEdrnbPou+c4GMU1bcIK6vKKr4W2YfMwjftw4IDf+wLsOJYbPjZYhxVnHXP1hTm3JepimHDi\noteh5170ejyJzBb8vuypeCxWMBYt9r2xO3an1/OFvX4PustYZzzpa4h31bz+9Jb9HnT7vk5bwPrj\nGizblte8HL/s0YfT9FR11E68cMYtPSpFb/dLfb9f02W/v33YtHz4kudlds7HTMucd5hTxH1vNmg7\n5fvUsA55/PnjaXoVlmS0kF1d9rbk/gf9+h562MfVXLf42Ec/kqZ/4id/Ik1/w5/7X9P0udJjnn8M\n1orBy/gTn/dyu+2gt6F9tL+0senBSm6uN2qHigWPs4D4u7jkcdPDGH/9ksfB+pO/n6YP3euWUlNP\nu4VY9+FHPI35wRc//Dt+XjwPefBNj6fpadznYsvn7ZVTPga2N/jxJwXWt0ArJs6vc9altmMBW8ix\nNYmHiNnzjXx/9qs/jqxpsQ/nunRVidd0s48TIq94llSeRVT2unq0tphzTdzOcoraRMztSuiXqojv\nCvqTGub8dfRdnPNHVsOYOBThx81zbT3/oa0P55xcjGm0fZyw1vb2uTPwNihBDeyUPI8JHKgKFeSr\n7fmabnkbWi14XC4lWDeD7U3SmexnHW997C3+n2j9l5bR3r7NL/g1v3jCbZz6fW9r845TyLGdosVY\np+v91WbT296ZWR+DVMZ9Z2xPzedqPCfTfJcBaT5rZL/I5wkhO7aidfLo2Q8tqwzb8WwvZ5Jbwnxq\ncc77p2bTn4V3u7AqZ1zk2DixCVjb8OMUEGeze9xSKnrXI4NQ4BoKn1dy7I93IrBuVsY5WTrxOj7f\nF6GNpu/Tj6y68Cx66N/t95nemQXqhC+7CiGEEEIIIYQQQgghhBBCCCGEEEIIMXnopRshhBBCCCGE\nEEIIIYQQQgghhBBCCCF2yHW1lypBEpRWUwXIxU5VXJar3ad0c5K5P+WNIonwhJJrsE0q8ruUdvL3\nj0qQACtsyeS2XNprABluWst0IP9ltGSKrCFcxihAKop2TgVIVM3OeHnMT7tkaAdWVhVINw4ggdTs\n+rkoz0RJq1jmG1JtkZ43yjLHTiRSn4LNAS1/eA+p+FuDpVQVUnCVcZryXf0GZKMuen7brmxljadc\nHvOh+yCFep/LhW9uulxju+3yUEnB01NlSLBCInQACXTaURyc3pumQzPHJ2ASGULqsgtbLMjcGe2f\ncmzFtkOATVtsB4UyRUw1mi6vVx5bp8Hpy7qoU0PIqoWCH4/SYWXGIiycKE3Y7Xl5tLuePnHqdJpu\n9VyqtN3zOtPHMSlj12i5bNtmC14RkJrr4ruUuFvb8O8WaddG+yHaSHW8/Fqwr6qgXaE8Wuz4gnaW\nlhpjeTxa6FH+dAB94BLqygIU3zpN6CzmC/DbtdmhpVQSrr3PDYT90xWfpCla2tF+KTG2x4zL7H6O\nUCIx7l+5fZC5/VrHztunjzjnddMuowe5vnotR8s+91zYm5Y9ObKo25OVZbuSXcZ8fzk+vt+rYTRW\nYX6Ytsztsf1WctW+eVaPFpU97C8jCdicfj/Jtvc0tuEDStU6kd3Wq/IjvL50+rhfPbSXuBe1Ou1T\nYI/UQnvY9+3ttn93ten3ibZJJchXR+WFsVSx6lKoU5ARL1VG/Ulr09tXWkpF9jeUJ0WFnCkjznPc\nHii1uoby2LffpUqP3HksTXfRz7VoOYiDYujFS7UZ2gPl5KeM/wyR6T1Q/a/RR4r2MjnWIujerEK1\nUjDM6E/YpUPx2GYxhKrCXqMHu5+ed+/RuHijk21TxfLArTUMS20YWbn6djp8FCc8LKenIXMOad8i\nxjoDtK8Btg4F2hHDyqtAiWDaLkJGNoFlbGIudz214JYazRW3fkgwRtySFI6aS8xXexgrbsBPrdv1\nfU5ccIn5RssrJC3MNjC/mJuGVRLioIy5XQtzQcr4L0x7xdpoexkcuMMlgUtlD6gy5mq1Kmy+qpDT\n7/tkLJovRmMJzHeLbJM4P06Tcd9ZiFqlq5OwluaYhTLAlJ4u1d2OoDbnVh+nL/t9+OAffCxNL6/6\n9kGOpVQMZaOzt19Lfv6GE9kjbcc2KSddzElTLp8K7znHSfK+y33G6WhIg69FDWAhp3Ng/5FnjcV9\nWDa5151TfnnWV6zi6HuOn/L0z3zK9/nv571OLrfRz6AfqGMu+GW3+4m/5ys9/br7EIse6ldYaHky\n6ha3rpGddJ5NJPvZvKWFvLJMsmMoyalPOW6dN5UzcWPdbWPaaDv7Ax9I9CETXwluz9Jb8PUUysqv\nrLpNQrmE46C/Woal4vHjXuF6d7i1y7mLbvW0vulrSZXyqC9fguVTve7j2d4B70PvvsMtsLj/JuwM\nZ2Fp1US+OHaegjXP+fNu7VSCDVC56Okj+90yfHbWbSVfPPVsmt4z72OA/fvcl+3Sitv9PPPCZ9L0\n8qrbUhy9/f40Pb3H7+HeQ75uOA35/QQDuirajDnYWlXu8DXhtbbf280NP/6eqdE65tSUr2diemJL\nsJFaWfV7FjAn3zvtZbm4CEsdhN/lda9nLdyTaYwTygUv78tY1zq74nOXUxe9zLqwhZhEOs99Lk03\nGl5/Fo/enaYriz6W2mDBN7DuCrvgwu0eT5U7YFFx3st38+x533/N6/ZTDV/XvtTydfC9s/el6a16\n9chhrzurK17OtZrnZQWWEQOM38odP/Zi0Y/zDW/xvL/3U19M03xeUav5/u0O5sxoy2kDs77hdYPP\nOlqwPvrExz6apl/3+kf9vLBL+9RH3+/nbXr+21i7PL8EOyUuT2MAurbm7dAM1rP23vWgH3PJ70PA\nGla9OorBct/LG+5P9uRZv8cffcJtVu4/cjRNf7Hi7eb6ebe6ab7pHs872/YNj+nOqc96es7br8Hg\nzWm6hHKtfd7bstI5b4vtf/xTNmlwnT9e0862gorgMy5+M8canfMHy7GTD3k2URlrs7Q4spxhUpxd\njnuyrbTiLzAvfDaabT8TcH20bSnj+VzIsY6qTXn7Uav7HL6CfoDWO4x1bg85zyBZKn3MvTnXCzgm\nn+0GlM/WuWhVmWDdbK3p1kZLTR8DbPa97eWx63h2neD5dnvdy6aBgWl1xWN0btO3zx+ENWTDxxV9\n9Bel1ckesNJqK0QD9uwYnUKfMzOL564X+NyDNrvZkcHxX7UKCzPU7VaTi45XTwKSHCu2yI4usizH\nomFe+EU2Utg9iVuG7J3yjpndNiU5z8eqZVib470CPvfn88vIsoptA7OJ+e4aLOCn531NpVr3+hw9\nl4rKeeucg4w94+cofYxDegO/l2ynuEbE5zeFyKoLJ8A8qowHzHwuxmcmQ7xnMRhwcnxtpHQjhBBC\nCCGEEEIIIYQQQgghhBBCCCHEDtFLN0IIIYQQQgghhBBCCCGEEEIIIYQQQuyQ62ovVa9BNsoo8+Vb\nqyXKtkG+GtI+vWHITA9pvZJcLV1kZlYuugRRt0+7Bcrw+hca3ZEE2HTHv5cMaCPgaVpnUDKN0vcB\nctRlSImWIG9Ugb3VgQXINEHabRO6/CGyp4CNFK6pXnbpJxgFWQES5JSKyjbOuMJ6gAp3eUpwgNJf\nZchE1gt+n2mztQUtuYYo+8YLkJAa+vH6tLp53ve5/xGX/LzUcDndsx2XkWPmy5AN68Gyp9f29FTd\nS6fdhc1Qju3GRELrKFgrGWTHbAgPhEKO78J2gJXJENK+PXojoNwHXdi3je3maN8wyJEICzgP62Mb\nFbiE66vW/Jp6bdhCNVwGdLPp6fWGS3Aub3rZUB6NdlGsGw14UUTWH6jbBbRlq5u+/wBtFq3y9kxB\n9hH1sw0rvDrk5Zod2PygnaBF30KdUq6j/Xso8GYbliH43pEayhjH3lhz6dR8e6ntEHnw5Bzz5iHX\n3ou2en1YZ+RYHFHuczjI3k5Lsrx3bpkf5iGSVxyXe9a2K9Pch+03oc0h+wBKEEb9K/rxOA+WuT0i\nR64/ydF0pLVJrpRslAfuw9jKzg/vJ8s7kpzlEcfShqUS2+Hs8o6VLyGbCFlGXhLtEvu0ZaEdCPNL\nec4c64w8R41JpNnxcmxBO71OBUnEEBQ1rQeLmF7P08ubtJFCfPP28h6gvrX6fo/nUO4zwWOhMpbL\nL6C+0MqPllKUNp6r0r+FEsy0o8I14V7PL3qBHD7qsupFSHn2YWnTQ58HxwJDF2nzPhwwdFWxmwkq\nKx08pzG1mK7wuvDdyALVk5ERKOYTcOCIbWwT9oGjndgkz8Deas7Vla2D8qC+/6DHa0L8Yx4yBWsO\nKkhTrb6MDGPYFNe5PAuTCWR62guS8ymmyyj4ehH1FrLTw5JXLN6nJGpfKYfMeSTGSbC1KqCP6rev\nbqerdc97HdfRxXhsDeOhDsa/mL7YcVhNxXZRvtPFht/sDYwVa9Ctr2LQPEdLKbRZ83MeRLWql9ml\nJbfSOlT27bWap/vI2yBH6jiyeEQbmtASC55uUV/OOEa/N8yQKObnBUqHY94SiqhbdbcS6WHN4VOf\n/nCaPnHaLRx6GINH9lLIMMczVdiZdFAvo/HScMLni8Vo0IQ09ilk75PkWC7lDKVyLaVi66Ykc5/o\nu+M851lR5VpK5Z0/GiihXuO70flhGxFZKPG6c1bgYgdDjCWW/IN3fsi3v+8c1rKyDxnRRtz/1oue\nfmndC+uffJNfzJe8DkeNrKbyLLrG/9JSKs8ptpxdrnkWW1Ga+3OXkPMfNheRmjs+yJ6iTAzlkrfT\nGw3vQwrB1yemMGCdnTuUpjdhO1ItY3BCa27YNN62zy3ZT1xwy5RzK261bZiLdTq+LrLR8HMNk1E+\ne7B7WV46558PvK4tr7vd0SrSL770lOex6Nf3+gffmqaXVt0CZQ4WUYcO3pmmT55x25aFOc/7Jdj0\n3D68K02XMX5odryMXzj1dJr+4Md+I003Wm7ncuiIW75MH/b8zJmv6wZYgPdh7TIHa449C25B1UGE\nX1r2vrmE/mT/nFtAbdl6tDAZvHDZLZw21jy/NYzfD+1zC68aBthdxM06LK36kNyfm5lL05stz++p\nS37eQhX3fA32ZublcfQOr7uTyLPHn0/T9WfcWq3Y/900XcFYY+/Re9P0vW99LE3PHfLr7MD+orcK\nSxG4s8/Mud1X5dDr0vTGU3+Qpo+fRCzA8uXxh0br4I/d7fO26Z7Xx2dgq3nsgNe7u2bRXuC5xzNt\nr3ezqCeH5r0OnDnjsX5wr5+L9uUXL7qVSrNJWzFYNWP8VMEkcXVlCWnY6cFSdGPFbWEGtDkfYkKK\n7TPm5WBDrIt3/fh9eAMXsKbSasDqGeO/4nhuWi3hmjb8eM2h28JdePbJNP3mGT//Iw++Pk2/8PQn\n0vSnYDW1F4sLJz/zgTTdgI3ZI499VZpeXPC2iesbK/BHPrPuAxo3ypsc4tVMrF1hfFbMs4GP1vJw\nTFq4cPwZ+8B7MrJxyspNPO/cOm+IJjvZc6a8hbQiJrWc+1RgQc41Jdo8VWqermLOx+PU0Q9xXsPY\nLUa2zVzPxNpThpXPKJltKRWVX854LtC6EHPywOeavD9Yf96yqemiD1uDndNq73iabg69LaUtdT14\nuz0/5bZvpRrGywVvR9pr3kcWL+PZUsvjfmYvnw95ezTEM5vhRrRqNXFcRD9PW8s6bKQiKzHameG5\neL43cDZ8hk0LpQGsVzc2YOsYrq57rKd8dsL8Mv6G0RpAth0Vr4PPAUoh+zhc+4tspBhPOc++Isv5\nrvdDM7BzraJt4DO9AZ5b9xArm5s+lucMc2Xd6zDztrDHLTUZL7FllF1FkrMoyXIdYo22g+eqFbwf\nUcFaT7KNipP37Gq4jX12+txRSjdCCCGEEEIIIYQQQgghhBBCCCGEEELsEL10I4QQQgghhBBCCCGE\nEEIIIYQQQgghxA65rvZSZciOFSEnRWulyH4CVi35NhbYnRJElr0PZapjmTfjB2lyMJaroqQR9d1p\nCTPAUapVlzoa5kim1SuU2sJ3YS9Fmdj+gPtANhvbacFBCaxK2Y9DuWXaARSQLkWycNmy0UPq8ObK\nYeFctPaBRHwxstSAncH4WujUxPrRWnKJtWqZ5/eTfvLDLgE7d6eX2bkpSETSdwB1otFzSS3K/G1C\n/jMZuHwX7QNiG5fJJpZWhuy7QVKz7xJ5oTQTfXtnJ/M6Vpnf54dHve2xDuN+dMfyem3I+bN+FSA3\nWizDxg3b+33YgUHqeLODfXDv1jf8/q7BRmppw2XV1ugxgpgoIFaakBBuQSaQcodF7A91RCtHUurZ\nEpcVWB9E1maIxR62rzf92qcgvzmNtqeLdqVcHWWIMoCnV1yWkVXoIGwNlmEr0u5dWxIxUm3LU9aM\ndqGcZ47MW9iZ/Nv1hrJ8lBhks3txyeUa9+112edCThkNKP2Jd2vZvjLWY2nDvNLOk9fL2DP3c9o2\n0Uoie/+oPCCBfkWHjeNkf5e2b7RKiq2g8uQas9vyuJ+jrSPrJMqV4w2GaCRVyb6QZ6NdWOmqbQNI\ne7M+9aL2HJK0Rdrv+XE6XW/Lel3EN75brbncLK87ssOiRCPt68Jkv+fdizwHaKOF60F1oH1Xs+Pf\nXYGlFBworYp2PUFcsmVEV2FN2GYeZV+HoXu5OpINLeEggwr+E/yAtYJvL2Mw3IOt0WDAeuInXZzz\ndn3vbcewj49je8hXu+Njhj4sWWgvNQtriakK6ziyT7ln2k7V/YNZ2Etx+IBu0ehc2uf9xD2v07oS\n90bSCikAACAASURBVLnbzd6+1cTUcX4ocuc7oiBUBoitFs7DvLA8Sjh/ZEFI2ynsX468W3De4WT3\ni0WM22qYB7H9rmO8UoddQYmWJZTwjaw0cyS6caM6PTbUGJ9BMr479HqejG9UFfkd9H0MdPGiy+Bv\nrPv3quVsi8EebirtRPt9z9ccLDJoU0VLqYVZj9Eh+sIe+tQ2Y7Tjc59uc92vpeMSxaHKuWP2uIVD\nryT6j2Wnc6SUB+xb2Ahwrj624CxibhkqHpgV9tEFb8sKNbc7uHDZ54VnzrvtMG1ZaBtLOB6YgiT7\n9Iw3CCsrbpdCGegkTLZceETk95ctix9JwG/HOirXAorp7DWGJG9+VLzi3ys/z7GoivaP0hn2SXaF\nfRVtpPKs/LZjn8X+CeOKdz3h6T+4uDNLqTw4Xn3ysrcN3/9bfq6fWPCLeeBBdEBcQaxkWHTRXooW\nXiVuz7aUYl2JbBaKOfct188he3ue++yk/xTx0EG3LNrc9PWtCsZPBdiI1Gpu83L5stu8dDFQasNi\nYbrqbVd/kG0hsQ5Lom4HFjGrvn0P5P1LxfG5chZjm223V3jyqY/7+ds+IGpveh5n5/3Yjab3qYOB\nX3cTVk1cJ2q1fU1ns+Ht8RQGcY1N75tfOOW2QbR4LFdgqYjBd23By3sQPA+VNmTxYT/DENq/6Gti\nU7BoWml7/7Ox7n3UDOweF+ZhWVXiGsxorWoJ96y94dc3j+vev9fPz3HpCsqyTWsehjFszy6s+5jn\n6c+7LdhHfue9afrht7gt0r0Pup3XAqzDuuvwVJpATsAijXbPfL4xV/b42Dj+uTR97pkn0vTswcNp\n+tjXuu0PbVKTy17u+9YQ3zjvFNYfZ2EXs46x5r6x1caDt8NWs+f3bqnpx2h3PEbf/fTT2MfXCWqo\ndxxzXrjo1mePvukNafrOY0fTNNejAtYwDuxze7QaxsYdjL245tHpeH5OnTqRpmnLvo51+w7sWWfK\nfpwHDmONZt3bpPaKW8+1L7s9XbvvcXnnittBvf02P36pCNu/cTsxW/by7g+8ruxLvD4t7PUYbhx+\nJE2vPPv5NM1Jbf/Mx9L0hbPehm60fZ8H3/an/PhzPpY/+8IX0/S5Fz1eu0sn0nSxO9mxWC5md9y0\nnKGdfMhbPM0exkbDsyuMR3yf+MzXzM/WXLaM53klxFAZlill2Plyf67H0SKKFsGBz15pk1PMWVPl\n2gDXYAs5Ay7Oq2kvhQLkmiPXY7kGG9vYc7GH8zw/Vx95YxvQa+B5C/uupqc3N0f1udn28UO/7Ovs\n5Tmv7wFteBcWrB0s2BRgHb3vNlhy1dGeYsxexHx7bcnnmr05t+7sw6aqv4h55JqPWyaRD/73D6bp\nAwfcguuuY3f69v1uQRSt1UexxRjKjjk+9+H6Tq2G9VUs4GFIGa3Bbj035vpLgrkG+/e8ZzbR+kUU\nW1iD2vFsLbsM2HcWUQZ97P/8cR+7Tj9wX5rmtWzCMpVNaLsNS66G7zOM3n/w/Ozb7+OA2rT3LUnO\n85m4yR19EHImZdEzEtxjPuvswOqR4/QQrUXwPZLsZ17RI4DoWU4eO3sGPuHTSyGEEEIIIYQQQggh\nhBBCCCGEEEIIISYPvXQjhBBCCCGEEEIIIYQQQgghhBBCCCHEDrmu9lIU4elDGjCEbGsGWmQMCpR5\ncmk1G/h7Q13aqhgkoCFj2o9sJihB5MehDPZw/N0h5bMjhw7IHQZP16ZdCixJsiXcIgkkSFrNTbt9\nT63iMmVLkDukHHqABBalr3vwPqCsU6kAGUzY/ZQhh1WCbGESsrX3hrG3F44JqSbcw0hKkm5dtMlA\nnttjSbBIfg75pbVXE1JtFUhnnT3pZfbe93wmTU8/6tJ7+466zFkpeN3qwvShBjn5IuQgOw3Us4rL\nW/VvIrlwyn+FyCKEPgrrSLssqRVcCjb3+DwOzlVecNk5hsg6pEuT/tVWU7RMoXxhbzPbUiOynMH5\nOz1PtyCRXIEHyAZsmFYhsbbacJlCSp5WIJtNO4vItgt1tY/6XoU9QhXtwUKNdjiQzIOsHWOXMmgV\n6MVFUtFo73o4ThvSjQ3Iy83XRzFFW4M2ZObakGtd6nusVCH1X591uWRa3bB1yWlqov9EdRSNca7I\n22S7aERQIrMNW4pK1eVoq2jfBjl2VMVIpjNbXpXE0p/Z8o55Mn1Z5H2eoM6UKrCByJMVjORJaQOY\nmcVI5pQylbGDxbXPxXFIoZD9bnIkfxodB2OJ6Di+f4hrfeZxitEuWZKttEfJllOslLPz3kfdKkHO\nm/ZPZYyzKKEZydMyX5Z93aUcaciJBNczVaP0NeQ7exyj+rVd2kDfhgrH4wzQftPdguXS7jMPfvwy\n8tAd4jjTozFipcp8ef83O+371grsO/38zRbkczGmrsErad+xuz2/sN2hHdbqisttNzYxNu563mZQ\nJacxA+lznIeIpdViG3V7wRVMYwcRlFPUVUTDcMROjuNIH/e2gH69DzfJ6tToYupTjHPLJscWd7Xl\n56mVPMMVWkQhkz2OWzDkwbAikpvlGCmyIJxwB1TazpYhuV2DtPbCNNsrXme2rV+IPUtSaLXVhP1n\nF2P9ASSKeyhsyu0Ox+O5xrLLVG+03dbh3CUfR/fQBp+/5Pu0uhgToo+sIN1a97wcm2H77dfE9nsO\n/mvPvXQ+TT98/8E0vQr7iTNnXeZ+asqPs74M6fNFD8AqLCr6TT/OsN9F2gBs0TieR3nH440cC2rM\nZbdkzUPR8xuKmLfVXf7YYIXRhp3e8gYshSP7S0M622aT44Rqze0fuqg3nL9Shr1cpS/RBMI2jY1I\n1Hjm7J89XIjb49zjZ+8f2zVdIw9534s6jWzrqCgdWdblbKf1EVfXsmyvrjxvpNzv+79wztO/8gzG\nCQOOancHrgV84ZIH7E9/0OvnP74D45NZLmjZ1ek8SymWTY71VjQqRjklObchGuRH9SmnnPLsJSZ8\niHr6wok03Wi6zUAN7Vin533L0HzA0k28bV7b9DZ+ZsZvSAXt2PKmW8T0BliXSbyPXF654Mdc83WR\nBiz5Do3toEoJbBcTzyP7Od6AfXtvS9O3H3F5/Dvv9HSn7zYQl9Hvzs7sTdO0z2puuj3T+ob3x298\n5LE0fWnlbJo+dfZ4mi5yzopxfQnt93TF2/7+ZnZ57IHl4P59vg42pD3PqttedNu+9rSA71bLfq6T\nZ/0+dAZett3x+KeEcdDhfW4jNQ97oM99+gtp+kMf/GiavuORe9P0HGzD2lhzu4QxzPoKbBqf8/Ib\nLvk1dT7lNjmfffbFNH1uyddsu5t+3f/8H/1LmzR6KOe1hl/z8xfdLqRW93t0bMHLfS/qyewq5m4n\n3cZpD6zKXnrOt98+53WmjPXV2zCee+gNbtn14orbS33gc6PjnDro9/1jJzy/z17wmNiAF0cTlmv3\n3+HX8WcefThNn3/hZJquwY74vgWvs5GFM5rmLta+NmG/NoAfcRtrww2M1Q4fcnuuCmxpmeelVdjK\nYV13Cuuux+b9+OcQrw20d411r+ezmJ/fWfO6Pd/3ujDsXm3R16/Beq+EZxFFWOgt3JGme3OwCFz1\n+GhgHXq6nm1FW0Z7/pmPvC9NTy34c49Fg81e19v8EuY2K63JnjBW+MwqZ9E3Ggpw2IgyitZLc+xu\nuQZWxHmrVe/fKlWPb1pGFSOLwsr4e5inYC02srSJ1t2QzMljPH/CvApjMs5BItuYbraFbrGYXcZF\n1OEhn2/g+U0vmj9jbYh2UbQ4Rtx38CyCtpGtpvcPTcRrE/0Gn4ny+IUwqs8z8/751D6c3w9h/Z7f\nEwwfrIqB5nDK73294nNjug+Vh94OFnoeZ2urHn8bKz4uO/Dg7X6cqrfXq8ve1kwiL508labPnvPr\nOX3Wtz90/0Np+sB+70/6fbYz2WsA0XbLno+H4MehveJg6DG1gT5k6/WBEuMsWof0OsA2gmvjIVqT\n53M7y2ZnzkTxV3FQTln4fkSn7fW5ednHtGxvDH0h24DNlm9vtvBsG/HKMlnY6/1J1FZFjRWeyWSU\nSfz4L2Sm895BaMOKswpbvirGWXmTzUKBdS47jyGnzb3Ws7ArkdKNEEIIIYQQQgghhBBCCCGEEEII\nIYQQO0Qv3QghhBBCCCGEEEIIIYQQQgghhBBCCLFDrqu91AwslzqUGoPFygASmJH9EuTyAt4VKhdd\nOqjQd5mf7tClhgKkaWlrRYuVkKONXNqSDsqRhxrgeLSaqkFOrhAgHcdz5kiBz0+7NFkXEuSUT5qu\nu+3UEHJIPeShM0AZJ57PMiyBAuXoKLFH2TkDlFvCZtqWUP67R2k3lj2Ku2DZknLN9uh6oXgVS/ZB\nRpxSXpRzo7zWuSdcXnJ+3bfPfI1LZy3e7uXK+leC/vUU6tNGw+9JATZp9dKEy4VHQMarQD8GWMAN\nXZ4t6Z3x7eUD2N/vTQLpYGu94GnIuhfr/t0w5eW+uu66fhXK5I7rRrMHqyboRVYh8VtHug3/i+6A\nNhqerXYXtg49WNZBppky8QnqcoWWHdAjKyPAWznfpU3B9Ky3Ey3U25VNzwNtJth+0Mqq0UY7VPJr\n6UCGtlzzutru4VogzbrR8uOUxgFbov0KypgWVZtoCw4dciuyQ7e73O2VQnLZ6Rxy5P1vVrqwYGiz\nPtTcZpAyfsMc+XNKA7J8uZ2yiLTni2RDcf9o8Ri7HV39vm6ePVOUR1p9hGu/80vpRkqnUlaQ9inc\nP8pDpADIfKItyXZLjM6b5FjE5NXbSO6S9kvxXr5PVIbYI/Om5+Ul+/y89ywzS3L2hyQt71ss8pkt\nxZhkV8XIvmrSybMUgfuLLTdR92D7MwWpZ1r9lIu0b0T/gLHrVM3LaE8dFqvo9xptSHzWR/tPzVJO\n38c600fuTNP7j93j38NYqs+Lwn1nu9Nvuaz1pReeTdPDisvehrLnsQWJ34Wi9yWzFRasJ+k+wWrS\nRV2d9ylEZOU4RPnVKmzjsi0tIlcPZoeWTvhur8Nxhh+/PrbXqMFlky63tLcq4UTrPcjQom5NI+81\n1BWovFuhyO/i+HTdyWmbaEG1Q1XU604VhVqFpdRMlfMztj/0JqHlEy2FfRdaM65gzNloss9B3MOi\nogW53SHmr/3eliWun6fThmUtbS46fs7LkP9nUz8z7d/dv9fnhRtNrxB7EBSLsHyqw9agjHI6ddbj\n+9B+H58tLdF6xPO5tuLS12XUpXrB9wldL48OrjFBMNDaNUSxTmtL3857FVng5tguplP1go+jBwUv\nvwEs+YawYrm85NYKF867PUkbY/Yi5nMJpM4t6i8xb+h4GVAuuwjLKtplPnLPEZto8qyj8lwy8/bn\nPd2GHRUtgBI2dnnniqysxjvRmojH4PfyrKC4PcoXt+dZU+XYTkXllz0OO37at//g+/yDFxvXz/uI\nY+zffNLbuC//hBfKn/0mjClht5PaS5UytpnFA2BeEsuvFHViKXndVs6QM76feQPlvPo0gdTKvoZC\nq8XB0KXyhz1vo85edBufTsfvYxeDiq7Rytj7jSbWPzhfLGG9rVbx+rAP/dWZNbdAuDge695/5Fi6\nrdVyn4b9i25dSjuIIjw2Z+Z9PrzZ9u+eOvtMmn72hU+l6Tc98g7P1z5vX3vm5cS4XG17P7D0PNa4\nEi/LpZNunzOz38fbs3PeB29c9uuuYl59GyxwLPEyuwTrg3bP81ZEpeSaMCvo555wO6j/9qu/nqbv\necjXWmr10Thqz6L39SeHL6Xpbtvv8Sc/8sk03bvs/X73Bd9/DSHUgOW6Ya2gjJiroF+8f89imj4E\nq66La14Gc7Ae6RcnOxi7GOBvoM+v1DwOKlWvA+cbXqYFWIN12n799xXenKZLmHdsnnILri/Uva5W\njvo66uMlt+m4Z59bEtWqXt9++/PPm5nZ+45jrIO5JduOPp4ncFy6d9HrPsdytWXP15fs9zpbwHGa\nsOEqcW0F4+gabOnvu8Ov7xLGyZdgQ8Z2vY/1zCHqJNuvAcal5y6cTtOfe+rJND2FtmdlxcfGnIsc\n3OtzlNVVt1Fp9D1vAbGwtRxbqWFNF/YXHB/aAb8PBxG77/j6P5OmP/Dfft6P3Xbrlk2088m0t30P\nP/jWND016/dn9aK3d+vPvD9Nz2DeXtjO2uwNpD7jzxBoYx9Z1KMtoi1UDXPNEu5vCTYlNVjGVqrc\nH2P6EucyOXmAfdTWAsEQ9TEaiiCPxej5HAe6efbRXIjgfJibsZ3P6vAcbkArZayXdjp8NoLnlLB/\nok1cs+lpPhfk/Dyyas6ZW/Hauaa6DMuldodWmJbJ1m0eYp2nuYrnJXiEhSbReh2s+U35BxtrsOVb\nhy1R8DpUHnrMFae9vvaq3q61+m7/XMW5uEbYnPB11Gi9FPf6/Hm3wNxY9/pw6KDbIm7A8jPJe16A\ndJJjS19B23UaY7Jiycv97Flv+zfG47C9GKNYgTZyeB8hz+qKFnRID6JnMFizuPYjCosfuiPuo2cC\ntGL3ra9/9PE0vTiFPJSxRtLPtmxs4D50Wj7O47OD2Tkfk0/PLmIfPquxHHjfRumEk8FoQpf9vJCx\nPcA6SwvxX8a1liLLcLQ1Of1FoYB+FPUstpeyHTHZkSuEEEIIIYQQQgghhBBCCCGEEEIIIcQEopdu\nhBBCCCGEEEIIIYQQQgghhBBCCCGE2CHX1V5qagoa7JBJKkB+ipYGtCOCspMNhpRBgzUK7IbqZT8X\nzxsg+Usroz4kzjqwdEqlwyFDSqsHyhL1e5BGQrJcg1x/IdI/TpPVEmViYdUCqTZKWtUrLpnU7EHK\n2mjV5WlKWjEPAfpWlPCmHFZk/kK7Edp6UN4RdiktyI7Tfosy5UUcsw/Pn6QzSrOMu7BtSFxl1woV\nv8fMb5/aVrBkWHve83W+6NJje7/WZWIPHTuUps+unU3TtJoqDSAhBunnKUgdTjoBMZfAjsiGsETq\nuyRoZDXV8XKJ3uHrQsK36dKcNn/UjzN3e5quHbzDd29/Ik0PYC+1JXPYgBzuVN3lwoZ91kFIh8H2\nq9uB/VqPcqOexU1aqdBuAnZbRcTZWosWY77/IuT9A47ZhVxjH5KqBfM2gDY5tMTaPwPpZ14L4qYF\n2egpSD83ITlaL/uFTde8DGmPNcXtY0nHAT6fnfY2aBP2JF3sc/Aul5M+fPfDdm0opZfnV0PLHthL\nTLj8aR4l2CsszLgkcJIjmB5ZAEF+OZL/hgQn+7ZcWcRoO2SiYavAOrn1zTwJVUKJ32JhZ0OOyNop\nx4YpkimkdGOOdH9clpmbLS6b7OuKDp9zoBDZX1ASk7KZ2fc2yclzeuKQ+WmUrzjnKCfKLFp2Xnic\nyH4MR4xkfHPKLL+cJo8aLA3qsEvoww5opQULIJTdwuzVMtJmZiVY9tEesN3FeG7K42KmgjEtSpv2\nVRgyW78/On4NtioFWIiunnG52lDxccnBO91qqjYDKzvInm9edjn9tTMn0vT6io8HerR+hZQuuh5b\nqMJiK8ftgWP8JsZY84v+hWkcB8PJqH8NkfKyf7ePzpnOH5HcMqSG4RppFXy3Ngfp/HGRs+5zHAKH\nV2tBKhhuRjaNAqnj+qCQaisYTrWRr1IJZVPIbjuweyR1nuEQOFFUa15XaWFRSDj/Y9uFOQXqErs2\nSm5THrsBK80C4ohzxA1I7zabPucqYp90PFLoZe7bavrYeRPjtIA52ZGDkOXHTdoz6+Xx9jfd7/lq\nQQoc884ebBrmFz2mv+7LHvJ90L7s3+s2cQXUmtU1l4GexZiw04BtF4IoGkmwb+vTasqhgwSna4Wo\ng6PvDOAcdJzuYFzc62L+jDhr9TwAT5x0iemXTrtFwPKqt3H54y+Mj5D3bpf1Ce0/xlOH9vpc8+u+\n/C020eRZQeXsEzm9bcuOih6UtGvamaVU1LCP90lyLZ94vGwbwlzbqVxLKcveJ88CC5s/97zv9P2/\n49/94ppHy56Z7AJca6Pf6O3+GKsB++Wffr8f//HH/GKOzaGn2drM8su7f3kWXrxXJHLoxNiD9W8b\nY+AIVrN+zj4TAu37atNeeB1YPNDCehk2QcWSt/FtDCSqGBfWp92iZnXV20m2ab2OF3al7O1Yve77\nHBz49rPrI7uVJ098Md32ttd/eZqenfE+7/TFT/v5nz+epqenfcFvZsrX5tpYY2y0vY9+5qSf64tI\nl2AlcmDe00OU2RQ0+iuQp3/mU36czSbK+7b9aXquhnwivbnq9+2//sffTNO0U3j9m32NZOWyW9Rc\nOOu2PZ2GX2Mb6SnYHtaO+7j9xY3ReZ+CXWI1p4pPYeB02z63tGlDun8d1pOB69+0Y0W6gXXolUtL\n2J9rXNnrOJO+pnN+FbagWNebqnu9qtd9TsSxwNomLBD6Hk+fec970/ShKbdsqE15XVod+pjMCh6v\nK1gHDFhbnMba5QNjy/cXl33cQ5vtyL6ddt0Y472EOeUprEkeMq9j++pel5YQo12MLRM8pylhIEh7\nspUTfq477rjNj4MxO8fPtSlfQ2ujPIbodDgP6uAZy8ZlX8/eQHvQOOt5mEIf1djw+/++U56f5TWe\n19kq2mLJ244q7KS/9G1vStNrq34d+xBnFdgcze/39fTBS24vNTXl8/kDb3p7mr7zgTd6XpCvzu1+\nnC+ue71oX3DrvsH0AZtkjmA9g81bGRZReRZNsXVMtl1T3lpeZHfCNTDOiXhePgMcjvbn9KYQ++p6\nkpY9HY+zDtp92sB3sIDQ6WTbRbWam5lp2j9xDsw5JS2xIlvgaO0Pz8pQxrwnZcwpS5gfMUbz1k7b\nuPZBznPZvPXQrWXxzQbmdhuwxRlinQfPW+vTWJ+b8bIZFnAf+nj+hweVBQ585zy+p+91O8iNhlu3\nr226BWALNtXtFhaEJpLstXfelw1aj8G+iGtp0do02282XihSxvc0nrsvLXs7PTvn/eXlJR+PnD4z\navcWF/2+RM/NMTaK7d1gKYV3EArxSwt+TZGtUd6EOKcNynFfuvJ/W+zf49dy31Efz9Eum8/f202/\nD+cv+Jhzc9P7Kz4L2LPfbcHK6MuHXHVMOLYD0U0cX2XuxC3JTEamU3zUj7lKBe3gdB3vPrBNtuz2\nnBPSJKctziv7PCZ82VUIIYQQQgghhBBCCCGEEEIIIYQQQojJQy/dCCGEEEIIIYQQQgghhBBCCCGE\nEEIIsUOuq71UqQx5McgpUjaK0kW1okt0DSCVmMC6pjd06aAkQLYQ+sabkF2dqbvcUrVMOX5YTUFW\ncMtSY1jMll+MbZWGV33PzKxaccmpyILBKJnmx2lBErvTp0WUl02PEutIU56XtgaxxjzlkFhm2Bpd\n7hDbsT+kvyjt1qc0XZ8+CJCDhPxoMoCcGOS2CsmovgRaLLRgRVX0cqJGeTVHN58yj0PIWC2f8Pr0\n7O+6LGv/DV7258xl3uYPuxSuDWALBpuhsrl81+SDWCyhznThgQB50ARyg6woIZJFpH8DYrfvUroJ\n6i3lA8uwtepCErc1lo3von5N1fw8ZUi9r6z6PS0x/rBPD5ZItB3ownZqeho2LGiDGrjXnR7tovy7\nvb63dxXEHO2rZhCjlHJt45i0ztg369dyBhJqrS5tqhzmh/sENP1VBH6ZEq8lxuVon2LOa5oNlNle\ntOEPP/7WND01fyT7yzsm23Yq5MoST7ZEcWxX4GU+QJlSmnMQKNe3UxukbCuhuIzyjvPysut51kHs\nM4bbuBV5llUhTxoehByZwFiNEjYkRUrGZltI5F12AfKnlInk/rHMKe1frm3LlX9/MnfO3kw7GbSx\n7Asjm0i0QSzuQmRLw3Y+W1o3toCDxQ+9fCaQOVhWMt/dtl/zVMmvYRYWVENjHNPO04+z0UN7j3Kc\nhd77DNIcGw0TbwN66B8al0b2jRVYE1WqPrYddLwvvPS8y0UPuy7vuveIy0vX6j7u7jbcYqULGfw6\nrAWHkPBuLF9O09NVr0uVMtqdhH02JOlR3lXIgC7M+PG73ez2vhjZk3gSw8zIvqrfzW7v6DKCoaaV\npnyfqTrveWH8L2RLEUNsw9dd4dbgChHdtyLa9g6H9WWOb307bVrRXUdWG6gqNkAbtDGc7N9c1DFu\nKyXZ8rwDtmSwmmJbZxiPsH1ba2BMC2tPSgd3G34T1mCz1IXFQh2S+qXx/aO9FfuGxqaPqVea/r0Z\n2BEU0R43O9h/w+vSA3ff7ftXXW7+FGT/K7i/exbc/uLSJZcNfu7FM2l6y6bOzOyuo4fT9DIsFFZW\n3Sp2AWPvSk57x24r6kMYjLSahjxzGW1YseTlg2l2ZCW1PpZAXvr/2XuvYMuu885vh5PDzaFzRHcj\nNBIBSiQlkGKSREXLY8myPFVTtp9U8rjmwX7Rw3hcTi/jN7us8lTZssfjsWR5ZjQSNaQ0FCmREANI\ngEgNNNDonG73jSfn7Yd77/7/FrGX0e2hwCPX93/pdXfvs8Paa33rW2uf8/81gfMa69jFkiz3J5Hy\n+gE6yDaQUg10WFqs57FuwDLH+ggNYAIO3sqcruFzH3smLZ8/+0gw1XIwT9mxNouA+b59GGB9SCmi\nqdiUfOclkgh4yHR/3/l9KCMvUsp3Ts92HNOho6EuuQ7xjRsqnzmmi/67Z4FwWs3OS1+7qT/+txcV\nJ753BziAH9I06N176i9//C1d52+KeBdE+8/BV09ezBjKsWcfnwM52w3XHzzW5M7+XIMKf0gV9dek\nqzdfScuzs6qkZlvjEzHR4zEqPtKzG2JdtJDXumgYKjbmI1nSN7eEO4oKQFuPlPMVAsXDlQWNOYO9\ntYe1lo7x3YvfScv3G8JFBQmOV1BCHk80Nrzxyotpud3TtSSRBoc7N4XVuvLmlbR8ZEWW+OeePJeW\nO2gz2yjvbCvvfenF76blw5gs3D0g9MrGjvLtPpCUIZ5Je0f1cBJ4nrtf1/E3OspPKuDV1rAOPMF6\nXW5WOK8tjIu9PYxmj1gRNHGkh0EBSKA13McWMDrEozuLxhPPGMF5uK9fOkiJJGPrdOrmHeGIXTqM\n1QAAIABJREFUuM5/5LDag4O4Rd0hNQk2sb4aYq55F0i1I3X1rZlIa9CTWLlRsaa52wXgyb59UxiN\nRw/ttv8RzjlTwNwReOPeiOuv2n79tvLG94q6kTex/92arre+rWsJMHdMyrpX5/3Jutpb4bqQn90r\na2l5tqLjjJYUP7gOETv5WXZe2mqrf7/80tfS8lZTfegs8ufRSHGTLXTx0BltrSpvv3Ljqq5/HwWL\nNlHFvL64cFzXXlHsZd1vNvTcVs88n5bf2NF1La+oPqorwi5t7OizMWLHGHVTOfNp7Z87lpbPnNWc\nYxpVLGLukNNzLwAnSDlodAdllI128WGfRnzH5Vk3HGMOMBgSQ7T7XHtdbeO4TAQyUUpdINGIkSI6\niogorsFSvvsj5ikH1GKlzLmPtvOz7jqqjj8Z8z0JYgxwmf0B1puAxOL+I75vGbGMd1Ge9VIXNbXP\nn1W7KZc1Fi+saDxdPaQ4PImxbpBo/2pBecXBA8J4drd0Lb0GsNNYsIlmdQ2jJtCMDT1/5ndDtIWp\nVHaofd9f+2L7ZPvhOo5vbZ+JfLGoNllDv2928H5qWWNzB/V49drVIAiC4OQJxbzZWT1HfjfBaeO4\nEmIOY6wBhHjPzjWoB3lnEzrzEayDcVLJfRBrjlY0Dq3Oagzj+kQX/WwDeemV6xrjh3g+9TnNFZZX\n9E4v4fcZnPcIiKc+RFOYtW92W3FTSP6RjZdjrMzjvktoHw4uMOLbEeKlst/fEOn3IJruVVeTyWQy\nmUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk2kKZV+6MZlMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJ\nZDKZHlIfKl6qWqngL9mCDWjthnIupgU0rJ1g/9MBrqYLHE4IeyFaQ2/3ZJ+Uj2jpraqIYHFUyO/a\nfo1hKTZxrIVwR0DUTGArX4RVGzFMUUgLatjCjWirpjKtq3qwtBskwP3Aupg23wPgcEZ52nkDOUEL\nd5x3DNs22oDxXmiZNSFOBPZvOdr5wfrcB4IJ31dwXa7HDtZH9VEqop3hs92R2sco0TOZTNQOrr8r\ne7v3Lsg6NL+oezrzGdlIzizMp2U4WwfdFp7JlCsJaQVGDARsE2HRlcAiP6SPPizyaelPJlEY0IoR\n1tfoc+VAbbWDtt3aQ03lYNtNS8HNhtpDZ6D7iIG/KBRUjmFxT6tJItG2YQc4ARplHja8IFAF1zdg\nr7qleiLWJw+PtRzKtF7r9IiLIo4D1qno3ztdtDeeC49hriwLwzbsh2uw5aTLehs4qn3kQZhkf0+T\nMfPUKVnOnX/hC2k5jArBB+qDKUf/Lx/4N9nnR6dOT+2kVq1n7uMg/ibZNppEpFFunOYxaYUKK0QP\nZilLXjQR94H1KC1JfYgl3zndzfQp5GcnmbuwLY0n2TaBocMAyD4XYwBxj7x3Wq3yWTljF8Z72lDy\nQp3xOMOSkueZTLJHUdZHRLSCw8DKRkw69+FBhLlIt7/5mqnqma5vo2+NVJ6BJXbOwWshrsfIUYdA\nxiF+ztT03MvAl3IciAvaP8ohfuaBVWnu2s6eKMvedn5ecWTS0+e27smee9DRmN5pyNI/mMC6HG2D\nKB+2/RLwSI2x8uQyMFl5D0JigvY+xni2OM+61PZhl2Mn+gqRHbDtRfUFnvAYJGBQjYcqF4mUAnaM\n3TXZs0SPSrJuJWassSUs6QjnmcXxiNjqD1AfuN5yHu2MYQrt0jHfdWxcdcwG0oToA2L7j1yYz00c\nriVRU8TdYhzAc8yjnTQxD2p20JYKyAVRL0NY7w57+uwAtsRxqL64n88NMe9576bu4+YGkK1o7zLs\nDYJIjtXBI48I88Q8fae1hU+oMRWADymhzgaw8C7XgKs5JyvlsCtL/401tdt2T3V8qSmL6yKOf+qw\n2r87EmXgfgK3TdLqOAD2KQA2IcyrUsJQFueNLc3RXn37xu62vs5ZrWt+FuX0LEvo0B3EwR3YKw9g\n805r6UIROIeycFEJOiznFqWctr/wkUfT8o89+0RaLhezLfCnRU5+5kMA+coO3ikbEUV3Z8ea/GEx\nRFnIKt+1+I7NMpM2unnHrI9sNJbvswnXu9D0f/1TaLfAVhaBM0w4hcK5zoBOdmZF//F3flcnXmv/\ncNCeIySAX3xJbfvXfkHnXZ7b3Y5lFtcmnfRt1gfzKSctpt+6p74p3irbBKOTr505+0+fJsAZ3l/H\nWgnGNvbXOAK+pIB1lrJyxMFIsZ93Xy3PYTseGtZuykCBzldPpOUusKaz9d14y3XZu0CRbm6rnOe4\nWFLcL+WFi2oDebhxS9vHWAfh/KUDvE2+o3q6cEv58G1gpELMz9jcVnBtyraDYAtW/BNgvwtozwPc\newELM3exzjLsAeeDta0eMJfdIdekkP/hmRPBPkjXs7Jt/h1cG8b3iWdu42CefXETIiIixzmEBw3+\nIN17WlRA3kgUTIJ5Uw1tuAcEagvPt7Qi5MUnPqs1s0NHtJbW3NTa9DjUQPD6W6+n5Qnq98K6nuWR\nGeUX+f5evjPR9UYIthX055Wy8qer95Rz8p1Ks6t+/swh5YFv31WffgT4ohJQSZMIKB3k1DXkQzEw\nEFUE6hrwrGvIzTc31Kc7WLdmTs4cv4x7PH3mybR859oNHR/zgASo31JJ7xoW6nrOdSBfx009t43J\n1t61pJuCHJFjA13vXFH1ehvP8g+/fjUtL83qPMWZp9PyGxuqj5uvCyebTHQf88DRMQff2NE+nbEQ\nV0cTvr+bPpUruB9nrpGNHeE+DgJuwHdfiqPESPUwZyAeaYy462CTEBsGQ5Une3MGoqD4/iwTwRIE\nQYQxnXONGO9Mq+xDmL/wvjlGOsgUxC8H4YTr7HTUPoeoM94LP8s1Umc90V2UVpFjgg9f5ay76jBE\nEREXyiGqWNitn/qM1rvKNe2xdFhz9coScoNAOdFcQe8CKwXFvv5AsY/veXPIv3JAdW00NY9dWNWc\nvN3FO62dy2l5MOV4KR8iMvHkHYGDa/LgyZypI9owDpPH2l8b6xlErM7PL6blGUwUdhq7OeLtuxo/\nZoiXymX3ocDzHsPZJ8qeeCbEo/OQuNmEaLgE7wXxPo1zq40NIca/8ydfTMu/8uv/XlpeOX4e59V9\ntdpY14r5nQgd/9y5x3ScA8pP7t3TmhFRjnxWzhJs+P4/XHKUUyHYM3su6EOXDpDLt7rq0znEzRzW\n1n3Pls+Qr5lyoWdh2aNpz2lNJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTKapk33pxmQymUwm\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkekh9qHgpoqPyQC7REm0C+6QhPPgSWPvkcrBKzOsW8vgO\n0Ri24/FE9kkj2KISB1WJZTddKamc38NLDfM63iDEdcGGjUipTlvWa8RE0EY5mWTbyA2GRDjBDg9Y\nrSHug2XH6qoDi6c+rfRwXtiRj2mrjmsYwf50MqYFXTb+IoFtZoTrj0M95xAVUaQVt2PzvrtPF9aO\ntPhjW0mAKwt4f2gTzY7sxoYD4nVkEZ6DFVwHFraDd2FLBau+xz8ji/Cwos+OgbuaTtG3rYvN4A8A\ncxYMiC+i5VaGnXcQ/IDVOMJMjt/z0zMrwgaedmA9PKfmni3pTIk2b2p3zS7qHPFiONY1dpqydqyW\n9dkRHMLasD+lrVoe/LAquBUrs7Ld3IHl6VZL51quq+130CdGMFwj1or2fJWizlUFImqhqv1vAFtQ\nhMVeDhiQ+bo+WyvpmTRgt9ztsd3iGgq7x3HxePr/xZrubx7sjGJV9nyuaMnmsStmLHNsNvnZ7HLo\n4Ic8lzAlIqrFcVz02JznHRwREBkOugmIMcRXLwaJaISYlqPZ+2cp8lgohkm2XSQVeqxeWXYfZPa1\nJIkPEcWTZbeN0GO1yjpwHSM/uJ4c13qPxWvoYKJ0HI4zvK/0kwzDxBc49cT/QNxBbI+Ri/mecYwT\n+O478D6r6bbrp5pd9AnkPQsl5DcBrW7Z3nTPPeANx3h2s2XiU5PMspMnw4Y+X9IYGdyWlefs3vhT\nqiq+V+cVdyc95myK78WajleZ0f6DnnJXojPiIu4V9qFjWI2XgcyKadFPFBTaQxfHmZ+B/T6QLP02\n6om2tWhWQ6ejqRg6wwbrW9u7qJ8xDlqH1XAJuI8R0RV75UlzQ9eLvLsLF+BqRRcWAz9WBDqKeCmG\neaQALiaLqC6HGKc/eti/O4I9e366B8bWjmzZSyVZMVcrKkfoK7S1bnQwz3NuExjFiPk65nHMP2Hj\nTFQg/WUTp9/vnneAhPLaXd3HVheoU/RtWtMfOyzY1DoaUMLrbcruemdHbS8YKZcfoB1eQt2cOCt7\n5bt3da9PP3IkLVfyygm/+f130nKjreMv4ZpPHFxKy0xbEmfsR8zAPDIqYPzJ4dlinh9g7tjtq26v\n3hby4JWL13Z3xecOiNrgoP04ht2/r1jaQz1xzKtWldMSRRbGirnES5Vg7f7sWSHCPv6M5ovVivaZ\nJNM9X/QipR4ENeXFS3mQediH5w0f5PhZbBLvNWajrpx9ssmffqSUp5x4xqcAuKj5CufPqAPf9eSZ\nQ2rz6XMqPwLU1NqVHw5einrrluLHl1/UzfzGid1/I8/1+p6fYynOfZy692ByPGnvD3iWZ57XNyeY\nRhGlznS9AuQ1lk0CUPKctTZa1a8sHE3LOTy0AhChR4+cSstEj+80NL7VSlpLCzEf39lDtZ585LT+\n/+q7aXlrU2ttPeTd2z1tTyZCRDl53VBj5HFUSI+Yjrridw/IiwZQ6SOsfQwRy/tI+AY45lWgmIbY\nTowocxIXFcJGn2Tu40UlP6SE2mDbR3xx0G0YI52ydikSj4A56gTr+D10rjpiZQVYzHDEddq/Of2P\nOn5SKJCb14UjarSUJx1YFqLn5l1hREJMQm7cvpmWv/LVP0vLB5cFMbt3X5ig6zevpeXhRO35HHCk\n17fUX55dEEKlEO+2yZU5rVtuNdTPFoHMfO7E8bR8Z0P7lOaVp5VLeu5n8Ky/iP2fntdcc9RRn+si\nv24hp20BzTMLNM8YxwmBjiIeKYz5ngG4OSJq0Z7HGFQLJSGKlqu6xzbmuCsLOv76hmLA5priYAGN\n+PC8ns+Bmd04hBAXXFnTsf/sy1/SdfV/PC1/8ueeS8snDypvPLaq5zqPNdjLN+6k5RLwXEH75bTY\n6ys5ri8Ke7pUBQLw7lVd5y3VxzRqZ0uYwV5f7WqIAZB4JG4n/qnPORfW4/juaeTEda4PRpllokxC\nzCv212aLwJTtv3MMAhdp4y6Ne1BNKHPsabfVF0ce/BPLY6LYsG7i4IIdhLXzh8rOemmcvT/krnmH\nGSV37jbxXBvfERBHw6FusveOuN3WmFRVqA4qC1gTx7uiSVv9JhzqWTW7mofvDBWfS3nFrNqs5t4R\n8v3cWH10YRbgynW16X5P83CE/KlUGGQ/RxcNTgRVNj7sB1p95j7MX3KYY+xgTJudFfqrhrl8ta6x\nrt3ZHS+vXL2Sbjt+TOM72527Bo6r9bwfoIiCIkqL+dYE7bfb0zjeA8qxvqh2wn5QrqsRzx3UZLCA\n3JwTB84KBxjnOhinC8AvnT//TFoe4bltb2v8i0Y97IPvNjiTeCgjHkQPgBxzX+AwXmS/c+jz/pBj\n1Kt8NwOslnO52evHo4f0rjGnG5PJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT6SFlX7oxmUwm\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMpkeUh8qXmoEr+BcQf48Y1hx52hHDWu3GJZrxCONQ2KW\n4OXu+BLT0h9WgqEsvco5WWUXYQ1dzO9a6k0msJyDvxEtx4mGaAFNRGu3ckXWVhNYmOZomeZBXowC\nWeBNPJZpcRe+Rx2gcSbAecGaLMYfo4RWekQ6wQYUXu0JbFQDPitaXcHqcQm28KeWZeN4/pQs147Q\nLnFp12b9nQ094//zj19Ny9sdWa+Nhqqbdgc2V7Ds6sEuqwP7z04oy64irHUTYA1G8Oi/+DVZx9Fm\n/uwLj6flQlX3N5VKVBfhULaowRBoCVgV0s4tAtItKBAdhbpzbMFpRwvrTxiblerCWxDxsA3UU2cP\ncTVbUizYaeP/R7Sf0wXUytk4lE4fNsBw8p2t6ho3GqqnBvBVq3O6htmarCFny+p/azuwawTiboh+\n0+1qn0oe8dHB0NHWTHUzA/vTAvAkRBvMV3Qvc1XFtduwc763o75QApoqD6vH3mD3WcW0zENxkVas\nsF0etGSJW5yTPTVtA11rYQ9SyrMPbSQTjy/xtMNtiCKgxSdxRAivQYw24GAaHMdqWkZnW/P5LPhC\nz/7U/hjo7ku7SCBtYIdOlJHTBvBZjqM+0aqU+z+INSXFOEHEVqujNlwqwu7VY5HqqwcHLYmgSExb\nHGY/B1aDa2Eb7m/kjWjfSZK12Y3hZNd4PssmxFws8FyvzyadCn2fnRL1MObPAKdUQCyMIrZz9ddW\nT/v3x2rndYwJedj155C7Mk9hux2Otb08o9woLsrKdnlhd/xZWpWNbRmxfhwpd83nZD8eRGBbEA8K\nv1FaFIfou8WC4n3SBdoQWNJCn0wkFQfoB/PzqG/YWsPt2SEIOtUUZ/d1p42hT0fEpyIHHuOgFVVx\nUKkCicW+iPJ4sHvMHvKUdhNjtKYVDhOBLso89gTXWKBdKvs0PkybU8bzFo7ZBGoKTTGoTrdbeLAB\ne+AyrMB7Q2J5PChe5KLELuZQYY5VNj7bhW19s6VxoNWQ/X1+pOtJ0A7DPQv7LvFySJT4vHpDtHfk\nbDfXdM4OLM1p43/jhuY4m9vq38SYVjHHfu+2jtnGuSYYBy5fBR6iqTog9pR9q9lT3Xd7mi9Wyno+\nYYz5MS2xia7Iq5PkKkJr5QrKqyew/F1fU0556brQUHc3duskgoVxD9dVRfxst9S2+kDn5hHXSkXV\nx+K8Pluq6rpamEeOgCU7uKT7+MRHzqfl2Zrm/7FjRf8AWMwfpbKHpx/AKfmQS1yg8CCIPcdx7Oa5\nWvUgiKtc1jYPvsiHcHoQrNaD4KuY9jrIJd9nUU/5BzgOdqmCQvnkMf3Hi1eCH7oYw/6nP1Jf/+jz\nuzdz7qMYiHDtCdNPX9P3ISO5j0MxDbO3OwtqnnOxXqccb1OrqvJ6PawJIscKMS8uAyW9sKD4U8C8\nZoLcZLuhdbVN4ATjovaZrQGTgAr7uefPpuU5jAOvvXs5CIIguLqheN1YVoycAa6mvaPxbGcL+Kc+\n0fIYw7CueJ/rO1hb6XQV44dAPA7AeeF6LOdnxHckznbkzM6cKxsZ4Gt7PlyaO4fHBzDR59zRmTaz\nU+2hGXsR196y18fH+FwR41kRjauM+fwY2IFeXs+ba8NDtMXYCZbEdWbjiJMpX7359Gd/Ki1fBZbi\nrTcupuUba+pPpYpynVYLmCUgbb7//e+l5deIqnamNapToi+3toRKGQBFESXqa/sTqklf///4Sc0L\nn15WrnOyrmd6/rAQolvIIQ+AyZIPdB+cjwwxThC9xQafB+54gDWxHbTD/rriRxHI2YkT+oErzStX\nKwGbVcDxE6Dy2nf13I4CGbyGOFHBg2hHOubGfT3/7kBzBeJEBnsTT+Lr7myO8DmVnzivWMol93jw\nZloubwtLFg4UkxdHb+mYG8KQjIdXtb9S4CAf6r1KvaT3Abm+2mi7IjRaEPx8MG167eXvpuUBJvhj\ntB9nbRHPgOMJVaur31TQz8oVYBQ5l0HOxzVKolL4znAf9TQE9qSL9RSuB3Mf4p+IlGJccNBLWeuH\ngYvAYT05UdeHbXHyLSJzgsz9E88aRuKJ/cRTht5zcdz1rTmijF3233GWsCgys6Id4jJQXSPFlNaG\n4ma+pH7eS4QBaiS30vIgVEzutYV9W6ydTMvVGtoT5j+jCfK7CcYCrt1NpTzvd5yUxuf5kb2WFznz\nZeZMOn69rHrZ2FJdr6wKne32UZWPH9tFKV54S/H1zl0dY35W46K7jo12GmX3f8YIH0KUOTgPX64p\nBnWQA8cxj6/jLC1pHD31iafT8twMENnAeHPdYh2IqDbWwU6fEabq6PETaXl7W22+hMWt7Zb6xRhr\nOjHqZ8Lveuzdu/NKIzsseFGkbE1O3ujUtzbz/oj/q5ZVTyEm5ZF7glQPu3JjTjcmk8lkMplMJpPJ\nZDKZTCaTyWQymUwmk8lkMplMJtNDyr50YzKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQyPaQ+\nVLxUIU9LLOCUxrDqhvUa7QOjnOwAOy3ZdXUbsvoiOmoCW+shLMgnCSwzYyCrctgn0j7x3nkTWonC\nWshn5zbpyAaqu6VrLJdkLzkDjE0Cu8Y+KFljWGGN4JhEq62op/KgCV9+2q0nMkHK4UCO3RNssuBe\n58VI0f6JLtAVXNvJisrnTshCrbooC6cG0FDfuQz7tZ1dS/Tnnj6ebvv4R46m5S//haywYmCGRh0g\nkmhRBVTCGDiAIexSh0SRjdA94F/ZaWr/N1+8lJZbXVlqnXrysWCalXReTsthWxaVAWz8g3G2jR9t\ns0MHLwW7M9o1Oo6EDDk6ZhEWZERj9O/LvmzfWg3dKaiXgO5AI+wCidaDJRtc/4M+cFS0WQyL6E+w\nbtzuyN7xwCxwbeyX6EO0Cm12aadI20R9dr2p49O8roOL5rmWZlRPC8CW3GwAUeS4rOk4PVwb64FW\nfYw9xT1b9gK+pgmSSFAAiqUDvFTr7ttpuX5YVndBqP7vyoOU8uyTkD0y7b7gHuVhbUc7UaK8BohR\nuVBtj9aAHM8mGEfjgJZ+7Jc6b+SgWny2pO830vPipWiBDbtfn82i1/IU400TmMY68H1RmG0X6bMt\ndclH+qMHK11aN7Jqwgdon+zTtJikouiDrTV5XxMH3bX7WZ/7OLdTtCt37RdxHI+Nq2MH67QPXhdF\ni9Ds65xGVXPqT4Ucx38i/oCFGSA/AwpqgeHNiaPAHfH5sr5QpznE1TwtjWGBWZ/dzSmLJfWJIsbl\nMAYeJpJFaqelgbTTU9JJ/OEIHIhcUblrZV4Wprk2rh3tpDgUMnJ0X+eqz6qe5mrI25BjMd9GV3Tq\nbATsRg71NxjAIpgO9shp+3A4B90mqMiN3HkO/OxE1RnsU1ibnWyEEzGbxDB0+kSGZPfzyOmXKpdy\n2XaptG9uDTl26MOrJdXrYMqHy0pNbZV5zGDMcQNxmnhO+LHnHJSeisRD0HZ82NMDbgFx1QFearGE\nOVSMuexeG24DXerklshXisiXb6zp2LdETwoGyGNrZcwX8eBngJ1axj6Ldc2fB+gHt2/pnraB4AiT\neyijwXNuRzxSAXk62lgVc3WHeQIb/wQ5TAK0c76suBICCzbEfG1zS9e/tqE5YKe7N3fx2AmPcC3d\nruY5BSClqggAETBSq6uy6C8AETEZr6Vl2rOfOab9l+bUjtkWQ5RdvOAUyoeUcpBLYfY+D4Sm8hzn\nYVFPWdtDz3X5rsV7Th4nez7sfNZXJsooe0nMxWDxs0QCevBYYUnX9sRZjJFfx9g5+eEH//fuqn/9\n3pd2L+i3n8L5gScKPWgsp258XcJjO871ih/wGleR0x/f1PGD6bY/Uu0AJ8g4NsH9l4GgYk7T7SvG\nN5C3lZFPVnPCxQyxNjvGhL8/UAUfO3Q6LZ8+qvW5OnLX5h5SpgFu6NUG1lTR56vziq+1GeWQeYwH\n7Y7WgDmOuwkX1jIwABJ5sXlfieAAmEEHJ6piUMGabQXY8u37Gr9bWKBq7gAh1AEiE9jD4YB4EK5V\n++aXrDfV8Yg5M+YupT0sbIJAwty2C0RUQhQmjjfC8VpYxy8zL8V41ks4h8D9oe5J0HNxJij6+NZT\nokOrK2m5DMzZ8rK2v/LdV9Ly3Tvqf0MgcJjP5Qt8Htnz61xB7XBmVmunO9vqFyEa8f2G1uQOVXf3\nXz4gpNQ5IKWOY81+OFT/+MSK5pffH+teww6QblxXn2TnYVs7usYoUps5dFjr/Acf1fr5X94U7qiM\nY1ZQ3wex5v/2xdfSMlGxhw7qfokHOnPyRFo+f0rxK7kjnNIp4Ei//s1vp+VRoLgJ6kywvc24rLx3\nbWP33sej7PVxZz2qpfte7P3jtPyrs2+k5eL3rqblCOs7/Y8qvuRu4b3Yks6bu6vYMVy4kJbHs0BE\nX1Fb7D+ndx1B8A+DaVN3qDY+6BG/xASA+CJffMUaBnL9MuYD3bYeNrFPQ4whRHOPMY8b4Z3C/ryT\n2ELfmqpPvrVE3/qnfy00e43PAengA866qIO+87w3cg4UZm52WeK+NWnVXy7m3NrzPD155P67z7ll\nbasv4DzIH4aYz3fxjrUf6f1UKxJSalzSvLQX6Z3mMNT8tjbUiYddrN1saYzY3lhPy/kY75xyTJSn\nUb5262mrTvPMRpW5xCCuTWt7Lq9+f/2m4ve5x4V4HgOXvQOc0uOP7SKUrl67mm67fFnIwMcffVTn\nJOrKWbMnjuiDkVKc3BEhzz0KJa2nVGoag/l9AwePhO8y3HzvWlqeWxIeku+HulgHbjX57lz38tQz\nz+v4mFC0msp7nfcws2rbjG0T531SxnsE5/1QkCmXIux7n8R9smMf41Srozw9j75Vwpp3EvoCXvZ1\n+jTlKz0mk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJtP0yb50YzKZTCaTyWQymUwmk8lkMplM\nJpPJZDKZTCaTyWQyPaQ+VLwUUQtDYjTy2p7EtCLSd4KKsFRfa8pyqwkrz0JedoPlmmzxhnnZzo0C\n2b8lMaztA1mGRbSC2kN2TGBpRht34i8Sx3oN1tGwsg/asoYtl3TMBhAvMSwdQ/BcCrA9ikABGm3B\nyhA2aK6z2/vxFEEQBDlYSNHyjf5WY1ppwROU5IzqQPe1DE//KC9rrK+9JSvu+5tXdZm4zhKsNfdt\n9l76rvY9cHhRx6a1FFBQMewEaT1L+8WI98fnGdDiCxwB+n2xmnCuyxdkI9e8C0bYfx3NT0QOAAAg\nAElEQVRMn7beVZn2vB7Xy4RezPRzg41/APvfZEzberZJ9COUyzOyPls9fjgtX755X/vvPZvhiBa8\nsNTEs6A9MMvNLq0JY+wDvBu4C4xTQ9jSgUAVFGAFXkF/pd0v7bx7Q1odw4YXNmU1YLN2YNk6hiVt\ntai6nynB2ncdAYe4KAeRouOPibSAzbNDHNprDTlY5vWd+5DaiHFX3pC17oEnP6/9gdlzv/vp8/xm\nG2IsY3vyoX+m2y+c1+3EK9Q18QNsq9zH2e7BOBFZxTGNVoUhrfOJpsoY64hh8tqihq6BaNaxfTaq\nbKc1WAL3MN7kcHyiIhwLSI9VKe28GdcqRY1bRF5GMdsqEUo8F+8g2/KQ8l2b62b4flxT6NjBYl+n\nP3uuN8m+Xj5j5xppC+6xzQw8aKrJBGNB9KGmnA8vjFsOsiGkLaXuv9PX/eSBjiISKQbeCY77wRhx\nbzyE7TP2KZRk5VmZ0xj5+EdgLzvatcbMJbDIjPS5Yo22orqWXk95Y4y8iwzG+sGzaXmInCFEP6jM\nCgHA5oAuGkxKytkX55WDj5CvjoE9zWNM5fhETA4bfZQw9mEX7NMGAioGAaeuyw/yGPS6PXzYwVTB\nani4u/9ghLkKcA5ObkUiCf7oEjXldYTOjhG0dO0gf9/sqTxXgHU907Vs8t3UqAaEYIjnQowPH0wU\ncgxDjMLezhiG7W7/Ri7YV1uNgFzi3IP7h3uTogGeBSNqvqh+exiW/ldubaZlWvSXgIkrId8jquyT\nzz6Slu/f2dB50dd//Pkn0vL33pLlcB7Il3tbsgrm3Ht1SbiRuRkg7Koaj5O8EAdhXh2A+WqL6AHY\n6+dGsu6f5IGvwnx3u6HYtgUL5AZt3vdydcdmuKdceJwwf9HzmZ2T5ffikmyRS+gss3OqA7acalV5\nbIy2eOKw8FLMYSLipSLE8DA7/5kWkdri2LUzV2TgzXZ0dj/LsMf45sM7eT7LYyYZ5dCDYfLhn7g/\nj+fyUDzX66CjPFiromcfrHEFeU+9EkfFOi5mbz9yQH+UgDFs9X/47Y3ogT/6y92+8HM/rQp57lPI\nA/lBX/198LTBFZ+tZ73G+ShzCQ4pUz4ucs4SYiHLwT8hd6lyLaGt8axWA8oPnchd89CYQOTnXEXx\nrQYMJG3uaSW/b2c/BmpljHkB72mAfIhrsSuLR9JyY0PXlQPqkdSWERdUnLahRlau6wMFILN6XW2v\nAtNYX1QHrGKNeeWY6pK5fAdIqUEf60HIK8bItxsbwlVsrmlcbGL86yNvH2B85RId56wzud37Qjoe\nNICNnWBOludzyOm+x8in5hGniuhoVcSXHsbXjidnzztr0pybZue606gy6i5GvjqDdxHHflbzr/X7\nzM+Yj7CvZKMo2LeY41SAezhw9ExavvCe0BgnP678b2F5N8c6/rYwSfOr6iDfuKrjLc1rLTZfBTYe\n7XrxmNrgpeaBtHysLhxHF4F9p6mcrApkz/2WjnPuKaHoDx9W7nX1mtArpaLq+NRxnffgQeVwna5a\nfQn5VqupvlXFc3vj0tW0POjoOhvAV4Ul5b3zwH2sIufr9XXePq7h+B6OYzLOfvYcoI6delL3kXs8\nLdeP6Rn359Qv64FiYmEJvX0VfQjzwmAZc56K4tF7O6qbzRKOc1fH0YxjevTMp4+l5buXhY25cVF9\njpgniut6iwf0fItltclmQ8e5v6Zy4kF1uut9mA9mrHU66bIPPc/3ks47SN1TjMWjXC57bZZoGd96\nH6+Ia/5Pnj2Rlo8tq18Sg/zKO5fT8v1NPYcHEdcW3byNCB/s76wLaLuD6ea6ANeK99aAZvRKMciX\nsxNHvJINRj2dqFlUPBrNICcp4L10AfkU8GONbe3fw3vsnW2tBexg3O91udY43eOiL+f2XbU7Xcz+\nsPNMPevRBcybNrdVp/OLGhPW19V3iTqM99ZuTp04kW5744Kwe7MzynOdMdppm3hnE3n6/CS7fxO3\n5EPGcazv9TC2YQ61UldeevpTn9Jp8U5jgPFpjHx/BCReuaK1mCPAxg4HGvsZhw4eU/ztXdEaUxvo\nJocj9kFx0MGMZePufO0p8eSWPnGu0Pagpph/hc4iwcP1RXO6MZlMJpPJZDKZTCaTyWQymUwmk8lk\nMplMJpPJZDKZHlIf6s+O6ZyQ4Ndf+NJ9MMGvSPFDiKDd1bePKiV9u3hlSd/E7rb0Tey4iV/NVvTN\nr3Ed39KCI0uSU3kU4tdx492LS+BywV9w8Nca/DYbHVtifCuqv6Pz38M3xga8Rrrk8Bfu+KVEf0Pf\nVBvipwTurwQk98tYnm/mOr/E5Tdd4T6DX3vWuvomYRH18x5+RdVa1zddi/imWAG/EIBBiXO/+78E\nf/2SfiV95Y6+HRrmCpmfYxXwe6sxmrvzTUKPWxG/LZfgW4t4PAF/uM920WrQ3mj6FPZhlYRfXzo/\n0XeckiDWHffP6ZuRQeh8NViHnOCb84n2iUsrafnUC19Iy+9evJSW7+59czWHXxzyVwJ0CZngl8b4\nAZPz6+5qCb9O50/A0R4G+GZyDhWCHyAHOXScWXzldA52OHTGGbGMxs9fIvKX+xWci3EoCvTN1WoZ\nzl44Zp6/PHNcn9SPlyr6Nmcd118vq7zvatPt6/yh59e5Mb7t+84FuSM817iblovFQ5mfdRsdnzO/\nucqfdPGnrdzuc72ZPrnONRgXnViE/VkXrh2Kykl23VHttsbLYkFtyflVBOsUfWr/W9zJA5zHdcDh\n/3jirmNqlO3qUMQvybo9jUP8JXkc8XpxVjoZDNG/8WsXurPwu8lOjIHjAn+Vz6fFb8T7vr3u02iE\nXIVOHvv3yLrBffOXLG7Tz36uk4S/QGZ74ljgc6Cio0N23YyGuo9CkQ5X0yfmT6FjpaJn1xrqWZdK\ndFihGxHyJ+eX8/g17RD5SKK4GiPuVevKdfP45UEJP70Z7P1qLxwoT4pD/fIvyNWxr/In/mLWcVJC\noj53XL+wW+8qft+/cxX7qy9WkcfmMejNr6jOwpzuddDBL6zx62L+kmfMX5KUER9HHO/TovMLWvwg\nM5jgHmfndZxike1W+9PYYIwxdQhHnv5w9/px284vwgu0VEQ8GiKWJgP8aoexA10xj4sZoY3y1133\n2vjVYwG/Si+xHavohKwpVMjckgko835nQKHrHeMb42F2Ujvx5AshPpvDT8nDIPtXhPvtpIdfu9Px\n8MCKfh14YFm/jsfuwZ11/dL0NJw9c3Bp3WpozHvs/Lm0XKjql3frGzrO40/qV7NvX5Pj6KEZ/arz\nwAHl4Fdv6ddgZ04qV+MY1huwgSoGRGX9Iqw3Upy6chfxA782K8PB7nBbHbaCeLfd0rzhPhx5OnQM\n2HuGzHMDuD9MQu1bhoNYGY49BcwDaoi9dFOhK0S1rLxpZVZj27HDir85x30P7Sb6//5rqQ9bdLh1\n3Wc8P2mks4THiSbkZz0uNt4yq85zrrSqee2x55yea3RWyBznuw8+v1NmrM376szneuM5jseph+5D\ny0gDZsrIYfrM5374urWxm//9w3+kc/53x1Q+/Jiz2CRFnn7gc5/xOMB5DVMfoD1NuTFqcGDxfFpu\ntm+m5W5ea229nnKsnR26y2ANI68xpN9Tw5otZ9spTZD39vuKq62O3FlyWBgJ4Wqznxvn6RRKl+Ie\n5gtYA6Zj8uaW7pVrAI5rJ8b9bkPxnusWhZK21+e4Tqs4nevqvAtLivF53F/McR9uNUw3aMo3O6Ox\nfzzhL4312UPHNd4P2jpQBw5FSQ5rzkgcGpuaz6/d0DMJW7vXuTOEE82EwQzuzFxrYt6NPlSDc2IZ\njpR5J7XCM8H9lXFMGkKGOezPxbK/5jj1b6pvf+VP0jIdD+k+UeC7AIz5jnM9xkLmi5yDJphI0tFi\n0Fe7nTn/2bR8887X03J16aCOmXsjCIIgODr7ms6Pa//Kqzr2s4/8fFp+94bWYl9tyyGAThHjBnK/\niSxEb11+Jy2/jDpbXVQOXFzUr+mfOH8c1yYH+Ve++1Za7sP29D2429TnXk3LP7GitvTKe3JNX0e/\nqS/rs3/+1a+m5eGQa53Zc/sHW/N6/3od16B8biNd5I1vYDn9KGLByUc0wD9xWPl1YU37tBMdZwvO\nvHRAu7mua7zwDdXxv/yi6jLGWvKv/qf/Q+Y1/yi1dEx5fKmqe27jXcwALiX9jp7vzKJy97PPylHt\n/i3F0W5TcZePnWMq0xH2aV96u38gp31xX25njKBLOdYmYox/dCF33M5jnovuOdkXefaU+uXf+sWf\nS8t376i9Lc1qrvSTP/mJtPw//q//e1rmvM033+H95jHoOGmD876Q66u4F7rh0H0Exy9Vdst0u6Nz\n4GQAEkIT4z76Uy+Eu02s+TbJLDRCajXVL1ttzcOHO3q/3YV7a6MJZ+ouCCWF6R4X3efL2JntEEOF\nvoQ98TxfNI7RAI6AeA9dq8uJd31d66QtvANp7X1/4MTxU+m2S5fl2nTx3YtpeYyFt3JZmQz7KOf3\nEdf70MZ4p3RPZpuhq08R7m5dOKglHbkjDZFLdcag/5AU0FM9Dftoe1gTjmLlLXR56fXUhldWNf6M\n2bdKig3druJv4nkXpPiENTyf+6/zueztoefltXeVBQfq4d14B++W6nTedhyNHu69jjndmEwmk8lk\nMplMJpPJZDKZTCaTyWQymUwmk8lkMplMDyn70o3JZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT\nyfSQ+lDxUkXYLAYjeHDSphNWe6MA3pywZS5WZAV39NjptLy5Kduo/rasvvI92DYBdRCUYR0Oi/lK\nERbQ7V17OSKcHBtJ+odCRVpH4v5GQ9jE00YVmIuQPAJY7g/glc/roXyWXQ7yAnZ0o5A2h7Rn1yfj\niSzOlvuq1xwQHHfBzFkEtqcOK+XeONtaqpBXXeXzaiOjvevZgn1sH/VXLmbbn1IJbL2IHMrDT3iA\ndubYfcE2KoGtcwh71SjH+gYSYZT9fKZFtPkKYR0WsI/SxgtYI8f1K1LFJJHs4B1MyQRtewJkygSo\nMLTDA0/IIvUnf+V6Wl7/X3atCgdt2ar1Bnp2rPE8rBX7sJhvwhZ5gGd0alX2c3kHM4MYAUtjOHMG\nk5GuoYT2cHhG9drFxS1U9OH7TdjUwRauiPIyLOybrT720XGqBZVnEL9mCjoOaFFBBZ8dw+e3UgRq\nCh8o5nevs4/6Zhxx7PaK+tz6fdlzdnZk71pcpj3iA3z304PHS5yn7vGam3LrfoqWpMRi0CqUY06E\ncTEhpsqzfw4YIiKliCEboc2HHvv2fXs9YjxouecTbf+GsB+nB2AMZp/PppfW3mFZccfBOTmWrcTD\nKB6VYOGbTFjfugbHztRB63FQCLA/LV6z689tknjmeFYcFxPHonO/7rNtbRl7nTGM9Yfxz7G1HNNC\nNxt7xraVTDzPhMxQYvMiHydgOgRKSjBBvfTBKIwR49kvmV8QbZY4uCNaDquuy3m1vWIBdqKLJ7Q/\nuJYJ89hwt50MkYrurMv++/4VWWS+flE23ys1nWdlRTbfcUU2mry/RkPj7v/91WtpeQZjxmd+XLjX\nek2fzaMNjAZEA+iaS8irGEqIomXzGTF8oG2TDDeED21NtxiUq9l9kdeTJ5IO/QvhI0VLlsu8P94H\n4zku17HuR7xAWyHlAQ79jtXytoMM0PbDuD9+FvRI53qmUT4DZSLgEjQUIg0SB0EZZG5nnEww1jJm\nhhgT8k6MZ+5DJNhuA+2hjQ/xABbqmrtGuJa5qsbiclEP/sSRpbRMW+QyrO+v3ZRNdYh5Z31OOIsr\n126lZVoF55EDnDsuBMHcglBTy4s6Du28iTCJCrIu3oBV9vVbshl+6XXZM+80tM8MEFdDzPVm60IV\nbDUVw9buY54PvNR+/sN4S8xDNNaxa7AKLgN5WCyqPvqo4wGCTQX5OPPlx08dS8tV4KtiB9nLOSLw\nftGHuhTz8HoQFJSD4FLZwTX5ME4PUmbq4ENGOftkbMvCTwWuXblXD3LtPJcHTeXsX/CUGWx4HOKl\nkKu4Uyh9dumI6unQsrbf3g7+WrXfzL/xivrN3/9vdPF//7d1LcfOY7z0obQ+eFnLj4jy4qXIiMD2\nKf8p4vK8kC9L87LH7/eFYdnYFgpma0OI58FQay7jUZJZnpRUSQdXzqblNjBSSahcsLmj7SOsY7pT\nn912UI+0fjiLZ9QBqnAMbAw75vY2UPVlXe8AaKomkFKDAWI2GN1jLBb2O5hvAR1VrgA1hfGSGKwy\nud9oZFzjJdpiEgCdOIP1KWAQckg68yiXqtq/BXv/BPWTx1y2UtWceOtiY+/ate9On/EceRNt8zFW\n1ZH0bqGTNjAnqYDd3sUAEEX6bA11WUVgi+d1zBj3GhWmuzO2OspjOEQWyZ/H2hhzbuIYYqwlEMGR\ni3yDKs4F5ESlrEnOL/3sz6Tl+5e+oessvh4EQRDstLmmq/KTh3TtnW3hNQ5UlY/dvCeM6QuPfiYt\nn3n22bT8h3/15bTc31H+SRxIp684kmtqfTAaCfEzVxXC4hd+6Yw+i7q/e+d2Wr54UfGuoZAY1IEc\nGk24zqHKPHZMOVyvh2tDu93cFMqj0eAaNt81KLidOHEi+EGVy8o5uXbKY9cQH0+jzw1j7X/lsu57\n69bVtHzghJhfV4ZqE1tALZ1aUTy61sWcH+vTbeTgsyXlvdOoxo6eV6mkZ/34j+uZtpvAz3SBSQHG\nd3ZB7wKIm47A3mu2NOY1toGZR3/lWq6TJiMI7JdCJ14GH6gC1u8nQBnxPD5sGeXQYYmdwn8cPSrc\nzktvqd+/8uaFtHzyoNrYf/abfzst/+JPfzot/8+/9y/TMpFcRDvz+ivAoeacdzLA83BuH2aXnfVV\nfGB/LSl28kadZ6UorPLnf/nfwTnVd7/2xr9Ky9eRB4VjHbSDlz/tLWA0W0IsD4EuGyL/GQODx3zg\nIYk2P1qFngTcg/r2va5xXkWgzLXFnS3V6WjENsPjM+/VuLe99/weOf1Iuu2RU2r73/rOSzoeEJBL\nS+/HBwaBGwv4vtVZd3OIuEnm9iTjvUsQBEGxoDFhLqd4d3dN70xjjNnnFrWW1G5qfbjN7xUQbYnr\nJ8pqCcehZoDprqHcaGiOMsG7YCp99+J5yM5ane89n68NhdnvGpk785gJcoNWR+tOfB9TwprRg7z3\nov4mdV2TyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk2kqZF+6MZlMJpPJZDKZTCaTyWQymUwm\nk8lkMplMJpPJZDKZHlIfqqfxCJ4/tHiKaJ8ErAOcsoNooj+6sGUuwYp7bkmW2L2q7H8C2IxGbVkK\n9SNZA8awtp+Bi164uWtNNIR3+xgWTCPgGGiBRLwURVsqxxqpTdyWrpfIAlqN+XArwQNYVBGPFdLJ\nFc+E6KgziSyWKvPAcVRkO/7CEdV9DfaE2z0dszg3l5bn6rLfnl+SNV2xJmu/tXu7drIXLt1Mt711\nVfZ2d9ZlxejcE+3qYJMXwxM6D04BbcAc+zlagsGSNgL+wbGcVjEY9qccLwWL2pDMBlhoOWV6BbMN\nw/YyDNhxyGSRvVgwhr3YWP0vmci+LMzL6vL4819Iyye/+mdBEATBpQtCWwxg7U8cEi0IG3215XZX\nfavZ0T3NVXQfRxcVO2aASmvBjjWH+xv2tZ1IioWKYlOXCAK0sRbsitmACk771HU2cf2zVX12Bkin\nswt6DkvoixOPz7ZjKYf7ygNxVdtjXQzAMOkhrtIzj5ieAOiMYU/W0kFANogHOeM4x2XHuNDBSHAf\nttHp5mj0+rRF1bNLOCQQdYK67vRlaVnIq90WHP/JbG924oMmSXbbIOppnGFXyk2x5zFyXJxMaMUK\nfJLPU5JjGC1JPfiQCe5pQGQjcT9EUKGexl4MWTaKJnH/0DXgHifE8uFccU6xwUGKOYhHWj0SuZW8\n7/wuBiz72r0++7S8Ji7qQVBQDsKLm2F77uRC090XSVrsjBA7Mc4RsdIHRsbB0hAN5Bxf+9fyfL5o\nn5FyrMKC8Kmjjuz1h4i9gz1r/g6so8O8/v/VK4ovf/At2VE/f0jn/Nyi8rfVZVmqxnnlaa2+rvfN\nWzrX2YPIe+uyFQ2BIGD+HAKZmovYhtNiMHLiF+rYQcxpDxAkme4HJSC0ako/HbQI3UdHaP/EBhEp\nlRBxmt+/Dx0EhJqgi/y3B7vbHPpBFw2kTBQbqSnAqYB6E9wHOne+lJ37l4BhZQ5QnPKfXHBuRURP\n6LL0INovw0YWc6gkycYBO0fBZ2njnbCM/RkzB3sDYg9tZH5GfWgEK/lrt2Xx+/i5E2n5yMHVtNzp\nqZ+tb2usHwDV++5V4aX6A45VCma1muLXxo6OmQNeajTQ9kNLmodxXCwAYVFAsGw1lcvfvCVP/7cv\nKVe/A+RdDznzBJ1xbUMxromOsbmleydeash5395xwiQbHcA8pAwk5ey85rE54I1bsJDvDxTLRkPl\nWWeP6FkdWJHtMsduWpZTHF8T7/g9JSK/mddK+oUv5fQgqB4IxeQrEztKG/8sjJMH7ZQ8yHU9yD35\n9meZuCimQ7xvBy/lu7Yke7vDvlO5DqTi4yf1ge+KwPHXKsbGL/0VrNx/Wzf+9/4TVeDjz+mz86tA\nwxGl5Vu19D1DD2XBybk4R5zyrtjtck5BjJ1s8Q+tKG9cnXkqLd+++jUdZ6Q4Wi9pzaUGxHgtViw9\nvKpYd/jw0bQ8Cyv52Fn21HUeO7I7nhxYfizd9ux5oat6QH03uxqHdoB/urup7bfvae3v3qbGnkJO\n5a0djSWcV3F5otXS8VcPA/mCMWSC5HKI9Zo82mG3o3tlikE8Uoi6HHbVQGfrGoMXZlWXnOd3O0pA\nMa0NGi2goDlfxDp6uJ/D47pCdhCXMZIW86ioIuarQ+CM5nF/ExxzDBxIcayxc5b4ywpy0cd036M1\n7e8wU6dQzbZwNbWy6iVEAM85iFneD+ZBqC93hpw96AzQX4bIkwdYSzq6pH7/6l/9i7TcC3eRn5td\noDxndezujnKj7118OS3/2k8IHfX0Jz+B68Xcp38jLZ9ZVg755jbvO3vwvHNXeKnT91R+/GMfS8t9\n9IlqT/0GaWmwsqqJ3nvvab67vq388+49YUiWDwmJ/DGcq1JRbCVG6sIFYXVee+214IP0xBNPpOX9\nfJSoWJ6TCL115LmzwN0NkIt10f5WVxUYGsAItsd6DrmdV9PyvVD735mcTMsh8LBEvJ6Kp3vtZtRF\nHlhVeeGA2nN1DgMU5vcVzNFyQLWUytp/8Zhi1Nqa4mGfmDZiojzX6SCn97qFg6JiOEa5hrh77ojw\na1uYF97d0bjYc9b1dRxnmdNJ64m40vjxsR97IS23G1rDf/Hb30rLL7+p/vqvviqU3U9//rNp+R//\ngVBMDeCC+W4ywiSCa3F5Lvc+ADaL98J757s+xVw9v3ik5/ozz30+LT93/pNpuT1Q/9juvpeW+xc0\n7712R3PydkfHzANNlUSI2yhH6N9E2ReLfCE+3X3RXWn29QRgwjxJt38aqb9KeB+7dlf1nstlI/xG\nY66R6JjbO3vjA+YCZx8RzvDdS0K23ruv8cPtr+xDRBlhHSJ7mc55piHWrCZYoORx8khAb6C91eaW\n0/LRQ8rZE7z/7iHHbqNMJGsZiOylJa1tFIC14hpppaI4OzOjcWN9ncgvtHNURBzv9pHE937Ag6Bz\nsinP+7/QXTjILjqvcpBn4X1ns6WYlUc+nHtINPiUL7uaTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT\nyWQymUzTJ/vSjclkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJ9JD6UPFS3Z7secIQp4adzxjl\nfcuhIAiCEDZbhYlsjIZDoab4HaJSWdZIEWwsSzOynOpObqXlSkW2StWcjtnZszOcjGg7D5tQ2FZF\nsIvOw2eVqBuWHWQKbY8dFA2t0X3oKM8+HrQE7dbHsLQqwE70ybzq4PEnT+gyYSF1fFm23DOwRS3D\nCjEGb2cEm1Za7IWwBwtx3mh+99rah3Xsnb4sEWm3Tst/x26a9tew+c6j/cWODZjnGolGc6z6sJ32\nn8PptkXd3JANYW0o+0m6ODvWbrD3T/KwUY3xCXpA0wIwgm/2WM83HMuqMJnI+jPAsxl1ZU026OzG\njxhcCeKFrq0LY1XO8/nCog/PujvSZzeA5litq+/OFXXfWzvAysEmLQ/0CFz/g0qesUzlHVgUz5Z0\nnb0BeUIqdoAwqRSy/c4rsME8uqDY14Yt8bUt3eP1HT2H1kDXUwFS6tC8jnNyea/fE0GHuhzC7nan\no2PPzGh7e132iwEshwO2IQcblI2OcrA7ATFuHnSfFxs0HdppylI2iuQH79jioU8w5syAmUJ0BR2j\nxw6GSNtzsHp2MEvOcWhz+H4LyAniZYxBjOOcgwbxIIu8qCQOkbxGjFXcv4B7Il6KWMcC7NMToKCS\nMSzCQ7VJ2nzHcbaFIcV7HwIvRWvppKc+wljS68m6lFarxHrsPzc+vxy8WB1bS7Qh19qaMRTjFuwl\ni+DP5HAtrEseM3T4EsRtoY2EH2rK+dDqDDH2TJDPwdm1D+xUCfGSiKE+kgT2xUoO3vBhdt3FBeVY\n+frBtDxo3U3LQzCGhnvjWBnIzjLsksv3ZLE9GiruTiboB6H2n10VmiDKlTLLJ5b0fFdm0b/p3c+x\nCtamUcztwME5mDiV87ns+EV7UjikBrmyrmdmETkfsE9E5Y3baKvII4fAQQ2xnWN8fm9eEuNaSMaa\n4A9aSMc4fw3X5VAxaIuM9nQfiNw8zjtXQszFuZh+8fH4cIDTonZLD7UE637Gb4eMwJjmJP44qDNv\nAnKCNKCE9ajtfO4THLSAXHO4Fxvy8MNeXlJ/7mEOFBf0uYV55eArq0K93b0ni3kQYYOtJuJ0SeX3\nLquv855OnpYd+WZDMWB+Hv0Psb/bU04ywo3P1BQnishvmzuys9/cUnl9k4gmjXut194AACAASURB\nVHMjjCEdIBG2cJwOEL09jJcD1iHm2fEe/mvCPBqK0OBjYKTYYfu4FtqY94D5KiDOnzqq+FwFsspZ\nu2AOhQ4Yxe9HRk6tPEgpH37JQTf9G5SdVJDDBlNj3/XEP/Dv+/7fCbBBprDu5EVgEe1ERBSnNcTu\n+DBSLHvRW7yexLMPxiJsP3sKYxFj2YfU9JhHf/NVxZoLf0/bT5/SjX/h8yj/go5z/FH0f4WjB8N/\nQcTMOs95yrtir6uBIMpn5/3MNXL5Q2n55Jl/Ky0/c0hzjUcf0/jDOd2RQ1rjC9GuQgyMIeLhsKtx\no9dSLM/vcezDgh5GuZS9BhdHupbI6f/qOO1Aa4KgbTlz6UvXr6flb373zbT85rtCHubIA/c8d9Z3\niLGwD/RVDvMAXvSwj76Ic1XLupd6RQlgu63xh/O/QU/PpISxqx9rXGpgXB8hQF6b7HaSClDp0Rgo\nds7JiT7BOvQ88BdlrH93MCe4j8CWcKwdYz0NOMsaKjwP1NEYc8RofrqT1LGDcFHdcU5fKWkg6ANX\nwHk018+iOBuHwPjJ0NXHmngPCOIKMcE5zemSndd3j4E5zXaiGHH9utZinzyl/K2UE0rpvdffSsuj\nRM+9M1b58o7a4zjQc58k6rAj5ENLq8Cw5LR9c6w14G5XeWAffWVMBBzqvtPVO6etpuJdDnWMZh5c\nvHgxLa+tCdnBOQfRUJQPkf71r389LZ84cSIIgiB49VVhnl5+WQivp54SEmx5VbG3U7mZlstAJFVQ\n97fxfq2fKPYmE9XZcE77lyqKHYfHipUB5iurn/poWv5o/oPRvD9Kzc1oTCiUMP/FuDU7jxwdca/T\nU5vc2tJ7hG4feMOr97S9qTrNY0xzpprOXJN/cJ76/jbDOWcO1/jcUfXnz7/wmbR8DG3/8t230/J/\n/+KLabk15DtLHX95XuvHS4sadznXPHvsWFp+7/WX0nI1Uh3Ui4rZr7yqsfZzHzuve+E7JA9ih4iY\nHtCCCXLpIsbRxRnFlTKuoYi5dQnbS9gelXef+ShUvJtNtP5+sKT+9+KL30/Lv//nf6xzLio+rlSE\n6BwA8zUGsmpuQbiffl7trIBryOeJtMl+bxtP++KND9FK7BcmY771/8hZ08F7bhyykFeDvg88daUm\nBCrbG99vxFg3b+zhSLtYTFxeFqrpkUeEb93Y0vPie1+O3RFzQn4HIMnOOfl9gMTDmEswXg6Hus7y\njNrtpz8jpNv1917XeXXEYIy21GppXGw0NIacOH08LVeripvMeQKsoZVKaOdzeKeM/KfXw/pzxtod\nnxNDo/Nmj+9RPEgpNkAXdZaNqUo8gZvH72JtqNMlVlTfKXkQmdONyWQymUwmk8lkMplMJpPJZDKZ\nTCaTyWQymUwmk8n0kLIv3ZhMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTA+pD9Xrf9CHXXhR\nVlxjfPfHQSbQApd26SVZHfXhQTQmToIYpzAbw7AQyHK73pR1fxUWvtc6u/ZJ44mOPRyzDIvRmPau\ntJDKtjRy5KGh0Abfh0lxrNp8eClaJgEplQNi51xBdnGPPa262diR5VTulqwe87dlebgJO6kaLNwO\nHpad2twJ2dQlsOLudIQZundNx7z89qUgCILg5euyDLvTk1XVCL6QtGKdhNlWZayPOJQNWAHlEeyy\nHLwU7aoi2oDp6C6Cyvukp0LfefmNtHzwgCzUjh89nJZn52fTclTT8wqqsnEM0LeCMM4sJ47VP2yJ\n0aeCiez4kljnmgzV9vbt40eoZ1rFhU5H0PYcrqWEoEI8UgV9vg874VngpUp0i6NHIyzfukAr9WGP\nP0Z7KMJ2bjjU9sWa7NnK6EO0uKwDI1UqwqK4qn6xAYzUa7fVdy5syB6th/Y8WweuDzb67bvql43m\n7mcXq7quLdgrdxBHZlE1izOqj1uX3knLJz6m6wpjtCcHKeXBRdGGj/3Vg/uZdr/w+dmltDyAZSC/\nExujzcSOTWd2rKMFoIOImvjqVKLVN1EbDhphrx87cddj++crO3aRnnFr4uyf/R1hF42lNtnYvp+W\nibk4e/YxfZbWkLBydSwucdrBQH3o/n3ZD9+4fiUtv/WmYuvVq9q+dlc5RretuNaFlysRHxxC+Mxn\n9vrr4+c0nsZg5+RL6k8njsuS9sBBxfaDR2QdOT8vG9VyScfxIVpY32Hisf90nuffnO92hyEtrmET\nDzQlCQ955gLYH+7DwaGqnmnk9AWMl7QOL8ryN1dSmf14BIRKfs+yvTwri9FBU3na0QXF7M8+rjG9\nMNH2ahmo0OUzui7gC5ZWlRN+6km1vRrsewcN9bPyqnJCZ9yPGTO0C1LzYOzEAIeVpyJCWQiUVQm4\nqwLwE8Mu8Daw/Q/pmg3P05GDlMW58Nj2ETTOtdP6HYiqKizTh2BplYEnAYHHsVfdxLDQQM5wpMpK\nUBHd+AesanXQxmC6c9R2RzfN2JIDMyXMYywMsvM/9psYSJ8JnzUe2qDHHE7l2EFKAc0Yc9zdvZ56\nTZazFeAjttaA30B+uLGp7asHhCyiFXEEfGsT2NDxPX12cVYNngin67c19pQKyCHRv7e3ZXfdxzhU\nA8Jygo4wwHjfaChX5GfLxDw38TyRq/WJDEAH6A90PbRtLsLOdwCUwP747Ru32NoHeK5jICBHwJ52\ngSaIcL2Hl1QfqwuLaTmPMXjM3BXtI/JgB515/jSKlefBOSXOdiYM6Jd0RSfSyfvZ7Etw/6AndUZM\n86UiDLA+HFE26cOPrHoQfBavJ5d97Y4lNj/r4Kg8WCsK+x89hnWfmGPOhz8/Ynq43VAf/t73FV9e\nlTN68Af/QnHqb//7qvxf/lUdaPEI5oLFB7gnBzXm4R1MoWqwOW+GioXsfyESEuZJDWCFXr2tOLY4\npw8/9YziWLFMvAHxUsDkjLCu0BCCI3Rs6HfLoYOGZixEGVjXAHOyeKI4XUXSNoqV0y7NKY89snQg\nLX/sjNAAr17WnOwvXxEy514LyABceqGsOstjvJxg7FkEtoTI4s1tjdPLS8qH88iBu8RXoU76QMiO\nkZ90MXbVZoGdBsJn3NPxV+Z2t0djoA8GQDtwvMTcboSx6gqe5eMjIIcSnX8W64JN5L35EfCUOH6V\n+ORV5C3IpeMlJLJTKOZ2+Rzql8hrrNMRRcGck3ipgoNyzEZwUERv5sdq28P+ubQ8t6I1j5MffyII\ngiDo92+k2/7ZH/55Wj7+5E+n5c+e+tdp+Zkn1Mbfevcn0/I3L+r8L33rT9LywUOqj8Onhfo4dBRY\nuYLutQZMz+FAMeXyta+m5W6E9ZGa9m/cVPuZr2s9rdMRBuLeHcWmckUDI1Ov48e1LkIdOaK575/+\n6Z/qGrxrHtKhQ0J37SNKrlzRc5qbUxxuNpVHLy7pHdndO3d0wBJi77bO35novhuxxoVmqOMzZVis\nYU0audCpsuos4LrAQP1+GjXBGH5vXXitMeLx/DzeO6L/NRu655015f0bNzUHGWyrnecwFuZQqWNn\nfcKHrHx/Oxlj/ZwYphOLejfzb39GSKmnnlTfPoI2/vGfeT4tX8J7yu/f0Pzvpz75SZU/8nGd61Gt\nFa5tam2ze1/PPYf50S88LWTdkZrGti9euZWWOy21Z2LfqNDzVnSM/sR4WqtoHvz4abX5ItYCiHwu\nlZg06zjtZPfZbo70vEsTIKJyavtVoKCaW6rLrYHaxDrQ8W2s75RqOs7C4om0vLOp9elJX9eAKXPQ\nw7iApecgl/cl/NMhZ8XXmcAwSc3GATkIKmcuH2btHSQTtf8WFl5XDutZMm9z0Lrox/vowlZbz/rQ\nIeWQp06qf7z5lhBqXD9g146xTjUJsR7l8HzJUMp+R+/sjT6xua4+ehBouO1Nrf02GoqDB+saB/oD\nrnOo3TaAmppfULvN5TjhpRAH8d2NBYxpMzN6Di3Eg/GQ8XH3OM54yvf4GKSd6OmbV4e+2Ov5bJBd\n39xlhGtooo1wLv0g+pvzNsRkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZJoS2ZduTCaTyWQy\nmUwmk8lkMplMJpPJZDKZTCaTyWQymUymh9SHipcqV2TDk4fH0yiRVZaDdYDHJzEytBdPCrIaC2HL\nNqZVE21RaWmVk+3RDqy+1959Ly3fvL1rtzQETmY4pB21tpdzuBadxWs7yO88cR8iQBKXHeXZzpOF\nWbs722nxejCQndTB07Ky+4vXZaH23hXZrhLJMwOkzeqC6uHIQVldPbukZ/LIuuwd78MS/dLb76bl\nb1+SlV1jzwJ1WNFzKs7qnEEPNoiQz64ucjbDrjxW++vBitCxxUaziVzvtLTkYFQ+1J718PrSn8u7\neWlBtrDnzwpB8sRjJ9LyEWCnKgdhNVakLRcQEsRO+dy/gQAIx3iWodrA1jXZ/w76u/2ObbCAh5qH\nzVcVVqVzFT3f1oC4HJ0yhpVZB3ZrCxU9yGcPyV51par7y6MNDIdoPzhBHNO2V7vQVp4WeDmUi/CN\nDnHvs7N6buzr79yTVeEbm7LbG7GuYMX4yGnZn27cvK0DwbayuRcfV2u4LuBUWrCKayKWdoEauHnl\nelrub6lcPCgEndtzs2Ofg5Hy4ajC91vXTauKwD3QophoJZZpZxhizEk89RU5uCjtEoGTwjFnDIzU\nOKDVI62Rd/dP2ImcR0G8Y3aMdHFYxCrlM/fn/fmQVSP0v3/yf/zTtPzlL8sm+T//B/9FWv6xj/6Y\nrgHXf+vW1bT87W/9ZVr+5jdeTMsX334rLW9sCI/Xaavf+NCP1RLqHk21DeRLIeaYzXvcfT53ritP\nWVmRzerzH38uLX/tq19My6+9djEtHzigPnf0iPr/qbNPpOWnn5FV7ZGjJ9Ly4pI+yzYUhtnPKvTY\ngk6louxYESdqVzHi6AT31uyhPWNs66JdzRUZx1Tu9dVHa2XZ5ccF2UTnSsqrSjW1t1x5dxwoVjQe\njHpAo/RlN/rcWdmlFko6z8IRWQXPHHg8LQ+6ssA9dFptIxoqJ9y69ra2x7BaRV+MgAGkpesY+IBc\nrIri2DIcZmOexshpq0BK0Z6Xc4I4xjUwfuD5DGCFDxf/ICJWALjH8t7zJHKq00YfjpDLj/nscWzk\nk3lYZHcRCzaHOv+huu4D9MsgB8dhWtdjeAlAFAsS2BVPo+pAmubyHBfxwMbMObU55jwyZsLOsSg7\nF+x1VDGjAdAPaDPdrvbJo4L3288QDfXabfXVexuy111ZVH+NifylBTxi7dyC+mI+vqadMGc5d/ak\nrhHYgct39Nnjh4REihL1141NWeYWC2pM2zuaq7GzFFCvrbbqg3ipGPlMsahcZYD59AjW6u22EFQ5\nXEMxVqfu9XQujqn7WMwoyv4tEZGbPSBaEmBLiAbpY365sqDY+8Qjspl2EIQjtBXmNmhcxFt75/DT\nKB9eyoudchJN7O9BOnlwVCQwOlxHn2M5P7t3TDqUJ97r9ZTpgO5z2J547pUnc1BG/LAHpcX1Ayx5\nOMfJebY70vFBEQ2KDtJwmhof8lyM9W+/qz76X/23+o8XX1Ts/a2/q4p96uPAb9Y8GLMPvoSp1Jmx\n1kdeGgMH60GnbW0o/6NNfFjX+PNnb6h+K2gbTz3J4+u8CXDHrabGhwniKrGL++GQOa8zd0QemHgs\n99m38oHGiTL22RkrZ4iQM9UGaicfPSHUzdlTwsZ8723Nj/78pVd0CSHWe/uK8WVgK2gx38XYVipm\n46i2myo7yxOYDPZ7RC3qmAnWsEsYT1ax7ppPdG29zu6z+u4mEKxci3eQ60Bx4rJyCITlGZ3nALCu\n9yPNVW63eRzdRw3jYr2KtrWDXIxYhmvTnaTmkAPFRKEhB+F6ZYt5j299kIEPWAqiUTmM8jjlRNiL\nSxeALD11Ni3/2Gd/OQiCIIiA5fjSd9fT8saa5nPJUdV/nAhn0ep+Ly1fi9Wfto5p7nhyXuv6K8u6\nxg7wcZzvLJUVjx7pAfd6RXPZ5orywHCg/DC3o31CMIUTrCsNgILJY32Ya7YnTpxIy88880xavnz5\nMo6jGOBbz2Ku++lPfzotb23tzpuff15rK088oXn1q6++quvCXDQHdFQTa00VtLkzi2pDVzuYDAIr\nF9x+R9c7p/cq3ZqOf6+HWDOj+cpgqPnBNOrGNbXPfkfPfYiYvYm1cWqAWNvdAG7lnvpInmhiRkei\nwRG/Od8gchpT2TQ7O4X1uF/87E+l5S/8lMrnPyEUVA7jb3DzkravrKTl3/gP/6O0fOYvhGj75V//\njbQcNRCDgPY9AOzpe4n6zcc+9YI+uy0M+cXvvZyW5+tAAoaMax6ELlNgL/IF83nO7zBWjNAX8kig\no0hj4dC5hN0+Upwo7uRC5Q/31hUTg6HeXZ5/VOicS+vqHw1gkmOghucXhIueW9Raaxf47OEAOFDk\n460GxgKsoeVIzJpChQHzOa7RcH7kwUB7plAOZTfP+lJeOsB7qGJZzzLEAh2/G9BHLO/tLfjt7OiZ\ncqmpXtXxKlhk3Gno/NvbWhddXtKEK/I08gnaONN3rk0xH2Yfun1La0DnTn0iLV+7djUtj7FWEqHR\nbGzr/f52U9fPNfyZusaHGPltkvgmwlINc4uVZX2vYGNd61Acd6O98zIXnviQT55Xe4nnPYMTUpz2\nlP02IvG9pcCaPtGvzXb2mOKTOd2YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwPKfvSjclk\nMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJ9JD6UCE4ISwUE8fnlzZsRCthFwebRHtNHXMMuypa\nkDk2prBrpNVqvChbth4c8gf3LuweeyLLKeKliOWIQt4fLedgQUhHLccnCUVaFmYTjn4Au5Ftq+Ti\nRvTpel+2ZoEcQYOvvCbLqc2m7rFWllUabfLWurKHWrspK8uL92RDeGsgm8Xnnpf1+Tvfl3XblUuy\n8OtMZIvY2LPxrwEL0G/Lwo3tI/SgVVzBog51X4p1jf2x7Mb6sJUNYLcX5fFs4f7G55DEvmuYDl1b\nkyXW2oYsyNbuqZ3fui1b4o99VM/08byeUaUmXAWJUkEE61h6ZU88FoMTPddxWzaRF77zEq5z95o7\nPdi443j1guq/VtI5C3nEBaCPtjo6571Gdp9eKCtGnF+VZVoFxyeqiedtw7JyTEs5dKIyPtsHtoLm\nvgUHkaFyparOe2ddz+ed+3q2oC8ENVqq4kw3gJSKcrIOnpuVnV55uNu/DyzonEto4ustHfH6lup1\nBzafN28AL/feG2n56OqTadmxfEuy49cDlYnuI+ommD6FaBtj2AfmYR09GA6wXf1vggCUz8NGE1bW\nbDN9WOxGPA7xVUAs5BEbaYG830cSXHu7rTbY2JHNYqOhcqultjnCNfK5FIuKHeWK2uDsnGw963Wh\ncSqwkex2NZa88Yaslq9ckxXj916WNTJSgOA7Lwoj9Wdf+pO0fPvmrbTcH9H2EX16kt3GGHtG5Fch\nEZipArGDsWUwULlUwkC9d5gJbEi7QOKNuorhtaKu5sCi7CJrsBff2NC4X7mt5712705afvuNC2n5\nsfNPp+XPfu5n0vK5x9SPK0AdRVF27jaNGo2y80bmCyC6BQkStLm82nNzBBt/5ww6fn+ofaKi+m5p\nXrlogv6dq8mCOJgILTbZs57fuqvnWJrBWIX8bdBQ/zh8Vs/r6LOf07VE7PMql2uySz3ykZ/WNSIz\n7d6XDXcM7E7cJ5qOdrOOcaj2QdtOYNkM4mEQF3WcKtpzTPwsrNpBfwlIHOpjbjHEdU7gRZxHDgqq\nQLBPwEEoC0Y4XhF4qTFwUYw7Ll1A+9zvwboejaheIDpQ2x28kgc9MoI17MRn9zwlqlbBCXNiiDYP\n+8ovxmM9hFJZ8TIM2d4C7K/7JyaY+KIh7IeJgIo8uNB9BMDauizgu11d40Jd17VQU9+qAUNRn9F4\nFhTn0+KJ47Dx39KYmuC+Vw/IJr6DzlIoAS1R0Lk2t2UtPMIYlkec7uI4W9saW5bmNQYTZ9YfEsWn\nc5UruvcBOkwHOK8umG4lWEIPho203GrrGhgzhnvYTeZTTj6JdtDHHLjbVd4Sh7quHJ73sUOKvYcO\nKD7TNnqMe+L6Q87xAmcnRfyf9p8/ERfFTuRLqH3+zh6MlBfv5MNBMSDG2fvsP24/UsqDhfLhsLgG\nhbGENBBQKIMcunHEayw4CxfZ50Ue6PDmiM/yMAodzBD6dKGGeWTO2Sn4m6ReX9f7pX+tB/Huu7q/\n//i3dH8/9++qDmrLyNO5RuNB/Eyjzgy1dvatSPGeKOA+2ZhQlFMuSGTRGO3qi69ovColmvs88lHN\nH4hd7LWAHwy4fvv+9VBnzZOfclBTjN9EQGI79imHiuUN9L8msIHDsea6ta7utV7V8X/iKeXDBxZ0\nr994XWtQO5hfVqoavztASwywxjTGNTd2gGDsEBtBLA1QlRhHefwimKL9jp7DEHlGFGr/o8u78+Y5\nDdcBURXEGDMEEYvEaFHOKy+LsV4bbgMHCox7fqxrqSI41eYxzzir+u59W+t/kx2uiU2fBngXUAYO\nk/NFrg3kkXtNBsyTuE4AvA/OlWO+wO3EWgG7dvGtv0jLJ5/VnD2Kds+bw7jykSc0t5t/TGs0C8jr\nujvKk8qYGy0MsaYTav3w+7eFMT16RMeZncfkBO9j6hXFpsWxjlOIFO/yN9SWthZ0zffHuobZpsoV\n4M8K6Ftcy2Ke/Du/8ztpeYznwDLf/1B8J8P4+7u/+7tpeX/Ni/u++KKQ5Tz2pz4jlA+jRa4HjFwB\nzyEE6qanuD2H+cGoivU/rAITXXZ0RfWaJNperOm806jWtu5tCEQWufFzM2oDXbzoSzA357yYa3ZD\n9NeRpw0wKZu4LzDTkhNX98o/89xT6bZfeeEn0vLhFcXFfEisGcbCU4/pGu/dSMsnltX/fuctod7O\nXFF8PZ1gHrSt9wDfel2Ys3/y9e+n5UefFArtZz8p3NUhoNiexDr025eEvmp2iArkGkZ2ThA67zWR\ne7OMd0sh5prElg8CXU8bz3Cwh5+s5LWuHIeKQdsN1dO9/ltpeVhTO6v0NYa1BjpnCWtus3PC61Rr\nQMdjEaiHnGQy0Wc7wDZHEbHNmIBMozDORx7sD2cdvimlZ3kwKACB2gHeNJ9TbpLDe8rROHudKMyI\n2Xfvat2701XfYu7Ke2q1NC6+BwzhsaNCl5bRHngjXP9MPLlu4qxbqD1s3Nd6L3OD27cV+4l6I86p\nsa31lJjvJvk+dUaxJ8L4ECUcjSTWTwl4ReKlbt3WGNID/nx/7cn5qobnuw8/+C2H9Lp8+zhfuvC8\nl59kt1Efa5ixvd17OATqtC/1mEwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMUyf70o3JZDKZ\nTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyfSQ+nDxUgnwFwNZ+g3H2p6DJX2C7wQRuzGGJWGSy7YX\nonX4ZAR0DOyFaO0UArUxsyrL1pMfeTQIgiB4+69ksTaAh6mLlci2QA882x/ExHbi4FNQ9CCUHOwU\nygVgRQKgSt7paJ8q7HaPz+s5rLVU3y1aYuK8B+dkHf7zv/SJtHz+E8+n5WZDNkzHT59Ny1/+519L\nyxfeeCctl/cs4ku0JR/Ty5nWXNn37bhDeezBaEtXCtQOhoTwoG4ctyq64mafairVAfqoh/7Uw/Nt\nwa52iP5XLMmy7HFg2XIl2d8HEdAAIXy2kw2UUXkTtY1xV5aHN68LSbS5sWuJFqPSt4BVmS2rzdYL\ntHdXeb2p81wCVmsbLra0OLvZhiUbLHMXZmSfdu6Y7nVhBHvClvpcB/GIbY8u6QnbpAeDUAM2oYDn\ncK8hC9YW+ncAi/48LFXprN1qqR5ys7BCjHG/e5bGtYrue4jrYnNvADvXgP3x5pZsX+/dkgXeUeCM\nAvTFwGPP6fZ7xoNs2zvXnHUKRZygpw0Q0+BSCbN9/P1jEVEbxLnAOhX2iztbwmTcvH41Lb/+xq79\n6BXYKV69ov9fX5P1YbMp+8UBbMnH6Gh00KdVYqkEW/Cq4sjcgtrpwaPCFnbR9t94U5agPSDpfu/3\nfj8t//Pf/6dpeeOWrFnhEB5MUJe0YiwADUdcTew8oGxb2RHi6XAIe3EcaEwbWjCN9vFiBSAIhj3l\nU5ffAXoIzL+ZupBDITgIY8TQYqLjrK4KqfH299V3v/In/ywtf/VPheF6+vmPpeXPfVbYqY+/8Km0\nXKtPt0XxgHg35IdokgFTkCKt2RG6ZvBsaiiPxxyXgAo8cCgt14/I5r5QUzuPCrLBzV8TOm3zzq4N\nLm2yK23Z2BKBUp4Rrmb+lJ5XZVF9aNQQcqa/LYvdcUf9OAfr0bnDp9NyjIGlnNM4Pu5qrOL4PRkh\nL0U8IFJq2EOcAK6tPKu2HWGsioCCGgFFESFXZzoMN/IggZ063MiDYR/2vwH230NcdXq4b7SVIc5T\nApaMSJIhrKLbiAXrbZUPz2LOwzwW9d0faTvJTANgHpAWOeiDaZST0yPX6HXUrjY3ZC1cLKuCQ8fC\nm2OqZy6Gcr/bw3bmGhKaUlCA9e7s3hh19qjmkH3k1F1Y/Pb6iru37mucPdpSP54rKF7Oz6rPPXL6\nWFpu7ai/1upANsCOuoO21MDxB8hpc7HG2nKJbBzkc01d58UryuFWFxVXWK8VIAMSz/hHytnYwXzp\nOjlHo7UvMQH7eOfQwQOxr6hjjrAmcP++5hhl4GHngeg7BavoUgHoXDx75i25PDo7czFOLoAOHI+m\nO0d1kEXOnAXbsU8SZeexPqSTkzL5juPgpch0w/5Z2KkHwUhxMYPHG+qkb1/U9i++oWO+vYXxHYc5\nMKftP/WkjvPCCzov6KluEHKQWdmLRsTmuSk+0VTYn+Xg/x/iWs+lq4pT/+C/VN1cv66B/D/4Lcxp\nD2evoe3cAZL1zA/lMn+oOgrUfQ1zteZED5i4mnxeawZjrLn0EPsLyEW396Fv1wAAIABJREFU0C/+\n6HVt/1sLGncXVpQ0JYilbJPOlH2vxRWALh1hDjJBOZ9wjqp7GnGdwGMrHwND+LVvX03Lly9rPvqF\nT3wyLT+R07g1xNzn+EHFeyJwvnXx9bQ8O6PcfDJSHb934xquSGP8BEy6KMweC9ttIESQaS4tA5uA\n9axOR3VSxNjF4WR2b62qhud9F/nGLMbuwUDPMo/zTJB/FYEOmAAvdX2E9X3E4VwE3A/GyCpQHpOX\nVPfJHV18PINEdgrFtTzmLiNsJ+q7VATyYqj9Q88QNSHWCJMW4hsS5EadNvIq5CAzQHOPBrv9OMzp\neGcOKOct4P3Gt1/S9TbuCLVxKjqfln+tpnbynde+k5abY6BL2+pP7T7Qr+i813dUCU+fUO61fEj9\nbOeuYlCzhbWYsupgiLXkKuYEBw4c0D6YmBGpQSyUgz9/yAV9jkvE1e6fy8HpeZSL1J/OHDyeltfr\nqtfWXV3vTVBXxzHXGdD+KkCM11QOgeCZr6it9LcUTzdz052j9lqIr2D+Lq4qyVo6oPKda7q3gweB\ncToGbNltzS9vvatyawfrmFgz4LrFJMjO2/hHvrDbPu/EinNvAuM2wbr+0k2t+eSqip3jxRNpOQIy\ncnT1qj47q3nkpZs30/KhFfWz77wlFNQ/+oqQijfWtAb01k3N+b77qpDzv/l3fi0t/+qv/Xpa/r0/\n+L/SMjHnfYwz40l2u4o8ufoEI/4A62kjIMKGyCEG6GttrCX198olvLvc6mqseuPO99JyN38/LfdG\nakNd4OiZs+fxPrlcIaZH2/tAlPUxFhTBpY0j1Flf7TXKPRzS5kOXBxeVBJ55ofPRD94nh/nf+qZy\nmWIZMe3/Ye89g2VJz/u+7gk9eU5ON+e9d/MuFrsAiLAAFlgSRCAFUDYJSrTIsukiXaJFS2WVzQ9W\nWS6XJZdcJZYIJog5iCREAARARO4KC+wibLp7N9ycz7knnzN5pie0P8w5/f81MWPupcmtIev5f8F7\ne3s6vPF5nz74/xADx4Ebi34eJtar3x+WloSXWkHfL+QHxyKMja5cvRKWT528IywfPnQoLMciTHhc\n53XsyurIvzSQj200tCY0auon+bTeu4K8j+fp+HYVedqenq2AXH3MHfytIzLFMbeG/zBW1HXmZvVN\noQTEVW9njQwiOGfmdrDHjnzQQl8ZgiJ7PWs378u122UOMvI3Bvptd8jfYgyTOd2YTCaTyWQymUwm\nk8lkMplMJpPJZDKZTCaTyWQymUy3KfujG5PJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT6Tb1\nhuKlErCTjCUb+C9AMMSJoIJVGmxUabsJZycnBgsp2n938I80Lchhc097IT7D7MG+7f/6omymllZk\nP0VCTgz+Yi7+nsmL4SQiPRzaA8PmCtZZPbxrlDSFF+TlabcEa8qkLzuydXiP7s3L7uzUAdlAffeq\nrPRasD9Nw+bt2LTq8mMffSQsHzq+Nyx/6nc/HZZfuCS00EOPyHprHMSJSTm9ObUdK9IckDa1bdm/\nxQY72UatliPIlYGHIxahHiwdk2hPH5bNAawLXVj6ZzCcPFf1OoqiRTvbt4N3a3fUZ154TX0+n1N7\nLByW7eX0hJBhbhJ283F4aMOmzOkAg9SV9Vk8oTbIZFWPuwiaiF0d3gPkCacNu77FdfWZlZLmnRa8\nTV1Y6RJzQfvC89t63mevbYXlg/PqwOMFdeB8SvdtArPk49kif/WIDk2rNBcD3wN+zwOvogZcGF/F\nG/J3lf4QtE9zS/aRZdgqH9rTb0Na4NVbuicRCrkUrF6BmqoBp0AsX9SHuje4zHkQZTeClCJqKmpq\nOMpiXbA/83gEqTAEQRUErKNg4DnEMdRhQ/jii7ITvXxRtqGvvPRCWH766efD8la5b20YWW/YRsHg\nOWVYq/B5I/g1WCKur2tNil25rud6RjagfsR6dLCF7+WLsoD0sNamIs+g8xN4ajqct4cgIaI4E4xp\n4t0icxUHO2yBPc0ljEl2GzTAXJrA+rS2DatSLEOZpOqjVJIXcTum+1ReOBuWF25ozi+mYTU+LXRR\nrqC5PR3X3Porv/TvwvI3vvlkWP75f/ELuv68rCZHRXHUoxdnf1Zdp+KwdCcGAhNpGvNS0OPY1XEP\nuK/s/P367bywT25Ka0scNyscUrzV6vbHLt2fu7DPTuWErprZeyws52aEhWo11B+qFzTmN7/7OT3v\nQbVX+g5ZjafzsmPuTsnC290WjyOWljWrCwtmt4WB1lb/6cFy2AdyKV1ErOaxXnWZyLqBOaDd1Umb\nZViXYi30gKvlZaq+1rRMVueUduzcU4wnaTfNuZqW4gHnFJ1/c1vPlcWQT3uIM1OM0XROChizDmxi\nOXXEMEdPjo/2/+eiA/vlWlVWulcw91drilGnZ6bCMveCRG3EE2rHLvaUtJL3YePPdYyoiyjaRfVe\n2JkP5xdkid9FI9WA8qPN8HZVseL5CxfC8tFjOqcFRGIM80shr311u4X4tq5rlnH9jS2MdcSlszPA\nZWBtKeL6DaC9yhWVV3FNIpSIfctmNQcQY1sDzqvpM0bk/hz7fyyXbcSUyWS/o0faJmI5DHRjV31r\ne0uxfBs4rDsOah+7MK05jniNGGzEOQcRNUW8BJHZCfw2CMChG0UNwUgNoZtG0N1R/os78HhAXNRg\nOtjw+8YGXzPcRHGDMww1xeth/n5BNBnnf/pzHT9fASJxyP6Cl/yTM3qwf3JN88g/+28xry8QLzUE\nfcWMnbpqpL659XHjjEUHP9vfR22X1T6//Gsa682GKvCn/0e1SRt5nF//hI5/4pf/tp7wr68p4FPm\neprX133MRRhPSeZIEly3sFcCSd1FvnIlUH197mmd9P33a+9Y1HbAiaD0Iqj7/v+mPK0BKeTI6r7y\nq9m0kOXdABgKX/nDFnLD3335alj+1ktCBP/ZEy+G5UXkb59/Tvvbf/vz/0NYnssDT4H1ZmFa8fOD\nyN2MTyqWTsSFk/zG078dlmMJPf+UTnF8xDa9FtCJ2B/M7NcAT0TQiGqfIvBLPKcK1EpyJ+bh1FcB\nU3VyUrk65hyIS/LI12UOG/HUGnJlbox7U5WR3nVSW0AcY90P8H7BNr8TjJ5SnvowcesBcGl1xDdj\nSQXjiRjHCpBaRGLinC7iiF5S9Z5KqVYL04+F5bekhTlr+4qfm/WVnWso5ihV9IzffUp9c3lJbTpf\nQC4mpTzhBiaPVE1jNJ8VCiPtCoe63gQGD/kJFximW1vK9fgruE4dyF3kjGMt4TVqRe0DephvinW1\nT7lCJN7gOSuBvn3y5Mmw/PLLLw88/29aM5OaWB96QPvttXXNvb/+HaG+j524Kyzn8VGli77VZU4x\np34zWdS+/cVzmh+vXhZy6NhR5fpHUXMLautcSnPnwkH1hzZiu2JOc87UnOqL39yIVXHQ9661sDcl\nEjASYxFtS9wxvlPu7HFWNjRuqsir1zBf5DG/tLaw7i8qX5MA6vvwMa1PR69rXfyDP/7dsPwE9js3\nbinftwysGDE9ROJeAb7q3/+a1rztiuaao8eFofuX/1T9eXFJ6/GffP5LYblU1n2zGeDDY9zTqdzw\nkQvpqR1crKOZNOKMJnMK/fkmjv1BMq95JAi0p00gL9Rt6Nq9Dr+7DJ47OIe30W/KJWCecZ3JIvBV\nTc3R1ZqeLdYY8f0i48Ch+47Bu5DIty/mz7mB6SEPUdJYyOTmcD77LfN6g/Ptu+iregN5jXVhxTxP\ncSCvnUyqf1WQpzp34XxY3rOg32Zzyvvyuxb3cJwjKL+udZFz2fKynnN7Q+XzWKve92HF1RevXA3L\n5Yr6eSqt+aCQB14qNqQdoGi8r/fKACtHvNStZc0Bu1jTAPNLj7dBJ3KdYe03+JtXVEP6XORf/K4z\n5L0jH68ML2UymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMv2tyv7oxmQymUwmk8lkMplMJpPJ\nZDKZTCaTyWQymUwmk8lkuk29oXipJPgvQUy3JiahDXshWoHTz8cHliY2xBowBwvoOn3icX4S1pAu\n7FhpC9fdsXSbPbwvPJZ45RVdD5aIsSFWRxHKBWwne7DHD2BxFsBXqQfbVwf2+D1c1I1YHekZ0rBJ\nb8Cqex7Ino+8V7aFX33+aljerAGhAFel+2dVrz/6w28Oy7MHZL/9qd/8fFh+6oxs85JZ2Wod3ifr\nuymgKyY3ZVv5mUv9uq1vybIriqWhhtiHDS7+pTpD2we09hx4eSfeU3/Nu7I0zCSAT3tjh9ZtK5/W\n861sq5N1XFpRok9uq58/97La6P4HZWE6dVw27W5a1uxuDHipmOoo6MrWzG3BKjSm/jkxqT7T2xnH\nHVj80mqsVNN71Bsq3yrBaheubUS2eLBq6xK3hfmihfo4u67nvbWl8rG9smRLAbMUgwWlO8B2uX/c\nwfHB/ZxzKG0LfVgBp2Ap7sOqsgfkBF7XmURfcIBc8IFFmMj126QBLEAVqATWWSEDJBjsrH2iyzA3\nOV1YCMc1nmjR674eBBXWDtrOOcFgDNCoiG1NFAaRUrSOpnVf1HaTtqjqAyvLN8Py00D9nH5BSKmV\nlaWwfPnC5bC8uam5l22/2w8jNn6Yd5utyGyrEs7vdgevkUSGsQ6GEACcLi7K87kORCyEcR0fa6rP\n3w5ZOFivEYwbxlwSD5dL6MUabdhPR+wjiYLRcThIO3E8RHoHb5SDbeoEME81IFeCjua4vYhhxicK\nYfnajeWwnMJLlYD2asHm9MEH7wzLB08IKbgEHNVSUXHCmWe/GZYvX3gtLNOyeVSUiGDsJBd282lg\nuthGkYCB0xKwNDHY+cYLstps1GE3f/4rOgcI1GRR7eehPH6s32cYO9fLshhNZbUmzRx9m54lrjZq\nlNV29daqjq9pre/twVpckjWog7pJpMAy8tfDYtDBHA88QgAMFuePhq/xlCqonANeKoF26LSA+/AZ\nG+OaDViFEiWnJ3CSSaz3QDdl0voH8U6tVv/XqcgSqv+O5nZ6iB86iOu3Wlgj0W8m0kBAYrrANOJ4\niJ2JRmthyctlgcts6/x8crDV6qiotCU75evXhZQ6/cqlsOxhn9dGDJIAopQIALiORxAPfouW0bT6\nB6YKa3CUmEOUVb+cgJ14Gvb/2ZziG65VGWCPVzYUF1+9JNRUHSiljU3ZcI8BadpsyGq5DqTUdlXj\nbKuseX15A9iBjp55AfvI8byeud1mDKD3rmCtoJV612F/U+XngJraiKmdGSC0EdMOw17EIiiG/iD0\nPD1XNqt1rgnEchwTdArn59LqN3cc2h+W0+hnjDkDYKq4pncdTB6Ya5Ie0FTYf3SI2h1FIb4JBocu\nUQzSsOMR7NQQhNLQ43/1vSIO0LvXifqVO4OEJcwpbeic//BN/fZcBcjIgVeJiudUMbH/9tO6zpvu\n0cLx/o8QRTg4fo6kFYjkwvHIK8IWP4NteGq06dd/o6o3Ufe/r4aOASVeB17qj/6TxuIo4qW8pubs\nExmtA2d6ivOIe2aegHNjdK+JMnNpnuruSln19bUzQkW8/wHFmuN5XSfnCVfY2eHydoAsz3iKJ3Nx\nIY7irtazTkfvmkvqek+dkW3+v/oPXwjL3M+VyvptF7HxS+e0pn7hqSfD8o+/771hOVHWvN4u6J32\nzQoT0EN+4sqGcl9HT90TltPAP2ULRDSpGMP7dtEOKWDc48CMuMiPxRI6JxHBKajdmhf7mK2tW0KM\nzAPtOzExHpbLwA5z2swjkGXM5QO7msa6n0Ns4CH0T+OaKWJWsC66cfURJz4YszAqImqyjXiS+TBi\np7qILROoo06b45XYOx0nkrOFGCiDxTBdOKTj2Jz6DWGCtnfi6pSrtt5XVCOd/IDGwdKi9oUrT+ga\nLywqnlzGR4pTB3XNjYbGtJdSf+u0lDNOZYDExRq82dX13/r4Q2H5+refCstlInmaQEJW1CY3yupL\nRw4dCcsvviyEUj6vGPEE8hnr69q/zs3p+Ws1YFuBw0kDzdEAoiSf1zy3+9vNTSGzxsc1/iJ4eYyV\nHup48Zb23u2m7jNX1HUWZvS8ycgYArodh4mAmS6qPjZQJgJnFJUbVz1zbbuxpLoem9T7zB8S728T\nuKYexq4L/G4GiOdoHh4PwdT00Hz+93odEEG8dPOqnquuvdE7Dy/oONr98996LixfLAnV9NM/8aNh\n+eBJfeerflb5pddeU66niHXAQ24xgfgpnVYQuQUsza1VXecTv/mHYfmDj70jLP/kj30sLLdbGt+5\nrMbrJ//wU2F57x7hcKpVosf1PHXgpfw288Yqt5CPqVS0T93F9eXbQPV5XHuQpOkCC4jDced7c+I7\nT6Dnaqlv+chr1cuqv05b/axWr+M4vsch8dPid48RVDS/NgQ1FUR/EZaGpKWYwy9va2720QcK0zln\nkCL5/L8Cs0s0GHM+PaLGEVNPTQpf52ENuH5d312WVzRnHzmieYp/M8AK6QHxmkQOuAnEmI895eKi\nvt9c//aTYfnmuuLSclN96dCxw2F5Y13raCaNXFVWdRlF4iH/MuQjORFwScSuk5P6O4G5OY3vcqn/\nXrv7BMdxnBhymJEveKgnNxi8Tx5CvY4oGPovfisaPKEP+570emRONyaTyWQymUwmk8lkMplMJpPJ\nZDKZTCaTyWQymUwm023K/ujGZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWS6Tb2hDJyYRztT\n2EjDoivmyoqoC6shuBVF7PJiEevgwQgO2lG7QAP1Ip5F+keHltE7h9Ow2ZsHpqG8BTvOYQgL2G7G\nYPkYOET5AANDi+SIFdaQ/0ArL7x3ItB7FGAl/+H3yv70xrbsEa8tyroqiWs+NCeruY//4ANhee+d\nQkQ99emvheUvvSzrr23Y9s6lVPeFnK5/5YoQBsmM2v/wvr4N1+UVPSNtOyNoHlQH7ed6EXcoYEjQ\nb+jU1iVegi7XsNcuOrKMzcVl6RsnMm0IHmhUNDuhNr21KUu9Dh870sdUL6ubsr97+WWhaO59h2wc\n0wVgI2CH68RlXxax8YJdohMD2oxW9TuNebMEq/yGzh1DH9+Th3U7fDrb6BAVoC26eJYs5hfa5MEZ\n0GmgH15bl43x0X2yXc5n1B88zl+4TgfWswGeIenBthd2dxE0FSawLq6TRF91cU6tO7hPbjVwTdjf\n7snpvtP5fhsu4l2rQKJMAydTLKqNidS5uaU23lzTHNFrad6Jw96fc3LEHjCC/uE5xI7RO3W0x2IH\n6xMxUl2gvlygCGhjTATjyorsDL/1zJNh+S++/Odh+eVXZK39wP13heWxguY0H/aZgQsra2A62jtj\nJ4Gxyj7ourQrl3zO313O08HAMrqm0x3SjhGkQKRvEBc1WEMog84QN0qnyzWEZZ4Fm9E6xzTQTR3M\niQGsteOwdU2SKYN5q+v0z+niGq2mGm0NuDsHsUws0Hy3d7/sh6eAmmrUZYXKuePY8YNh+eBxrfvl\nDVnLL8xq7qscmg/Lm7C4bLdH2xY1BkQPy2lax3KMsn3RaXqIRRnzxbOyyG+7svN1qrLnDRpaR924\nfttdkr13LCNL0/Seux3HcZxEWu2YzCN2xjP6Lc3BPlA0jbIQY83utsqzsmB2MdcEFbV7DGylRBzj\nO4l+jb7ca8CeFPXq11D3sCQtTuqcRAIW10N4cwh7nQZwSljanDSwGwF+S7JJJqXfekB51JpE5gTf\nc3+P6A50G8ZWdQQTqzXVzXxe9ZdLce7Qb9nnUrC89ttAiWTZj2EpjjkoiHGtHT1duiiM1NnzV8Py\ntZuyw83Cmpo2tsUxjYXxccXoSXBVGKN3YZ3ew3rMxYV2vowLA/jgbm3394NcC1PY07TBLGNb1Jqy\nlw4Q06ysaFyurGtc1oBPrQIvVQcGsAUcFXGPJaCm4kQiRYiKev7tsuKzDmIS2jAXxmSrXK9p/ekh\nDuAc0IFtO+OcDgbpsPWYSgLvsPsuRD4kOHBgr5zEnDU7IwzC8f3ChxzcozXSi+xDEK9hzxehGnOZ\nQx+ijTiWFyc24hiNyP89K8pWQ5kM5mHn4HgEzTjs+q/nHI7FAb/lMeZT0EbVkv7Db4tg4Tx5azBu\n8v+PSkDZ/eYXdd+HH9HLThzFD17HOIgiudixVJzap+Pzc/oPtzSd/r1Xta72/PXfRoyEKmu1RjtG\nDYBeOdzSGuls6/jlDcV5bcR8+XHNaZkM9xpao5JgMBJ76KVVfqGpNcdLyjL+Aw8At+LqvulkP5fX\nC4jU0X93ES+3W1rnUknFyDVgtT7/1OmwvA78fA74Rp8bWaiNOfipM8LMfOC9Qq8Wq/S2xxyA3EYv\n0DpXayNmntQ5bcTkvazWmXxe71VAfc9l9NvEuOo1Q4xRXO1W7wE7xfwz9otrG320QRGoEi+je3K9\nzGRUf4xh4hggKe5LsS5+AHnir27pWY6B2JFFPJBg/h2xW4BcR4SrOoJinsPz9NzNLnCRqDv2SeYt\n2sCIuNhDEedZB5LFQZFoPCKvVza0p6xuPq3rBzvt3db+b5okla6+aZzYr338pQX12c88r1xTbL/a\n/fE7dJ37sg/qnOLesHxzSee7qKZYDw8/JrTn/Ls+GJbLNb346lNPhOVeDPgZ4Fm2t9Um2XHtvZ2k\nchXHTuihf+AH3heWv/QloXqOHtWC/OEPfzgsf+c73wnLe/Yodjxz5kxYfvzxx8PyLl7qF3/xFwf+\n97Ex5I+BdX3mO8LplSpqt5av9y4DV9MAYtyJIKsG7wtTwKI0sb4kgK/rdv6mIqC/Ha0s6v05zjiP\nbaypb0zPCvNSRm66iHl3fkHf+rZX1QbDUCMRNA4RgpgnI/P0zmU2b10Nj1Vn9Lw15C+2i1o/phbU\nLrWa1r+zFzUu//X/Izbmxz70gbD82KPCx7187lxYnlxQ/52eVZzw7ae+HpYfffj+sPzss8+G5Vcu\nCRlX2lb+6qlnvh2W56Y1fzz6tjeH5ccfe1dY/u6r58PyD/yQcFRPPflkWD79rMZcCajkHjaw3KO1\nmtpo1Bvq27t7+A4SRrEY+g1ylQXgL2dzKjebCp5rOJ/fnOpVrbutltqqhn21j/3/WksoolYT+XVc\nP+BH4hEU18UoLopjZci4GfJhN8A38uWlZZyO2DWtOZNiriJCdIo8W/++WcRGREcxv8RnJx7w+PHj\nYfm55zU+zp87G5b3LGhNzWYV70WQXCQKIx/k++q/9apizu3XtGnN3dI85baU+3rtrPLH99yjbz+t\nlvp8LqfzU8iVESMVneMGf0ePxyMJEF0f77tnTri8lR38lr+Ov73ocY7V1WKR7y64Czf07uBNvztk\nAx28DiBVBEAVwcPenneNOd2YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUy3KfujG5PJZDKZ\nTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT6Tb1huKltoA9oBWQ35O1ViEry7cAtok+LEETxKfg74Zi\nsKVs4Xw3wp8IBhWdOO2w4JO0a0EewHJ84ZAs525euj7w/m4GeAE8b4D37sAcqe3r+j1aTeL94rBb\nig9BWSWA6krDv/qjj8gesTAvC8O/ePJF3QvuTKfGdN+Pv+/esLzvIeGlLr7wSlj+o2/J1m4dlpEd\nVHIypzo58/Uvh+WXrsouMZnOheVMtv9APizZIxbeKkbqYyiJBmXamHeJqIEtViwFvARwP5muLMxi\nDpFmsHHsjrZF8Z4ZjbOXr8gSuA1EAUAOTgz1S7vGxUVhJqobssVLzco6z0nIrtEl0oCWb7AEjdjN\nAzu1e9sq+kMB3KaD47JDm8zqPiXYYi5XZM9GzNMYmBAdIqjY99D5aGO+VpGVZxv9ykvAvhMYDQ82\niG3UZQfzTioZR1n1RJxeu6X71mERh+nDKcBqnIiBNscFbAsnUZ93L6iPVCr9dljdoiW0rpGADbCH\ndu3RMs8BXmpT1nhdYL7iaVjKBeyBEH3sUHYD+hVz/I22LSrt7OLEyaC/0Qq2VJJ95/lzsrH90pc+\nF5a/+ZTshLlepj21U2lbbbDS0Phrwv4+AbtGWiDvPnO3oz4YwKazE7HCHIKRwtrmw1q4G0Gu8Z60\nX+R8PxjRxg46GMYY/ccww86IrSCxIkRkdjE/cmyhvonnyaeJeRl8M5KYUrB2H8v0T4o5qu+tCixS\nC7NheWpM7VdeFlosuKax1YQV79i4YoMTdxwOywt7ZT1L/EqlqjF96VVZtW+sy3Z1ckr2m7m81vdR\nlIuYKY/1n30SoWXEchT0mQgeycvKojRICNcUh6V+HPb+5J6ym8cxl3fqwvNVr37XcRzHSaDdExOy\n86bV7fqS7Hu9pNY8v6b2aqwTNQUf881bKif1TnEgYb0xvN++t4Tl7jXFGC4wAQHiXgfrZSGPumG8\njzi93WSbYC7BceKlMh5s3kFgS+K+CaChWh09QwPPSSjTbowN2o/jYlfVi1AKdJ/lhq4yltNxD3i5\nXEp138PaBmqlEyC2Ia4og77bBsqK8XNpK8LXHTldOC906Y1bQtTVgFDqoILLFdmLt2DFn8S8S5vc\nOMpcX4kjDhCLenHNwcQvERG6Ver381ab9uZEVwFDlkJPwkDfLGs/VCprfm3UtdYSm0sr9dU1jbN8\nVjbJDcSH1brqhmjBuWnZZk8UdHx9Q/FGvUUMFvBnGKP7FmQbTEf6BtqtiTL350nEuh3UFZHBxB6y\nQ++ukQnOpYgh4fAeQQdOjCnOvffkcRxXfURIdh20bcRmXvNFAshIN7JvwFjsYG51h0UfoyFQYaLO\nzbHB50TxUkOwU8NwUcPKmPdczNmR+CmJe+0e5z3Rda5c0zV+CUipT13RSfXe3+7e4VuX1a+//IQe\n9L86gPuSyEzkc8Rbe8hzos7G5nTOu9+hSjt9Fn3yb/l9R0nN5mivf8PUABovdkb7vANxWNu3FAs2\n68COAJ2VRI6hg31cOpMfWM4XFcc3a1oTyluKNacyiv/eca/6Uqtu1ezAAAAgAElEQVTTX9OCAOuH\nozmyx4EJDG6iq7XwynXll154TTgLogNi2EBFcD9N4Faga9eXwvKLVxQbL8zoPdIYc+m41pMkrn+k\nqOffAJrqHFAb6yvKFXeBSiC6iWTSTFZ7tzywTz3GIUkdT2WQO0W7ZXaQFl4aSDCUGVMHkfw49j8+\n8u/cemONXvKxd0Is+qAeBS3uOEkie5kLJMYhy1+MnlhHxDH4PnKYqCPGhYw/W4g5u8g5EkvTQOzF\nqT+Ghbfb0cZmdVM52Kde1N5/It5/hks39FxvPXFI10afqiwqr19Fbv5cXI06f+RAWH6mp73d8Q29\n0wN79c3kTY/847CcG9Ockk4DrTSpd9p09E6tac017ePC0sRcYWyqlxUzc4p/raJ4eOGdQlat+hqj\nX/3EJ8Iy2/aZZ54Jy4cPKy9CtMjTT2suLhaF6SCGZzfWZcz78svCgayva1//2GNCXZ1+WXiSegM5\nN+DDx/KK2RlOuugt/AbCWHsMse7KtnL6XeZXYwy0Rk+1GnLg2OM8cP89YbmDjfqVq1fCcjYNNLGr\nfj4xpjW1vk/9pASEbuuG9lwt5AmYpub+MpPT2JmYnN25PxAsC7pnF/u2xbrOuX5Bz75/HDhIfMdY\nWVNO57f+6NNhmX12P1A3h4FHS+U0FtNpPW8HKJ8T+zQWAwThpy/q2RaX1Zd+648+q2dbVo7pIx9Q\nP5+c1Lei6TldP5fXM3C9SuB7UqtDnLLKxCxTiR2kr+ti7mUSr6kxcefJH9Rx5BYuloTeCoDroxh7\nbOP7Sa2iudLHRNULdJ0ON9Bcj4PR3i9GRZ4Tjw/JykewU/gbANT7+obWtskJ9ecEv8Hz+kO+A7sD\n9t3EGnkeEazY3/c0LpMdxdf5jr6pTDTUx29944Ww/K0rWqsKaXwTiOv9spgj8lPKtbZvaX3Y19Ha\nnLy1GJY7yE/kgRw8/vYTYTmF79xTKb1XGmV/Xddv8tu2y1hN9ZMAojCGHEwcMQxj5ulpvdcucqtS\n1phgHm54eoTfCwe3tztsyzwUNTX4uPuXzhryH/5KjfYqajKZTCaTyWQymUwmk8lkMplMJpPJZDKZ\nTCaTyWQyjaDsj25MJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTKbb1BuKl6IVtA9bvK4Dy9GI\n5bKsJfnXQT34tiUTsNqMEelELBNsVGnvCAtMD1iPiKXXjvUYDYfyBVk/Te2RRVKnDMtQ2Eb1YEXV\nAC6n04GNZADLJthFBuDAxGGJnQALqsmHg7XUA8DDnHzng2H5D37/q2F5taZnyIO38/iDsoOcvl94\nqY3rspz63J9/NyzfrOl5MrANTQHL9Ni79Qy5WxfD8oW0bKTmDslS7tWzfQvZHmyjIvanRJUMw0tF\n/aRC0RK+DSwKEQ6ZAu3fgS/Y0vm0BQ0CYlRGGy+1d072l7k0cBI+kT6DsWzE3lSAVtpalv3v1JFV\nXIZABo4t9HPcK4D1fM+nTX+/TrMYt4cnZG82V4SlO8b/VE598GZJzzudBvoF9o+bsIhsABfV7gDD\nhFcqN1RntDKMYGnQP4ma6gBL46GPcQwl4OfbQvuUNoRcqAM9EIf9WwF+xXFYyrGZx1EPd83D+hKI\nvFd2LDTZ9vOwtYzHBnusFTJ6gGJW5SqwNL22rDppP+2i7AzBCUXKAKIFXNpokTrwKUdHkTkNGIWz\nZ4Xy+5Vf+vdheW1N9p1TM7IELeZkEUzGSYA+troqu9Q2xhntuhuYe3uw8twdum3YYsbZFMA60I7a\nx7j0wU/q0l2cloEOrSYHswUjZoCRBh7iMRhxBsR6MsTWMnLbYIhVJs7vYS2vAW8TwBbcw9yXjrE/\n02ZU18llVPe7zZBEf8/GNFa6PlA+QILNz6p/0J6UttgPv+2RsHzH3SfD8uXzl8JyZVmW7AePygp3\n9Zbm/I2SUET3PXJXWD5y9JgzysrAzTxO3mbkz9MH9+EE7PoTWSAVYbkf8TbFvBTndNVlP9RxN0HG\nB9q73bc0ba4A6bitNT05NqdzPVlQl5pYBDAAE7CRzoxpju/FtcZ0EDOlUupXyZSuH4/reFCUJXdn\nW3FCvaH3yE6ojyfRDjGiaIGOasJuudvRM9ebxN6gDYmiwbrIUK3RAOrPY7yt49kEY4L+Oe6QuaAL\na/mNKvYhmDymi7L6jycQQ6Jvce7ron9wzsqk8Fs2LeasCBrNG+3/z8X6puaxZptrO9oFY45ji4hL\nYtSIHuLaQqt/xu7EQbmIyRivdiK40P5zrqxpbeU4z2RpwUtEMOLPLVkCV2GHnkP8xHFTbyheJq6U\n1vA+9pq0SWa8QXQpy1wjfdidx2Kq42pVc08aNsMTE9of+9h75xCfMKZMAaPRwHutA1fYaAx+x/B5\n3cHtms3oudJoy+P7Zau+Z1ZzNUNaIogTmKxj8cFMJeI4+IxeikgzxgZvbCrmtsXHiyClgiHnkD07\n5ByWh6GpeA6pYciFRM7nPLz7nOgPLW07nN8AUuqyXK2dj53EOo5rv7qqe760pjatdyMR6G2piT3l\nE8+pj/3wx5CbmsAPhrTDUIIu5sQY1tSP4vqf+7Iq9vyVwVb8ptHR9RXF37Ul5eNm08CIpIBuAt6Q\nOOB4DGtRjKgp4BaQC/WBXtgABsUHtvoTq8h1ljR/713o7/ELBaE7vITmeiISczmtcwGwhU+dfjEs\nrwGdk0XQToxHmzFDBJsUFp2NLV3niSeEitg3q/xYNq/nzOR0L2I6xoE4OJzXmlc4cL/u1dJv623l\nbvyu4hy/RbQE6hLrdxeYhU5H62KpOzj/eGAnB1skeosIJ+5de9yTE0EMtBHWLRd72ot1nTMWYx/C\nXoFokDhz5FjHkSMYdaRNtO50PILJxHjy0UYJhzkDtU0D/dbDhN/D+XXivvB9g+3U7an85ju1B7zr\nZD/Hfg24syefV3lhTH2qWtH9n7uJfKmLXN6K9i8vr+nZlzbPheXve8dHw/Ldp4STiSjyHUP4uLyr\nMbG+fCMsV5o67mLMdePKPRDtkksqz/j2uzS+l87rfGJpp4D1uHJFyBx+tzl/Xki61VXlPw4dOhSW\nNzZUn4uLfQwI+3se6JzLl4XUTQFN/tB9yptwL7S+pnmEoU/KU5sQxd5LqM7iOQVDZXxEamKNSAGv\nsm9e9TGKSiG+b9ew9gBTxNzGzQ2to/ms5sMMYsutTeVXHaDRxw/P6DjWhJXL2vf5+C6QQFuOT2qP\ncfyuu/v3xJw3sfeOsNyqKTD14sqtfPs5IJzW1ZfGx5Vn8ZLKs2yUsU6Utd7cWFQdvHJOfTmO76pd\nxglZXWcsifpOqT6K4+pXWxvC3iyv6rfffPalsHzPSfXtSxeEwfu93/jVsLwKfE4e6J3H3qW5pFHT\ne33xSX3jZPz/6Nvfq/Mb/fOvLSquaJS01o9PPByWa4H60PVVPft2Xe3Ti+T2kBPAvrdRH7y+93rM\nBUix+OD1ZWi8PyoalofHS/BbBJFhkVQayg1iUoHYi81pXBLxzMQ9c0aMh/nN1t/5Nr9yU3Pwtz//\nJ2E5UVfMu3bxtbB8vaJ1pfakrn0qoec9kAEGUEubk8pp3ski90dcd0dD3enUkMtD7azhQ3cZv52b\nUt087OJC3xTy8P1t5Yr9murp8i/rnFUcv9XC96Gk1pkM0HD7jx4MyweP6xvB2F6N9WxG+eEDe/f3\n3wPfpHzGnJFvfoO/DwXD+pw7eFz2+O2HP+U3p8jxwXuI2x2Kox3Rmkwmk8lkMplMJpPJZDKZTCaT\nyWQymUwmk8lkMplMIyj7oxuTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk+k29YZ6Gic9WSkF\nLdkFdbqygmv5susihoVW3LG4rpNIyP6OdqJd2Fj59FQfYgZEq+cs7LHrjR2rNFg2xWCFVZyQRdJ2\nQ9ZIHSClaJPUbgEp1dE1ifSIwSIrntI5JyZ0zl5PlpXP39gOy7QLf+/jbwnLL1yQjdyZy7LJ6sIn\n6b2H9S53vO2hsAz3WGf5nLBQr6wDAwQLNx+WyWngpbJJvftWSRZ0N5f1/I242nP32eB8S1KKQ/On\niH1s5JQhyBDY0AZEm8BPiraP9YretVRRHyWKLGphO9r+b3vn5Vk9XVSdb5QHW/KyrrtAUWyUVBcX\nz8qW7fA9QpMkaMEOLAUrnjZevQ7GC21Ud4bdRIr+5rCrwzUSaN/JPOYL/LQGjBWITI4fsVfGM9LW\nDDdbq+qdNjZVH8XsYHwVMXEZD/VKF3Y8Zw/1tA3L5rV1jZuVbVncHZ6UNeThWdkeN1pEdXG86Blq\nTZ3z4vXq95w/nlFFBRGbN8yJsNvkOVnM4bduaQ7auPpyWN6Tl11dENc87AZcqtDmkTbBQHY5qEd7\nLCbgYV+HheJXvvq5sPw7v/HJsHzzhubyI0eFAbx1TVbZ25uynSVioTgmW90OsG/E6uVSmgOIJ0pg\n3Ld3rhlkZcfZxrmuq/7YIqIN53QiczkRYFhrncH9lIq07utqa9pa0kpwsG0h/zSZ/byLSSPgNYHd\ncHFOs4c1vg1cFGwlU7DlTgRYXwONhd1mYFwRxzyY7slmtYfx7KLtXcRK+/bL7pY4haXrsnJOpDQu\nt6/p+iuLYjRkYGl/+NQDYfmHf/SnwnIStscjKdRjm8hPYGm6RB4C3ZOEXWY8A7wUMVKwde+hz7dh\nl5pMqa250LSBJqWL6u41k1hbOx3N3dUbskiuAc/US6s/kOcU9GAvndH75cfVT3KTsivP5BVLJFKy\nM42TZ7EgbFlpUTan1bbsdlMI7hrAgNCKu9PC2ox3KYOsBTdfp5iDTSvi7XQK2A3g3VJASiHMc9LO\nYHvT3SkDLtwO6bRN3HOtpUabzQE5AwRWNom9EN7DI2IS10ymGFfo/DbsimnN2u3oGYrqoiOpegSv\nNRgZlMKesg1mJrZBkRiSKD0qjvHNvWCX8z1pc9gDxlHxyZ3jqaLGwcSY1kjGwk3sBUvAbTZbREep\nE3Bl29zWuNksa7xm0xpzjGO5J8sB+ZlEvyI+lUiu6QnZmtfr6p8+OnoTsfQ1xCeex3sBYZIY3IZd\nWPcTeRnHJjCJZ2NbpXbWHw9zWSqF2Kqmet0Pq/w7gDT20Jbttt6JKAzmAuIc+Ng8cq/gYU/LCCaK\ns3RGW8Qf8v+qNaw8DDs1BBcVYZDSIRx1HUFZRco4n/v63Wvivyc0LJ1/8pjOnZjU9QraMkUarFTR\nC372aZX/7VPYD7foAX97eumangGkZufAfpw0rP4inuysG8axOn74fj3zz/60LvoL/7uOV2qRAN00\nIrrygrDuPvApQUUI2HvmlLu6ntce0UM8VEhrft1sYF/G+Q3YWrcHnAv2KbT99zBPn/6CMAzFe/ux\n8ZH33B0eS8U0L66uCm8zUVD8e6skrMTKqvIdxCUypu5iDWOeqjeEzUBUTHld+dsW4rB2Re+01VV9\nrGENIx7Zy2qPk5g8E5YPvvvnwvJkUrF0u6XgtefqGRJJ7JtxAx97Nx+xAnPhjPlyO+jHxoomFU4R\nrIMEsEhbW8oh9BBQdXBOAn1l88XPh+VVYFEKWAvvxnt4zN8eUn/lvsEdcewi49IggjRAXo9IDSIl\nmU9hzhGBZjs2OL9J9GYGObk2cqf7ZjUuFpDvPXu9n5t58bKuce6m4qFx4Jwmge3dn9LC+O5jWpTO\nlnT+zTWxMw7sxRhN6F7DxNx7w9c/pjDOJjY111yrKg9RcHQ8hhi/21FcPetobL3zqOrj60uD40nG\nrkTJsc2JlGIucv9+1c+b3vSmsLywsOA4juN85jOfGXhtollbvurs6EFgWhF3J7APyWLeIS6wADxe\n2UFeLq9nj6dVH7EGcK9pxO/J0R6LpLTnx5SL2dhUu/ewR3TaqKOxA2F5/rDaK4N66QR34Hx961hM\nn9UzYI9TXUddY+8Rx3fNxE6+YfPWVT3vRc2d7aT60Xp6NiyXA+RrHLXvTx29U+fENX//yre/EZYr\nDXy/avN7gmIJF99Y5/ad0LOtCUXTTOuczS2tzSUkY3rYFASO6r5W17hsYQ2bx15z8YpwVxXMd8Ux\nJS6qG+rDhxfmw3LGU/2MTanefvSH/2v9ttLvF7/8+3p24uXarvpEL6Fc2SbQzlXETR7qLIZNUgt9\nzm9yThy8T+1GUk1Yd/HNptf96+8z3gjFgsF7214kx84yNAQTVK0gHsFimMkhr808PJ6hTRRhVX2m\nBExUqtJfT5rIs36F33SRG7hjTMf/8RG1xZv36p7jSH8iLHUabV2nwRxKoLl2u65+tbyNOD2G+QvX\n9DXVOEubeoY7ZjDvXNC+YT6t6xxV6BXZXvJ7Sxt74jKW8utVnfOF84rV//jZ02F5ckzv9dBRxb33\n3q1vxLm9dzmO4zh7ptWWpbLau1PDuCEiCnHu0BERDO5nkU9FQ75FR/7Fjoy+dbvf+s3pxmQymUwm\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkuk3ZH92YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQy\nmUy3qTfULy7owSIIVk0J2Pg3O7R0lq2SB3RBl9ZV+LuhDmw3m7Dr7wY0HpKNUAwem64LW1LYgXW7\n7e+5RiolG7GpWdklbdyUjX8LWIcANumJrmzEEjFdx4vDUjNiO63n3YR18R5Yap3wNnT+vGz/x+6R\nHd43/80fhOVaoGe4Z1J1/74PPhqW50/KUm7zVVlwff47so8s0f4e7RnD8586KYu2PTH94MaqrKPK\nvt7r0LTs5To77ewDleAOQUrRBorW3hE0CJ2iYEPt0oqfqIGkrB636vLvqsFeLhhtl7eh2juvfnsQ\nVsRXlvWenYiFHWwCUb8V2CaeeUX2xo+8S1a2E8B0Rby7ukBZEd8Ge9AMLDN3z5jOatwkYTMewSfB\nli4PO/2jM/IXf2FR9qTVpsYZik4bln45zJZw5HW2UQcXb8rK8sQe9WW/o2dLwC41A/vOKqz720Ti\nEXeAvnrmhp7/FvBnRyZgKzuh+tvYVnsubchCb7Wql6l2Btu1Zb3+nMER5+NZ0lnNXzGMrQ6ul6QV\n8bbsYJevylp6z6m7wrIb4+BVMeCgI28uABbJoTX6aOOlyiX1mT/8g98Ky0987SthuVKWBebcDLz+\n2lrnqmXVKdEFswtaEybGMdYvyw6Qdo1d2H53YLvXBtMm2LHS7GFNT7hAKsbU71rAR3YGTykOQ5G4\nQ8RdF2Wd7UbadAiCarDbcxRJh3fiukEEXBw/JjomCWxBOy6L16glIV4SmIlGFxbubaw/nBtiqjcv\noM17v65awFUR3cF5lZiQeg1WywuyXD16pyxpz70qS9f5OVka5yd0fg3z1I3rmuff+uj7w/JPfuwn\nwvLMnCxyue6OomKwAk+gDxBZ1Olpfs2OKUbI5GVp7KLdY0DKEI3D/tYmRgZ9zAMuhrbEHVjyBjtx\nrId1k1i4tou+01Qs1dwW4s+bUFsX9wi3kgLuLzuuczI5zUFeWnNKAjFTDHb3jrug4qTi0s6yEGaV\nCuyNMa9w0giwHrfrKq+WMW6SsGyFTflYVseJZUomiffDbX0ghDw9Twvj1dnpz0Q7NeRk6yxXde0c\nMHJpIKWSgW4aIBaORxAqxFAy1ibuDogIPKLf0jmFSSLTRvv/c5HEu/mYgxkzEdfURrxK7EIFnLBU\nVv2TGCLGGhyvCTRsxMq2R8Sp6j2T719zalq25AFiFM6dWxXYjyN2ZXjThB01EcScI6qIP5vEr0Vs\neNln0a+TRB/p/DXgKWN4IO5NieyIoZ6a2O9u4DrEfRCNuFXRgGE9NLiHji7+oVgnheL4zrOo/WIY\nEzOT2jPfdfxQWC7mFadH9pHERDIWhXV/j5hWPCP7DWMYJzYYzxpgzR5JEWUUwUi9juNJNhhyLrhm\nwPNJIx6CkYpgkyLn45zdewFdBWKtc2gcAw3nDHuuiRmVf0whtXNtSy/+K89jjrjNbcdyWT84I2KB\nc+BNA052nOH1HUF1ob55PtbCD31cfe/seb38r/8O45+/o4mOv4d6sgScE5q67mi+zN+QlfyBrGL6\nDuYuF3vHKcRwN4FJbWYV53WyOgfkW6cdE74qM6Xy+mXlJU9v9JGixZlj4bHjb1a50dEa4CcUc/rA\nOU3NKIZstoSkjtI+9Q8fQTvXqshaQpv4mPZwuamDYTmOPYvf1D7c6QLthf1ZD17/9W3tsR3kSA7u\nUz35PdRZU9eZzStu8VygvvEuXawbjE8CTD7VS/2639jWWtzGuSXkDXI55cfW15SXmJxUPON5iKGw\n/nq+sCLNCjFZas+0i98Cg+5+QHvEHubooDPa804UEYkcJsYZ4wUuCUSGscxrdsgti7QvEFRIRlbq\nqvccUGXr28rbf/Lz/d9eCd4cHuvNa3+/fEVoiA8n1Td+5Nh9YflCV338289+JywvzGtM/MxPCil8\n5IiuPxRaiMrJeppgUgk9Q7Wofli4cjEsZ7LKbbSB3iGW1A/UDzMJYLwdPfPamr7hEB1FXbkiPHIE\nW4e5+OJFPdvGhubB7e3tyP86juM8/fTTYXkTSLcLF5RPX1q6GZaJeG1hfzAxpjE0NqFxnMoDrYLx\nt7aqNvSaqpulJfWbakl1k0uPNhrcX9X808a8/uBHFUBVgT7aKKnuDhxQX83l9G2khnmMe4Bp4Kh8\nH/sX4LI38H3BR65ialb5lZnZnesAE5kFGutmS/cplYE1Qv9536Ta/eP7tW6dXVY/+VRK4495ez47\n92T8hlcrqw7iPfWBYhZBMPY4PX7XQTvwWwDnwRQwbj/yvkfD8oUr+i7wpW89G5bf/PZ3heVHH7g3\nLF95STjLmXnVyeMf+lhYHp/BPLSDLjx533t0DYztJvafbaKgt1RnsRawiMinBMgP8Dp+HXkf5MiT\nKcYt3YFll986Rn2/SMxv5DD21M7gtZPqIg9YqWg8ETGdTmuu84DPy2ItvPmEMJ93Vm+F5d6q4qpd\n1NN1PldG68cH96vtfkKfx52FAnIiePYSknANjH+io26V9YtN5G4C7JN7QI/5aezJysgrlZAfRM6z\n0NMcsLKBfoXU7D6lRZw886LYOyJ0daaxdzw2ofMfUHrY+bzoe84nb+i+f/od1f1rF4Qh/+8f+Kbj\nOI5zH3LMpabm4UttzYk94Eedwd0m0umC6D8Gn+QOPky5Qz8o3V4edbSzriaTyWQymUwmk8lkMplM\nJpPJZDKZTCaTyWQymUwm0wjK/ujGZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWS6Tb2xeCn4\n9nZ7sOPswsIbBk09l+foty1YsHdoLUzrVFhM05YrHgeSAbbytBylTfmuBRZxAfGkrpErytoqAfu5\nDmzEEi7xArQuT+L4YHwPbX03iBLJyd5oviDLwJPvejAsX16WVeHimqy5crBB+9DdsmE7dvK4ngFW\nc9/+xoth+cya7Kp8OisC1ZXPyf7pXW89FZbHAtlE3mipHrpsH/wdWHoHrVCt0R4eOKEqLLjotkZ0\nVARLQ6tlWHsDLRYAL9Vs6V3rtb/7SClqbm4yLB87KEuv0xdlybYCflgXdrV030qgrvkXfF3Y+7tD\nK4ysFo2pREFjamaPPL13nQoLGWLZYIkPK8wycB1eWv3r6AxQVxhzry6rj9WIg4Pv2HxW5+8Ba+rS\nJhBby3oGD/NLFs8cd9lv9ZwdWAkGQPK0UbOJhK7Tw/P7sLmnzfDqut5rFfUTYD4bx/xRRJN0YGHY\n9PvPFkN97JmUHfPclOrVhxVjPDIWMf4w5jdXhTnp1WT/GS9ieSJpisghergDLxUtj/aA/T//9S+E\n5eeflY3m0eOy3z51h+bp107LWnttRda1HE8JTHxFtO/idVn6bcLyMEBfItaIiI8O1s7dMUIMTAcM\nghbapevCRpoYJCgekN8D73LiBB2uy4ORUsHQtubsxGsCPcC5DGXSEYjpSBPT4WgOaCWFq6C1YWQt\nQnxSw7iP4fxCXu1WyGHc78wZLSCqPE/XG4NF4wbG1uysjp+6V1bRyRTQWMBfXLsoe+O4J5v0PQcO\nheVDd749LL//B34oLM/vkc1tFEky1Fx6JNRDf2+2EZOh/yTzWp9y07LA9PIqu7CX9WGL2qhhbgQ6\nKoFyFza87VYT5wC1iLG4awXsEtmK/pjO6Nw2htYuOtVxHMffFiYsDhwdkVKpDKx0IzhRrG2wm3eB\nU3OBxhrfp5iws6r5rleXnXe7hvWsrTLCNgdERScV47hXf0MY4nSx9HMP0fQ1dtBUThY41HpL10xw\n17RzuAMOSQNdvNLRe89naLsM1BWtZPEamazuWakTMaly0cOcj4lqG3azqZzOz+ZVvjXYPX1kxDmt\nBuQv488GGtjD2lLBnmEDVtzjU8JlpIAs7iAOawLx0EY5m8beDXWdzmhcjo33bXCrVY1bPku5pk67\nXZYVMrFQtbp+uwnkWgdzUDGntSGb0XUavmqnjD0L8U8ZzDWbJdnyT07KwndzS3XWwj4ojTkoB/Qc\nbfbTYN20sI9sgN3mRva7YdFpd2BTTpwCzsnQ5h7H6/Xa9xzMA0V7/LhiqP17hSqJYR/OGCOCfyJa\nkx0Q6xlxVESARJCCfG+c4452iOo4sKO+fbzUYEQUkcKRTBSRUpHjg5FSkb3BIDRU5P64hjf4ekEE\npUVUKOZsdMEPvFXn/OEZlbd8dpS/Wg2s+1/+hn77vg/rBb0COgr3VnjHYAgKLODiiePZGR3/2X+p\na95Y1IU+/2XkP4Lbey/T36yuvo7qJ8qvW1EekPmMLPrzPLCj2bL2DH+BAcX1Jw7E0PxerZ2L15Q/\nKgCDUmr3j3/1N34nPFZ1Hte1p5EHcbXWr3pan2I9vUc6ybwC473BSCmew31eGnknv6l7NepCSGSQ\nu2EOOwbEQQJIt6CNfAbSEMyJTSBuI764B/zLSlPr9AzmqgLqJJHSRJTA+pNEnnk1188RtAsKgGtY\nl2ewL+R6euQoEFsJ5qqZW8e6DxR8FjH+PmztM1cVdHoPKsIFGkgAACAASURBVBZjPihYwQ9aoz3X\nTC0IDeZ5qv8O0GZNIDO5b+oCC0WMVAS1EUlvqc1y29qoxBLqJ+2u+u3MfvWl8clDYfnklX5MGVR1\nzEmJMeFndJ9xX+0VjOmcI1gA3/mwMFUbMcV41YZQUG3mNsGmi1JFsJfxsB+OCwkzhnGQOKAc9npC\ne9Y51OtxZzksJ8fmw/IrdfW9Rko55v3AvhHbNQx/QiWxMYwjv8O+kE732+TQQWGDmMIsFhWDT03p\nuRgexpP61x6wQU7dK2xzYhxonKz6Sq+tfOH+MdVZDu0/u1d5jNKS6mBhDnzNEVSsjRglpvnqtXOv\nhuVmU/2zUlVdXDr/XFieHle9bK0Jfx1PK09Wc1SnrTa+HVSRlOipDxy7UxikY6fuD8vpbL+9p/cc\nCo95RT177QYQu4gP31zQnP1jwL5lkeA5ib3UW7A3/rSr/FWxoHdKAS2zviHMWquud+1mtObFIt9S\nkfdBfj6GGCOT0ZhuYi187vQrYfmePcinYZ25500Ph+Wf++f/c1iOI8//wlkxWY+dvDssv/1R4aPi\n2DuW1vt73F0sseM4zgS+XS6vKFf+4ndVB5UVxSH5mHK9CFucBjHJJWCksSd3Otww8duIjvbwLarb\n0TmdEadLuUO4P5xGX885ccAIux3V43RB/fBgQvFWfE1lr6bvzY9MqD2urOia68gtLu40x6P79QD/\nSGGMc6eWGwfhW+Tb24Wyfnvmlo5fW1PZwwvOFtUHJvLIA+KcEpjIyaTyQQ1gpOJI4R9FnupEXu+K\nbYBzGvinq5oOnEcO6hlm88DQ6RQSWZ0E+i2Ihs4/PKWTzgGn9UUtx84iSK217f689dZJ4admUjr5\nC2u6+Ks9zc/NvGIDJ6F64nrJUdYbypFyh5QHK4JGex3nU+Z0YzKZTCaTyWQymUwmk8lkMplMJpPJ\nZDKZTCaTyWQy3absj25MJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTKbb1BuKl8rBlr9WlQGQ\n78syyYWlWA82Ze1gsH08bRmJd6LtUQA70ZQnW6o4LO9pRZqABXF7x9IrgM0VPe5jQMjEYMEZC2Dt\n7X4vCuAvq0cra1ht9vh+Hu3TZTH6ngnZo514WLZqn/z9L+g6sKa7e0x18I63yeousyCrpspLz4fl\nV6/Lhi+VgncxrB5pZ3vs2N6wfN9BWUxe/eLXw/ImbNY8T+3Qhu1/vdG3nEqkdZ+FY7J/W7wqK73q\nxmAryFiCXljE9AD9E4PNPPpcqSo7M7+J9qdF2pBy0Ls9y6k3WuPTsic8eVztdfgV4GeqQv104IHZ\nhp0abTQX5tTW2YLsKp0EfMdQv05CfdjBdRxcnxik3bGThEVrPgUcSFp9YKUsO7nNmixXK3UdnwZ2\n5wN3qe9HLObxLGPqJk4P9oFLuNfNqt7vCPpMDpZv7BvEDTRhJRiLq9yABV5aj+zsn9A/Lm+or9aA\nd9rCOEunNe7HxojZAhoDOIWldVkqTuT6v83gGlPwkyMWoNHUO01PyPdu75TKzabq7Pxrwti8ZUP2\ngIWC5rUIIoqYOPI42LeGnD+KevG7z4TledgV713QGI1jTToI7FT5uRfCMlGEXEOuX1L9Eplz+PCJ\nsHzzuvBBMdYdLbRph9nrtx/HZzsAiopVHqf/P9ZCWIMmfI3RLlAOrsu1UJeJtGikfQe3ddQSH7gH\nTNq05PY5f0cQA1zvYScMT/9MT+/SSMouOMKOIbIKdVKHRW4P90ozdir11+Nsgn0c8ycsyonZzOU1\n5j3aqsNqfH6PsBsvXL2ia6Z0/j/6mZ8Iy0dO3BOWE7CbZZv0Iiiw0ZaLda4DjE/P09w1Pqlx6brg\nTMBGOpHR+W5Ra2ELtvXthubJjg/EJuo6CFBGDJeElXl3BwOYQCzai3E9VTmFa7uuxrbfBL6noXgv\n6cGyGrFzAjETbYaJWKHJp4v5KwVr5PQs5jKgLdvkQgVcL3W4BXvVYgb7CdrZp1BneDTGaquwOU0A\nY9RBqNtoA+UGG+ZdTKmPvrLU0vjLxfDAuGc6Td94WKbDjrkD7G4VoVIeVrIJzEEdjLkY9ij5MV2n\n3FBfqNMKexSFtaWF+MKHVT1REcQ0LAO7WECFNRuqSOIAuD8iPoEuzlxCYjiHeKldlMDyujqVD3RV\nra5+vQL0J21vZyZ0vS200VZFMV65BqQG133iD4nnauhNKsB+cD965YZQAnOTWitaqG+/o/o7Aixt\nEuO70dLz5LKq+5tLg9+Fe0ff1zmJBPbqRNUxPkBo0d5ZO4Ou6jiFGHIcSC7GOH4T2FXMocQLeD3Y\nsKOtupEVTfclZi+GfhZBSnGfwfzCKIrTOv+vWkQZDUNNJYaUiZGKXBPzK85hiBO9jjP4nJ2yi+sF\nREoRRTUEURVBU0X+L2q6ziFRuZ29BeClNv760c7XX1LfuPCKXuquBXqvo264thEjxecflpLAmjN1\nSOWf/jlVxLPP6wbLa1hgTW+4aPXOror0hJPDvD6Jdp9CW2cxd3HYHMS+7CL2JpcZmwBjsXj1dFiO\nAbewgPxKvdvvz9WSLP+ffeY7YXnPMcV+28gHxlAudrUuLowj3tpCf+whBo/gfPWPHOLYIpBI11b1\nbO3uxbB850EgJDj8EHsERDvFkbfGnLF1S9b5tf1C3RyYUMtNAv9Zw5JwvoT9RE/3OgEcRxJxeBwL\no5+52b8/cJpZ7MmJC+A+udsGSoRxPdZOt62+Mj0t/MybPv7fheXH1vXed//ef9Iznke7jeH6R5VH\ndJPsmaOn+98rvHI6o/7+0osaE2ms+Z4HBDfiDjJFZueEwZyYVl7yysXzOt5Q/DQxrhhnE/nzc2tC\nGDVXta9PTfbb7G371AcLWeQD2+prs2MPhuUT73o0LOdyOuc+zBFE0rvgrVxfvBaWv/HNT4XlXRyr\n4zjOyUPKR200lHv8+g3hgdaBU+vNfF9Yfvrr+raQm1I/n7tD51cbL4blP/vPZ8LyZBoYJ36HGVKm\nmP9+51v1PMdn1G5PvyaE8vbOdy8PCPWlqvYB+w4K6XbqoXeqfP+dYfnA4SNhOYUYn9+2GI9H0FjI\npzHXkUaeL4YJoYPxzRzvKMqbEHZkYlx9G9usCPbXxTtPzyrv+kM/+LGwXANqcXVbY+4zn/mEjt9U\n7rQCXG8Le/YExv3a8lU9T6mf1/Pr2i/uGz8aljMYlyfruuCPH1TebYIxLZDhWeDo/kFeY/QJfKPI\nTmuu+eAP/YOw/O1nlZN+9umvhmV+y4wDyxvDXobfbTluTh09HJaXVoSvul7ieqaxW0I+7f43vyUs\nT05qzYsjJnnw7Y+G5edf0FwZdPVs21tqz6UbfcZOCe3R2BTSprGt/fD1yxd0T8RHbg74TayLdczt\npVINxzXuu+TKof46eF7m9Ls43kN5FBVB7gyz9hhG98E/0ingjpDLe8es+kZ3Rd839qbUNu8+od9e\nWtI1v7Wu65zFM3x4T38u/V8f0LGCh3pGMugccoafvaIXfGlL5VxM4+BNkzp+5zQwrdjDVZCOa6Fy\nUl1MYPguQcx8DvU3iVxCo6zrIKxyqjX99tkVnXMa53/wgMpH5nSD/fi0G6CtQJFykPJw3gwq4Zdx\nrwZ+29r5xpnEt84DyLO+NaPY/NXXNA/Hx5Tn8+a1djY8vWwENUWUa2RJH4adYvw5+PvN7X7VMKcb\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPpNmV/dGMymUwmk8lkMplMJpPJZDKZTCaTyWQy\nmUwmk8lkMt2m3lC8VDYr+8UurOpqsNfrwE7LT8AGLUHLKdjiw/6uB/4E7b89oIRSadmXxXHNRlVW\nbHy2XdtH4ogSsCv2OrAVzeja9aSs4NyI09Zgj1/aTtNuO4BlWQ/vegu+pWdhM3XQkV1jD9ibPVk9\n28feJBum+Xe+Iyx3xmWJePryp8PyKrAiCVg+0eoqBk/md71DlpSnDgpddBpumlX8tljQs937gLya\nz6/0bUk3gTuYflBWmrlTapONW7CNz6hN5o/JAr24BxbhsIFOw5Zx69xWWP78b8oW0nFlaZWAnR+I\nVRFr917n9iyn3milxifD8rHjsqt88B5ZwV5b1TuvldSXfLxbGx5dedj4J2G578Tga+agEySBXkD/\nD2CRWAXia9eOj+MpnVa/82q6djEN7A36WgX2/iWil1LqSxM59ccMxnoK7es39Fv2Af4Zo4cH7cKq\nvtlSnZWqOk6reqIwiPbqAlUwDbv8QxPqwxWgQsbSmENhhxzDvYiMqgNbV8ioToqZ/jmcP3mNW6uy\ng+1h/pwaUz/AtOZsVfUe7qqspctbGn/5A7BChVVtBB0VwfUNKcdowj16ouXdNLAOGytCvaWLGq9T\nUxpPh45p7G6ua55cuimbzDysgHs9jafFS+fCcht4m8BTv0oRYcQG3LENbTrqOy2MsyBGjAJwYHT3\nb6vPJGDTGxBHNMTRbzhQathZg48mYMPdg1Vp3B3cf2ip6sISOpbUuOj6WCs6GBdJ+TIGGMfEZXTA\nOSghJiEybhfjVa/KcjENm/RqRc915wPCRzo94PduXg3LeeCPrl7S8XhBvpDvevwfhuXDx2VtG4el\neQ/zVA8NF2MdB6NtURyZwNHWxUnVUSIlu/kExkoPaLAG5jEX1yF2pBPX+X4TXsQtoC+LGrsdR+f0\neohpC/05ows0iwPECkdEBJ2KtujByrdT1bP3mhijRdi+Y7xyHARY5yJoyAhuRWMlv6B4r76u+a7n\nX9VztmCXiuuPZXW8i7WZpMoM0KQxrH/bFazNDSAXcD6tU+ky2iTfYQdpewt2rbSNL6Q4DoB/Iv2L\n5Fq0T6lK338V8znsCfBOzaaeYWxcfY7O6OVt2Na6ox2jdiJ7Ilq9Dz6/CmzSrRXFFDMzWju3y5oz\nPewjiVhIwgrcRx8gJo+28pz36juovlZkX6pre8AlJIE3Ltc0/ri/3TOruWYb68FWGXMBUX6om3oD\nMTueJ6jopPFxYQtX14STHSsoDiEiinvjFDyEk4Cb1Oq6TqUGtAKC2tlJ7eM2tuTVHAciuoM1cnJK\n1vGpNPBbW4p52jtzWAYI5GxG5dVNWZqPFfROMbRlvIW9fVK/TWAO9zF4k4wNgPUhoiwSlXLgY90f\n9Rg1wrEZhpficb4mySTDUFNDcFTB6zjHGVKlwU5+J/BwboLoJfwO+7yh6KpIEwHNMK7fjmXxkBt/\nfQv4dYzRP/2CrnP0EZ2TLuAHQzBcke0R62/I3E801b3fpznjhz+mi/7ar2KMjrjN/d9H3YV2RNeL\nWMx76J+x17EP4tqWwYz1cAB0dqA5vo3YzsUgITL4MvDa8XQ/dpyJa2+UBUo65QvlQEptcb8GHcjg\nzhxQSatdxGyIE8aTgyeGDOZ1D8mbekNx20ZFD3FlAxXe0fNnkAfMAttK3GorpXW0c/l6WPbBQH33\nW8Uz2Duu/QTzNUfRuC/d1Nqf7qkOTx1SrpVE5Kv1/vNc9LVunsrRNh/7cxx10sQXE2ugw2tAlbiO\n1tTSReTfNrGOA7vb62DfOwe8EfY8xC6NompAuBCvHCQQ/wGVu7S8EpY5N7eBGwoS6gMTc8Lk+MiL\nrm0oluk5zPGpjTv4RnB1VXs6fwcrPLOgOi8BV5XG+Ot5ig+fv64xemBO3woWEF/3sJmplnXNsYLi\nt0ff9lhYbq7pmukNnT93531huTghNNbnnvxMWK5gX7iypXxXzkUfw3w0MYUFPKZ7bWxp3F+6dDks\nM/4cJg/fDur3KtdyA3istq/xurbdL48hDqm08CwlYGnxTWXvPqHCxhCPp7BfTGK+Y/6qBRRgDzmg\nLuYg4luZr+kip8dvc6OoOjG72OfFEVt3XNVFGzm1w4eFdHr32x4Oy2Xkw594WjhE4vu6QLq5Pa1L\n/Kawhnybh28gY4f7+O50Tvmlw/sOheVxT0He4zX1k4WK5pRgQ2Ooh7bu1tQHT+E7yb0FXXN9UvPL\nRz76kbA8fUR55Re+I3Rbrap9td/Ut0YX7B3Og0T0rgOzlPA0T73pbR8Ky4ePCh2VB69meo/uxb01\n1+/DR9WGN4F2ra0L/5Ul7rvWzze1appLWxirvo98XlN132mpjut1IrD5jUzP6GP+J6KtHclpEDU8\nLLuNmG7EczeRfUf0v6A87B2AMV1WTvBET/U4hzF3x5zOf2BB5Zsrutefv6J6v4Rp7PsPqP1+5t7+\n/+Y8XQOf55w/u6zr/ecrOp7BXP79+1S+A9+Ys6iQfB6xdgbxE4K2iq9yGfmdJXzrT+Fb/B0Inw7h\n24sDbHoKSNGHDukUclg/tah7/V8iqjk/jtTyh46pPJ7BN0u8I1v2A4f1r62mzvmlCzr+qR365ENa\n6p1p5DmPTOh3B/KqsyeWNcfd7+mBi3NC2a24+huAYd+KOJyCSN8NBhbdYd8aX4fM6cZkMplMJpPJ\nZDKZTCaTyWQymUwmk8lkMplMJpPJZLpN2R/dmEwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplM\nt6k3FC8Vg+1RLie7s15bdmebsIWjj3gEHQU7JA9W4LTlardhKw8nTc+DFSqsdGPAOnSc70UgZIGO\nisHKt9WSLV8yo3IvBftVWvTR/xuWYi7tO7u06JdlWXIMlubj8pO6BTfOz37uc3rmomwqpydkX3f8\nHW8Jy96+/frx6s2wePGmLOuSBf12Es5VLSAJFvbIpu69734oLK889+WwfAaWb0FMddVu6/g6sAwn\nvr9vcdcrnAiPpfNq73xB75eM2LbTIlzHt1fVt26dk83nq6cvhuWrZ1UHNeCKXPS5pKe2TcISjNa2\nA7rQSCkGi8Hp/bKlfevDd4flS9dlJfjMS6ov2uIRe9LyYalKuzx6fruyK3XiRFCpLwVANxEvtWvj\nH4vYsqqiS7AzbsJqsoD2isGutuHrPTZh11hv0CpR96KV5xiuSSu9CYx7ju8GkFKsv3pbzwzHPCeF\n/pOEjX8L58fjes6ZrMbFCs7hfEOMURfMA6LzZqbUL9JAcGzs4AyubgA/BR/aGvAIc+OaKzuwm13f\nho1qVX516ayus3xZvn3zx+RjF8+jXkndSAD3E9N8wKUtiGuCvD0juDdGC/Oy6l26djUsn7xPdrXd\ntur95rUbYfngEVlqTk0J2bC1rrHLDuqlVRflijAQcQ/oI9jaxoGgScCDr7tjUezDBpF4PdfB2oYB\n67U1vzsukExE3aCReJy4F/61cMQOkOwRDszIYaBo8Gw0zyUqwk0QIQEkCeIZIuZ6sE71fKEzux2t\nP35c4ywAlohu2hVYxZ6/LOzf3Hj/GRotjTkPc8Q0+sGRo7JZ3ESfKK3KtnPxuuxXT94vfsFjH/yx\nsLxnn+xmk3FyGVCEfWUPjRIDMiQIRvvvvDt47kwBlssJxVtd+KvHe2qDBGLEBOYi4hK7sLAn6okY\njTbsa8trKiezep5UBlirnWfIT8ua1wULow3cUauheaRW0nzcBIqGi14XdsKJfXeF5Rj7e1vX7zp4\n3pT6YQRxBcvkeBp2wvOa730gqEobshDNd2UF7PJeSc1raewtiBDyuzrexTyBanNSWcUnRMn1wEjp\nsW67/bqKX9f4nKgLeROLaf5KYlFvdVRnSQz6GvYtRBxMFjDXqGqcFtGvGJYpoAHWtzAuiXwY7aEY\nwZi6Q/yKOX9z7q8gdt/c0rxbKcteuphnW6sy4pGYArEjUV6Ye2MpxWG7uJUckJ0VjPlKVeXxotYJ\nYuei6DbdfwLYhUZT92cMzDWy2fre5+pfE3E6YlFiRje2VWdzQOvt26PBMjcFy+8G9llVzDFN3jcs\nRmz5i9iLtIEKqdZVV4261tFhbdLetfFOYn/u6xpbZdXTtUXhCIh3nJoQKiGF+dxHPaUQU7tEmLDd\nkHSIxDDY28ci57+hqZjbF9FKJJMMQTFFsEy3eb4Lu+4oXoox2eC1MxJeeH/pfx0n+h4R1BWxUxEe\nuO7J3+L0OLYdqUhoRLvt27ODJ1rvd7+o/jO/Vw/98X+q8zN7UTeop8DlHIobDLPQhlIF3fenfl4/\nuHRJL/m1rwHL3r29dzT99ZRD4yWZI8U5rSFtGukCjN0jfVU6AjzLUQyAcxg8LgYJr0/cx9mdQbiF\nXGKspzmYOaJ4S7+r3FIfxPLkFNN6rj3AbJcayLViXfQw1yawfvhYFwOgV2JAkvQCxbEJIG22lpUj\n7aQVS4xNKBe6MKH7vvq1Pw7LT/W09r/8svKx735Y6N5De4XkGS9qrU3j2b74zMthmbiYu48fDMs3\n6/3zbzYVPzwwDTQkGo1o8Dhi8AC9y8de4RqQQ7d8NdCbZ5RXnmwpfg+A9uq+TfXklLEHxv4juFfr\n8SiK6NBySXuTXF7tu1rRPmt8UsjmQlb12wO2LJ5RPFStKA5LZXTNmT37wnKxoL5RXtKYOndF+PAt\ntJm7g4wKAtR5TPu8HlHW+9UfMzlgUgLlpjaRy0six9EpK2c81tU5qVmhkhJjqo9zT34qLM8Dz5I7\npBzG3ScfDctnzjwflhdmNFbuul9oqks3NT7yY0I3JZC/bcUi2STndpTLadwfu+dUWD733W+H5Uce\n0vhe/+Z3HcdxnAl8x9hcxZyCuP7y2WthufSAvkvsHb9TDwCkTaupGHltQ/vR9Q3GushveJoP9i+o\nP6Vw3GXQM+Lre9IF6r6uvrrdBeob8XphTHNLu649y/nTL4bl5W3V6cby1bB88oSQgK2m5tLSuvaX\nSP87HvaXBw7eEZYffOv7+s8SaJ/yfXcq19bIKpcw09M61wCubeOls2H55T9/Kixn1zT+LjX1XOcD\nzSPTiA8zDnBjxIFjD1qraXxvb+r66bSejWNic1tjbrOkukwmsT+uKQ89e/cHw7KH3xZSQD1VdLyH\n77/j45pL5vYxGhKCcWpSiPQTR/vz0OqmrreyrmfBZ8nI95Ia8nPbVeT2yAknshH5HaKgA1yTiGqy\nblxeJ8LVHu2xyOCSKRom64PBKR2njXX01lkhgx4YV33dC6TU/UASlfDN6k/O6Jznmiq/fUH9+Z9r\nGXPmMv3rXyvrGr9xVuVlIH8/clDHH5wF8glpVBBHnTEgkTJZfEdBJZQ7QFCldc4ynmdL3dMBccl5\naAZxMrp+An2mjW+Qra7mwYcPoE8igv/V67rQb1/VOXuBzXpUS7mTxt9FlICRSmNvPYalNod19/LO\n1HBlW/ec1lbBwad+5/2HdL1zWzr/peuawx9OCBO5Z05zxK2uYnkqiA2ugyhGaliccHtjccTTriaT\nyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwm0+jJ/ujGZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZ\nTCaTyWS6Tb2hnsZLy7K5y6TkF0RcVLEga7t2j/aHsk+i/XAc1me0ekzBGj4GG/+kp7LvyyaM+KoA\nbKDdyxOd0PRlBUnbMbp/xcCboIU3bYzoXJQCqiVdlK9SbkZWcNkZWLjBvrJ8TfZpS5dlqzRRlJVa\nMgXLpCLQFmnZLW1e/GJYPr0MrA988pKwzU7l9Azvfu97wvKRvVNh+b98WriYC1tAEXV0zVQOKIEt\n3Te/g6yZ3Kv6SMOSM057akrdxlm6KnTUV/7jc2H58iuwAoUFbDGve9GKkZbmLi2n6dGLtk0lhnin\njYiClCwAExN6oSMnZX347u+TteH1W/I1W1qTjVcTdphXF3V+E7ao6a5sBYOErFAdIDjcIdi1CC1m\nZ8Dk0hjbGET7Z4QAWQRKrIm+loZtYtwFso7IKtrH63AE1dSiLT8sK2dTsJWHVS+6pFMDNsGHIyHt\n9ujkya5Em/tYm3aG0l7gnWh9RsxLHDa/Ocy5flNz4vqm6jAR79cbCCcRO3FaKBJD1GrqzWtNjf84\nLV3x4otXroflO0uyfcxkwNDDAHTjwJW58KCD1WiEhTKCml6QFXPbV32tLV4Ny5Wa2mX/EWFYSsDx\nlbc1Ro+cEpLv5mXZ1JZh8RnHuuhhXu0Ad8QpNpPV+OrU+23ZhU2hC9QOmY6uL+til9aZmMC7bSI1\nHJSxLmNe4HilZSdxI7TmzOT17M3WYORFr4fxgbmc44/PzDHkImagfXmH7IGW6j7twa7bQd9u65w2\n7J+XV4Hf6/bPnwcKbs9BeWzOEDMG69T8mI5fuyjbzlVY4v74930gLO/br34WQUTRThHFXgQHSrtG\nzuejbYuahFW9i9jI8YCL4jyN+M+F1XMC+BQvq/YN4JHPmKKDdbQBW93KhsqtKuy9YXGbLfT7dmND\nMU12XOtsAjFvHGtVpCVijIth5bspm+qur34Syyq2JB7NifQTBOS4PlFdiZRwNbT3T08LeemkEMfC\n8j6eUF3m59T/2cWSGd2L+4MxME+Cjp7fS+v6nM9SRVkXFw8/puuP9a2g79gQrq2xKVxbHNirTl12\nzMsvfUnnX/uWjt9UHXNPkkqjr4C/h+XamZgCagdohwrsaZNxHe8MDh9GRsTveOC2ECmUTxP1pXer\nNlQxK2taIzfhz1vMq23Gx9RP0kCMNZNkymB9IBooEiX2Ox/RXRPYq21gf9MBTzSfgd08LM3rLeI1\niDjT9bOw2E6h/zL22sWDOo7jdBC30RJ7YVpzBvE2xOxOjWt/ND2p+XFjE+tfgvspxmRARzWIoVP9\n5NQMEXxis6Vn8GBl3gHiOLVzPIU+kQQqLIcYoArM3pWbGq+0PSea2EsClecOnkMjvYDxD+LVDlB8\nMaDhnL9DeCmXOKdhuKjYkONDUFPukOsQTRq511BM1IBzUgOO/eVzB2Gp/j+el40dwxYE1Me/MQP4\nUl1j6//+pI7XO3qg/+Zf6AWK+743f9X/B6/6Op4O5+89qrX5X/2iKrH4v6myvvAZnVOvj/ji8ndY\nzwFfO4XjE4ifksTYIQ4jjopIe3bzZARJpvIB9JmLRFzFB5fjwH/63f66W2lpTbq4rWd8eVN9eX5M\n99lHNENDnXnN11p18h4xAraWNJdvrgt9FGCA15EPSX+szAAAIABJREFUagPJFEQQWzq/AqSGhxxD\nfVzYmxxymFnsv6qosxWEyZWWrnnl8tWw3ET9HJnTepVFXnKpBhz3NeV7b7z8bFj+P/6XfxaWj+X6\n73K4qGcs5jRuk4h/u2XFSh6wj4mC+lxnS/HJPRuKZ54GGpJBeBx4XWcM2O/3IGa/BXzkVeGo3D9Q\nTtER+XhklEwyj6V4cmxMdTE5LoxNmvsm7EfS+F5RR56sibYpADHmgWMxDiSmjzivjBirgfxRZgcZ\nVIhprzGt5nXOLKpNrzWVP29vYS96TTmdOL4ntHr6bQ7r5X1prQeb14VHT6b1TjPHhUpPLgifs3ZB\nmKx8TufffVg5rr25j4blgzOqjz2BxtmLa5rlWoH2Yk6cC+Pt5e0ZI14DziuDmLzT0b1ymf75hw/t\nCY+VE2qbDoKJNGJ5fnfZABq8VNG3nwvnz+iaG5r7fCB19wFZNz2rvffVmsb93j2HwjIR8G11S8dx\n9jujpum5Q2E5DgQfMdHLi8qFThVVF1vLynN88fd+OSy30xqvPaAROw2NS7+tMVdp6BunX9M5OeSS\nXPChOzsYtcqW8t7dNVV0qqD7NzLYk5V1/gs99a9/t622TgOLuI4geL2n/uZuqp9sr+g6LnJAUbIz\nv4npmmPjs2G5jrrZRE46wKbVQz7t4llh4jr+j4Rlv6U+WcFzJrZ1nXRW80E3pnmotKZ1o9XQeJnM\niYeT3HmG2Qn9bmVME+HaGjDGiIMC4IJ7WNt6xEu5/O7iDBFyh5GcajCo6DBmj+TWRlCxoX0Gh4PB\n56yvqa1TCY2F9xzX2fft0/m1pi76H1/U+Z9eA4IKXKOfvQfI7pTKp5f7dfqVq7rPSXyu/Phx3TOL\nF+G2cGwSOHn8nQJbq9HWb6s++lhCv13a1r1euq7y6rrO+YH7gQpkXwJjmc3gIfdHpGgyr388pGXJ\nqQB1/0nRDZ0/XdR7PQhCKIaOkwHiu4brgNjtdDAwTuX7zzbFTyHAbSE95sznde3H9qo+PntN15tE\nHLIvqz3Bf2kopi51dFHG/kOHqztkzzyMkzZEo/010mQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwm\nk8lkGkHZH92YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUy3qTfU0zgBO7JyRZZsDmxRvTQs\nnYFcIpYg6REpBTv7QFZftO5PwNK/5+qcGuwXHdiYdoAJSCVTO7/T/Zuw9qc9dxvWoC4sC9Njun9u\nClbaE/8ve28aY1l63vedc+89d19rr66q7uq9e3r2lSMOF5GUxUUUZVFi5ChSogS25QCCYMDJh8AI\nYiNBECQIECAIlA+WIglJpFiOTFoyN4WrSM4MZ5/p6X2t7q696u77vScfbvX5/45URU3T8fgyeP5f\n+M7pc8/yLs/7vO8p/n+yWPM81Q3RVBHYfE/1dN/ijurv6kDXGUyovNuQZWd6Vr5NX31FdvZX6rLD\nq776RlBu+nqeZEY2TF2gBArA0rzwoaeC8nBLNovXK3oX2ohPFXXN+WOyKiwek51eZmF0fdeDbTEs\n01NADSQA8Dl/5aWgvNPWs1TQzxYe0bOfPaP7Z/uypvz2ty8G5VZVvx2iTXpEivFv2KLjjdFwo/Bx\nh+dXalb99omnHgnKb56/GZTLFSHDBrAMvHRdfenOTfmRFQ7LhtclbgVe374r23WOqW0gjnp7VvJE\nyGTTukbK07WTGEM313WNjRqsFfEkMVyTeCmeVUgrNiVhoR/xaNmsvlFuqs+UkkBCwGvuIBPuPu4b\ng21vm3gpsKmKKVirZRVvWsAT+PCJzAAnFE9qXBYKstD0gFbotEftQ8TPnXXZP7YRzmkxTSxSo6P6\nSAEBkIN3XHlHdpT1bVmnpqY0Lp0EPP/Yj11400HusL3v8XHRcy8IV3IRCKDXXvzLoBxCFyKOra1q\nnNXR304+dDYol7dltbmxLovgiWnVY6uuc3zgSyKTqncffb69xzUJOe7BcjHpqkP4iM0+2iuC/kjU\nlT+M7XtO2LNyf5t02oBmcc008CQdWKcOfY5AzsGwQkWWNIzubyWYjKtuPGBOOrQtBNLGiwDfGNP5\nu0CO9GAt3UFMrO5hFx9/7EhwbOmocDy3r8lyfB4xsVFXmzAuLJ2UPfvi4rJeim7hDspEKhHnhfaP\nhOoJAW/M8VKJLFgRtARG3B2Cy+MSMQYLaCJwomgDF3XRa2peYm4UQ65GFExtU/GQqKS2O7IUHnbU\nvp26cj8P+S/RL8QLEZcTwzs1d4GMLGt+jyVkyRtNEMmJHIjo1T68qcHeicR1HTem8rCnumGf6XY1\nGD3MixGgmKIJIqjY33TfHvAy9S3VaySn9vdxzWFHts25RSD69uqqeEhYzuLCuaDc7yredhvKM+OT\n8mW99bL6WfPGl3SdFHBlHmJEFXkIchLmYjs7sGbFmof1EYEd7DiqiLYgytKPqg/Ewf7rw+q5D7zW\nNnKKW7dlNZ3GuEghB0kBB9dI7p9TRPEM7PP3UbwYZiF76flp9fGVVfQNzEkdLCpaeI8GEHQDogkS\nZOYgb/SIndL468H2nFE6hAkBlol54ERJfTUU42Dhns3qHXvMdTFPdzF2dysa6y4wS8WS1oI14GrL\nO4pJxD12u6M8b6oI1OKULPRjQFWuAj1Sq6l/pIGuygJNl0oBn+Xt38+GIbtizAWI+QP00RhQt7H4\nmP//n4Dy8xlTQ1go/4DyAecA4+QTKXUQjgrdnOcfiIPy9vn394KoCj27u/85JIOldH4m9W83vyFq\n6n/6Xd1ro6yX+e1/qkqYPqpx7/4b7EkwDV8+qT78T/5n3euFn1UF/cHvjI6/9aruz7Fi+vHlArW3\njRi8iXiSJsICv+1h/R5HVh9FuYi90GkiG7EfO494VcpzvKhvEDPR37s+888o+qM31PFyA9b0AyUp\ns4vajzpzRmuWUkme+JNFYTeuvvE1PIv2Icpd1Uirzz0J7h9FcVx1uQvETgX7rn3MW5t39Az+EDiq\n1LLObwpzsrOqciqt932rpXaOZTTuWxXNf+vXzgflRz7zKV0npaBXOjRCoxaxz3f8CFCZwM/6u5pn\nfeTI3rzm0c4hYE8fV340UdFeBHEZHvYrnDri0e9f1vEFXSfyktYZbnO8Y8bKDWGam9hvz+aUOzz6\n8MNBudFUP7x0Ve3eqKlNd3e11mDu1eurP3gY66dOa1zkwH9/5rSQuG9eUJ+cLIzqNE3sNzAXCVJS\nMFa6QLN2XeXRK9eEA8tN6LkSoDO7z38uKF99HbioupDIZWy05JuqS1DlnNtf/0pQPnpaMeAXfv5X\ngzLRGceAj1uO67vAl6u4vv9guRfztjTWmoOq6iGPsba9LWzP4YURhuexY2qbpWW18WsXbgblqUnt\nzxXxraVW1vVu3vxeUH79ReGluMl8dEljd1AWRumVN98Myh1M8B/7W6rX2UNay5arTKTGTyvX3gnK\nmMIcF+zSZh345rb6wOyHfyYoTx1+LCiffeaDQfn18+o/f/7//GlQrg80LlOzit9eQ/U1k9P+XAHr\nmq21EWotim97569cC8qb9xQLTxxRn5lJq70uX9Z3qtWGxvQQSeoQ7TsAXqrRVIx/9019/ytN4jsA\ncuAI9m5KE9obToGrGsKiIX7xuw41ge8n7dvX8C96ztljx4Ky29M4q2Of69K73w/KO/j+NFPQevTW\nVcSzvfeKAwV3aEZtUwVqsYqx3cK8SLwxceA+1rqhLU/8B/e2h+6+pzg+97mJaRpzv4zQPuCB54T+\nKyh5iKkfPq62eWpJdX0Z1MkvXlYd/fEtDfxZTAS/cVbPM4Mt3q+v6LfX1kflT5/QuVNp7mcCa4Y+\nG8P+fRWfmvDZxemgPzRA24zHsZeO9eWbIiI5528BAV7CPI11eFWfE5w4OlAK6+HQ8jWi+6aR/83m\nVf7QkspN7L99Ge91XSmB8zjQUTH2Z/ThY/h0NxXVe53cQ8oeLqFecQ3Gryl8Qj6Nz4IPb2MNg/Yp\nDjSOD6cU/9+u6WGi2Lvn35qEPgUfgGR2D8JOHaDxHrkmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lk\nMplMJtMYyv7oxmQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkekC9r3ipw4uyuWvD1qwF60+i\nH9o9eTXFYZvowyaatvhETcVgGZaELWoNVtZD2J3FYJtGu7H71+nD/q0fskmDRWtS5aXHJ3X/oqwm\n/T4suV1aw+uanbbutQxsRQToiYtt2KrDwq3b128nYrJSa8flyfTNsur1yjuy+Fy7ICu7G/fkV5WE\nxfpEXu/ywlNPBOUjU3r3t//5l4Pyd67C9wo+60ePCo3xyb/9haD8VvfloNwcjn5b29W1E3H0g7a8\nrW6UXwnKZV+WldlZtMkpWOBFZSPnRGDTDJxCpwcrVPx9GjE9RKrQq70f9k4bQ8FbG9g3F7imiSX1\nk6efOBmU3zgPpE1DdUR8ybvvyHb11KNngnI8Dn8xWPLSDrLXlAXY9rZs/Qp747iQ0zPG0aeIrOv3\ndUFa/bNVMgndvwvWBlFTcU8/XpiEbT5sBVMhBMBft1R2HMcBzcXpwFp/gCciSoSu5j3gBtq4jod+\nO5/RuJjKq5+38NsG4gfRH7QinpkR9sLzVD+V8misbWzIqo3UmGySmBW1SR0vXmkB0YbxEQcKrN4A\n9mNHVplTaE8XWAjH1bv6bFziSdqw0c07Y6ef++zng/ILL3wkKP+zuGJtZWslKN+4IjvRMnwFH3/u\n+aDch212EvNZOkd0DfApaMsO6jqF8t1VYVgGnVGbuVGgXDBuPF/133VluerC/z8EIKIdYSimwqbT\n4VyPUxzaAcKyE9evwYYUhEQnghjkoB8yHxjinEQEKEzEBqKFkvgtaJlOH3WVANaqB/xZhpaRqHu+\ny3DPrntjC+NjSl7OU3OzQXntDiy/PbX9z3/h14LyI098OCgXJ5S3uKj7SAgjBSvGA2xRI/gPHy1N\nC9Zx1CAuNEkcORP7NjFOA+SrLtrU7+ocxkMvpTaI4fo+sCO08E0XNV92YTdfL6M/7411F2Pbg8Vv\nFNfrYg5IY87oIufkfIkh4fSqsqb2p2H3GwFuK7L/ZOsDU+APacmLnh1F3WBYMsYMe7LW7nb4zMBO\nYV6PAEHK/jwgIhZY2DrQDRGMF6eG49dl4x3dHrVDZlL5bCyh31U3lF93NhQ/+w3lqF5WuejEhJ43\nH9NzdXt69k4X6KgM8GN11X29pjpGMzsDIuDG27nfmZ5SvTQ7QAejzwzh/9quA1GKc1rAMt2+K6wQ\n8biFPMqosFxROR/XZf0ePfjRNnvHowCHdrGO4HphsggUcEXxIgJf3WpL83sbOFHaN6dgZd9DLkqs\nFfPhkBkulzL+/uccmp8JyhNFzTO03E5gnM3OyAZ9c0dxKuYpDxhg62FrR8iOek25/8SE9gs8XL9S\nhu13RWvAQ4dGueuRZeFsu13d/8ZdzYX+QG3Zwzx+Z03YhGxG+VcMCK84yqzjCJBcQ8Rz5jahfCOE\n5hzz9SIQiSGEU+yA8oF4KZSxfuFvD8RXxd8Dsgq20v7e+W78gOsdiMlyDjjO84npU9vlEY+Zl/7b\ngE41Oxqvf/gn6m/lmh76H/03epmlh7DGjf34T8SuOjGha37+1/Q8z3x49Ay/898plv7zP8DeXmvM\nJ58xFrvnJtpiDbn1KV9zzgQabAfxZ8NT2+xivuxgf3UG1ull3Gvga77awFI7Ftk/jt3PaXvYD4hw\nrdbXcw2wP3L4uNa0TzyptfHGNnJhbDFOT2mOuYd/6Naxx4xcNIoEt5hXvpH0gN9GTlsHWqIN/G/E\n5f4t9kgS8r9P5HSddEnrjO7m1aC8fU3Il2xGuQexhPUG92Z1zrmjh/U82K/MZ0e5zTvg7J1NaF50\ngC0aljWn+9gT4161i/2i7TPCptRf0hxx+7by9MYWcJDYwIpd0LzvnMc5DjXe82IUo7Gyo3bPY51X\nTGsNV6sqv7h5UxjoDvI8roniQC75GNO9KFmL2GfsqN1fu6RcqowxOrjfll318cKy0LdH03oW7tfu\nYg3UB3ajcUHvdOuuxsRmSf3h2Dld896K9rISWeVYrAO3rOtvr94MytmG8r3YzQs6Z/eFoBxBbnw9\nqjpYLOs5X/CVI34L6/n3ojjipo+9pJVbWtM9+vBiUC71lQ8nZkfjdWpGbXb1de3j3L0hvM4hIOAS\nUfUJLyJU2NGiHqB1Rnu3u7s6HsN+aQVrkS2sYTpYW7z5hvBfZ5E/f+8t1dPH/9YnnbETvgUmgLjt\nY88jDyx2B9/0Fg4LAffcRz4RlCcXNSfstPBtCHun/BYQwbwRiQDTXVNcvfrua0G5WBhtSO8idry4\nqX2Wm0AQz5Y0t/3mafWvjSt6rjngYZptjafNssZBv6txfPSMxsHKFaEKT8WXgzK2j5zhQP3HD+3l\nqZxOi9+TyahcBSKYdXb4mL4PdVGv129p76Q0rzEUi+uabhrfKLpqzx9euaF3eeKjQblzSfNSPjX6\nbcpRfeRz6h+njghb2eY36g7iMObIAZnP4cUdilgfsIy1kI91OL87cib0h+OdP0e4MIaI7mGZe3OP\n4Vtje01x7I+uae/mW5fVty/sqC/FUUu/flLPcFpbGM4XRXV0vgW81G/ukfQSaJfL94A7AgpqR93B\nuVHXPV/RFBBCTYEoFZqvn5/Wb5dyKr9+W/1qF3t/p/H59Io+1zvXMRQnsN4tJPTbBaCbskDLE/Oa\nSgDLlFL9fXJZx99BLvGKtjSds9quCcWMBBYs2PJyjmKtfB9TVUVFESPVw7fRJN4Pnx1D30xv7QJH\nNYl/yOI7JfIEP4R94wqL35b2H9/+A+ao5nRjMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDI9\noOyPbkwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMpgfU+4qXSnqwRS/IfjGdkG1PbwhLtr7K\nLdhrxjz8rdBA5agvWyC4zTs92Mi1YQ3mwgp1AHuhGLAq3h7eqVaVp5KX1D0HSXlIHfmI7P1iQFoR\nKdWv6l27sD3v11VOEHWFOrtel01gZwhL/Las68ihgEu581BcdlyXu7r+O1uwWJoVliKSlB3dzrre\nvbotK8R4Ue9+8Sv/d1D+46/I2m1FpzsxcAuKs/LJugGbyOYSEEHt+7/Te9NO/O2XZcXqHZbXVumo\n+k2pKB+tyFldZ+O6nv3NV3XNakU+XS2SsWjzBh+rSMhaCv0pOt62qGFsCyy3iIvJyy/s5GnZEB6a\nFcrr1orsD4miuAcb//KaLP1mJtTHnLhQJqy71o768/a27C2Te/2nmJHvWA04onVY2TdgY1uH5f5U\nVn2ATsg+MAVs03lYpOaI42jhfMSvrKf7ljEYy22Vq138Fk5mjEG0D4xiINcRSxKwJCxl1IaFnJ4z\nCgvyFuyQB7B3dHHfJGxxcyVZI+/ujuq2Actm2sbFETMjYIPUyzo/hjERwmrhXb0YMSHqiw5igO+o\nTUL2i12NY6eh/ufvwgMPNoPjItrQT09rfPzWb/1nQXlr825Q/i//sY57XVmL9tqK2Y2a6qIGW+CH\nHpON6vWLirtVIFaIZFld1/XLVWIyRv0tijiSdtXWPqzDOZ/55Mjht/0+//6XtpOY3xlriTuCkyej\nbh/Hh7D+pJWlC0tasiJ89CviduB8HkKbRGCvCsql48KC1ed7AUXhAJ0SA/MFocppwmLyfg5z+Yps\nmu9biDuO48xOCwGyuq4J+OGnzwXln/qw7IGJ7mg1NNdHgN3wgAaJImj5B4ATaPFMjKd7gO3ouAju\nuc6gq3aJwqI5kRejjtgp5qUu+tsAlvQxTJJR4ONo29ttaE4dwgo4DUxpF9bB9dpo7LbRp3LAjTHL\nH+A+1V3FC9rs00Y1FucSAXhA5OPRuCx5Q4wxFznwELbERKu1FKf8vt4pEtP1202d020AxZYh0hBx\nBbFnAMthF4uCEDoN+L0WMHRRH4gYtGfjwhs6vzHKhQqLJ4JjsbTqY+eWvGx7u8prMiXmWUB6ljCP\n9tQm+GkIvUUbX5ABnDTyEJKQEuijnQFi0BhqBpiiLVRApaJ+2wberQn8E+MS87kmbKJXkKNOYGyl\nF5T3prOyso6h4mvIg3qcB/baow18WbOFZwRiM4t8MopY22qp33E4sUz8YQ6YrEZD98qmmbuqfG1F\nczodc+u4LzFxQ+KxUK+FkvL3SlkxC/QJJ5dWP7+zpjwsgnk3B0vvdlf3qnMucjkXqd8ePaZ1yZnT\npxzHcZw08HJNYEVoe95oAMkAFOcO1pfXbsnqn/ltGug+N6Jn911dh3hForciyGOpMacuOo5HP2oc\nD+GXkByF8FL7Y6G4jvZ5HYYl/JbYKfcgHJSHPO8+agrIKSKqfNzHjWEg8P6x/Z89tNGSUuPl8xwr\n71+jdrHG/eK/1ji+dUcV9flfVfkTvwg08RFi1h8MO8V8m7jj5aOjZ/iH/zUR6ur7f/y7WIsOxtsq\nf9z0MmJ/DXGGtbhDR3XiIZDD9YAUSeGaKXT0TYzRCvYMBt39+wnXgyHc8F45i7GYxtjabOj+fV/l\nxwrCFzku8t+O5pJDM5r/hkPhQHwg8SbnlLN7NeV4fcy7aeAEs1lgFDeVJzSRkw1R99xP6XQQKLqa\nF92o9kUZvpJVMQn6Nd2rgck5m9Pc9VNPPheUn3zug0H54x/+gC6KHPjdwehu7yIfaMe0JsnEEdsP\naYNkCOyjjzwzjp62dBi4aqAM3nhFe4Q7Ee3/cbnohpIb5ydSn/zwp4Py+QtvBeUnjp8OymeWTwXl\nbERt8L3Uq0HZi6MPD8AsAop3MAhVno7jeerIS2/fxp44+s+zy6O1ypETei4P4yCCOL67qXG2NC8E\n1eqGcsjsHJD0xJpxnRzV/RdmhMb56itXdD7wa3ffUf9pltV/nn/iUR2/o/2Pd77zTT0P1oU3X/1z\nvdebwosexT7n5WnVw0GUTx6eKCk2LB87HpSZw/vAWAxS2kddPjSq23tryktvX8NaAuuDXl11X1/X\nXl137XtBmWueGjArOxU9S7OsNbOHvWQPKCT2rRs3lHevl6/j/DFfL85rDT45I3zf1qbGgY/vf1tr\n6g9eXLlJvKh+6wAllkjpm1V8qLqr7gCbVMH+AdYsfewldGcVY5effMpxHMdpNIR2egOYMixNnBy+\nmX4d+D5udB6Z0D3vYZ9lgwsMHO/31DdqW7rmt7+uuaqDDQQXWLsh8oQe9lmSCcW4UkHrI66ZO9jX\nWgWHZ8fVXHT9jnBw1770jaC8tqn6mcoDU7ymPfLdpmJoDblxHQjq8h5yy+trb+HEgsb2oTntP/Sw\nLm1jv7aHtXEXx0PYdO55csFNvBQnQMzdkQMCkn9AnBoXue8Bl8xvBHHEzkxW9fgaMHlJT7F2K63Y\n2N1Rux8p6jp5oJj+9Jbq959dVBt8Eullbe8bxO+f17m3mirv4NtbDWOOpFzuBYVqAP8BapPzGFLF\nK+u60A3cN5/VSW9o2nW+hP2+XWCZ5hDjcwjZv3AcCC/gDSeAcfKQnxM15WEd8NFZHX8NJFX8CUPo\nHUnU7h+wzH6pOvrB+U3Fmg8u4gQS2nDtbFz/0EV/utNS3J5tKffYxt4suyiRbsRIhb4V4XFCw/UB\nk9fx/gJiMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKNoeyPbkwmk8lkMplMJpPJZDKZTCaT\nyWQymUwmk8lkMplMpgfU+4qXghOeQ6v6JizfaH9Ky7dYGrbMRBfA7jMelw2TGwXaZUd25DFYzNNS\nyIfVVxQ2etH7eKckrO8Lsrxq9PVSMfBWXOAyojgeLQFD0ZAfUwHWprmert8jvgPv5+O3yTbRR0HR\n6cKm9Qb+vmoxIwu383dkpz2kJXseFnF52do5aKtXL14Kym/dlBXct98F2qSjax49Llu9yXkgMDzZ\n/zVSwCns2cP2erJCvQ501d3zsj+deB6onTm9azopa6nIMbV9tSkbwGFUbdiHRdaQyBNiJBLoH2CP\nEJ0RiYW8qMdPB1hoOa7GmevJn21iXnaNJ5Zlu7e7rbE1WVRdO7BZK8OidLqj8524bDfdiPqYT0sv\noij6g73/RYygRRhsqoewU5zOygoyCeu1tYrGWQtWy1N51UESeA0XaI480AATsH100VfXN+T/tnVH\n8aPSg23bgPZlOt5nbEKf7Eb0LmtNPTPoVU4asbINq9oGcHZTRcY4nZ/Kyn6tB8tRb6/Pl0JtrPvT\nnrYLD7ncUO+XgcVtIo64HaMloO6fzMAKDva099FGjuM4Tl/Wnn4dSKlVWYc2b6ucFWFnbOQBC0Oj\nulRKcXrpsKwV/8Fv/edB+c3XZDX77a/9WVCu1VQvs4tHgjKRSBMTisGJtOafe0AS7VQVJ2lBez/U\n5T39ewZWf82e3snDcdov+iELTo2tfig2wUbZD/mkB4oCWRUNnQ/ED/phGC+l54xEEftgs++56ucd\npEydIfotrNKJz0niOrRbdx3GOMzxmFtSKdhEDjjWR8c5nq/e0Pybycge9/HnPxaUP/O5v6Nzsort\nROcMnL/ZFjRk9Yhnp83iALGh3VYMYpwYRyWAQ3HRP/sd5SUu+lUE2CkyMoijimAOae1qbA0G8uZ0\n48q3iJoatHVfop7isPCNd0Z13WwCaQMcajKjd2rDdpcYG+YrfVinRhK6f7JO7JXmcTctzEwISzPY\n3253CNQUA54H++ZhV3XTretejEF8zi76mB9R3RO5MOzpOn1cp4OFCQiMIewhz+8Ce9Npjq451BTj\nDKKK27d/IARqDLFm8oSs2jN49lQMcRCo3QFynlxG/WDgo5/h4aPA2CSJV8HaKea9h7H+71ClkvpD\nNqMca2NTfaNWV741QN4Rwp6EEGnI/zbUnwtZWRRngFebyKstiUPgPNoBmjGRGNU75yQ+V6Wq5+31\ngdIEuqoLq26iscKRE3lVUs+4C2RcDeccmROaH+14AAAgAElEQVR2YwC78NtAB9eAwYoAN9ICZ7da\nBdqro1iWR243MaF2i8SwzsIbRBJqT+INKxU9T7Ol2DMLS/bpaeG/Umm9e3JvfRxxGV+AMwEyxEvq\n/j2g+oiJbAALeOm6bPaHyEOWFuRPTXxVnBhB+iGHsJVYL0be162YB1eMqFdipJwfu+zzOu8BL8W9\njdD/Xcw7oHwfJQWkFO/jYpw7pH7x2iGUFuMoLPcTKhcK6u8u9rIe1IL630R9xKZX3tAc/NZ5vdif\n/J96sf/4t1T++C+qTvJ5IvoO0o9+rwFy7XqbOfKP/JnpR2h3yHmOfVJ13UEFd0OUM1j6Iy51sL6o\nA9UZaqcDOL6kyjG9J346uTcu81gLZrJapxSSKteQlyaxlxFxgZ7nvivGZbup387NCnszOa35L4r1\n9q0VIWp8F/ucPV1/C3NS3ycfT/XUQ87OfUAucVvbt4Oy52AzHCcxTrDqK1XtJZVfeTEo31jV87/5\nrrCnjz7yuO771EdH9zyiPQQ24BA5g78BXgBQnEMHeyuzqss+sEilJFAfNaFKImns+e1PSDpQ4x4m\nnl0S0uaRefEQtm9pnzpSUZ40XzwUlBen9dvrq9oDH6Jvx6PAgOW1HzY5qTVXCnnHMK0aW5hXbjIz\npT3bU09/2HEcx0mXlFNxfTuoAKdWEx73xspNvRPWOLlJXee5h9XviF6ZnhE2PfaU9pq+d1vnrF4V\nUmptRfedP3Y2KJemdJ0k0J5v/PHvBeXCpPK87hXhqwbAvyzgG06qiEXfAR2OOfYLzwlx9egzTwfl\nd65oD6YMNPUHntHe+Wx+NNa/8xXhhIolvVNmQ3lmt61+U1n5VlDubymOcA+tgJByfkU5baGg+ijk\ntOee6igObmOfuOarXMAaZb1OdOb46fq7rwflW5eEegvFZuy3J7G/2sIewBB7Wtw/IHJ+elJtGoup\nH3a6Gq/xhOauYkHj7/AJjftT555wHMdxmmDUXL2oPlsHHjeb0TjfiOKbaUznFKr69nZrRf0HdCQn\nhvmvizgdnVWOvwmcM3OAJL7Juj73G4B1dHR8Zlp9m/jinR1xci6dfykof/Sjzwflz3z6k0H5pXc0\nts7fI1Ibayis3XJAFMV6iq1Od1XPvzcHbuL71GRG8/sc2mxpXuVmU21MnF8Ze24djH/mA6RL+cgf\nOBcSKeVjng59rx7zmTFMl9p/nykS4R4GUWWq3zvYozl+8mRQXj6jeTQ7qT5WTCle/R6+Aa1taCw0\nfA2GizU9w7deHx2/A/S0ixzZA2K673OPAfv9WCjNc+8fdTCR00kzOOfVCvaUUIGltMrXquoDNxHv\nO4hZa/jWwTTz5mUdP7WqZziV0Lu8sKhzTgBBxXUGt7xvt4CfxX4stnRCOKgm4u8d/N1CeTBq/7+4\no2tMpfSuRyfwLLgePl06TfzDRl/743cSy0G5hf1S18EYDY0ztad/wMqXPdrwUiaTyWQymUwmk8lk\nMplMJpPJZDKZTCaTyWQymUwm079l2R/dmEwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMD6j3\n1dO4UpH12WRRlmxR4EL6XaAIYKEP8oMzjMjOpxcygAPeoim7xD7stMOelirHPNhIpXXNZnJkPdaJ\ny0as15MtkT/c3wqMFmFDWMMPWrAlxt88EaNRyOh4A/bmJdjyZ/Db5gB288A5Zef02zissZZhwexu\nygeqDBv/ZhVYnwrKdV3/nbrs1Lrw1eoflQ1eAZb6w7ye4Z2mbBQnzsqO3IOV1nDPwuvu92Utt/aG\nrOCIwti6oPdIwE66gPcuLOm5pk/qeeeu6P1am0ANoJ6iaV0nmdK9olHgFEL28+yXYyj/gDHB4RGB\ndXte9oHHjspG9fU3ZHWZRr0sLshyNI4+4MNyNMK/+YvIcjQD69RDM+obt66ObAJrdcWIrKd6LqbU\nFrkE7N1h3R8HaiAGjNxMH6gkYupggYew40zBQv/oicNBubElTEELuI9KV7bjIMM5rrO/VTTvlYAN\ne8xT/fXQ3/rwXo/AAjKTU5ssL6k9s3nZOc8vqD1ZJ5GQ/f3of1mXrTYQMsCW9OnaHgfGCjaL2bSO\nu3j2qRnZOMY9xX8fluluT3Xpt2SH7N9VX2xcvxmUtzdkZaleNj6KIIZ0u/sjHobAmzz77AeC8pOP\ny8733h3FyZd/8N2gvHRYKJN6WXWxASzGiVOng/LK6stBeTBg/1Q/TO2Nu3wS4wPjOY4+68K6lnaN\nGHIhS9cQHuKgvwsOWXjDxh8WnAnM6YMeLWNpDojroEyLfqLq+i4wIEO8L3KCrAd7QthQ0m69i/bk\nTJFAvEmk1f/nFxQTW3tIm926fvnkc88G5c9/4TeC8sPnHgnKSSA1QlUQygIVL3zEl0jIIhV9Asfp\nQ0tcZw7okXGfF1Ow8Ob794Br6wC55veAo8rz/XXNfgf9p4vAPqC9JeaorNpp2FXeOejAdhxzbWKP\niTnAxNIExqYPq/w6jseTisExzHnb27pnfyh7V6K3ckuyH04U0N85bgbMkx0dRz7MseXHNScNGopT\nXWDU2m1YRROP0NA7DrCeGCI/78NCusM28WEzjbm519VvGxXkLUAj5mdG6L5YSv1mgPt0OW8hVxm6\nWp9EO7A/dhgrgRYirhT5VAPO/RnkvVxPgFjnDNEQjHHjqGJROdYULOPvrm4G5e4ObbCBfcPcyZyv\njbbh3HbrrtYVHvAah+f0DEnkMrUG1peoxunEqA8nYC1O63IP2CHeP4FGKgLtO/R1nw48wluwyq/y\nWXDNLmywX3pLedIMcKhRrqWxTs4gz8tlFb9LQFL+8DVZuHdu67ePP6JcgtgsrgmyWE8szsnyvpjT\nWKzW9V6HgHFaXZVFeAw8k9RePLt3V+OpDRxyqaT7DIBT6adUH+2m4nwbWK0W8vfuUOiIGnL82Ulh\nr2aQx6azWE8gZvWQAPUHIfb2+CkKv2jyZEL4JZQPRDQdgJSKvYdzQhyb/ZFRYdSU+9ePHYCaIsYq\n9LyRA85HjHCSasdsCfk7cDjjEGq7PT3zq68BZ/DbaqzPv6iX//v/hcoLS8Sl8aqY01DebY7Kf/A7\n+t3X/sX+uEnTgynCfQIcH3Ab5wDsK23/4zjeCSHwuAeHORW/jWBcxPAPxEshTXKSe50mjjyplxQW\nIAW+W2lS8TgPvNQ2kBetri6+jRygvKu5IVvQvsYQqJaPfOy5oOwC63f3jrA65U3lGLttDl7kVcgr\nknHk3shpm32uI4EOJaWKCHMiiIlBRvtUgEsp39Q+6uWbN4Py1/7iq0H5+d8e5RM/VxJuy8uS66qH\niR4RNsVBrkIEVhvP9ZKr3KCK/Oj0gtYNE8CnOppGwwohNX5yVL5+ISjnl7TPMn1MKK/Lr7walH/v\n2yrXMEY7QMW3aljz9VU+eUZtMz+n60exz5Ga1Hj5xEc/GpRnkPsU9hBNLWyzXL4lTFl/7VpQ3gVS\nuF7XOGtj360HDGh1VtiPzKRyoGRC+UNpSjleJK5yfVdrPg9rxxjQcxNT6sOFSfW3K1/7UlBONLE/\nj8nfHeg520D39rOqm7+yAR6UTiweC8oPLQKV1dP51V117h7m2soFobJaudFY7N3ReuPUQ8JVVZCD\nR1v6XjYEOic1gVxsoPeYc5VD/srHVWce1os3NlV+6x3VN9dFuQntkqZSWov87FnV/Tgqkda8kQCu\nOwYGiYdyvqg1yBT6ajzO/Vj1Q67XJuePBOXpRaz1gGa7s6L96DL6drejeen+d0Kfu4DAPyUzaosp\ntEukr758dUPrnekJvfdTJ/SMA0/jbHFOceTU0WVds6drXlzDvnooIOM5sRcaA2ZwAMx1Bs9/aFbr\no3JFcSUyBHJ5R2urlS1866jh+0wSe3RYXyaiOmf5sNpzfkFjodvWfXt76PYO1mGr2FtYnsE3Kex9\nHZpRv7mzpv2Bm8gfekRdI28auvvP78MDvsH5WKcOQnip8ZaH70jcExzwuyP25jLAet27BzRlVP05\nnsC8gbxtZl7zLus6CwTcTFnXfOett4PyW2XFvd5erhbFRYgmL2V0/2kgmaaj6u/TQ8WLR/PYeyTu\nFX/LcOOu6qODXHEyp/r46UWgnZTuOXkMxfNIsRoH7Nuv9nTN9V1gtZAHfF1hyvm7Z3XOE5giX1Eq\n7ax0dM46tjBKSeS9aJMy7rWD7yf3G+61HfWb+DXVza+kVcaSwLk3VPuUC2rvMyce0/3x/aFd1oZp\n6NtFaDm6/+ji9y8WI77710/+ETKnG5PJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaT6QFlf3Rj\nMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDI9oN5XvNTVm5eDcnMWNoFF2MrDgrMHa60YrMwy\nsHnqy33K2d2WHV8flvQurIP9CFAUWVkNdXKycWzG4JPkjnyHXKBUaLnqxWU7FovIGmkA++9WS95P\nUV/vQbvWOOwU+2mio2T5RmaBm1I5GYvjFNhYdfUexHMNpmW3dHxC5VXYjMYjsOTr6B03t1THLfhT\nukTRoK2isEWNwUI2mgQOJ6L66TZkNXf1qzdHz/UDWd0NaZ8OGyh/Xde7/VJQdBJdtdv8Gd0nNQOb\nQVhcxtE/umiHeHL/dut29LzEIBDzNZby4UfmYxC59NnCO6c0Ro8cldV7AkintU21Uymn3x5ekCX9\nXGNZvy3hXlHZE3pZ2RBOwlLx1l57dzC2crDApe2YGyUmSc84gJXgbEHv7QLfUAGqot2jBbyetwVb\n0UxB3msR2MvFNtQ3mgP5tqXQb0HncdIYQ3nSJPCnkXXYOnspveOhWT1Dbhq4KOA4srN632xetojF\nCf3WJeoIddVojOIjLfFZr8Q5ZJPsT0DowcOtDy/sKGJoMi3ryD7ipl+VHasDS0lnS3aQvXuylq7s\nKk61MY+Mo0JYDFjeRUP2d7QMRH+GzeJnfv4LQbneECZh5fpVXEd1MTEt3MON67LALVdgwcf4jcfJ\n7nmHR2Bl2MFYifE9YJfKv/LtMQTR03+4P15q6LMvDfY9J0LfP+LX4HFIW0Far/vAnBFd2EOdxaKM\nj8AuApsXBV6qD1tuD2N3SNtQ3gvHD8PG9JlnnwzK3/3uCP81XdR7PP7YuaD88MNCSsWQG9DSn2X2\nJ1or0laWfTRspkj7dP6WlvaDfY+PpUjOYL/Nax4iPqhVA98HiUF2Eig/IBK7NdV1/Z5QhIOWrKmJ\naegBg9RrKEeNJf669XsWKFKi0lr4XQfzQX5SczrxUsyxUsC99DvKRXuwHQ+xtGgTP2C7w1q/p3lx\nAPQc+08b2JZOA78d6Pq7sIbNlPVs6YjmkwFsfns9Xl/P1h1ojHSBNmk1dd+tXcXTKKxza3s24u06\nLMSRw9ZgM55y1Q7O7YtBMTuvZ0lkOJ50egt4PBeWrhFYOUdTiLnAr/iIX7RIjYTi7Pgpm9WYK5UU\nCyenVGa79JuMacQJIu8g+xLdtg6u2M17ymP7iOuZFNCCuA6GS2ABXcJYbKMPcNaq19RPJieAc8qo\n/zYx/td3FCPaWNesrCo3SgJrlQSy6uZd5Z/ELSdhn9wL5RiqnDxQpGmgmI4tax3wje+9FpQHb+o6\ny0s6Z3FR5TRQaxGge4t5rUeTabV/DShjziG0/d7eywUbQJ2WgKpNIC9ttVT37bZixw7wewnYWR8B\notMDsriF6WxlU+1Qw/U5104g104D9xgDEnYshb2N0AKYKChyh5joHYSO8g44J3rA9T0eR8WTY0Ps\n1P3zo/sc+6vXeC/PGCLwYNAD+ZtKKx+IusJx9Mc476lU9S5/+Lt6zrV7euF/9N+rf544Bet45H8b\nZcXQP/yd0Rj8/f9RY7HdZO5s+rHF3BqHD3RLx1m032+5XAep7IUuqmKM4xL7jDwc5/KL+E9nFEu9\nmOJfHvl1HYjEyaLQEEsL2gu6fEtzQBlxenFKxz/5iYeCcsrXPH7xvPKzQVkonUNJjd2NruJ3F+O+\nj3VnCvtdUS6bHPX9FLCtbSCcB5xfiZdCo0RQZ150/31UYuy7QLWy/acmNO8t7sXueexP9onfzAE7\nHApT+A+snyNIeJ6O6Jpf9VX2Isp140yQ/P3XiCHxODvsGMrPq54319Svpo8LsdnNKKdJuaqjbl17\nVJ2Oyt2h+kwWiIobl94Jytg+d/ym5pmjx4QqmgEK9PCSkEjJ/Ki9y2Xdczavvla5qTyzU0P8jinX\nSsexZkHAuHD+9aCcn1sOyttbyj/fflf7UVst5Ht6JWcypzjRxvi7uqZ3PZHWujqBOnaBMJnA3kMJ\n+y/ZCcUVt6R9sBje8cxJ4XkmYtqXfOu89hmfe0S/BV3aSc2dDcrVTWHfazdGa/5jU0eDY0enlFte\nzirXZlLSSwtv1doWHiXJMUqkO7C03TriWh2Y3qrW8OtbavN5rPOPzeu9FyeZDI2fHnni+aDcwXeZ\nTouo7S7KiIdNjYXXf/jdoFxriqWyuaF257e1Z55+IigvT+kZ/vzPvxiU3zj/rn7bwfja2/cJxe4Z\nxRR3oFExg29TzS09VxNr1KmSfnsWKLYY+niuoD4wWdAYuo+tHz0Q1s/c/8Q3wmQa322Bu4rE8F0F\n32GSCaCCsIa6uyosUzauueLCFX0vvrsNLHNfaD3mlIO6MFvNquLEYFoxke+yvT1aLzbRP+7W1A92\nDisGLc4pXmTTeo8CUPBcF7oHfPd4LwrBLImUGuM1xF9VHkgffq/rIV/hvlQyofKN20JB5XOq9yj6\nkhPCpzr7liPEyiEnO1fQM9zBL05kR21GFPDCrPp7Pqn3+PgZ9YEkvlPFqsCPYo5uI996Q6/nvKGu\nF/ou8ZkTOv78kvrAPLYJ7iq9dXylHs67LXxP4MdDvFeH7YC6vNzUSX94XS+wijXid4Cgavo65+ur\n+u29LvZI0P7fxHM28DcGU3t/h9DCWuWqp7H1tTb6U1tteeppxdtf+lnl/pmi4uA7F4QArb+rODxo\nYTcO4zWEcTsoReVWhxvd/6QDZE43JpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCbTA8r+6MZk\nMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZHpAva94qQwst9d25LFUbcke9DjsqOOwg/ZgRZqB\nxXUVlmi0AorC53QYk4dTI6P79hKyiAP1yYkBdeHv2YgTh5JMyYIwAmSS04ftZ1OWSvQiCiGz4DGa\nj+h4hdaR+LuoWFYPGcf7DWDx6aRh6T/Q+YOuLLA6A733Aq7fxrtswt6/2YBNcly2VOmCLJ8SaJ+Y\nq+sQORJHJQ8c2K6Wdc13/0g2sJvnR/aHqBpnAEuyJiz+Ih7xT+pnN16X7d3GDfWVI0fUh1o7sAej\nFXxf9dqG/TwIQs4QVl5OD/Znw/G2RXWGQKgB7+WwP/Nv8mD1NT0v28K5GVkV3rghm0Baqg8Gat8B\nbOKdHhAVUVkVRuIa95NTOh7dszykXVkH9vjE8RDrQocw4gU6LVgaT+s9+NtKHf5v8J3jdXzGhpzQ\nB7MLeu9jM7KD3NnUeErByiwF+1PQ45wKYsYmmu0jZ+eD8uJR2Y9mYCWZRZ1EPMWtaIxoKMQ7Wk6j\nHqJ7Nr8pxL4orOuI3AgRftCHQjbKsP7LACORRGyvVWXDmQJGKk7b6jXF83pVfatJG9HBeGM0OD66\nXZUTCdV1vaG6SAO7EEPcfeaZDwTl+UOy6P4f/tv/KihfeEvWtMdOycNwbV0WtD3iJ8CUCrn43x+L\niItEjMXQCTzYQsKV3OkO1e/6sCmMwk6YY3dIGz9YCEdcWngDW0E+C/pMyA4Qc7AXyoZoE6nywEEs\nw+VTMT2DF+G44SUxkRE7xbGI82ljWga6L7aH2HHhX7l4WJarHsZWyOaUZeKi2Cgu7Sj3t7EP2ZyG\nbBZVpqFqF/atY4/RwLvFaM0JZFEKtt2tHXlt+kAl+RjT/ZbyDsa9aFr5U21V8S2BHCSe1tiJRpTX\n9Fqyb79vS8p7ehnZQpeBXSVGMVdUrPWBGpqYUnxxMSjSBV2TyLAh3juCZ6Q1fL8Lu2vYKzMv7XWA\ndcS8WynrXevAY7Xbqqf0luq4h045pEV3n3m4ynXgaK5eF/JrfVVzdqUCtBfGTmxv7MTQb6KYx/G4\nTgn+6XG55jqRQ/oH3yHCCOcj3+909A+5GJCmvvqKhxFIVFCnh7lzzHPUPKyvZ6aBnKhonq/V1C53\n7in/7HT3z91DtrAhzKD+oQGU8FZF/bbZ2j+WNpCPluuj85fmlLd20JDMFYd4mCoQalmibPW4TrdL\nOJXUhL0xLbxjaPcM7JX5vOwbCfx2qqTnLwJFSnv2ZSCXnigrp716C/7JUBXtRkzpyh2Nuc1dxQbO\nRWWguJIpPef2tuLv/Xl9fl55cQoxdndXc2i5orHdbqqNiWNcWNBexPSU7IqHiLPMaes1vd9WRfVR\na14JyieWhRWYnxXyIT3u//8nslQ4LzJfYDghFiR6QJJAV+YDyzyfrJsDsFPePrgFTd0/Ald1wHMx\nXQm9H+4Dq+6hM94Ihr9JRDB+9V9rrLewz/H3/rEqZW1T5//LP1Rc+eE3R79t1sYb7fuTqZCJvkpA\nDdOqnl2Vv0whF5wA1o+Ywd2qckcup4ia4rIp5QGD5ClfrPZH90riGWlxT1wH17cLcypXgf2+c0vx\n9dxZ2cqfnD8TlPNFzWGHS/K1f/euMCFnkporWl296623lUvEgV7l/NDlHgORNiXsLWLu72Lrq4/5\nz0NszWHPm6hkF/XWbKkeBkCLZIGCbQMltVAbnR8bcs2HazNfxjv5ePYI1qIe139AvK7jue69JhRS\nfeawzgdK/KB+GdZ4IzUmZpTI37yhnKK+qT52aulQUP7Zh9VXX/7uXwTlOwO1Vyardixm9f63asqN\natvKZbptoIGwnop2tSaqbQEtvXevblM51ZPHtWf42ovCtFxtYzwn8H0Djbe9qXzv7oae64SvccC9\nktW714NyL6oYcayg944BpXorrus8dEL1nXCVt0XzQsEM1jXW04grkylgEReFjupgbf/pz342KP/U\nc48F5c0ras/rW9q3bg9Uxzfu3AzKE13lxpmuYkl0ONpnix5W3PEK2jN+fV3t98gCYsqi9vbcWe31\nrr/5Z7oO9lkqLcWUnqrJyWG/8HOfUl+8dkP7D5ubClQ37qptl5c0R4yj7t4StqwHRBYDTYxzJPep\nO+q3l87rOm+dfzUot7GY9xOaW86//YbOr2MNink0ned6EPsc7dH6lZjOdFb1HMdeaPWKkNQOvnv2\n+nonYsXnJrVP1U4CvxZXHyDmvod4T+QS894JYAuTCe5bohxjRoA9f+ASQalyKti3/8uXhaf7+U/9\nTFAurWjM1a/omVcrKqcyihPzjtaFLuIj14Pe3jcLH+1UqWs/oYq9BX8O+zt4vwTqMoZ8yg1hEbm2\n+5tRU6FdmVAnBZrxb7zKv1s9/eSTQXltXWNip6w50ul3ULwdlLd31bdPnlQ+x/0aougP2sViPpwu\naP+o6ire/9op9fkXFkbXjAJZnStiHxf7skPsVQ4wuRH9ySUlPxOv7OqcFvYhlyfVfz5yBCjEuMqP\nHlb55IJ+u3hM5f/tbV3nYl35agXfDn38fQJXaCxfUortbHV1nQiQarNZzd+vYLFcKynn4z7tbk/j\n8qNnheB88ulnHccJf3udwJ5LqYT5HZ0/kwOOkd+WgA7kPtX6OhB0K9hrCiF4uQHw/z0Secx3ekwm\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMpvGT/dGNyWQymUwmk8lkMplMJpPJZDKZTCaTyWQy\nmUwmk8n0gHpf8VLZtCx8bq/LUrqzCYsw2OmfOy1LqK4ruyBiTeLAmiSAmum6sF+LyzrO8YClIPoE\nf36Ui8KSqT+yqYskaOMKu1FYtFdhgz/sE9NCO2rZFRU68kPqFGEBT1wUDJ+IhPA8oJ1g2+amdH4u\nAztFWNV3KrIwvLijuon7sEtdVB2kC7IWpW1aHLgaB7idWBR4hCjOgZ2639azXfy+LAzLKw2cP/of\nIkO6sFPtdfSuCVqJweatXlFdNnaBE9tVW9EudVAHQgh2XEN4V7lDWMrBUssllsw9yPRsTAQbWScC\nK0a2F/8mL6I+kIHF4NKibEmvXJONHB1oOUYjtLXtw77PVzmSUN8+/vDJoPzuD0f2in1YItL8K4bx\n78BCfwAbY1raOj7jiNouA3u5Luzf2rD3n+zBSndV7724IMv4iSlZoj3/yHJQ/vIPLgXlm1uyOFtG\n1bfxnPcwdheWdf0nHj8XlJNZ3cv397clJhIhZJUHPIgL60TiVfJ7KLnBACgMoqj0iCHrZGK4XNgo\nJxOwq8NQ6QDFUivr+kT2xICY27knu7h2qM0R58f8T0t9xPU48DvENaUzQEoh3g+IK0TcW1oSOurz\nv/KfBOU/aP2vQXlnV1Z/ibRs+o4fkc2v25P1ZwsYlvsYrBb6UYoxMsZ+p3P6XY5FdXgPc54fwkIp\ndqTAt+rgvhFiUnDfPuZdjgn2N4ZpWlZGEVmyIAZ4IToS8B34h5ir2EAiSLtDm9v9rzMxIZRHq62Y\nePuG7DfvV0+rAXTiuqzRiRwLoaDeg0K2qOiXUeIlDrAFZz+mZXkCyLj+gLnN+KkP5GAE8S2KeBVL\n630SsLHsAZ3YAZJzMNB4iiJnisBqPQYv0sauftvrKt4OMed02yp7e+iYATGHcN2MpTCeiR1C6w0w\nnjKwQq5WFI/dCMeQ7IcHsDEnrs2H5f4Az96qqa/2YGPca+q9W0C+tLp6tnod1swtXX99TXksKK9O\nGzniTlVttVHW9Vc2kLfD6jgC29gE6soDWiGxF25oJcv5pgBOZC6la0wVMc8irjE2dbu4EMZfxkce\ne4AV6iCEdUSeHMe8PxxvFEoaVtAzc8ozqxhnrbbasQcc7Oqa5jauH7wQhnZ/xEIUjcD4xljO9eJu\nTc/Q3+szQ/SdOO5JWk4yrZhC3FK1ri//mXQAACAASURBVPfoAvWYwHXYx2m7nAZ6abKg+FKraoxu\nVTTm+H4eJiXipSKYv9sd/dYFNvLoESEUGg3kCYgr7KtrG2qflVWhLWlB3oaFcw/rvkFf1y8UZKF+\n/92LeR0boC0riDt9XK+E9UyxKKv/UkE5F9F3LcQsokF3y+qXJaD4Iqine1t67y7i9aEZ9e+xFNol\nhHliwGL5oIB4IDrqoOO8F86JHPAMvM79Z+Au14GoK2KnDjif12EOhNy1DgTd4AFzr3ET84lvf0P9\n//w7mmsbDY3vZh1o85/sVx9rRZFjMbYMmLqjAYahttBJUznNr2cPaV9hraH41gDWmHtgUcwVLtYb\nfYzXFx7R/kRtb23+1m2t1xtNxGDMW/NTwvrdvgu0KOatM8cUm0Glcb79XWGNkkAZJIfqs4UTDwfl\nJaCp7m4KA9hsIZ/EXB7tAy+FhIC5BOdjjiHHZW4MxCN+u4j1H6/THOi3ibjGYimloJRJqyKqTZ2T\n29sjeAT7u0kEOR97CP07ah8X/cMBVjyMIMe+NXKYNvKyEOYZIurTDaEz2GHHex+1XVU/mTsixPPG\nJSFnJvLKKZ55Qn2vlFQ9fvcNYVV22mqnX/+FXw7KX/zql4Py9y5fDsou5tq11XtBefXmtaD88Flh\nOmZnRnlKpqTnunFJeKHXbigf22GO2gR2Feuke2s6349pbfxIVnlVfkb98chh5aLXd4WhiAHLm0Du\nmskpnzt3TLHhy//qT4PyXeRe08jtzhKnnNH4uJDQsyUKuuaR4zpnY1vvNYF8+NFJbALVlM+1usSc\na3zXkK/mEqO2Spc0zssvnw/KM8DXLc4pJjex5jlyRDErPVR8Ll/8UlBeWhKC6t2Lwnkl8N1oDui+\nh4/q+J2beqe1e2rzW7fwzWAMFcH6N4E1Nb8LRJHHZoExJCppGBPC7MRpjdcqELrbVcyROJ7Exssk\nsGGpgtZHaaD6envfCacw53XVdM7WitpuoyLEUmka+/2bepZtrL1yHvZdscd/+7L2Ere4r4VvBZWG\nxij39Yi8j+J8L461ElDiFNfVyYTGd6+nOf47Lwrn9fSj6uexIdfteuZhT+9emFF9F+eBREZ8TLT1\n/IlUZu/ZNYbqA651NYa5N0wks4fvRtx/p1zui4eO7192DjzO64z3vPjRj3wsKG/vKJ5sAkW4cU/5\n1pe/+r2g7GEOmZnRuGEe20HbcK3hH5A6HDmucXzlzdeC8oub2Gfc+8HCJNp6W/Fvo6Lj0/geFeG+\nEJLwyaJiUD2jfnd+XX12CHQpaOqOi+szH+J3gwxwj2eQqv2D53X8TlPX+S6wbNVtnYNp3bnQ1PM8\nUtRva67G38Mf+VBQXnhIGLHVDc2X1TqQbsgLTwPrOAW8tpMctfnC3FxwKAd0VRwYNzeUR2MPG3sx\n/AYyPa14fuTwclAmbryONQ85ukN//9w1hKN6wLE45p8jTSaTyWQymUwmk8lkMplMJpPJZDKZTCaT\nyWQymUym8ZP90Y3JZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyfSAel/xUpkF2Uzd+ktZH9Zb\nQAbBdjOako3YzCFYQEdlN0jURg82mQngmiaS8m1q9nV+FfiGZMhpXdeJ7/nH+z1ZGqVjsj1q1GQt\nB0cox4dVItEMQ6BRGhl4YWVhHdbRs8dy+ruoAixYS0V4qsLuLNoH7mpXFk+NoeyTUrAK9ZblS9Vf\nxTvelh1d5AzwUrBbjsDmKQVb2Sis/TwXVnpNte2d14gZkTXd/JOyE2tvjCzumvdkrThoqP1OLMk2\n6uRh2VItzwtL9i9ekm3njTtqq25NjZWDZ1eftvwOsUgOjmPY0OaaTrLumP89W1N9P2QdHiE+CHZ5\nKHtp9f+lJdW778jat9FWW/eB4PBh30d+lzsEogJ4t7mHZQv37Asjq8XzP5AdJ+3oE+jX3Rgt+mFj\nDJu3DOxGMzlZ2qXxrsUtPdfKhvoP7fp3t2VjPD8r28cELNFOHVM9tWBV/6ffl8XeXeBi6MjbwDt+\n7Pg8nh9jF+9IpJOPe8WAM4nAGjJG5AL6vw+7znRuNEYHQPb0gApqAAfSZXsTdYWXquG5aBHXSKjO\nmjXZv3U7ivlJIJjWYO3Z6tJeTu+RSRCZNo6iHTUQPbCd7gGR5gGhRKtLimiGFz70kaB8+rRshtfW\nZSV955bm42999c+Dcqcpy8AO7E1ffOPW3v3RXxD/iMuJAm9C7FfIYhuotxjO9/F+fcxtiShwL5hr\ne6i/Hp4nisnZw3xMQiKfB2RGpwAs5gAel/EDpoF4QvNZu644i2EZshQnNuTRx4TTazYVY7bXgQLL\njmLY/MJScCzqAUM03N9vk7lHCLmHOEWkFJ062S9D8xxRLAdgu2jFGHPHG2lDK88eEIw++gyJFwnY\nREdhLztoKmcZOrpOLI5cCuPYj+p4C9a+zEc8xMbhQPG20xr12z4aII54nMS82G6oP7YxhzFHTaR0\nn4wPNBjcpftN5Zb9tuJ0NAGuFecSPFunqVy0viU0Y7dFlIButlNVuYlBXQOeoNZW317bxm+BEWXH\nbfpAHWJcFIGAYrzx2OYJ1PPe+oDDIwZrcdIFEmlYyRY5JwFh2SPeEWfQOhXxzksiH0d/iuMZhz3M\nI+CveNnxHotRvE8RVviLC4tBmSjLJvp8swUcEFBsnC6JZuQ8OpFTXpjCwpCopAauT+zo/edZR79L\nJ5WvEIHM8eohqHS66j/JpM6fKum5tirAy6GjZJHfTk4oZ9rc0tzdBZuKCJxGR+NmuwLb+rLG90RJ\nc1sHdvoJxLUFoEpcT/HDxXNWa4o9Q4dryv3RXgPklF5SY6eQ1fXvozmZ59YqwITgeUt5xe3pGT1v\niJCE/+hgXqSN+BotlYFcyAJROwD2rNdTH63VVQdVxPyxVGiNeACWid7XxEvFDjj/IDRV6JwDMFIP\nck2SMTHO3APfg9cgx23/XNsH7gehJtR/f9LFnHJjbbwRof9/19KM9rdA9HIqQJBw2BCPxDxspwWc\nPBYncXZ/zMEDoIRcxNgBkOQxxL1f/ukP6vqdUXz7J3/8leBYA7nO/JTeaXpKqL0acO/rm5qTZkrq\ng8TsJj3tTRHd/cFjumZxUns0xJjW65rDkCY78biu6UaUD/QGwJIC/7SxrSDAHJL7pVHY3xeBju4M\nkAe0+zhfx2cmNXd94fnndTynPOPqNWFJipERln13C/vmG2KY5Ka1NxXJKX8fVrS34mOvLIK5PoY8\nNotc5fRh5WhpIHNCC8MQpjjEmnJ+UvTS29pffv75F4Ly5MJyUK5evhCUi3PCKywe017MqZb680Nn\nHgnKh5Dr/p1/T/vdzT/634Py23eFi+khTterar+1e3eC8rXLo72eKL4ntLCuaiPnrQNx+8557bvW\nsFbj3vDhoxrHEVf9N5IEBv2I4s60o/ypW1Y/6c8K1RVPap+T+1qPnDurZ/v2t4LyFnLLJyfwrWNK\n48wBcoL7Ft227vXu66qzk+5qUC6dQs4J3M7jTz4WlF98aSUoVxLaH/7NX/2U4ziOc2dTsfraulBh\nz33k6aD84Q99ICgXjmlfaO2exvawphjnpTW+J2c1ps9h3wBbXM7A13jdrqn977WVD+eRJ09mubYf\nP2VCawG9Wzqp2JUF8ml6TmMrmtHxflXtVUUM3FgTum1uUfHzDjBuXUcV3CRqG/vt6YTqtLu3FUKk\n4kxJbfftNfWjm4idpWmNs9iu+ma9jz2XnvrYrasXg/JbN3R+EmvTac6LGGdcJzOZ9rDXE0LLI8f2\n8b2A+9kFzDOdru61sSHM3de/82JQfvjRZ4JyBftBtR29S2pBsTWR05xNLDufIb43j/F5+d0lhJc6\nYF8+jrVgArnSewHOcJbz3wuPlfPlmM+RM1hTT0wq1h5eEk7wxZbmrZsr+hbx0LkngvKH8e3i8lV9\nK7t1S+Oij/4ZrhW1Qraovx84BqTou68KOf3KxVEuGCPaCeOJmPtprBcb2ORj7rxc0H/UY/rtjQq+\nRWBNeeue+lIJWPrHNNSdSWCkQIYL/SXHfFb1cSiH+TKJvU1sN2xjKv+imsTx8d0sNqm59pd/4+8H\n5WReD7exqTZcXVP57j3FzfW19X2P31sdjeMicOHzQE0dmtd3z1JJbZlKKeZHMI65/skAU7+0qJh/\n997doNzuaK7vY3/Mxz5xGHv64yNQx/wvA0wmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMpvGT\n/dGNyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8n0gHpf8VKHn5Yf0sdWngvKr78pq6jprOyn\nIo5sgZoNWH0B/zR0ZF/mxFWemZLtUAf+gcM6LD6zsk9KJ/TbCiygM3uP3MPvIkPZm3WA0aHttH+A\nHTVtmiMpnJOGfVka1qOwL3RhddSGpWqtpTItnt2M6ildkMUeLcsjnu47zMOqqa6yr0dwkp7aJAXr\n8FwMNuJDWKTu6Jk335B1XGtTtldx4GKytDPcs9Z0l3VuCnZfJdRNztM1Jguylnt4SbZ9168LZdCG\n5b6POosQtQOLQj+E3YAHHW2mYCf4YIZT77+GsEKPeMAMsB1hpesQCxJXX5pfkI1cAji47arabLcq\n/7IubAtTsBV0e7J0dIBvixdlX3byuScdx3GcTdgjdoDImJnR74hVaXU0thPwHcumgXKApVyzo/F0\nCBZxk3HVjQckSwZjqAVf4kxWYyUNxMepw7I6fnJNtv9fe0MWZ1UgC+Yn9dv5IqyOaUkIy8MQcoiY\nswPwd13gDHp9oT/6wKvE96zm0GROuaE+RNxWqw3b6gOwNMQldYCFisOisZDT+O609VwTk7Kga2Nc\nVvEenRqePTre1v20bo9ifuBxD8e7XVp/6v0TsAP0EA9jsN2bnNR4mpiQTd/ta+8G5fPnhYlbnNM5\nWYzv+F7MHAAL5frqs27I5V/vEbL982A5HIW9OTpqF+3bQVfKpGDriX7Vhp13vQ00FfFVITQV7ksL\n75zGdykFhElXv+V1hrCP/Zmf/5Wg/PL3vxuUr1xSHbPdZic1pidKKtfrikO0355bWnYcx3G+8B/8\nR8GxU2ceD8oc/pyp3BC6A+WQJydxVPp1BHMbr+/7+5/PGZB9oY9xP45ivfSatI+HJSjst6NRlUO4\nKPSHVgV4TNSRl9F8kp1S3lMDCqYDJCcxgG0gWSN7+aUHu3D++xCDrlkHagfIlsIkLO6BROs2FHdj\nwEoOkCO3tm4F5WhSFsVuTPGI9dpBvrpxT3ajuxtCwayvqbx5T7mBD4xiC3Mk58JCTGUMY2dySbEv\ndUh5oVsFQg/2xm0EHM/T86cyioOZ6dFc3sCzdLdkrZqIqI4T8J4tIK/IASG7vQUL2AHOSSJOwS48\nGUf+7nN8A5PmYk6B1X8hM97/nwufqFfkMbm8+uHcnPLPchn5CPrw9g7GExBDfQQmIqAmilj74Hk6\nfSKl1A8Zy+/P2Z3u/hhF4gk7sK+Oe8CdJdReGfS1ArBXuzXkzhhbRHJ1YHsMZ2QnB1REE7kxqYRE\nUG1XFQNOJhUnikVZhDcqGqPMexM5xYNqRVbOxFKmkLcQ1dMBOjRG1Fhe903CY/l+LK4B+byxKgvj\nqK93zef0Hv0usGRAmrawLu0B7+Zj24Q27BOwZ8/C3ry8o2smgGXhnHJ3TWvTsVSMeCkePwgpFTmg\nzN8egHQKnbP/dXzYe4cwUfvhqHgur0ekFMtcvEf2P85cysU90xivUZwzeC/28SbTe9Df+9wngvIf\n/eVrQfnhZc2FPcSlq/eU05SJlGKuC7yUi4kgElNOGcXAHyKnaAJrxXX6n3xTeIiHjoys4uOe5h4Q\nmZwt4HU4L3MBs1HGvive78wRxe/n5jT3zPSU75WA/c4XsDfsEiEB7CLKEyXtN3DtXRnot8w/e5hT\nPczrUVd1E0XMmMzrmTtguMaw5m8C55qO6vqnD6vNj54UgubUmdNBee36aD2/evGbwbFWVfPi8ikh\nbRI1IJ9PHlI5rXYjM3UGe1+zmF8/iOdKrem9a8CNxNjP0OaMm8xJxhES/o03tVeyvCjc8+Lho0HZ\nP7QclLk/mC9pH/CDjz0ZlONAJrjIb6bnhVv4h7/5nwbl8zdvBOWvvPhSUL4eV7965/Il3XdvTru1\npXxsZkHroV3s3VaQg+3UNM7TQNvPzeu3x46fCsqHZnSOO9Bvb17TfRdixMRpnEVi2neKZjVWoi4Q\nHzMa07voKAWMb/8pYSk2zyhvrG9rr/XOTT3PnetCPRUjyuE94LQSPbVbGsilkxOqh298TQioeF74\noRffGl1/CQi9zz4ljNS5Fx7W7xS2nQbW3idPCWO1u6M6WLmhnPaH17Tmabd0fID9sbinPYdcVs9z\n5pyuGQXibggs9Djqb//yrwdlrhfTGE/cF2239D67Ze49CDtCRBsRukV8K+vNCp9DCmsM6xrOo6cf\n0hiZntj7ra+4z/VkF2uTHubrJva6ub9aaem3beCQF6fVphuI8QOscBtA3PaAbSZOPYU9Ji+uua2L\nPX/G8v6QaCqJyJcpzAm9vt43y3Uqnq1RVru5eP5MSucngFprVjSQ6g3No4nU6BlSwI/xG14LuGV+\nr+D3XA/rogS/HXIOI2Y9tCPr4PiDary/MHK/OIGygxzh2rW3gnKtrj75mU//YlD+8Id+Oiiz761v\naN+wXkNcQh7GGnLxDLvYw587qjwptznax1xZ13zQQd+sYjxVgOnzD/Au2ShzwYjvGMSEYXhEO3rG\n/+uKzv+zG7rO8RxyJtxrRqHcOTGLfUN8o4jgxlV8G3lnV+W3Gvi+j72bc48oZs0uCa3Hds5hT2Vx\nQX/Hcfa0xhzb7fZt7Ruv3Bn9Dcj2tvaRtra0L3v16tWgTFzZ7KzmrWkgavN5jf9UUv2mdACmfnNr\nOyg3ECO4FOEgdZ0D/uE9aLx3XU0mk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMpjGU/dGNyWQy\nmUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8n0gHpf8VK9mGwLP/5zsrTs1mkvDVughGy/IvBhavVk\n9Uc34YkJWccVga5oDmR71IrDpjwt+6SOL3shmuhF9+zAkknYh8JmKpvXs7drsBmH5VAcduGJPJA2\ncN2ixXUbNn5rdVkdOUlZGsUSsEYHjsqH3WcsDRRGCvel7R2tl11Y3MGGL+2pnryIrJqGQILkXLVV\n7ZbqeOOCbOHcjtphelI2VrWGrBAzUT3DoWh27z32t7FrAVOwuiFbqsbFK0G5vA1rbyBGWrTwcyS2\nCcgEIbvCMDoDaKqQF9V427/162oXLwnj1iQsQWGvzr/Pc6M6f3JaNqBTE2rf6zdlDXZzRfZ+p06p\nPXIzsgOLZmDfDvtcJwL02OzIsvbomSPBsZVLQtNt7sKa0INVMJAUNdgm+n21cDYnu8gBzvFC1uUq\n14Dp6Pf0rqSnLB3Tc0ajsNuDDeHDy6qDt1eI1JAd67kl1XESNuy9zgF2nyFbczw+cB80OaSdZX+g\nOhwANXXfFncb6JNKTXGYOAvirSJ47+GAVpOwAcT5XZyzXVbsI5aG2CVQB52NXfXpNtANrS5H+PiJ\niJ4o4knIahqByYW1dwz9IWR5F0I9RXE+rR51rxrQDy20a5RIi4H6Q6kw6kudlu7T6YU6G96JyBS1\nYzqhucSHjaMDq/MELExBRHOSpB3AMjeKvpQCBqjSBMoKloikDcRhxZiM6vwC7L9jPbwvrNSJBXvs\nqWeDcjoj++HVFVkOs6myGY3LOzdlbdur0d5U5y+fPOs4juOce+QZPbuna4TQB/pZyKqb/SDUJyAi\nQHjNYX9/y9hYdP/r8ClCKMMxlJeRjXO3pjERCqRDYnxgy4/6Iialj/rq7yqmxcB88WG76qKOGkDm\nRDFvuLDE9fewQhHkbMxR3SjzUj1jj7a3GDc9oHNawNgkEXd6yEs79dtB2fGUA2Smj+v6iGv1suaQ\nOxdkG7q7phy8jbgyg7GI1MNpIAakgX8CSdWJYYBHgSU8evaEjg9lC1+9q3fptPTuMeRC0Zjap7PX\nF2Id1UcUmWOezsWIg3lVUyg+enxeoMgyyGeY+3MuoLVuH0u7KOYIL0XMnjPWimAOYexKpVV5E5N6\nt4UF5Ctttd0QFte7wKp6fV0/m1GbeRh/xKLFsaYM+c7uk/YPiZtgvOT8BHwt7Y8TwIfFgHgtYS5O\nJzFfwy4ZXclZ39R4ijN24HH7wI2E6hvnZAsaNzNzsuuPYUKuVTSmU4ihLWAxdne0RuOzJbD+aMHa\ntwG8XxEDJptWrp7kb/fWhts7ysdZIVOwJY6jjZtN9QkfyJA+cks+SxfYtwFzNFftXC3rXT1YS8eA\nLBgMgQhzx/z//8SNlveEkToAHcWYEz3oOjju7X999yAEFdOL+7kj73Pge+y/zgv/FvM+c6ykXurw\nSSAbksAGNvfPmUymB1XSUWCazWgN9Xc/9UJQjvqKLV/6zg+D8r96XflWDWvkXeAYQbF3IsBRElk1\nwJq6h3IXaO5vvCGc7n18YoMoa+w7NLDneeSQxtaVm5oPNnYUp5MzzFf1XLc3df70UeV13/3ml4Ly\no+UzQfn441pDMcUnUmNmUnPejRXtLfpDvTcRkg7W26WC1o6+o7Vgaqj6fmpJ+6t/eUnYm77LuUj3\nmi/KIr+QVfvHMRfOTyq/9ffW3Fde+0FwrDvQWrR09KGgPJtT/PJRCQNgkYZYZ2wjz2yi/jysZ/6X\nsnCrq8ipl7EnfWxOc/MJILm+c0X5+D91xk+rd4Tp+vb3Vb+fBYYzPyEEwmCgvVAXaOIEUPcu8hsf\n2BkialLIh544p/786oWLQZnfIGrAna6VR7nj1q5yttVdIDXa6nce8kZiXWdmhA87ckT7nI+cFVZr\nuqS+f2dH+d7KFY3j/HH1tw1gmN22MBTTc0KApLGnE/NUTx88o/6exDeEyLSQXJGvfi8oz/m679uz\nwjXNzCrXrV9UXUbmNUZbGGe5lN6xB0RKIadz/v1f+nRQfnovlixcV344eE17PsNzWjO328jCkR8S\nIXvokN57dkrxrou9qR7iPNGBHvL9Do7vYu3UwHqp82NAcN5P5YHr7rQVr1o19b1BHDhw5IIzwHsf\nOSysXj7/M0E5ge+RmQwW8AfgfR1f7TfAvnYfWO9OezRfNhv6981trV92gVs5siRkyy7Q811sDpaB\nA+tgH/X0Ub3T1XUhs7germItyLk5D1xwEnGN+MMu3pWoRa4pOz3Nze2e+lgG3y+7yA98h3Wm9z1+\nRGN6vaWYOIGxngP+a2NL46uG952dG+HgDs/pd3dvK563gInsoc3Ce6fqQx7W8/wG4u9PlAoptL+K\n+uOIC4++8R6Loa+lWELVq4rr75x/MyhPTwrN91Mf+FBQnp3VPLOE/p8BMi6ElwrVC/fJdLSLvn32\nieeDcr8xyoOSl4SMrK3fDMr31jVfTqcxn+ITfQ7ryGJWedKWwpEzcHQ8FVW/2qjqua4D/8Q3uoh7\ncW8qsw08uR45tCeRQmyawty8io9ovZSebaWsOLT1yveD8i+ta4wsLWru91z2fzwP8E7FouZX4p22\n9mLe3bv6nnv7tsqra8BSreCcFeWHaSBQJyaAoEKuQrxUNoscDcjyJvZ6XHf/ETgM4aLxceY9aMx3\nekwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMpvGT/dGNyWQymUwmk8lkMplMJpPJZDKZTCaT\nyWQymUwmk8n0gHpf8VLlpizFjs7KxuhnPvFcUP7ey7IL8l3Ypg1h+7Utu7C0J0uhuYysg4pxWQdF\nhrL6q8LSH86JTsyRXdUE7C39Pav9wUCWQ3XYjLstWTOVUrrPRElWjEQqrJRldbcFy84e7EndlJ4x\nVVQ9RWBX7MEqakBiSEy2R11YXw+aqsvoEBZ7sG+mhX48Bvs8+M22+kK45H1dZ/eKrK52V3UvWrXn\nYIkZh81fo6k27LRkp5ccjJ4nE9O/N11YiQ2IdtD9q7AWjAEFwPKwLbs6H9aKLiz5PGJfUE9+CONy\ngM38mNu/0RI4hn4YycIHDfXuwyaQuJo0LEcX52TReOmKLGUvXpM12NHDt4Ly1KxsV2ld6rh4Bl/9\n7b7T9/wR2ZJt3JDV2PWrG0E5m1B7TRZlpZbN6p2iCSAjgOtIwj63gZjVhWVuvQUcCPpeAvZyUZcW\ng0CJoG+k8QyPHhZGareh9pkEfqYG9A+VygMtMaQtKawQEzgO+7deX+/Yaau+d4Fmu7c6ssUlIor2\nnMRn1WAhPMCzREMWinoUIoSSCMq0cRxicFVhJxgJIYp00RYsVZsoj6OGiGM+iG5EDkRD7YVYTrt8\nuuVjfiC+imguWue9c+FSUI7T7nO4vx34M8+MrBhvwf75+l1gAtOYt/rEJMHuMEWsFvusij2gQXzE\n2hQwka0+MT24DDFnLt9b58cjKieBEmCdVWG9DrJEqD8ns7InnF+QDebEtGxdX/3BX+C+GiMbQCOu\nrSo/iCRgM42Y1O3t4YQQk4mIC01PbHv6nIb6xL4/dYb4hxBlLxIyD933fDeEWkRs6o/3WIynNA+4\niHXduix5u7AC9mDHGUWu46U15xBH1QJ2pAM8ZhT9mfhP39d9idjLTmiu7e/54ruIlxEgCHpAlzY7\nGCuIL5k2LIFha9/r65yEw/qQz6mX0/s17ggpEI2qboZx2Yr6dc0r6Z5iRiumZzssx1+nACRSZ0Dk\nGfBLiJsJ4Je22vqHNnPsjuo1BlvuiYKsSNnmvYbs1/tgpLTXVh3HcRwPeWsacc1LqU9EUH8ekLMN\nTbkO6KlOPqbz48hnfCCHaFvtAxc4wDku5v0EUGP+cLz5Ur0+fZlpr451Ct5tckr5UwW4o0oV7Qi8\n4RA8CeYgLmyzvQjXXOo/8fiPXjofjKMFFgMxOxqaw3QOLXCjaLtZ4HnvbqgDtdCBGLOnpmSPX4ON\nv+MDawysXL6g+PL4E7LfJ85pFCrfqQAAIABJREFUe1N5vRPR8S7s6ddhC9xs6l4TE1qrk+DTBF4q\nnWYcBFIU5yRgXdzdW9MM0cZzsBYm/rdc1XiOc70fJTpOz9UGwrKJuE0rdWJjU8AOuFwLYs5mEkwE\n7liK/Tl6QJkdjuczXwDCM4yd4vm4b+Q93DeEo9oHWRU6N7L/ud4B94/u/04hvBRix4knZWt99oj6\nwPcuKAaN986Aadz1e19/KSjf2lYc89FxP/vMw0E5D8RtEXuUjQ7Q7+jzHa5HI7SMV4waII/3ML64\nD7CDddNmdXSvTz0jFM7XXhJeYL2mZ+H63hmqXN7V/o7naGylc6eC8iGgbqo72id+q6a8/vY7mpO+\nkFO+2gPKJw80QAz5RrcLFCGRUtgbSmCfMQUkUHVHOcnMvObXzz0lvNPVu8IPXd9S25Yw7z4BVIiH\n+u4BKUOs96A7aococpbX3ngrKEdn1CZzzwq34N9ZDcp9oMw7x1XH34lqHt9EJ9rGsySAkRrOaZ/v\n7RW1z9z0clB+8bYQW3+BOXUc8VL/4S99ISj/H1/8l0F5oqB6+ehzPxWUI8gtOeNzn5z5J7GjDvIa\nB2ur0D4HxmI8rj6Txf7EfdxxAXlpB1g47rslsBYtAs1w6JD2YB9/7GxQnp5Uv24gT6pXgX6t6j1W\n1oSw2NjQ8dwh9bEFYEzTiF9M0J45p2dotZQfDj29d21H18mk9TznFrQ2ffGS+uRuXfGg4isPP31c\n98rPa81x+VWh+55+SHHi2eOPBuXI+VHsqbYU7zqnlDN0Mc4c7EUUuLYDqZK7KRGsS5PIPxPEMyOf\n6iPn7AKfEwHK2MX+qpPDHv0Y6oknhXVnrj/A2moAfGwTC+9mE+2B2LWzoXhcqWhvrlpWbK7VFNe5\nfmng+n3swXSBaQxQU9if3NnRtS9cFgYwhT3VQ/OaA1r4lpPo6Trb6L9PltTHC0CpEGXVAFZuDvNf\nHqiWWFK/5fo8hN/tqNxoaBzs7Ope3Lc4dkRrtHZn/z7JOPTBp54Iyt98UzlBEWtWbJc6fewh16rA\nT06N6scfqJ64a8m9aiLiQ3vM6Gce4iaPu6G95/1/S4Vo1e7+ewfjrv13bhzn2pXXgvLFS+rbTz3z\nuaB86JBQU8wn2b6ZDLjt1AH15Yb2rCWu5Z/dm6ejQMe9+wbm0IG+NSbyOj5ZV7yIttW/nvjoR3TO\njL51vntBiNLqTeVhnq840sa+awWYwSTyhCTW0g38EUAxq3P4faPcUyzfjQG/1tEYavX0Li5QzZ11\nzYs/ePlbQXlp8dd1fqjuHZSxH4q9Fu5tpfbmupnp6eDY8WNCJ66u6Xvy7dv6hnxvVTnq7q72lf9f\n9t4zSLb7PO8853TOk+fOzM3ADcDFBUAQICVm0WASk0JZiZS19rrsXdXuVm15a0uqrfUHu/bD1mqr\ndkvlsqySLVVZa0q2ZFEWRVESJAGkCSaAyOECN6fJnXOf7rMfZuY8vyN0m/daEtSy3+cLXvQ9c8I/\nvP9wup/f1atXcbzeUWWAJcsA48mxMDJ2OJHOrpAIuLtc0JvTjclkMplMJpPJZDKZTCaTyWQymUwm\nk8lkMplMJpPJdJd6W51uKviWYWte3xpdO6lfKhTf0PHVlr5dFZvXNyaTSX1DaXOgb2n5ZX1La21W\nvx4Y4ZuORXwDeKnAb8vpG1j3xHT+S7uXHMdxnBp+BVjCr0gXc/oFIX8B3uzol00bdfwSkV9Tzun4\nDL7V7CXxjSp80Z2/mk3hG2O4dWfk4VvNqN40ztkfqR4KMX37zYurbBJwOXHwLesULja6quM7u7rW\nTFHfSHQDfFvU0TdK/UDf9o3hF86pIn7Fuv99yXhD33jN4VdlXh5OAMv6xvkMnEFefV3fTow4XkS+\ntaaP6UjCX+7H8Qu5yPGRr73yPKjnaRTa6gjflPbgAORk8A1gtHmWXQLt9tCSvk2dxK8PKzV98/nV\nN/QrlsOHV8L4VB5tD/XqoN+NWnv9O1vQsYeO6xxt/EKKxZ9gm8G3kWNwdnLwC9ckfl1TQo6IoT0k\n8av1dBq/ZsevUTr4hfUQ39itIR+wbLK4t1Pz+hYoHRe6cJHht4B9OEDxly98xo6va/n4le1ggF+k\n4BfiOzuKe/v1wG9/d3pqH3Te4vXpuMLjewM4nvg4xqNLlp4vQwccPHc+izinXMa+zmedRtGBhGPV\nkL9swvN7+EWZ5/HXSuyvaAPo6+4EZ5Lj+FaxN1S7LV+RA85mTffz6OzeLx6q+MZ3bANOMUM65OCZ\nUBc95Br8GM6BoYcTII/E8dwJfMu7i4RcyOt+Kk31lSTydw4uE7MF9Y8s3TJw3YC/YsRPKHp9Pdc8\nvqHNb3wvH9KvOD78t34gjF965uthvLOLX1+s6jylRX07/tHvf18Y33vmEcdx/pzjDJr4cKT75S80\nksgFkW+lO+PFz/lroeiP2Ok8MuFM/KF/7G2dct61enBwcQI+szf+c/4x+lMKvy5Ows0s8JWnW2X1\nsx4uO8J8K5NXTmvW4YyT1hhZXN77JVKioDlQr4VfTdyWS2QypbHKh6NGra7+OsSvstL4NQAdD7v4\nFdWgp2sNcc5YSrnDyemXWV5fx6eQv++d1d8uFOCyxF8V4Cc0dLui0VMfk+byDcWLgcp+F7+W6NyS\nS02yoPn80mE5VqVSGo8r+NtRfy/HFNP4VRbHPzgo4MfKEZeVegO5Kc5fHKquAjguDOGcRCMGjnP8\nNUUGyTUJt5RWb9qdbjCJQxvgr7hHaG90oEyi7EoTfqHZhSNLDL8IimPewfwZ56+M8Ctix4FzzH4O\n5C/56LTh09EGldds81f2cF3EL3NiIx1zz6r6ehXrow6eaWVZv1BcnNfcvN3CXBE5O5NWnnr0HefD\n+Phh9d1GXX03wE+hArhObePXoXQfzMD9aw6/cuIvS2sNleUIrXiISUEbx8eq+nXTgaviPH6R7WHw\n2cJ9VXGdfBa/5sX8q4e1Rwr7BisrWnPwV6O5nOqqibk/XZcSqHP+uj0WY3uaQtEhhr++ZwK6Ewec\nyPE4f8TRZsLnvC7dbbC3EXGvOcgT3oR7nHRfnMdEnCTHz6N5v4tnNX586tNyA3jxyuthXO/yd6Am\n093ppRv61Sf3n556WfOtS+vKdfNw/stiDVBIaqyoNpUPWxHHPB1fgqtjABcyH87SJcwvb1Q1qa10\n9nL2T35ETioOnHb+5MVLYby9rXvPpJR3Yx7GLYwN80sa3ztd/Zr+6999NoxHnsa/Hfz6/tLtTXyO\ncYX7Fhhven24ntLZE2uuOCapg4ZcC5p97n/q/hu7Gh8yGY1Fawuqt0+ePxPGj5yVC8gQ9U9HS3+A\nvZb9+0+g7huYJ6xvq8xiyxrPvIESWyLQni5zr+/r+m2sh79yFW5Cq8qJxSXdw9eu6fhBTfd+saZ2\n8f3HtS8xjboJp6k1uLN87RW5npQ7mFti3KDTaBKOIl5kHIVjMeYmHton93eKM5r7PP7442E86MN9\nevjW8SeANwHX9Ansd6ThKjg/rzrNos1yb6rZVr9ZPSzr0hzmzoOR7mt3TcenC5pjHT2iZ71+7WoY\nZ+B605nV/cTheBlL6t42v1/7L3S/XFrFfG5X75POfFYOUI/CRWVpUbnEhXtUaeF4GDt417V0SH0q\n8eDD+zepQwd0n0bZb2wrL2xeVG4v5HT9FN73jPC3XdQ3Xe1HyAs+nETiCZVluaY2zf3bbgcuPFOo\n3/jVfxbGreZ4F5tOB3QJlBFdhCN7sCwjrDvj2I/lK6CZkuq6hxzLvbcU9vkL+2sGkh+qVd1vH/WV\nCXTNk3D7v3jpqp4J+wq3ymqD7R6cWoa6r3xS/f7Bo8odK3ifdrmptvH163on67rI35gD9NnesA88\nHHAtDVpCXmNLmw5QcG3lXnUOe1LdtvpxKi3HYq5HY3Drm1vQWra37yqV4BqbTmQY23y6/0WWGMjh\nEacbHcO9+InuNqQiTNibjbiQT7lfJh31/ZHG9u98+0/CuNXWMR/8gMaqFPdL8Zx5ONAUCiDZTCAo\nRAoMn9PZvdFQ+9ne2ftOwgCuJ/Mr6mfLh4+HMeeEi7joXElt6fOf/8EwPnde7kxvXngtjH/h//pF\n3WJczj8BnLPnRnj3hX3fnW0dk8G8ewAXvHJHfaiCPY/Btr5/EWDvy81iYEJDHyAP/tGf/X4Yf/xx\nORSVivwuxPg17oj7eJFj9q6VBnGEc49SSWPekcPq59Wqxsj1da2Lbt5WntrYoBuOxradHc17RxGi\nwthbj/S4qJNP4i3H/qdkTjcmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJtNdyr50YzKZTCaT\nyWQymUwmk8lkMplMJpPJZDKZTCaTyWQy3aXeVq//PuzCruy+FMYzC7L3Wzsqe7b+DVkgFYuyEF3J\nK453ZEHUb8giqNGX/VPfkzFQAnaAK0nYBA5kjbTTkMVgcbRnHeR5sj261ZFt27W6LJvqDdh7ApGR\nysJuHk7WtCmjNaAHe6gU7J4WgE1yYXXXhWW84+r4EWyPCml93oelI+1pA9jvwwnOmXOFyOhfUTk0\nNmB3CZtDL+K2BJsxWOU1BrARhwUdXA6dzv55crR4btNaHvcOhFB8RuVX6eo6Pn3FiILCPRJLRExH\nhKnhjLfld4Ec8vuDscdMi1zYhRNvE/TUhl3YEDpok0wbHmwWZ2fVd1NAPwzQmC5eVd9aeUWWwgvz\nsjacPySsSoBOMty3fYvDpn7t3lNh3AOqaWtduSMGW3IXdpnEFxEfNqQ9Ir6X2OsRraQy68OmstvT\ndR30UQc2ya22ju+hncTQnmdILQM2qE8kAuwMcTsR29pYXPU5IIImoN2k7qEK5MlupYnj9/44gmgj\nFgkIni7qOwG8Bu05U8nx/bgDfJbf1PnzsLYeopO2YGnswbaW9obELk2jaOHKHBnBAcGicgRERdyj\nRTEwZx4toFVGtLFMwDr8c5//u2F84VWhJf7f//OfhnEwVP+qbOy18x6sGLMYn+Kw6++i4QVk8yGO\noy3TprrfA+KBbQb4DmLWiOTqor8S//TuRx8O4/It2f7PpHU/tZaelTjLuZJsLXfQP9bWZEM5Oy+s\nB22jswVZLG9dl7Xhe39ANpT3Pfyo7gcWzkeOnAzj1L4FI9s4Lak5f4jHYV2Muif+hG2L3oo8PoJI\nmuC/SNvqCL6K5x9NN1qBfYXpm1jCYVc5sN9UO0nA9paIJuZXL8U5nOosAMqE2DIXdrexhD6vI0/H\n93FphbTGmOyiLDjbLaCgfFn3dzAfb7RpA6z6TRcxxnSAVAT2qo058HCous4BCTsaXAnjBDA2hZLO\nszKr+0mndA+tBnIM5rox2NwPYNd/Y1t5cC6re0Z6cup4lmpXZTnYUZ/uwYJ8Zk4WyKOabEyXsnv2\npjM4tw/b3Exa95sp6B6rdZVrEkjFXBw215yTOLpAwkNdjdDvgVYJ0F6JtBkh5/d9LEamUswhyP34\nvN2SHXUTlu609s7BFp95qe7peCIEaR3b6gCBCDv7JHBiHu7tYG7CNQXt+okVozU17as76P81IFNn\nC7p+GvcyW9SarIa2ly9ofZuBhXY8DkwWmGcrhzQ+cb3dh7VwFLejgmrU1FfywMP2MVcZYi7Nekhh\n3pZBXXVQ9nlgnFLIoXXgAA/wB6y/LhAHDbQVWki3gBVJYc6VyakMjh9VPmWZ1ZH7bgA7t7ujdUAC\neSoHLEunrbGj25/ucdGBRXsExRTBQiEmjmoiUuoOsE8Tz++OP56VfzCAT0RKjW/LkXiSwTs3b9Cu\nE0AfP/55rU2/8x3N937vqxqD+8MJXtYm0wQRtcC5eK8HZFBFtutn7jsRxmmMS12srcrItQ5ycGyo\nOdmnH5VF/nZdOfPVi7LF97BnlsNe6/Li3h7vq68IkxLHWu2eZa3PTi0qRz75zIth3Khpv2g2txbG\ni0vaL3rqy0+F8Ze//Zyuv3xc11rVWq0E9OaVK8rflbJycxBoz4roDIf7gwHwojHFPezHDjBX67sq\n428AD3JuVfPM+08JKbWItX02hSQK5GQLKCvuYe1u7uFlr1x8M/zsyi3hn3LAefncH8hp/ekSC4Cc\nlUTuI7pslNU6uQ70T6Wia61iH8/HOqoIBMgQOJhp1H/7D3/2bbtWBEGC+igAn/rzP//zYXz4sNo5\n//Ygf3Beyj2UyZho7NNxD5PrYbS7BnAWK/Oaoy7l1JY3sd7auHU9jBNJtc9uTZ+/+A3lqQgqGXuO\nRGEQybWJdl6rqq+sbmg9t9NU3nzkwQfC+Ox5oabWlvU+pLKrcX2hhBwaKJ8RMXxQhon4+L2sHvZX\nr165GsY3gRIpFrAW7WpOm8yqjOstlevtXSFYUyPNSwdDtZtKWeXRQB5ZXlDfrePzz33up5xp00vP\nCyfIvdMkMCXEiBBfkgHeaYh97T72joksTmM/jG0+m1NO4353t6c85kYQc3tj3U5V9VvBvsMIY+QW\nMIBP/Omf4ZmwvsT4Xmnrb3e21cbPHtO68LEHhdA+fOx4GDtJtaVf/vKrYdzpaAxOA1vp4p3DCBgs\n7nERL8VtwBEWBSmMG8T7NtGe20214d72K2F8+6ruZ+2dj4TxyZP3hPGJkxpTX3tlr73EHNWlF3s+\njAfId9zbJM6Idcz3SZE9zyH3VJ3/KsS5aL2i/P3d59RHFxeEY3zooXfqj7l3jOVROqM2WSqqDXvc\n3/LHr6fY71kH7a5y9rXrNx3HiSLoCsi1M7O6JjGH3DM+dlTz0hWME9xzGWJOffJeHV9vaey5cVPt\nrdZSPmhtalzs490h7yG6PT9hXTtpjcu/xYnYX199Q33u2ee/FcaPf+iTY8/J+yHue4ScwfdV487B\nf4/HtRdEzNjSosr75Em9L9nZVb64ckX70M89/90wrlSVWz2P77qZ48bf28T50gSZ043JZDKZTCaT\nyWQymUwmk8lkMplMJpPJZDKZTCaTyXSXsi/dmEwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplM\nd6m3Fy/lyw5puyLLu42MLJNOHjkextduvBbGXkY2TxnYlqbwvaFOVXaG13euhvHcgtA1azFZRPkt\nWbpVe7CYhz3hhd09S8JN2A7SQn9Iy0dYSNGukeioHmzKghGtjmFXlAYaBFbyfVjoHwLKYLMFGzYg\nQBJAE1QH+nzo6JxxV/c5l1Q5LfqyphxsyjJvJJc3J5XUedrAEtU6smqKAQfQRbl2gZEZtIF0gI3U\ncL+eR7DuHwWy5qriObYHOl+zrZu8UZX94gQqRkQR3FYEhYE/Rl0FQDH4YPwMOtONl6JlfIy2sLBT\njAF1EyTGI2o8tLHSjOwqk8BO+bB8y8OafXdLdpUvvfhGGB+pqq8VYHOf2ceqFOdl3ZnMw864qHY6\nD8vOEazkA9jd09ZzCJs5WlN6sC8LYDtJ9MhoAlalA2t7Z6jyaMOalfgcF/EMcHCtJrFvulYK2BAf\nVm0urEvzYGoQxTQajbeEJRaByK2Dcou4wOGajY7OUWkqzgAJlEU8GCjORKyTgcfDpdgvd4Fc6CEX\npzK4d1QQ8Q/TKNqc0sePyImYRyyFnof4tQ7acA5Ws27Exg82oLBczOXUzo+dkJWu72qcWVxGP9q3\nPe0Bi/DQedl4ZuL6/NkXZOlHHBYtdmPEEbjElo1vj/GUnu/MqeNh/PqbQNYdkjXuhx//aBh/5tPC\nOX3xV38hjPMxoNhQD+ceezyMW5X1MG73r+oezsq21HFZP/p4eVX32Yd96/3veHcYP/ROxR7qLYJA\nPMBKRewfwUWM2EXS25F2jeO/bx2xSiQVasK46EYsqnnO8YNtbMr7YjJDFI0+98kLJSEN/qcBxpNB\nF/MtzHsHsF11YWkcByos6Cq/ESWQyur4LvJto743x4llNJ7OLwspkF0UvrVd1zFt4NFYp8WSxlHa\nXQ99XT9VwHjWAUIG5dQuax6YzOicM4uaZ8Z9oQESQ9mAdok7oFUpmhgxQ/We2lWnr4NOH8ZcOqVr\nub7uobcpfIDjo35qN3VM50YYry3oGedKe+UD92Mnra7tZDLIBUC01Oqq78UsrWGBC0yMt43uDXQe\nWpf7OD8IPBE0wAhrjsCd7t9cxPA8RHgO0MZ6QKTtwD5+QGwnLaCBckzG2WZUB22uTTB3TcEGOwkO\nLs95MGZH89x4+1mippiPGy2sZYA+mslrnsA5ZBbozTryAuf4t9bVxoklXF4SCvH8ffeG8ea61uQs\nSxSZkyMmDvP0NtZflQ2tsRPoGEngZ9nXXcz6aOE+C2vnSP0THbpfzHGHcyXUNzpFHkiGHGyriY7i\n55mU7ncXVu3Xb9wK4xrm6VnMv4ol5RqOI+W69kC6GBemUmzPk5BPEYzUJBQUz+l978/jE+JJ1xqH\nvpqEw2L+m4BNm4iUiuTO8RbUh85qnfrf/ZyQppXad8L4ay9orTsw1JTpDhTFuxJdAJQD5nNXNjQP\nO5YH3pRNO47ciLlaFoj6D54WfvD6ptptbV3HNLu6n3ZS9zC3n+/zmF8vA9W721WeLvZ0jtwI6D/g\nGwY+c636WS4t63kiRDM1zd+qWY0Z6ykd7xMXNdAYtrml9esQOCfuBzGv92BPn81inMGzJNNaV3/t\nqsbapH81jGdzOmbltObzlQ3NSys7qvN0cT6MPcx5mrW9caYKBGQD6OWnv/p13WNedfKJzwgXcM9J\nXd/Dmuf7HD33U8AmrCO+dltr5mtbGjuX51RvNzBvyZXUFi/cEPJrGhVZF/4V6E7QBbyHKvZOmSey\neF9wcPzOjvIC15mR/U+Mi8R68vMEsDuRvUSiqufV79l+cll9vjAL3FFd6+fr19V3l/LKTZfeuB3G\nDvYQt8sqgyJQp3UgzEol9XvusziYG5d3tVa++IaweA7mnD289xghf3A9HThvfY8Q8D1QZH02fn86\nm9f8l++c3IzKjK+TmMrycZVxcxdrzb7yQXlTZTkHpFQUSTLd68Us9jD5HolIE65lXH7e4x7++DrA\ntoLTRBvjPmagJuOUZpXftm8K7bcI/Hxxbi+v3lwXgqcXQephrMf8s4l8mUZ/dTAmXamqETx5QWvj\n5XmV0yz2Ubsjje/Pv6D7/e5V5QkXY1gswB47yoxthuioEbciiSuMqe96LnMJMI1YH83Pqu9+/id+\nOIxTWC8uL2ksXFtReXO/PL3/PmITa+Ohz/ylshnifmMT9rCTcT7HpL1QIpb/Ikjh6eZUVTAOvf6y\n5hdXb6isP/CBHw/jpSX1FXfC3jEx1Mzf3N8ZAGFGJFEs8j4I75gxdm5v7c3DWHWlQ8q783PKi+u3\nte7n3vvhFR2TLyr28Q6yUtaeSLmmcrq+rhx8+n6tF5944o/DuI+9KXaoIBjfHtwJa1nu2wcTXozz\nY9ZJp6Mc8MdPfjmM3/+ej4QxMd0B8gTHRdbJAb7NnbBUD9hVPK63gabD9ybiCe25EK3uov+tb2je\n3W5rHB9OwPeyDLh3erc9cbpHUZPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTaQplX7oxmUwm\nk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMpnuUm8rXiqAVXe3JUsmYjHyM7L0ShVl15WGldJmWRip\nbdiZzmRhZTbUOZcSstfLwXav1pEX3JWurO2rNcVNf8+6P4lzN2AhF3N17lQGKIA0LK+IpQEaaxjA\nCgs14aZ0PC2WKm1Zn9Vg8USDI+KogqTKJgEbpsO51TCed47qfiqyhGrt6m+HqLfBENbrsMzqtmWJ\n163omBGe3Y1gmfRg/a7KoYu2UNm32t9J0RIXFrqwaGy2FNfLisubwktNcC37czZaUixg+elzGJo7\nPmxa/Y7KY+RPuNiUqAOERYKNDEgkj4iHNJ56gr14sSSry0JBdTYDm9w8cAu0+3zp1Yu6ha6sfc/B\n8r5U3EPMebCRpMVapijLuX5XbdBHGyQmJUFcDd3F0S9TsEP2YB9IzkVlRzbxPbTlYIC2h77YaKOd\noM2k0T+SeV03RmQH2nwb9bPZABoHTW9tSXVCvBucmp046pAWziPasu+fcxb3NUDZD1CuuEUni3xH\nF3jathFNVWthLAC+IA+0yhCIsFpLbahIazrUFbFE0yhieXza79EGkZZ3KHcPfnzJBC39dP7hcDwa\nLkIewrUKBVnz/dCPfS6Mb78pW/yNiy84juM45abqaw5jwCMPC0/45lVZSqbq6peLc8oLKWBSam2N\n70m0wUJGdTo7L1TMP/iffi6Mf+mf/2IYnzv/UBh/+jN/O4wPATt17n5hoepbV8O4M9B13/0+oamu\nvPytMB60ZA25sCCET8SeGeW9tHYkjM+8411hfPi4rLujbpAcg2mbuVdWk6yt40BqsL55DrYJHk9F\ncXoqexejJFElAWw2aSVLW9yo1fL0qY98kgKCJAFciAPr9CHwNoOO8r3HBMv+DVxTxNUTOSoJDJ/r\nE1MKlB7+tL2PoOni3uNAV2XRV5xbsqYPHNmcNpvql+ms2i+oPk5xRldtAoFTbare52ZhV4xc3kGe\nKOE50kCvDIFoCrqyoU9nmBN1TK+v89zcUTmtzun4PBAG1UDzg2RPk/jlIhBCwJeyf83O6pyLS2jD\n+/OAFua8cMF1ElgHbO3q5mfSOj4O/ArbDVFQHmz847BzH8WR84GISACVR7/cIAC+MaaxfBpF5E6r\nqfpizqFF/u6u4jzQQDVYHbsB5ltANnaAdul0iVMCggrWvl5s/Jzi4NMU+h8t4yPW26PxuZDP3ca9\npFjvPSKZpFSSSC79Le2NE1hPnbpHSMjZosbjKuz9KzWNxwmURw7z+mCg++mhnDLAAWSy6ot9rD96\nGJd81EMur/xLS+NGU4miB5xBbH+uMEIHpIXx0oJsxvO4ryyQUkMgdYdAFle31YZ2drU/QBRZEePF\n2qqs2mlHXm9ojJidkwV6pYZNhWlUbPyaL8LZnYR/YleJ4KLG47WjMbFW7vg4gkAYg8Ga+HcTEHAR\nv+hJmLjvHceAWD77gePjMEcoAAAgAElEQVRh/I/+Cc7+T54J469+F+vIKd8/MP11anzbIEZjBExC\ntamcs5jA32KNnMEGZDqlNn8GCCAiE2ewNj8CHMlLt7TWy2IMnJ/Z27s5c+/J8DPum7zzvPYkdwey\nfR+1dO/3rGquGMNYUpzT/HZ2TXl3GBDzpHvZKit/f3NL8+F+XeNcxtF1e33stUZ87jWm5jFnPnVc\nZUa8BvchypiTLKxqDHa7woD85lNab7cHuofTSyWdp6xxI5HV/ZeAFS/vj1cV4A/rXd17q65r/v7v\n/0EYv3lJWK1/9L/+z2F8+JDK+CTmU0soj+sNrS22fIyvxBgd1Zp5tq7yJn4hnZ3uOeqdKLrnMr7v\n3glG6k5EvNONG8IyxYFAXV5edhzHcRYX1U5nZmbGHpuK7L3rHol74fGXLgnvfeuWEBxLRWBYkEe4\n93xoWf17/br+9tAV4cnuxzuQM9wLndfa7vU59Y/cPcfDeHtX7YooGpb8DtYQXeTNf/y//1Pcs/6C\neBkvUoWcT4zBR6Ed9LGfSYTFhz/2iTA++47Hwnh9Qzk2nVb/OHZYefBrT301jLe2le9GWJNfuvBq\nGLd6yg3zJZWfPyBux5lqnb7/XBg/840nw5hbMaOhclQmr/l3taYyzSPnzM0AEQNsYLWmMerwzFoY\nrxzR+HbkntNhfOvGG2FcwnhVLOyVdb6g8eywtk6dBlBTDYxP3LO7dwE4cKz112vqo198Vrl85KsN\nfPgDj4bxB06+M4xv11TvTay9+mgnGbb9uNbb3M8mCph7gsRos/33gQfKYB8ljj3Vw4f1zjJXUv1w\nPT1EPftYx3E/dvXw3n7s1cuXdQ7kFDeyb6J74do/gTlOAg3N8+5krfC9P/6bqksXXw7jb3xDeKRg\npEp9/CPCV2ZSGOfd8WuxON5vlEoarxJYZ3WxH8u6jmzXBMHYeLD/fiyGdh0jjhxt0EX9ZrB/cOKI\n5kbc76g1NN8rVzRnuwX0Zhz7d49/9FNh/PQ3hefqd7mvx2dyxiqKR8K7SR40obyjaDt+rIO++8K3\nw/jKVeW4+06fx5+iT0Wwf8BOjbl/fhahS/G2uBWL9fxwAg6rjLl/t6vcSlxm5DsLE/BcwdhP70zT\n/TbSZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWSaQtmXbkwmk8lkMplMJpPJZDKZTCaTyWQy\nmUwmk8lkMplMprvU24qXisNaiM7a3b6swGivXpiVPVMLdrv9KjzvGzp+8YwszuLEboCMUxnKou31\n6m0dDxv4NlAwvfbe54mebngO9lNN2GuSETWCfVqS+AbYl+EQZ+QCOwBMQwysmNFQz0ScSzKjExXS\nsvxezMgm8GRatndzA2EutnZk1b0Dy9MeUDS+r+tWYYPdrMmeadiPGEDpPoe0ZNc9p1OqqwTQFX1Y\nlPb2rcKGPeBUYE05HLFs9Hl5Hc8BbAKxLHSNilhFETWFqg16+p8hLNCHHeA18LkXsa6ePvV66hQd\nWHh7sPqLw6Lfg5W8kyILDXgp4J3OnpRd8LVr2zhcBX9oWe0zndY5F+ZkGZgv6Jyp/H4+gP24l9Y9\n5go63/Y1Wav6eFba/ju0zoTVGc+ZAJouniIGSHXdagO55suStIU2U67WdU609xI8FGkt2ke+84CE\nSCB/+CjLNuwUW3jeYKQYRezk8T+09Kcd5AC2//392EMHIbYrhTaUnSGGi32e+D99TkRRR5eMoBWI\nBaN1ch/lUcN5YnE9R5J1PoWijZ6PeiTOolQUusAFiol2mKOAGClYJMI6j7aXvj8eH5SAjeKP/qiw\nTJfePBvGX/i1vXGg/6rG0Nq22vhrF9TnmS/Z5w8vaXzf3dW4TJ/eHKwb5zAfOHPffYjvD+Of+NzP\n6PMzQkctLcnK2vcxJgzVD3Y2dP+H9i2YHcdxjpzQ2Nmuy57w4vNPh3EmTuAPBxGVfQ74iU989sfD\neGFBdrPEYdC20CNyaH/w4rEUbVZpj5hwkUcS4/sEx79gvENy1LIS53c5/0EZuDyRM93jYgzlwr4y\nwhxoCOzPAPOkSFlwzofHH2G+OOyPR02xrmmN3MY4w5Om9nO5i37ea6otJ0uyUS4sqF03ttVHG8C+\n1WAtnE0DK4a5V72mXBuHNWympPE6ACayB4vP6rquG89qXjEzr9wQH1URq5wwZDvXy8DPJtXmcRqn\nF+j8/ZqQVRkPWBhMbTJJXYtrkdl5VVAMdVvd3LuhXFb1QbTXYKRzMN/OAJnl0c6WCFYsEIZcT8Dy\ntj/U/RawDnBx/GCE44F1TSXu1hj17dWgT9SXxrYKLGIvX5KlLdFAdfTLVlXtbbGA9owxr4V+VijA\nrhvtlvOhCL5x9Fb73DTwG33cSxLoozZQrpE8gn7cBEK00gA+DmMYMZSFvOauq4fU1+nDS/RIIafj\n+XwNYD0WF9VBZmfRuUbKZbQuHmH92u9jvoi1N1EbmTwwVXiWHvJjGWiALua3OeBfc9m9eksCiUCM\nQAGIQLp/D4EP6cLOvQeEVxdYwBHWt/PzWqvMzgqPkEYO8AfElelvZ4uaz0w7AjXy+yyXMToOF9UR\njBNPMwFNxWlBxAt8EkZqwv144z7n+SY9x6RcOH7u4k78vRotqDEmYH/pwY8Imfxz6K/L/8+zYfyV\nP9VYtdtQP5t2xIPpr160Qs9gjpJPYQ2HY7IJ7scpN+fnjumcvnJUDvschbxy1PNX1Caff0O4ijLQ\nQHWs2edyGkeXj++hNiot5e5XLgsh866PCsVx5ZbmrldamkM2Gzr3Y+ceCOOdCzpPpqt7yabVWWaL\nGgcaGEddB+N0C+MTunfCU/9LYY19fEnj1g+c1foyt6Jx4BtXgCLE+dst3duP/ORPhfEPvkeIlN/+\nlV8K49/51vNhfH5N559B/ri+TeQJ9sWCvfFtF7iRNvZruwPsoTRU3i+99FIYf/lLwk79vZ/+iTDu\njFQGW9gCTudUrgPiHoHAbTVg9d/WH2+ifh5+SGv4v0m6E1zUXxZSirp5U7i0SQio7f11XwH7EXPc\nc0Wfz6EPuxPQqMvYK4leX329j7k5kUxxl7lMbebd2Hs/hz669tPaj8qc0jhaff7FMD78xJ+E8ctF\nzRtb2DdsA9OxuKD1cRKYuKGLflFVv0jgnUYJ2DrujQ6x55EERvPgjB6AGVjCRd6RDYDy2VgX/uiZ\n54RuGaBcf+xHhGtZWBTmpNXUMdcq6lsDrM85n0GacLKRJjrdk48H3/nuMH7mm2oDfC/A8Qzbq06s\njb2ErPpFAXsnbayPEmirmRxQh3gHwn4UoJ2Xy8Iqlhb36saLAYWI8+XzOl8Xa9ES1j0PHNU9Pn0J\niFIghQfAExKxxX7gok32sd5xR9yHD0Nnt6ZzZnMqvxiw1UNvwtwc42ivw3vA/kRkHafzx5E/mEtG\n6HPcR0kmxu85ZvfLsN/HS4fIUgH9FvXnxcbvoxJzFNnHdbkvP/ZWHK4beAjfqk5374vq+WefDOPX\nXn0tjE+c1Pzm3DkiiKToygprKNT1DBB4fL8TJfyhTFF/3J+IvDM52DMLuNenv+M+C/fAF4CwX1oA\n9grvUarYs9rY0DyaqMAjxzSera3pHX1ERC/fUYPA+2m+liBGDed08RojwHgWYP/bwV4rcYxPPPnl\nMD59r97JsAyDgHWC7zns9xeX15zQ+CNQdrKmsC/famucu72ud1RXr2ndUq0qVwa4GNdXkSKOoLr+\n8zXtOz0mk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJtPUyb50YzKZTCaTyWQymUwmk8lkMplM\nJpPJZDKZTCaTyWQy3aXeVrxUAt5FA9g61eqyACwXhYVp12D/M1oI48a67M7yBaBjBjr/UkZ2iR4s\njTa7sq2vd2VBVK3rPLT3PjA+a/iwmRro3gtJWgjDRhr0hj6si6qwmvborkzsByyTiLShXZYH+7KF\njOzwzuVkx1lyhPhJ+LLAqsB6qQOcDFEtPViOdltA17SI0oFNF3E4uuMIusYhuqYPK1fYvLtjbPRp\ns++hDHhqUr52bsmya+RHzKh0/ATXatrndYEyGNaAhRjRZv6t2I+/CRqiLjqwue9XZO0bQ50WYc3u\nzNEyUM+chV3pzIxsZ+t1xSePy4q0UNA5Dy0u4HO11UxW9qaxg05FNh3uK5Yjakp/10e1dOrAbiSV\n/tIpWL3TDjdBbAwum9OzLspZ2MnlZdl5e1PXSg/Ub+ZndW9p2BP2YafvoP8FkfZGJh2QGgVZ2eUz\neuBSXucnxq8H9FWto4aO1OZ00Xfq7YNj2P/G+9ulgUdJJYg50jFx5i+0A9pf91EGPq41wH1FMF+w\nWh0GwGolx9fhtKgPG+AB2kA+r3ZCvEYMVsHEtSWA9+n3gVBCNcVZH6iQIcqdoi3x6TMPhvHRex9x\nHMdxMs+8En6WgYV3uaL83sXzMaf6yC854OtmSyqDZkfttAmsZGluLYxTwMG9573vD2PaBMbifFYk\nBNi6VmGpmhrJIjWVVm5IYqz10f9GRL4AixKPE1ekezh2TNbukbLHvIgDE+0sD2w2aZNJO9NYbPx3\nqQfEeOIY9sXRBAtF2nNSzACjCL5x/Fg4CsaPx9Mi2lsOWkSeobwyWRxPBBX8iokvGbDcgTF0x+Nz\nODnx0TaGRMSgLhP7414EHQdraoLEZlc1J2xVNe+ulDVWEdvJduIDQUCk4vySLFWZm4aw4U0CE1ev\nCgGQwrxtZlWYteQsBlXMzatV3UOnp+c9sTzeErTZU13Ffdm6ptPAD8Zp9a179mhdislmowL06j4P\nMVOCtXCSVtL6u/kc1hjAsnjEZSKOICZhUc6uGKPVcgzz8SHnzMAIwrLZgQ30NKrXVRtuA3e0cRtI\nQ1jEJmHn22xqnTeTUH1lE0TgqQ0swAq87apcyrQoJuqprtzgRVJjbP8zfUibcVokc97NPBIdl9UG\ndisqgwzabBL4ECKU8pgPE22W8PR8/a768c4uMEuYh+RwzgxwTVkgSt1A7WqnqvMMgTedXxQWg3Pa\nekPPxXVJqyGUMcfFPOYK6bSeZTR6K3YxA1vyGPrBAOiDVlNzdq6BOc/sYEzPAB02Pytrd6JwOV42\ncf4AWy6Vup6vPxg//5oaTbKJ52p/SDtqjPMYl4jQjSKliKnyJhwDfB4toOPj16PhebzIwgPHTniO\niMbjpYLo7GhCTAGpgXXn2fcJXfq/HNU4+si/fTWMf+PXhdB76Q3lnU5/uudSpr8aPXz+kTDutJU7\nMe1wBh21kwzyXhNz0URa+Wo2BoRnD4hsdNelOe3RnD2M9SXu7SL23lpYT80s7u37uHGNoXNzau+v\nX9K+72sXLofx7V3dSxNoqiPYdHn6S3+qG8hpb7PZ0fUv39J5jh3RHqk/1Fi13b0QxnH04xzmDDPA\nyRQwFm5UdJ7WrnBX28ArEiHJtePpIyrXyvZ6GF8HvmOnqfJ+6nXNfwKcZ4gc8wqw5cX43tiyiune\nAONcARvReiLHGQBn8tx3ngnjzU//oJ4jpzn7DvL2Epitc1m1sxpQJT7WMEFbdZsvqF301VymUhGk\nMD6fRH64W+xUcAc8wXhs/B4056D8/KAd7u4KecE9C2JdJunhhx8OY+5lPPfcc2F88aKQaA/fdzSM\nk1gXcr2dwObQvTtaj579h38/jBc//2NhHMN8f/VTHw/j2QeAtvgXvxLGNxe0n3a7onVDcXExjAOU\nU7fFOQzG/rg6kouxvNnBfBFrt7jPuc3+f4Fm9fkyAv3Zw97z0SNat9cayu2sQ6Jrsxni4nX69zx0\nKoz/4LL6dBLPtwLc1o1NlVM2+73b7l+niABKZrBmASJtYVnYre1tzb+TKbxnQIFF97j1/Jms1nQJ\n9Bc3gsPB/kdK98O+Njezl+tuYQ8zjXOvPKz9xq9+W2PbiSV9np1VvvQyWGt0gA/DHIDT60ZT50zj\nHuJ8L+FP2g8aj1nPol8miOrh/hTWB0Pgrjiv5hw/xjhCsdX5ic3ysXfAvTV3TFcrow9FZvJcYxD/\n7vK+MHYSLxXJvThn9H9wtWBM9J8aRyb8w5Roe13vBcrYt/jxTyJPz2g/ILqCGo8m9rBnVgQyLpvF\nfk25huOxZztpDTrmWqyjRHw8MozLzKNreqdZAo6O++Hbm5qzXbsuxBFz+UfPa0x148ByO3hpMoHD\n5QKtNOnxJq5NI5jlYOzHbP/cwh96+p8nvvqHYfxDn/rJMD56WPMDd1KbDy+A954RVDPGUF4ffb4L\nVN7WpvZ6L1/BemJD8+sI0p3zJjw4EVssBGKy7mSORpnTjclkMplMJpPJZDKZTCaTyWQymUwmk8lk\nMplMJpPJdJeyL92YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUx3qbcVL9XvEjUij6BGQ1bg\nza7soapAVHgNWVR6sMublTOnsxCX5VS1IXvCzUBWQ1s1XWsDmKVuV3ZqtOU+wGDFYDnkExflA2lS\ng+V3SuemBTwoVU4Cn7uwCA8c2aERL5BPykbrvoXjYXwu984w7jd1zFZD1oBeoPspwxq9XFM8AnYj\nk5R9HU3oaTvXA8KkW5e1E4rEcfp6rgEQO4FLjAzs5QbEW+zdTwDrrBgsxlxYTnXqstKrbgqbQKut\nYLxrmROMxttDDXHdUXe87VYEQYCzTjtGg0iTLmy2yutAc23CohjWgwm0ATcvG9kErDZXV2XZSYu2\npQX10dkZxTMz6t9Z2EESO3NQugGtyHHNzJKsI4tbeo5dYEJo7+/SlhWWp3HYesYiFoOq6yTKIF7S\ncyRpNZlQmZVKsjuk1d0QNr8jWpYNiI5xJKKVYMWfzyopFj3dGy3u6rBnbvV0/l18noN1frOrdlHZ\nP8bF9zSbsAeeZHdYhM1pCdbM8wVllSLuPTGCJSAQCg1YRVdgRZyEtXwP9zOC7WO/A+zLFKrVUu5q\nt5SnaRdLjFQA1EIHyIsEbFHZVmmdx/YWQdogUXaa6i+FGVmX0kXv/R/8qOM4USvi21dfCuMrb8iq\nezTEOOSqn/k9nXCItk+75BjGxZk1WYrf9+B5HQPL0xhwUXzWqO2y7uHUO4Wj6sI2ePWQrpUBXmNm\nQXbaD7zv8TAuLgl3xfthv5jkQkgb6Oquxq48cH3MKwd1S4RFJI8Qv+fwuXlf+FuOfwh5Hj+gRSu/\nqx2M/XzSmDoZvzAdGkUQTsozHrBsHnJLHPXioyx8WF1y3pHIyTqY5xlWNV8NaIfLfoHjR7if4X7e\nGwCXOujK0tUFaicFq/fZ1cNhXNnYDONOS/ceh4V+qwHcT0f3OIe6HgBbGAREGwJNBWZBLKHz9ICS\nS8O2nsS12s2bYTyTU17PZoFCrKl/DzJqk6WMzp9DTAfRBp6LONTyQOU9ADKgOLtXPh7YDu0u0E6w\n03fhi+oBSxtLcN7I/go7U6JQkFQyaeBzcPzAR54FNMBNKMfFY2/r8u+u1QbeYGdnJ4xvog1wDhQM\n1G5zrtpGEfbDtLhOAmtbLCrXNnx9HmC9sd5TH2m3dS3244OqYa7n/JfZj3NwznOj45bqfQfo1yTs\nhxdKmi9nCsBtNrkG1T3MLwq93ALiysEc6/77ToTxoWUtsuPAnKHZOm2spXvoH4cwjpZmlXuaQEf1\ndjQ/aDaVt3ysSzLASBE52wB2rLePykolNB93MYb1gDsZYh49wpykNwBiq8P1ahg6eVw/l1W9jbDw\nJZqqC5QV1963N7Z1TH+656iR32cBCdgHKnBzXe3zJtaOA3SGxRWV3ZFTalf5VdWZg7EtwqSlr3zE\nY37CMQf9MpI7GU9AWkXEHutN+Hw8YmQydoo4QeXm5eNq4z/yP2re/dD7Zc/9O//qxTD+wr+TbfZu\nHZVi+i9a88vHw/jWhsbCnZryaDqmvJTzlPeCFHI5bOvnSpqXHj9yNoyrO9o7bWKv8CzGhE0g57Oe\n9l2qyN/PPr+HnTnxsR8IP1te1HgwGmoN/OROF58rdxDpff8ZIWTi16+H8e9dUBnUmnq+PrChh5bV\n526uCwXVGGCumCI6EeMx54rYQ7mwrTw4wjxvlAGmGHtVR1aEJBg0NLf517/7VBg/d/FqGBNRSRv9\nSk05l+s77lHX91GOR44o955a0JrWw36tCxzjLq5T3la97jQ1RqZyxOvimjtCdtSw/i+iXLu7Wpec\nADY9eUht6xsvv+xMs4iZiMIKgVLB+PcX2xXWOYt51d+hJSEtiK5pYW7EefIB9ob7uERncC7Hdre2\npj2OpSWtz65cES4ji/kQ96AiexLYgw1c3UMWuMQZIL2LH3hPGD8DfNW5B7QHVC5r32TwkD6/58F3\nhPHqS8+G8S30ReIkupjXc61QWFI/TmJ+soj5Sfemyq1Rwz5eDnto+3OOIeaZzHHDIfDyBZXBww89\nFMbnzz+g47H25n5FUNZaJXP+Pn0O1Dv3LmbnVZ8rq5qzb1XUj2PTvl5saU2RwN4pscNcc8WBA8pE\nkOHjceuFGZVLq63xiqi+Jj5vYS+XaBxOO2P781W+V1vA+4TT82o7bnMLx6j/Z08IS/OZ+zW+/t4X\n/lUYp7E3MJNXWz6K3FGp6d65XvTiAJS7KssYBg5iDh2ggz28y+TU3ImNzz0+sGscz4hOb2J/ugs8\n8qCr+x8OOKiNR48fvHfc2VJf4b1wf4Q4mQj2CscnJ+RTKkKXinx+l9jB73n0X69ubAsXWldKcxrY\no+kiF+WAg4uUBB6UeyH5vOaCReyTe5h/Rva7Y2wDmM+NWbtFUd/c2+G7Kc7l1If47rLdVjttVjTX\n2d7VfIjt6qGH9B5/Y0fz+t5wwt4AN5ki7xnwTMGEdTL3FjFXDOooM6Z77DdFUVb6/Mata2H8xJO/\nH8Z/93M/i1vgO4i3vqfgLfJfPc6p8Q897K2sAx118fJF3dcNrQ86mNuw0FjPjNPp8ajNDvIO96nu\nROZ0YzKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQy3aXsSzcmk8lkMplMJpPJZDKZTCaTyWQy\nmUwmk8lkMplMJtNd6m31i2s1ZAWU8mDjHpMt2Bu3Xw1jLybLqTQs/WIzspFbSsjaqQ2bn2vAVDVh\nWbbRVEwkUjIrm6TeQLZDgwPcEfEU8EkjRSgOFIYH7AmRUjHYNHmwaSrBJr6UlL3mWkGWdsW07B1X\nUkfD2B2qnPpD2Y0227JA2qnKdqsFe9B+l/b3up+lGZ0zD7zGvCvLwwas9JopnbPTAkqgCTvRLu1P\n1RZGsJkaIqbt4oG8SJPV/e4Ai9SDRSRtt9wJrA8+dzDB5S1wxh8fPSWsHqcdLwWEhQ+bt/K2+k3Q\nUVuaA2ZmFraXLvslbPbn52fD2MN3+wo5WRvSujQGq8tUSsfQuj/09gWywRkC+wFcVQ4YmH5Nz9RN\nqM36sOMkyic2BhfgONH6jfreqa6JryoUgeQiBgm29V1YFNOWmIg5+lFGLNeQV1LIPbTQLDfUF7Zq\nQCLAHo9IC9qVDmjtvJ+ffFhpxoGj832gVdD2a23VlR9BaY0vy2JO9pUloE1YET7s9pIo7xiQXAO0\n78GUf7c0AwtqWrgmYfVMGz3apWZgyxixl/aR111a+k2wTnRoceuPPZ46efIex3Ec58gRIWoaTfWz\nL/+HfxvGl2/8f2G8uCIE3MqS7r0CO+pdjE8f+PCHwviHf/Qnw/jcA7LYjeRdtLFJJCOWx9kHZOl4\n7uHHwtiHPamHOjl64p4wXjsqBEciqbqibXNUGPs99h3YKs8L/TFpPDmwQyZmjHaXDrCLxMuNRuP7\nnDcBoUdryihSajzqLMIBiuRtVMRE7NR0iCjLESy5R5hbuhOsYzmmBpinMPd7yFcjoJU4/o2Q+3td\nYAlxHgf13d0fxzj2OIHuvdcCliajMTc3q7a2eHQ1jLeuynI/i7G+0wC+yodNLLBQAcaMSoXH65hU\nnDlOOaCHfh/DeJya1Vx3+Zj6VrIrC1t3JCv1zgAompLKMpNEH0Kb73R0P6kU2zPWARjriKdz9uNO\nW//eA1I1nUC7GY3Pw8wvwwHHUbQh5mogfhzmO5xnMASOLk6klMaOdHa6++LGbbXDmzdlEdtqA+WA\nflmIEZeh50+grhNxPX8qK1ti5q4s7LQHWPvIvDZqp00cYhDa5BKrq3ukpXLUvpqYPl2ng+NT6P55\n4F6JrYi5bIcqj9m8bI8L6NN9zNuOH9ec/ezZU2FMDLIPRPCghxwwUHmUZnWeWYxnAzxLo67c0EZ9\nsp0nCsKP5LBWaDRk29wGQqu0j0jJApFKrIGLfttH/qJVMOdER49qbpNNj8eEcDhrAfVZrWsudGtT\nGKltIDWIcUhxrjuNQjtp76i+/vRrl8L4t74jm/bXy0BtoYzWSiq7H3qPECs//KPnwnj2tNZuf47l\nHIYR3N4kfNSBpTgZIBORUpPs3ZGz/xxA5Hv/7fjzBJM+x2lSQPGe+T7lsh/Lq51cuKA29sTXtf8R\nTOKYmv6L0O3N22FcrajeGzXllgFs0XNAh8zMa563mNeYtwzk4Mfe82AYd3xhTZ576s/CeOOaxuZN\nzNsubcs6f4jdim9862nHcRznw+8Tzvf8qXvD+OobQhMfzSgfb7uaNy4AabOU0XhWK2i8uXTrmTDO\nZYU4HwFf1BpoL6vdF1YkltTnHjABt7c090h6urcM9r64D9HFOmAO89iPf+RjYfzBh0+H8WsX3gzj\nl98Uqodz4yHGyAYQjNwfS2ENyj2g/j7a9cqu/u6DxzT3cTmIIa1lMc7lSso7HjDWr4FBwDUt18MV\nIFuPrWq/vlbVOJ5f0hy/A/xCHmvsaRRRDjG0hzzKrtXRWNgdjd8X5ppoEai3DZRRGvtBJ1b1jmCj\nrHGgANQG9wTG4RPYRjhm5ND2P/ShD4XxwoKueebMmTBeX9fMuFpVDlpe1vhOZI+P6xbntB8U1FQ2\nGczNc3PKTe85q34TT2LvC9jcOjB4Bdz//S8/H8aXZ1TGQ+ytTEKu90aYq2MdlyzoHjJAxK5hD6jc\n1DnbBxjR4K1oDUowt3sAACAASURBVMdxHA/1xPp5/XW9F/vN3/xCGLNOPvvpz4ZxDPnfBTY2P6v+\n9wMf+UQYd4BezQHdcvTYkTCuAwk7jUohL8USWP/iGM65E0nVVyINvBT2Tviup9PWPsoICCXig4n+\nu3rtahgTQRVDvt2tVvb/XdfMYi/IxXXmCmrjI6zj68CyZWbVHj/9Lu2R3gesq4t1Z7OgNU4T7wJH\naHsu3p+OEHM/33GAsIwggYBH59qOYwv2v6vA7LIvcO+ruqW5R7GoMTuGMZjoNO5Fsj69fTzWsA+c\nOu8RfdiNoK4QA1uU4LswviOOrO15ff1tZJ2KYyatLO6ARvXXqkvEySf0/L/+G78SxtmUcvDP/MRP\nh3FuAqKQext5jFGlovYJiARkEbE9R/bB3bfucUffkXBfXXWUy6p9HQZeKol3l5vr2p+8dltj5OaW\ncKJzs5qj3nuvxtR/96V/HcZ+D+jgKJMsDKMrvmDs525kzME6ODInwTtILptRrjwNUVN85/SVJ34v\njD/1sR8J40PL+g5D5L3Dfv2MIu/Wx7+v7yNHbAENd/Gi5tGXL2tfog6kN9sT98vZtorA+x0+fBjH\nA0uLvcmtTd3DnWi630aaTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUxTKPvSjclkMplMJpPJ\nZDKZTCaTyWQymUwmk8lkMplMJpPJdJd6W/FSzYrsLYcpXdrN6vPbm7L6SvuwIkrI2i0FS68mbNnq\nQ9kbDVKyqOp0aCkn+6deRn9Lu2nHgxX+PiImgEdyAKtSN0YPJsVzwOiMaLsJW9S1guwX7yme1PG+\njknFaQMqO6RKU8/aw71X6rLmrDb1eSyQNVIBZd/2YfPdkU3s9q4ssLwZ2bcuFBWnYO2Wg/12Lw+8\nTBpW4C1Z33X6qvPuSPfQBXbqwLubdvpxWEJ3gc/aXp9grxyxYZvweYS6Qcuu8bZwETTOkHaU4y3l\nplG0QRz21d4HsAuj5WT1iiyNs/NqkxkglAJYIaZg75eG1WUCFpAD+JSlUXYxWoCjHIODvg7b/Ihd\neFbtMbN2LIyHNeUO2qwOgZAh0ipG9JLO7rgRJBnsAHFMDJZpMeSpOKwKidrwgLKjPSLt3GjH6qEd\nZlLAGqAsy8DmVVt6Rp8uwrCGTBOLh+vm0m8dHoifov1wD2gnH/2m3dXnVaCmaLfp4r7iKDMnhbwJ\ne8ksxw6URwr2jm3YGw4ilrHTp8EA7YFW+SjHRIIoCh3BfpyDvS1bJdshcUCsa9pUz8zL8jA2we42\ntt9mYnEgIDG2vef9Hw3j51+8HMY//TN/R/eb0TN999lvhfEXf/crYfz5n/kHYXz2rOwXaREZyc0j\n2kiOt+xkg0th3BoAnUHsYr1yU8dnkNfwvLzW6I4QSuMxXxOPjthgHvyXeVLhaMLYE20H+IcJdrCT\n0GI8PphQ3l4EXQZNuS9qDJbVAbAwox7mrnjOIZKqh/xDvCjb5ABW/ESheejfMVpsNunliXYOBNVB\nLnVhqRxD24znZZcZx/yXltzZkixS00UhGF2MWwHQqM2u5nWNJnCJeO4Gxp7ZWVwrA9te3A+m706/\nBctf2NAunRL6IDZSPqi88R3dpyeL86Gra3kxlQ8Rsl1fZT+b1Vw0UrdotknkrV5/7x/8ANbGjsrD\ncWlRrAccYp7lMZch/RO1wyGsUND1fUyFhrA995Dj+sBUxekNO4mlOiW6ceNaGLda6H/olzmU6VJJ\nZU17Z87nMrAudpEPae+diCnOxXTOLOZnacxv/fhbreJ5febRAeYlTIxdII5mZmSXTCvdErADRFLm\nMe5HUYHj5+MNWKzngJq696RQDrRJHsI2mCg0IjucmI5fWdO6NoX73NnCGk1/6ZSKWk8kgKVtA8Pa\naCgnlcta49Iu/KBOWN6RdQ6qycccnPn85AmtG+aKKtcmLIorNV1/c0tYzHJV91jD/bYjuGPYGAMF\nkQbGbBoVtIA6eF5rwV/6E9ksv1ADSnbCeTbaQN8+ofMsLKisP76k8SqZI2IW851JSKkxKNUggqia\ngL3kmDsRI0VEFPcJxqOmJmfXScePtwWvAQv89a9eDeMLV7Wunfb9BtNfnmpASvU7yjNxDzgUjBu3\nt2Rt/+FHNWd69Jz2HNlvji5q/FkHkiiO/b6NS7Jy362oHbaAEOyPiKjYQ+x9+6t/FH72zkPKeZdu\nKBe0kGsd5OmzK7J6f/V1IZ/WN1QeIzxHwtM4N/KEptrZ0fG1uvJ3IqGxpz/EOOfpPhvYa61hzOZO\nUQr7E4vABj5w/h1hHE+qrq7cUA4l4sNzNbmrYA+LYzxRJCOM98R9H6wH1+s6Xwv72XNp7Fl5wJnk\ndO61e4WZSWHOMIf55ArG0cGR+8O4ceUN3e+MxrwS8LbvfUzYsX/z2/8hjD/0yR92plmP5YE3KWmu\ns7gi7M/XLlwN4x7msczZSyiXn/qAMNe/9fRzYfy3HlP7Ib7y/GG1seNHhel67cKFMJ4DoukAQcV2\nRBTU4qL2f4hG5f7PJpAKzaZyEOdb73r3u8O4qKJxmmX19W2g22J4d3EE67MA741yJ4Skq7fUv7NZ\ntcmZWZX9ziWtIVJdtf8+UKAN4Ki4r1ua0zzkEBB9jZ0NXRfvmbC17SzOKGe0ByqfRntv/c8tn1xG\nf9jA/kCrqfv6oz/8Az0TkBo3sUYqFXW/D5wXrnOIvdn0jPYFzpx/NIxff0N9dB71X22oTrhfOI26\ncVNlEXl3E1kTjV+LBRHkjELus+SKiut17O9wPwxzuyHW3RHMOxYilepePybWLEMEeQ9jGK6z3QUm\npaoxbLemvHCipHF8cUbttA5cTRtY4HJT7bpaVb2PRm9d3zpOdA/RH46f8fN9SBJ7XHm01dXVFT0L\n9puSyeTYz+Nc23Nqj+uyqUboshFk3F4+6HebOBZ73KgH7md6E1BTxIzFvPF7upP2VyfutU7sctPd\nFzvAFyWXlZtdtNtf/9Ivh3EBexs/8gmN+dkM1sXE72J/YgbtnHvc/IPo/vzYU2JfffzekYu55aEF\njftEsxJhvYt36OVKOYwrVc3lzpx7JIwXl4RavHbzahgH418xRxq8O5z03hrHRzbume94ovHH8B6i\nr2f54kEXu3T5Yhh//ZvC0v7oZz+Pe3srHivyGeqJmPWNdeWpN9/UuHUJSKlaHWtjjOmT+iuR6/ec\nvCeMT5zQGsnzxuM6W8Cd34nM6cZkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZLpL2ZduTCaT\nyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUymu9Tbi5cqy4YnyAOFAbyGL3c9J92HdeoKkEWwCLrW\nl01gr6Vj+g1YHcNebwQ7tQB2rF5S9mXDoWwIB+09myKXdlmwtpqDBWHGgUVRRnaciQRswXOyKUzF\ngZHygAMApqDjqwx2erKo6nRUZjHYHtFBKpfUOXuB7JlopU7btDjs1GgruVOVXX8fdVXI6Llo4UbL\n0+Ss7q2RlE1kvQV7/TYspXAPPX/vnn1ccwD81O1rwn6UN2TlNUm0FozYazGEvVbEaSvKoAqjIS3i\n/gY5PDeb7DdqG1euyLpyuadnW0yqTrtbsh5MrapPD1PjsVBEBvkj2Pi7wE7FgYFA/47Yje3HLnwW\nWeQu+plThO18SbbBxIENYcHsTbAop8fZkHip0fjvKwYurcyARQPCKTkCsgPPMsR3IFO+ztOqyWLS\nBb4jCRvjSkP1uQO8VHcwHicxGhJdNB7Pk0YeSu7HCVpfomx8WMv1YJXZ6Sm+sQNsCcpmi20Rf7s8\nK2vBUh4Yo5TKj/55PfIDkCem24gxijiKA9/QB/aNNn607GSd0qKUMdFRURd69CPUO3MdUYrjSjJq\nywpMw8lTYfzf/+z/EMYnThwPY443x06cDuOH3vFefX5M4yj7E62OiVmiJWgMyBf2bzeCWdI9J5Hj\nUvNqbz4wdBwXmadoXzkkOi1iIQrrWdx/rweUDvLgANfl57H9NhJEcizq2JEC3Fd0eJpwj874+3Um\njG2Bi7mHx7w8YXydcgyCB4/oGOZ5I4xbtLx3RuD79Nn/2B70eQtW3ES1xGPIx1ldN5HTHG4YQVm+\ndRzILsgiPDsvy95EXuNfpA3CCjwG1FQ6L7vWell2xZWqxqEBUacVTdqLBfWbLFFsQBESD9QfADtV\n0PEBxpNuQ/PG7MyqrnWv8sTQ0Xk67T8J42pd99bMCZ+Tjeu5Ej3NYVr62IkDr1haUT30u5zD7NXb\nqE9UptrECOXEfobicHzgrQJaYSNvp3Mcu+mdjPocKEf4wCN0fZ0nV8Q6B+iraVS/q7obwgo8iT63\nDKRUASgjN5Lv1adHGC8TKDuQ0xwfzC4P9uKzwIq1gQPoMR3sn8cHK42W+8SDsjcnsf6M2Hnjfmlp\nmwWOiOMWuk3EPneAuYSPud9996tPEAVVB+KD9+YEOk8POS4eVxmnkbNo503r/kRSz5LJKj/FMMb3\n+1rv9lCGhbzm+bMzsnnu7OORt7a3dT6Mm5mM9hwKBd3jwrzsoYso1yowJLtlrYE3d5ETG8qJ5QrW\nQijjpWXZ9ReAAsO2hNME7mAaFWAef/O2xrCrTbSrOzgPjeqv1XXOLz6ptfwDDynHn1iANXmGazTO\nO9DoObc7+DyCbEVemIB5imKkOK+6WxzVnaw8eIxKsNPWmPfEv385jP/5Lwg3cuPWdLcZ01+NBj2N\ni0mgFoZY73R6RMtrPOsAWUIkfCat/F0DWuIGsE9FYObzs4p3kBu5RiPiaH4/r7p93ftLF4RVur2u\n/bt12O/nMK97/6n7wviar7nuTZ/ogOfDOJ3U/s5WRegRN9Dz9XqK0xlgdXyVUyyRQazxpNvmOpnr\nQo3HH/vID4bxKjAE/YqevVLXGJKMsw5VVlw1xYmi5d7ahP2Cg33PDtYn28AFLgLhF0f9xTyV/T2P\nvi+Mi1mNnfm2rpkZYN/JBf4hr+Nvb2nsPH10TfdzW2N2Ciif937gI840q4U14hmsoY4B0XPL1+dX\nbginVK3omYlHWppT3/qhE8fD+NPfJxTFNtrGmzc0T1lcEaIiif795JNPhvH73rdXl+fOCUHEOWcV\n+/1cc548KdTCa6+9FsaVivrQhz70oTDe3RX2prqt5w46ui+/qPZza1flsY79qONf05iXf1B44RH3\ngCL4F8X9m5pXdJET17c0hzk+L7Qy0cHHTmgecv+asHzPfB3738AjO0CzXbypY4aOcsbM3F7bHg6V\nmzpt1SXn+J2O8oKPNXOxqLaSDzA/GvXGxvOzWs8ztw+wT8U8srEhHOHxI+qj8bf1beHd6xqQJv0e\n1nAR5KjiTqeFz/E+Cu0nhlybzI/HsPSAPhnhvUC9rbEzsn+Lsk7t7zelgQYv4V1B0FI7zWFdtdnB\n2pV7nsCdtRrKtdyrZ723+yqnRkPP0QYGj+L6lc/kTdhD5B4X+b58lhMntAY9d+6BMM4CBc11Xgpj\nMNeXXAZwHIu82uGz7DNzRgMgxfHul+Msn8OdgJeK7D3Hxu+5c340ESkV0d0ePx0aYP8jmPAu0Imr\nvf3ql/5FGF9bvxrGn/zwp8L47KmzYZwAemxmRvMq7pNPwnd5Ht9ZvPXeI3gp1CMPXVnUe3+O3UOM\nWztl7V9s7Wh+20a+f8cjQkkm0K53t/E+m4vmCBaK3LTx++ose/ZLTij5Lm7iO3K+5/G5xiZ3Ckh7\n5JXf/6N/H8YfQX2Wingvu59zh3hv1QI+8uYtzZcvAJv55kXhpapAePG9FFFvrM9iXnt4J4AVP3VK\n766Wl7WPzndqNWD8iiXlpjuROd2YTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUx3KfvSjclk\nMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJdJd6Ww3j+n3ZBXlN2AH2Za027Ol7QEU5kDm1QJaj\n9Rps/HH8kAQAWGm6eMxkgpZlC2Gchd1Zsy9bRCe1d9I+ME+9rqyzmrCad+O6ZgXWqosp2RgtF2Sd\nmU/J9q/TVdnUerJ2a4O3lYDdZzINfE5c5UdrrGZM52w4uv/GQNapcSBqkgHqAXaTPditb2yrbHY9\n1UkClnj5tMq4mCviGF0rlZI9WL9Pa1ZgYQ5wQvCH67b1TJdfu6Rz9Ph3jmJacxFLNJ5+4UygYkzE\na0QQLURTTTp8SnTr1kYYV3bUHq7flm1WCnbs3Q7sMGGvnq3IinQABFDEUo80BFjwpYEhS8NajRZt\nRMGENmu0h6MVuKs25cSBbIFNYaIN63sPtvlIHiPePBkAkbqm7ThRLTqaNoRwNYu0/QjuA88SA7Ng\nGLHoV9zpqN9sAfHRQE7KAMXUw/G0X8wliPnyxsbp/TwRIx4hYnVH1I4+9rPA26D/Vdr9sXGfaAfa\ncAKhQLwUsTodlNkI1/IjdTh9GsCKL5HTsyVj4/EfzHV3a2nJMZJ/G7UKdcZ+HtEBRoMoMdgmFoHf\nOHX6Hv0ZcWpoKCnYNB87Kqs/2kUS2UCxrol2isMPdxSMz820HuyhHpLAXxBR4UVsjNnmgbDkfSJ9\nkXIQo10prLiJDksmxk/PhDmYVDfj7TNj3vg+SgtpPpOH8YyYKs8b/11tWlRHsIAcU0fT3RkjzwAs\nTSInC8lRF7bEPlGkGnP6mCP2kI992Px6CeD5gAH0MI8MiMNAe2AOzJT27rO0elT/PiNbTA/oFx9I\nxdFQ/ZXPncpoHHcTsN7FvfTxHI2G5g8uMKa5rK7b4rhL63tXZVZCzoindXzpiOw+i0fPh3GyJMTA\n7P0f1ud5zesH3/ijMK6W9SwOrpWbg12/q8+TSYwnKCs/0PG5wl499Nc1Fx6A8RNDHiFqykPHHDq0\nLgZeELm6kNXx7TomE3Hljj7OP3SI79E5M8B/BXHNzadRA2KHgQBbBGorCwRYArk5kSQSAs8ccdhV\nex6gH/doTY6+k8eaa2lW7bONdVN/nxlUrQHJi4qMY54bRCYmmNdhHKUNNwcTopI8IEZIvotj/pAF\nEqJQUr3ngDuqlmU9T0xVFtgpjhVESsVhJ02r8R4QYXzGHDBOPm66DEvmbeAJ+rjuInBQ3a7yzU55\nd/++1CYWZ4GOKuhZmT+7sFLfAZqqC/v5elO5o4P2Ua3pGM6FigXlkQLiESZgtJnm+adSGMPjESv5\n/3z5GAe+c03P/7WvCwWzela4jHRpPD4uiPjHc7G5nw+wVov8ewQj5Y6NuXcUfVaccwJ2KpJsoqxq\nZ9z/ECfxta+8Gsa/9s++G8Y3b2i8nHZUp+mvRiPk2iLGv+5In6eAhl7MKte9ARTN6W21pZOryo3N\nHY0Dy3Oa9xZLas8LmXeEcauqnF1FG05j3Hj4zB6eZdjRPuTt29qD2qlqfB+lZd3/Q4eEnjh1TvHX\nvyLkzJPf+VoYtzs6ZyGj8enIitagDvaJNrevhvHaoaP4XPb+tOXnuBEMFfcHKu+ZGeFqzt8nhM8A\n40kPOEEiCjkP7/ZUnxwviavk8Zy3+BgvwzyB3PfGtq65iDnAcSCfHjn/rjB+8AGhjTrYN6hiHdvG\nmvLK60LinVzS+Hd9XW1lt6HnK2dV3g995ifCOI19n2lUGWulK2hXXlnPduiQMEXVpsb8hazK8eQR\nHdOqq488NqO+EADT5RCbuahxYOGQxsuL14R0Ig5hc3Nz7x6xjp8BvmWbeE7MqVuYJz3/vDBuPE8G\n5dEESpn7HUkgnNNp1W8X+6hP4x3MqT9T/06taW2X+dB7wthJ6x7al/ReYPd3vhjGPv72kAtE7YLW\nym5eOWt+Xu02k9ZzEQOSwOexFJAWGaB0MFc/dnIvD42ADt/ZVdsf+erbi4t6V3T4qDDr3/3uC7o+\n0K+nTguBlcA7oS7ywm/85hfC+Nvf+Y6ui3np2TPC+P39v/ffhPHKinLDNKrd1BqccyPuzcVRLtx3\n5XuJGN+noW33sSgi+pl7jo7Dd4OYq2Gel8J7j6NHj+9dH20/HWAtgP2UlVW10ytX1WayOeFtSvOq\no0pFaDUivbmPSgwM94mJzHEdoG4i+6jARwLRxj1bjk++r3sgRvjEidNhvLikNk9schJ9LrJ3incE\nXgRrpfoh0ijG6fk+xn1hQWvE2+tCq7nO+LUCcWXMfRHMV2z8HulfSJG1y3TP/V13fP/jvIQozaGn\ntvHVl58I4xeufDuMv//BD4bxx98nTBExZIkk99V1P9y/jqI38fl+mQaRl36KWaVHl9TeU2n1lXZT\n4yzxilzrM9fce69ydhffASDeOyJu7WMJGkxciI9vw5FTRprVBHwVD+H7DZ/rbZQl3tG+8OqLYfzk\nf9R+7Kc//rfD+CAPcf/nxo0bYfzmpTfD+MqVy2Fcwz4bEXpx5GeWN9Hk95w4HsanTmuPeXVFY20G\nbYu5cg7rooU55Y87kTndmEwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMdyn70o3JZDKZTCaT\nyWQymUwmk8lkMplMJpPJZDKZTCaTyXSXelvxUrRGigFH1GvJtme2KDvFeE7WQes7sjb04rNhPARa\nYjSALTBs2tNJWQplc7IMzMIWiuiFoS+bomJ+z0Yom9Tf9VOyjUvAKjGb1H3dqF4N44Wc7IeGsAy9\nvA2bpK6sGB3cuwebplJB9ztfgL0VbL4H9BcfABXjAu2E8zdgeTqMwxIRuI8abPsaQF/FUJ+Nuuqw\nVpVN1m4GKCvYnY9gp9eFjXwArytv/56TsMq9ePmNMK5uyQaX7s0RRBSc/ya7MdNGC3gJWk7fpY/2\ntDs/b2+qb21uq46qxP4EKvcm0Bntqtpquqy2MfJoy+3gc8VJWL/ngADoAnuRSAITBR1Y+fGbgu6I\nBY2rwoKZVqxxnJuWc7Qmc2jNO/ZOoteiBSVxZkSseBE3cnyOhjVygSRBn3BRrkTpbNdVJ1s1xQMc\nU8zpeWmPl0T+XZ6VhRpxTVEvu7178CbUJR3nOuRioBoOzQExAp/HAeqBaKw2kCt9WPcTuzNCEorj\n5hJ42M6A9p/TpyTsRmnxSewe0Xy0UJzUQHketkN/OL5dRXFAQE1xXOypr7uJvfEhhjZQnCGuBDak\nbO9AljkTsEZxPCtRERF02wSrzSj6iM8U6ZhhSPtTJ2JJO96OchRBFBIphTaPPh2LESVHDAjQKbRd\nTRO7oVwcKYcx9xKLjc8RvGY0HwGtgOejRWqkTaCtsCgj7Yx5cNJ4GcQm/MN0iIjIGOxtI+MZrVN9\njVtBR/XF9jPEWEQSxmgAm1/MCwMcn4A19RDtJAFMUHzfJjdidQ1kYHTw6SHWPSZhC96GFXkUNae4\n09A8sALLdB+22b2+2n4B9sZJjMF9YFjdmK57ZEY2w9klWX/G05pjs4zTBVmHpx/4aBjnVoVB2P72\nr+m6m7LoDoAKcYnt8dS/e03115llHdOq7B3jEYnJvhKZrRCtp08xHXe6aBPpPPN8MPb4/oA5QHEC\nawI4pDoDrJHiGaKLpk9DrDUO5VWOCwWtTThfSQJrm0zp2Yhi4jyvQ0wDxqJIjveJTYKNP/pf29W1\ntmv7c2PUL9eIHIf8gZ4vAWyFj76SJoqU6MEU7ePV//qYNy7hb2eBZMoDU9BEXycmbmFxUdfCmO0j\nf/sYc1IZYCAxtnVaWgv6AyIvwtBpNVUOu0DXVmGxnAMeqwPU7SZQCN6+3/LKkrBzc7NAaQFl0Gnr\nmp2Oym9nV+uiDtYkG9tAqAApxfw4h/nPDCyHibZsNLR2qtZ1ni7metOoYUd1ul1TufT/kta55Z5O\n9HtPy+L9oUdkMf3govY/vDTWiBG8VOytMf/9jpBSsbHHT0RHTTpmoh08+gdQld944rUw/sX/4+kw\nfulF9YnR6C+pwE1/Y5WOq13NZpXTbjSVL1eB+s4CcVlBTn3pTWFYOtjzXJjVHuz9h4W9OZLRebZv\nKpc/cko4YOL+sgv628OLezn50gVhh5j/zj30cBj/5KPvDuNMW3nxNez9XXrpD8O41xBG477jGoda\nfYzvvnBtmxUgzjFn8DHvbmB8cLF32seeajyuv11d0bz0xz77eBiXgKQc9HQ/rZbGnBrm0kwfKcyT\nh5F5iI7hOpJ/G12/hlH4Wbmr+lvv6jp/54M/HMaP3SfMjIvxzMdY5X/7ahhXsQfcR1ssa7oW2T8a\nAKfgAqWzcOTeME7Hp3u9+OAh9ZXiguYdZ46dDOOrW0K63bei4x87JaxKCUiykztAQWHy/sdPAbVx\nn87/4KreTbzypsaQF17QGodIm6ef3htbuFdy8uTJsceWSrrf554T0m1nB8gZ6ABd5TjRedVCSWP3\nsA2cNuZY3G94ZaR50h9f13N85P/WO5Ps7/x2GHvA0tRfEM7i2i0htq49omfMo+2VZlX2R1aUe9qN\nq2HMYXeEsT+BOXbgqB+30P45Dxjs59kLrwrPxddwCSJDcM3VNSEvDh0aj3mKYlMUv3lRZfbCiyob\n1g+x30PsZWUzaguHD+seplELC1qzNFsq/wjtHXshp4B22dnWnLPHfUnO7TpYi3EdhBwcwd1WtJZI\npYB4xrq7NLN3z5cwtm2X1f+XM2o7jbbO3cY+S95Xu7t2VRiWBPa9uWZB6ndmgKPKp9RHk2kd/+ab\nmoMTk8U96fe/771hfPmK8LDrwDVFEPVYS8+i/5WKwrZwbR9w7xIxX1dwz59rZc6Zh+y7yb3c+q53\nqc+/9trrOiGelTixyPubyDsHIK0mjFvuxI3R763o3/5FwL5/9UqmsM4Clo04QQ9rtQ72Uetd9d3d\npsbOzafUlp55TWPhyUVhQQPs2XUGGkMGI8yTiHbH8cPE3j1stIUobT+vdf9nPiSk1dK8ck0M87TN\nK1fD+Pqt22F88aY+rw70HuXXvvTLYfwf33wqjLfKwJwhBQUkX/lcC7pjw+iL6AmI40kx343EJrQ3\n3E/go8/FdaI25rq/9bv/JowfOCtkaXd/7/zGTY3XxEitb6hOWi3VK8e5GDZGmZuI9z5xTG3l7Nmz\nYcwxld8RGeQndwAAIABJREFUiXZX/c/MjObDi4vLzt3InG5MJpPJZDKZTCaTyWQymUwmk8lkMplM\nJpPJZDKZTKa7lH3pxmQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkuku9rXip0rysClMp2Z8G\nsGpLA+NU3dgNYw82qsQ60Lo/k5JNWTqt88RhtZ4HMoBeTd2+LJC8ADZFwz0LsmRStqWz87ISDVxY\ny/VkkVVxde7LuxfCuFGHjVZD18zCAn2+IKvEBJBMNdh/J+A5NZOTJRtdj3Mo4zxi1yH6ALbqaA20\nfxukZQcZ+MTwqN5iKLNOT9Z3zaYsVV1PcQa2mQngf2hLdeB42KrJjuvG67K6G/bGY2PcCTSZyc5u\nxHFM+h7aeKvoqC017bum2/6tXJO9ZqMFu3BY8dWAvGgCndFtqR47FdVNLKc2NkC/HIKlkIAFmA8r\n/O5Q508OiRJS3z2wGyR8Ksbyh3V/APtFehC6EVwNLPAQsx7dqN+ajo/Yto23HnTREGmrG0FZ4Rha\nmPqw+0zCHrrcUF3tIvZpmYd7JuopjfMUgJ0q5omg0jG0xY/t2yUmiJ/BQ/WBDiC6JpeB5RzOl8C9\nEBe1CTQdrSxrwJ4R2ZGegNLhfUY9+aZPnQ5y5CTEEXJkH/k1ntDn7lhL6SjSghjFNlAHuSIt9WCH\niz4aSwAPtt9O6DrI+4qhzxFBNUK7HvSAukp7OB5/OwGDxOeIUOVw/lhM12UZ0GKW5yTOKQnb4CH8\naWknSvygB1zbCPmO9xNExhndM++TuZLX7QADmT1AAUXsxBWz7iNYJOYd3AvrahhBfhE1hT/l+IdT\nDmCBHsVhITeNJgzOUyK/C8vlOKxQccwQ+Bcf86ERxpAhLXDTxKUBqwq7YBcY0SFRekBREDUawC71\noItE3WeBG0OdxjAXJhLNxTjLGmJ1tYCY3K0CKdXDPBpzslRdn+fT6lvZLMogwDi0qzaeKsm+de4U\nMDwZlZmX0hySuSkGbGUCOKrg4U+GcfM5IQk8X3OYHtpwvaryKc3onMMh8mNzb7waBUD/JIjMouU3\n6gTzZQ9z3lRM5ZfPqvz6/fHIqhj+NlKHmJsHaDe9js6ZiGmsnUbNJVX+yyj/JNqw42n8y+W1DvJ4\nDPoFsVs++lkXuS6LuRHXdJwbcVzKYK2U2Ud/cL1YjMm2u9nUmMsxJsl5FXF/xEpiDkBs4U5ZFsjF\nLNa6BeGOEhFUHtZ2QHAUgHZeWJB9bgptuIn5gAeEXQZtr9+B/S/HPwwW9br6XK2u49uwvI+Bo8Hh\nvgHr/gTGmUJuLwdk0uP3CqpV4Yh3UWZt5OGtHX0+wFhM1CfrdhnllATyiHP5MmzmKxVZx3Osz+bV\nRqZRzV3V0ZvrilN4Tq7LsPq6I3Ft8PwNtYHf+KLs3meW1D6PvftEGLvoI05iDPYpgp8aj5qaiJSK\nrOMnoaMm4KWgoa9+dvPyrTD+5pPaG/rCvxS+44UX1WZ88hFM/9XryIzmOm2MT8QrpzCeEFnZGWFv\nrq5ctL4uK3xnhFx3Soiol56TpX8/rrH2ne96Txg3As3JapiDXNvYwwRsYP6xeki27EfXNN8bYPyo\nDPVMl1/5bhh//3nNCe9tqf9/4iPaOz15Qrm5hv2up78lJOFvP6nyWC8r16Q9HR/DHmwKuX+upOv+\n4//tZ3XdIyqzS0B4oVidFtCWjRZwhVxzYSbebmNdotP8OUQ08b5v3YfifkIC8yYPyNHdqtpE4rRw\nMi4wM9kNjaMrrwuDMFPRc1SXV8J46ZDa6wNHNc5985Jy3H2f/lwYp7I6ZjDl68XFVb1ziAERtfaO\nh8I4++yfhvEAdN9TQHi+8qza3uyCxrmbGe29v3pdZe1tCruRfa8QurtDjcI95IbofuVbP6tUVKdE\nSnGexrjfV78hpuj6deEh8pjTZHPKC9tYM8ex98FjVk8IA9FbOxzGz22pfR5eF8am87zGzmvY+/3m\njNrtBnAfQzx7ZkP54Nk31Sbf+fDxMO4DVcK5fwxz8ijVA7jhSIfd69+Bo78jiiaV1LmJ7h4BYRTZ\nUxqN39Ph/OTSRSGHOm3lNa7/I5h17IMFQHlcBe7j3AMPOtOmk6eFa9vY1ByrT1xvWs/pxsfvGQRt\ntXP2kSoQs02sQXJAFLKu+0Cncf1SLquvvfrSHmZsd1fvOhOu+lNhWffo5dSWZ9eE0y6uao9j0cd7\nz5byUb+huqtVdK2Fk+rriyfPhfHLrwh35QRA82AQI7bl0UcfC+Me9oE3iJdCWfYw/g3QDrn3G///\n27uzH8nOs47jtXYtXVW9TM90z4zHM56JPR7bcSInQiRAEhKJBGIEhEhIEbmK+E+45h4pd1xEQgIF\nBQEJJhsXSWyTxA7jeBlhe/bu6b279o2L7jnP94Qq2aUI0xLfz9Xrds2pU6fOec/7vqf0/HCdlXFd\nVEuMY+PYPs75Zie22cI8n2uRjePox8984uPJ3176UcS67jUx183z4SivUcRNYh2VUVPp+J73HstP\ni5FKzyxO9pzg4CD6mUYt1iG4TnbYib5lgGcBtXKc851hnCcDrHnuvhNjwRt3rift0+U455ubsQ+9\nQbRbeaw9HMT9avfdo+u7i9jTW5m4bnoHcW/oNX83ab/0ety7X/j+vyXtHyOOcRv3Vz6fe/XNiFtt\n5+O6aaIPSidH8WEH+/vJz8FSz4FSzzUZlTx+H+0M4F4x4v7gJdwH7Nv1NyIq8m///m+S9srS0T3+\nAeLCDxGFy2cL2VS8HO6dWINaXI75ySVESj1+OaJLz52LccX8fJxz4+zk50P8Ihp4Xra2ZryUJEmS\nJEmSJEmSJEmS9L/KH91IkiRJkiRJkiRJkiRJM/pA46VKvSiP1usg7gHVig53o8RSrhJl0+YXEPfA\naIQeysVhO639KAXVQWnfTVYRRrtYijKORZTNHh/HRC0sRNmq5UyUdluqRhmjB/0ojVSvRdm2SjXa\nN29HOatCH+XtELvTLKHM/ghxWCh7tI4Sceu78b5nGrFvtWK8b7kQn2++hJJ1qfQclH9D6fMKyhxu\noKRVp4OYL8TYjFF+iiUSWU69hFLcQ0TT5PvxGSvlo5J/r7/8i+Rv+1tRcmpaKedpMVIsxTqHEvIF\nlKsb9WPfu4dRHpBFHLP8rVqqShfjH052vFSrPSUig2XcUZbvEFFTfZRa7yFyIo9ypu1+/J2lwws4\nhw9RujKVUwOMMHp42OcYF1WMspCprBOUyGSZtPT2JpcdH2fT33byd/x1nCrliXJko8nlyPiaTI7l\n3xAhgTKYLCHaxfHexTm504zPWMb1VERJ9D6+20o59qFWjvKmjGIq4+8jfJaHZR9Z/pHl8bPZuIZY\nfn+cijJAWVnErMwhIqmH/b21Gdc63ir1b9m/9Iesb8f4nJN9Lc6jrG4WpfgG3cn9KEvqpUrQ4pxh\nqWl+TwMco0ot7gPdblyvZdwLGanBM7t/XO429Z7oF1MlcFGddMhIG1x/7FNYKpHn4LTPx6gpRo90\nERXE85aldHtdxvdwcMBrdDThr78SlYR9LiKWiK9hKVKWBeb9KtUlYZsdlHCuVsvH+zI58jD9nUyO\ng0uVMEX/OC16i5FZPH7ZVHlVxHlN7kIzuanxjSfDkPFSeYxpUNp0iPK5fdxH24gp4VhqMGCsHmK3\ncrHNPspHD3D/KeNYzy/HeJi5Tw/jo0ZTMsZGiBTg95tDvztCdCm/uw7GdXv7KNeK8r2jIcc9aCPW\noNOKc7K9FSfEYBz7Nl9Amf3S20n71OUoI15E6dk5jL1HGG+NppRVzy9EufzcWpRDHt6K8u/Nfbwe\nkXEVzD8O7mPccvzdFkrx2sGQ9zb2n7h3jtjXxHtW53GN4toaDSdf6/w+h8iHLaAcc7eHvjiH8UYz\n5kgn0TJiL9m3FFBGtlqPeRkjlMbo31L3gQEiMVH+m/cZRr2xZDRjJlqIW+2NYjvl4++sVkHYDu5J\n+3tRHj+HfRzg+p9LxTHGxVhvRLn+Vjves4n26aUo5ZxjxF8qqinatXrMEasoF17HmKTTQlwU+u/C\nXHwuRooeYCzR7sQ1PUCE7D4igw8P4zWVUhzjOscnGB8c9KKvKpfiO2/UjuYCRVy3XZTTv3074gXu\nrG8mbY4lGvU4xmuNeH/OYdo43gWMddcfxPXUZHQgtv9wTpvJZDJ5xCIxmuok2rob520DEXh/cS3O\nnxduxvf40mF8X7MWQm/ifvmtl2Kdo1KJkuJfwUYvfPh80p5bwdrGw6+yEt9RZm7KnGzMccmUuKgp\n0VRpvAfHMdh8dz1p//Vffidp//O34962sRmvH41mPWr6/+LcYvTxG4gDGmLu3kJ/2cGcuoPTdh/x\nUiX0mRfPxH1grh+RGj98McrlV1cjymPxNyNeaj8b/fGLr0Xp/M5xHA0jAwd7WFN6JeIszi7fj/fH\n2mkT//bLzz+ZtJfPx73z1ALGTFhvmC/FuOeTH417W2EUZf9/+nrcKxjJlc0gJqSAeXgx7hWri7FN\nlv3f3ox4jcbCWrwGg+wBSud3ezFWYTzQIBUdPbns/3DKayZFCxUYaYro13ffvoFN47Oi3alHH/vg\ncXymbyMOZCUituaXsbaNMdfCUsQrLa5GH851nHZn1qDCD1Z7LtZKtm5GFMUjp2Nu8uSTca5uYM0u\ng6ik24jm2kKMzCLmD89djBiDp87F8d3djn9bWI054vnzcUzX1+P+0z9eZ8xNiUlhdBTHn03EoLHd\nx7rliy9GBN1nP/u52D7Gurvod2qIz2o0ol/7jU/+dtL+s69+LWm3WvG+nBPdvxvPQFp3Izr4mVu3\nkvb2v/5j0u60EFGKeXC9EfF0C4sRS1EdvJO0GZ2djpyNv59ZwrykhLjj47W1AmIwh/34TON8fPed\ndvRHDzYjTozHe9p1zvHDE1evJu2v/vlXkvbdN3+ZtN+9G33uR/Cs696Po8+//WR8b1/8wz/OnDRZ\nrJsMpqxL8nw+wNxkiOdjgyHmxThv58qMgI1jweNexNy0jHOb/fQAa3m7D46+1zX0f8VmzE3aA/SX\nmA9dW4tzM5eKPIz+uIq+afM64uDuoi/AOXb6TEQClt+J16Qi57EmWUaM79JS9DuPXojP8jNE7HCd\ndnMzPuONtyL+7NqVi0m7jqjkCtYzeDtr4R5/0IpxANc8uF5eq8W1WC0fHZ/xYlzzv/f8l5L2D773\nvaSdzTM6mHNprEOn1gqwv7G7qbX495E09SvPMrkmfcLnB5jDDTLxvfQwd+5gLNBHJCDXEnjf6CPa\njMeR6+13mtHfN+bjet1px3P3xVNxDpRjqSIznzv6jksXYyzXa8cL3r4T2/6rr389aRcwLuV9sdWK\nzzTAc+Usnkd19uIYbN6Oa2KIrKZ8FWubGJeOUuNAzlPfO2oqBf82HZHIGCn842lT38HkP3PtietW\n//TCN5P2x5/5dCaTyWTmcP+jwpRrq1SOPu7MaUTLXr6UtB99JNZ9z5yJ/rE2j7Uy7OMQnxuPZ1PP\nY0pYd1pZid9cvB8n+wmIJEmSJEmSJEmSJEmSdAL5oxtJkiRJkiRJkiRJkiRpRh9ovNS921Eib5yL\ncl2Ly1HObliJGkWlEkrhI2pjgDpJ8ygXVkCJ+fxclJa6j7Jj/RxKMRYRGZBnrECUDiocl1LuZ+Jv\n95tREnh/EKWoGvkoM/Tk6rNJu4bygq9uR4nkXBuHH6WLuj1E9qCkcQmxV5lRHL/dwyiRur8fZfkX\n56Pk20otjnEFpfQKiIU5aEXJvJ292CZjgDoo1d5EifVUmgSqNpdRgryIMngsod5CucQ8yrcebB7t\nz43/jLKdrNXGMlOpKmx4TakW73n+WpSfuvTs5aS9cDqO0+WzUbbvpz94JWn/5Hv/kbR7bZZCmxzH\n0WtPqbV1QgwGrJvF0voofYYScYd9xF+wpCUO/BBldXvYPuNqWPYyVQISZTpLBV4X0SwcvybHGBOU\n/M+yBBr2N9ufXGqSn3VaANF4yn+MM5PLB06FMm8sNz/Cse/jmLEMZgtRHhsoR9dF2egcjzdKRVfR\nh9arLEMZfdI8ohBYInGUYUm8o2POEnWpWDKcTqnS6Kn4I8RL4X3qeP8zKNPM49FOfYeB+8OYE75q\ndNJLMWYmnxtzc6lPOvFfsg9kOeo59LuFAkvzTY6mYunPdJ82OQZpPH54PiC+CC9gSdL031GaE2UW\n0/FS0cwhe5L7Tn1c63zfIo4B4zsYP8H7DYdD6fKd8ZoejjH3p4ASxXyv1FbYB+R4MCe/hsdh5XTc\nvx9eR4xxzOfi/XNZxCmkIkxwkfISxedgqXOWUc6mzgn0z6ny5ihDy2gc/L3fO9nlwsd9lDxFNMnB\ndpSjZnlndkDtDuIhhtEuV2Lc1kV5zTmUac/j/D9EjBMu70z5FEpWVxEBd1xGeIS+YzBiCeo4T/qI\ni8ryPMmwvGb8dX8/xssHu3EMctgmx37lVPIm4qXwomY/3quCuCN08Zk3fhHj2FH2haT9qS9i+5hD\nVHHe8hoqlqOEaL+N77AQpe23tmKni5kYey+txT2yfYjjhpicbBJ1iHsx420QZ5RFuecMosXGiDPi\nddYbML6H8x/ED6HPSpXcLfGeEvfUMWJs+ye8dP8y4n1yiGiaR4RuAZFSWY6/cU8opPq3yfcHXju8\nB/d6cf63EZvUxfYZm1s47veyC7HvzQFK/DIuEbVrs1NKVjOOrzYf2zw4PMRreF/BviMGj+9bwnnI\nUs6lIktox+tbLcyNcc3VEQfQRGTAEPe/LIfk2J/RcPJ4LoN5APuqIv6+iPfl+OfhPnc7iHbCps8i\nbqG+GLEl25sRobJ6NsoPF3GPbmObQ3xXTZSK7+A1lVTp9Yia4Ofr4TgdHkSffxIt16IP+fJnYu5c\nX4x1lvV/iLiCnyJe6teZCe/gxvGNH0QEwpt3/j1pP/c01l0wx7/y9FEcx9nH42+1C/Ha/GJcT+lc\nz8kxo1PbuBe2tyKaYP1mrHe99MMoof/970b8xf2Nk90H6+RZxXmbRfxEF1ERVcTYbR0gkiUVMRvb\nZLxwHnGkt96Ntc47iLE52Ihr/fadiO27/lbEEz3YjmuhUjnqPxilfIC+8/ZW3D/OIHbn0rnoRxpL\nsTb3zltxH/ou4uefjdSrzBMfwhpzNcY9F85Hn5VFrMEcxqJv34333W9jHIvLtYsI8ybiakqliOfa\nwjGYr8WYs4D7VhHtXd67pszPe9jn4ZTY30nxE1XM58oYA9SXIlZkB+fK9k58Dyul6Dc5/Rs8thz7\n3ojvdg5j2g9f+1DSvv9fcd7cW49IoH4bETul2M7Nu3eS9scyT/+Pz/R/rYBx/FPXnknaj1+NfW03\n4771sT96Lmm/cyOix269Ft/d440Ym6xi3n+6g2jSpTiHGysxvsghKmV9L87JjY24Fz2c13ONqDdl\nXs5zivPeA8QR8zX37sVnYnxrJhP90fJCXB/cZqGA5wN41rF2jtFjiJNpRp9VWo7orYsfjmcvn8S8\nev1m3IMf3I+4kflqnG+VfOxbby8idqpIFkpHtXL9i+vo8fo5RKY+XCPZ2optp+bSeG0b/eM2+pEe\nPhOv8mlRU2yfXYtYsguV2PeVhRhTr5biw24NEa23H9/5SbSxEeP4PhYTUqnxGLctLEWf1nkQ0S6M\nsmVdggrirEuleC+uUc4j0uYZRECNEDW6/SAiU89dPHrN1atx49q+Hc+7urdeS9qHBzHnu/JURDpW\nG9EHl/CshXFn/f14nrfxdmxzjPktr7+FhfgcY5xlqbUHPDsc4hy7fCX6e0ZsdRDVs38Y59LLL7+c\ntL/yJ19I2jXMObi2fdiO77aDmO4s1gIqldg3Rn7lsBb+cG843/+dT386/t1c9FlvICpzgOfMnJ9z\nPZtrp3zNEDH16Ws0M9E4tTY8+TUnUR7PBRgvNcCcvo+11jGuoR7GVXmcbz1E0WcQH7ZWfyRp7/Rj\nDLzdieusNYprp56P63iphntn/fj8R4fx6JVLSbv0XJxH2xux7bdffyN2C2scWVzzXN8Z9+JL3Xs3\n+p39O7HN6lLsQxGLqp09LJJmJj9DSJ0oLKsynPIanocZyk18TfphPz4Xt4lnxxlEmWZx7WzvRh96\n5/7Reu/jl2IMxUh5/nagjnXztdW471957ErSfuSRR/H66MvKGFsyLj41XsY1OspxTI2oQVzfDcSy\nvx9WupEkSZIkSZIkSZIkSZJm5I9uJEmSJEmSJEmSJEmSpBl9oPFStVNRNrGAiCOW6xtmo7RPN4O6\ncChhmBujXH8rygKdOh2lour52P7BNkpZV6K80GC8n7T7XZQUQhxCd3BUlu0QdUVbQ5SdR7zU0nKU\npq4VUdZ+EGUCM6XY33ONKI1UycV2Wv0owzZkSa1MlEMqI85iASX0O714r7sbUcJwE+XzCvit1cEu\nYqQOonzlBuKlCvkoq1VDeabDDiO5Yi9RdS4zjzLrldzkKDCWfGfJp9vvHpVh7jTjfXIFlHNDSShW\nECw14vy4+qkodXf2SpRWXFqJUq+Li3HePP14lAV95pkoU7n6oShFeO9OlNDMo3R/D6XT9h7EsTyJ\nWE6LVetYIm+M9IneHErkzeN/VONYj1BejJElJZQxTZUv4+tTUU8sx4/yXscl8kcoy55nvhVKLWcZ\n8cJt8P35yVkmDa/CaZoZ8e9T4n74b1mxjLvJNnYtFafE/WkjyuCgy/4AJYcR9VQrxwV4CjFS9Sqi\nAWrxveXzPAMm7//oeN9GU0oisszxINWOzzTG8U7FHOHtGS9VnovPsbEb5QEZY8b96Q4YbzM50uEk\nYgxLH6Wjc4gCYXTakCcNsFwwjy8jkRhdkeFrUFJ1rsTf4jKmhO82Pv7b5GisbBaxVNO+d5bYLsb3\nTtlUPFJcB/wcLOWZjhzEa1CqMJcqsT7t3Ee5y97k2K7BEKUy2ScxBmvM8oSpuowTX8/dmcM9Pjsh\n/mRauVFei+yHGTM2La4sFSnFCL1UZ4Z/kIoCm/wbbu57Ljc5IuykQHeVGeC66XZiTLaDqCn2XUXE\nzPT7iPopoy9HjMgK+rrFVUaQYIdws0jFrdSipGWhflxeGOO0MT5Ir4vxE2OkUEaTfUoXJb939hBN\n0EV8Fs6Baj7+g7texDjwsBPvuzgXry/g8xXYD2L/f/lKlAVnhNBvYSfOXIpyokWMUSu1GLcdbkX0\nwc6diK9qHsb3fPYCSo5yjNqM722EiLxJ44AC+r50/BPu3fgcxSKi23DtDhERVsD4a4zIqhFr/eM+\nzgrZxfkS/j75Pn0SVVD2vVCMcUx1nvcKRHnhGuW9hcedfeZoyHtUyKKfLpVjHjlkZCWunSyunfzx\n/KTKeyvO5Tr2vYNID45j2C6XECmcijlELAbH19j3TotjJnRs6INTMRe4PxzsRTn7Fo7r8pm4nopT\nIhUZN8AOkse+0YiSv4yLHSImjmXBCwV+zxjP4Haye1yCP4ssgDOrsb8lXGeNFsqw4xrm/LOI6MkH\nWzEf3kUER7sVx6aCGMFqFREw2H4LETA9jGP3m7HNk2j5asydl+cm35PWGpjfZ2NtZfBrDL/5T/cQ\nMf7912J+/aM34r0WqxGHc3nt6Dv+xMcjcuPzfxDlq6997lrSzq9Gif5fmRFP+Tvg3N++HlEi//KN\nnyTtv/tO3Htu3otzRppVB+OwNtYlK7jnVFGOfR8DsXwqcjf+bacX5/nWTvT97yBe6sa9+PvOQYwp\nr78V+8O4GM7B+8fvNRxGH1nCPnZwbd/k2hn642eXrybtH74W1/y3X479unolru/laqx5PnH2EO0Y\nv9ez0R8vzyG6poKx35Bzb8Sv45gxbrzDtWKuK2O80UWcD9dFeMxYUp/HlXMx3mtHU9YFHs5967hf\ntxGd+8IrEZ3x2Eqs0V/95reS9pe+9tWkHb18JrO6EOfWoILjgQiQBtaaVq9EX/zSjegrm7gv1gvx\n+gfbEUFwEj2HNeV6PdaU185FZNfhYYz5HrmA5xuH8dn+9AtPJe0SYmxqGH/iK8tUFmP+lxsgDuPi\npaR9D5FEHCN2jsdzPI8Y38I2zymOIQ8Rb7q7G+/TwVjx+vXrSbtRietyaXEpaa/fj3OAMSy3EFn3\ni5//PGkvr0bU1JjRTugn6tj+zg7Gbc34XOuIyqssxYEd5qLveexyPDvIDuNz8XpNxYTj7/sYFw7z\nccXUjvsAzkkYW8FnPJwjMkKdY20aT5lDpNb6MT8YYq2RsX+9lXiOlUXk0PiE59vsbEV/38HxzyHi\naIg1u8ZijPm2d+N+kkpJwZryQiWuoUcvxHpDBhFci424LquYhzC++OKliJK6eOHC0bZrmC8gdufm\nrdeTNue3tVo885tHHF0e1wTX42rLMQ8qz8c+FkexzSxiJVeWYpt1RJm3mnHdM4aF73vlcsS8nEdc\n7z76iSLiDV97M9ZifvZq3Iue/chHk3YP6yj5ShyrhSLXvDnX5POkkJ8wHx2kIp9je1euRp+8vhHn\n1qgXsYh8dMK1zXxu8j2dY4n0evDkSVJ6ffpkX3/EWKgclr36bczvEd+VZ2Ql8otGOEaMJhriuf9c\nNrZTxNhhrxXXdK+FtXo8g++gHy4cP8TOYt6/34lzlusUF85cTNq///znk/ad1yPq9OevRozb/Xux\nL90ux2zM3472+UdinNQsRn9wtx37M2baHxPxGHPInMPUfWbKIn76AS02yWelfC4wcSup5x6pBQDs\nDqObbq+/k8lkMpknHotr7tSpJbSjrz53NsZW5xE9uXomxmKNBmLDpj7vwe6mjs3keGk+2+UPZ9Jr\ndO/NSjeSJEmSJEmSJEmSJEnSjPzRjSRJkiRJkiRJkiRJkjSjbCo2QJIkSZIkSZIkSZIkSdJ7stKN\nJEmSJEmSJEmSJEmSNCN/dCNJkiRJkiRJkiRJkiTNyB/dSJIkSZIkSZIkSZIkSTPyRzeSJEmSJEmS\nJEmSJEnSjPzRjSRJkiRJkiRJkiRJkjQjf3QjSZIkSZIkSZIkSZIkzcgf3UiSJEmSJEmSJEmSJEkz\n8kdXOkxMAAABEElEQVQ3kiRJkiRJkiRJkiRJ0oz80Y0kSZIkSZIkSZIkSZI0I390I0mSJEmSJEmS\nJEmSJM3IH91IkiRJkiRJkiRJkiRJM/JHN5IkSZIkSZIkSZIkSdKM/NGNJEmSJEmSJEmSJEmSNCN/\ndCNJkiRJkiRJkiRJkiTNyB/dSJIkSZIkSZIkSZIkSTPyRzeSJEmSJEmSJEmSJEnSjPzRjSRJkiRJ\nkiRJkiRJkjQjf3QjSZIkSZIkSZIkSZIkzcgf3UiSJEmSJEmSJEmSJEkz8kc3kiRJkiRJkiRJkiRJ\n0oz80Y0kSZIkSZIkSZIkSZI0I390I0mSJEmSJEmSJEmSJM3IH91IkiRJkiRJkiRJkiRJM/pvgbTr\nFxtEq1UAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print_mislabeled_images(classes, test_x, test_y, pred_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**A few types of images the model tends to do poorly on include:** \n", + "- Cat body in an unusual position\n", + "- Cat appears against a background of a similar color\n", + "- Unusual cat color and species\n", + "- Camera Angle\n", + "- Brightness of the picture\n", + "- Scale variation (cat is very large or small in image) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7) Test with your own image (optional/ungraded exercise) ##\n", + "\n", + "Congratulations on finishing this assignment. You can use your own image and see the output of your model. To do that:\n", + " 1. Click on \"File\" in the upper bar of this notebook, then click \"Open\" to go on your Coursera Hub.\n", + " 2. Add your image to this Jupyter Notebook's directory, in the \"images\" folder\n", + " 3. Change your image's name in the following code\n", + " 4. Run the code and check if the algorithm is right (1 = cat, 0 = non-cat)!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 1.0\n", + "y = 1.0, your L-layer model predicts a \"cat\" picture.\n" + ] + } + ], + "source": [ + "## START CODE HERE ##\n", + "my_image = \"my_image.jpg\" # change this to the name of your image file \n", + "my_label_y = [1] # the true class of your image (1 -> cat, 0 -> non-cat)\n", + "## END CODE HERE ##\n", + "\n", + "fname = \"images/\" + my_image\n", + "image = np.array(ndimage.imread(fname, flatten=False))\n", + "my_image = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((num_px*num_px*3,1))\n", + "my_image = my_image/255.\n", + "my_predicted_image = predict(my_image, my_label_y, parameters)\n", + "\n", + "plt.imshow(image)\n", + "print (\"y = \" + str(np.squeeze(my_predicted_image)) + \", your L-layer model predicts a \\\"\" + classes[int(np.squeeze(my_predicted_image)),].decode(\"utf-8\") + \"\\\" picture.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**References**:\n", + "\n", + "- for auto-reloading external module: http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython" + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "neural-networks-deep-learning", + "graded_item_id": "TSPse", + "launcher_item_id": "24mxX" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Coursera/Lesson2/.DS_Store b/Coursera/Lesson2/.DS_Store new file mode 100644 index 0000000..fc4f414 Binary files /dev/null and b/Coursera/Lesson2/.DS_Store differ diff --git a/Coursera/Lesson2/Week1/Gradient+Checking+v1.ipynb b/Coursera/Lesson2/Week1/Gradient+Checking+v1.ipynb new file mode 100644 index 0000000..070bd4b --- /dev/null +++ b/Coursera/Lesson2/Week1/Gradient+Checking+v1.ipynb @@ -0,0 +1,659 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gradient Checking\n", + "\n", + "Welcome to the final assignment for this week! In this assignment you will learn to implement and use gradient checking. \n", + "\n", + "You are part of a team working to make mobile payments available globally, and are asked to build a deep learning model to detect fraud--whenever someone makes a payment, you want to see if the payment might be fraudulent, such as if the user's account has been taken over by a hacker. \n", + "\n", + "But backpropagation is quite challenging to implement, and sometimes has bugs. Because this is a mission-critical application, your company's CEO wants to be really certain that your implementation of backpropagation is correct. Your CEO says, \"Give me a proof that your backpropagation is actually working!\" To give this reassurance, you are going to use \"gradient checking\".\n", + "\n", + "Let's do it!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Packages\n", + "import numpy as np\n", + "from testCases import *\n", + "from gc_utils import sigmoid, relu, dictionary_to_vector, vector_to_dictionary, gradients_to_vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1) How does gradient checking work?\n", + "\n", + "Backpropagation computes the gradients $\\frac{\\partial J}{\\partial \\theta}$, where $\\theta$ denotes the parameters of the model. $J$ is computed using forward propagation and your loss function.\n", + "\n", + "Because forward propagation is relatively easy to implement, you're confident you got that right, and so you're almost 100% sure that you're computing the cost $J$ correctly. Thus, you can use your code for computing $J$ to verify the code for computing $\\frac{\\partial J}{\\partial \\theta}$. \n", + "\n", + "Let's look back at the definition of a derivative (or gradient):\n", + "$$ \\frac{\\partial J}{\\partial \\theta} = \\lim_{\\varepsilon \\to 0} \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon} \\tag{1}$$\n", + "\n", + "If you're not familiar with the \"$\\displaystyle \\lim_{\\varepsilon \\to 0}$\" notation, it's just a way of saying \"when $\\varepsilon$ is really really small.\"\n", + "\n", + "We know the following:\n", + "\n", + "- $\\frac{\\partial J}{\\partial \\theta}$ is what you want to make sure you're computing correctly. \n", + "- You can compute $J(\\theta + \\varepsilon)$ and $J(\\theta - \\varepsilon)$ (in the case that $\\theta$ is a real number), since you're confident your implementation for $J$ is correct. \n", + "\n", + "Lets use equation (1) and a small value for $\\varepsilon$ to convince your CEO that your code for computing $\\frac{\\partial J}{\\partial \\theta}$ is correct!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2) 1-dimensional gradient checking\n", + "\n", + "Consider a 1D linear function $J(\\theta) = \\theta x$. The model contains only a single real-valued parameter $\\theta$, and takes $x$ as input.\n", + "\n", + "You will implement code to compute $J(.)$ and its derivative $\\frac{\\partial J}{\\partial \\theta}$. You will then use gradient checking to make sure your derivative computation for $J$ is correct. \n", + "\n", + "\n", + "
**Figure 1** : **1D linear model**
\n", + "\n", + "The diagram above shows the key computation steps: First start with $x$, then evaluate the function $J(x)$ (\"forward propagation\"). Then compute the derivative $\\frac{\\partial J}{\\partial \\theta}$ (\"backward propagation\"). \n", + "\n", + "**Exercise**: implement \"forward propagation\" and \"backward propagation\" for this simple function. I.e., compute both $J(.)$ (\"forward propagation\") and its derivative with respect to $\\theta$ (\"backward propagation\"), in two separate functions. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation\n", + "\n", + "def forward_propagation(x, theta):\n", + " \"\"\"\n", + " Implement the linear forward propagation (compute J) presented in Figure 1 (J(theta) = theta * x)\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " \n", + " Returns:\n", + " J -- the value of function J, computed using the formula J(theta) = theta * x\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " J = theta*x\n", + " ### END CODE HERE ###\n", + " \n", + " return J" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "J = 8\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "J = forward_propagation(x, theta)\n", + "print (\"J = \" + str(J))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** J ** 8
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the backward propagation step (derivative computation) of Figure 1. That is, compute the derivative of $J(\\theta) = \\theta x$ with respect to $\\theta$. To save you from doing the calculus, you should get $dtheta = \\frac { \\partial J }{ \\partial \\theta} = x$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation\n", + "\n", + "def backward_propagation(x, theta):\n", + " \"\"\"\n", + " Computes the derivative of J with respect to theta (see Figure 1).\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " \n", + " Returns:\n", + " dtheta -- the gradient of the cost with respect to theta\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dtheta = x\n", + " ### END CODE HERE ###\n", + " \n", + " return dtheta" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dtheta = 2\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "dtheta = backward_propagation(x, theta)\n", + "print (\"dtheta = \" + str(dtheta))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** dtheta ** 2
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: To show that the `backward_propagation()` function is correctly computing the gradient $\\frac{\\partial J}{\\partial \\theta}$, let's implement gradient checking.\n", + "\n", + "**Instructions**:\n", + "- First compute \"gradapprox\" using the formula above (1) and a small value of $\\varepsilon$. Here are the Steps to follow:\n", + " 1. $\\theta^{+} = \\theta + \\varepsilon$\n", + " 2. $\\theta^{-} = \\theta - \\varepsilon$\n", + " 3. $J^{+} = J(\\theta^{+})$\n", + " 4. $J^{-} = J(\\theta^{-})$\n", + " 5. $gradapprox = \\frac{J^{+} - J^{-}}{2 \\varepsilon}$\n", + "- Then compute the gradient using backward propagation, and store the result in a variable \"grad\"\n", + "- Finally, compute the relative difference between \"gradapprox\" and the \"grad\" using the following formula:\n", + "$$ difference = \\frac {\\mid\\mid grad - gradapprox \\mid\\mid_2}{\\mid\\mid grad \\mid\\mid_2 + \\mid\\mid gradapprox \\mid\\mid_2} \\tag{2}$$\n", + "You will need 3 Steps to compute this formula:\n", + " - 1'. compute the numerator using np.linalg.norm(...)\n", + " - 2'. compute the denominator. You will need to call np.linalg.norm(...) twice.\n", + " - 3'. divide them.\n", + "- If this difference is small (say less than $10^{-7}$), you can be quite confident that you have computed your gradient correctly. Otherwise, there may be a mistake in the gradient computation. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: gradient_check\n", + "\n", + "def gradient_check(x, theta, epsilon = 1e-7):\n", + " \"\"\"\n", + " Implement the backward propagation presented in Figure 1.\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " epsilon -- tiny shift to the input to compute approximated gradient with formula(1)\n", + " \n", + " Returns:\n", + " difference -- difference (2) between the approximated gradient and the backward propagation gradient\n", + " \"\"\"\n", + " \n", + " # Compute gradapprox using left side of formula (1). epsilon is small enough, you don't need to worry about the limit.\n", + " ### START CODE HERE ### (approx. 5 lines)\n", + " thetaplus = theta+epsilon # Step 1\n", + " thetaminus = theta-epsilon # Step 2\n", + " J_plus = forward_propagation(x,thetaplus) # Step 3\n", + " J_minus = forward_propagation(x,thetaminus) # Step 4\n", + " gradapprox = (J_plus-J_minus)/(2*epsilon) # Step 5\n", + " ### END CODE HERE ###\n", + " \n", + " # Check if gradapprox is close enough to the output of backward_propagation()\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " grad = backward_propagation(x,theta)\n", + " ### END CODE HERE ###\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " numerator = np.linalg.norm(grad-gradapprox) # Step 1'\n", + " denominator = np.linalg.norm(grad)+np.linalg.norm(gradapprox) # Step 2'\n", + " difference = numerator/denominator # Step 3'\n", + " ### END CODE HERE ###\n", + " \n", + " if difference < 1e-7:\n", + " print (\"The gradient is correct!\")\n", + " else:\n", + " print (\"The gradient is wrong!\")\n", + " \n", + " return difference" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient is correct!\n", + "difference = 2.91933588329e-10\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "difference = gradient_check(x, theta)\n", + "print(\"difference = \" + str(difference))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "The gradient is correct!\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** difference ** 2.9193358103083e-10
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congrats, the difference is smaller than the $10^{-7}$ threshold. So you can have high confidence that you've correctly computed the gradient in `backward_propagation()`. \n", + "\n", + "Now, in the more general case, your cost function $J$ has more than a single 1D input. When you are training a neural network, $\\theta$ actually consists of multiple matrices $W^{[l]}$ and biases $b^{[l]}$! It is important to know how to do a gradient check with higher-dimensional inputs. Let's do it!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3) N-dimensional gradient checking" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The following figure describes the forward and backward propagation of your fraud detection model.\n", + "\n", + "\n", + "
**Figure 2** : **deep neural network**
*LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID*
\n", + "\n", + "Let's look at your implementations for forward propagation and backward propagation. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def forward_propagation_n(X, Y, parameters):\n", + " \"\"\"\n", + " Implements the forward propagation (and computes the cost) presented in Figure 3.\n", + " \n", + " Arguments:\n", + " X -- training set for m examples\n", + " Y -- labels for m examples \n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " W1 -- weight matrix of shape (5, 4)\n", + " b1 -- bias vector of shape (5, 1)\n", + " W2 -- weight matrix of shape (3, 5)\n", + " b2 -- bias vector of shape (3, 1)\n", + " W3 -- weight matrix of shape (1, 3)\n", + " b3 -- bias vector of shape (1, 1)\n", + " \n", + " Returns:\n", + " cost -- the cost function (logistic cost for one example)\n", + " \"\"\"\n", + " \n", + " # retrieve parameters\n", + " m = X.shape[1]\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " W3 = parameters[\"W3\"]\n", + " b3 = parameters[\"b3\"]\n", + "\n", + " # LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID\n", + " Z1 = np.dot(W1, X) + b1\n", + " A1 = relu(Z1)\n", + " Z2 = np.dot(W2, A1) + b2\n", + " A2 = relu(Z2)\n", + " Z3 = np.dot(W3, A2) + b3\n", + " A3 = sigmoid(Z3)\n", + "\n", + " # Cost\n", + " logprobs = np.multiply(-np.log(A3),Y) + np.multiply(-np.log(1 - A3), 1 - Y)\n", + " cost = 1./m * np.sum(logprobs)\n", + " \n", + " cache = (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3)\n", + " \n", + " return cost, cache" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, run backward propagation." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def backward_propagation_n(X, Y, cache):\n", + " \"\"\"\n", + " Implement the backward propagation presented in figure 2.\n", + " \n", + " Arguments:\n", + " X -- input datapoint, of shape (input size, 1)\n", + " Y -- true \"label\"\n", + " cache -- cache output from forward_propagation_n()\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients of the cost with respect to each parameter, activation and pre-activation variables.\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " dW3 = 1./m * np.dot(dZ3, A2.T)\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " \n", + " dA2 = np.dot(W3.T, dZ3)\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " dW2 = 1./m * np.dot(dZ2, A1.T) * 2\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " dW1 = 1./m * np.dot(dZ1, X.T)\n", + " db1 = 4./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\n", + " \"dA2\": dA2, \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2,\n", + " \"dA1\": dA1, \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "You obtained some results on the fraud detection test set but you are not 100% sure of your model. Nobody's perfect! Let's implement gradient checking to verify if your gradients are correct." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**How does gradient checking work?**.\n", + "\n", + "As in 1) and 2), you want to compare \"gradapprox\" to the gradient computed by backpropagation. The formula is still:\n", + "\n", + "$$ \\frac{\\partial J}{\\partial \\theta} = \\lim_{\\varepsilon \\to 0} \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon} \\tag{1}$$\n", + "\n", + "However, $\\theta$ is not a scalar anymore. It is a dictionary called \"parameters\". We implemented a function \"`dictionary_to_vector()`\" for you. It converts the \"parameters\" dictionary into a vector called \"values\", obtained by reshaping all parameters (W1, b1, W2, b2, W3, b3) into vectors and concatenating them.\n", + "\n", + "The inverse function is \"`vector_to_dictionary`\" which outputs back the \"parameters\" dictionary.\n", + "\n", + "\n", + "
**Figure 2** : **dictionary_to_vector() and vector_to_dictionary()**
You will need these functions in gradient_check_n()
\n", + "\n", + "We have also converted the \"gradients\" dictionary into a vector \"grad\" using gradients_to_vector(). You don't need to worry about that.\n", + "\n", + "**Exercise**: Implement gradient_check_n().\n", + "\n", + "**Instructions**: Here is pseudo-code that will help you implement the gradient check.\n", + "\n", + "For each i in num_parameters:\n", + "- To compute `J_plus[i]`:\n", + " 1. Set $\\theta^{+}$ to `np.copy(parameters_values)`\n", + " 2. Set $\\theta^{+}_i$ to $\\theta^{+}_i + \\varepsilon$\n", + " 3. Calculate $J^{+}_i$ using to `forward_propagation_n(x, y, vector_to_dictionary(`$\\theta^{+}$ `))`. \n", + "- To compute `J_minus[i]`: do the same thing with $\\theta^{-}$\n", + "- Compute $gradapprox[i] = \\frac{J^{+}_i - J^{-}_i}{2 \\varepsilon}$\n", + "\n", + "Thus, you get a vector gradapprox, where gradapprox[i] is an approximation of the gradient with respect to `parameter_values[i]`. You can now compare this gradapprox vector to the gradients vector from backpropagation. Just like for the 1D case (Steps 1', 2', 3'), compute: \n", + "$$ difference = \\frac {\\| grad - gradapprox \\|_2}{\\| grad \\|_2 + \\| gradapprox \\|_2 } \\tag{3}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: gradient_check_n\n", + "\n", + "def gradient_check_n(parameters, gradients, X, Y, epsilon = 1e-7):\n", + " \"\"\"\n", + " Checks if backward_propagation_n computes correctly the gradient of the cost output by forward_propagation_n\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " grad -- output of backward_propagation_n, contains gradients of the cost with respect to the parameters. \n", + " x -- input datapoint, of shape (input size, 1)\n", + " y -- true \"label\"\n", + " epsilon -- tiny shift to the input to compute approximated gradient with formula(1)\n", + " \n", + " Returns:\n", + " difference -- difference (2) between the approximated gradient and the backward propagation gradient\n", + " \"\"\"\n", + " \n", + " # Set-up variables\n", + " parameters_values, _ = dictionary_to_vector(parameters)\n", + " grad = gradients_to_vector(gradients)\n", + " num_parameters = parameters_values.shape[0]\n", + " J_plus = np.zeros((num_parameters, 1))\n", + " J_minus = np.zeros((num_parameters, 1))\n", + " gradapprox = np.zeros((num_parameters, 1))\n", + " \n", + " # Compute gradapprox\n", + " for i in range(num_parameters):\n", + " \n", + " # Compute J_plus[i]. Inputs: \"parameters_values, epsilon\". Output = \"J_plus[i]\".\n", + " # \"_\" is used because the function you have to outputs two parameters but we only care about the first one\n", + " ### START CODE HERE ### (approx. 3 lines)\n", + " thetaplus = np.copy(parameters_values) # Step 1\n", + " thetaplus[i][0] += epsilon # Step 2\n", + " J_plus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaplus)) # Step 3\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute J_minus[i]. Inputs: \"parameters_values, epsilon\". Output = \"J_minus[i]\".\n", + " ### START CODE HERE ### (approx. 3 lines)\n", + " thetaminus = np.copy(parameters_values) # Step 1\n", + " thetaminus[i][0] -= epsilon # Step 2 \n", + " J_minus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaminus)) # Step 3\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute gradapprox[i]\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " gradapprox[i] = (J_plus[i]-J_minus[i])/(2*epsilon)\n", + " ### END CODE HERE ###\n", + " \n", + " # Compare gradapprox to backward propagation gradients by computing difference.\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " numerator = np.linalg.norm(grad-gradapprox) # Step 1'\n", + " denominator = np.linalg.norm(grad)+np.linalg.norm(gradapprox) # Step 2'\n", + " difference = numerator/denominator # Step 3'\n", + " ### END CODE HERE ###\n", + "\n", + " if difference > 2e-7:\n", + " print (\"\\033[93m\" + \"There is a mistake in the backward propagation! difference = \" + str(difference) + \"\\033[0m\")\n", + " else:\n", + " print (\"\\033[92m\" + \"Your backward propagation works perfectly fine! difference = \" + str(difference) + \"\\033[0m\")\n", + " \n", + " return difference" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[93mThere is a mistake in the backward propagation! difference = 0.285093156654\u001b[0m\n" + ] + } + ], + "source": [ + "X, Y, parameters = gradient_check_n_test_case()\n", + "\n", + "cost, cache = forward_propagation_n(X, Y, parameters)\n", + "gradients = backward_propagation_n(X, Y, cache)\n", + "difference = gradient_check_n(parameters, gradients, X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** There is a mistake in the backward propagation!** difference = 0.285093156781
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems that there were errors in the `backward_propagation_n` code we gave you! Good that you've implemented the gradient check. Go back to `backward_propagation` and try to find/correct the errors *(Hint: check dW2 and db1)*. Rerun the gradient check when you think you've fixed it. Remember you'll need to re-execute the cell defining `backward_propagation_n()` if you modify the code. \n", + "\n", + "Can you get gradient check to declare your derivative computation correct? Even though this part of the assignment isn't graded, we strongly urge you to try to find the bug and re-run gradient check until you're convinced backprop is now correctly implemented. \n", + "\n", + "**Note** \n", + "- Gradient Checking is slow! Approximating the gradient with $\\frac{\\partial J}{\\partial \\theta} \\approx \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon}$ is computationally costly. For this reason, we don't run gradient checking at every iteration during training. Just a few times to check if the gradient is correct. \n", + "- Gradient Checking, at least as we've presented it, doesn't work with dropout. You would usually run the gradient check algorithm without dropout to make sure your backprop is correct, then add dropout. \n", + "\n", + "Congrats, you can be confident that your deep learning model for fraud detection is working correctly! You can even use this to convince your CEO. :) \n", + "\n", + "\n", + "**What you should remember from this notebook**:\n", + "- Gradient checking verifies closeness between the gradients from backpropagation and the numerical approximation of the gradient (computed using forward propagation).\n", + "- Gradient checking is slow, so we don't run it in every iteration of training. You would usually run it only to make sure your code is correct, then turn it off and use backprop for the actual learning process. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "n6NBD", + "launcher_item_id": "yfOsE" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Coursera/Lesson2/Week1/Initialization.ipynb b/Coursera/Lesson2/Week1/Initialization.ipynb new file mode 100644 index 0000000..94c98c3 --- /dev/null +++ b/Coursera/Lesson2/Week1/Initialization.ipynb @@ -0,0 +1,1018 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Initialization\n", + "\n", + "Welcome to the first assignment of \"Improving Deep Neural Networks\". \n", + "\n", + "Training your neural network requires specifying an initial value of the weights. A well chosen initialization method will help learning. \n", + "\n", + "If you completed the previous course of this specialization, you probably followed our instructions for weight initialization, and it has worked out so far. But how do you choose the initialization for a new neural network? In this notebook, you will see how different initializations lead to different results. \n", + "\n", + "A well chosen initialization can:\n", + "- Speed up the convergence of gradient descent\n", + "- Increase the odds of gradient descent converging to a lower training (and generalization) error \n", + "\n", + "To get started, run the following cell to load the packages and the planar dataset you will try to classify." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import sklearn\n", + "import sklearn.datasets\n", + "from init_utils import sigmoid, relu, compute_loss, forward_propagation, backward_propagation\n", + "from init_utils import update_parameters, predict, load_dataset, plot_decision_boundary, predict_dec\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'\n", + "\n", + "# load image dataset: blue/red dots in circles\n", + "train_X, train_Y, test_X, test_Y = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You would like a classifier to separate the blue dots from the red dots." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Neural Network model " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will use a 3-layer neural network (already implemented for you). Here are the initialization methods you will experiment with: \n", + "- *Zeros initialization* -- setting `initialization = \"zeros\"` in the input argument.\n", + "- *Random initialization* -- setting `initialization = \"random\"` in the input argument. This initializes the weights to large random values. \n", + "- *He initialization* -- setting `initialization = \"he\"` in the input argument. This initializes the weights to random values scaled according to a paper by He et al., 2015. \n", + "\n", + "**Instructions**: Please quickly read over the code below, and run it. In the next part you will implement the three initialization methods that this `model()` calls." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = \"he\"):\n", + " \"\"\"\n", + " Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (2, number of examples)\n", + " Y -- true \"label\" vector (containing 0 for red dots; 1 for blue dots), of shape (1, number of examples)\n", + " learning_rate -- learning rate for gradient descent \n", + " num_iterations -- number of iterations to run gradient descent\n", + " print_cost -- if True, print the cost every 1000 iterations\n", + " initialization -- flag to choose which initialization to use (\"zeros\",\"random\" or \"he\")\n", + " \n", + " Returns:\n", + " parameters -- parameters learnt by the model\n", + " \"\"\"\n", + " \n", + " grads = {}\n", + " costs = [] # to keep track of the loss\n", + " m = X.shape[1] # number of examples\n", + " layers_dims = [X.shape[0], 10, 5, 1]\n", + " \n", + " # Initialize parameters dictionary.\n", + " if initialization == \"zeros\":\n", + " parameters = initialize_parameters_zeros(layers_dims)\n", + " elif initialization == \"random\":\n", + " parameters = initialize_parameters_random(layers_dims)\n", + " elif initialization == \"he\":\n", + " parameters = initialize_parameters_he(layers_dims)\n", + "\n", + " # Loop (gradient descent)\n", + "\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.\n", + " a3, cache = forward_propagation(X, parameters)\n", + " \n", + " # Loss\n", + " cost = compute_loss(a3, Y)\n", + "\n", + " # Backward propagation.\n", + " grads = backward_propagation(X, Y, cache)\n", + " \n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " \n", + " # Print the loss every 1000 iterations\n", + " if print_cost and i % 1000 == 0:\n", + " print(\"Cost after iteration {}: {}\".format(i, cost))\n", + " costs.append(cost)\n", + " \n", + " # plot the loss\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per hundreds)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Zero initialization\n", + "\n", + "There are two types of parameters to initialize in a neural network:\n", + "- the weight matrices $(W^{[1]}, W^{[2]}, W^{[3]}, ..., W^{[L-1]}, W^{[L]})$\n", + "- the bias vectors $(b^{[1]}, b^{[2]}, b^{[3]}, ..., b^{[L-1]}, b^{[L]})$\n", + "\n", + "**Exercise**: Implement the following function to initialize all parameters to zeros. You'll see later that this does not work well since it fails to \"break symmetry\", but lets try it anyway and see what happens. Use np.zeros((..,..)) with the correct shapes." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_zeros \n", + "\n", + "def initialize_parameters_zeros(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " parameters = {}\n", + " L = len(layers_dims) # number of layers in the network\n", + " \n", + " for l in range(1, L):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1]))\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "b1 = [[ 0.]\n", + " [ 0.]]\n", + "W2 = [[ 0. 0.]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_zeros([3,2,1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[ 0. 0.]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using zeros initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6931471805599453\n", + "Cost after iteration 1000: 0.6931471805599453\n", + "Cost after iteration 2000: 0.6931471805599453\n", + "Cost after iteration 3000: 0.6931471805599453\n", + "Cost after iteration 4000: 0.6931471805599453\n", + "Cost after iteration 5000: 0.6931471805599453\n", + "Cost after iteration 6000: 0.6931471805599453\n", + "Cost after iteration 7000: 0.6931471805599453\n", + "Cost after iteration 8000: 0.6931471805599453\n", + "Cost after iteration 9000: 0.6931471805599453\n", + "Cost after iteration 10000: 0.6931471805599455\n", + "Cost after iteration 11000: 0.6931471805599453\n", + "Cost after iteration 12000: 0.6931471805599453\n", + "Cost after iteration 13000: 0.6931471805599453\n", + "Cost after iteration 14000: 0.6931471805599453\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.5\n", + "On the test set:\n", + "Accuracy: 0.5\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"zeros\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The performance is really bad, and the cost does not really decrease, and the algorithm performs no better than random guessing. Why? Lets look at the details of the predictions and the decision boundary:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predictions_train = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0]]\n", + "predictions_test = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "source": [ + "print (\"predictions_train = \" + str(predictions_train))\n", + "print (\"predictions_test = \" + str(predictions_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nC363uAqGAFWIAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with Zeros initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model is predicting 0 for every example. \n", + "\n", + "In general, initializing all the weights to zero results in the network failing to break symmetry. This means that every neuron in each layer will learn the same thing, and you might as well be training a neural network with $n^{[l]}=1$ for every layer, and the network is no more powerful than a linear classifier such as logistic regression. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- The weights $W^{[l]}$ should be initialized randomly to break symmetry. \n", + "- It is however okay to initialize the biases $b^{[l]}$ to zeros. Symmetry is still broken so long as $W^{[l]}$ is initialized randomly. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Random initialization\n", + "\n", + "To break symmetry, lets intialize the weights randomly. Following random initialization, each neuron can then proceed to learn a different function of its inputs. In this exercise, you will see what happens if the weights are intialized randomly, but to very large values. \n", + "\n", + "**Exercise**: Implement the following function to initialize your weights to large random values (scaled by \\*10) and your biases to zeros. Use `np.random.randn(..,..) * 10` for weights and `np.zeros((.., ..))` for biases. We are using a fixed `np.random.seed(..)` to make sure your \"random\" weights match ours, so don't worry if running several times your code gives you always the same initial values for the parameters. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_random\n", + "\n", + "def initialize_parameters_random(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(3) # This seed makes sure your \"random\" numbers will be the as ours\n", + " parameters = {}\n", + " L = len(layers_dims) # integer representing the number of layers\n", + " \n", + " for l in range(1, L):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * 10\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + "\n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 17.88628473 4.36509851 0.96497468]\n", + " [-18.63492703 -2.77388203 -3.54758979]]\n", + "b1 = [[ 0.]\n", + " [ 0.]]\n", + "W2 = [[-0.82741481 -6.27000677]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_random([3, 2, 1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 17.88628473 4.36509851 0.96497468]\n", + " [-18.63492703 -2.77388203 -3.54758979]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[-0.82741481 -6.27000677]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using random initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/work/week5/Initialization/init_utils.py:145: RuntimeWarning: divide by zero encountered in log\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n", + "/home/jovyan/work/week5/Initialization/init_utils.py:145: RuntimeWarning: invalid value encountered in multiply\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: inf\n", + "Cost after iteration 1000: 0.6242434241539614\n", + "Cost after iteration 2000: 0.5978811277755388\n", + "Cost after iteration 3000: 0.5636242569764779\n", + "Cost after iteration 4000: 0.5500958254523324\n", + "Cost after iteration 5000: 0.544339206192789\n", + "Cost after iteration 6000: 0.5373584514307651\n", + "Cost after iteration 7000: 0.469574666760224\n", + "Cost after iteration 8000: 0.39766324943219844\n", + "Cost after iteration 9000: 0.3934423376823982\n", + "Cost after iteration 10000: 0.3920158992175907\n", + "Cost after iteration 11000: 0.38913979237487845\n", + "Cost after iteration 12000: 0.3861261344766218\n", + "Cost after iteration 13000: 0.3849694511273874\n", + "Cost after iteration 14000: 0.3827489017191917\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcMAAAEWCAYAAAAadfxCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYVPWZ9vHv09X7As3SrN2sgopRRBtwQcUxcTQxMTGa\nIBhNXBATTd5M5koy70xmMpktk5l5ExM1ihvGNcZdE3U0cVeEBgVFRAGBbtZm76bp/Xn/qNNYYnfT\nDVWcWu7PddXVVad+p+o+LXLzO3XqHHN3REREMllW2AFERETCpjIUEZGMpzIUEZGMpzIUEZGMpzIU\nEZGMpzIUEZGMpzIUOYzM7GkzuyzsHCLySSpDyQhmtsbMPht2Dnc/193vCjsHgJm9aGZXHob3yTOz\nO8xst5ltMrO/OcD4mWa21sz2mNljZtY/5rmvmdnrZtZgZi8mOrtkDpWhSJyYWXbYGTokUxbgp8A4\nYCRwJvBDMzuns4FmdgxwC/ANYDDQANwUM2Q78Cvg5wnMKxlIZSgZz8zOM7O3zWxnMOs4Lua5H5vZ\nKjOrM7P3zOwrMc9908xeM7Nfmtk24KfBslfN7L/NbIeZfWRm58ass2821oOxo83s5eC9nzezG83s\nni62YbqZ1ZjZj8xsE3CnmfUzs6fMrDZ4/afMrDwY/2/AacANZlZvZjcEy48ys+fMbLuZrTCzr8Xh\nV3wZ8C/uvsPdlwNzgW92MXYW8KS7v+zu9cBPgAvMrATA3Z939weBDXHIJbKPylAymplNAu4ArgYG\nEJ2VPGFmecGQVURLoy/wz8A9ZjY05iWmAquJzmL+LWbZCmAg8AvgdjOzLiJ0N/Y+YEGQ66dEZ0vd\nGQL0JzoDm030/+87g8cjgL3ADQDu/vfAK8C17l7s7teaWRHwXPC+g4AZwE1mNqGzNzOzm4J/QHR2\nWxqM6QcMBZbErLoEOKaLbTgmdqy7rwKagPEH2HaRQ6IylEw3G7jF3d9097bg87wm4CQAd/+Du29w\n93Z3/z3wITAlZv0N7v4bd291973BsrXufqu7twF3ES2DwV28f6djzWwEMBn4R3dvdvdXgScOsC3t\nwD+5e5O773X3be7+sLs3uHsd0bI+o5v1zwPWuPudwfa8BTwMXNTZYHf/truXdnHrmF0XBz93xay6\nGyjpIkPxfmMPNF4kLlSGkulGAj+IndUAFcAwADO7NGYX6k7gM0RncR2qO3nNTR133L0huFvcybju\nxg4Dtscs6+q9YtW6e2PHAzMrNLNbgoNRdgMvA6VmFuli/ZHA1P1+F7OIzjgPVn3ws0/Msr5AXTfj\n++y3rLvxInGhMpRMVw38236zmkJ3v9/MRgK3AtcCA9y9FHgXiN3lmajLvmwE+ptZYcyyigOss3+W\nHwBHAlPdvQ9werDcuhhfDby03++i2N2v6ezNzOzm4PPGzm7LANx9R7AtE2NWnQgs62IblsWONbOx\nQC7wQXcbLnKoVIaSSXLMLD/mlk207OaY2VSLKjKzLwQHbBQRLYxaADP7FtGZYcK5+1qgiuhBOblm\ndjLwxV6+TAnRzwl3Bl9P+Kf9nt8MjIl5/BQw3sy+YWY5wW2ymR3dRcY5QVl2dov9TPB3wD8EB/Qc\nDVwFzOsi873AF83stOAzzH8BHgl282JmETPLB7KBrOC/Y05vfikinVEZSib5E9Fy6Lj91N2riP7l\nfAOwA1hJcKSju78H/A/wBtHiOBZ47TDmnQWcDGwD/hX4PdHPM3vqV0ABsBWYDzyz3/PXAxcGR5r+\nOiics4keOLOB6C7c/wTyODT/RPRApLXAi8Av3H1flmAmeRqAuy8D5hAtxS1E/0Hy7ZjX+gbR/3a/\nJXpg016i/6AROSSmi/uKpAYz+z3wvrvvP8MTkUOkmaFIkgp2UY41syyLfkn9fOCxsHOJpKNkOkuF\niHzSEOARot8zrAGuCb7uICJxpt2kIiKS8bSbVEREMl5a7SYdOHCgjxo1KuwYIiKSJBYtWrTV3csO\nNC6tynDUqFFUVVWFHUNERJKEma3tyTjtJhURkYynMhQRkYynMhQRkYynMhQRkYynMhQRkYynMhQR\nkYynMhQRkYynMoxRs6OB/3h6Oc2t7WFHERGRw0hlGOPPy7dwy0urufjW+Wze3Rh2HBEROUxUhjEu\nO2UUN8ycxPKNuznvN6+ycM32sCOJiMhhoDLcz3nHDePRb59KUW6Ei+fO53dvrEFX9hARSW8qw04c\nOaSEx6+dxhnjy/jHx5fxgz8sobGlLexYIiKSICrDLvQtyOHWSyv5/mfH8+hb6/nqb1+nentD2LFE\nRCQBVIbdyMoyvvfZcdx+WSXrtjfwxRte5ZUPa8OOJSIicaYy7IG/OmowT147jcEl+Vx2xwJuenGl\nPkcUEUkjKsMeGjWwiEe/cwpfOG4Yv3hmBdfcs5j6ptawY4mISByoDHuhMDebX884nn/4wtE8t3wz\n59/wKiu31IcdS0REDpHKsJfMjCtPG8PdV0xhZ0MLX77xNZ5dtinsWCIicghUhgfplLEDefK6aYwt\nK+LquxfxX8++T1u7PkcUEUlFKsNDMKy0gN9ffTIzJldw4wur+Na8hexsaA47loiI9JLK8BDl50T4\n+VeP4z8uOJb5q7bxxRteZdmGXWHHEhGRXlAZxsnFU0bw+6tPoqXV+epvX+fRt2rCjiQiIj2kMoyj\nSSP68eR105hYXsr3f7+Enz6xjJY2XQ5KRCTZqQzjrKwkj3uunMoV00Yz7/U1zLr1TbbU6XJQIiLJ\nTGWYADmRLH5y3gSun3E8S9fv5Iu/eZVFa3eEHUtERLqQ0DI0s3PMbIWZrTSzH3cxZrqZvW1my8zs\npd6sm+zOP344j377VPKyI8yY+wb3zF+r07iJiCShhJWhmUWAG4FzgQnAxWY2Yb8xpcBNwJfc/Rjg\nop6umyqOHtqHJ6+dxrQjBvIPj73LDx9aqstBiYgkmUTODKcAK919tbs3Aw8A5+83ZibwiLuvA3D3\nLb1YN2X0Lczh9ssm872zxvGHRTVcdPMb1OzQ5aBERJJFIstwOFAd87gmWBZrPNDPzF40s0Vmdmkv\n1gXAzGabWZWZVdXWJu/llbKyjO9/bjy3XVrJmq17+OJvXuXVD7eGHUtERAj/AJps4ETgC8BfAz8x\ns/G9eQF3n+vule5eWVZWloiMcfXZCYN54rpplJXkcekdb/JgVfWBVxIRkYRKZBmuBypiHpcHy2LV\nAM+6+x533wq8DEzs4bopa/TAIh799qlMG1fGjx5eqi/oi4iELJFluBAYZ2ajzSwXmAE8sd+Yx4Fp\nZpZtZoXAVGB5D9dNaUV52cz9xomcPGYAP3hwCU8t3RB2JBGRjJWwMnT3VuBa4FmiBfeguy8zszlm\nNicYsxx4BlgKLABuc/d3u1o3UVnDkp8T4bbLKqkc2Z/vPfA2z7yrS0GJiITB0ul7b5WVlV5VVRV2\njF6rb2rl0tvf5J31u7j5khM56+jBYUcSEUkLZrbI3SsPNC7sA2gEKM7LZt7lUzh6aB+uuWcxL32Q\nvEfFioikI5VhkuiTn8Pdl0/liEHFzP5dFa+v1NcuREQOF5VhEulbmMM9V05l1IAirririgUfbQ87\nkohIRlAZJpn+Rbnce9VUhpXm8607F+gE3yIih4HKMAkNLM7jvqtOoqwkj2/esYClNTvDjiQiktZU\nhklqcJ987rvqJEqLcrjktjdZtmFX2JFERNKWyjCJDSst4L4rT6IkP1qIKzbVhR1JRCQtqQyTXEX/\nQu67aiq52VnMum0+K7fUhx1JRCTtqAxTwMgBRdx31UmAMfPW+Xy0dU/YkURE0orKMEWMLSvmvqum\n0truzLx1PtXbdT1EEZF4URmmkPGDS7jniqk0NLcxY+581u/cG3YkEZG0oDJMMROG9eGeK6ayu7GF\nmbfOZ9OuxrAjiYikPJVhCjq2vC+/u3wK2+qbmXnbfLbUqRBFRA6FyjBFTRrRjzu/NZlNuxqZdeub\nbKtvCjuSiEjKUhmmsMmj+nP7ZZOp3tHArNveZMee5rAjiYikJJVhijt57ABuvbSS1Vv38I073mTX\n3pawI4mIpByVYRo4bVwZt1xyIis21XHZHQuoa1Qhioj0hsowTZx51CBunHkC767fxbfuXMieptaw\nI4mIpAyVYRo5+5ghXD9jEovX7eCKuxayt7kt7EgiIilBZZhmvnDcUH759eN586PtzL67isYWFaKI\nyIGoDNPQ+ccP5xdfPY5XPtzKNfcsoqlVhSgi0h2VYZq6qLKCf//KsbywopZr73uLlrb2sCOJiCQt\nlWEamzl1BP/8pWN47r3NfO+Bt2hVIYqIdCo77ACSWJedMoqWtnb+9Y/Lqa2bz+WnjuazEwaTE9G/\ng0REOqgMM8CVp42hMDebG/7yIdfcu5iykjxmTK5gxpQRDC8tCDueiEjozN3DzhA3lZWVXlVVFXaM\npNXW7ry4Ygv3vrmOF1ZswYDpRw5i1tQRTD9yEJEsCzuiiEhcmdkid6884DiVYWaq2dHA7xdW88DC\namrrmhjWN5+Lp4zg65MrGNQnP+x4IiJxoTKUHmlpa+f59zZz75vreHXlViJZxueOHsysk0Zw6tiB\nZGm2KCIprKdlqM8MM1xOJItzjx3KuccOZc3WPdy/YB0PVlXzzLJNjBxQyMwpI7jwxHIGFOeFHVVE\nJGE0M5RPaWxp49llm7h3/joWrNlObiSLcz4zhFlTRzBldH/MNFsUkdSg3aQSFx9uruPeN9fx8OIa\n6hpbOWJQMTOnjOCrJ5TTtzAn7HgiIt1SGUpc7W1u48mlG7j3zXUsqd5JXnYWX5w4jFlTR3B8Ralm\niyKSlJKiDM3sHOB6IALc5u4/3+/56cDjwEfBokfc/WfBc2uAOqANaO3JxqgMD4931+/ivgXreOyt\n9TQ0tzFhaB9mTh3BlycNpzhPH0OLSPIIvQzNLAJ8AHwOqAEWAhe7+3sxY6YDf+vu53Wy/hqg0t23\n9vQ9VYaHV11jC4+/HZ0tLt+4m6LcCOdPGs6sqSM4ZljfsOOJiCTF0aRTgJXuvjoI9ABwPvBet2tJ\nyijJz+GSk0Yya+oI3qreyX1vruPhRTXc9+Y6jhpSwrHD+3LkkJLobXAJZSV52p0qIkkpkWU4HKiO\neVwDTO1k3ClmthRYT3SWuCxY7sDzZtYG3OLuczt7EzObDcwGGDFiRLyySy+YGSeM6McJI/rxky9M\n4OHFNTy/fDMvrKjlD4tq9o0rLcxh/OBoMXaU5PhBJToQR0RCF/YHPIuBEe5eb2afBx4DxgXPTXP3\n9WY2CHjOzN5395f3f4GgJOdCdDfp4QounetbmMPl00Zz+bTRAGyrb2LF5jo+2FTHis31fLC5jsfe\nWk9dU+u+dYb0yWf8kBKOHFzM+MElHDWkD0cMKqYgNxLWZohIhklkGa4HKmIelwfL9nH33TH3/2Rm\nN5nZQHff6u7rg+VbzOxRortdP1WGktwGFOdxSnEep4wduG+Zu7NhV2NQkHX7ft61ehvNrdHLTJnB\nyP6F0ZnkkJKgJEsYNbBIV9wQkbhLZBkuBMaZ2WiiJTgDmBk7wMyGAJvd3c1sCtHrK24zsyIgy93r\ngvtnAz9LYFY5jMyM4aUFDC8t4MyjBu1b3trWztrtDR+X5OY6Vmyq4/nlm2kP5vw5EWNsWfEnSvLI\nwSVU9C/Q55EictASVobu3mpm1wLPEv1qxR3uvszM5gTP3wxcCFxjZq3AXmBGUIyDgUeDv9yygfvc\n/ZlEZZXkkB3JYmxZMWPLijn32KH7lje2tLGqtj4ox+jPRWt38MSSDfvG9C3I4bjyvhxfUcpx5aVM\nrOjLoBKdcFxEekZfupeUVdfYwgeb63l/027eqdnF29U7+WBz3b5Z5NC++UwsL2ViRSkTy/tybHlf\nSvJ1sI5IJkmGr1aIJFRJfg4njuzHiSP77TtOuaG5lWUbdrOkeidLanaxpHonzyzbBEQ/hxwzsIiJ\nFaX7ZpBHDy0hL1sH6ohkOpWhpJXC3Gwmj+rP5FH99y3bsaeZJTU7WRqU48sf1PLI4uixXDkR4+ih\nfZhYXrpvN+uYsmJd6Fgkw2g3qWScjqNZl1bv5O2anSyt3sU763dRH3zdozgvm88M7xPsXo3uZh3W\nN18H6IikIO0mFelC7NGsHQfqtLU7q2vr9+1aXVqzkzte/YiWtug/FgcW5zGxvC8TK0q5qLKcoX0L\nwtwEEYkzzQxFutDU2sb7G+tYUrOTt6uju1lX1dYzYWgfnrpummaKIilAM0ORQ5SXHYnuKq0o5dKT\no8serKrmhw8t5S/vb+GsoweHG1BE4kan8hDpha9MGk5F/wJ+/ecPSae9KiKZTmUo0gs5kSy+M/0I\nltTs4qUPasOOIyJxojIU6aULTihneGkB12t2KJI2VIYivZSbncU108fy1rqdvLZyW9hxRCQOVIYi\nB+GiynKG9Mnn+j9/oNmhSBpQGYochLzsCNdMH8vCNTuYv3p72HFE5BCpDEUO0tcnVzCoJI9f//nD\nsKOIyCFSGYocpPycCFefMZY3Vm9jwUeaHYqkMpWhyCGYOWUEA4tz+c1fNDsUSWUqQ5FDUJAbYfbp\nY3jlw60sWrsj7DgicpBUhiKHaNbUkfQv0uxQJJWpDEUOUVFeNleeNpoXV9SypHpn2HFE5CCoDEXi\n4NKTR1FamKPZoUiKUhmKxEFxXjZXnDqa55dv4d31u8KOIyK9pDIUiZPLTh1FSX62ZociKUhlKBIn\nffJzuPzU0Ty7bDPLN+4OO46I9ILKUCSOLj91NMV52dzwl5VhRxGRXlAZisRR38IcvnnKKP707kY+\n2FwXdhwR6aEelaGZXdSTZSICV0wbTUFORLNDkRTS05nh3/VwmUjG61eUy6Unj+LJpRtYuaU+7Dgi\n0gPdlqGZnWtmvwGGm9mvY27zgNbDklAkBV152mjysyPc9IJmhyKp4EAzww1AFdAILIq5PQH8dWKj\niaSugcV5XHLSCB57ez1rtu4JO46IHEC3ZejuS9z9LuAId78ruP8EsNLddVZikW5cdfoYciJZ3KjZ\noUjS6+lnhs+ZWR8z6w8sBm41s18mMJdIyhtUks/MqSN45K31VG9vCDuOiHSjp2XY1913AxcAv3P3\nqcBZiYslkh7mnDGWSJZpdiiS5HpahtlmNhT4GvBUAvOIpJXBffKZMbmChxbVULNDs0ORZNXTMvwZ\n8Cywyt0XmtkY4IAnYDSzc8xshZmtNLMfd/L8dDPbZWZvB7d/7Om6IqlizhljMYPfvrgq7Cgi0oUe\nlaG7/8Hdj3P3a4LHq939q92tY2YR4EbgXGACcLGZTehk6Cvufnxw+1kv1xVJesNKC7iosoIHq6rZ\nsHNv2HFEpBM9PQNNuZk9amZbgtvDZlZ+gNWmED3qdLW7NwMPAOf3MNehrCuSdK45YyzucMtLmh2K\nJKOe7ia9k+hXKoYFtyeDZd0ZDlTHPK4Jlu3vFDNbamZPm9kxvVwXM5ttZlVmVlVbW3vgLREJQUX/\nQi48sZz7F1azeXdj2HFEZD89LcMyd7/T3VuD2zygLA7vvxgY4e7HAb8BHuvtC7j7XHevdPfKsrJ4\nRBJJjG9PP4K2dueWl1aHHUVE9tPTMtxmZpeYWSS4XQJsO8A664GKmMflwbJ93H23u9cH9/8E5JjZ\nwJ6sK5JqRgwo5CuThnPvm2vZUqfZoUgy6WkZXk70axWbgI3AhcA3D7DOQmCcmY02s1xgBtFdrfuY\n2RAzs+D+lCDPtp6sK5KKvnPmEbS0tXPbKx+FHUVEYvTmqxWXuXuZuw8iWo7/3N0K7t4KXEv0KxnL\ngQfdfZmZzTGzOcGwC4F3zWwJ8Gtghkd1um5vN04k2YweWMT5xw/n7jfWsq2+Kew4IhIwdz/wILO3\n3H3SgZaFrbKy0quqqsKOIdKtlVvq+dwvX2LOGWP50TlHhR1HJK2Z2SJ3rzzQuJ7ODLPMrF/Mi/cH\nsg82nEgmO2JQMecdN4zfvb6GHXuaw44jIvS8DP8HeMPM/sXM/gV4HfhF4mKJpLfr/uoI9jS3ccdr\n+uxQJBn09Aw0vyN6ku7Nwe0Cd787kcFE0tn4wSV8/tghzHttDbsaWsKOI5LxejozxN3fc/cbgtt7\niQwlkgmuPXMcdU2t3Pm6ZociYetxGYpIfE0Y1oezJwzmjlc/YnejZociYVIZioTou2eNY3djK797\nfU3YUUQymspQJESfGd6Xs44axG2vfkR9U2vYcUQylspQJGTXnTWOnQ0t3P3G2rCjiGQslaFIyI6v\nKOWM8WXc+spqGpo1OxQJg8pQJAl896xxbN/TzL3z14UdRSQjqQxFksCJI/sx7YiB3PLyavY2t4Ud\nRyTjqAxFksR3zxrH1vom7l+g2aHI4aYyFEkSU0b356Qx/bn5pVU0tmh2KHI4qQxFksh3zxrHlrom\nHqyqDjuKSEZRGYokkZPHDGDyqH789sVVNLVqdihyuKgMRZKImfHds8axcVcjDy2qCTuOSMZQGYok\nmWlHDGTSiFJuemEVza3tYccRyQgqQ5Ek0zE7XL9zL48s1uxQ5HBQGYokoenjyziuvC83vriS1jbN\nDkUSTWUokoTMjO+ceQTV2/fyx3c2hh1HJO2pDEWS1OeOHszYsiJufmk17h52HJG0pjIUSVJZWcbV\np49l+cbdvPzh1rDjiKQ1laFIEjt/0jAG98njlpdWhR1FJK2pDEWSWF52hCumjeb1VdtYWrMz7Dgi\naUtlKJLkLp4ygpL8bG7W7FAkYVSGIkmuJD+HS04aydPvbuKjrXvCjiOSllSGIingW6eOIieSxdyX\nV4cdRSQtqQxFUsCgkny+ekI5Dy+uYUtdY9hxRNKOylAkRcw+fQwtbe3Me21N2FFE0o7KUCRFjB5Y\nxLmfGcLd89dS19gSdhyRtKIyFEkhV58+lrrGVu5fsC7sKCJpRWUokkImVpRy8pgB3P7qR7r4r0gc\nJbQMzewcM1thZivN7MfdjJtsZq1mdmHMsjVm9o6ZvW1mVYnMKZJK5kwfy+bdTTz+9oawo4ikjYSV\noZlFgBuBc4EJwMVmNqGLcf8J/G8nL3Omux/v7pWJyimSak4fN5AJQ/twy0uraG/XCbxF4iGRM8Mp\nwEp3X+3uzcADwPmdjLsOeBjYksAsImnDzLj6jDGsqt3D88s3hx1HJC0ksgyHA9Uxj2uCZfuY2XDg\nK8BvO1nfgefNbJGZze7qTcxstplVmVlVbW1tHGKLJL8vHDuU8n4F3PzSKl3eSSQOwj6A5lfAj9y9\ns0t5T3P344nuZv2OmZ3e2Qu4+1x3r3T3yrKyskRmFUka2ZEsrjptDIvX7WThmh1hxxFJeYksw/VA\nRczj8mBZrErgATNbA1wI3GRmXwZw9/XBzy3Ao0R3u4pI4GuVFfQvytXlnUTiIJFluBAYZ2ajzSwX\nmAE8ETvA3Ue7+yh3HwU8BHzb3R8zsyIzKwEwsyLgbODdBGYVSTkFuREuO3kUf35/Cys21YUdRySl\nJawM3b0VuBZ4FlgOPOjuy8xsjpnNOcDqg4FXzWwJsAD4o7s/k6isIqnq0pNHUpAT4ZaXNTsUORTZ\niXxxd/8T8Kf9lt3cxdhvxtxfDUxMZDaRdNCvKJevT67gnvlr+cHZRzK8tCDsSCIpKewDaETkEF15\n2mgcuP2Vj8KOIpKyVIYiKa68XyFfmjiMBxauY2dDc9hxRFKSylAkDVx9xhgamtu4+421YUcRSUkq\nQ5E0cNSQPpx5ZBnzXl9DY4tO4C3SWypDkTRx9Rlj2banmT9UVR94sIh8gspQJE1MHd2f4ytKmfvK\nalrbOjupk4h0RWUokibMjDlnjKV6+16efndT2HFEUorKUCSNnD1hMGPKinQCb5FeUhmKpJGsLOPq\n08ewbMNuXl25New4IilDZSiSZr48aTiDSvK4WSfwFukxlaFImsnLjnD5tNG8tnIb79TsCjuOSEpQ\nGYqkoZlTR1CSl83NOoG3SI+oDEXSUJ/8HGadNJKn39nI2m17wo4jkvRUhiJp6vJTR5GdlcXcl1eH\nHUUk6akMRdLUoD75XHDCcP6wqIbauqaw44gkNZWhSBqbffoYWtramfe6Lu8k0h2VoUgaG1NWzF9P\nGMLdb6ylvqk17DgiSUtlKJLm5kwfy+7GVh5YsC7sKCJJS2UokuaOryjlpDH9ue2Vj2hu1Qm8RTqj\nMhTJAFefMZZNuxt5/O31YUcRSUoqQ5EMMH18GUcNKeGWl1fT3q4TeIvsT2UokgE6Lu+0cks9f3l/\nS9hxRJKOylAkQ5x33FCGlxboBN4inVAZimSI7EgWV502mqq1O6hasz3sOCJJRWUokkG+NrmCfoU5\nmh2K7EdlKJJBCnOzufTkUTy/fAsfbK4LO45I0lAZimSYy04ZRX6OTuAtEktlKJJh+hflMmPyCB5/\nez0bd+0NO45IUlAZimSgK6aNpt3h9ld0Am8RUBmKZKSK/oWcd9xQ7l+wjl0NLWHHEQmdylAkQ119\n+lj2NLdx9/w1YUcRCZ3KUCRDTRjWhzPGlzHv9TU0trSFHUckVAktQzM7x8xWmNlKM/txN+Mmm1mr\nmV3Y23VF5ODNOWMsW+ubeWhRTdhRREKVsDI0swhwI3AuMAG42MwmdDHuP4H/7e26InJoThrTn4kV\npdz6ymradAJvyWCJnBlOAVa6+2p3bwYeAM7vZNx1wMPAloNYV0QOgZkx5/QxrN3WwNPvbgw7jkho\nElmGw4HqmMc1wbJ9zGw48BXgt71dN+Y1ZptZlZlV1dbWHnJokUxz9jFDGD2wiJtfWoW7ZoeSmbJD\nfv9fAT9y93YzO6gXcPe5wFyAyspK/Z8s0kuRLGP26WP4u0fe4fifPUdF/wLKSwsp71dARf+Pfw4v\nLaAoL+y/MkQSI5F/stcDFTGPy4NlsSqBB4IiHAh83sxae7iuiMTJ1yoraHdn+cbd1OzYy4db6nhh\nxRaaWts/Ma5/US4V/Qoo7xctyfKOsgwe5+dEQtoCkUOTyDJcCIwzs9FEi2wGMDN2gLuP7rhvZvOA\np9z9MTPLPtC6IhI/kSxj1tSRn1jm7tTWN1GzYy81O/ZSvb0huN/Aext389x7m2lu+2RZDizOi84s\n+32yJCsS8BkdAAAMEUlEQVT6FzKsNJ+8bJWlJKeElaG7t5rZtcCzQAS4w92Xmdmc4Pmbe7tuorKK\nyKeZGYNK8hlUks8JI/p96vn29mhZdpTkvrLc2cCS6p08/c5GWmOOUDWDQSV5+wqytDCXwtwIhbkR\nCnKzP76fE6EwN5uC4HH0+WBZToRI1sF9pCLSHUunD8wrKyu9qqoq7BgiArS1O5t3N8bMKPdSvaOB\nmh0NVG/fy+69LTS0tPX6Kx152VlBSX5cmNECjZZmQU72fiUaoSQ/hwFFuQwozmNgcfRnUW6Egz1W\nQVKHmS1y98oDjdOn4SKSEJEsY1hpAcNKC5jaxRh3p7mtnb3NbTQEt8aWjvutHy9vaWNvcysNzW2f\nGLu3pXXf/a31zTQ0t9LY0k5DMHb/zzxj5WVnMbA4jwHFuTFF2VGWuQwoij43sDiP/kW55ER0wq50\npjIUkdCYGXnZEfKyI5QWxv/129qdvS1t7N7bwvY9zWytb2JbfTPb9jSxtf7jx7X1Tby/qY5t9c2f\n+hy0Q9+CnGg5BiXZUZgdM82OQi0rzqNPQbZmnSlGZSgiaSuSZRTnZVOcl82w0oIDjnd36ppao4VZ\n/8nC3LYn+nNrfRMfbqln/uomdnRxxY+ciEWLsiSXso4ZZ8nHM8+ymMelBTlk6XPQ0KkMRUQCZkaf\n/Bz65OcwemDRAce3tLWzo6E5KM9oYdbWfVyiW+ub2FLXxHsbd7OtvvkTBxR1yM6yfbtj991iSrQs\npkT7FeaqOBNEZSgicpByIln7jrg9kPZ2Z9feFrbWN1HbMeusixZmbfBza30zH2yuY2t9Ey1tny7O\nSJbRvyj3EzPM4vxs8nMi5GdnkZcTIT8nQl52VnRZThb52ZGP7wc/84JlecHzORHL+N26KkMRkcMg\nK8voV5RLv6Jcxg0u6Xasu7N7b2tQmrFl2cTWuo9nnatr91Df1EpTaxuNLV0fLHTAbEZQlNFSjRbl\nx2XaUZqFeRH6FuR0e+tTkJOSJ19QGYqIJBkzo29hDn0LczhiUHGP1nF3mlrbaWppp7E1elRuY0v7\nvqKMPm6jsTV6v6klerRtx7jocx/fb9o3rp3te5ppbGljT1P0YKS6ptZus+RlZ3VeloXJW6QqQxGR\nNGBm+2Z3fclJ6Hu1trWzu7GVXXtbPnXb3XG/4eNlG3c18v6mul4X6c3fOJGxZT37x8ChUhmKiEiv\nZEey6F+US/+i3F6v29rWTl0XRfqJMt3bQvFhPDG8ylBERA6b7EjWvs9Ok4lOqSAiIhlPZSgiIhlP\nZSgiIhlPZSgiIhlPZSgiIhlPZSgiIhlPZSgiIhlPZSgiIhnP3D99ZvRUZWa1wNqwc/TSQGBr2CES\nIF23C7RtqShdtwvSd9vitV0j3b3sQIPSqgxTkZlVuXtl2DniLV23C7RtqShdtwvSd9sO93ZpN6mI\niGQ8laGIiGQ8lWH45oYdIEHSdbtA25aK0nW7IH237bBulz4zFBGRjKeZoYiIZDyVoYiIZDyVYQjM\nrMLMXjCz98xsmZl9L+xM8WZmETN7y8yeCjtLvJhZqZk9ZGbvm9lyMzs57EzxYmbfD/4svmtm95tZ\nftiZDpaZ3WFmW8zs3Zhl/c3sOTP7MPjZL8yMB6uLbfuv4M/kUjN71MxKw8x4MDrbrpjnfmBmbmYD\nE5lBZRiOVuAH7j4BOAn4jplNCDlTvH0PWB52iDi7HnjG3Y8CJpIm22dmw4HvApXu/hkgAswIN9Uh\nmQecs9+yHwN/dvdxwJ+Dx6loHp/etueAz7j7ccAHwN8d7lBxMI9PbxdmVgGcDaxLdACVYQjcfaO7\nLw7u1xH9S3V4uKnix8zKgS8At4WdJV7MrC9wOnA7gLs3u/vOcFPFVTZQYGbZQCGwIeQ8B83dXwa2\n77f4fOCu4P5dwJcPa6g46Wzb3P1/3b01eDgfKD/swQ5RF//NAH4J/BBI+JGeKsOQmdkoYBLwZrhJ\n4upXRP8At4cdJI5GA7XAncHu39vMrCjsUPHg7uuB/yb6r++NwC53/99wU8XdYHffGNzfBAwOM0wC\nXQ48HXaIeDCz84H17r7kcLyfyjBEZlYMPAz8H3ffHXaeeDCz84At7r4o7Cxxlg2cAPzW3ScBe0jd\nXW2fEHx+dj7Rwh8GFJnZJeGmShyPfp8s7b5TZmZ/T/QjmHvDznKozKwQ+L/APx6u91QZhsTMcogW\n4b3u/kjYeeLoVOBLZrYGeAD4KzO7J9xIcVED1Lh7xwz+IaLlmA4+C3zk7rXu3gI8ApwScqZ422xm\nQwGCn1tCzhNXZvZN4DxglqfHl8fHEv3H2ZLg75JyYLGZDUnUG6oMQ2BmRvSzp+Xu/v/CzhNP7v53\n7l7u7qOIHoTxF3dP+VmGu28Cqs3syGDRWcB7IUaKp3XASWZWGPzZPIs0OTgoxhPAZcH9y4DHQ8wS\nV2Z2DtGPJb7k7g1h54kHd3/H3Qe5+6jg75Ia4ITg/8OEUBmG41TgG0RnTW8Ht8+HHUoO6DrgXjNb\nChwP/HvIeeIimO0+BCwG3iH690LKnuLLzO4H3gCONLMaM7sC+DnwOTP7kOhM+OdhZjxYXWzbDUAJ\n8Fzwd8nNoYY8CF1s1+HNkB4zahERkYOnmaGIiGQ8laGIiGQ8laGIiGQ8laGIiGQ8laGIiGQ8laGk\nNTN7Pfg5ysxmxvm1/29n75UoZvZlM0vIGTnMrD5Brzv9UK9cYmbzzOzCbp6/1swuP5T3EFEZSlpz\n944zqYwCelWGwUmru/OJMox5r0T5IXDTob5ID7Yr4eKc4Q6i3wEVOWgqQ0lrMTOenwOnBV9K/n5w\nvcX/MrOFwXXgrg7GTzezV8zsCYIzzJjZY2a2KLje3+xg2c+JXuXhbTO7N/a9LOq/gmsDvmNmX495\n7Rdjrol4b3DGF8zs5xa9vuVSM/vvTrZjPNDk7luDx/PM7GYzqzKzD4JzwnZcR7JH29XJe/ybmS0x\ns/lmNjjmfS6MGVMf83pdbcs5wbLFwAUx6/7UzO42s9eAu7vJamZ2g5mtMLPngUExr/Gp31Nw1pU1\nZjalJ38mRDoT+r8QRQ6THwN/6+4dpTGb6NUZJptZHvCamXVcqeEEoteH+yh4fLm7bzezAmChmT3s\n7j82s2vd/fhO3usComeomQgMDNZ5OXhuEnAM0UskvQacambLga8AR7m7W+cXZz2V6BliYo0CphA9\nj+MLZnYEcGkvtitWETDf3f/ezH4BXAX8ayfjYnW2LVXArcBfASuB3++3zgRgmrvv7ea/wSTgyGDs\nYKLlfYeZDejm91QFnAYsOEBmkU5pZiiZ6mzgUjN7m+jlswYA44LnFuxXGN81syVErxVXETOuK9OA\n+929zd03Ay8Bk2Neu8bd24G3iRbaLqARuN3MLgA6O7/kUKKXkIr1oLu3u/uHwGrgqF5uV6xmoOOz\nvUVBrgPpbFuOInrS7w+DE0bvf5L2J9x9b3C/q6yn8/HvbwPwl2B8d7+nLUSvuCFyUDQzlExlwHXu\n/uwnFppNJ3p5ptjHnwVOdvcGM3sRyD+E922Kud8GZLt7a7CL7yzgQuBaojOrWHuBvvst2/9cik4P\nt6sTLTFXO2jj478bWgn+0WxmWUBud9vSzet3iM3QVdZOz9N7gN9TPtHfkchB0cxQMkUd0ZMZd3gW\nuMail9LCzMZb5xfr7QvsCIrwKOCkmOdaOtbfzyvA14PPxMqIznS63H1n0eta9nX3PwHfJ7p7dX/L\ngSP2W3aRmWWZ2VhgDLCiF9vVU2uAE4P7XwI6295Y7wOjgkwAF3cztqusL/Px728ocGbwfHe/p/HA\nuz3eKpH9aGYomWIp0Bbs7pwHXE90t97i4MCPWuDLnaz3DDAn+FxvBdFdpR3mAkvNbLG7z4pZ/ihw\nMrCE6Gzth+6+KSjTzpQAj5tZPtHZ0t90MuZl4H/MzGJmcOuIlmwfYI67N5rZbT3crp66Nci2hOjv\norvZJUGG2cAfzayB6D8MSroY3lXWR4nO+N4LtvGNYHx3v6dTgZ/2duNEOuiqFSIpwsyuB5509+fN\nbB7wlLs/FHKs0JnZJOBv3P0bYWeR1KXdpCKp49+BwrBDJKGBwE/CDiGpTTNDERHJeJoZiohIxlMZ\niohIxlMZiohIxlMZiohIxlMZiohIxvv/K0/xdxKTGnUAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.83\n", + "On the test set:\n", + "Accuracy: 0.86\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"random\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you see \"inf\" as the cost after the iteration 0, this is because of numerical roundoff; a more numerically sophisticated implementation would fix this. But this isn't worth worrying about for our purposes. \n", + "\n", + "Anyway, it looks like you have broken symmetry, and this gives better results. than before. The model is no longer outputting all 0s. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1\n", + " 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 0 0\n", + " 0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1\n", + " 1 0 0 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0\n", + " 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1\n", + " 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1\n", + " 0 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1\n", + " 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1\n", + " 1 1 1 0]]\n", + "[[1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0\n", + " 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1\n", + " 1 1 1 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0]]\n" + ] + } + ], + "source": [ + "print (predictions_train)\n", + "print (predictions_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEWCAYAAADmYNeIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXe8bGdd7//+rjJ9937OPv2kkUqIwcQIiRIliRRBRUWK\nWMCGvoBr4edV733ZX8BVREW85tJEiihGIPYECAmSEE4CCUk4bZ+zz9m9TJ9Z7fn9sWZmz+wpe/Zp\n+5Tn/Xrtc2ZWedazZs2sz3q+z7eIUgqNRqPRaDStMba6AxqNRqPRnM9oodRoNBqNpgNaKDUajUaj\n6YAWSo1Go9FoOqCFUqPRaDSaDmih1Gg0Go2mA1ooNecUEdktIkpErC62faOIPHSax/tuEXn2TPSn\nsv0HReR3T6dPFwoi8jsi8tFzcJyO12gz24rIThHJiYjZRVu3i8h03funROT2rjq9CSr92Xum29Wc\nO7RQatoiIkdFxBGR4XXLv14Rl91b07PuUUp9SSl1RfV95ZxespV90jSy/hptZtv111MpdUwplVJK\n+afQj6uVUg9udr96RORBEfnpde2mlFKHT6ddzdaihVKzEUeAH6u+EZFrgcTWdefCRELO2u+t2xGx\nRqPZPFooNRvxEeD1de/fAHy4fgMR6RORD4vIgohMichvVkVBREwReZeILIrIYeCeFvv+jYjMiMgJ\nEfndLs1mHxKRt1deb6+McH+h8n6fiCyLiFFvXhORjwA7gX+umMN+ta7J14rIsUo//79uPhgRGRCR\nz1bOe6XyerJu/YMi8nsi8mWgAOwVkT0i8kURyYrIf4jIn9ebN0XkO0XkYRFZFZEnOpkCK6OpXxOR\nJ4G8iFgi8usicqjS/tMi8oN1279RRB6qXI8VETkiInfVrd8jIl+o7PvvwHpLwssr5snVyrldta4v\n/0NEnhSRfOWajonI/XXnOtDmPNabQI+KyDsqbaVF5BMiElu/bavrKetM6SLykyLyrUofDovImzf4\nPF9Seb1aaTNXOR9VabvtNReR3wO+G3hfZb/3VZYrEdlfed3pt9Lx+mi2EKWU/tN/Lf+Ao8BLgGeB\nqwATmAZ2AQrYXdnuw8A/AT3AbuA54Kcq694CPAPsAAaBByr7WpX1/wj8FZAERoGvAm+urHsj8FCb\nvr0J+OfK6x8HDgGfqFv3T5XXtwPT68+p7v3uSn/+GogD1wNl4Ko2x/0g8LuV10PAqwlH2D3Ap4DP\n1G37IHAMuBqwABt4BHgXEAFuAzLARyvbbweWgLsJH2LvrLwf6XB9DlQ+23hl2Q8D2yr7vwbIAxN1\nn6cL/EzlWv4ccBKQyvpHgPcAUeBFQLaub5dX2rqzch6/ChwEInV9+QowVjmPeeBx4PlADPgv4Lfb\nnEera/TVynkMAt8C3rLJ61n9ft0D7AMEeDHhA8uN3bRVt/z3gS9Wzruba/7T6/ZXwP4ufisdr4/+\n28J74VZ3QP+dv3+sCeVvAn8AvBT4d8Kbvqr80E3AAZ5Xt9+bgQcrr/+repOrvP++6o2sclMtU7nJ\nV9b/GPBA5fUbaS+U+4AVQkF4f+WY05V1HwLeVnnd7Y11sm7ZV4EfbXPcD1IRyhbrbgBW6t4/CPzv\nuvc7AQ9I1C37KGti9GvAR9a1+a/AGzpcnzdtcA0PAK+o+zwP1q1LVM59vK5vybr1H6vr2/8EPlm3\nzgBOALfX9eW1des/Dfxl3ftfok5Q1vWx1TX6ibr3fwy8f5PX02pzrM8Av9xNW5Vlr6ksb/ew0uqa\ntxRKNv6ttL0+Z/q3rf8296dNr5pu+AjhqO2NrDO7EprnbGCqbtkU4agCwlHB8XXrquyq7DtTMXWt\nEo4uRzfqkFLqEOEI5wZCc9dngZMicgXhyOEL3ZxYHbN1rwtAaqMdRCQhIn9VMaFlCEcd/dJoOq4/\n923AslKq0Gb9LuCHq59F5fO4DZjo0I36/RGR14vIgbr9r6HRhFo7z7p+pCp9W1FK5eu2rb9W2+rf\nK6WCyrG3120zV/e62OL9hp9pq37S5fVohYjcJSJfkdAUv0o4Wh/eaL/Kvs8H3gf8oFJqobKsm2ve\njo1+K9D++mi2EC2Umg1RSk0ROvXcDfzDutWLhOaiXXXLdhKONgBmCE2D9euqHCccUQ4rpforf71K\nqau77NoXgB8iNP+dqLx/AzBAOJJqeTpdtt0NbweuAF6olOolNFdCaOZrdbwZYFBE6p2h6j+b44Qj\nyv66v6RS6g879KHWvojsIjQh/yIwpJTqB765rj/tmAEGRCRZt6z+Wp2k7hqLiFT6foKtpe31FJEo\n4cj2XcBY5fP4PF18HiIySjj6/AWl1NfrVm10zTt9vzb6rWjOU7RQarrlp4DvWTfiQIVu+J8Efk9E\neio367cRmhSprHuriExWnDl+vW7fGeDfgHeLSK+Ezjf7ROTFXfbpC4Si8MXK+wcr7x9S7cMD5oAz\nFdPWQzhSWhWRQeC3O21ceeB4DPgdEYmIyC3Ay+o2+SjwMhH5fgmdoGIV55XJlg02kyS8UVdHPz9J\nOKLckLq+/a9K325b17dPAveIyPeKiE0oGGXg4S77drbodD0jhPOtC4BXcYz5vo0arDgC/T2h2fmT\n61ZvdM3b9qeL34rmPEULpaYrlFKHlFKPtVn9S4Rm0MPAQ4RzW/dW1v014TzbE4TOHetHpK8nvKE9\nTTjn+Pd0NjXW8wXCG1dVKB8inNf5Yts9wrnW36yYJt/R5XHa8SeEDkCLhI4s/9LFPq8FbiF00vld\n4BOEgoNS6jjwCuCdhDf348D/oMvfqVLqaeDdhE45c8C1wJe7PpvQvP5CYJlQAGpmdqXUs8BPAH9G\neL4vA16mlHI20f7ZoO31VEplgbcSitMK4fnd10Wbk4Tm/F+p83zNichONr7mfwr8UMVr9b0t2u70\nW9Gcp1S93TQazRYgIp8AnlFKdRyNajSarUOPKDWac4iIfEfFvGyIyEsJR5Cf2ep+aTSa9mypUIrI\nvSIyLyLfbLP+dgkDjg9U/n7rXPdRoznDjBPOpeaA9wI/t85ZRKPRnGdsqelVRF5EeMP4sFKqyelA\nwqwk71BK/cC57ptGo9FoNLDFI0ql1BcJHQc0Go1GozkvuRASKd8qYS7LE4Sjy6dabSQiPwv8LEBc\nzBfsjOoYXY1G0z0ruwYppLvJG6C5EMnNHlxUSo2cyr7nu1A+DuxUSuVE5G5Cp4fLWm2olPoA8AGA\nK+P96t79t527Xmo0mgueT/zVj/PEff1b3Q3NWeILf3TP1MZbtea89npVSmWUUrnK688DtqyrjajR\naDQazdnkvBZKERmvpMpCRG4m7O/S1vZKo9FcjPzBZ9anMdZoQrY6POTvCLOIXCEi0yLyUyLyFhF5\nS2WTHwK+KSJPELrS/6jSGRI0Gs1Z4MD9Fu95x+zGG2ouObZ0jlIp9WMbrH8fYfZ+jUajOetc+cef\nBOOtW90NzXnGeW161Wg0mnPJgfstHnj1Q1vdDc15hhZKjUaj0Wg6oIVSo9Fo6njkTU/y4B/Gt7ob\nmvMILZQajUazjsKv/tFWd0FzHqGFUqPRaDSaDmih1Gg0mnUcuN/i80GrusuaSxEtlBqNRtMCHVep\nqaKFUqPRaNpw5R9/cqu7oDkP0EKp0Wg0bThwv6U9YDVaKDUajUaj6YQWSo1Go+nAw9e+W89VXuJo\nodRoNJoN0HOVlzZaKDUajUaj6YAWSo1Go9kAHVd5aaOFUqPRaLrgwP0W1798dau7odkCtFBqNBpN\nl/zBZz681V3QbAFaKDUajaZLdFzlpYkWSo1Go9FoOqCFUqPRaDaBjqu89NBCqdFoNJvk+UcObnUX\nNOcQLZQajUazSYqfenyru6A5h2ih1Gg0mk2i4yovLbRQajTnGKUUuazPyWmHmWmHQt7f6i5pTgEd\nV3npYG11BzSaSwmlFLMnXLIZH6XCZdmMT/+gyeh4ZGs7p9FoWqJHlBrNOaRUDBpEEkApWF32ccrB\n1nVMc0q85s0f0x6wlwB6RKm55FFKoRQYhpz1Y+WyjSJZTz4XEImenWdX31esLHnksj6mKQwMWaR6\nzDN6DM9TFAsBpgnxhIHI2f88NZpzgRZKzSWL7ylmTzrksuFILhYXxrdHiJ4lsYLOYiwdDus6AaWS\nwraFaEw2JUK+r5g6VMbzVEWkFcWCw9CIxdCI3X3nO7A477K86CECCjANmNwdPauf5flC6Y5/4D0P\nvIq3vWt8q7uiOUts6bdYRO4VkXkR+Wab9SIi7xWRgyLypIjceK77qLk4UUpx7Gi5JpIApaLi2OEy\nvtdmyHcG6O0zaaVxSkFPb/MIz/MCpo+VOXKwzOwJh2NHykwdLlMqBsyecDj0bJEjB0ukVzxUm6Fq\nesWrE8m14y0tePi+Cp2LMj4rSx6FvN+2nXbkcz7Lix5KQRCACsDzYHqqvOm2LlR0XOXFzVaPKD8I\nvA9ol2n4LuCyyt8Lgb+s/K/RnBbFQoDrNt/ElYL0qsfgcHcjLaUUpaLCKYdm01i882jPjhiMb7OZ\nOeE2LDctKJcCEkmz1u7CnMvK0ppHbFVzyiXF1OHy2s6eYvaky+qKx9CITTLVaPbMZYOW5l6R0BS8\nOOfiB2H7AkRjwo7d0a5M0b6nWJxzW7bv++HDRzyxdSbYfNZneSl8IEimTAaHLUxTm4Q1m2NLR5RK\nqS8Cyx02eQXwYRXyFaBfRCbOTe80FzOOo0Ib4TqUAqfc3Sgo8BXHjpQ5frTM3IzL8aPlcETqd96/\nt98iFm+8WfseTE85lCsOPSvLHqvLmwsbKRUVJ487TB0uEwRrfbDs1sKgFKwseXheOApEhctKJcXS\nvNtyn3pWV1wOPVeiVGp9vgIN/TjXLC24nDjuUMgHlEvhHO3RQ6UNr8+p8MibnuSBVz90xtvVnB+c\n7xMI24Hjde+nK8s0mtOi3dyZSDii6ob5OZdyKTRpVv/KZcXCbGeRccrhjXs9VeECWKmYMjdLVeiX\nFtb6MDBotTT3WjYt+4GCdNqvtBfGfK43yzrlgPmZzn1UKnTq2Qp8X7G04DWZm30PVpe9s3LMR970\n5FlpV7P1nO9C2TUi8rMi8piIPLbqO1vdHc15TiwuFTNp43LDhL7+7mYkMqvNHqyh6dYnn/OZO+mw\nOO82hX24rmopXLA2mvVPIweBUpBZXTtmPGEwNmEjBhjG2sPAPR+6lsBqcwtQ4LmKI98uc3LaYWHO\nZXoqnCMNAkV6tbNIisDohLWh+bZcCjhxrMyzTxV57ukiJ46V8VqYxDdLuRS0nQuun5fWaLphq+co\nN+IEsKPu/WRlWRNKqQ8AHwC4Mt5/aXgQaE4ZEWFyV5TFOZd0OhS8VMpkZNzG6HIOq5NQnDjm1NYv\nL3qMbbNrAhyNGm3nDKsjsFjcoFg4jRv6ulPoG7C47UcUpde8jp/6G8gMDvKBr8M9w/MMzs41PTGn\nek1mTzpN87iOo1icd1uaravE48LoRIRYvP1zuOsEnDjuNIxoqyJWKpbYc1nstMJ1TFPaXh/rzDj6\ntuT3P/cXxLQH7EXH+S6U9wG/KCIfJ3TiSSulZra4T5qLBMMIb+ijpzjrnUgZFHKtxWy9yW/upEtP\nj4lhCpYt9PaZZNKNI1IxYGAo/EmOjtscO1JuutknUoLrgOu0VyoRuPwFgn3fq2rLajfufwQG17Z9\n6J67uOtv/w7D97FdD8sOHyKGRiwOP1dmPYEPM4UId73M4cFPNT8siMDEZITVniEeS+3BNUz25afZ\nUZipaXfV49hrY6H2fJg+VsYyDXp6TVK9m4/JjMYMIlFpMi2LwODQ+X7b05xvbOk3RkT+DrgdGBaR\naeC3ARtAKfV+4PPA3cBBoAD85Nb0VKNpZmzC5tjhchgSocKbcLtRjAgUCkEtyH9sm00kJqwu+fhB\n6JE5MmphWaEgxOIGu/ZGWVrwKJUColFhaMTGcQJmT7RRGAHXslkdHuIjt/wI/rs2Hjqlh4b49Jt/\nhj1PP0PPygpLE+P8zaeu45Hn/5+2+xhBwBt3/TLffeXn2XHwELbr1s5xcNjiqZGreGzwGgIxUGJw\nOLWDHYVZ7px7GAEK+aCzaVlBMa8An1zWJ7ZisGNXZNNiObkzyvSxMk5Z1eI7R8ct4okzm2hhPTqu\n8uJjS4VSKfVjG6xXwC+co+5oNARB6B2ZXvURgb5+k4Ehq+VNOhIx2HNZjPSKR7mkiMaEYiFoOwdW\n34SIMDhkMzjUXsyiMYNtOxrzv66utJ4b9E2T6T17ePbG65nZtYu2k6AtcKNRnnv+9bX3ZsTEMMI5\n3FKx8WC+YTB1+X4Q4Us/cDfbjhxl9zPPMLAv4PUvM4jsHuDtf7IX31gTI8+wOZ4YZzo+zo7ibDgH\n2eXkiFJQKoRp/3r7Nne7smxh974YjhPge+G87LnIvgTVuEotlBcL2gah0VRQSnH8SJlyeS04f3He\nI58LmGwzojFNaYi5zOd88jmnpZglkqfvOxd/yzWsvPsbGE6jGPumycHrrmFm9+7TPkaVie0Rpo6U\nUZURsx+3KNgJHn/Ri8INRDi5dw8n9+4B4HPPQfLREoNmHmPd+XticTg5yY7ibMe5y1YoBekVn2za\nJ58LECN8gBketbsSvkjEAJ1vXnMaaKHUaCrkcwFlpzmDTbEQUCoGXZnskimTgUGTlUoMZFVbt+/c\nvOkQ4Ia7PH7jla/nifv6AYivZvnB4CkM1oQyADzb5kRFsE6X23+9yHseeBXc8Q/svSxGZtXDcRRP\n/NytfLH4fAKr/W1DtTlHQWGr0EQbjRkke4xw5N3lyLKQXztf5YdJ5MslxY7d0e5P7BzyyJue5IF7\n4Y5P37bVXdGcAbRQai5pfF+RTfv4fphdR7WwmlbFstu5rZHxCH2DAYVcgGFCqsesjXx8DAIRbNV6\nku6We69DvuNOfvnhmZo4cl/4XyJdYmjO5Rvf+RKe99gXsVwHQZHr7eOBV74CZZzCiFUp4jmHRMbB\n9APciEk5bvFn77RRe3+YaOBy3eoz3LD6DCt3XUZwX3jLMLyAeM5BFBRTNr4dfjbFVOuhm7INXvPB\nFzO5oHjkTU+SSAi5TOM2IqFDU9BFaEz1mpRLAdHY+RnlVvzU42BoobwY0EKpuWQp5H2mp8KY244x\ngUb77DbtiEQMIoNrN/CiEeULIzdxPLkNBQyXV7h94VEGnTS33Hvd2sjj08Cni0B/Y3slj6HZ0KSZ\nGRznK3f+MLF8BgyDQrKH3mVFKelSTnQf+2CXPMaOpTEqDwcCxAoePavlcLwqBiUzyuMDV1M0Y7X9\nEpkyQzO52vuBeVgZSZAbjKMMYX6yl9ETFRWspMVbHkrwuvd7wG2Yd97Mqz7yMdwBg57VJYy6p5NU\nyiCXC0ealfzt2DY4LUKjRaBc3nqhVEpVRFthR6QphaDmwkcLpeaCJQgUhXwYWJ5IGMi6+ap8zmdx\nwcVzFYmkwfCojW2HN1WlVEOsYycM4bRKUingn7ffQdpOEVRKhCzEh/jErrs4sbef4NMb3+h7lotI\nfV9FKKX6wv5Vlg+fyHJi/0B3jjxKMXY8gxE0hly22tMzLJ7u3UeqrDC8gKGZXNMc5MBCgVIyghc1\nKSdtpvcPEsu7iFKUEnYtsYFd8hifyvDYC1+KKIUoxVWPf4mh+ekws1FJsf/yGPl8QBAoEkmT1WWv\nlnR93SmE849bSBAopqfKa05PAqYJO/fEOHC/xe/zF3zir358zTqguSDRQqm5IMmkvTBMQtZu7tt3\nRmpJxVeXXeZm1lKVZVYDMqtldu+LEI2ZHYP563XGjgjbJiOn5S05Exsh19NLUK5rozJcSqZLZIcS\nG7ZhukFLEavHCBS24+NGN/5ZR4teKFQbbllpG0WQhUSuddYrUdC/UMCJWzhRk1LSptizzgwbKMaO\nZTCUENRF/T910+3c/MA/EivmGbqhF8k5DQ8m/QMWK0vrhLKSXahdukGlwhR2q8segQofpEYn7JbC\n6nlh2sFcNvR07q1zFNqoVunSgkupWDevrcALYHbaYceecP70DZeXeFvLvTUXClooNec9ga+Yn3PJ\nVgL0E0mDfDXQvy7SYPqYw/7LYyAwP9s6n+fxKYf9V8Q7Hi+eEMa2RRDCah+bpcGUCiRXSwzO5Zuy\n3xgKIuU2gq0UkZKHEsGNmhRTNtGS1zSSa9qtS5OfESjCR4wuE8AjGD2dN4/nHBI5ByXgRUxmd/ai\nzLWzTuScynGb+zy7Yx/bjzzNh3a+hJN7dvP54L0cuD+8PVm2sHNPlNmTTjhyk7Ak2diE3dbEOTPt\nNFRNyecCpg6V2XNZrBarCuGIcOpQCa/u67Ky7FMs+NgRg1wmbCMSFca3RZpy16ZbpDGEMGY28BWG\nKTqu8iJAC6XmvEYpxfGjjSEb+TbZcACyWZ9YrHWKOAiTYjvloClEwbUirIxuQ1A8z1ogEuk+C+It\n914H0DjPWN92rPXPLBAox5tNuvGcw9DJHFJ5CghMg4VtKXyrDF7QUiwV4NsGnt2dsJfiVtuJ2aqE\nVolE4fK5Q0xHn0cxZTMw37rN6pFFgVX26V8osDKeqq2P5VsnSlCmSTmW4MBt38XJPbsBuNt4K9wT\nrq+K5q69sVpS9k5zgI4TtCwtVk06PzK2NpoNHbmaP4BSEUrFte+ZUw6/h7v3RxtHpZ2Swte9vnF4\nD1Bsv7HmjPOed8xSuuMfau+/6zTa0kKp2VLKpYBCIcCyQieI9SauYiFoEMmOqNBj0rQ6j6pcVxGJ\nhsH8J445zG3bzTM33IYE4Xzns4bB98w9wp7CybZtxB54FR96LhbOPX267WYAODGLctwiWlwbESog\nMIV8X6xhW8vxGT6RbRBD8QLGj2VYnEhiOwGJTBkjUJi+QlVOVRnC/PberhMNKNNgZTTBwFwBoXFs\n6dkGSsB2AgJDmOuJ8f63BbzNB982WR1O0L9YaJgzXX9UA0hmHFbqBlGqXddUwKHnPY+FnQMtV99t\nvJXr/2oVgD+xv7lhlQ6npFpmSVKqUfwAisXWtTpbdlPB6pLH6MSaSTnVa5JeaXbTjcZE1708yzz4\nh2uWoYevfXfT+tLnztyxtFBqtgSlFDMnXHKZtXhDEdixO9rgxVjusjZklWTKwLIEy6ZtLlHiUWaj\nffSYeUafl+KLe24jMCyoG9z959gtvHbqs8SDMjfcFdrl6uMZedfatpbjY5d93IiJF11rxPAC+hYL\noTkSKMcsIo6PKCikbFZHk6jqg4FSxAouPculRqcd1kRoeDbP4niSmX2hoNglj2jRw7cMiil7U9l4\nAHIDcZy4TWq1hOmGc5uFnghOzFrLx1dp84l9++G5cL/sUJxSyiaRKSOBonelOSdsK8oJm57V5m2V\nGOT6O5vDq5/7HdwG99zG54P3AtTMs/XYkfYJ0aMxwfMU6RWPYiHYdL3M9d/HkVGbQj7A8xQqWPse\nT2xvnJ99+Np388A6k7yme65/+Sp/8JkP194fuN/i4TMohBuhhVJzzlBKkc34LC14uC0C+wFOHHfY\nsz9aM61FItL1VFrfgEmkUmdycleUowebb8qFiXH+bv+dmMrHF5M+N0MrN5nANHH+1xu4bzTHO9fF\nM65tpBg5mSWWd1ESmhzLcZuFyR5QsO3wSoNXqel7FFMRFrf3NDRjeAHjx9Khw45q7XkKYfuDc3kK\nvVEQwY1Zbc263eLELJbrzKONB1zrSVhvc+0iuFGL9Eh47EjJJ1b0GvqtgMI6Z55CKoJvCqa/5kSk\nAM8Sij2bSxxwt/HW8MU9NMxnQpjQIBY3KK0bLYoRei8fOViqZRvaDCI0mexNS9i9L0ou41MsBkQi\nQm+/hWkKTjnAcRSRqBCJGDqucgOuf/lq7fWf3jrROEr8HBzYQrnSQqk5ZywteiwvdK5j6LkKx1FE\no+GtNJE0sG2p1WlsRyQqjI6vzT1FowZ7L4syP+tSyAeYplCY3Mbjz7sd3zDxK8PHlUgfrXw/AyV8\n9KMZTuwfbFpXpX+xQCzvhmbSSveiRZeB2SyJbLi8vmVDhfOPluPjRdZGnoOzOSxnY69WACMIvUtX\nR5NdbH36mK7P4GyeP/0ZGyRgqCfLyliSoM5JZ3kixfhUGgkUhgrnXn3LYHV0nTevIczu7mNwLk88\nFw73Cyk7FOrTiDusn8984NUP8cWfeprevXHM4xnymfD7Fo0KY9sjLC+4LRMa1JtqkykDBAq5dUIr\na9VdGk7LCMWxt/I8FQThfGaxENTaTaYMrvWNi6gC8Onz4B/GUY/+OxAmZzjw5rXP9uGt6lQbRG32\nseoC4Mp4v7p3v35yO58IAsXBZ0obPsWLATv3RInVmV89TzE345DLtE82PjEZoac3FJ/56CCPDVzN\ncrSffifDTStPMV5a5KO7Xkbeag7FWO+8UuszMLunr224xeRzy5itvDir/WrVpgFLYykKfZURlFLs\nfHa56zANCIXoxL6B1kWXVRgiAuBGzNMSIAkU2w+tYKwbAboRk5k9fQ1tS6BIZB0sx6uZcDseu/pF\nOFOB+UpBoBhcKJBcLRO3A0QUz59+gmvSz9Xmvr/9rSJBG1+wfVdEMQyphYUsL3isrHgEASSTBiPj\nrcNLlFI4ZUUQhAXBq1MKzSJrMjIWuWTjKteP/M813/XNz31NKXXTqeyrR5Sac0Kt1NEGQmkItdFk\nFcsStu+IopTC8xQnKwV/q+0Njlg1kTwZG+H+iRfhSSgSeSvBXGyY75v9MmVjk5mxDcF0A9w2VkGj\nw8m0vf0HoXdqN7QTcESIlrymdHGRosfIiSyGHypBYBosbE/hxE+tUnGyMge5PiGB5frECi6l5Nrx\nlSHk+6JAmw9LKZIZh0S2TGAIuf7YprIItcPwAwZnciRyaxPSApTd8DP+8tiNXHVdAePLYb13MYBW\nQilhgvuqyV9EGBq1GRrt3MdyOeDElIPnqepptkQpWF3xGRnb1OldcLznHbO11/Uep7C1ptPT5cLt\nuea8RSnV5L5v2e0dLGBtYLFtR/vk4SKCbQu79sYolwN8TxGNGQ3ehY8M34BnNH6tPcPin3bfgWeZ\nxApuk/gEhoRmw+YT6Ri8X4rbTe11eg5QgG8J5XhdmyKU4lbLOT7fADNoIZZK4a/zqBQ/qGTaWeuB\n4YXLpvfRdbPSAAAgAElEQVQNNMQzdotd9tvGbdqOT6lb668KEw1EKnGgCkhkHVaHE2SHOjvxdNOu\nXfbbPpgYCt6//GJm7glHcH/c9394+pF1nq4CPT3mptPOVavNdKytWb99RaBf8+aPwUUwqnzPO2a5\n8o8/WXt/4H7rjHqank9oodScMUqlgLlKULhI6FwzMhZmOKmGf+Rzze748YTge6F5dnnRQ4QNE5BH\no0bT4OXWb7yd//vqaWhx47KcgIVtKcan3Fr+UUUYsrA0kWRoNo+qMzEGAvm+aMfR3/JYkompNKoi\nsgpQBgQiWH5rhZnd1ddkblyeSDF+NI2otTm+wBQWx1OMnsg2eMGGYmuEnql1JLNO6+GMCtfl+mPN\n6zbAjZoEQkuxdCPd3zoSWacmkhB+9qLCOd58X7S1CbkLokUPy2kvklUsb20I+Wu3vJUXL36WvceP\nYhgKr+ATjQlj2zY/um31Xe5EvK7M2p/eOsHt953/cZX1DjbrQ3NKW+xgcy65NM5Sc9ZxnYBjldqF\nsFZD0HUUk7tCRZuYjDB7cm3+RiQcaRYLa3cbLxdQyDts2xHpKr9qfTxj/BdWGfHbzQ0KbsxmZk8/\nvctFokUPJ2qSGYzjxixmYjZ9iwXieYfAMMgORDcUFy9qcnJvP6mVEtGiixOzyA7EsJxwJAeNDrvL\nY0kCu/mcvIjJiX39JNNlbMfHiVkUeqMoQ1geSzI4l695m3i2wcJkc7yk4QVNYSUQCpLptU/Q0Il8\nb5S+hQJS/wBR6W8psTmhbDcyHZjLESuEIlpM2qyMJmqVSDbCcjYeylXDcmrvTZMHX/kKvra8wsDi\nItn+Pv52+OMcuH/zc6W+12V8L2AYNDibna80xSbWjRAf2YL+nC9oZx7NGWF+xqnVYKxHhKZsJqWi\nz/GjDkGdt+h6bFvYc1m0wRxWjWf81e9+Hc/9Rw9ObM1ZJZZ3GZnOtLwhBwLpoTiZ4Y1zqp4p7JLL\n4Gwe2wnwLGFlLEk5eWrVgyUI09kFprR10IkWXEaPN59/IDC/o/eU5wNN1695qSqBQk+U5bHEpky5\ngzM5Uuly0wNMdUS/PgnDyb39DV617YgUK9VP2s0LVv6f3d3XNAJvx3qHk3IpYGHOpVQMsGxhaMSu\nzYc7TsDRg+UNxTIWh+07Yk0VaNanOjzXXP/y1dAMfIlwOs48Wig1Z4RjR8otE40bRjiSrB8dHp8q\nU+iQhq7KZVfG+K4PXc/X9+znQ8/F+Obf9zA6ncVyq8NGYWk8SaE3ytjRNLFSc35XBWQGomE4xcVc\n+kgpRo9niRbdmnCEKfIs5nd0n7HnbBApeYxNNQtaK2elzT7UjE2lwwTvLdYpwvJfpzIP+p53zLL7\nP57kvtd+o8l7dXTcon8wfPCYPemQaZPvFcJKIrv3N+aXXc+t33g7jy8e4UPPhRaMMzV3WTWbvuHy\nEs8/cnDDjEYXO9rrVbPlxOJCsdC8vJpQup5ifmOR9CyL//kDP4eqlqBSim3HV7GqVTRU+M/QTA43\nYmK7rc1wSiA7mLi4RRJAhPkdPaRWS6TSYaKFXG+U3EBsy8/diVlhurz5Qu0BR6HC5ArrBMZQEG3x\nwNOO+R29DJ/IEs83O1V5tnHKzkJve9c4d/zDV5hUjaGPSsHCnEffgIWIMDZhk0garC77BL7CdVUt\n/EQExrfbHUUS1tKvvaby/g/u8oj/8I1hG99xJ7f/endzmQ+8+qHa60fe9GTNbFri0jabngm0UGqA\nsHbj0qKH7yoSKYOhYXtTxYoHhizSK35DjJpIGGi9PvZsozARz7J49obrUMbaftGih+k1B+WLgtRq\nCTdiYhZb3GBF8De4UV00iJAbiJMbOA1P0rNEbiBOvjdKrOARGEJgwPixTNN21TjNblGGsDDZw+Bc\nnmS6XBPiwJBwJH0aDM/MtswPoFSYGMOOhOEkvX1heNLh50oN33+l4OS0y9795qZ+Swfut+D+6ujv\nSX6/bt0Nd3lh7tsWZtNHLlKP0/MBLZSXKKVigOMEYWqtgs/C3FrGHGfZJ5v22b2veV6lHtdVBH6Y\nosu2DXbuiTI341IsBBhG6PU63CIOrW/AZDUPqrQ2ClRAYBggwuGrruRrL/puxA/CXKgiGH6dq2od\nYVxfwOpIommOLhBYHYpv+YhKE6JMo6FGpRs1sUt+44hNIDuwSQ9dEZbHU2QG47Xct6WEddrXPd/T\nQyKfb1ru2yaf+YvX8J7eZ2vmzEIuwG9lKFGQXvUYGjkzjjzVYtBoUTynaKG8xAgrsjuUimvptVqN\n7nwflhZdxiaaHVA8T3HieJlypTagAGPbbHr7LHbuaZ+zs5qRxPA8XnzfZ9l2dIrAMDCCgIWJcb72\n4heRHRzA8AwmjmaxvAAlkOuLkh6Kt/TqDASKKZtywmZhspf++TyRso9vGaSHYqcUFqE5N8zt6GVo\nNk8iGxaDdqMmS+PJrr1e1+NFzIbUgE0oRWqlRE+6DAryvRGyg/G1xPTrePLW7+RF930Wu65YpWdZ\nHLrqKr7+7yPcwUgtQfuDH6OlY5pS4DoXnx/IpYZ25rnE2Mj5oB7bhr2XN5vxjh4qUS41NiBSST0X\nN7j1G2+vLe80v9K7vEzf0hKZgUHSw0MARIouY8eaR4aFngi+ZdCzXKqNQKpekzO7+vBOMzm4ZgsJ\nwvlKdYbLUkWKLr3LJSzXp5SwscthRqF6Zyc3araMbQVAKa567AA3fPnLGIEPKA5dfTVffcn3EJiN\ngjwwv8DdH/0Yltdo/hcJHyL7+jf//XSdgJUlj1JJEYsJA0PWKRUS14RoZx5N13Qrku0ol4KWCcoD\n4OuX7eCfr38FdOl8kBkcJDPYmHS8b7HY0sEjmXU4sbuXnpUwX6xAzaln7HiGE/sHtIn1QsWQborD\nbIpEpszQTK5WjcUu+WvfmephVZh9KJ5zG0zCUKnoMpUm17eTL3//JJFykUJPgpk9Q00jUMMLIIjz\nyJ0/jO2UmZj6NvlUL4vbdiOGsDs3zXctHyDuN1azCYLQ+ccwwjSN9aFQpVJjXHKxAKurPjt3R5sq\nmGjOPlooLzE2I5LrU3rdcJfH7NGAE9PgrqtgJQqcp0pw/en1z26TaUWJkEqHJrr1uUcNpYjnnE2X\natJcpCjF4Fy+wSpRzZy0HkOFMajrhXJoJrfmYS0GbiyJ6UHfYmPlFvEDJo6uYnoK347i21GOXHVj\neDQJBe1g724yO7fxWyOf5pv/Ei5bWXZZmG2spJNMCRPbo5iWMH/SqYlk7bSCMF555149nXCu0Y8m\nlxiJZPeXPHrbOMG7X8SJ4T4OHBHe+3ej/LZ3N0WvRXYZ0+TEnl2n3b9y3Go9ulCqluJtPRKEDj0o\nVXm6v/imEzTdY7kB0uI70DJjk4QpARsXqqZwEwhFtRp6UyWVLjdUVwkPJDWRrB53Lh3hR/M/wzvv\n+Xmcd76QhdXmrD75nOLY0TJKKYrF1t/hdss1Zxc9orzEGJuwmTpcbuvEU8W1bR5093H9D/wnpucR\nB+KFAkNzcxzfu5fJo0ex3bBig28YlBNxnnv+DV31wXR9+hcKxPMugSlkBipONyKkhxKhc4dau7EF\nQphqLmoSrJabA9elWhJqFdMPUITp15bHkmE5Es0lRWBK2/yvrZIc5PsaLREdvzHrvnv1c56dkIqZ\nF+Arv/ocY8XWcb9OWdW8xluVAzP00GZL2NKPXUReKiLPishBEfn1FutvF5G0iByo/P3WVvTzYiIS\nNdhzWYyhEYvxG3sQc63qUDWjnG8YPHvD9ew8eBDLa8x6YnkeI3OzfPmu72d+2wTpwQGevulG/vkN\nr8OJbWwSMryAiSNpkhkH01fYTsDAfIGB+dAN36s4V5QSNoEBrm2wMpogPRyn0BPBs8NE3VUCCePu\n+haLWJV8p4YKS0QNz+TO1MemuYAITINiO8sElVAkAc8ymNvZ25SUXRmCEzOb9ldAsacxzMONNG/X\n8pgVxyGARLbz97JUDOgbMJum3EWgp88k0BaTc86WjShFxAT+HLgTmAYeFZH7lFJPr9v0S0qpHzjn\nHbxIqU8iDjBw3Tw3PPQwg3NzlOIJpvfv5dvXXUuht5fXvudPW7aRyOY4vn8fU1desenj9y4Xm2oc\nGgpSq2XSQwkCy8CNWczvbB0sPrurl76lIslMGRByfVEiRZf1QSyGgkTOwfCCU65OoblwyQzFiRey\nTcsFcCqJ5b2I0dYBbGkixdhUZl1FF4OVkcbaYtn+GD0rpaYKL9VjVd8HplCo1A+d2zFJ6qmn245c\nc9mAyV0RXEeRz4VhXEGwVmggs+rT228yNm4j6ywmnqfIrHp4niKRNEmmjE2XD9M0s5Wm15uBg0qp\nwwAi8nHgFcB6odScAtUE4gC/8crXr+WPfFfjdiujozzwqle2bKOYSNCTac6e4tl2k3t8VyhFIl1u\nbcYQiJR9ShuImjINVkeTDQ4VE4dX2jgAhZUztFBeergxKzTJt8gv68QtvGj776/hBURKPiujCQw/\nwHKDhoou9fgRk/kdvQzN5MLMUSqcZw8E4oXwN1hM2Q3TAE981y3s/PZBbMdp+b0tFkJx3L4ziusE\npFd9lhbWfs9Khd7rKBjfHqnbz+f4VDhtUS0UHY0KO3ZHMfQUxGmxlUK5HThe934aeGGL7W4VkSeB\nE8A7lFJPtWpMRH4W+FmAMfv8S+F1LqjGLzbFLt53au09eet3cvN//FdDwLVrWTx90wtOKRSjf6HQ\ntk4jKszNeSo4Mav1TUeBd4rB65oLm8A0yPdFSaYb57RVJel6O1LLRQYWGpMWL0z2Ukq2z6xTTtic\n3NuP6SkCg7XKKlUngHW/lVx/P//8xtfxyr++F7ONo0C1DJ0dMcjnnJbrM2mf0XGFYQpKKU5ON3rK\nqgDKJcXK0pnLDHSpcr478zwO7FRK5UTkbuAzwGWtNlRKfQD4AIQJB85dF7eW2AOv4m3vGg/fdBm/\n2C0Hr72GaLHI9Q9/JfQ6BZ658fk8eet3brotCVRoomqxThE+hXfMqtKB9HCCRM6BoNkB6EwHsWsu\nHJbHknimQe9KCSNQODGL5bEEXrT1bc8ueQwsFJqcc0amM0xfNtg2gw8Q5hRen+6xw8Nkrr+fo1dd\nye5nnsFcN+cYTxgNI0DXbX8783xFxBRcR+G3SHVcFVQtlKfHVgrlCWBH3fvJyrIaSqlM3evPi8hf\niMiwUmrxHPXxvOKGSlWBr+/ZvyaO7+q8z2khwlMvvJlv3fQC4vk8pXgc3z7FuoYbFA9WQM9SkVx/\ndFO1DiFMXTa7q4/+hQLRQli3MT0Ub/Jm1FxiiJAZSZAZ6a5kVypdblv8un8+z8rYmS3V9tgdL2bs\n+DTRUgnbdWtRJePbGn9j8bhBLtv8+xEJ67ZuhJ6iPH22UigfBS4TkT2EAvmjwI/XbyAi48CcUkqJ\nyM2EXrpL57ynW8gNd3k886s/woeei/HO+/rh0xvvk8hmufnf/5PJw0dQhsHRKy7n0e+9oyuv1FYE\npkm+9/QqMTTFqlWo3pcSBY9Y0aN3pcj89h68iLkpwXSjFguTp9dHzaXNeiez2nIq8ZKBYmlbT1dt\nma6PBCq0krRRqlIyyWd++ifZ88yzDM7M8caXrLD02TnMdVaQ4VGbfK6xQLQIDI9aNUcdOyJYtjTl\nlRWBvn49/XC6bJlQKqU8EflF4F8BE7hXKfWUiLylsv79wA8BPyciHlAEflRdjMlp19FU+XwTo0bT\ndbnnI39LLF/AUAqCgD3feoahuTnu+8k3bNnjpTKE7EDoIVhv2lrv/SqeYmIqAwKFpM3SRI82n2rO\nCYWeCMlMc5wuVLyosw7pst/REcj0Aoans0TKoR1UGcLSeKop808V37Y5eO01cO01/NGrH+KR++dr\n65RS5DIBy8tepaalwvdDURwasenpXeuHiLB9R6SSsCCcnxSBRMqgf/B8n2E7/9nST1Ap9Xng8+uW\nvb/u9fuA953rfp1Lbrn3ukZTKnQ1amzHnmeexS47oUhWMIOAVDrDxNQUM7t3d91WIpPhiq8/Qf/S\nEvPbt/Ht667FiZ+6o9TqSIJAoH+p9Vwl1AmngnjeZfhkloXTrCuo0XRDKWlTTEVIZFt7owLEii65\ndkKpFKPHMo1pGH3F8Mkss7v7cNvMjbZjcc5lZdlv8AmyLGHn7ihGi4fHaMxg3+Uxclkfzw3nOuMJ\n7fF9JtCPGueYG+7y+I1Xvh4gDNk4DVFsxcD8Qi1jTj0SBPQvLnctlEMzs3z/xz+JEQSYvs+2o1Nc\n/ehjfO71P3HqZliRTZVQMlSY+cR0/VMuvaTRdI0Ii9tSDJ3MkWwllq3S3dURKflYbnOuYlGQWimx\nMp7quiueqxpEEioFoz3F6qrH4FBrXwHDCAtJa84s+hM9y1TjGe823rq28BTDNbphZWQY17abxDIw\nDdJDg232aubWf/nXhjYsz8PwfW588Et86eX3nLH+bogIphdoodScG0RYHQ29qNcnEQhEKHYIEzEr\n9VPbFRffDPX1YutRCvK5gMGhTTWnOU20UJ4F2sYzngOOXnklz//SlzE9r2Z+9Q2DQk8PJ3d3l7Tc\nKjv0Ly03LTeUYvLIkdPqXzEVAZqrxq/PZrK2QuGeYtiIRnMq+LbJwmQPwydzteTqXiWbT6c5fidu\ntZzfVEC06NG3UCAz1L5Q9K+41/AangTAtKRtLuZuPF01ZxYtlGeIsxnPuBm8iM3nXvfjvPDf/4vJ\nw4dRhsHU5Zfx3y/5nq4deQLTaJu/0rNP7ysTWAZL40mGZjcWy0DCVGSbDRfRaE6XUjLC9P4B7LKP\nMqSrGF/L8fFMI8w5XFlWTcJuBore5SKJnMPM7taFop+4r58//cbbefjadxOLC7YtOC28WAe0c845\nR3/ip8mt33h7OHI8m/GMm6TQ28sDr35l28wg6xk7dpzLDzyB7TocvfJKjlx5Bcf372PHwUOYdSUM\nPMvi2RtOs+AkkO+P4URNxqcyTcV0AyPMnuJbJpmhMBG6RrMliODGurtFJtIlhmbztULRrSwkhgrF\ntFWh6OZDC5O7o5w4Vg4LpUvY1tg2m2hMPziea7RQniK1EI4tHD1uSBcjyOu+/DDXfPUxLDesvzd+\nbJrLnvwGD77iZSQzWfqXllAiGEHAiT27+cYLb+768OFNwUEZYULo+pyr8YIb/vjXhYqIClOGlRM6\nk4jmAkEphtYVim4xVQlUCkUXNxZKCE2su/fFcJyAIIBoVHSC8y1CC+UmueEuL3TMOcPeqltBPJvj\n2q98Fctfq41nuy5jx6d55f/9fxy++nl87cXfTaxUYmVkmMxg985AfQsFepfXHiIG5vIsbktR7Amz\n5dhlv20dP8vxtVBqLhjC5ALNy9sVim7KP7yB5ScS0SPIrUYLZRfUxPECJVoscsXjB9h29Ci5vl6e\nvukmlsfHGD9+HGUY4DcWkRUgVipxxdcPsOPgIf7pTW/YVOq6SNGld7nYJITDJ3NM77dRpkE5bpHI\nOi3Fsltzl0ZzPqA6jPLqC0UrQotJtODg2QalhEX/YpGe1RISgBsxeOqJziNGpRSFfIDnKmJxo60Z\n1vMUpWKAZQnRWDgSVSrMB2uY6Goim0Tfkdpwy73X8SvuNQBh6rgLlFg+z8s++BEipRKW7zNycoZd\nzx3kobtfihuJdPyRm0FArFBgz7ee4eB113Z9zGSbnJlImESg0Bsl3xejb6mIeKrBeacct3C0UGou\nIDqVcVPQZIdNZV0SORffMjC9oPawGHEC/vB3Fvnf//hLzPzgnzW15bmKY0fLeJ6qtZdIGWzfEamZ\nZJVSLM57rCx5tfASOyL0D5gsLXhUXQ56ek3GttlaMLtE35HqaIh5vAhMqwDXfuWrRIvFmlOOoRSG\n53HLv/0Hn/q5nw1HlB2ommK7EUrL8bEdH6NDKS3TCyvQKkOY2d3PwHyeeM5FCeT7oqwOd5fAWqM5\nbxAh1xshlWlMUhAAq6MJSnGL8alMQx1WQ4G4QcvkBL/7/nl+qsVhZqadplyuhVzA8uJaGa1cNmBl\nyQvT2FU2dcqK+dnG0iLZTJjMYNsO7SzXDVooufBNq52YPHS4wXO1iuH7pDIZ/u1HfoiX/P2nsRwX\ny/OafrieaZIZ2GBErRTDJ7LE86GDDm1iq8MqDAV6l0ssTaQoJe2ukkzbZY9ExkEJFHqiHXNtajRb\nwcp4CjPIEqs89ImCXH+U7ECMVLrc3rtnHQIELco++L6iUGz+YSkF6ZW1MlpVkdwIpQhT3XmqkkdW\n04lLViibEo9fpJTjMVhtXm4EAeVojNJQkk/9/FsYPT7Niz77OWKFYkOeWGUYHLy282iyf6FAPO+G\nJqTKrnUva1RDQQwvYGQ6w8ye/g3j0/oWC/QuFWum3L6lIqvDCbIdiu9qNOcaZQgLk72Yro/lBrgR\ns2aSDQzpWigVYI62WK7aNxHU/V79dtacFoighbJLLil3qlvuvY5b7r2Od97z85eESAI89R034a5L\nEuAbBvPbt1FKJYFQDOd27eRzr/8J5rdvwzdNPNMkPdDPv73mhyj2dM5RmVptrrhQ/emVo0aDQ0Nt\nfSX/ZSfsskfvUugUVBNZBf2LBSzH77ivRrMV+LZJOWE3zFsWk5G2Ihms+2EogditzbdlywrLaLUi\n1WMSBIrlRRff614olYJIRItkN1wSI8qLKaRjs0xdcTkD8wtc/ehjBKaJEQSsjAzzhZf/QNO2hZ4e\n/vXHf5RosYjh+RRT3RWqNTrYeqLl1nZYAWy3s9jFs05rpyAgnnPIDupRpeb8R5nCwvYeRqezQOPI\nMNcXJZF1MANFOWqxMpbg+CM2sQdexYnv/0/Sdg+Dzir9bo6J7RGOT5WhMv8oEqa6Gxq2OHYkTEyw\nmSKE/YOmdubpkotWKC8V02qV0elprvj6E0SLRaYuv4xD11xNYFkgwoEX3cbT3/ECBufnKaZSpIc6\nZ1Qub7KUViluEyu4zaPGDvsEAiUdK6m5RLAdHyXULC/V30Yi53Bi/0DDA6n4AX/0S3F6d74E5QUE\nYjBZmOXOuUfYu19Ir3o4ZUU8IfT2W2QzfluRTCSFYqGzgCqlKBUVhbyPaQo9fWZT8ehLnYtSKE/0\nj1xSInn9Fx/i2q8+igQBBrDt6BQ3/+cDPPL9d3L4mqsBcOJxZnd1lxS9ExIokukSiaxDYBpkB2Is\njyXCYsttKsSvRxHmk831xTpuV+iNhiEkLX7kOrWd5kIimW5TENpX2GW/IXZ4cC5PpOThKCssaQ9M\nJ8b52uDV3Lz8jZrjTpV8NmgphIYB0ahBqei3XF8uKZRSnDzukM8FtVHq/JzL5M4IiaR2mqtySc1R\nXoxc/d9f5fqv/DdmRSShUtbH97n1X/6Ny79+4IwdSwLF+FSagfkC8YJHIuswejxDPO9yck8/zgbe\nqArwrFBcZ3b3oTZ4avUiJiuVYs/1f8tjSV12S3Nh0eGrrurXKUUy05yIwzcsvtW7t+X+VgfDTDRm\ntB5NCsTiQjbt10SycnhUACePO6jN2HEvcrRQXsD0Li1x4xcfavsbNIOAG7/0ZaRFeMipkEyXsBy/\nwXxkqNDrNTAg1xdpFxmCApyYyYn9A6yMJTsGadeTG4xzcm8/qyMJVkaTnNw7QL6/80hUo9lKDD+g\nd7HA2FSaoZNZogWXQKTJn6eaqWdoNk8s56wtbIMjrRWxf8Bq6UpgGNDbb5JMGU3rDYGBQZv0auvR\nplJhTUxNiBbKC5gX3/dZZIOnPtN1iZQ6e5d2SyLrts7PKkLfYoGBxVJLF3ZF6CK/NNF9hfd6fNsk\nOxgnNxDDt/VXVnP+YngBE4dX6VsqEit6JDMOY8cyxIpeQyq7+uoisaLHyIls6AVuCE6stbVEifB4\n/1VNyyNRg4nJCIYRiqNImI1nx+4oIsK2yQgDQxamGa5Lpgx27Y229aLVNHNRzlFeCsRzOfoWlzac\nE1SGgRONnpFj+pa0DPVAKXpWyg1PXdUbgWcb5Hqj5AZjBLqupOYip2+piOmvzdW3+n1WHybXl+Aa\nWCiQ64+yNJ5i4mi6aX8lBo8PPI9r0t8mohoz7fT0mqR6YpSKCsOASF2lETGEkTGbkbHmEWlvv0mx\n0DzHKQKxuP69VtFCeYGSSmfwbQvTcdtu41oWT9/0ApR5ZubzsgMxEutCNlrV3au+DwTmd/R2VfRW\no7kYiOecrhzaWm6jVJisIGbhRAyiTouMWipgJdLHWLk5fY+IEE+0P3oQKNIrHrlsgGkJA4MmvX0m\nuYzf4MwDYWo7XdJrDS2UFyjpwQEMv0VKq8r/biTCU9/xAp689ZYzdkwnbrMymmBgvlB7LPZNA4Ui\n0irQWQTTC7RQai4ZAtMA99Tm9gQIKg5ufsREOc25YAMxSPibr4EbBIpjh8s4zlqoSC7jMzJmsW1H\nhFIxoJAPMEyht9fE1Nl6GtBCeYHixOM8d/11XPbkN7C90AwTAJ5l8vnXvZb08HBXyQLaYfgBPUtF\nEjmXwBSyAzEKPRFyA3HyvVGiJY9AIJUuk0o7bU2yTlR/xTSXDpnBGEMzuYa5/PVWl1ZWmECgmIrU\npicyg3FiebfBemMEPuOlRXq8wqb7lV7xGkQSQoedhTmP3n6LeMIkntAPtO3Qd7ELmEe/9w5y/X08\n79GvES2VmJvcztfueDHZgQHGjk8jSjE/uZ1gk6ZX8RXjR9ONJYBKOSLFGKtjSZRpUEpGSK0USWZa\nm5oCgfRQfMMQEI3mgqRiJvUtA1WX3abQE8Eux+lbLoZhHyqcp1ciRMphJqpy3KKYsOhbKUElPWMx\nFWlwdisnbJbGk+zOFilnygQYTBZn+Z75/z6l7ubaxFqKhN6tyZQWyU5oobyQEeFbN72Ab930gtqi\n8aljvPRvP17zhlUifOEVL2Nmd/fJBlLpUoNIQuhs0LtaIjMUr4V29Ky0DqJWwNJ4ikLfmXEi0mjO\nJ1LLRQYWi7U6Vvm+KMtjlXSPIqRHEmQHY0RKPr4luBWriuEHocdrddQ4lMByAwJL2jq6JVJCIWuS\n8qQXvsIAACAASURBVApcnj1KNGjvk9CJdpl2FLqIczdot6aLiGixyPf8w2eIlstEHIeI4xAtl7nj\nHz9DtNC9uSaWbx0GEghEi2vedkab+EwlUE7oZzDNxUciU2ZgoYARKAwVPkAm02UG5vIN2wWmQSlp\n10SyukzVC6IheFGzpUgm0iWGZvMszPooMcjaKR4cfSGHkpNN2waBYnHe5dBzJQ49W2R+1mmqItI/\naLaciTFNIRbXQrkRWigvInY98xyt7CuiYPczz3bdjm8ZLeOeRYUhIlWKyUjrsj+mgd9lQgGN5kKi\nb7HY9BBpqHCunuDMZbIZWGg+jmdYfHXouoZlSimmp8osL3p4rsLzYHXZ59iRckNmnUTSZHg0TExg\nGCAGWLawY5f2bu2GjnczEekVkX0tll/XavvNIiIvFZFnReSgiPx6i/UiIu+trH9SRG48E8e9WImU\nS5h+c0UOw/OIlspdt5MdiDWm1aKSfs42cOpyUqZHEvim1EoFKcJR59JEd1VHNJoLDdNr79FqnCmh\nVKrlcSynTGxunkzaq40Yi4WAUrHZScd1FblsYxuDwzb7rogxMRlhx64oey+LEonqB9puaGsfE5Ef\nAf4EmBcRG3ijUurRyuoPAqclWiJiAn8O3AlMA4+KyH1KqafrNrsLuKzy90LgLyv/a+qIFIsk8nmy\nfX0EIk1lr3zb4uQm5ijdmMXiRIqh2TyCAgVu1GRhe0+DAPqWwczeflIrJWIFFzdikh2I422Q81Wj\nuVBx4lbojbpuuTKkFtqxEZGiR/9iAbvs4UZM0sMJyvWVdETwLQOrTixHjx/iiiceBhHmlIdSLhOT\nNq7TujKICqBY8OnpbfwtmqaQ6tG/z83SaSLpncALlFIzInIz8BER+Q2l1D/SuYJSt9wMHFRKHQYQ\nkY8DrwDqhfIVwIfV/8/ee0dJcl13mt8Nkz6zvGvfDTQ80AQIgCBASgQ9QYkOQ5Gy1FCzlFmtNCvp\njCjprHZmdw4lcUTtUnuGI/Ls8ogylKVnA4QACJQEokl4S6AbbdFVXdXlK31mmLd/RGZWZWVkVVa7\nMv2+c4DOigzzMjIyfnHvuybwIXxfRLpFZEQpNX4Bjr/pMVyXO+9/gD1HXkV8H1GqUR6r/gU5ts3o\nFfuYHhle075LmSij6Qh2xcM3pW0Rct80yPYnyJ7XJ9FoNgdzAwmGiwuNaFWoFeofTHTkRYkWHQZP\nZ5Ha9pbrEj2dZXp7mlJqsSPOfH+c3rMFDAWxYo6rn3sM0w+8RXX5HB91GByxMQxYHi4gApGIthYv\nFCsJpVkXJKXU4yJyN/BtEdnJiqV7O2Y7cHrJ36O0Woth62wHWoRSRD4BfAIgmhm4AMPb+NzxTw+x\n+9VXm9ytjR8vUMhkeOruH+XUVfvPzRUq0mj/Y1U9TMfHiZrhBc2VwvAUviFBxWWNZgvixCwmdnfR\nPV0kUnZxbZOFvjjlVGdt33omi6FznD1nC01CWS/83z1VZGDsJO1uucpXiAHLuxGIQLqr+eFWKdWo\nvqPnJdfGSkKZE5ErlFLHAGqW5VuArwPXX4rBrQWl1BeALwCkR/Zv+f4wVtVh78uvYIXMSUIw+Rwr\nlTh19VXndRzxFQNjQQcEJAjoyWeiLPTFUIaBbxkk58v0TBYbKSn57ihzg3qeUrM1cWIWUzsy57Rt\npOKGLrccn6YacgRiWeiO0T9hh3YAUoBSwq69UcZHq5TLwe8vGhFGdkSaUkLyOY+z4w6uoxAJomAH\nhmwtmB2yklD+MmCIyHX1eUOlVE5E3g189AIcewzYueTvHbVla13nskF8n+3HT5DMZsln0qsKkeU4\nLT++tdI7kSdarKWL1B4/gmo8QXCQaxlBzuWSbVLzwXtzQ+fWLUSj2ap4ZvPcYx21gpd09MoruP6J\nJzHcZpEVIJU2iEQMdu+L4bnB1Iu1rPxcsejV+kvWjqWCyFjfh+Fti1ZsteozfdalUPAwDaG7z6Sn\n19JiygpCqZR6DkBEXhSRvwQ+DcRq/94K/OV5HvsJYL+I7CUQv48CP7VsnW8Cv1qbv3wDsLCl5yeV\nYvi11+iZmiHb082ZvXtQRvALSmSzvOfLf0ukXMHwPRSyYp9JBUxu33Z+Vp2vSC4rgg7NE9SW21qP\n0lCBWM4PJJuqllhVD8PzcaJW03KNZqtjuD6Gr1jojbakfihqAuqE10WeGRnm2A3Xc/1Lz+HV6g2I\nQE+v2RS12q4+68yk2xLwoxRk5z0GhhSmKbiO4tTxCrVpUHxPMX3WpVpRTWJ6udJJVvgbgD8CHgPS\nwF8Dd53vgZVSroj8KvAAYAJfVEq9JCK/VHv/z4D7gHuAo0AR+Pfne9yNil2p8K6/+Xsyc3MYvo9n\nGJSTSe7/6Y9STiZ587fvJ5HLN0W0eiJ4hoFZE8x6EI8ngm9Z/ODtbzuvMYlSq85GryR3hqfwDMFw\nfQbGckTKbqOY+txAgnxv/LzGp9FsdAzPp/9MnljRCVylIhSTNsl8oHhS+89yfIZPLnBmX3doDMAP\n3vE2fvmqF3n6weDvru7Oa7NWq21+xAKFnIfnQbHgNUSyTl1M+wfUZd+7shOhdIASECewKE8opS5I\n62ul1H0EYrh02Z8tea2A//lCHGujc8u//BvdM9OYtY4gpudhZhd44wMP8ug972bgzJmWtA9TKUqx\nGHMD/WTm5nEiNk4kwuSOHbzy+pspZM5tHqWOMgTXNrBX6YYQVhBdiTSKEwyM5YjWG9fWPkLPVBE3\nalJO6qdVzdZlYHTx2g+uf0WiEIjmUjkUgniA1HyZbH+idUciDO4yGN629opXsZiQd1rFUvkwPuYs\nNsgMQQQqFR+rTdT75UInZ/0J4BvAbUA/8Gcicq9S6sMXdWSXGftefqUhknVMX7Hj+InQIgJ1lGHw\n4Ed/4uIMSoTZ4RQDo4vh7KFdQpYt9wXmB+JBmy3HI1J2Q92zmZmyFkrNlsWqhl/7y6cy6hhApNS+\nlus9xq/xyBcf5dDHn1/TOPoHbQr5Smi+JbCi10gpsC9zaxI6K2H3C0qp31dKOUqpcaXU+wnmDjUX\nkLbzjUoRKxYppNMt17NnGJw8z6jW1SgnbSb2dFHIRKmsUEigErPwTKESNZneliLfE7hVTVe19c+u\nVOVEo9nsmK6PCokRaFiXy1DUfi8XmGjMYNfeKPGEgUhQuq6ThkIiEI8bunoPHViUSqknQ5adbyCP\nZhmv7b+SPa+8grmkDJYvgmtZvPcvv9z4wXkimErh2DalVJLn3nTnRR+bE7WY2RZEsCbnSvSdXSyw\nroCFvhjZgWSbbc3QJ1YfKKXs1jc0mi1CNWo2UqY6IShAsMLDo1IUp6v4nsJYY/u6WDwQyzrHXy23\nFE5vGotAKm0ytE3/RkG32dowPHn3jzJ0epRouYztODi2jel5WI7TbPaL8NrevZy87hpOXbUf37q0\nX2GhJ04lbjNwJo9d9RAgmXcop92mOrB1lCHMDSZqeZa1Lu4EndyzOphHsxVRisxMicxcGVHtpytC\nN20TDb792HHe+MCDfOWzBXxHkUwbDG+LtG2ftRqZLpPZ6dZo2DqGAQPD9jnvf6uhhXKDUE4m+dr/\n9HH2HD5C79lJyvE4Bx471PIFmb6P5bmcuO7adRknSjWJJECk4jH02gJj+3pCI/byPXHciEV6toTl\n+pSSNtneeHiFH41mk9M7USCZXezVuiQFeUXB9AVytYo8S+k5O8lbvvEtLNelHq1QyPmcOV1l555z\n6/na22+Rz3lUK+G1Yj0PJs5U2blb95QFLZQbCt+yOH79dRy//jp6J85y4w8eD67YZcTW0FvyQhMt\nuViO1/qDV7SP2COY6ywntRtHs7UxXJ9UttIUsLM0qHSpddlYVltQSkXI9bYK5fVPPIGx7D6gVNA5\npFr1z6mmq2EIu/dFydcEN4xi3q+VyNNWpRbKDcp8f1/o/IZrmpy+Yt86jCjActqUzFNgV9zzrgSk\n0Wxm7KqHX4sjWIoAVdsAQ7CrHiioxEyyvXEMFQTDuRGDWNEhWat6VeiKUk7YZObmW1LDIPiZuY4i\nco6B4yJCOmOGFlWvsxa38VZGC+UGxbcsfvC2u7njoX/GdIMQc18EN2Lz8m23rnl/4vuk5+aoRmOU\nU+GBN51QjYZfMgpI5hySh2cpJ2xmRpJtO45oNFsVNxIewKMIWnTNbEtjuD5I0HlnKb0TeZILi9Zo\nIlel0BXl7I4d9E5OtaSJKQXRCxCRms6YLMy3PgAnkgaGtiYBLZQbmhPXX8f1jz9J19wcohSGUpiO\ny3WPP8kzP/rmjvez6/AR3vhPD2G6LobvM7ltG//6vh+jnAx3k66EE7MoJ2xi9fqvtM6/xIoO247P\n40QMPMsk1xtrbBMrOHimQaErqucoNVsHpUhmqyQXykEHHU81BeEpgWxfELwWdt3bZZfkQqWptJ0o\nSC5UOHLTzex/4UXE85prKmeMtmXr1sLAkE2x6OO6CuWDBIYvwzritYG+U21gdh8+QiqXa3K72K7L\ndU8+RSKX62gfPWcnefPB+4mVStiOg+l5DI6N8bZ//Oo5j2tqR5qFvjiuJXi1K2jpz1UIfuTRik+i\n4DAwmmPk+BwDozkys2W6p4tsPzZHtNA+uVqj2TSooMNO70SeeNHF8lRjXlIRpIlM7szgtPHGAMQL\nTmghgiBS3ObRe94FIk2ZVvmsT7HQvhhJp5iWsPfKKCPbI/T2mwyN2Oy7Koat+1k20GdiA7Pz6DFs\np1VMfNNg6PQoAN1TU1z9zLPsOvJqS3cBgGufeqolEMD0fbpmZuiemj63gYmQ7U8wdmUvC33hVulS\n4TQU2I7CqKWHGCr4b+BMjvblQjSazUG05BIrOM3WIIEVObErw/jebiqJla0zJYtBPWHLb/jBkxhK\nNf2ulIKzZy7Mw2Z9vnJgKEJXt6VdrsvQrtcNTCmZwBcJmcgXKrEYb/7WQXa9ehQA3zDwTZPv/ORH\nWOjva6yZWsiGBgL4pkEin2d+oP+8xuh0+NQZ9rMTpYiUPapxfRlqNi+xYntrMJmrUl1FJAEKmSjd\nU+HR7IVMlP6JidD3qlWFUkq3wrrIaItyA3PkwAH8ZbWmFOBaFolcnp1Hj2K5LpbrEqlWiZRK3P21\nrzdZaeO7d+NarUE1lusxMzR43mNc3q29PsaOUOFP0RrNZsIz299GE7lKR/vwLYPpkRS+gG/U/hOY\n3pbGtwyqsfB8Rq2PlwYtlBuYhf4+vveed+HYNtVIBMe2KWTSPPjRD3PV889jO82uVgNI5vJkZuca\nyw7ffIBqLIZnLH7Vjm3zw9ffQiWx9mCeBirodNA7kW8t+rx8VcLF0zclKHGn0Wxiiunw/AwhqN1q\ndFjTuJSJMrq/l+mRNNMjaUb391Kq7fulW1+Ps6wKV70npbYmLz7a57XBOXntNZy+8gr6xydwbZuZ\n4SEQaZl3rKNEMJY0lqvG43zrYz/HDd//ATuPHacSi/HD217PyWuuBoI+mHa1SjGV6vzxVCmGXssS\nKbuhFiXUxLG2Ozdi4lpBjlgjMUuEqe0Z/Uis2fT4loFvSFOd5qUoIfDyLLn226EMaYjjUl66/TYS\nuTzXvPg8luuhFKS7TPqHdGTqpUAL5SbAs23O7trZtOz4ddfSNTuHtSyAx43YzPc3zzuWkwmefNvd\nPPm2uxvL7EqFu+77DjuOn0CJUIlFOfSudzK2QjED8XwsxydSdlcUSQDfEKa2p/AsA7cW7Rcpu0SL\nDr5pUExH2ta11Gg2G9neGF3TpeaUkNq/O1+da1pW6I4yO5gMcjA6RYQn3v5W/s9PGzz2iRexLKhU\nFLkFj3jSwLaDI1fKPgtzLq4H6bRJKmNoi/MCoIVyk3L45tex55UjdM/MYDsOrmmiDIN//bH3dmSl\nvfWrX2fgzHgjidnKu/zoN77F/T/zU8wNDjSvrBTdk0XS82UQQXzVtlpH3ZKcGUlRWdZrshqzQgun\nazQbAqWIllxM16cSt/Hszmemsr1xYkWHaHGxSXNoABuQnK9guD7TO9bWWP0+/095+tctxICTxytB\nNZ2aGme6DZQP2YVFN28+6xGdFXbtiWqxPE/0XWuT4tk29//MT7Lz6DGGT71GMZXi2A3XU0qnQCn6\nJybYduIU1WiEk9dcTTm5WI0nPTtH//hES6UP0/O47okn+d5739O0PD1XJj1fDizIWqBQWGkrBRRT\nNvODSdyInnvUbB6sqsfga1nMWi03UZDtjjE/mOhsesAQJndmGDq1QKy8cm6jQZA3aTpex9Wr7vP/\nlGfvt1BKMXaqircsE2xhrnUeVCkoFxXjY1W27dDFzc8HLZSbGGUYvHbVfl67av+ShYq77vsOuw8f\nwfQ8fNPg9f/yb3z3/T/ecKsmczl8o/Vp2VCKzNx8y/LMbLnFzRomkr4pTG9P63lHzaZjYDSH5fpN\n13V6vkwlYVFKdygyIqFpImEoAcvxQ4XSdByGRsfwDYOzO7bzmd+e4tm7g1v17LSL46wt9zi34FPo\n9kim9MPruaKFcoux49hxdh95Fbs2d2m4wdPtj37z2/zdr/4ynm0zN9DfYk1CUHB9YueOluWGFx61\n1wjYkWBOcnKHDs7RbD6sihfaEcdQgTelY6EESukIdrW04vx9fd9OiNdl1+EjvOm+76BEMC2FXXGY\n/WqERMIkn/OYnmwtKtIJczOuFsrzQKeHbDGuePGl0Go+SoThWjWfSiLBKzcfwLEXI+Z8EVzb5uVb\nb2nZtt28omsbTO7IcHZnhrErenA6nH80PJ/kfJn0XAmrev4luDSa88HwVdsWGYa3RuutJ4ZnGvi1\n/YWmRQH5TGut4+RCljcfvB/bcYhUq5hFB9+DsVNVfE8xPXnuVXjcNVqhmma0RbnVWCn0fMnrJ+9+\nC/N9fVz/5NNEymXO7NnNs2++q2kus87cUJKhUwu1upOLluTscJLKGntMxvJVBsYW69R2UyTbG2dh\n4DxyOjWa86AaM2nuGhngS/scyXb4psH43i7Sc2XiBQd8he36DcH1jaA4erY33rLtvpd+iIT0u1JA\nPufhVM9d7BIpbROdD1ootxhHb7ie7cdPhFqVE0tTTEQ4euAmjh64adV9VmMWE3u6yMyUiJZcqlGT\nbH9izRGs4gfFo5e7pTIzpUbroUrCDm5O2oWruVSIMD2cpH8833gY9AVc2yTX0ypoq6FMg2x/guwa\nq0NGSyWMsMaQCjwfIlGhXAoXS5H2ZZNNE3r7db7l+aCFcosxtm8vJ669hn0/fBnxfXzDQIB/ef+P\n41urf93dU1Pc8i//xuCZcUrJBC+84XaOX38dTjTopXc+xArVsAd3BEgvVIIb1EKFrhmTid1dOs9S\nc8koZaJMRE1Sc2Us16eUtCl0xS7pNfi/fqzIg8+ACtHKZNIgGrUZPVVtEkQRGBi2iCdMsvMuSoFt\nC4W8h+tCMmXQ229jXYB2XJczWii3GiIcevc7OXzzAbadPIUTiXDy6qs6KleXmZnhnr/6G0zHwQCi\n5TJ3PPgQ8XyBl+64/fyH1uaJd3mnEaviMXxygVLSJt8dw9Vl7jQXE6XomimRni1j+ArHNiBh0zVV\nRBlCIRNtfw0qhfgqEFQFqYUyiVwV3xDyPXHKHU5NHHjfPCc/cZJEwqBY8BtiKAJdPSaRqEEkCjt2\nR5iacKhUFJYt9A1YdHUHt/HY8KKbWFuQFxYtlFuU2aEhZoeGAOgbn+D6x58AhJPXXt1YvpwD3/t+\n0Nx5yTLbcTlw6Pu88vqb8ezz+/GVknZHFdMNIFL1sKse6fky0yMpShmdB6a5OPRMFkjNLzZNjjg+\nvZOLnTwysyXmBhPkl7phfUXvZIHkQgVRQWCbAizXx6hVq4sXHLJ9cRb6V35IPfC+eT7yi18GEbbv\nipDLemTnvZpIWiSXzC8mkia7r9APjpcaLZRbnFu++69c+/QzQa9KEa59+hleeMNtPH/XnS3rDoyf\nCW3JpQRS2SwLfX0t760FZRrMDifpnSg0WZftnEL1BtD9EwVO63lLzUVAPNUkko3lS18r6JksUkwv\nRqr2j+eJ56uN7WzHbyrCUb92u2ZK5LpjLRGudb77h3Eeu/Fzi8cSIdNlkenSt+aNxLqEQolIr4g8\nKCKv1v7tabPeSRF5QUSeFZEnL/U4NzvdU1Nc+/QzWDUr0VAKy3W58QePk17SYaROrrs7dD+G51MM\niYY9FwpdMcb3dFFd4spa3chURMrnlj+m0ayE5Xrtn9SWES8EAXKG65NYIpJ1wnajJOhXGcYj9z7K\nYzd+Zg2j1awX6xUz/EngYaXUfuDh2t/tuFsp9Tql1K2XZmhbh52vHgvtMiIKdh471rL8+Tfegbss\n4Me1LE5eew1OLHbBxpWZK2NXvaaamO1acQG1vpXamtRceFzb7KyBqix2w7Ecfw19VAU/pF/lI/c+\nyqGPP9/pTjTrzHoJ5fuBL9Vefwn4wDqNY0vjm0aowCgILWF3dtdOHr3n3RSTSTzTxDVNjt5wHYfe\n+XbE90nkcoEL97wGpUguhLu66s1ql4/Vswzdt1JzUVCGBK7R1YRP1ebYASdihIrr8kWK4HouJxYf\nPr/7h3E+dfBzDZFUSrEw73L6ZIXTJytkF1xUuzwPzbqxXo7wIaXUeO31BBAeXRJcaw+JiAd8Xin1\nhXY7FJFPAJ8AiGYG2q12WXHq6qt53fcOwbLcrHrx87F9+8j1NLtbT11zNaeuvopoqYQTieBbFlc9\n8yy3/OujjbJ3h193E0/96I/QMzVNIp9ndmiQYrqz1BGjTc++OrnuWNClpIYSYXJHsO9o0SFWcLAr\ngViX0lEK6cja2hVpLh+UIj1bIj1fwfAVxVSE+YFEy3zh/GACzxK6ZssYnsIzBdNTTVbj9PY0qmYZ\nKtNoXKf1B756EQ6lCMwPFTyozgzHuOLFl/jQNaNY//Aq3/v2YtsrpRRnTlcp5BejXEtFn3zWZ9vO\n5kIHvq/w/SAnUncCufTIxXp6EZGHgOGQt34P+JJSqnvJunNKqZZ5ShHZrpQaE5FB4EHgf1FK/etq\nx06P7Fev/9hnz2P0W4f9zz3PGx58GMNvLvjsi5Dv7uJr/+HjjSCZnslJrnnqGZK5HGN79/DqTTex\n/eRJ7jp4f6N2LATuWMe2sVw3aBTteRy98QZ+8I63rR5woxQ7js5hLisNpoBSymZmJMXwyXlMRzVc\nsr4leIZgV/2mYAlfwImanN21hpxLX2H4Ct8UHRy0xekfyzUF3ATeCeHM3u6G6LXDdDzieQclQf3W\nFvepUqTmymTmyphe0JZrbjCBa5tESw6+IURLeX78H79MZKGMUiAGWJawe28U0xKKBa8lLxKCy3Ln\nnijxhIHvK86ecchlg4dU04ShbRFSae1hWSt3vXjwqXOdwrtoFqVS6u3t3hORsyIyopQaF5ERYLLN\nPsZq/06KyNeA24FVhVKzyKsHbmLHq0fZefxE03JDKeL5Ar1nJ5kdHmL3K4d5033fwfA8DKUYGh3j\n2qefwTPNJpEEsFwX03WbhPeKl15iZmhw9Uo/IswOxOmfKDa2r98n5vvi9JwtYDmqOXrQVZi09sA0\nFNgVj+R8mXxISbAmlKLnbIHUQiX40xBmBxMUuy7c3Ktm42BVvSaRhOBaMjxFaqFCboXrxXB9Erkq\nhq8oJ2z8sIcwEfK98dDrrlzrw3r31/4JuyaSEBQScKqKqUmH4W2RpnzJpSgFxYJHPGEwPtpscbou\nnDldbQip5tKwXmf6m8DHaq8/Bnxj+QoikhSRdP018E7gxUs2wi1ExHHaROQJ0XIZ8Tze+MCDQXRs\n7RdpuS6JfIHUQjZ0n8v3Zzsu1z31TEfjsZxmt5YQuK2SuSqJXLVl3+2a4EIglslcddVj9tZE0lDB\nNqan6JsoBNWCNFuOdlHShgpc+O2IFapsPzZH91SRrukSg6ez9J/Jt68P14aH/neL4dHR0LnMRetQ\nQp0aIsF7rqOaRLKOUjA7fe4F0jVrZ72E8g+Bd4jIq8Dba38jIttE5L7aOkPAoyLyHPA4cFAp9Z11\nGe0m59RV+1uiWQEM32dqZITumRkk5EZgeh4qJOinHXYlsNbE8+g/c4aes5OhN5jMXGt/S0PRNDe5\nFkKf+JcgXngAkaGCPoQ9E4Wg1qxmy+Da4detgvZNxZViYCzfeJgSgn/j+eABrhP+5Lcm+NTBz/H9\nW1ef+kl3tRmHBO85jmo7O3A+BdI1a2ddgnmUUjPA20KWnwHuqb0+Dhy4xEPbkhy98UaufvZ5UgsL\nWK6LD/iWxRNv+RHcaIRqNBpejBnIdneTmZvDWuJqXZpYXcczDE5feQU7jh7jTQfvR5RClKIcj/PP\n936Q+YHFCtHtAnrEh0LaJplrtoDra4fdM3wJWhuthNmmnyYsCnQiX+lo7kqzOajGLNyIiV1p7jOp\nll4vSoEIhutjVz1MJ7zlm6EguVChuEJ1qHp1nfLB2jaGkEgG5eiWIgKZmkBalrBjd4Sx09XGRS4C\n23ZGME0hEm1vyMa02/WSoss/XAa4EZtv/9xPc+XzL7Lr1aOUkwleueV1TG3fDkChq4v5/j56z042\nVeZxbJsX7ryDXFcXt/zbo/ROnKXQleH0lVdww/cfx6zNZ7qWRTUW5dgN1/Huv/l7rCVzmpbj8K6/\n/Xv+4Vd+Ed8MbhCVmEUsxDVWjZrMDaWIlhcwXR9RtUhCQ2o1NRsBhQ2yvXHKqZVbIbm2EVqMvU5j\n7mq+TK5Pt/vaEohwdmeG/vE8sYIDElwHM8MprKrP4OkcdtVrPPT5RvCgdq7hXf+3/SKHlvytlCKe\nEIqFpiERiQr9g4ulIBNJkyuvjlEqBYFqsfhiVKxpCj19FnMzbpNgGgb09etb96VEn+3LBM+2Ofz6\nmzn8+ptD33/kg+/nHX//jySzuUYk68u3vI5TV+0HER768L1N60+NDHPVcy9gVyqM79nNkQM3cf3j\nT7b00wtEyGP78ROc3n8lUOtv+Vp4f0vfMjizr5tEropd8XCiJsVUBFGB+zRSdvENwYlZlJMRoVjy\nZgAAIABJREFUvBAXm+l4pOYrWI5PKRW07ZrvT9A9VWzbed5QEC+65EKq9Innk8xVMR2fStwKCl3r\niNlLjlX1SGSDVI9SKkIlbq34PfiWweTODOIFD12+ZRApuwydWmhcB/WtzdplG9poWaDQFW5N/slv\nTVC++6scOri4zKn6jJ9xKBeXpWVZsGtPBMNsHrOIkEiEu2H7By3sCMxOe3ieIpEwGBiysSPaoryU\naKHUAFBMp/nGx3+evomzxAsFpkdGKCdbrat4Ps/dX/sGPVPTQQsvpThRq9wTLxQwQ1y4ohTRUolt\nx09wzTPPYlcqHL/2euYGd2FXVdDfsi+OE61djiItbi6FrB7ZymJj6LoIJ3IVMjMmZ3d34VkG3ZNF\nLNdvsRwUBF0jlmGXXYZeyza5iz1TGN/Tjd9mHkxz4UkslOlbUiM4PVemmIowsy216kOLMo2GAHZN\nF9t2sYHmB7e6R6OYjrQ0cD7w3lne+7N/zdif+9gRIZU28T0YO11p2zPScyGf98l0dX7diAjdPTbd\nPbobyHqihVKziAgzI2Gpr4u87R+/Ss/UdJOL9o6H/plsXx9n9u1l7yuHW5pGi+dx9dPP0Dc51RCo\n/vEJ5vv7uP+nf7KjPpkdoRT94/kmq9FQBF1I5kpk+xIU0xGGTy4QCZ27ahXigTM5DL85NcX0FCMn\n5hm7skcXO7gEiOfTN1FoTvVQkMhXKRYcSqu43usYrk+sEB4Bvpz5/gQClJN2S4Pyr5c+y8F3epxx\nFMoP8iMNw8E0hOoKQTZB2odPpquj4Wo2EPqRWNMx3dPTZGbnWjqMGK7LtU8+xWv7r2RuoB9nifA5\nloUyjCaRBLA8j67ZOfa8cvi8x2U6Hn1jOXYemcXwWm9UhoJktha1KMLkzgzlhIWSWid7U5janm7p\nOWg6HpbTan0KYPqqo7QUzflheD7JWu5ry3sKktnae0phVT3sshseAaMUwzV3/2p4lkGuN0a2L94k\nko/c+yifOvg5/vmvFNWqajRYVn5gLa4kkhAYvratH6w2I9qi1HRMrFAMTRcxgGQujzIMHvjoT7D/\n+RfY98OXcS2bUjLBnsNHQp/ibcdh59FjHL/+OnqmpoiUK8wMD+NGbMQLomZXq6Ajns/IyQUMr7Ug\nwVKWppD4lsHkri4M18fwVS3Yp83WKwQARYtO27mrFVnalVfTjFJEiy7xXIV4wQnaV0l40+96IX2r\n6jEwmsVy/FrxcmF6JNUU5BUrOpghDz31/Sx1uc4MJ5u+m6AV1mca85C5rNdZIfXlCI0my5rNhf7W\nNB0zMzyE4beG0Lumyei+vUCQdnL4lps5fEsQNPTOv/m70HlLAJ+gHN4H/r8/J5ELgog8w+Txt70P\n34rX9m0wO5Jq2yk+tVBB/FVEUiDf3ZpC4lsGK2VPeraJZxlBBG7Y2Nc4R2m4Pr0TeRL5wDVdStnM\nDqVCA5I2Nb4iUgnKGzpRs/MHAqXoPxP0eawLY72vY+jqAvlMlKHXFjDd2jWggv8NjOUY39vdyJm0\nqu2/ac8MvmsnYpLtjePUrMh6oM5jB9tu2jGWDSM7IljaotyUaKHUdIwTjfLsnXdy4NAhbCdI73BN\nk3IiSDcJo5DJ4IuENoT2TZPh0VESuXzj/afveg8QadwcbddnYDTL+J7uFtcoQLTkhkayNtp2CRQy\nUQqZzuaxljO5I83IyYXQ3NE1WZNKMXxqocmVG887DJcXGNvXvWXmOhPZCn0ThcBqVrXuHD0xcr2x\n0HZTS4nnnZayc8upW30Q5EPWU3ta3OMKkvNlFgaDPqrtus/4AgsDSfLdMUzH4f8afIEX/vMjiMDE\nX1l0dZstRcjTGZOF+Var0rLA85Z4fgVMA7bvjhCLGS370WwetqRQ7leTPHLvo9z9lTet91C2HC/d\ncTvzgwNc98STxIolXrvyCl6+9Za2/Spffv0t7Dl8pKk9V13Enr/jDdz4+BMNkSykush39aHM5pua\nKMjMlZgdTrXs34ma+Hlabq5KINsTo9Ada1+JpQOcmMX4ni4GTi9g1oxp34DpHRk8u/P9xvNOi2Ua\n3OSDJsArJbNfbAzPx654uJaBt+xciR80zfZMI/RBBYLI4J7JItGS04g2rqN8RddMicxsickdGSoh\nngHT9UnNlholBlfCM4Vsf5xSMoIbMUm2qeYkgLWk2lIlblGNWkQqiw9WCvBN4Suf7cL53U/zzf/h\n8XRFNYRuctyhmG/t5DEwZFMq+jj1YB4Bw4Rde6OUy4q5GbeRymGYkJ33cJOQSmux3KxsSaEsLgiH\nPv48nyLo+fa697j8zgd+DoDnvtm90qaaDhjbt5exmqt1NWaHh3j0nnfzxgcexPB9DN8n293Nw/d+\ngK65+aauH+VEClEh6SWAVQmvmpLvjpGZLQVFVmrLFOBETBYGEhdkHjCZrQR5drVdnYuj1K56oS5E\nqRV2XxeUonuqSGaujC+CKEUlbjO1PY0yheR8md6zheAcKoUbMZnckW56QLCqHsOnFloEsk6juL2C\ngbEco/t7mr4Tq+Ixcmoh6OpCeNWnxnCBUirSiE6OFh3Ss+XQ8+rLYnHyYADC5K4MXVNFUtkKouC6\n2z1u+9tv8dStZXILBtVqc2K/UpDPeVTKPtHY4rdumsKeK6IUcj7lsk8kIqQyJoYh2JHA4qx3Bqnv\nZ2HOIxoVdu6NYmwR78HlxJYUyuU8e7/FR+7/MgB/8B6X+Idv4Zm9V/Ibf7xyKoTmwnDqmqt5bf+V\ndM/MUolFKWYyADixGIa3KBKphdnQYCFfoJIIn6P0LIOJXV30jeeJ1ASnmLKZHVk9v64TYgWH9PLa\ntLUasctv+ivhRExUrfrLUpS0dwtebJILFdJzgdCYNYWIlhz6xnNk++L0nq2lZNTesyseg6ezjO/t\nbnzurplSW5FcjqCIltym77L3bKFpjnklkfQNYaG/JpIFh8HRbKgF6ktQz7WwLPdRGcLv/7ccN584\nGjROfnXxvULBI+QZrSGWS4USgvzGVMYklWn97pRSnBmttohupaKYn3Xp7dc5kZuNy0Iol/Ls/Rbc\n/zzwPJ+qLYs98iEtmhcZZZrMDTY31K7GYjx7150ceOwQluMSrZQYGDvO5PZ9KDO4NBWL81ztcGIW\nE3u7EV8F00YX8Ik9tRBusRi+IjNdxDeDPpnVmEUxE23bF7OUsvFMA1nSF1QRCH0xHSFSdknU0iCK\nmSjVeOtPM1p0yMyUsFyfUsIm1xfHs849ECgzG16cPlEIgo2Wf24BLCdw09YDXiIltyORbEes2Kaz\nDYvWpW8KpZTNfF+iYc32TBbazk0v9MWDNlpLvoultVgPtW6GbUvdcG5hetKlWlUMb7M7cp1WK4qQ\nmDeUCtywWig3H5edUIZRvvurDdG884Xf5OnpE1o4LxEvveF2ZoaHuPapZ4iWSuS6beYGkySzTlCq\nLGmHdqWvEy2VsKoOhUy68+bNa2GFiNrumWB+TABfKnRPlxjfnSFWchfL76UjgfUlwsTuLnomC41W\nYsVUhNmhJF3TwRxeo+rMfJlcT4z5WiAKQHKhTO94odFyzK54pObLjO/rXtNc6VKMdsXiVZBDGvq5\nJSgyXy8p4USMwK3cwfGUSFB2bgm+IZghRfIVQUnDYjoSWqjerrZ3V2drIvknvzUBBL9vVolc7eq2\nmJkKb80FkFvwiMWEnr5mkas3vl8qoCtqqfa6bkq0UC7jsRs/A8CnCOY2Ae4xfm0dR7T1mdi9m4nd\nu5uWLQy0WblGtFjkR751kKHRseAGHIvx2HvexZm9e9puEymVuObpZ9l+4gSFdJof3nYr09tGVjxO\nMRMlXnBarJfl9ztDgbg+24/PB+8rUAZ0TxlM7O4KUlEsg5ltaWaWbGdVPDKzpZaqM+m5MoWuaFDW\nT6mgFdiy4xsKRo7PYxCU35sfSFJKrxLd6wfF35O5apBzGPJZgjEofGkNkkIFRe3rZPsTxAvtE/mX\nRh9PbU+3qEi+O9ri2q7XVi2EpPTU8SwDw2kVet8Qbnr/PB/9pb9pdPJYCd8PWllZ9mInj3bW4Pys\n1xDKStnn7JkqpVKwfabbZHDYrs1TCpYtLa2wRKC7V99yNyOiwnwNm5xr4t3qi1de+IhXHRS0QVCK\nH/vSX9E9Pd2Uo+lYFt/+2M+S7ett2SRaLPLjf/6XgQXqeY1WY4+96x2cuP66FY81MJYLSp91MBe3\nXHgUQa3Q6e3p0PUzMyW6p4qhtWfnBxJk++JYFY9tJ+ZXPbYvMDOSah9BW0tRsSteU+Rn2H59oZFD\nWl/XF5jvj7d0WIkVqgyezoXvx4C5gQTFTDQ8PcRXDJwJzm+9sEAlbjO1o72H4MD75qm86FP6JwVL\njEDLd7ll7iVunn8l/PMvoVzymThTpVIOvtR0xmRoxMbzFCePVkJdsJYFV1wdx3EUJ4+WWZoeLALx\nhMHOPcG5r5R9Tp8M9lPfVyptMrKjM/et5sJz14sHn1JK3Xou2+rHmzWwNCjoI2g37aXCdBws16US\ni4EIvZOTZObmWgoZmJ7HtU8/zQ/e8faWfVz/+BPESiXMWvCQQVB6746HHubUNVc3WoC1IEF5u8xs\nie6p0qpjDSt3l8i3L3WnhNDKMw1LjGCOrhMMBd1TxbZCmcxWm0QybLyL4xLG93SRniuTyFfxzKCs\nW1MkaY1yMsLkjjQDY7kWy3BmKEmxa4V+oYYwtSMTlJ+reDgRs5GGcuB983z2zmaL/7EbP9Nwo76Y\nuYIne2/EEQsTnwNzr/C6DkTScRSvnawsBu+ooNqOU/XZtTeKaYIb4oVNpoNxzc86LPcWKwWlok+l\n4hONGkRjBvuuilHI+7iuIp4wiMW2WGGJywgtlOfBUjctBML5lk+ufjPVdIZVqfLGB/6J3a++Ciro\ncPLYu9+JXa2iQp7KDaVIz82H7mvnseMNkWxCQdf0DHNDg+0HIkK2N05mphw6n7ZkV20DU9pRTEfo\nniqGHBOKtSIJbecSQ7BC3JF12iXzLx933fWpTINsf4Js/+o9OsupCJM7MvRMFYKcTNtkfiCxqiu4\nHmQTykF4bOk4l80H3pA9xnXZ41QNm4jvYKx4pheZn3VaI1wVVMqKSkUxvD3C2GvVpkqDpkmjj2S5\nrEK/VJEgkCdae04xDCEdEhWr2XxoobyAPHbjZ3RQ0AXkrV/7OkOjo40WV+mFBd76la/x8L0fbCpg\nUMc1TSZ27QrdVzmRgJnZluWG51GJr2Dx1BFhakeawdFsw9xrRK/K4r+GH+56bYdnm8wOJ+mdKDQt\nnx0KAnlGTsxj1QJXVsoxbOxvhShYzzLau1pZfMOJBiK3VipJm4nk4pREPZimzhX/9e94+C8V2XkP\npSCRNBj6qg3RlS0tz1NMjjtkazVWY3FheFukEaUajfprcmdWym0EVcCpKNJdJnuuiDI/G0S7JpIG\nXT0WZs2yj8UMigW/RSyDsWi36lZEC+VFYqm1+cYv3gSgKwWtgfTsLEOnR1tK35muy/4XXgy92Zue\nx/Frrwnd3w9vfT19ExON0nsAniHMDA818jpXo5KwGb2yl3iuiuErygkLy/Wxqj5O1MSxDYZfywYV\neGrBPJ5pMLckejWMQleMUjJCvOaiLaUi+JbByIl57OXtwKhF2db+XW4Jzve379lZD5wJw7WEXF8C\nJ2qu2hB5KY/c+2jo8kMff74pmEYpxX0nPCrlxco3xYLPqRMV9l0Zw7TCj6eUYvRUpcmKK5cUJ48F\nqTRiBFkgIzsiJFOdWW/xRCB0LfOQCqKxYByRqMHgSPgDTk+vxfys2+R+FQmEP7KK6Gs2J1ooLwGH\nPh5UCKpXCgL4u8//lA4IaoP4Pnfe/wASElFhAEOnT+MbRsscpWtZbDt1iqM33diy3en9V/LSbbdx\n06HvL9mvcPjAgTWNTRlCcUmNVzcKLNHBM/u6ieer2FUfJ2JSStkrdCYJIlAzs2VMT1GOW8wPBqkw\ndsXFapN24VgS5Akq6JotYXhBl5X5/sSKkaJO1Aq1KAWwXUW+O9p2rPUOGss51GHB8EpZNYlkHeXD\n/LxLX5vcwvp27byqygcPGHutyt4ro9iR1YWqq8didsZFLfHEi0Ai1ZnQWbawa180KHFX8DEM6Oo2\n6R/S+ZFbFS2U68RHfvHLfKT2Wrtpm3ndv32PwbEzbef7fMPACnG9mp5HrBgy31eje2YGXwSrdrc2\nfZ87/+lBcr09q6aJdIwIpXSUTmaqu6eKTakR8YJD7NQC43u6g76aQotACOBZZiCUQK43tmhmdmAF\nKkNoiUQBLEvxmd88y+sH94YK4vl20KhUwudOlYJKqf3cYrXqty0EsHw/Y6erJFMGqbRJLN6+rqpl\nCbv3RZmacCgUfAwJxLN/oPPbYTS6GOGq2fpoodwALM/dTHz6ty/boCDxfa59+pkV66mO7tvH/hdf\nwnacpuWeZXF2x47QbWKFAjuPHmuxQg3X5YbvP853P/T+lnHsOvIqVz37HKJ8XrnlFl67av8F6yEp\nnt+SPygAfpAyMjeYDLWifAmq/CxuJEF6w9w8r3v0ewydHqWcSPDCHbdz6pqrgSBg5g++/hcAfL3r\nAP88fw2OWvzpm77HlbMnqbztyabgmQtJO0tNBKLx9uc0GjVWFck6gfXpMTfjkc6YDG9vTcWoVHzm\npl0qFZ9YzGDvFZ1ZoZrLGy2UG4ygxN5iUNAbv3gT/9G54bJx05quixkWm1/DsW2e+ZE30TU3z+Do\nKHZtXce2mdi1k6nt20K3S2ZzeKbZEvlqAJm5ueaVleLur3yN7SdPNeZIh0+PMTUyzP0/81MXRCzt\nqhdE7i5TASFoHaZMYX4gEeRYqnr1nyAgp17O78D7gghfeyLH1T//dcxiFfEhmc9z97e+Td/3v0Pf\ngA0H4dnaT30nL7NtqJvRxDCm8vHEYKgyw13Tz573Z1qJWEyIxqTF/SoGdHWZlIpBgE8sbjQVDY/G\nDOIJg1IxZE6xDaqW7pHpNpvmLUtFj9MnF6NZyyWP7ILHrr3RllquGs1StFBucA59/Hk+wvN8hEA0\n5bZ38OuPjW9Z4XRtm1IqRTKXa3nPMwwe+ol/hxuN8vC9H+DKF17kyhdeAoGjN97A0RtvaCti2d4e\njJAG0r5Ii7iOnHqtSSQhEKqB8QmuffIpXr6tNWdZfJ9EPk8lFsONrN770rXN0DlYRVAWDiDXG8eJ\nWrxruEp23uPm2+O87T0pEi8/HMx719yhE2eqLOSbHwCUgpkpl54+CxGYnXZr7Z/g2mMPc/PuXoqZ\nHrqcHL1OdtXxtozfUUxPORRyPoYJvX0WmZDejXVEhJ27o0xOOGQXFqNeu3pMTh5rTvAf3h5pSqvY\nvivC9KTDwrzXaGvVphd40+fPzntNQnn2jNMitr4PkxOOdqNqVkRX5tnkbMWgoF2Hj/Dmg/c35iF9\ngibPD3zk3zHdxrXaCXf/41fZefxEU1Fy3zD4+n/49+S7F8/h7Q88xDXPPRc6R5pPp/nKL3+iadkV\nL7zIbY98F9P1EKU4cc3VHHrXO/Ct8OfQSLlMMpslWjSxK81l4izf5X1j/8xAdS502zBOvFqmWm39\nHRsG7NwTJbvgMj/rNVtyArv2Rc8pCd5zFSeOlvGWBcN09ZgMtYkUDcP3FccOl0NFb9/+9i7Regur\n1W5dXd0mw9uD8ShfceTlNr0rBa66rn20sGZroCvzXMZ85Be/zB+8x+WV//QTAFsiIOi1q6/i4ViM\nA987RGZujtmhQZ55013MDg+d8z5jhSLbTp5qaZysRIiWyuSXPGv4KxQZt9zmedFtJ05yx4MPNwUX\n7Tl8BFGKR3/snqZcQuX6jP7OE8z9xdFGgEp+2zaeft1b8UVIOCXuOvskA07nIglgRyRUKJUKxHK5\nSNbfm5l02L5r7ZbU3KzbIm71not9AwqrTarHcvI5r22JgInxKjt3h0fwxhNGqBt3KfX6q4sLaBsU\nFNLZTaNpQgvlFiCY1/wqsJi3udn7bU7s3sXE7vDiAefCjuPHUabZ4rMzPI89r7zCzMjiuXr55pu5\n7smnW/ahgNNXXNG07MZDP2iJwLVcl/1HX+Fd3zxB+eCiaEyddZibcZvrf545w5vP/BWuHcFyqjjA\ndL/VqALTCb39FsVCtcViTKZqgTAh0bOwQuL9KoTmINaOWSn7WB3mM/oeoT0gAYp5heuGi26YG7d+\n/Do9vSaJpNm0TVe3Gbhvl50nXahcsxrrcoWIyIeB/wxcC9yulHqyzXrvBj4LmMD/q5T6w0s2yE1M\nkLf5vC6tt4S2kiDL0/ah0NPNS7fewvU1sazrjBON8Bt3HebHDh5vrHvsbJmw0CPlKjxXNaq5KBU0\n7Q2z7ACsarUxztlpl0TSaLrRr0QiaTK0zWZyYrE0WyodRH36vmorRvXk+rUSiQilkCwcpejYmoRg\njrIdIoHF2d0TfosyTGF4e4Th7cHfnqvI5YI5zGSbfMiBYRvXVRTyiykn6S6TvjWkhWguT9brCnkR\n+BDw+XYriIgJ/HfgHcAo8ISIfFMp9cNLM8Stw/LSesBlJ5yjV+zjjgcfalnumya/8z8O0H9L8xyV\nesLm4Y9EmDrr4HmQShv09hkcebRZvOJxg5zTWkNWCBLTm47VYcnWuhtzJaEsFjzmZz08T5FKByXW\nMl0mrqMwTEEpGB+tks+FH1SEICL2HOjps5osuTrRmKwpejQSNYhGoVIJf38tMm5a0lZU6xiGsH1X\nFMfxcaqKSMRo+Y40mjDWRSiVUi8DbSPkatwOHFVKHa+t+7fA+wEtlOfB5dpvs5JI8NY//3G+9/Nf\nBwKXnxjQ1wNHPvZljoRsk0ia7N63slXXP2iRz3tNVpsI9A9YTWkOIkIkKlQrnbk7/RUiVWanHaYn\nF63TUtFnYc5j174gAEYpxYlXKzhO+D4iUWFoxCYWX1nUHMdnftbDcRSJhJDpDj5TNGawbWeEiTOL\nvRvjSYNt25sDeZRS+H4wB9jutz60PcLpE+GBOfVuHRca2zawdREdzRrYyD6H7cDpJX+PAm9Yp7Fs\nSZ69P/j6P8XnGsv+7vM/BWyefpv1XMKlfOyqctDVfhlnD8KefTFyWQ+lFKm0ed61OSNRg937okyf\ndSiVfCxL6BuwQ7tGDI3YHUVrikAmE/7T9DzVJJIQWKDVqmJh3qWn16aQ83G91oOIAUPDNl2rWF7Q\nGlmaz8LstMfufVFMS0ilTa64KobjKExDWmq1ZuddJs86eG5w3N4+i74Bq0Uw43GT3n6L2elmB/bQ\nNntNblyN5mJy0YRSRB4CwqJJfk8p9Y2LcLxPAJ8AGLJ1qPe5Um95tDRvc73dtN/9wzjqiQdbli/N\nJVxKeBJAgGULPX0X9rKPRIRE0qBcVlQrirkZF9uWFostkTTZtTfKzJRDpaKIxQwiUWF22m0KSEkk\nDVKZcAEvFcNLuikF+axPT29Q9i1sXlL5wXuroZRifMxpEWPHVcxMOwwOR2pjFSKRVjHL5zwmluQs\nKp/GZxwIqYfaP2iT6TbJ54LPlk6b2iWq2VBcNKFUSrV2z10bY8DOJX/vqC1rd7wvAF+AII/yPI+t\nIRCiN34RHrn30nU+uc//04alW+d864xebKYn3UY0KwRi9tqJCrv3tVZ8icWD+cT5WRfHUcTiwq69\nEbILHr4fBOEkU+3rlJpm+8CkulUXiRqI0RpRKkZQEm41XCcIRGpBQS7rM7jk8df3Fb4HprXoXp2e\nbE3sVwrmZlz6ByzEaP1skUgwB6zRbEQ2suv1CWC/iOwlEMiPAj+1vkPa+sQe+VDj9W/88TB85dIe\n/x7j1zjw+RWa+W4wfE81iWSdoDKOw7adzXmKS1NEIEiniESCbhRGiIAsJxY3ME3BXVbYXCRIiYAg\n6tO2W+dDTRNSHTQSDhOyOvW3lFJMn3WYm/Uax+8fsOjpt9vOjQJ4HqzQMlOj2ZCsV3rIB4H/BxgA\nDorIs0qpd4nINoI0kHuUUq6I/CrwAEF6yBeVUi+tx3i3Ok3Vff54fccCwfzoc+/9Ff7ktyZC5xo3\nEo6j2iayl5d1xXCdVlGtzy/mFryO5g6DHMIIo6equJ4KUlcUDAxbxBNmY51de4M8w9xCIGSptMng\niN2RGFtWUJd1+fiDnMPgGDNTLnNLChkoBVOTLoYpRKNBbdbWsQeWp0az2VivqNevAV8LWX4GuGfJ\n3/cB913CoW1p6nOOsCw95JvrNKAtgGVL2+CcyLJu96XSCvOLuc6EMtivwd79Ucolhe+rhpW5FNMU\nRrZHGNne8UdpYtvOKKdPVBaDglQgtt29FkqtYEVPu4xsj3D6ZHP9VpEgQniVSHeNZkOin++2OLFH\nPsSXjsQCi/ErwFcur/zJi41pCpluk2xIxZfleYqdzC92iogQT1w80bFtYe/+KKWiX5tLNRrzm76n\n2uaEuo4injDYsSfC1EQQtBREAlt0devbjWZzoq/cLUI9JxLgdz7wcxvKlbrVGRqxMQ0arkjbDvIU\n44nmybh4wsA0wF0eZCPQswHLqIlIaNEDMcCyIKwbWr3aTyKxeg6qRrNZ2Hi/Tk3H3PnCb/L09InW\nmq5bxJV684mjHFrvQXSAiDAwHKF/SNUKka/QampPNJhfdGtzmwRCu5n6IQaf12ZiWQqJSHj6h0az\n2dFCucmIPfKhRWH8ZInwVNXNz3f/MM5jNz6/3sNYEyKyak/n+vxipaLwPdXSqHizkOmyMA1hesqh\nWlVEowYDQ4sBRRrNVkIL5QbljV+8CQjJX9Su1E2PiBA7x4LkG4lk2rxoZeY0mo2EFsoNRJMr9RLn\nL24kDrxvnsdu/NzqK2o0Gs0lQAvlOtKUvwhb2pW6Fv7g63/Bs/rS1Gg0GwR9N7pE1HMYf/2x8UVx\n3CJBNxqNRrOV0UJ5kajnLwLLchg3R1eO9eKRex/l0Mf1ZanRaDYO+o50AajnML7yn35iMSJVB92s\nmQPvmw86gmg0Gs0GQgvlOVAPugH40pEYv6uT+zUajWbLooWyQ+584TcX66PqoJsLzoHV53i3AAAG\na0lEQVT3bZ6OIRqN5vJCC+Uy6vmLAM/svXJZcr/mYvHZO0d4bL0HodFoNCFooSQQx//o3LAYdKPR\naDQaTY3LTijrgTeJT//2oitVi+O6EpSr+8x6D0Oj0WhC2fJC+br3uCQ+/dvN+YugXakbCPXEg+s9\nBI1Go2nLlhTK1J44v/veX1lc8Emdv6jRaDSac2Pz9PZZA4fnU+s9BM0aKP3D0+s9BI1Go2nLlrQo\nNZuDekqIruuq0Wg2MlvSotRoNBqN5kKhhVKzbnzsqvJ6D0Gj0WhWRQulZl34k9+aoHz3V9d7GBqN\nRrMqWig1Go1Go1kBLZSadeHmE0fXewgajUbTEVooNZecoOekbqel0Wg2B1ooNRqNRqNZAS2UGo1G\no9GsgBZKjUaj0WhWYF2EUkQ+LCIviYgvIreusN5JEXlBRJ4VkScv5Rg1Go1Go4H1K2H3IvAh4PMd\nrHu3Umr6Io9Ho9FoNJpQ1kUolVIvA4jIehxeo9FoNJqOEaXU+h1c5LvAbymlQt2qInICWAA84PNK\nqS+ssK9PAJ+o/XkDgdV6OdMPXO6WuD4H+hyAPgegzwHA1Uqp9LlseNEsShF5CBgOeev3lFLf6HA3\nb1JKjYnIIPCgiLyilPrXsBVrIvqF2rGfVEq1nfu8HNDnQJ8D0OcA9DkAfQ4gOAfnuu1FE0ql1Nsv\nwD7Gav9OisjXgNuBUKHUaDQajeZisGHTQ0QkKSLp+mvgnWh3qkaj0WguMeuVHvJBERkF3ggcFJEH\nasu3ich9tdWGgEdF5DngceCgUuo7HR6i7VzmZYQ+B/ocgD4HoM8B6HMA53EO1jWYR6PRaDSajc6G\ndb1qNBqNRrMR0EKp0Wg0Gs0KbHqh1OXwAtZwHt4tIodF5KiIfPJSjvFiIyK9IvKgiLxa+7enzXpb\n6lpY7TuVgD+tvf+8iNyyHuO82HRwHt4iIgu17/1ZEfn99RjnxUJEvigikyISGvR4OVwHHZyDc7sG\nlFKb+j/gWuBq4LvArSusdxLoX+/xrud5AEzgGLAPiADPAdet99gv4Dn4NPDJ2utPAn+01a+FTr5T\n4B7gfkCAO4AfrPe41+k8vAX49nqP9SKegx8BbgFebPP+5XAdrHYOzuka2PQWpVLqZaXU4fUex3rT\n4Xm4HTiqlDqulKoCfwu8/+KP7pLxfuBLtddfAj6wjmO5VHTynb4f+AsV8H2gW0RGLvVALzJb/dpe\nFRUUY5ldYZUtfx10cA7OiU0vlGtAAQ+JyFO1cneXI9uB00v+Hq0t2yoMKaXGa68nCFKMwthK10In\n3+lW/96h8894Z83teL+IXH9phrZhuByug05Y8zWwXt1D1sSlLoe3UblA52FTs9I5WPqHUkqJSLvc\np01/LWjOiaeBXUqpvIjcA3wd2L/OY9JcWs7pGtgUQql0OTzggpyHMWDnkr931JZtGlY6ByJyVkRG\nlFLjNZfSZJt9bPprYQmdfKeb/nvvgFU/o1Iqu+T1fSLyORHpV5dPG7/L4TpYkXO9Bi4L16suh9fg\nCWC/iOwVkQjwUeCb6zymC8k3gY/VXn8MaLGyt+C10Ml3+k3g52pRj3cAC0tc1FuFVc+DiAyLBL39\nROR2gvvfzCUf6fpxOVwHK3LO18B6RyldgCinDxL42ivAWeCB2vJtwH211/sIouCeA14icFWu+9gv\n9Xmo/X0PcIQgQnBLnQegD3gYeBV4COi9HK6FsO8U+CXgl2qvBfjvtfdfYIXo8M38Xwfn4Vdr3/lz\nwPeBO9d7zBf48/8NMA44tXvBL1xu10EH5+CcrgFdwk6j0Wg0mhW4LFyvGo1Go9GcK1ooNRqNRqNZ\nAS2UGo1Go9GsgBZKjUaj0WhWQAulRqPRaDQroIVSo9nCiMh3RGReRL693mPRaDYrWig1mq3NfwN+\ndr0HodFsZrRQajRbABG5rVboOVarPvSSiNyglHoYyK33+DSazcymqPWq0WhWRin1hIh8E/ivQBz4\nK6XUZi7Np9FsGLRQajRbh/+DoOZpGfi1dR6LRrNl0K5XjWbr0AekgDQQW+exaDRbBi2UGs3W4fPA\n/wb8NfBH6zwWjWbLoF2vGs0WQER+DnCUUl8WERN4TETeCvwX4BogJSKjwC8opR5Yz7FqNP9/e3dM\nAwAAgDDMv2sc7CdpTSzh4Y33EAAIplcACEIJAEEoASAIJQAEoQSAIJQAEIQSAMIA099v2Yxhn3gA\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with large random initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The cost starts very high. This is because with large random-valued weights, the last activation (sigmoid) outputs results that are very close to 0 or 1 for some examples, and when it gets that example wrong it incurs a very high loss for that example. Indeed, when $\\log(a^{[3]}) = \\log(0)$, the loss goes to infinity.\n", + "- Poor initialization can lead to vanishing/exploding gradients, which also slows down the optimization algorithm. \n", + "- If you train this network longer you will see better results, but initializing with overly large random numbers slows down the optimization.\n", + "\n", + "\n", + "**In summary**:\n", + "- Initializing weights to very large random values does not work well. \n", + "- Hopefully intializing with small random values does better. The important question is: how small should be these random values be? Lets find out in the next part! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - He initialization\n", + "\n", + "Finally, try \"He Initialization\"; this is named for the first author of He et al., 2015. (If you have heard of \"Xavier initialization\", this is similar except Xavier initialization uses a scaling factor for the weights $W^{[l]}$ of `sqrt(1./layers_dims[l-1])` where He initialization would use `sqrt(2./layers_dims[l-1])`.)\n", + "\n", + "**Exercise**: Implement the following function to initialize your parameters with He initialization.\n", + "\n", + "**Hint**: This function is similar to the previous `initialize_parameters_random(...)`. The only difference is that instead of multiplying `np.random.randn(..,..)` by 10, you will multiply it by $\\sqrt{\\frac{2}{\\text{dimension of the previous layer}}}$, which is what He initialization recommends for layers with a ReLU activation. " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_he\n", + "\n", + "def initialize_parameters_he(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(3)\n", + " parameters = {}\n", + " L = len(layers_dims) - 1 # integer representing the number of layers\n", + " \n", + " for l in range(1, L + 1):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.random.randn(layers_dims[l],layers_dims[l-1]) * np.sqrt(2./layers_dims[l-1])\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 1.78862847 0.43650985]\n", + " [ 0.09649747 -1.8634927 ]\n", + " [-0.2773882 -0.35475898]\n", + " [-0.08274148 -0.62700068]]\n", + "b1 = [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "W2 = [[-0.03098412 -0.33744411 -0.92904268 0.62552248]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_he([2, 4, 1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 1.78862847 0.43650985]\n", + " [ 0.09649747 -1.8634927 ]\n", + " [-0.2773882 -0.35475898]\n", + " [-0.08274148 -0.62700068]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[-0.03098412 -0.33744411 -0.92904268 0.62552248]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using He initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.8830537463419761\n", + "Cost after iteration 1000: 0.6879825919728063\n", + "Cost after iteration 2000: 0.6751286264523371\n", + "Cost after iteration 3000: 0.6526117768893807\n", + "Cost after iteration 4000: 0.6082958970572938\n", + "Cost after iteration 5000: 0.5304944491717495\n", + "Cost after iteration 6000: 0.4138645817071794\n", + "Cost after iteration 7000: 0.3117803464844441\n", + "Cost after iteration 8000: 0.23696215330322562\n", + "Cost after iteration 9000: 0.18597287209206834\n", + "Cost after iteration 10000: 0.15015556280371806\n", + "Cost after iteration 11000: 0.12325079292273546\n", + "Cost after iteration 12000: 0.09917746546525934\n", + "Cost after iteration 13000: 0.08457055954024278\n", + "Cost after iteration 14000: 0.07357895962677369\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.993333333333\n", + "On the test set:\n", + "Accuracy: 0.96\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"he\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with He initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The model with He initialization separates the blue and the red dots very well in a small number of iterations.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## 5 - Conclusions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "You have seen three different types of initializations. For the same number of iterations and same hyperparameters the comparison is:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **Model**\n", + " \n", + " **Train accuracy**\n", + " \n", + " **Problem/Comment**\n", + "
\n", + " 3-layer NN with zeros initialization\n", + " \n", + " 50%\n", + " \n", + " fails to break symmetry\n", + "
\n", + " 3-layer NN with large random initialization\n", + " \n", + " 83%\n", + " \n", + " too large weights \n", + "
\n", + " 3-layer NN with He initialization\n", + " \n", + " 99%\n", + " \n", + " recommended method\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember from this notebook**:\n", + "- Different initializations lead to different results\n", + "- Random initialization is used to break symmetry and make sure different hidden units can learn different things\n", + "- Don't intialize to values that are too large\n", + "- He initialization works well for networks with ReLU activations. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "XOESP", + "launcher_item_id": "8IhFN" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Coursera/Lesson2/Week1/Regularization_v2a.ipynb b/Coursera/Lesson2/Week1/Regularization_v2a.ipynb new file mode 100644 index 0000000..5df22fe --- /dev/null +++ b/Coursera/Lesson2/Week1/Regularization_v2a.ipynb @@ -0,0 +1,1137 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regularization\n", + "\n", + "Welcome to the second assignment of this week. Deep Learning models have so much flexibility and capacity that **overfitting can be a serious problem**, if the training dataset is not big enough. Sure it does well on the training set, but the learned network **doesn't generalize to new examples** that it has never seen!\n", + "\n", + "**You will learn to:** Use regularization in your deep learning models.\n", + "\n", + "Let's first import the packages you are going to use." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"2a\". \n", + "* You can find your work in the file directory as version \"2\".\n", + "* To see the file directory, click on the Coursera logo at the top left of the notebook.\n", + "\n", + "#### List of Updates\n", + "* Clarified explanation of 'keep_prob' in the text description.\n", + "* Fixed a comment so that keep_prob and 1-keep_prob add up to 100%\n", + "* Updated print statements and 'expected output' for easier visual comparisons." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# import packages\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from reg_utils import sigmoid, relu, plot_decision_boundary, initialize_parameters, load_2D_dataset, predict_dec\n", + "from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters\n", + "import sklearn\n", + "import sklearn.datasets\n", + "import scipy.io\n", + "from testCases import *\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Problem Statement**: You have just been hired as an AI expert by the French Football Corporation. They would like you to recommend positions where France's goal keeper should kick the ball so that the French team's players can then hit it with their head. \n", + "\n", + "\n", + "
**Figure 1** : **Football field**
The goal keeper kicks the ball in the air, the players of each team are fighting to hit the ball with their head
\n", + "\n", + "\n", + "They give you the following 2D dataset from France's past 10 games." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "train_X, train_Y, test_X, test_Y = load_2D_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each dot corresponds to a position on the football field where a football player has hit the ball with his/her head after the French goal keeper has shot the ball from the left side of the football field.\n", + "- If the dot is blue, it means the French player managed to hit the ball with his/her head\n", + "- If the dot is red, it means the other team's player hit the ball with their head\n", + "\n", + "**Your goal**: Use a deep learning model to find the positions on the field where the goalkeeper should kick the ball." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Analysis of the dataset**: This dataset is a little noisy, but it looks like a diagonal line separating the upper left half (blue) from the lower right half (red) would work well. \n", + "\n", + "You will first try a non-regularized model. Then you'll learn how to regularize it and decide which model you will choose to solve the French Football Corporation's problem. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Non-regularized model\n", + "\n", + "You will use the following neural network (already implemented for you below). This model can be used:\n", + "- in *regularization mode* -- by setting the `lambd` input to a non-zero value. We use \"`lambd`\" instead of \"`lambda`\" because \"`lambda`\" is a reserved keyword in Python. \n", + "- in *dropout mode* -- by setting the `keep_prob` to a value less than one\n", + "\n", + "You will first try the model without any regularization. Then, you will implement:\n", + "- *L2 regularization* -- functions: \"`compute_cost_with_regularization()`\" and \"`backward_propagation_with_regularization()`\"\n", + "- *Dropout* -- functions: \"`forward_propagation_with_dropout()`\" and \"`backward_propagation_with_dropout()`\"\n", + "\n", + "In each part, you will run this model with the correct inputs so that it calls the functions you've implemented. Take a look at the code below to familiarize yourself with the model." + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, learning_rate = 0.3, num_iterations = 30000, print_cost = True, lambd = 0, keep_prob = 1):\n", + " \"\"\"\n", + " Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (input size, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (output size, number of examples)\n", + " learning_rate -- learning rate of the optimization\n", + " num_iterations -- number of iterations of the optimization loop\n", + " print_cost -- If True, print the cost every 10000 iterations\n", + " lambd -- regularization hyperparameter, scalar\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar.\n", + " \n", + " Returns:\n", + " parameters -- parameters learned by the model. They can then be used to predict.\n", + " \"\"\"\n", + " \n", + " grads = {}\n", + " costs = [] # to keep track of the cost\n", + " m = X.shape[1] # number of examples\n", + " layers_dims = [X.shape[0], 20, 3, 1]\n", + " \n", + " # Initialize parameters dictionary.\n", + " parameters = initialize_parameters(layers_dims)\n", + "\n", + " # Loop (gradient descent)\n", + "\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.\n", + " if keep_prob == 1:\n", + " a3, cache = forward_propagation(X, parameters)\n", + " elif keep_prob < 1:\n", + " a3, cache = forward_propagation_with_dropout(X, parameters, keep_prob)\n", + " \n", + " # Cost function\n", + " if lambd == 0:\n", + " cost = compute_cost(a3, Y)\n", + " else:\n", + " cost = compute_cost_with_regularization(a3, Y, parameters, lambd)\n", + " \n", + " # Backward propagation.\n", + " assert(lambd==0 or keep_prob==1) # it is possible to use both L2 regularization and dropout, \n", + " # but this assignment will only explore one at a time\n", + " if lambd == 0 and keep_prob == 1:\n", + " grads = backward_propagation(X, Y, cache)\n", + " elif lambd != 0:\n", + " grads = backward_propagation_with_regularization(X, Y, cache, lambd)\n", + " elif keep_prob < 1:\n", + " grads = backward_propagation_with_dropout(X, Y, cache, keep_prob)\n", + " \n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " \n", + " # Print the loss every 10000 iterations\n", + " if print_cost and i % 10000 == 0:\n", + " print(\"Cost after iteration {}: {}\".format(i, cost))\n", + " if print_cost and i % 1000 == 0:\n", + " costs.append(cost)\n", + " \n", + " # plot the cost\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (x1,000)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's train the model without any regularization, and observe the accuracy on the train/test sets." + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6557412523481002\n", + "Cost after iteration 10000: 0.16329987525724213\n", + "Cost after iteration 20000: 0.13851642423253263\n" + ] + }, + { + "data": { + "image/png": "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\nAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the training set:\n", + "Accuracy: 0.947867298578\n", + "On the test set:\n", + "Accuracy: 0.915\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y)\n", + "print (\"On the training set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The train accuracy is 94.8% while the test accuracy is 91.5%. This is the **baseline model** (you will observe the impact of regularization on this model). Run the following code to plot the decision boundary of your model." + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n+P8BBRFqyC1znewAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model without regularization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The non-regularized model is obviously overfitting the training set. It is fitting the noisy points! Lets now look at two techniques to reduce overfitting." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - L2 Regularization\n", + "\n", + "The standard way to avoid overfitting is called **L2 regularization**. It consists of appropriately modifying your cost function, from:\n", + "$$J = -\\frac{1}{m} \\sum\\limits_{i = 1}^{m} \\large{(}\\small y^{(i)}\\log\\left(a^{[L](i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[L](i)}\\right) \\large{)} \\tag{1}$$\n", + "To:\n", + "$$J_{regularized} = \\small \\underbrace{-\\frac{1}{m} \\sum\\limits_{i = 1}^{m} \\large{(}\\small y^{(i)}\\log\\left(a^{[L](i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[L](i)}\\right) \\large{)} }_\\text{cross-entropy cost} + \\underbrace{\\frac{1}{m} \\frac{\\lambda}{2} \\sum\\limits_l\\sum\\limits_k\\sum\\limits_j W_{k,j}^{[l]2} }_\\text{L2 regularization cost} \\tag{2}$$\n", + "\n", + "Let's modify your cost and observe the consequences.\n", + "\n", + "**Exercise**: Implement `compute_cost_with_regularization()` which computes the cost given by formula (2). To calculate $\\sum\\limits_k\\sum\\limits_j W_{k,j}^{[l]2}$ , use :\n", + "```python\n", + "np.sum(np.square(Wl))\n", + "```\n", + "Note that you have to do this for $W^{[1]}$, $W^{[2]}$ and $W^{[3]}$, then sum the three terms and multiply by $ \\frac{1}{m} \\frac{\\lambda}{2} $." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost_with_regularization\n", + "\n", + "def compute_cost_with_regularization(A3, Y, parameters, lambd):\n", + " \"\"\"\n", + " Implement the cost function with L2 regularization. See formula (2) above.\n", + " \n", + " Arguments:\n", + " A3 -- post-activation, output of forward propagation, of shape (output size, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " parameters -- python dictionary containing parameters of the model\n", + " \n", + " Returns:\n", + " cost - value of the regularized loss function (formula (2))\n", + " \"\"\"\n", + " m = Y.shape[1]\n", + " W1 = parameters[\"W1\"]\n", + " W2 = parameters[\"W2\"]\n", + " W3 = parameters[\"W3\"]\n", + " \n", + " cross_entropy_cost = compute_cost(A3, Y) # This gives you the cross-entropy part of the cost\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " L2_regularization_cost = (np.sum(np.square(W1)) + np.sum(np.square(W2)) + np.sum(np.square(W3)))*lambd/2/m\n", + " ### END CODER HERE ###\n", + " \n", + " cost = cross_entropy_cost + L2_regularization_cost\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = 1.78648594516\n" + ] + } + ], + "source": [ + "A3, Y_assess, parameters = compute_cost_with_regularization_test_case()\n", + "\n", + "print(\"cost = \" + str(compute_cost_with_regularization(A3, Y_assess, parameters, lambd = 0.1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **cost**\n", + " \n", + " 1.78648594516\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course, because you changed the cost, you have to change backward propagation as well! All the gradients have to be computed with respect to this new cost. \n", + "\n", + "**Exercise**: Implement the changes needed in backward propagation to take into account regularization. The changes only concern dW1, dW2 and dW3. For each, you have to add the regularization term's gradient ($\\frac{d}{dW} ( \\frac{1}{2}\\frac{\\lambda}{m} W^2) = \\frac{\\lambda}{m} W$)." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation_with_regularization\n", + "\n", + "def backward_propagation_with_regularization(X, Y, cache, lambd):\n", + " \"\"\"\n", + " Implements the backward propagation of our baseline model to which we added an L2 regularization.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (input size, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " cache -- cache output from forward_propagation()\n", + " lambd -- regularization hyperparameter, scalar\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW3 = 1./m * np.dot(dZ3, A2.T) + lambd/m*W3\n", + " ### END CODE HERE ###\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " \n", + " dA2 = np.dot(W3.T, dZ3)\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW2 = 1./m * np.dot(dZ2, A1.T) + lambd/m*W2\n", + " ### END CODE HERE ###\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW1 = 1./m * np.dot(dZ1, X.T) + lambd/m*W1\n", + " ### END CODE HERE ###\n", + " db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\"dA2\": dA2,\n", + " \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2, \"dA1\": dA1, \n", + " \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dW1 = \n", + "[[-0.25604646 0.12298827 -0.28297129]\n", + " [-0.17706303 0.34536094 -0.4410571 ]]\n", + "dW2 = \n", + "[[ 0.79276486 0.85133918]\n", + " [-0.0957219 -0.01720463]\n", + " [-0.13100772 -0.03750433]]\n", + "dW3 = \n", + "[[-1.77691347 -0.11832879 -0.09397446]]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, cache = backward_propagation_with_regularization_test_case()\n", + "\n", + "grads = backward_propagation_with_regularization(X_assess, Y_assess, cache, lambd = 0.7)\n", + "print (\"dW1 = \\n\"+ str(grads[\"dW1\"]))\n", + "print (\"dW2 = \\n\"+ str(grads[\"dW2\"]))\n", + "print (\"dW3 = \\n\"+ str(grads[\"dW3\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "dW1 = \n", + "[[-0.25604646 0.12298827 -0.28297129]\n", + " [-0.17706303 0.34536094 -0.4410571 ]]\n", + "dW2 = \n", + "[[ 0.79276486 0.85133918]\n", + " [-0.0957219 -0.01720463]\n", + " [-0.13100772 -0.03750433]]\n", + "dW3 = \n", + "[[-1.77691347 -0.11832879 -0.09397446]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now run the model with L2 regularization $(\\lambda = 0.7)$. The `model()` function will call: \n", + "- `compute_cost_with_regularization` instead of `compute_cost`\n", + "- `backward_propagation_with_regularization` instead of `backward_propagation`" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6974484493131264\n", + "Cost after iteration 10000: 0.2684918873282239\n", + "Cost after iteration 20000: 0.26809163371273015\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.938388625592\n", + "On the test set:\n", + "Accuracy: 0.93\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, lambd = 0.7)\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congrats, the test set accuracy increased to 93%. You have saved the French football team!\n", + "\n", + "You are not overfitting the training data anymore. Let's plot the decision boundary." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with L2-regularization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The value of $\\lambda$ is a hyperparameter that you can tune using a dev set.\n", + "- L2 regularization makes your decision boundary smoother. If $\\lambda$ is too large, it is also possible to \"oversmooth\", resulting in a model with high bias.\n", + "\n", + "**What is L2-regularization actually doing?**:\n", + "\n", + "L2-regularization relies on the assumption that a model with small weights is simpler than a model with large weights. Thus, by penalizing the square values of the weights in the cost function you drive all the weights to smaller values. It becomes too costly for the cost to have large weights! This leads to a smoother model in which the output changes more slowly as the input changes. \n", + "\n", + "\n", + "**What you should remember** -- the implications of L2-regularization on:\n", + "- The cost computation:\n", + " - A regularization term is added to the cost\n", + "- The backpropagation function:\n", + " - There are extra terms in the gradients with respect to weight matrices\n", + "- Weights end up smaller (\"weight decay\"): \n", + " - Weights are pushed to smaller values." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Dropout\n", + "\n", + "Finally, **dropout** is a widely used regularization technique that is specific to deep learning. \n", + "**It randomly shuts down some neurons in each iteration.** Watch these two videos to see what this means!\n", + "\n", + " \n", + "\n", + "\n", + "
\n", + "\n", + "
\n", + "
\n", + "
Figure 2 : Drop-out on the second hidden layer.
At each iteration, you shut down (= set to zero) each neuron of a layer with probability $1 - keep\\_prob$ or keep it with probability $keep\\_prob$ (50% here). The dropped neurons don't contribute to the training in both the forward and backward propagations of the iteration.
\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "
Figure 3 : Drop-out on the first and third hidden layers.
$1^{st}$ layer: we shut down on average 40% of the neurons. $3^{rd}$ layer: we shut down on average 20% of the neurons.
\n", + "\n", + "\n", + "When you shut some neurons down, you actually modify your model. The idea behind drop-out is that at each iteration, you train a different model that uses only a subset of your neurons. With dropout, your neurons thus become less sensitive to the activation of one other specific neuron, because that other neuron might be shut down at any time. \n", + "\n", + "### 3.1 - Forward propagation with dropout\n", + "\n", + "**Exercise**: Implement the forward propagation with dropout. You are using a 3 layer neural network, and will add dropout to the first and second hidden layers. We will not apply dropout to the input layer or output layer. \n", + "\n", + "**Instructions**:\n", + "You would like to shut down some neurons in the first and second layers. To do that, you are going to carry out 4 Steps:\n", + "1. In lecture, we dicussed creating a variable $d^{[1]}$ with the same shape as $a^{[1]}$ using `np.random.rand()` to randomly get numbers between 0 and 1. Here, you will use a vectorized implementation, so create a random matrix $D^{[1]} = [d^{[1](1)} d^{[1](2)} ... d^{[1](m)}] $ of the same dimension as $A^{[1]}$.\n", + "2. Set each entry of $D^{[1]}$ to be 1 with probability (`keep_prob`), and 0 otherwise.\n", + "\n", + "**Hint:** Let's say that keep_prob = 0.8, which means that we want to keep about 80% of the neurons and drop out about 20% of them. We want to generate a vector that has 1's and 0's, where about 80% of them are 1 and about 20% are 0.\n", + "This python statement: \n", + "`X = (X < keep_prob).astype(int)` \n", + "\n", + "is conceptually the same as this if-else statement (for the simple case of a one-dimensional array) :\n", + "\n", + "```\n", + "for i,v in enumerate(x):\n", + " if v < keep_prob:\n", + " x[i] = 1\n", + " else: # v >= keep_prob\n", + " x[i] = 0\n", + "```\n", + "Note that the `X = (X < keep_prob).astype(int)` works with multi-dimensional arrays, and the resulting output preserves the dimensions of the input array.\n", + "\n", + "Also note that without using `.astype(int)`, the result is an array of booleans `True` and `False`, which Python automatically converts to 1 and 0 if we multiply it with numbers. (However, it's better practice to convert data into the data type that we intend, so try using `.astype(int)`.)\n", + "\n", + "3. Set $A^{[1]}$ to $A^{[1]} * D^{[1]}$. (You are shutting down some neurons). You can think of $D^{[1]}$ as a mask, so that when it is multiplied with another matrix, it shuts down some of the values.\n", + "4. Divide $A^{[1]}$ by `keep_prob`. By doing this you are assuring that the result of the cost will still have the same expected value as without drop-out. (This technique is also called inverted dropout.)" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation_with_dropout\n", + "\n", + "def forward_propagation_with_dropout(X, parameters, keep_prob = 0.5):\n", + " \"\"\"\n", + " Implements the forward propagation: LINEAR -> RELU + DROPOUT -> LINEAR -> RELU + DROPOUT -> LINEAR -> SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (2, number of examples)\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " W1 -- weight matrix of shape (20, 2)\n", + " b1 -- bias vector of shape (20, 1)\n", + " W2 -- weight matrix of shape (3, 20)\n", + " b2 -- bias vector of shape (3, 1)\n", + " W3 -- weight matrix of shape (1, 3)\n", + " b3 -- bias vector of shape (1, 1)\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar\n", + " \n", + " Returns:\n", + " A3 -- last activation value, output of the forward propagation, of shape (1,1)\n", + " cache -- tuple, information stored for computing the backward propagation\n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " \n", + " # retrieve parameters\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " W3 = parameters[\"W3\"]\n", + " b3 = parameters[\"b3\"]\n", + " \n", + " # LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID\n", + " Z1 = np.dot(W1, X) + b1\n", + " A1 = relu(Z1)\n", + " ### START CODE HERE ### (approx. 4 lines) # Steps 1-4 below correspond to the Steps 1-4 described above. \n", + " D1 = np.random.rand(A1.shape[0],A1.shape[1]) # Step 1: initialize matrix D1 = np.random.rand(..., ...)\n", + " D1 = (D1 < keep_prob).astype(int) # Step 2: convert entries of D1 to 0 or 1 (using keep_prob as the threshold)\n", + " A1 = np.multiply(A1,D1) # Step 3: shut down some neurons of A1\n", + " A1 /= keep_prob # Step 4: scale the value of neurons that haven't been shut down\n", + " \n", + " ### END CODE HERE ###\n", + " Z2 = np.dot(W2, A1) + b2\n", + " A2 = relu(Z2)\n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " D2 = np.random.rand(A2.shape[0],A2.shape[1]) # Step 1: initialize matrix D2 = np.random.rand(..., ...)\n", + " D2 = (D2 < keep_prob).astype(int) # Step 2: convert entries of D2 to 0 or 1 (using keep_prob as the threshold)\n", + " A2 = np.multiply(A2,D2) # Step 3: shut down some neurons of A2\n", + " A2 /= keep_prob # Step 4: scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " Z3 = np.dot(W3, A2) + b3\n", + " A3 = sigmoid(Z3)\n", + "# D3 = np.random.randn(*A3.shape)\n", + "# D3 = (D3 < keep_prob).astype(int)\n", + "# A3 = np.multiply(A3,D3)\n", + "# A3 /= keep_prob\n", + " \n", + " cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)\n", + " \n", + " return A3, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A3 = [[ 0.36974721 0.00305176 0.04565099 0.49683389 0.36974721]]\n" + ] + } + ], + "source": [ + "X_assess, parameters = forward_propagation_with_dropout_test_case()\n", + "\n", + "A3, cache = forward_propagation_with_dropout(X_assess, parameters, keep_prob = 0.7)\n", + "print (\"A3 = \" + str(A3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **A3**\n", + " \n", + " [[ 0.36974721 0.00305176 0.04565099 0.49683389 0.36974721]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 - Backward propagation with dropout\n", + "\n", + "**Exercise**: Implement the backward propagation with dropout. As before, you are training a 3 layer network. Add dropout to the first and second hidden layers, using the masks $D^{[1]}$ and $D^{[2]}$ stored in the cache. \n", + "\n", + "**Instruction**:\n", + "Backpropagation with dropout is actually quite easy. You will have to carry out 2 Steps:\n", + "1. You had previously shut down some neurons during forward propagation, by applying a mask $D^{[1]}$ to `A1`. In backpropagation, you will have to shut down the same neurons, by reapplying the same mask $D^{[1]}$ to `dA1`. \n", + "2. During forward propagation, you had divided `A1` by `keep_prob`. In backpropagation, you'll therefore have to divide `dA1` by `keep_prob` again (the calculus interpretation is that if $A^{[1]}$ is scaled by `keep_prob`, then its derivative $dA^{[1]}$ is also scaled by the same `keep_prob`).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation_with_dropout\n", + "\n", + "def backward_propagation_with_dropout(X, Y, cache, keep_prob):\n", + " \"\"\"\n", + " Implements the backward propagation of our baseline model to which we added dropout.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (2, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " cache -- cache output from forward_propagation_with_dropout()\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " dW3 = 1./m * np.dot(dZ3, A2.T)\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " dA2 = np.dot(W3.T, dZ3)\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dA2 *= D2 # Step 1: Apply mask D2 to shut down the same neurons as during the forward propagation\n", + " dA2 /= keep_prob # Step 2: Scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " dW2 = 1./m * np.dot(dZ2, A1.T)\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dA1 *= D1 # Step 1: Apply mask D1 to shut down the same neurons as during the forward propagation\n", + " dA1 /= keep_prob # Step 2: Scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " dW1 = 1./m * np.dot(dZ1, X.T)\n", + " db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\"dA2\": dA2,\n", + " \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2, \"dA1\": dA1, \n", + " \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dA1 = \n", + "[[ 0.36544439 0. -0.00188233 0. -0.17408748]\n", + " [ 0.65515713 0. -0.00337459 0. -0. ]]\n", + "dA2 = \n", + "[[ 0.58180856 0. -0.00299679 0. -0.27715731]\n", + " [ 0. 0.53159854 -0. 0.53159854 -0.34089673]\n", + " [ 0. 0. -0.00292733 0. -0. ]]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, cache = backward_propagation_with_dropout_test_case()\n", + "\n", + "gradients = backward_propagation_with_dropout(X_assess, Y_assess, cache, keep_prob = 0.8)\n", + "\n", + "print (\"dA1 = \\n\" + str(gradients[\"dA1\"]))\n", + "print (\"dA2 = \\n\" + str(gradients[\"dA2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + "```\n", + "dA1 = \n", + "[[ 0.36544439 0. -0.00188233 0. -0.17408748]\n", + " [ 0.65515713 0. -0.00337459 0. -0. ]]\n", + "dA2 = \n", + "[[ 0.58180856 0. -0.00299679 0. -0.27715731]\n", + " [ 0. 0.53159854 -0. 0.53159854 -0.34089673]\n", + " [ 0. 0. -0.00292733 0. -0. ]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now run the model with dropout (`keep_prob = 0.86`). It means at every iteration you shut down each neurons of layer 1 and 2 with 14% probability. The function `model()` will now call:\n", + "- `forward_propagation_with_dropout` instead of `forward_propagation`.\n", + "- `backward_propagation_with_dropout` instead of `backward_propagation`." + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6543912405149825\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/work/week5/Regularization/reg_utils.py:236: RuntimeWarning: divide by zero encountered in log\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n", + "/home/jovyan/work/week5/Regularization/reg_utils.py:236: RuntimeWarning: invalid value encountered in multiply\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 10000: 0.06101698657490562\n", + "Cost after iteration 20000: 0.060582435798513114\n" + ] + }, + { + "data": { + "image/png": "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\nGEl/lnSPpLN7WpGk2ZI6JHV0dXX1S3H+grqZWfk0+kSWFuC1wD8B/wj8m6RDKxeKiMsiYlpETGtv\nb++XF3bTaTOz8sntmB6wDJiYmZ6QzsvqBFZExIvAi5JuAY4CHs2xLsBNp83MyijPkd58YKqkKZLa\ngFnA3IplrgNOkNQiaShwHPBwjjXt4KbTZmblk9tILyK2SpoD3AA0A5dHxEJJ56WPXxoRD0v6A7AA\n2A78KCIezKumLB/TMzMrnzx3bxIR84B5FfMurZj+OvD1POvoiZtOm5mVT6NPZGkYN502Myuf0oYe\nuOm0mVnZlDv03HTazKxUSh16bjptZlYupQ49N502MyuXUofeWO/eNDMrlVKH3phhbWzY7KbTZmZl\nUe7Q8xfUzcxKpdSh19102sf1zMzKodSh55GemVm5lDv03HTazKxUyh16Oy4v5NAzMyuDUoded9Pp\nlT6mZ2ZWCqUOPTedNjMrl1KHHrjptJlZmTj03JXFzKw0Sh96bjptZlYepQ89N502MyuP0oeem06b\nmZVH6UPPTafNzMrDoedWZGZmpVH60HPTaTOz8ih96HmkZ2ZWHg49N502MyuNXENP0gxJiyQtlnR+\nD4+fKGmNpPvS2+fzrKcnbjptZlYeLXmtWFIzcAnwNqATmC9pbkQ8VLHorRFxal519MZNp83MyiPP\nkd50YHFELImIzcCVwMwcX69PWpubGOGm02ZmpZBn6I0HlmamO9N5lV4vaYGk30t6VY71VOVWZGZm\n5ZDb7s063QtMioj1kk4BrgWmVi4kaTYwG2DSpEn9XsSYob7SgplZGeQ50lsGTMxMT0jn7RARayNi\nfXp/HtAqaVzliiLisoiYFhHT2tvb+71Qj/TMzMohz9CbD0yVNEVSGzALmJtdQNL+kpTen57WsyLH\nmnrkptNmZuWQ2+7NiNgqaQ5wA9AMXB4RCyWdlz5+KXAG8BFJW4GNwKyIiLxqqsZNp83MyiHXY3rp\nLst5FfMuzdy/GLg4zxrqkW06Pbi1udHlmJlZTkrfkQXciszMrCwcerjptJlZWTj08EjPzKwsHHq4\n6bSZWVk49HDTaTOzsnDo4abTZmZl4dDDTafNzMrCoZdyKzIzs+Jz6KXcdNrMrPgceimP9MzMis+h\nl3LTaTOz4nPopdx02sys+Bx6qWzTaTMzKyaHXmrnF9S9i9PMrKgceqnuptM+g9PMrLgceik3nTYz\n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\nzErDoWdmZqXh0DMzs9Jw6JmZWWk49MzMrDQcemZmVhoOPTMzKw2HnpmZlcZe13BaUhfwVD+sahzw\nQj+sZ2/ibS6PMm63t7kcqm3zKyKivbcn73Wh118kddTTkbtIvM3lUcbt9jaXw+5us3dvmplZaTj0\nzMysNMocepc1uoAG8DaXRxm329tcDru1zaU9pmdmZuVT5pGemZmVjEPPzMxKo3ShJ2mGpEWSFks6\nv9H1DBRJT0p6QNJ9kjoaXU8eJF0uabmkBzPzxkq6UdJj6c8xjayxv1XZ5gskLUvf6/skndLIGvub\npImSbpb0kKSFkv45nV/Y97rGNhf9vR4s6W5J96fb/cV0fp/f61Id05PUDDwKvA3oBOYD74mIhxpa\n2ACQ9CQwLSIK+0VWSW8C1gM/i4gj0nlfA1ZGxIXpHzljIuKzjayzP1XZ5guA9RHxjUbWlhdJBwAH\nRMS9kkYA9wDvAM6loO91jW0+k2K/1wKGRcR6Sa3AX4F/Bk6nj+912UZ604HFEbEkIjYDVwIzG1yT\n9ZOIuAVYWTF7JvDT9P5PST4oCqPKNhdaRDwbEfem99cBDwPjKfB7XWObCy0S69PJ1vQW7MZ7XbbQ\nGw8szUx3UoJ/OKkA/iTpHkmzG13MANovIp5N7z8H7NfIYgbQxyQtSHd/FmY3XyVJk4GjgbsoyXtd\nsc1Q8PdaUrOk+4DlwI0RsVvvddlCr8xOiIjXACcD/zvdLVYqkezLL8P+/O8DBwGvAZ4FvtnYcvIh\naThwFfAvEbE2+1hR3+setrnw73VEbEs/uyYA0yUdUfH4Lr3XZQu9ZcDEzPSEdF7hRcSy9Ody4BqS\nXb1l8Hx6PKT7uMjyBteTu4h4Pv2g2A78kAK+1+nxnauAn0fE1ensQr/XPW1zGd7rbhGxGrgZmMFu\nvNdlC735wFRJUyS1AbOAuQ2uKXeShqUHv5E0DHg78GDtZxXGXOCc9P45wHUNrGVAdH8YpE6jYO91\nenLDj4GHI+KizEOFfa+rbXMJ3ut2SaPT+0NITkJ8hN14r0t19iZAekrvt4Fm4PKI+EqDS8qdpINI\nRncALcAvirjdkn4JnEhy6ZHngS8A1wK/BiaRXJLqzIgozIkfVbb5RJLdXQE8CXw4c/xjryfpBOBW\n4AFgezr7X0mOcRXyva6xze+h2O/1kSQnqjSTDNJ+HRFfkrQPfXyvSxd6ZmZWXmXbvWlmZiXm0DMz\ns9Jw6JmZWWk49MzMrDQcemZmVhoOPTNA0u3pz8mSzurndf9rT6+VF0nvkPT5XpZ5V9q1frukaTWW\nOyftZP+YpHMy86dIukvJ1Up+lX7vFSW+m85fIOmYdH6bpFsktfTXdpr1hUPPDIiI16d3JwO7FHp1\nfJC/LPQyr5WXzwDf62WZB0k61d9SbQFJY0m+93ccSaePL2R6O34V+FZEHAKsAj6Yzj8ZmJreZpO0\nySJt8H4T8O4+bI9Zv3HomQGSuju5Xwi8Mb022SfSZrdflzQ/Hbl8OF3+REm3SpoLPJTOuzZt6L2w\nu6m3pAuBIen6fp59rXRU9HVJDyq51uG7M+v+s6TfSnpE0s/TjhxIulDJNdUWSPq7y8lIOhR4qfsS\nUpKuk3R2ev/D3TVExMMRsaiXX8s/kjT4XRkRq4AbgRlpLW8Bfpsul+1yP5PkMkcREXcCozNdQ64F\n3tv7u2GWH+9qMHu584FPR8SpAGl4rYmIYyUNAm6T9Md02WOAIyLiiXT6AxGxMm2XNF/SVRFxvqQ5\nacPcSqeTdNM4iqSjynxJ3SOvo4FXAc8AtwFvkPQwSaupwyIiutszVXgDcG9menZa8xPAp4DX7cLv\notpVSfYBVkfE1or5tZ7zLMno8thdeH2zfueRnlltbwfOTi9tchfJB/7U9LG7M4EH8HFJ9wN3kjQ2\nn0ptJwC/TBsGPw/8hZ2hcHdEdKaNhO8j2e26BtgE/FjS6cCGHtZ5ANDVPZGu9/MkjXo/1ci2XBGx\nDdjc3QfWrBEcema1CfhYRLwmvU2JiO6R3os7FpJOBN4KHB8RRwF/Awbvxuu+lLm/DWhJR1bTSXYr\nngr8oYfnbezhdV8NrAAO3MUaql2VZAXJbsuWivm1ntNtEElwmzWEQ8/s5dYB2ZHIDcBH0su6IOnQ\n9EoVlUYBqyJig6TDePluxC3dz69wK/Du9LhhO/Am4O5qhSm5ltqoiJgHfIJkt2ilh4FDMs+ZTnJy\nydHApyVNqbb+dPnxkm5KJ28A3i5pTHoCy9uBG9Lrl90MnJEul+1yP5dkZCxJryPZNfxsuu59gBci\nYkutGszy5NAze7kFwDZJ90v6BPAjkhNV7pX0IPADej4W/gegJT3udiHJLs5ulwELuk8iybgmfb37\ngf8CPhMRz9WobQRwvaQFwF+BT/awzC3A0WnoDCK5xtoHIuIZkmN6l6ePnSapEzge+J2kG9LnHwBs\nBUh3hX6Z5JJc84EvZXaPfhb4pKTFJLt8f5zOnwcsARanr/3RTG0nAb+rsX1mufNVFswKRtJ3gP+M\niD/14blvVxl+AAAAWElEQVRzgKcjot+vMynpauD8iHi0v9dtVi+HnlnBSNoPOC6P4Oqr9MvrsyLi\nZ42uxcrNoWdmZqXhY3pmZlYaDj0zMysNh56ZmZWGQ8/MzErDoWdmZqXx/wFkjyiNNbzzCAAAAABJ\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.928909952607\n", + "On the test set:\n", + "Accuracy: 0.95\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, keep_prob = 0.86, learning_rate = 0.3)\n", + "\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dropout works great! The test accuracy has increased again (to 95%)! Your model is not overfitting the training set and does a great job on the test set. The French football team will be forever grateful to you! \n", + "\n", + "Run the code below to plot the decision boundary." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with dropout\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**:\n", + "- A **common mistake** when using dropout is to use it both in training and testing. You should use dropout (randomly eliminate nodes) only in training. \n", + "- Deep learning frameworks like [tensorflow](https://www.tensorflow.org/api_docs/python/tf/nn/dropout), [PaddlePaddle](http://doc.paddlepaddle.org/release_doc/0.9.0/doc/ui/api/trainer_config_helpers/attrs.html), [keras](https://keras.io/layers/core/#dropout) or [caffe](http://caffe.berkeleyvision.org/tutorial/layers/dropout.html) come with a dropout layer implementation. Don't stress - you will soon learn some of these frameworks.\n", + "\n", + "\n", + "**What you should remember about dropout:**\n", + "- Dropout is a regularization technique.\n", + "- You only use dropout during training. Don't use dropout (randomly eliminate nodes) during test time.\n", + "- Apply dropout both during forward and backward propagation.\n", + "- During training time, divide each dropout layer by keep_prob to keep the same expected value for the activations. For example, if keep_prob is 0.5, then we will on average shut down half the nodes, so the output will be scaled by 0.5 since only the remaining half are contributing to the solution. Dividing by 0.5 is equivalent to multiplying by 2. Hence, the output now has the same expected value. You can check that this works even when keep_prob is other values than 0.5. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Conclusions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Here are the results of our three models**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **model**\n", + " \n", + " **train accuracy**\n", + " \n", + " **test accuracy**\n", + "
\n", + " 3-layer NN without regularization\n", + " \n", + " 95%\n", + " \n", + " 91.5%\n", + "
\n", + " 3-layer NN with L2-regularization\n", + " \n", + " 94%\n", + " \n", + " 93%\n", + "
\n", + " 3-layer NN with dropout\n", + " \n", + " 93%\n", + " \n", + " 95%\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that regularization hurts training set performance! This is because it limits the ability of the network to overfit to the training set. But since it ultimately gives better test accuracy, it is helping your system. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congratulations for finishing this assignment! And also for revolutionizing French football. :-) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What we want you to remember from this notebook**:\n", + "- Regularization will help you reduce overfitting.\n", + "- Regularization will drive your weights to lower values.\n", + "- L2 regularization and Dropout are two very effective regularization techniques." + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "SXQaI", + "launcher_item_id": "UAwhh" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Coursera/Lesson2/Week2/Optimization_methods_v1b.ipynb b/Coursera/Lesson2/Week2/Optimization_methods_v1b.ipynb new file mode 100644 index 0000000..416f2e7 --- /dev/null +++ b/Coursera/Lesson2/Week2/Optimization_methods_v1b.ipynb @@ -0,0 +1,1600 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Optimization Methods\n", + "\n", + "Until now, you've always used Gradient Descent to update the parameters and minimize the cost. In this notebook, you will learn more advanced optimization methods that can speed up learning and perhaps even get you to a better final value for the cost function. Having a good optimization algorithm can be the difference between waiting days vs. just a few hours to get a good result. \n", + "\n", + "Gradient descent goes \"downhill\" on a cost function $J$. Think of it as trying to do this: \n", + "\n", + "
**Figure 1** : **Minimizing the cost is like finding the lowest point in a hilly landscape**
At each step of the training, you update your parameters following a certain direction to try to get to the lowest possible point.
\n", + "\n", + "**Notations**: As usual, $\\frac{\\partial J}{\\partial a } = $ `da` for any variable `a`.\n", + "\n", + "To get started, run the following code to import the libraries you will need." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"Optimization_methods_v1b\". \n", + "* You can find your work in the file directory as version \"Optimization methods'.\n", + "* To see the file directory, click on the Coursera logo at the top left of the notebook.\n", + "\n", + "#### List of Updates\n", + "* op_utils is now opt_utils_v1a. Assertion statement in `initialize_parameters` is fixed.\n", + "* opt_utils_v1a: `compute_cost` function now accumulates total cost of the batch without taking the average (average is taken for entire epoch instead).\n", + "* In `model` function, the total cost per mini-batch is accumulated, and the average of the entire epoch is taken as the average cost. So the plot of the cost function over time is now a smooth downward curve instead of an oscillating curve.\n", + "* Print statements used to check each function are reformatted, and 'expected output` is reformatted to match the format of the print statements (for easier visual comparisons)." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import scipy.io\n", + "import math\n", + "import sklearn\n", + "import sklearn.datasets\n", + "\n", + "from opt_utils_v1a import load_params_and_grads, initialize_parameters, forward_propagation, backward_propagation\n", + "from opt_utils_v1a import compute_cost, predict, predict_dec, plot_decision_boundary, load_dataset\n", + "from testCases import *\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Gradient Descent\n", + "\n", + "A simple optimization method in machine learning is gradient descent (GD). When you take gradient steps with respect to all $m$ examples on each step, it is also called Batch Gradient Descent. \n", + "\n", + "**Warm-up exercise**: Implement the gradient descent update rule. The gradient descent rule is, for $l = 1, ..., L$: \n", + "$$ W^{[l]} = W^{[l]} - \\alpha \\text{ } dW^{[l]} \\tag{1}$$\n", + "$$ b^{[l]} = b^{[l]} - \\alpha \\text{ } db^{[l]} \\tag{2}$$\n", + "\n", + "where L is the number of layers and $\\alpha$ is the learning rate. All parameters should be stored in the `parameters` dictionary. Note that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$. You need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_gd\n", + "\n", + "def update_parameters_with_gd(parameters, grads, learning_rate):\n", + " \"\"\"\n", + " Update parameters using one step of gradient descent\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters to be updated:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients to update each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " learning_rate -- the learning rate, scalar.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " \"\"\"\n", + "\n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + "\n", + " # Update rule for each parameter\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " parameters[\"W\" + str(l+1)] = parameters[\"W\" + str(l+1)] - learning_rate*grads[\"dW\"+str(l+1)]\n", + " parameters[\"b\" + str(l+1)] = parameters[\"b\" + str(l+1)] - learning_rate*grads[\"db\"+str(l+1)]\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 =\n", + "[[ 1.63535156 -0.62320365 -0.53718766]\n", + " [-1.07799357 0.85639907 -2.29470142]]\n", + "b1 =\n", + "[[ 1.74604067]\n", + " [-0.75184921]]\n", + "W2 =\n", + "[[ 0.32171798 -0.25467393 1.46902454]\n", + " [-2.05617317 -0.31554548 -0.3756023 ]\n", + " [ 1.1404819 -1.09976462 -0.1612551 ]]\n", + "b2 =\n", + "[[-0.88020257]\n", + " [ 0.02561572]\n", + " [ 0.57539477]]\n" + ] + } + ], + "source": [ + "parameters, grads, learning_rate = update_parameters_with_gd_test_case()\n", + "\n", + "parameters = update_parameters_with_gd(parameters, grads, learning_rate)\n", + "print(\"W1 =\\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 =\\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 =\\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 =\\n\" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 =\n", + "[[ 1.63535156 -0.62320365 -0.53718766]\n", + " [-1.07799357 0.85639907 -2.29470142]]\n", + "b1 =\n", + "[[ 1.74604067]\n", + " [-0.75184921]]\n", + "W2 =\n", + "[[ 0.32171798 -0.25467393 1.46902454]\n", + " [-2.05617317 -0.31554548 -0.3756023 ]\n", + " [ 1.1404819 -1.09976462 -0.1612551 ]]\n", + "b2 =\n", + "[[-0.88020257]\n", + " [ 0.02561572]\n", + " [ 0.57539477]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A variant of this is Stochastic Gradient Descent (SGD), which is equivalent to mini-batch gradient descent where each mini-batch has just 1 example. The update rule that you have just implemented does not change. What changes is that you would be computing gradients on just one training example at a time, rather than on the whole training set. The code examples below illustrate the difference between stochastic gradient descent and (batch) gradient descent. \n", + "\n", + "- **(Batch) Gradient Descent**:\n", + "\n", + "``` python\n", + "X = data_input\n", + "Y = labels\n", + "parameters = initialize_parameters(layers_dims)\n", + "for i in range(0, num_iterations):\n", + " # Forward propagation\n", + " a, caches = forward_propagation(X, parameters)\n", + " # Compute cost.\n", + " cost += compute_cost(a, Y)\n", + " # Backward propagation.\n", + " grads = backward_propagation(a, caches, parameters)\n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads)\n", + " \n", + "```\n", + "\n", + "- **Stochastic Gradient Descent**:\n", + "\n", + "```python\n", + "X = data_input\n", + "Y = labels\n", + "parameters = initialize_parameters(layers_dims)\n", + "for i in range(0, num_iterations):\n", + " for j in range(0, m):\n", + " # Forward propagation\n", + " a, caches = forward_propagation(X[:,j], parameters)\n", + " # Compute cost\n", + " cost += compute_cost(a, Y[:,j])\n", + " # Backward propagation\n", + " grads = backward_propagation(a, caches, parameters)\n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Stochastic Gradient Descent, you use only 1 training example before updating the gradients. When the training set is large, SGD can be faster. But the parameters will \"oscillate\" toward the minimum rather than converge smoothly. Here is an illustration of this: \n", + "\n", + "\n", + "
**Figure 1** : **SGD vs GD**
\"+\" denotes a minimum of the cost. SGD leads to many oscillations to reach convergence. But each step is a lot faster to compute for SGD than for GD, as it uses only one training example (vs. the whole batch for GD).
\n", + "\n", + "**Note** also that implementing SGD requires 3 for-loops in total:\n", + "1. Over the number of iterations\n", + "2. Over the $m$ training examples\n", + "3. Over the layers (to update all parameters, from $(W^{[1]},b^{[1]})$ to $(W^{[L]},b^{[L]})$)\n", + "\n", + "In practice, you'll often get faster results if you do not use neither the whole training set, nor only one training example, to perform each update. Mini-batch gradient descent uses an intermediate number of examples for each step. With mini-batch gradient descent, you loop over the mini-batches instead of looping over individual training examples.\n", + "\n", + "\n", + "
**Figure 2** : **SGD vs Mini-Batch GD**
\"+\" denotes a minimum of the cost. Using mini-batches in your optimization algorithm often leads to faster optimization.
\n", + "\n", + "\n", + "**What you should remember**:\n", + "- The difference between gradient descent, mini-batch gradient descent and stochastic gradient descent is the number of examples you use to perform one update step.\n", + "- You have to tune a learning rate hyperparameter $\\alpha$.\n", + "- With a well-turned mini-batch size, usually it outperforms either gradient descent or stochastic gradient descent (particularly when the training set is large)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Mini-Batch Gradient descent\n", + "\n", + "Let's learn how to build mini-batches from the training set (X, Y).\n", + "\n", + "There are two steps:\n", + "- **Shuffle**: Create a shuffled version of the training set (X, Y) as shown below. Each column of X and Y represents a training example. Note that the random shuffling is done synchronously between X and Y. Such that after the shuffling the $i^{th}$ column of X is the example corresponding to the $i^{th}$ label in Y. The shuffling step ensures that examples will be split randomly into different mini-batches. \n", + "\n", + "\n", + "\n", + "- **Partition**: Partition the shuffled (X, Y) into mini-batches of size `mini_batch_size` (here 64). Note that the number of training examples is not always divisible by `mini_batch_size`. The last mini batch might be smaller, but you don't need to worry about this. When the final mini-batch is smaller than the full `mini_batch_size`, it will look like this: \n", + "\n", + "\n", + "\n", + "**Exercise**: Implement `random_mini_batches`. We coded the shuffling part for you. To help you with the partitioning step, we give you the following code that selects the indexes for the $1^{st}$ and $2^{nd}$ mini-batches:\n", + "```python\n", + "first_mini_batch_X = shuffled_X[:, 0 : mini_batch_size]\n", + "second_mini_batch_X = shuffled_X[:, mini_batch_size : 2 * mini_batch_size]\n", + "...\n", + "```\n", + "\n", + "Note that the last mini-batch might end up smaller than `mini_batch_size=64`. Let $\\lfloor s \\rfloor$ represents $s$ rounded down to the nearest integer (this is `math.floor(s)` in Python). If the total number of examples is not a multiple of `mini_batch_size=64` then there will be $\\lfloor \\frac{m}{mini\\_batch\\_size}\\rfloor$ mini-batches with a full 64 examples, and the number of examples in the final mini-batch will be ($m-mini_\\_batch_\\_size \\times \\lfloor \\frac{m}{mini\\_batch\\_size}\\rfloor$). " + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: random_mini_batches\n", + "\n", + "def random_mini_batches(X, Y, mini_batch_size = 64, seed = 0):\n", + " \"\"\"\n", + " Creates a list of random minibatches from (X, Y)\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (input size, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)\n", + " mini_batch_size -- size of the mini-batches, integer\n", + " \n", + " Returns:\n", + " mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)\n", + " \"\"\"\n", + " \n", + " np.random.seed(seed) # To make your \"random\" minibatches the same as ours\n", + " m = X.shape[1] # number of training examples\n", + " mini_batches = []\n", + " \n", + " # Step 1: Shuffle (X, Y)\n", + " permutation = list(np.random.permutation(m))\n", + " shuffled_X = X[:, permutation]\n", + " shuffled_Y = Y[:, permutation].reshape((1,m))\n", + "\n", + " # Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.\n", + " num_complete_minibatches = math.floor(m/mini_batch_size) # number of mini batches of size mini_batch_size in your partitionning\n", + " for k in range(0, num_complete_minibatches):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " mini_batch_X = shuffled_X[:,k*mini_batch_size:(k+1)*mini_batch_size]\n", + " mini_batch_Y = shuffled_Y[:,k*mini_batch_size:(k+1)*mini_batch_size]\n", + " ### END CODE HERE ###\n", + " mini_batch = (mini_batch_X, mini_batch_Y)\n", + " mini_batches.append(mini_batch)\n", + " \n", + " # Handling the end case (last mini-batch < mini_batch_size)\n", + " if m % mini_batch_size != 0:\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " mini_batch_X = shuffled_X[:,num_complete_minibatches*mini_batch_size:]\n", + " mini_batch_Y = shuffled_Y[:,num_complete_minibatches*mini_batch_size:]\n", + " ### END CODE HERE ###\n", + " mini_batch = (mini_batch_X, mini_batch_Y)\n", + " mini_batches.append(mini_batch)\n", + " \n", + " return mini_batches" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape of the 1st mini_batch_X: (12288, 64)\n", + "shape of the 2nd mini_batch_X: (12288, 64)\n", + "shape of the 3rd mini_batch_X: (12288, 20)\n", + "shape of the 1st mini_batch_Y: (1, 64)\n", + "shape of the 2nd mini_batch_Y: (1, 64)\n", + "shape of the 3rd mini_batch_Y: (1, 20)\n", + "mini batch sanity check: [ 0.90085595 -0.7612069 0.2344157 ]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, mini_batch_size = random_mini_batches_test_case()\n", + "mini_batches = random_mini_batches(X_assess, Y_assess, mini_batch_size)\n", + "\n", + "print (\"shape of the 1st mini_batch_X: \" + str(mini_batches[0][0].shape))\n", + "print (\"shape of the 2nd mini_batch_X: \" + str(mini_batches[1][0].shape))\n", + "print (\"shape of the 3rd mini_batch_X: \" + str(mini_batches[2][0].shape))\n", + "print (\"shape of the 1st mini_batch_Y: \" + str(mini_batches[0][1].shape))\n", + "print (\"shape of the 2nd mini_batch_Y: \" + str(mini_batches[1][1].shape)) \n", + "print (\"shape of the 3rd mini_batch_Y: \" + str(mini_batches[2][1].shape))\n", + "print (\"mini batch sanity check: \" + str(mini_batches[0][0][0][0:3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**shape of the 1st mini_batch_X** (12288, 64)
**shape of the 2nd mini_batch_X** (12288, 64)
**shape of the 3rd mini_batch_X** (12288, 20)
**shape of the 1st mini_batch_Y** (1, 64)
**shape of the 2nd mini_batch_Y** (1, 64)
**shape of the 3rd mini_batch_Y** (1, 20)
**mini batch sanity check** [ 0.90085595 -0.7612069 0.2344157 ]
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- Shuffling and Partitioning are the two steps required to build mini-batches\n", + "- Powers of two are often chosen to be the mini-batch size, e.g., 16, 32, 64, 128." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Momentum\n", + "\n", + "Because mini-batch gradient descent makes a parameter update after seeing just a subset of examples, the direction of the update has some variance, and so the path taken by mini-batch gradient descent will \"oscillate\" toward convergence. Using momentum can reduce these oscillations. \n", + "\n", + "Momentum takes into account the past gradients to smooth out the update. We will store the 'direction' of the previous gradients in the variable $v$. Formally, this will be the exponentially weighted average of the gradient on previous steps. You can also think of $v$ as the \"velocity\" of a ball rolling downhill, building up speed (and momentum) according to the direction of the gradient/slope of the hill. \n", + "\n", + "\n", + "
**Figure 3**: The red arrows shows the direction taken by one step of mini-batch gradient descent with momentum. The blue points show the direction of the gradient (with respect to the current mini-batch) on each step. Rather than just following the gradient, we let the gradient influence $v$ and then take a step in the direction of $v$.
\n", + "\n", + "\n", + "**Exercise**: Initialize the velocity. The velocity, $v$, is a python dictionary that needs to be initialized with arrays of zeros. Its keys are the same as those in the `grads` dictionary, that is:\n", + "for $l =1,...,L$:\n", + "```python\n", + "v[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "v[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "```\n", + "**Note** that the iterator l starts at 0 in the for loop while the first parameters are v[\"dW1\"] and v[\"db1\"] (that's a \"one\" on the superscript). This is why we are shifting l to l+1 in the `for` loop." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_velocity\n", + "\n", + "def initialize_velocity(parameters):\n", + " \"\"\"\n", + " Initializes the velocity as a python dictionary with:\n", + " - keys: \"dW1\", \"db1\", ..., \"dWL\", \"dbL\" \n", + " - values: numpy arrays of zeros of the same shape as the corresponding gradients/parameters.\n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters.\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " \n", + " Returns:\n", + " v -- python dictionary containing the current velocity.\n", + " v['dW' + str(l)] = velocity of dWl\n", + " v['db' + str(l)] = velocity of dbl\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v = {}\n", + " \n", + " # Initialize velocity\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\"+str(l+1)].shape)\n", + " v[\"db\" + str(l+1)] = np.zeros(parameters[\"b\"+str(l+1)].shape)\n", + " ### END CODE HERE ###\n", + " \n", + " return v" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v[\"dW1\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] =\n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] =\n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_velocity_test_case()\n", + "\n", + "v = initialize_velocity(parameters)\n", + "print(\"v[\\\"dW1\\\"] =\\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] =\\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] =\\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] =\\n\" + str(v[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "v[\"dW1\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] =\n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] =\n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the parameters update with momentum. The momentum update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$ \\begin{cases}\n", + "v_{dW^{[l]}} = \\beta v_{dW^{[l]}} + (1 - \\beta) dW^{[l]} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha v_{dW^{[l]}}\n", + "\\end{cases}\\tag{3}$$\n", + "\n", + "$$\\begin{cases}\n", + "v_{db^{[l]}} = \\beta v_{db^{[l]}} + (1 - \\beta) db^{[l]} \\\\\n", + "b^{[l]} = b^{[l]} - \\alpha v_{db^{[l]}} \n", + "\\end{cases}\\tag{4}$$\n", + "\n", + "where L is the number of layers, $\\beta$ is the momentum and $\\alpha$ is the learning rate. All parameters should be stored in the `parameters` dictionary. Note that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$ (that's a \"one\" on the superscript). So you will need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_momentum\n", + "\n", + "def update_parameters_with_momentum(parameters, grads, v, beta, learning_rate):\n", + " \"\"\"\n", + " Update parameters using Momentum\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients for each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " v -- python dictionary containing the current velocity:\n", + " v['dW' + str(l)] = ...\n", + " v['db' + str(l)] = ...\n", + " beta -- the momentum hyperparameter, scalar\n", + " learning_rate -- the learning rate, scalar\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " v -- python dictionary containing your updated velocities\n", + " \"\"\"\n", + "\n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " \n", + " # Momentum update for each parameter\n", + " for l in range(L):\n", + " \n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " # compute velocities\n", + " v[\"dW\" + str(l+1)] = beta*v[\"dW\"+str(l+1)]+(1-beta)*grads[\"dW\"+str(l+1)]\n", + " v[\"db\" + str(l+1)] = beta*v[\"db\"+str(l+1)]+(1-beta)*grads[\"db\"+str(l+1)]\n", + " # update parameters\n", + " parameters[\"W\" + str(l+1)] = parameters[\"W\" + str(l+1)] - learning_rate*v[\"dW\" + str(l+1)]\n", + " parameters[\"b\" + str(l+1)] = parameters[\"b\" + str(l+1)] - learning_rate*v[\"db\" + str(l+1)]\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters, v" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "[[ 1.62544598 -0.61290114 -0.52907334]\n", + " [-1.07347112 0.86450677 -2.30085497]]\n", + "b1 = \n", + "[[ 1.74493465]\n", + " [-0.76027113]]\n", + "W2 = \n", + "[[ 0.31930698 -0.24990073 1.4627996 ]\n", + " [-2.05974396 -0.32173003 -0.38320915]\n", + " [ 1.13444069 -1.0998786 -0.1713109 ]]\n", + "b2 = \n", + "[[-0.87809283]\n", + " [ 0.04055394]\n", + " [ 0.58207317]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = v[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n" + ] + } + ], + "source": [ + "parameters, grads, v = update_parameters_with_momentum_test_case()\n", + "\n", + "parameters, v = update_parameters_with_momentum(parameters, grads, v, beta = 0.9, learning_rate = 0.01)\n", + "print(\"W1 = \\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \\n\" + str(parameters[\"b2\"]))\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = v\" + str(v[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 = \n", + "[[ 1.62544598 -0.61290114 -0.52907334]\n", + " [-1.07347112 0.86450677 -2.30085497]]\n", + "b1 = \n", + "[[ 1.74493465]\n", + " [-0.76027113]]\n", + "W2 = \n", + "[[ 0.31930698 -0.24990073 1.4627996 ]\n", + " [-2.05974396 -0.32173003 -0.38320915]\n", + " [ 1.13444069 -1.0998786 -0.1713109 ]]\n", + "b2 = \n", + "[[-0.87809283]\n", + " [ 0.04055394]\n", + " [ 0.58207317]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = v[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note** that:\n", + "- The velocity is initialized with zeros. So the algorithm will take a few iterations to \"build up\" velocity and start to take bigger steps.\n", + "- If $\\beta = 0$, then this just becomes standard gradient descent without momentum. \n", + "\n", + "**How do you choose $\\beta$?**\n", + "\n", + "- The larger the momentum $\\beta$ is, the smoother the update because the more we take the past gradients into account. But if $\\beta$ is too big, it could also smooth out the updates too much. \n", + "- Common values for $\\beta$ range from 0.8 to 0.999. If you don't feel inclined to tune this, $\\beta = 0.9$ is often a reasonable default. \n", + "- Tuning the optimal $\\beta$ for your model might need trying several values to see what works best in term of reducing the value of the cost function $J$. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- Momentum takes past gradients into account to smooth out the steps of gradient descent. It can be applied with batch gradient descent, mini-batch gradient descent or stochastic gradient descent.\n", + "- You have to tune a momentum hyperparameter $\\beta$ and a learning rate $\\alpha$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Adam\n", + "\n", + "Adam is one of the most effective optimization algorithms for training neural networks. It combines ideas from RMSProp (described in lecture) and Momentum. \n", + "\n", + "**How does Adam work?**\n", + "1. It calculates an exponentially weighted average of past gradients, and stores it in variables $v$ (before bias correction) and $v^{corrected}$ (with bias correction). \n", + "2. It calculates an exponentially weighted average of the squares of the past gradients, and stores it in variables $s$ (before bias correction) and $s^{corrected}$ (with bias correction). \n", + "3. It updates parameters in a direction based on combining information from \"1\" and \"2\".\n", + "\n", + "The update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$\\begin{cases}\n", + "v_{dW^{[l]}} = \\beta_1 v_{dW^{[l]}} + (1 - \\beta_1) \\frac{\\partial \\mathcal{J} }{ \\partial W^{[l]} } \\\\\n", + "v^{corrected}_{dW^{[l]}} = \\frac{v_{dW^{[l]}}}{1 - (\\beta_1)^t} \\\\\n", + "s_{dW^{[l]}} = \\beta_2 s_{dW^{[l]}} + (1 - \\beta_2) (\\frac{\\partial \\mathcal{J} }{\\partial W^{[l]} })^2 \\\\\n", + "s^{corrected}_{dW^{[l]}} = \\frac{s_{dW^{[l]}}}{1 - (\\beta_2)^t} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha \\frac{v^{corrected}_{dW^{[l]}}}{\\sqrt{s^{corrected}_{dW^{[l]}}} + \\varepsilon}\n", + "\\end{cases}$$\n", + "where:\n", + "- t counts the number of steps taken of Adam \n", + "- L is the number of layers\n", + "- $\\beta_1$ and $\\beta_2$ are hyperparameters that control the two exponentially weighted averages. \n", + "- $\\alpha$ is the learning rate\n", + "- $\\varepsilon$ is a very small number to avoid dividing by zero\n", + "\n", + "As usual, we will store all parameters in the `parameters` dictionary " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Initialize the Adam variables $v, s$ which keep track of the past information.\n", + "\n", + "**Instruction**: The variables $v, s$ are python dictionaries that need to be initialized with arrays of zeros. Their keys are the same as for `grads`, that is:\n", + "for $l = 1, ..., L$:\n", + "```python\n", + "v[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "v[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "s[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "s[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_adam\n", + "\n", + "def initialize_adam(parameters) :\n", + " \"\"\"\n", + " Initializes v and s as two python dictionaries with:\n", + " - keys: \"dW1\", \"db1\", ..., \"dWL\", \"dbL\" \n", + " - values: numpy arrays of zeros of the same shape as the corresponding gradients/parameters.\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters.\n", + " parameters[\"W\" + str(l)] = Wl\n", + " parameters[\"b\" + str(l)] = bl\n", + " \n", + " Returns: \n", + " v -- python dictionary that will contain the exponentially weighted average of the gradient.\n", + " v[\"dW\" + str(l)] = ...\n", + " v[\"db\" + str(l)] = ...\n", + " s -- python dictionary that will contain the exponentially weighted average of the squared gradient.\n", + " s[\"dW\" + str(l)] = ...\n", + " s[\"db\" + str(l)] = ...\n", + "\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v = {}\n", + " s = {}\n", + " \n", + " # Initialize v, s. Input: \"parameters\". Outputs: \"v, s\".\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " v[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\"+str(l+1)].shape)\n", + " v[\"db\" + str(l+1)] = np.zeros(parameters[\"b\"+str(l+1)].shape)\n", + " s[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\"+str(l+1)].shape)\n", + " s[\"db\" + str(l+1)] = np.zeros(parameters[\"b\"+str(l+1)].shape)\n", + " ### END CODE HERE ###\n", + " \n", + " return v, s" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "s[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "s[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_adam_test_case()\n", + "\n", + "v, s = initialize_adam(parameters)\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = \\n\" + str(v[\"db2\"]))\n", + "print(\"s[\\\"dW1\\\"] = \\n\" + str(s[\"dW1\"]))\n", + "print(\"s[\\\"db1\\\"] = \\n\" + str(s[\"db1\"]))\n", + "print(\"s[\\\"dW2\\\"] = \\n\" + str(s[\"dW2\"]))\n", + "print(\"s[\\\"db2\\\"] = \\n\" + str(s[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "v[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "s[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "s[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the parameters update with Adam. Recall the general update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$\\begin{cases}\n", + "v_{W^{[l]}} = \\beta_1 v_{W^{[l]}} + (1 - \\beta_1) \\frac{\\partial J }{ \\partial W^{[l]} } \\\\\n", + "v^{corrected}_{W^{[l]}} = \\frac{v_{W^{[l]}}}{1 - (\\beta_1)^t} \\\\\n", + "s_{W^{[l]}} = \\beta_2 s_{W^{[l]}} + (1 - \\beta_2) (\\frac{\\partial J }{\\partial W^{[l]} })^2 \\\\\n", + "s^{corrected}_{W^{[l]}} = \\frac{s_{W^{[l]}}}{1 - (\\beta_2)^t} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha \\frac{v^{corrected}_{W^{[l]}}}{\\sqrt{s^{corrected}_{W^{[l]}}}+\\varepsilon}\n", + "\\end{cases}$$\n", + "\n", + "\n", + "**Note** that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$. You need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_adam\n", + "\n", + "def update_parameters_with_adam(parameters, grads, v, s, t, learning_rate = 0.01,\n", + " beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8):\n", + " \"\"\"\n", + " Update parameters using Adam\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients for each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " v -- Adam variable, moving average of the first gradient, python dictionary\n", + " s -- Adam variable, moving average of the squared gradient, python dictionary\n", + " learning_rate -- the learning rate, scalar.\n", + " beta1 -- Exponential decay hyperparameter for the first moment estimates \n", + " beta2 -- Exponential decay hyperparameter for the second moment estimates \n", + " epsilon -- hyperparameter preventing division by zero in Adam updates\n", + "\n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " v -- Adam variable, moving average of the first gradient, python dictionary\n", + " s -- Adam variable, moving average of the squared gradient, python dictionary\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v_corrected = {} # Initializing first moment estimate, python dictionary\n", + " s_corrected = {} # Initializing second moment estimate, python dictionary\n", + " \n", + " # Perform Adam update on all parameters\n", + " for l in range(L):\n", + " # Moving average of the gradients. Inputs: \"v, grads, beta1\". Output: \"v\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v[\"dW\" + str(l+1)] = beta1*v[\"dW\" + str(l+1)]+(1-beta1)*grads[\"dW\" + str(l+1)]\n", + " v[\"db\" + str(l+1)] = beta1*v[\"db\" + str(l+1)]+(1-beta1)*grads[\"db\" + str(l+1)]\n", + " ### END CODE HERE ###\n", + "\n", + " # Compute bias-corrected first moment estimate. Inputs: \"v, beta1, t\". Output: \"v_corrected\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v_corrected[\"dW\" + str(l+1)] = v[\"dW\" + str(l+1)]/(1-np.power(beta1, t))\n", + " v_corrected[\"db\" + str(l+1)] = v[\"db\" + str(l+1)]/(1-np.power(beta1, t))\n", + " ### END CODE HERE ###\n", + "\n", + " # Moving average of the squared gradients. Inputs: \"s, grads, beta2\". Output: \"s\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " s[\"dW\" + str(l+1)] = beta2*s[\"dW\" + str(l+1)]+(1-beta2)*np.power(grads['dW' + str(l + 1)], 2)\n", + " s[\"db\" + str(l+1)] = beta2*s[\"db\" + str(l+1)]+(1-beta2)*np.power(grads['db' + str(l + 1)], 2)\n", + " ### END CODE HERE ###\n", + "\n", + " # Compute bias-corrected second raw moment estimate. Inputs: \"s, beta2, t\". Output: \"s_corrected\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " s_corrected[\"dW\" + str(l+1)] = s[\"dW\" + str(l+1)]/(1-beta2**t)\n", + " s_corrected[\"db\" + str(l+1)] = s[\"db\" + str(l+1)]/(1-beta2**t)\n", + " ### END CODE HERE ###\n", + "\n", + " # Update parameters. Inputs: \"parameters, learning_rate, v_corrected, s_corrected, epsilon\". Output: \"parameters\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " parameters[\"W\" + str(l+1)] = parameters[\"W\" + str(l+1)] - learning_rate*v_corrected[\"dW\" + str(l+1)]/(np.sqrt( s_corrected[\"dW\" + str(l+1)])+epsilon)\n", + " parameters[\"b\" + str(l+1)] = parameters[\"b\" + str(l+1)] - learning_rate*v_corrected[\"db\" + str(l+1)]/(np.sqrt( s_corrected[\"db\" + str(l+1)])+epsilon)\n", + " ### END CODE HERE ###\n", + "\n", + " return parameters, v, s" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "[[ 1.63178673 -0.61919778 -0.53561312]\n", + " [-1.08040999 0.85796626 -2.29409733]]\n", + "b1 = \n", + "[[ 1.75225313]\n", + " [-0.75376553]]\n", + "W2 = \n", + "[[ 0.32648046 -0.25681174 1.46954931]\n", + " [-2.05269934 -0.31497584 -0.37661299]\n", + " [ 1.14121081 -1.09244991 -0.16498684]]\n", + "b2 = \n", + "[[-0.88529979]\n", + " [ 0.03477238]\n", + " [ 0.57537385]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = \n", + "[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "s[\"dW1\"] = \n", + "[[ 0.00121136 0.00131039 0.00081287]\n", + " [ 0.0002525 0.00081154 0.00046748]]\n", + "s[\"db1\"] = \n", + "[[ 1.51020075e-05]\n", + " [ 8.75664434e-04]]\n", + "s[\"dW2\"] = \n", + "[[ 7.17640232e-05 2.81276921e-04 4.78394595e-04]\n", + " [ 1.57413361e-04 4.72206320e-04 7.14372576e-04]\n", + " [ 4.50571368e-04 1.60392066e-07 1.24838242e-03]]\n", + "s[\"db2\"] = \n", + "[[ 5.49507194e-05]\n", + " [ 2.75494327e-03]\n", + " [ 5.50629536e-04]]\n" + ] + } + ], + "source": [ + "parameters, grads, v, s = update_parameters_with_adam_test_case()\n", + "parameters, v, s = update_parameters_with_adam(parameters, grads, v, s, t = 2)\n", + "\n", + "print(\"W1 = \\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \\n\" + str(parameters[\"b2\"]))\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = \\n\" + str(v[\"db2\"]))\n", + "print(\"s[\\\"dW1\\\"] = \\n\" + str(s[\"dW1\"]))\n", + "print(\"s[\\\"db1\\\"] = \\n\" + str(s[\"db1\"]))\n", + "print(\"s[\\\"dW2\\\"] = \\n\" + str(s[\"dW2\"]))\n", + "print(\"s[\\\"db2\\\"] = \\n\" + str(s[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 = \n", + "[[ 1.63178673 -0.61919778 -0.53561312]\n", + " [-1.08040999 0.85796626 -2.29409733]]\n", + "b1 = \n", + "[[ 1.75225313]\n", + " [-0.75376553]]\n", + "W2 = \n", + "[[ 0.32648046 -0.25681174 1.46954931]\n", + " [-2.05269934 -0.31497584 -0.37661299]\n", + " [ 1.14121081 -1.09245036 -0.16498684]]\n", + "b2 = \n", + "[[-0.88529978]\n", + " [ 0.03477238]\n", + " [ 0.57537385]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = \n", + "[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "s[\"dW1\"] = \n", + "[[ 0.00121136 0.00131039 0.00081287]\n", + " [ 0.0002525 0.00081154 0.00046748]]\n", + "s[\"db1\"] = \n", + "[[ 1.51020075e-05]\n", + " [ 8.75664434e-04]]\n", + "s[\"dW2\"] = \n", + "[[ 7.17640232e-05 2.81276921e-04 4.78394595e-04]\n", + " [ 1.57413361e-04 4.72206320e-04 7.14372576e-04]\n", + " [ 4.50571368e-04 1.60392066e-07 1.24838242e-03]]\n", + "s[\"db2\"] = \n", + "[[ 5.49507194e-05]\n", + " [ 2.75494327e-03]\n", + " [ 5.50629536e-04]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You now have three working optimization algorithms (mini-batch gradient descent, Momentum, Adam). Let's implement a model with each of these optimizers and observe the difference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 - Model with different optimization algorithms\n", + "\n", + "Lets use the following \"moons\" dataset to test the different optimization methods. (The dataset is named \"moons\" because the data from each of the two classes looks a bit like a crescent-shaped moon.) " + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "train_X, train_Y = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have already implemented a 3-layer neural network. You will train it with: \n", + "- Mini-batch **Gradient Descent**: it will call your function:\n", + " - `update_parameters_with_gd()`\n", + "- Mini-batch **Momentum**: it will call your functions:\n", + " - `initialize_velocity()` and `update_parameters_with_momentum()`\n", + "- Mini-batch **Adam**: it will call your functions:\n", + " - `initialize_adam()` and `update_parameters_with_adam()`" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, layers_dims, optimizer, learning_rate = 0.0007, mini_batch_size = 64, beta = 0.9,\n", + " beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8, num_epochs = 10000, print_cost = True):\n", + " \"\"\"\n", + " 3-layer neural network model which can be run in different optimizer modes.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (2, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)\n", + " layers_dims -- python list, containing the size of each layer\n", + " learning_rate -- the learning rate, scalar.\n", + " mini_batch_size -- the size of a mini batch\n", + " beta -- Momentum hyperparameter\n", + " beta1 -- Exponential decay hyperparameter for the past gradients estimates \n", + " beta2 -- Exponential decay hyperparameter for the past squared gradients estimates \n", + " epsilon -- hyperparameter preventing division by zero in Adam updates\n", + " num_epochs -- number of epochs\n", + " print_cost -- True to print the cost every 1000 epochs\n", + "\n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " \"\"\"\n", + "\n", + " L = len(layers_dims) # number of layers in the neural networks\n", + " costs = [] # to keep track of the cost\n", + " t = 0 # initializing the counter required for Adam update\n", + " seed = 10 # For grading purposes, so that your \"random\" minibatches are the same as ours\n", + " m = X.shape[1] # number of training examples\n", + " \n", + " # Initialize parameters\n", + " parameters = initialize_parameters(layers_dims)\n", + "\n", + " # Initialize the optimizer\n", + " if optimizer == \"gd\":\n", + " pass # no initialization required for gradient descent\n", + " elif optimizer == \"momentum\":\n", + " v = initialize_velocity(parameters)\n", + " elif optimizer == \"adam\":\n", + " v, s = initialize_adam(parameters)\n", + " \n", + " # Optimization loop\n", + " for i in range(num_epochs):\n", + " \n", + " # Define the random minibatches. We increment the seed to reshuffle differently the dataset after each epoch\n", + " seed = seed + 1\n", + " minibatches = random_mini_batches(X, Y, mini_batch_size, seed)\n", + " cost_total = 0\n", + " \n", + " for minibatch in minibatches:\n", + "\n", + " # Select a minibatch\n", + " (minibatch_X, minibatch_Y) = minibatch\n", + "\n", + " # Forward propagation\n", + " a3, caches = forward_propagation(minibatch_X, parameters)\n", + "\n", + " # Compute cost and add to the cost total\n", + " cost_total += compute_cost(a3, minibatch_Y)\n", + "\n", + " # Backward propagation\n", + " grads = backward_propagation(minibatch_X, minibatch_Y, caches)\n", + "\n", + " # Update parameters\n", + " if optimizer == \"gd\":\n", + " parameters = update_parameters_with_gd(parameters, grads, learning_rate)\n", + " elif optimizer == \"momentum\":\n", + " parameters, v = update_parameters_with_momentum(parameters, grads, v, beta, learning_rate)\n", + " elif optimizer == \"adam\":\n", + " t = t + 1 # Adam counter\n", + " parameters, v, s = update_parameters_with_adam(parameters, grads, v, s,\n", + " t, learning_rate, beta1, beta2, epsilon)\n", + " cost_avg = cost_total / m\n", + " \n", + " # Print the cost every 1000 epoch\n", + " if print_cost and i % 1000 == 0:\n", + " print (\"Cost after epoch %i: %f\" %(i, cost_avg))\n", + " if print_cost and i % 100 == 0:\n", + " costs.append(cost_avg)\n", + " \n", + " # plot the cost\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('epochs (per 100)')\n", + " plt.title(\"Learning rate = \" + str(learning_rate))\n", + " plt.show()\n", + "\n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will now run this 3 layer neural network with each of the 3 optimization methods.\n", + "\n", + "### 5.1 - Mini-batch Gradient descent\n", + "\n", + "Run the following code to see how the model does with mini-batch gradient descent." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702405\n", + "Cost after epoch 1000: 0.668101\n", + "Cost after epoch 2000: 0.635288\n", + "Cost after epoch 3000: 0.600491\n", + "Cost after epoch 4000: 0.573367\n", + "Cost after epoch 5000: 0.551977\n", + "Cost after epoch 6000: 0.532370\n", + "Cost after epoch 7000: 0.514007\n", + "Cost after epoch 8000: 0.496472\n", + "Cost after epoch 9000: 0.468014\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcMAAAEWCAYAAAAadfxCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VVW6x/Hvm4TeIaEmdBBBqaFXG6igWEBRR1AHFUcc\ny8zc69xpjjPeac7Y6yB2xIaCimCXpvQiiBTpofdekrz3j3PQM7kJBJKTfZLz+zzPecxZu71Z4+Tn\n3nvtvczdERERiWcJQRcgIiISNIWhiIjEPYWhiIjEPYWhiIjEPYWhiIjEPYWhiIjEPYWhSCEwsw/N\nbFjQdYjI6VEYSrFmZmvM7Pyg63D3i9z9xaDrADCzL8xseADHrW5m75jZATNba2bXnmT9u81ss5nt\nNbPRZlYmv/sys/PM7DszO2hmn5tZg4hlH5rZ/ojPUTP7pvB/YylJFIYiJ2FmSUHXcFws1ZKLJ4Cj\nQC3gOuApM2uV24pm1g+4FzgPaAA0Bv6Yn32ZWTIwDvgdUB2YA7x+fMPwf5hUPP4BZgBvFuLvKSWR\nu+ujT7H9AGuA8/NYNgBYAOwm9AexdcSye4HvgX3At8DlEctuAKYDDwE7gD+H26YBDwK7gNXARRHb\nfAEMj9j+ROs2AqaEj/0JoT/8r+TxO/QBNgD/DWwGXgaqAe8D28L7fx9IDa//AJAFHAb2A4+H21sA\nHwM7gWXAVYX8v0MFQuHVPKLtJeCveaw/BvjfiO/nApvzsy/gFmBGjmMfAlrkcpyG4f5oGPS/q/rE\n9kdnhlIimVk7YDRwK1ADeAaYEHEp7nugJ1CF0BnJK2ZWJ2IXnYFVhM5MHohoWwYkA38HnjMzy6OE\nE607BpgVrus+4PqT/Dq1CZ0BNSAUBAnA8+Hv9QkFweMA7v4bYCow0kNnRiPNrAKhIBwD1ASGAE+a\nWcvcDmZmT5rZ7jw+i/KosTmQ6e7LI9oWArmeGYbbF+ZYt5aZ1cjHvv5jW3c/AKzM41hDganuviaP\nOkQAXSaVkusW4Bl3n+nuWR66n3cE6ALg7m+6+0Z3z3b314EVQKeI7Te6+2Pununuh8Jta9393+6e\nBbwI1CEUlrnJdV0zqw90BH7v7kfdfRow4SS/SzbwB3c/4u6H3H2Hu7/t7gfdfR+hsO59gu0HAGvc\n/fnw7zMfeBsYnNvK7v4zd6+ax6d1HseoCOzN0bYXqHSC9ffkWJfw+ifbV85tT3SsocALedQg8oNY\nvv8gUhANgGFmdkdEW2mgLoCZDQXuIXQZDUJ/YJMj1l2fyz43H//B3Q+GT/Qq5nH8vNZNBna6+8Ec\nx0o7we+yzd0PH/9iZuUJXcK9kNAlU4BKZpYYDt+cGgCdzWx3RFsSoUuuhWU/UDlHWxVCl4Lzs36V\n8D/35WNf+TqWmfUgdFb91klqF9GZoZRY64EHcpzVlHf318IjD/8NjARquHtVYDEQeckzWtO5bAKq\nhwPtuBMFYW61/AI4A+js7pWBXuF2y2P99cCXOfqiorvfltvBzOzpHKMxIz9L8qhxOZBkZs0i2toA\nea2/JLw8ct0t7r4jH/v6j23Dl4Gb5HKsYcA4d9+fRw0iP1AYSklQyszKRnySCIXdCDPrbCEVzKy/\nmVUiNODCCQ1AwcxuBM4qikLdfS2h0Y/3mVlpM+sKXHKKu6lE6D7hbjOrDvwhx/IthEZnHvc+0NzM\nrjezUuFPRzM7M48aR3jEaMwcn1zvAYbv240D7g/3dQ/gUvI++3wJ+KmZtTSzaoRGhr6Qz329A5xl\nZleaWdnw77/Q3b87vnMzKwdchS6RSj4pDKUkmEgoHI5/7nP3OcDNhAaW7CI0wOIGAHf/Fvgn8BWh\n4Dib0OjRonId0JUfR6q+Tuh+Zn49DJQDtgNfA5NyLH8EGGRmu8zs0fB9xb6EBs5sJHQJ929AGQrX\nz8J1bSU0WOc2d18CYGb1w2eW9QHcfRKhgUWfA2sJjbj9Q3725e7bgCsJ3SvdRehe75ActVxGaBTx\n54X8O0oJZe6a3FckSGb2OvCdu+c8wxORIqIzQ5EiFr5E2cTMEszsQmAg8G7QdYnEM40mFSl6tQnd\nE6tB6IH628KPO4hIQHSZVERE4p4uk4qISNwrUZdJk5OTvWHDhkGXISIiMWLu3Lnb3T3lZOuVqDBs\n2LAhc+bMCboMERGJEWa2Nj/r6TKpiIjEPYWhiIjEPYWhiIjEPYWhiIjEPYWhiIjEPYWhiIjEPYWh\niIjEvaiGoZldaGbLzGylmd2by/JfmdmC8GexmWWF52c76bbRsGHXQf4ycSnHsrKL4nAiIhIjohaG\nZpYIPAFcBLQErjGzlpHruPs/3L2tu7cFfk1oNu6d+dk2Gj5dupVnpqxi+Itz2H8kM9qHExGRGBHN\nM8NOwEp3X+XuR4GxhKaqycs1wGunuW2hGNatIX+54mymrdzOVU9/xZa9h6N9SBERiQHRDMN6wPqI\n7xvCbf+PmZUHLgTePo1tbzGzOWY2Z9u2bQUu+ppO9Rk1LJ21Ow5w+RPTWbZ5X4H3KSIisS1WBtBc\nAkx3952nuqG7P+vu6e6enpJy0nex5ss5Z9Tk9Vu7kpntXPHkdD5asrlQ9isiIrEpmmGYAaRFfE8N\nt+VmCD9eIj3VbaPirHpVGD+yO01rVuSWl+fy8CfLyc7W3I8iIiVRNMNwNtDMzBqZWWlCgTch50pm\nVgXoDYw/1W2jrU6Vcrx+a1euaF+Phz9ZwYhX5rLv8LGiLkNERKIsamHo7pnASGAysBR4w92XmNkI\nMxsRserlwEfufuBk20ar1hMpWyqRfw5uw+8HtOTT77Yy8HHdRxQRKWnMveRc+ktPT/dozmc4c9UO\nRr42n/2HM/nfK87i8napUTuWiIgUnJnNdff0k60XKwNoioXOjWvwwR09ODu1Cne/vpD/eecbDh/L\nCrosEREpIIXhKapZuSxjhnfm1l6NGTNzHZc8No2lm/YGXZaIiBSAwvA0JCUm8OuLz+Slmzqx6+Ax\nBj4xnRemr6YkXXIWEYknCsMC6NU8hUl39aR7kxrc9963DHt+Npv2HAq6LBEROUUKwwJKrliG0Td0\n5E8DWzF79U76PjSFt+du0FmiiEgxojAsBGbG9V0b8uGdPWlRuxK/eHMhN780V+82FREpJhSGhahh\ncgXG3tKV31x8JlNXbOP8f33J2FnrdJYoIhLjFIaFLDHBuLlXYybd1YuWdSpz77hvuG7UTNbuOHDy\njUVEJBAKwyhplFyB127uwgOXn8WiDXvo9/AURk1dRZbebyoiEnMUhlGUkGBc17kBH9/Ti+5Nkvnz\nB0u54qkZep2biEiMURgWgTpVyjFqWDqPXtOO9TsPMuCxqfzr4+UcydTba0REYoHCsIiYGZe2qcsn\n9/Sm/9l1ePTTFQx4dBpz1+4KujQRkbinMCxi1SuU5uEh7Xj+xo4cOJLJoKdncN+EJRw8mhl0aSIi\ncUthGJBzzqjJR/f0ZmiXBrwwYw0XPTKVmat2BF2WiEhcUhgGqGKZJP448CzG3tIFd7j62a91ligi\nEgCFYQzo0rgGk+7qybCuobPEix+ZqnuJIiJFSGEYI8qXDp0ljrm5M8eynMFPz+Bvk77TiFMRkSKg\nMIwx3ZokM+mungzukMZTX3zPwMens2TjnqDLEhEp0RSGMahS2VL8bVBrRt+Qzs4DRxn4+HQe/XQF\nx7Kygy5NRKREUhjGsHNb1OKju3vRv3Ud/vXxcq54cgYrtujtNSIihU1hGOOqli/NI0Pa8eR17cnY\nfYj+j03j31P0jlMRkcKkMCwmLj67DpPv6kXv5ik8MHEp1/z7a9bvPBh0WSIiJYLCsBhJqVSGZ6/v\nwIOD27B0414ufHgKY2ZqvkQRkYJSGBYzZsagDqlMursXbetX5X/e+YZhz89m055DQZcmIlJsKQyL\nqXpVy/HyTZ3508BWzF69k74PTeHNOet1ligichoUhsVYQoJxfdeGfHhnT1rUrsSv3lrE0NGzdC9R\nROQUKQxLgIbJFXj9lq786bKzmL9uN30fmsKoqRpxKiKSXwrDEiIhwbi+SwM+ursX3ZrU4M8fLOWK\nJ6ezdNPeoEsTEYl5UQ1DM7vQzJaZ2UozuzePdfqY2QIzW2JmX0a0rzGzb8LL5kSzzpKkbtVyjBqW\nzmPXtGPDrkNc8tg0/vnRMg4f0ztORUTyYtEacGFmicBy4AJgAzAbuMbdv41YpyowA7jQ3deZWU13\n3xpetgZId/ft+T1menq6z5mj3Dxu14Gj/OmDbxk3L4MmKRX4+6DWdGhQPeiyRESKjJnNdff0k60X\nzTPDTsBKd1/l7keBscDAHOtcC4xz93UAx4NQCke1CqX511VteemmThw+ls2gp7/ivglLOHBE8yWK\niESKZhjWA9ZHfN8QbovUHKhmZl+Y2VwzGxqxzIFPwu235HUQM7vFzOaY2Zxt27YVWvElSa/mKUy+\nuxfXdwnNl9jv4SnMWJnvE24RkRIv6AE0SUAHoD/QD/idmTUPL+vh7m2Bi4DbzaxXbjtw92fdPd3d\n01NSUoqk6OKoYpkk7h94Fm/c2pVSiQlcO2om901YwqGjupcoIhLNMMwA0iK+p4bbIm0AJrv7gfC9\nwSlAGwB3zwj/cyvwDqHLrlJAnRpVZ+LPe3JDt4a8MGMNFz86lXnrdgVdlohIoKIZhrOBZmbWyMxK\nA0OACTnWGQ/0MLMkMysPdAaWmlkFM6sEYGYVgL7A4ijWGlfKlU7kvktbMWZ4Z45mZjPoqRk8OHkZ\nRzM1X6KIxKeohaG7ZwIjgcnAUuANd19iZiPMbER4naXAJGARMAsY5e6LgVrANDNbGG7/wN0nRavW\neNWtaTKT7urJle1TefzzlVz+5HTNlygicSlqj1YEQY9WnL7JSzbz63HfsP9IJvde2IIbuzfEzIIu\nS0SkQGLh0QopRvq1qs3ku3rRs2ky97//LT99cQ479h8JuiwRkSKhMJQfpFQqw6hh6fzx0lZMW7md\nCx+ZytQVelxFREo+haH8BzNjWLeGjL+9O1XKleL652bxj8nfkZmlwTUiUnIpDCVXZ9apzHsje3B1\nehpPfP49142ayZa9h4MuS0QkKhSGkqdypRP526DW/OuqNizasIf+j05l2gq9uUZESh6FoZzUFe1T\nee+O7lSvUJrrR8/k4U+Wa65EESlRFIaSL01rVuLd27tzebt6PPzJCoaNnsV2jTYVkRJCYSj5Vr50\nEv8c3Ia/X9ma2Wt2cvEjU5m5akfQZYmIFJjCUE6JmXFVxzTevb07Fcokce2omTz1xfdk67KpiBRj\nCkM5LWfWqcyEkd258Kza/G3Sdwx/aQ67DhwNuiwRkdOiMJTTVqlsKR6/ph1/GtiKaSu2M+CxaSxY\nvzvoskRETpnCUArEzLi+a0Peuq0rAIOfnsFLX62hJL3zVkRKPoWhFIrWqVX54Oc96Nkshd+PX8Kd\nYxdw4Ehm0GWJiOSLwlAKTdXypRk1NJ1f9TuD9xdt5JLHp7F0096gyxIROSmFoRSqhATj9nOa8srw\nzuw/nMnAJ6bz8tdrddlURGKawlCioluTZCbe2ZMujWvwu3cXc/uYeew5dCzoskREcqUwlKhJrliG\nF27oyK8vasFHS7Zw8SNTmbt2Z9BliYj8PwpDiaqEBOPW3k14c0RXEhLgqme+5vHPVujdpiISUxSG\nUiTa1a/GBz/vSf+z6/DgR8v5yaiZbN6jKaFEJDYoDKXIVC5bikeGtOUfg1qzcMNuLnpkCp98uyXo\nskREFIZStMyMwelpvH9HD+pWLcfwl+bwh/GLOXwsK+jSRCSOKQwlEI1TKjLuZ90Y3qMRL361lsue\nmM7yLfuCLktE4pTCUAJTJimR3w5oyfM3dmT7/iNc8tg0Xv5Kr3ITkaKnMJTAnXNGTT68s1fomcTx\nS7j5pTns0MTBIlKEFIYSE1IqleH5Gzry+wEtmbJiO/0ensrn320NuiwRiRMKQ4kZCQnGTT0aMWFk\nd5IrlubGF2bz+/GLOXRUg2tEJLoUhhJzWtSuzLu3d+fmno146au1XPzoVOas0ZtrRCR6FIYSk8qW\nSuQ3/Vsy5ubOHMvKZvAzX/Hn97/VIxgiEhUKQ4lp3ZokM/muXlzXuT6jpq0Ov990V9BliUgJE9Uw\nNLMLzWyZma00s3vzWKePmS0wsyVm9uWpbCvxoUKZJP582dm8OrwzRzKzGfz0DP7y4VKdJYpIoYla\nGJpZIvAEcBHQErjGzFrmWKcq8CRwqbu3Agbnd1uJP92bJjPprp5c3TGNZ75cxSWPTWPh+t1BlyUi\nJUA0zww7ASvdfZW7HwXGAgNzrHMtMM7d1wG4+9ZT2FbiUKWypfjLFa158aZO7DucyeVPTucvE5dq\nxKmIFEg0w7AesD7i+4ZwW6TmQDUz+8LM5prZ0FPYFgAzu8XM5pjZnG3bthVS6RLrejdP4aN7eoXO\nEqes4qJHpvD1qh1BlyUixVTQA2iSgA5Af6Af8Dsza34qO3D3Z9093d3TU1JSolGjxKjK4bPEMcM7\nk+0w5Nmv+c0737D/SGbQpYlIMRPNMMwA0iK+p4bbIm0AJrv7AXffDkwB2uRzWxEAujUNjTj9aY9G\njJm1jn4PTWHKcl0lEJH8i2YYzgaamVkjMysNDAEm5FhnPNDDzJLMrDzQGViaz21FflCudCK/G9CS\nt0Z0pUypBIaOnsV/vbWQPQePBV2aiBQDUQtDd88ERgKTCQXcG+6+xMxGmNmI8DpLgUnAImAWMMrd\nF+e1bbRqlZKjQ4PqTPx5T27t3Zi352Vw3r++5L2FGzUThoickJWkPxLp6ek+Z86coMuQGLE4Yw+/\nHvcN32Ts4dwWNbl/YCtSq5UPuiwRKUJmNtfd00+2XtADaESi5qx6VXjnZ934bf8z+er7HZz/ry95\n/LMVHMnUYxgi8p8UhlKiJSUmMLxnYz75RW/ObVGTBz9aTr+HpvD5Mk0PJSI/UhhKXKhXtRxPXteB\nl27qRIIZNz4/m5++MJvV2w8EXZqIxACFocSVXs1T+PCunvz6ohbMXL2Tvg99yf9OXMrewxp1KhLP\nFIYSd8okJXJr7yZ89sveXN6uHv+euopz/vEFL3+1hmNZ2UGXJyIBUBhK3KpZqSx/H9SGCbf3oGnN\nivxu/BL6PTSFj5Zs1qMYInFGYShx7+zUKoy9pQujhqZjBre8PJfBT3/FnDU7gy5NRIqIwlAEMDPO\nb1mLyXf14oHLz2LdzoMMevorhr84m2Wb9wVdnohEWb7C0MwG56dNpLhLSkzgus4N+OJXffhVvzOY\nuWonFz4yhTtem8/KrfuDLk9EoiRfb6Axs3nu3v5kbUHTG2iksO06cJR/T13FCzPWcPhYFpe2qcvI\nc5vStGaloEsTkXzI7xtoThiGZnYRcDFwFfB6xKLKQEt371TQQguTwlCiZcf+Izw7dRUvzVjLoWNZ\nXNCyFrf1aUL7+tWCLk1ETqCwwrAN0Ba4H/h9xKJ9wOfuvqughRYmhaFE284DR3lxxhpe/GoNuw8e\no1Oj6tzaqzHnnFGThAQLujwRyaFQwjBiZ6Xc/Vj452pAmrsvKniZhUthKEXlwJFMxs5ez+hpq8nY\nfYhmNStyc6/GXNa2HqWTNC5NJFYUdhh+AVxKaGb6ucBWYIa7313AOguVwlCK2rGsbD5YtImnv/ye\n7zbvo1blMtzQrRHXdq5PlXKlgi5PJO4VdhjOd/d2Zjac0FnhH8xskbu3LoxiC4vCUILi7kxdsZ1n\np6xi2srtVCidyJBO9bmhW0PSqmvaKJGg5DcMk/K5vyQzq0NoIM1vClSZSAlkZvRqnkKv5iks2biH\nf08JjUB9fvpq+rWqzU09GpHeoBpmuq8oEovyG4b3E5p1frq7zzazxsCK6JUlUny1qluFh4e0478v\nasGLM9by2qx1fLh4M61Tq3BT90ZcfHYd3VcUiTGa6V4kyg4ezeTteRk8P301q7YdoGalMgzt2oBr\nOzegeoXSQZcnUqIV9j3DVOAxoHu4aSpwp7tvKFCVhUxhKLEsO9uZsmIbo6evYcrybZRJSuDydvW4\nsXsjzqith/hFoqGww/BjYAzwcrjpJ8B17n5BgaosZApDKS5Wbt3H6OlrGDdvA4ePZdO9aQ2Gdm3I\neS1qkpSoS6gihaWww3CBu7c9WVvQFIZS3Ow6cJQxs9bx6tdr2bjnMHWrlOW6Lg24umMayRXLBF2e\nSLFX2GH4KfA88Fq46RrgRnc/r0BVFjKFoRRXmVnZfLJ0Ky9/vYbpK3dQOjGBAa3rMLRbQ9qmVQ26\nPJFiq7DDsAGhe4ZdAQdmAHe4+/qCFlqYFIZSEqzcuo+Xv1rLW3M3cOBoFm3TqnLn+c3o0zxFj2aI\nnKLCDsMXgbuOv4vUzKoDD7r7TQWutBApDKUk2Xf4GO/Mz+DZKavYsOsQHRpU4xd9m9OtSXLQpYkU\nG1F5A83J2oKmMJSS6GhmNm/OXc9jn65k897DdGpUndvPaUqvZsk6UxQ5ifyGYX6HrSWEX9B9fOfV\nyf8D+yJSAKWTfpxw+A+XtGT9zoMMGz2LAY9N44NFm8jKLjnPCosEJb+B9k/gKzN7M/x9MPBAdEoS\nkdyULZXIjd0bcV3nBrw7P4Onv/ye28fMI7VaOW7o1pCrO6ZRqaxeDi5yOvL9BhozawmcG/76mbt/\nG7WqTpMuk0o8ycp2Pv52M89NW83sNbuoWCaJwemp/KRLA5qkVAy6PJGYUKj3DAtQxIXAI0AiMMrd\n/5pjeR9gPLA63DTO3e8PL1tDaBLhLCAzP7+MwlDi1aINu3lu2momfrOJY1lO96Y1+EnnBpzfshal\n9BC/xLHAw9DMEoHlwAXABmA2cE3kGWU4DH/p7gNy2X4NkO7u2/N7TIWhxLut+w7zxuz1jJm5jo17\nDpNcsQxXtq/H4PQ0mtbU2aLEn8Kewul0dAJWuvuqcEFjgYFAzF1eFSkpalYqy8hzm3Fbn6Z8/t1W\nXp+znlHTVvPMlFV0aFCNK9un0r91HU08LJJDNMOwHhD5UP4GoHMu63Uzs0VABqGzxCXhdgc+MbMs\n4Bl3fza3g5jZLcAtAPXr1y+s2kWKtcQE4/yWtTi/ZS227jvMuHkZvDlnPf/zzjfc994S+rasxZUd\nUunVLIXEBD2eIRL04xHzgPruvt/MLgbeBZqFl/Vw9wwzqwl8bGbfufuUnDsIh+SzELpMWlSFixQX\nNSuVZUTvJtzaqzGLNuzh7XkbmLBwI+8v2kStymW4on0qgzqkatCNxLVohmEGkBbxPTXc9gN33xvx\n80Qze9LMkt19u7tnhNu3mtk7hC67/r8wFJH8MTPapFWlTVpVftP/TD5bupW35m7g2SmreOqL72mT\nWoXL2tXjkjZ19ZJwiTvRHECTRGgAzXmEQnA2cG3EZVDMrDawxd3dzDoBbwENgPJAgrvvM7MKwMfA\n/e4+6UTH1AAakVO3dd9hxs/fyLsLMliycS+JCUavZskMTk/jvDNrUiYpMegSRU5b4ANo3D3TzEYC\nkwk9WjHa3ZeY2Yjw8qeBQcBtZpYJHAKGhIOxFvBO+FVTScCYkwWhiJyempXKcnOvxtzcqzHLt+zj\nnfkZvDMvg5+9Oo9q5UsxsG09bujWkIbJFYIuVSRqovqcYVHTmaFI4cjKdqau2Mabczfw8ZItZGZn\nc2mbutx+TlOa1aoUdHki+Rb4maGIFF+JCUafM2rS54yabN17mFHTVvPK12t5d8FGLmxVm9vPacrZ\nqVWCLlOk0OjMUETyZeeBozw/fTUvzFjDvsOZ9GqewshzmtKpUfWgSxPJU+BvoAmCwlAk+vYePsYr\nX6/luamr2XHgKO3rV+Xmno3p26q2nlmUmKMwFJGoOnQ0izfmrOe5aatZt/MgadXLcWO3RgxKT6Wy\nZs+QGKEwFJEiEZo9YwvPTVvF7DW7KFcqkcva1eUnXRrQqq7uK0qwFIYiUuQWZ+wJD7TJ4PCxbNqk\nVWVIxzQGtK6juRYlEApDEQnMnkPHeHvuBsbOXsfyLfspVyqR/q3rMLhDKp0aVSf8DLFI1CkMRSRw\n7s6C9bt5Y856JizYyIGjWTSoUZ5B7VO5skMqdauWC7pEKeEUhiISUw4ezeTDbzbz5tz1fL1qJwkG\nfc6oybWd6nNOi5oaiSpRoTAUkZi1fudBXp+9ntfnrGfbviPUrVKWIZ3qM6RjGjUrlw26PClBFIYi\nEvOOZWXzybdbGDNrHVNXbCcpwejbqhY/6dKAro1r6N6iFJhexyYiMa9UYgIXnV2Hi86uw+rtBxgz\ncy1vzt3AxG820ySlAtd1bsCVHVKpUk4jUSW6dGYoIjHl8LEsPli0iVdmrmX+ut2ULZXAgNZ1uaZT\nGu3rV9PZopwSXSYVkWJvccYeXp25jgkLMjhwNItmNStydcc0BratR0olTUAsJ6cwFJES48CRTN5f\ntJGxs9czf93uHyYgvqxdPfq2rE250pqAWHKnMBSREmnFln2Mm5/B+PkZbNxzmEplk7i8XT2GdKxP\ny7qVgy5PYozCUERKtOxs5+tVO3hjznomLt7M0czQ69+uSk9lQOu6GnQjgMJQROLI7oNHGTcv44fX\nv5VOSuCClrUY1D6VHs2SKZWYEHSJEhCFoYjEHXdnccZe3pq7nvELN7L74DFqVChN/9Z1GNi2Hu3r\nV9Vo1DijMBSRuHY0M5svlm1l/IKNfLJ0C0cys0mtVo4BresyoHUdWtWtrGCMAwpDEZGwfYePMWnx\nZt5ftInpK7eTme00Tq7ApW3rclnbejRMrhB0iRIlCkMRkVzsOnCUSUs2M2HBRr5evQN3aJtWlYFt\n69K/dR1qVtK7UUsShaGIyEls2nOI9xZu5J35G1m6aS8JBl2b1OCS1nXp16o21SqUDrpEKSCFoYjI\nKVixZR/vLdzIhIUbWbPjIEkJRtcmNeh/dh36tqpNdQVjsaQwFBE5De7Oko17+eCbTUz8ZhNrdxwk\nMcHo1qQGF59dh34KxmJFYSgiUkDHg3FiOBjXhIOxe9NkBrapS7+zalOxjCb/iWUKQxGRQuTufLtp\nLx8s2sSEhRvZsOsQZZISOP/MWgxoXYdzWtSkbCm9IzXWKAxFRKLE3Zm3bhfjF2zkg0Wb2HHgKOVL\nJ3JeOBg6sER8AAAQqElEQVR7N09RMMaImAhDM7sQeARIBEa5+19zLO8DjAdWh5vGufv9+dk2NwpD\nESlqmVnZzFy9k/cXbWLS4k3sOniMSmWSuKBVLS5pXZeezZJJ0uvgAhN4GJpZIrAcuADYAMwGrnH3\nbyPW6QP80t0HnOq2uVEYikiQjmVlM+P7Hby/cCOTlmxm3+FMkiuW4Yr29RjUIZXmtSoFXWLcyW8Y\nRvPObydgpbuvChc0FhgInDDQCmFbEZFAlEpMoHfzFHo3T+HPl5/FF8u28fbcDYyetppnp6yibVpV\nru/SgP6t6+gyaoyJZhjWA9ZHfN8AdM5lvW5mtgjIIHSWuOQUtsXMbgFuAahfv34hlC0iUnBlkhLp\n16o2/VrVZvv+I7w7P4Mxs9bxizcX8sDEpVyVnsbQrg2oW7Vc0KUKEPSF7HlAfXdvDTwGvHuqO3D3\nZ9093d3TU1JSCr1AEZGCSq5YhuE9G/PpPb15dXhn0htU49kp39Pr759zz+sLWLppb9Alxr1onhlm\nAGkR31PDbT9w970RP080syfNLDk/24qIFDdmoWcUuzdNZv3Og4yevprXZ69n3PwMzm1Rkz9fdpbO\nFAMSzTPD2UAzM2tkZqWBIcCEyBXMrLaF51Axs07henbkZ1sRkeIsrXp5/nBJK2bcey6/7Nucmat2\ncOHDU3hv4cagS4tLUQtDd88ERgKTgaXAG+6+xMxGmNmI8GqDgMVmthB4FBjiIbluG61aRUSCUrV8\naUae24yJd/akSc2K3PHafO55fQH7Dh8LurS4oofuRURiRGZWNo99tpLHPltB3arleOjqtnRsWD3o\nsoq1/D5aEfQAGhERCUtKTODuC5rz5ohuJJhx9TNf8eDkZRzLyg66tBJPYSgiEmM6NKjGxDt7cmX7\nVB7/fCVXPjWD5Vv2BV1WiaYwFBGJQRXLJPGPwW146rr2rN95kAGPTuOxT1foLDFKFIYiIjHsorPr\n8PE9venbqhb//Hg5Ax+fzuKMPUGXVeIoDEVEYlxyxTI8fm17nrm+A9v2H+HSx6fx+/GL2XNII04L\ni8JQRKSY6NeqNp/c05vruzTgla/Xcu6DX/DmnPVkZ5ecpwKCojAUESlGqpQrxR8HnsV7d/SgQY3y\n/OqtRVz97Fd8t1mvdCsIhaGISDHUqm4V3hrRjb9f2ZqVW/fT/9Fp/Pn9b9l/JDPo0oolhaGISDGV\nkGBc1TGNz37Rh6vS03hu+mrOffAL3pi9nixdOj0lCkMRkWKuWoXS/OWKsxl3WzfqVSvHf729iP6P\nTmXK8m1Bl1ZsKAxFREqIdvWrMe62bjxxbXsOHM1k6OhZDB09Sw/s54PCUESkBDEz+reuwyf39Oa3\n/c9k/rpdXPTIVH737mJ27D8SdHkxS2EoIlIClUlKZHjPxnz5q3O4rnN9xsxaR59/fMETn6/k4FEN\nsslJs1aIiMSBFVv28bdJ3/HJ0q2kVCrDnec14+qOaZRKLNnnRJq1QkREftCsViVGDevImyO60qB6\neX777mLO/9eXvD13g0aeojAUEYkrHRtW580RXXluWDoVSifxizcXcsFDXzJh4ca4DkVdJhURiVPZ\n2c5H327moY9XsGzLPhqnVOBnfZoysG3dEnP5NL+XSRWGIiJxLjvbmbh4E098/j1LN+0ltVo5buvT\nhKvSi/89RYWhiIicEnfns++28vjnK5m/bjcNapTnnguac0nruiQkWNDlnRYNoBERkVNiZpx3Zi3G\n3daN0TekU65UIneOXcDFj05l8pLNlKSTp5wUhiIi8h/MjHNb1GLiz3vyyJC2HD6Wxa0vz2XAY9P4\nqISGoi6TiojICWVmZfPugo089tkK1u44SKu6lbnj3Gb0bVkr5i+f6p6hiIgUquOh+PhnK1iz4yAt\naldi5LlNueisOiTGaCgqDEVEJCoys7J5f9EmHvtsBd9vO0CTlArcFqOPZCgMRUQkqrKynYnfbOKJ\nz1fy3eZ91KtajhG9G3NVxzTKJCUGXR6gMBQRkSLi7ny+bCuPf7aSeet2k1qtHL/o25yBbeoFfk9R\nj1aIiEiROD769O3buvHyTztRtXwp7n59IRc/OpXpK7cHXV6+KAxFRKRQmBk9m6Uw4fYePHpNOw4d\ny+K6UTP5+6TvyMzKDrq8E1IYiohIoUpIMC5tU5fJd/ViSMc0nvzie64bNZOtew8HXVqeohqGZnah\nmS0zs5Vmdu8J1utoZplmNiiibY2ZfWNmC8xMNwJFRIqZsqUS+euVrfnn4DYs3LCbix+dxvx1u4Iu\nK1dRC0MzSwSeAC4CWgLXmFnLPNb7G/BRLrs5x93b5ufmp4iIxKYrO6Qy/vYelC+dyNDnZsVkIEbz\nzLATsNLdV7n7UWAsMDCX9e4A3ga2RrEWEREJ0Bm1KzH2li5Ur1g6JgMxmmFYD1gf8X1DuO0HZlYP\nuBx4KpftHfjEzOaa2S15HcTMbjGzOWY2Z9u2bYVQtoiIREPdquV47ebYDMSgB9A8DPy3u+c2zKiH\nu7cldJn1djPrldsO3P1Zd0939/SUlJRo1ioiIgWUMxDnxUggRjMMM4C0iO+p4bZI6cBYM1sDDAKe\nNLPLANw9I/zPrcA7hC67iohIMVe3arn/uGQ6d23wgRjNMJwNNDOzRmZWGhgCTIhcwd0buXtDd28I\nvAX8zN3fNbMKZlYJwMwqAH2BxVGsVUREilCdKqFATK5YmmGjZzF37c5A64laGLp7JjASmAwsBd5w\n9yVmNsLMRpxk81rANDNbCMwCPnD3SdGqVUREil4oELuSUqkMQ5+bxZw1wQWi3k0qIiKB2rL3MNc8\n+zVb9x3hleGdaZtWtdD2rXeTiohIsVCrclnG3NyF6hVKM/S5mSzO2FPkNSgMRUQkcLWrlGXMzZ2p\nVLYU1z83k2Wb9xXp8RWGIiISE1KrlefV4Z0pnZTAdaO+5vtt+4vs2ApDERGJGQ2TK/Dq8C6cWacy\nVcuVKrLjJhXZkURERPKhac2KvPzTzkV6TJ0ZiohI3FMYiohI3FMYiohI3FMYiohI3FMYiohI3FMY\niohI3FMYiohI3FMYiohI3CtRs1aY2TZgbQF3kwxsL4RySir1z4mpf05M/ZM39c2JnW7/NHD3lJOt\nVKLCsDCY2Zz8TPcRr9Q/J6b+OTH1T97UNycW7f7RZVIREYl7CkMREYl7CsP/79mgC4hx6p8TU/+c\nmPonb+qbE4tq/+ieoYiIxD2dGYqISNxTGIqISNxTGEYwswvNbJmZrTSze4OuJ0hmlmZmn5vZt2a2\nxMzuDLdXN7OPzWxF+J/Vgq41SGaWaGbzzez98Hf1T5iZVTWzt8zsOzNbamZd1T8/MrO7w//fWmxm\nr5lZ2XjuHzMbbWZbzWxxRFue/WFmvw7/rV5mZv0KenyFYZiZJQJPABcBLYFrzKxlsFUFKhP4hbu3\nBLoAt4f7417gU3dvBnwa/h7P7gSWRnxX//zoEWCSu7cA2hDqJ/UPYGb1gJ8D6e5+FpAIDCG+++cF\n4MIcbbn2R/hv0RCgVXibJ8N/w0+bwvBHnYCV7r7K3Y8CY4GBAdcUGHff5O7zwj/vI/SHrB6hPnkx\nvNqLwGXBVBg8M0sF+gOjIprVP4CZVQF6Ac8BuPtRd9+N+idSElDOzJKA8sBG4rh/3H0KsDNHc179\nMRAY6+5H3H01sJLQ3/DTpjD8UT1gfcT3DeG2uGdmDYF2wEyglrtvCi/aDNQKqKxY8DDwX0B2RJv6\nJ6QRsA14PnwZeZSZVUD9A4C7ZwAPAuuATcAed/8I9U9OefVHof+9VhjKCZlZReBt4C533xu5zEPP\n5cTlszlmNgDY6u5z81onnvuH0FlPe+Apd28HHCDHJb947p/wva+BhP6joS5Qwcx+ErlOPPdPbqLd\nHwrDH2UAaRHfU8NtccvMShEKwlfdfVy4eYuZ1QkvrwNsDaq+gHUHLjWzNYQuqZ9rZq+g/jluA7DB\n3WeGv79FKBzVPyHnA6vdfZu7HwPGAd1Q/+SUV38U+t9rheGPZgPNzKyRmZUmdHN2QsA1BcbMjND9\nnqXu/q+IRROAYeGfhwHji7q2WODuv3b3VHdvSOjflc/c/SeofwBw983AejM7I9x0HvAt6p/j1gFd\nzKx8+P9r5xG6L6/++U959ccEYIiZlTGzRkAzYFZBDqQ30EQws4sJ3QdKBEa7+wMBlxQYM+sBTAW+\n4cd7Yv9D6L7hG0B9QtNlXeXuOW96xxUz6wP80t0HmFkN1D8AmFlbQoOLSgOrgBsJ/Qe4+gcwsz8C\nVxMauT0fGA5UJE77x8xeA/oQmqppC/AH4F3y6A8z+w1wE6H+u8vdPyzQ8RWGIiIS73SZVERE4p7C\nUERE4p7CUERE4p7CUERE4p7CUERE4p7CUCRGmFmf47NfnOb2l5nZ7wuzpoh9P2Bm681sf472Mmb2\nenj2gJnhV/cdXzYsPNvACjMbFtE+1syaRaNOkdOlMBQpOf4LeLKgOwm/ODqn98j9Rcg/BXa5e1Pg\nIeBv4X1UJ/ScWOfwdn+ImH7nqXCtIjFDYShyCszsJ2Y2y8wWmNkzx6eNMbP9ZvZQeH66T80sJdze\n1sy+NrNFZvbO8UAws6Zm9omZLTSzeWbWJHyIihFzAL4afjsJZvZXC80tucjMHsylrubAEXffHv7+\ngpk9bWZzzGx5+F2qx+df/IeZzQ7v69Zwex8zm2pmEwi9KeY/uPvXES9MjhQ5q8BbwHnhmvsBH7v7\nTnffBXzMj9PzTAXOzyN0RQKhMBTJJzM7k9AbQ7q7e1sgC7guvLgCMMfdWwFfEjorAngJ+G93b03o\nbT7H218FnnD3NoTeSXk8aNoBdxGaU7Mx0D38VpvLgVbh/fw5l/K6A/NytDUkdFbWH3jazMoSOpPb\n4+4dgY7AzeHXWUHo3aF3unvzU+iWH2YPcPdMYA9QgxPMKuDu2YSm3GlzCscRiSqFoUj+nQd0AGab\n2YLw98bhZdnA6+GfXwF6hOf0q+ruX4bbXwR6mVkloJ67vwPg7ofd/WB4nVnuviEcGAsIBdoe4DDw\nnJldARxfN1IdQlMmRXrD3bPdfQWh16G1APoCQ8P1zyQUXMfv380Kzw1XFLYSmq1BJCboMoVI/hnw\norv/Oh/rnu57Do9E/JwFJLl7ppl1IhS+g4CRwLk5tjsEVDlJDU7od7jD3SdHLgi/X/XAadR7fPaA\nDeHLnlWAHeH2PhHrpQJfRHwvG65ZJCbozFAk/z4FBplZTQgNEjGzBuFlCYSCCuBaYJq77wF2mVnP\ncPv1wJfuvo9QeFwW3k8ZMyuf10HDc0pWcfeJwN3kfnlxKdA0R9tgM0sI349sDCwDJgO3hafnwsya\nhyfdPV2RswoMIjR7h4eP09fMqoXvk/YNtx3XHFhcgOOKFCqdGYrkk7t/a2a/BT4yswTgGHA7obfp\nHwA6hZdvJXRvEUJB8XQ47I7P3AChYHzGzO4P72fwCQ5dCRgfvudnwD25rDMF+KeZmf/49v11hKa1\nqQyMcPfDZjaK0KXXeeGBLtuAy072u5vZ3wmFfHkz2wCMcvf7CE3z9bKZrQR2EprOCnffaWZ/IjQ1\nGsD9EbMN1AIOhad5EokJmrVCpBCY2X53rxhwDY8A77n7J2b2AvC+u78VZE25MbO7gb3u/lzQtYgc\np8ukIiXH/wJ5Xm6NIbv58XEMkZigM0MREYl7OjMUEZG4pzAUEZG4pzAUEZG4pzAUEZG4pzAUEZG4\n93+o7NbUCU7wmwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.796666666667\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, optimizer = \"gd\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Gradient Descent optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 - Mini-batch gradient descent with momentum\n", + "\n", + "Run the following code to see how the model does with momentum. Because this example is relatively simple, the gains from using momemtum are small; but for more complex problems you might see bigger gains." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702413\n", + "Cost after epoch 1000: 0.668167\n", + "Cost after epoch 2000: 0.635388\n", + "Cost after epoch 3000: 0.600591\n", + "Cost after epoch 4000: 0.573444\n", + "Cost after epoch 5000: 0.552058\n", + "Cost after epoch 6000: 0.532458\n", + "Cost after epoch 7000: 0.514101\n", + "Cost after epoch 8000: 0.496652\n", + "Cost after epoch 9000: 0.468160\n" + ] + }, + { + "data": { + "image/png": "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\ne/8fvl8UGzM29/QAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.796666666667\n" + ] + }, + { + "data": { + "image/png": "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\nYQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, beta = 0.9, optimizer = \"momentum\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Momentum optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.3 - Mini-batch with Adam mode\n", + "\n", + "Run the following code to see how the model does with Adam." + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702166\n", + "Cost after epoch 1000: 0.167845\n", + "Cost after epoch 2000: 0.141316\n", + "Cost after epoch 3000: 0.138788\n", + "Cost after epoch 4000: 0.136066\n", + "Cost after epoch 5000: 0.134240\n", + "Cost after epoch 6000: 0.131127\n", + "Cost after epoch 7000: 0.130216\n", + "Cost after epoch 8000: 0.129623\n", + "Cost after epoch 9000: 0.129118\n" + ] + }, + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.94\n" + ] + }, + { + "data": { + "image/png": "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\nRLUAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, optimizer = \"adam\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Adam optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.4 - Summary\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **optimization method**\n", + " \n", + " **accuracy**\n", + " \n", + " **cost shape**\n", + "
\n", + " Gradient descent\n", + " \n", + " 79.7%\n", + " \n", + " oscillations\n", + "
\n", + " Momentum\n", + " \n", + " 79.7%\n", + " \n", + " oscillations\n", + "
\n", + " Adam\n", + " \n", + " 94%\n", + " \n", + " smoother\n", + "
\n", + "\n", + "Momentum usually helps, but given the small learning rate and the simplistic dataset, its impact is almost negligeable. Also, the huge oscillations you see in the cost come from the fact that some minibatches are more difficult thans others for the optimization algorithm.\n", + "\n", + "Adam on the other hand, clearly outperforms mini-batch gradient descent and Momentum. If you run the model for more epochs on this simple dataset, all three methods will lead to very good results. However, you've seen that Adam converges a lot faster.\n", + "\n", + "Some advantages of Adam include:\n", + "- Relatively low memory requirements (though higher than gradient descent and gradient descent with momentum) \n", + "- Usually works well even with little tuning of hyperparameters (except $\\alpha$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**References**:\n", + "\n", + "- Adam paper: https://arxiv.org/pdf/1412.6980.pdf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "Ckiv2", + "launcher_item_id": "eNLYh" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Coursera/Lesson2/Week3/TensorFlow_Tutorial_v3b.ipynb b/Coursera/Lesson2/Week3/TensorFlow_Tutorial_v3b.ipynb new file mode 100644 index 0000000..3d5c254 --- /dev/null +++ b/Coursera/Lesson2/Week3/TensorFlow_Tutorial_v3b.ipynb @@ -0,0 +1,1872 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "zVtw6n7bT110" + }, + "source": [ + "# TensorFlow Tutorial\n", + "\n", + "Welcome to this week's programming assignment. Until now, you've always used numpy to build neural networks. Now we will step you through a deep learning framework that will allow you to build neural networks more easily. Machine learning frameworks like TensorFlow, PaddlePaddle, Torch, Caffe, Keras, and many others can speed up your machine learning development significantly. All of these frameworks also have a lot of documentation, which you should feel free to read. In this assignment, you will learn to do the following in TensorFlow: \n", + "\n", + "- Initialize variables\n", + "- Start your own session\n", + "- Train algorithms \n", + "- Implement a Neural Network\n", + "\n", + "Programing frameworks can not only shorten your coding time, but sometimes also perform optimizations that speed up your code. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Updates\n", + "\n", + "#### If you were working on the notebook before this update...\n", + "* The current notebook is version \"v3b\".\n", + "* You can find your original work saved in the notebook with the previous version name (it may be either TensorFlow Tutorial version 3\" or \"TensorFlow Tutorial version 3a.) \n", + "* To view the file directory, click on the \"Coursera\" icon in the top left of this notebook.\n", + "\n", + "#### List of updates\n", + "* forward_propagation instruction now says 'A1' instead of 'a1' in the formula for Z2; \n", + " and are updated to say 'A2' instead of 'Z2' in the formula for Z3.\n", + "* create_placeholders instruction refer to the data type \"tf.float32\" instead of float.\n", + "* in the model function, the x axis of the plot now says \"iterations (per fives)\" instead of iterations(per tens)\n", + "* In the linear_function, comments remind students to create the variables in the order suggested by the starter code. The comments are updated to reflect this order.\n", + "* The test of the cost function now creates the logits without passing them through a sigmoid function (since the cost function will include the sigmoid in the built-in tensorflow function).\n", + "* In the 'model' function, the minibatch_cost is now divided by minibatch_size (instead of num_minibatches).\n", + "* Updated print statements and 'expected output that are used to check functions, for easier visual comparison.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Exploring the Tensorflow Library\n", + "\n", + "To start, you will import the library:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "rhZ0RUw8T111" + }, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "from tensorflow.python.framework import ops\n", + "from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict\n", + "\n", + "%matplotlib inline\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "A1vVKBCQT114" + }, + "source": [ + "Now that you have imported the library, we will walk you through its different applications. You will start with an example, where we compute for you the loss of one training example. \n", + "$$loss = \\mathcal{L}(\\hat{y}, y) = (\\hat y^{(i)} - y^{(i)})^2 \\tag{1}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "JKAjoAbjT115" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "y_hat = tf.constant(36, name='y_hat') # Define y_hat constant. Set to 36.\n", + "y = tf.constant(39, name='y') # Define y. Set to 39\n", + "\n", + "loss = tf.Variable((y - y_hat)**2, name='loss') # Create a variable for the loss\n", + "\n", + "init = tf.global_variables_initializer() # When init is run later (session.run(init)),\n", + " # the loss variable will be initialized and ready to be computed\n", + "with tf.Session() as session: # Create a session and print the output\n", + " session.run(init) # Initializes the variables\n", + " print(session.run(loss)) # Prints the loss" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iz5l0YacT117" + }, + "source": [ + "Writing and running programs in TensorFlow has the following steps:\n", + "\n", + "1. Create Tensors (variables) that are not yet executed/evaluated. \n", + "2. Write operations between those Tensors.\n", + "3. Initialize your Tensors. \n", + "4. Create a Session. \n", + "5. Run the Session. This will run the operations you'd written above. \n", + "\n", + "Therefore, when we created a variable for the loss, we simply defined the loss as a function of other quantities, but did not evaluate its value. To evaluate it, we had to run `init=tf.global_variables_initializer()`. That initialized the loss variable, and in the last line we were finally able to evaluate the value of `loss` and print its value.\n", + "\n", + "Now let us look at an easy example. Run the cell below:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ni74wj7IT117" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Mul:0\", shape=(), dtype=int32)\n" + ] + } + ], + "source": [ + "a = tf.constant(2)\n", + "b = tf.constant(10)\n", + "c = tf.multiply(a,b)\n", + "print(c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "dKAqwc2VT119" + }, + "source": [ + "As expected, you will not see 20! You got a tensor saying that the result is a tensor that does not have the shape attribute, and is of type \"int32\". All you did was put in the 'computation graph', but you have not run this computation yet. In order to actually multiply the two numbers, you will have to create a session and run it." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "txF_DuCkT11-", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20\n" + ] + } + ], + "source": [ + "sess = tf.Session()\n", + "print(sess.run(c))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xADCVaq4T12A" + }, + "source": [ + "Great! To summarize, **remember to initialize your variables, create a session and run the operations inside the session**. \n", + "\n", + "Next, you'll also have to know about placeholders. A placeholder is an object whose value you can specify only later. \n", + "To specify values for a placeholder, you can pass in values by using a \"feed dictionary\" (`feed_dict` variable). Below, we created a placeholder for x. This allows us to pass in a number later when we run the session. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Pn_-PPqvT12A" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + } + ], + "source": [ + "# Change the value of x in the feed_dict\n", + "\n", + "x = tf.placeholder(tf.int64, name = 'x')\n", + "print(sess.run(2 * x, feed_dict = {x: 3}))\n", + "sess.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "QrVJFYCpT12C" + }, + "source": [ + "When you first defined `x` you did not have to specify a value for it. A placeholder is simply a variable that you will assign data to only later, when running the session. We say that you **feed data** to these placeholders when running the session. \n", + "\n", + "Here's what's happening: When you specify the operations needed for a computation, you are telling TensorFlow how to construct a computation graph. The computation graph can have some placeholders whose values you will specify only later. Finally, when you run the session, you are telling TensorFlow to execute the computation graph." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "X15wlMDUT12D" + }, + "source": [ + "### 1.1 - Linear function\n", + "\n", + "Lets start this programming exercise by computing the following equation: $Y = WX + b$, where $W$ and $X$ are random matrices and b is a random vector. \n", + "\n", + "**Exercise**: Compute $WX + b$ where $W, X$, and $b$ are drawn from a random normal distribution. W is of shape (4, 3), X is (3,1) and b is (4,1). As an example, here is how you would define a constant X that has shape (3,1):\n", + "```python\n", + "X = tf.constant(np.random.randn(3,1), name = \"X\")\n", + "\n", + "```\n", + "You might find the following functions helpful: \n", + "- tf.matmul(..., ...) to do a matrix multiplication\n", + "- tf.add(..., ...) to do an addition\n", + "- np.random.randn(...) to initialize randomly\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "ww5sBoFbT12D" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_function\n", + "\n", + "def linear_function():\n", + " \"\"\"\n", + " Implements a linear function: \n", + " Initializes X to be a random tensor of shape (3,1)\n", + " Initializes W to be a random tensor of shape (4,3)\n", + " Initializes b to be a random tensor of shape (4,1)\n", + " Returns: \n", + " result -- runs the session for Y = WX + b \n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " \n", + " \"\"\"\n", + " Note, to ensure that the \"random\" numbers generated match the expected results,\n", + " please create the variables in the order given in the starting code below.\n", + " (Do not re-arrange the order).\n", + " \"\"\"\n", + " ### START CODE HERE ### (4 lines of code)\n", + " X = tf.constant(np.random.randn(3,1), name = \"X\")\n", + " W = tf.constant(np.random.randn(4,3), name = \"W\")\n", + " b = tf.constant(np.random.randn(4,1), name = \"b\")\n", + " Y = tf.add(tf.matmul(W,X),b)\n", + " ### END CODE HERE ### \n", + " \n", + " # Create the session using tf.Session() and run it with sess.run(...) on the variable you want to calculate\n", + " \n", + " ### START CODE HERE ###\n", + " sess = tf.Session()\n", + " result = sess.run(Y)\n", + " ### END CODE HERE ### \n", + " \n", + " # close the session \n", + " sess.close()\n", + "\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "P3gOryVQT12G" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result = \n", + "[[-2.15657382]\n", + " [ 2.95891446]\n", + " [-1.08926781]\n", + " [-0.84538042]]\n" + ] + } + ], + "source": [ + "print( \"result = \\n\" + str(linear_function()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "R5netQ9IT12J" + }, + "source": [ + "*** Expected Output ***: \n", + "\n", + "```\n", + "result = \n", + "[[-2.15657382]\n", + " [ 2.95891446]\n", + " [-1.08926781]\n", + " [-0.84538042]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "DUBum-E4T12K" + }, + "source": [ + "### 1.2 - Computing the sigmoid \n", + "Great! You just implemented a linear function. Tensorflow offers a variety of commonly used neural network functions like `tf.sigmoid` and `tf.softmax`. For this exercise lets compute the sigmoid function of an input. \n", + "\n", + "You will do this exercise using a placeholder variable `x`. When running the session, you should use the feed dictionary to pass in the input `z`. In this exercise, you will have to (i) create a placeholder `x`, (ii) define the operations needed to compute the sigmoid using `tf.sigmoid`, and then (iii) run the session. \n", + "\n", + "** Exercise **: Implement the sigmoid function below. You should use the following: \n", + "\n", + "- `tf.placeholder(tf.float32, name = \"...\")`\n", + "- `tf.sigmoid(...)`\n", + "- `sess.run(..., feed_dict = {x: z})`\n", + "\n", + "\n", + "Note that there are two typical ways to create and use sessions in tensorflow: \n", + "\n", + "**Method 1:**\n", + "```python\n", + "sess = tf.Session()\n", + "# Run the variables initialization (if needed), run the operations\n", + "result = sess.run(..., feed_dict = {...})\n", + "sess.close() # Close the session\n", + "```\n", + "**Method 2:**\n", + "```python\n", + "with tf.Session() as sess: \n", + " # run the variables initialization (if needed), run the operations\n", + " result = sess.run(..., feed_dict = {...})\n", + " # This takes care of closing the session for you :)\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "APv9bW9rT12K" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: sigmoid\n", + "\n", + "def sigmoid(z):\n", + " \"\"\"\n", + " Computes the sigmoid of z\n", + " \n", + " Arguments:\n", + " z -- input value, scalar or vector\n", + " \n", + " Returns: \n", + " results -- the sigmoid of z\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### ( approx. 4 lines of code)\n", + " # Create a placeholder for x. Name it 'x'.\n", + " x = tf.placeholder(tf.float32, name = \"x\")\n", + "\n", + " # compute sigmoid(x)\n", + " sigmoid = tf.sigmoid(x)\n", + "\n", + " # Create a session, and run it. Please use the method 2 explained above. \n", + " # You should use a feed_dict to pass z's value to x. \n", + " with tf.Session() as sess:\n", + " # Run session and call the output \"result\"\n", + " result = sess.run(sigmoid, feed_dict={x:z})\n", + "\n", + " ### END CODE HERE ###\n", + " \n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "nLHdJxKVT12M" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sigmoid(0) = 0.5\n", + "sigmoid(12) = 0.999994\n" + ] + } + ], + "source": [ + "print (\"sigmoid(0) = \" + str(sigmoid(0)))\n", + "print (\"sigmoid(12) = \" + str(sigmoid(12)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "4cl8Wgg9T12O" + }, + "source": [ + "*** Expected Output ***: \n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
\n", + "**sigmoid(0)**\n", + "\n", + "0.5\n", + "
\n", + "**sigmoid(12)**\n", + "\n", + "0.999994\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "v-okwynUT12O" + }, + "source": [ + "\n", + "**To summarize, you how know how to**:\n", + "1. Create placeholders\n", + "2. Specify the computation graph corresponding to operations you want to compute\n", + "3. Create the session\n", + "4. Run the session, using a feed dictionary if necessary to specify placeholder variables' values. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ytSt0fgTT12P" + }, + "source": [ + "### 1.3 - Computing the Cost\n", + "\n", + "You can also use a built-in function to compute the cost of your neural network. So instead of needing to write code to compute this as a function of $a^{[2](i)}$ and $y^{(i)}$ for i=1...m: \n", + "$$ J = - \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log a^{ [2] (i)} + (1-y^{(i)})\\log (1-a^{ [2] (i)} )\\large )\\small\\tag{2}$$\n", + "\n", + "you can do it in one line of code in tensorflow!\n", + "\n", + "**Exercise**: Implement the cross entropy loss. The function you will use is: \n", + "\n", + "\n", + "- `tf.nn.sigmoid_cross_entropy_with_logits(logits = ..., labels = ...)`\n", + "\n", + "Your code should input `z`, compute the sigmoid (to get `a`) and then compute the cross entropy cost $J$. All this can be done using one call to `tf.nn.sigmoid_cross_entropy_with_logits`, which computes\n", + "\n", + "$$- \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log \\sigma(z^{[2](i)}) + (1-y^{(i)})\\log (1-\\sigma(z^{[2](i)})\\large )\\small\\tag{2}$$\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "oIRdDYOLT12P" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: cost\n", + "\n", + "def cost(logits, labels):\n", + " \"\"\"\n", + "    Computes the cost using the sigmoid cross entropy\n", + "    \n", + "    Arguments:\n", + "    logits -- vector containing z, output of the last linear unit (before the final sigmoid activation)\n", + "    labels -- vector of labels y (1 or 0) \n", + " \n", + " Note: What we've been calling \"z\" and \"y\" in this class are respectively called \"logits\" and \"labels\" \n", + " in the TensorFlow documentation. So logits will feed into z, and labels into y. \n", + "    \n", + "    Returns:\n", + "    cost -- runs the session of the cost (formula (2))\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### \n", + " \n", + " # Create the placeholders for \"logits\" (z) and labels\" (y) (approx. 2 lines)\n", + " z = tf.placeholder(dtype=tf.float32, name=\"z\")\n", + " y = tf.placeholder(dtype=tf.float32, name=\"y\")\n", + " \n", + " # Use the loss function (approx. 1 line)\n", + " cost = tf.nn.sigmoid_cross_entropy_with_logits(logits = z, labels = y)\n", + " \n", + " # Create a session (approx. 1 line). See method 1 above.\n", + " sess = tf.Session()\n", + " \n", + " # Run the session (approx. 1 line).\n", + " cost = sess.run(cost, feed_dict={z:logits, y:labels})\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0nPB-lOYT12R" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n" + ] + } + ], + "source": [ + "logits = np.array([0.2,0.4,0.7,0.9])\n", + "\n", + "cost = cost(logits, np.array([0,0,1,1]))\n", + "print (\"cost = \" + str(cost))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "X8sMySzyT12T" + }, + "source": [ + "** Expected Output** : \n", + "\n", + "```\n", + "cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_sK1Rqm6T12U" + }, + "source": [ + "### 1.4 - Using One Hot encodings\n", + "\n", + "Many times in deep learning you will have a y vector with numbers ranging from 0 to C-1, where C is the number of classes. If C is for example 4, then you might have the following y vector which you will need to convert as follows:\n", + "\n", + "\n", + "\n", + "\n", + "This is called a \"one hot\" encoding, because in the converted representation exactly one element of each column is \"hot\" (meaning set to 1). To do this conversion in numpy, you might have to write a few lines of code. In tensorflow, you can use one line of code: \n", + "\n", + "- tf.one_hot(labels, depth, axis) \n", + "\n", + "**Exercise:** Implement the function below to take one vector of labels and the total number of classes $C$, and return the one hot encoding. Use `tf.one_hot()` to do this. " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "dlamXLu_T12U" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: one_hot_matrix\n", + "\n", + "def one_hot_matrix(labels, C):\n", + " \"\"\"\n", + " Creates a matrix where the i-th row corresponds to the ith class number and the jth column\n", + " corresponds to the jth training example. So if example j had a label i. Then entry (i,j) \n", + " will be 1. \n", + " \n", + " Arguments:\n", + " labels -- vector containing the labels \n", + " C -- number of classes, the depth of the one hot dimension\n", + " \n", + " Returns: \n", + " one_hot -- one hot matrix\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " \n", + " # Create a tf.constant equal to C (depth), name it 'C'. (approx. 1 line)\n", + " C = tf.constant(C, name=\"C\")\n", + " \n", + " # Use tf.one_hot, be careful with the axis (approx. 1 line)\n", + " one_hot_matrix = tf.one_hot(labels, C, axis=0)\n", + " \n", + " # Create the session (approx. 1 line)\n", + " sess = tf.Session()\n", + " \n", + " # Run the session (approx. 1 line)\n", + " one_hot = sess.run(one_hot_matrix)\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " return one_hot" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "8Bi0je2yT12W" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "one_hot = \n", + "[[ 0. 0. 0. 1. 0. 0.]\n", + " [ 1. 0. 0. 0. 0. 1.]\n", + " [ 0. 1. 0. 0. 1. 0.]\n", + " [ 0. 0. 1. 0. 0. 0.]]\n" + ] + } + ], + "source": [ + "labels = np.array([1,2,3,0,2,1])\n", + "one_hot = one_hot_matrix(labels, C = 4)\n", + "print (\"one_hot = \\n\" + str(one_hot))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "HlT0UczrT12Y" + }, + "source": [ + "**Expected Output**: \n", + "\n", + "```\n", + "one_hot = \n", + "[[ 0. 0. 0. 1. 0. 0.]\n", + " [ 1. 0. 0. 0. 0. 1.]\n", + " [ 0. 1. 0. 0. 1. 0.]\n", + " [ 0. 0. 1. 0. 0. 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qsu1xyqFT12Z" + }, + "source": [ + "### 1.5 - Initialize with zeros and ones\n", + "\n", + "Now you will learn how to initialize a vector of zeros and ones. The function you will be calling is `tf.ones()`. To initialize with zeros you could use tf.zeros() instead. These functions take in a shape and return an array of dimension shape full of zeros and ones respectively. \n", + "\n", + "**Exercise:** Implement the function below to take in a shape and to return an array (of the shape's dimension of ones). \n", + "\n", + " - tf.ones(shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "eOVWrcR2T12Z" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: ones\n", + "\n", + "def ones(shape):\n", + " \"\"\"\n", + " Creates an array of ones of dimension shape\n", + " \n", + " Arguments:\n", + " shape -- shape of the array you want to create\n", + " \n", + " Returns: \n", + " ones -- array containing only ones\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " \n", + " # Create \"ones\" tensor using tf.ones(...). (approx. 1 line)\n", + " ones = tf.ones(shape)\n", + " \n", + " # Create the session (approx. 1 line)\n", + " sess = tf.Session()\n", + " \n", + " # Run the session to compute 'ones' (approx. 1 line)\n", + " ones = sess.run(ones)\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " return ones" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "WwHEVDv6T12b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ones = [ 1. 1. 1.]\n" + ] + } + ], + "source": [ + "print (\"ones = \" + str(ones([3])))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "hGgM2hSFT12g" + }, + "source": [ + "**Expected Output:**\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **ones**\n", + " \n", + " [ 1. 1. 1.]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "LW8S6sVzT12h" + }, + "source": [ + "# 2 - Building your first neural network in tensorflow\n", + "\n", + "In this part of the assignment you will build a neural network using tensorflow. Remember that there are two parts to implement a tensorflow model:\n", + "\n", + "- Create the computation graph\n", + "- Run the graph\n", + "\n", + "Let's delve into the problem you'd like to solve!\n", + "\n", + "### 2.0 - Problem statement: SIGNS Dataset\n", + "\n", + "One afternoon, with some friends we decided to teach our computers to decipher sign language. We spent a few hours taking pictures in front of a white wall and came up with the following dataset. It's now your job to build an algorithm that would facilitate communications from a speech-impaired person to someone who doesn't understand sign language.\n", + "\n", + "- **Training set**: 1080 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (180 pictures per number).\n", + "- **Test set**: 120 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (20 pictures per number).\n", + "\n", + "Note that this is a subset of the SIGNS dataset. The complete dataset contains many more signs.\n", + "\n", + "Here are examples for each number, and how an explanation of how we represent the labels. These are the original pictures, before we lowered the image resolutoion to 64 by 64 pixels.\n", + "
**Figure 1**: SIGNS dataset
\n", + "\n", + "\n", + "Run the following code to load the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "wCgjv84yT12i" + }, + "outputs": [], + "source": [ + "# Loading the dataset\n", + "X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "JYimgnMbT12k" + }, + "source": [ + "Change the index below and run the cell to visualize some examples in the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wG0QwVtJT12k" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y = 5\n" + ] + }, + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example of a picture\n", + "index = 0\n", + "plt.imshow(X_train_orig[index])\n", + "print (\"y = \" + str(np.squeeze(Y_train_orig[:, index])))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "2WP4-S2CT12m" + }, + "source": [ + "As usual you flatten the image dataset, then normalize it by dividing by 255. On top of that, you will convert each label to a one-hot vector as shown in Figure 1. Run the cell below to do so." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "tn3gF5xLT12m" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of training examples = 1080\n", + "number of test examples = 120\n", + "X_train shape: (12288, 1080)\n", + "Y_train shape: (6, 1080)\n", + "X_test shape: (12288, 120)\n", + "Y_test shape: (6, 120)\n" + ] + } + ], + "source": [ + "# Flatten the training and test images\n", + "X_train_flatten = X_train_orig.reshape(X_train_orig.shape[0], -1).T\n", + "X_test_flatten = X_test_orig.reshape(X_test_orig.shape[0], -1).T\n", + "# Normalize image vectors\n", + "X_train = X_train_flatten/255.\n", + "X_test = X_test_flatten/255.\n", + "# Convert training and test labels to one hot matrices\n", + "Y_train = convert_to_one_hot(Y_train_orig, 6)\n", + "Y_test = convert_to_one_hot(Y_test_orig, 6)\n", + "\n", + "print (\"number of training examples = \" + str(X_train.shape[1]))\n", + "print (\"number of test examples = \" + str(X_test.shape[1]))\n", + "print (\"X_train shape: \" + str(X_train.shape))\n", + "print (\"Y_train shape: \" + str(Y_train.shape))\n", + "print (\"X_test shape: \" + str(X_test.shape))\n", + "print (\"Y_test shape: \" + str(Y_test.shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iN_KPZ0FT12o" + }, + "source": [ + "**Note** that 12288 comes from $64 \\times 64 \\times 3$. Each image is square, 64 by 64 pixels, and 3 is for the RGB colors. Please make sure all these shapes make sense to you before continuing." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_GQMSJTtT12p" + }, + "source": [ + "**Your goal** is to build an algorithm capable of recognizing a sign with high accuracy. To do so, you are going to build a tensorflow model that is almost the same as one you have previously built in numpy for cat recognition (but now using a softmax output). It is a great occasion to compare your numpy implementation to the tensorflow one. \n", + "\n", + "**The model** is *LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX*. The SIGMOID output layer has been converted to a SOFTMAX. A SOFTMAX layer generalizes SIGMOID to when there are more than two classes. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "JSNd_DRWT12p" + }, + "source": [ + "### 2.1 - Create placeholders\n", + "\n", + "Your first task is to create placeholders for `X` and `Y`. This will allow you to later pass your training data in when you run your session. \n", + "\n", + "**Exercise:** Implement the function below to create the placeholders in tensorflow." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "fcAcBRAAT12q" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: create_placeholders\n", + "\n", + "def create_placeholders(n_x, n_y):\n", + " \"\"\"\n", + " Creates the placeholders for the tensorflow session.\n", + " \n", + " Arguments:\n", + " n_x -- scalar, size of an image vector (num_px * num_px = 64 * 64 * 3 = 12288)\n", + " n_y -- scalar, number of classes (from 0 to 5, so -> 6)\n", + " \n", + " Returns:\n", + " X -- placeholder for the data input, of shape [n_x, None] and dtype \"tf.float32\"\n", + " Y -- placeholder for the input labels, of shape [n_y, None] and dtype \"tf.float32\"\n", + " \n", + " Tips:\n", + " - You will use None because it let's us be flexible on the number of examples you will for the placeholders.\n", + " In fact, the number of examples during test/train is different.\n", + " \"\"\"\n", + "\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " X = tf.placeholder(dtype=tf.float32, shape=[n_x, None])\n", + " Y = tf.placeholder(dtype=tf.float32, shape=[n_y, None])\n", + " ### END CODE HERE ###\n", + " \n", + " return X, Y" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ve9WOa1LT12r" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X = Tensor(\"Placeholder:0\", shape=(12288, ?), dtype=float32)\n", + "Y = Tensor(\"Placeholder_1:0\", shape=(6, ?), dtype=float32)\n" + ] + } + ], + "source": [ + "X, Y = create_placeholders(12288, 6)\n", + "print (\"X = \" + str(X))\n", + "print (\"Y = \" + str(Y))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "-G_UV4xpT12t" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **X**\n", + " \n", + " Tensor(\"Placeholder_1:0\", shape=(12288, ?), dtype=float32) (not necessarily Placeholder_1)\n", + "
\n", + " **Y**\n", + " \n", + " Tensor(\"Placeholder_2:0\", shape=(6, ?), dtype=float32) (not necessarily Placeholder_2)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "eyYz9y1XT12u" + }, + "source": [ + "### 2.2 - Initializing the parameters\n", + "\n", + "Your second task is to initialize the parameters in tensorflow.\n", + "\n", + "**Exercise:** Implement the function below to initialize the parameters in tensorflow. You are going use Xavier Initialization for weights and Zero Initialization for biases. The shapes are given below. As an example, to help you, for W1 and b1 you could use: \n", + "\n", + "```python\n", + "W1 = tf.get_variable(\"W1\", [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + "b1 = tf.get_variable(\"b1\", [25,1], initializer = tf.zeros_initializer())\n", + "```\n", + "Please use `seed = 1` to make sure your results match ours." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "gPi-SeuWT12u" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters\n", + "\n", + "def initialize_parameters():\n", + " \"\"\"\n", + " Initializes parameters to build a neural network with tensorflow. The shapes are:\n", + " W1 : [25, 12288]\n", + " b1 : [25, 1]\n", + " W2 : [12, 25]\n", + " b2 : [12, 1]\n", + " W3 : [6, 12]\n", + " b3 : [6, 1]\n", + " \n", + " Returns:\n", + " parameters -- a dictionary of tensors containing W1, b1, W2, b2, W3, b3\n", + " \"\"\"\n", + " \n", + " tf.set_random_seed(1) # so that your \"random\" numbers match ours\n", + " \n", + " ### START CODE HERE ### (approx. 6 lines of code)\n", + " W1 = tf.get_variable(\"W1\", [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b1 = tf.get_variable(\"b1\", [25,1], initializer = tf.zeros_initializer())\n", + " W2 = tf.get_variable(\"W2\", [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b2 = tf.get_variable(\"b2\", [12, 1], initializer = tf.zeros_initializer())\n", + " W3 = tf.get_variable(\"W3\", [6, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b3 = tf.get_variable(\"b3\", [6, 1], initializer = tf.zeros_initializer())\n", + " ### END CODE HERE ###\n", + "\n", + " parameters = {\"W1\": W1,\n", + " \"b1\": b1,\n", + " \"W2\": W2,\n", + " \"b2\": b2,\n", + " \"W3\": W3,\n", + " \"b3\": b3}\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "CcuKNYinT12x" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "b1 = \n", + "W2 = \n", + "b2 = \n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "with tf.Session() as sess:\n", + " parameters = initialize_parameters()\n", + " print(\"W1 = \" + str(parameters[\"W1\"]))\n", + " print(\"b1 = \" + str(parameters[\"b1\"]))\n", + " print(\"W2 = \" + str(parameters[\"W2\"]))\n", + " print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "kzAVM5y8T12z" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " < tf.Variable 'W1:0' shape=(25, 12288) dtype=float32_ref >\n", + "
\n", + " **b1**\n", + " \n", + " < tf.Variable 'b1:0' shape=(25, 1) dtype=float32_ref >\n", + "
\n", + " **W2**\n", + " \n", + " < tf.Variable 'W2:0' shape=(12, 25) dtype=float32_ref >\n", + "
\n", + " **b2**\n", + " \n", + " < tf.Variable 'b2:0' shape=(12, 1) dtype=float32_ref >\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "IR5UvbGxT12z" + }, + "source": [ + "As expected, the parameters haven't been evaluated yet." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cnuAGFn2T120" + }, + "source": [ + "### 2.3 - Forward propagation in tensorflow \n", + "\n", + "You will now implement the forward propagation module in tensorflow. The function will take in a dictionary of parameters and it will complete the forward pass. The functions you will be using are: \n", + "\n", + "- `tf.add(...,...)` to do an addition\n", + "- `tf.matmul(...,...)` to do a matrix multiplication\n", + "- `tf.nn.relu(...)` to apply the ReLU activation\n", + "\n", + "**Question:** Implement the forward pass of the neural network. We commented for you the numpy equivalents so that you can compare the tensorflow implementation to numpy. It is important to note that the forward propagation stops at `z3`. The reason is that in tensorflow the last linear layer output is given as input to the function computing the loss. Therefore, you don't need `a3`!\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "nC7CYNk0T120" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation\n", + "\n", + "def forward_propagation(X, parameters):\n", + " \"\"\"\n", + " Implements the forward propagation for the model: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX\n", + " \n", + " Arguments:\n", + " X -- input dataset placeholder, of shape (input size, number of examples)\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\"\n", + " the shapes are given in initialize_parameters\n", + "\n", + " Returns:\n", + " Z3 -- the output of the last LINEAR unit\n", + " \"\"\"\n", + " \n", + " # Retrieve the parameters from the dictionary \"parameters\" \n", + " W1 = parameters['W1']\n", + " b1 = parameters['b1']\n", + " W2 = parameters['W2']\n", + " b2 = parameters['b2']\n", + " W3 = parameters['W3']\n", + " b3 = parameters['b3']\n", + " \n", + " ### START CODE HERE ### (approx. 5 lines) # Numpy Equivalents:\n", + " Z1 = tf.add(tf.matmul(W1, X), b1) # Z1 = np.dot(W1, X) + b1\n", + " A1 = tf.nn.relu(Z1) # A1 = relu(Z1)\n", + " Z2 = tf.add(tf.matmul(W2, A1), b2) # Z2 = np.dot(W2, A1) + b2\n", + " A2 = tf.nn.relu(Z2) # A2 = relu(Z2)\n", + " Z3 = tf.add(tf.matmul(W3, A2), b3) # Z3 = np.dot(W3, A2) + b3\n", + " ### END CODE HERE ###\n", + " \n", + " return Z3" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "hioQQqyxT122", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z3 = Tensor(\"Add_2:0\", shape=(6, ?), dtype=float32)\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " X, Y = create_placeholders(12288, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " print(\"Z3 = \" + str(Z3))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "PRrS7RzpT124" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **Z3**\n", + " \n", + " Tensor(\"Add_2:0\", shape=(6, ?), dtype=float32)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "FDjgAHp6T125" + }, + "source": [ + "You may have noticed that the forward propagation doesn't output any cache. You will understand why below, when we get to brackpropagation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "RXqHnAEnT125" + }, + "source": [ + "### 2.4 Compute cost\n", + "\n", + "As seen before, it is very easy to compute the cost using:\n", + "```python\n", + "tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = ..., labels = ...))\n", + "```\n", + "**Question**: Implement the cost function below. \n", + "- It is important to know that the \"`logits`\" and \"`labels`\" inputs of `tf.nn.softmax_cross_entropy_with_logits` are expected to be of shape (number of examples, num_classes). We have thus transposed Z3 and Y for you.\n", + "- Besides, `tf.reduce_mean` basically does the summation over the examples." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "1_bzQXSJT125" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost \n", + "\n", + "def compute_cost(Z3, Y):\n", + " \"\"\"\n", + " Computes the cost\n", + " \n", + " Arguments:\n", + " Z3 -- output of forward propagation (output of the last LINEAR unit), of shape (6, number of examples)\n", + " Y -- \"true\" labels vector placeholder, same shape as Z3\n", + " \n", + " Returns:\n", + " cost - Tensor of the cost function\n", + " \"\"\"\n", + " \n", + " # to fit the tensorflow requirement for tf.nn.softmax_cross_entropy_with_logits(...,...)\n", + " logits = tf.transpose(Z3)\n", + " labels = tf.transpose(Y)\n", + " \n", + " ### START CODE HERE ### (1 line of code)\n", + " cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels))\n", + " ### END CODE HERE ###\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "4HahBCJVT127" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = Tensor(\"Mean:0\", shape=(), dtype=float32)\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " X, Y = create_placeholders(12288, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " cost = compute_cost(Z3, Y)\n", + " print(\"cost = \" + str(cost))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "GT7MzPxET12-" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **cost**\n", + " \n", + " Tensor(\"Mean:0\", shape=(), dtype=float32)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "9O9sNnHQT12-" + }, + "source": [ + "### 2.5 - Backward propagation & parameter updates\n", + "\n", + "This is where you become grateful to programming frameworks. All the backpropagation and the parameters update is taken care of in 1 line of code. It is very easy to incorporate this line in the model.\n", + "\n", + "After you compute the cost function. You will create an \"`optimizer`\" object. You have to call this object along with the cost when running the tf.session. When called, it will perform an optimization on the given cost with the chosen method and learning rate.\n", + "\n", + "For instance, for gradient descent the optimizer would be:\n", + "```python\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)\n", + "```\n", + "\n", + "To make the optimization you would do:\n", + "```python\n", + "_ , c = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n", + "```\n", + "\n", + "This computes the backpropagation by passing through the tensorflow graph in the reverse order. From cost to inputs.\n", + "\n", + "**Note** When coding, we often use `_` as a \"throwaway\" variable to store values that we won't need to use later. Here, `_` takes on the evaluated value of `optimizer`, which we don't need (and `c` takes the value of the `cost` variable). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "SKxhuoN2T12_" + }, + "source": [ + "### 2.6 - Building the model\n", + "\n", + "Now, you will bring it all together! \n", + "\n", + "**Exercise:** Implement the model. You will be calling the functions you had previously implemented." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "siFLpYfkT12_" + }, + "outputs": [], + "source": [ + "def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.0001,\n", + " num_epochs = 1500, minibatch_size = 32, print_cost = True):\n", + " \"\"\"\n", + " Implements a three-layer tensorflow neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX.\n", + " \n", + " Arguments:\n", + " X_train -- training set, of shape (input size = 12288, number of training examples = 1080)\n", + " Y_train -- test set, of shape (output size = 6, number of training examples = 1080)\n", + " X_test -- training set, of shape (input size = 12288, number of training examples = 120)\n", + " Y_test -- test set, of shape (output size = 6, number of test examples = 120)\n", + " learning_rate -- learning rate of the optimization\n", + " num_epochs -- number of epochs of the optimization loop\n", + " minibatch_size -- size of a minibatch\n", + " print_cost -- True to print the cost every 100 epochs\n", + " \n", + " Returns:\n", + " parameters -- parameters learnt by the model. They can then be used to predict.\n", + " \"\"\"\n", + " \n", + " ops.reset_default_graph() # to be able to rerun the model without overwriting tf variables\n", + " tf.set_random_seed(1) # to keep consistent results\n", + " seed = 3 # to keep consistent results\n", + " (n_x, m) = X_train.shape # (n_x: input size, m : number of examples in the train set)\n", + " n_y = Y_train.shape[0] # n_y : output size\n", + " costs = [] # To keep track of the cost\n", + " \n", + " # Create Placeholders of shape (n_x, n_y)\n", + " ### START CODE HERE ### (1 line)\n", + " X, Y = create_placeholders(n_x, n_y)\n", + " ### END CODE HERE ###\n", + "\n", + " # Initialize parameters\n", + " ### START CODE HERE ### (1 line)\n", + " parameters = initialize_parameters()\n", + " ### END CODE HERE ###\n", + " \n", + " # Forward propagation: Build the forward propagation in the tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " Z3 = forward_propagation(X, parameters)\n", + " ### END CODE HERE ###\n", + " \n", + " # Cost function: Add cost function to tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " cost = compute_cost(Z3, Y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.\n", + " ### START CODE HERE ### (1 line)\n", + " optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)\n", + " ### END CODE HERE ###\n", + " \n", + " # Initialize all the variables\n", + " init = tf.global_variables_initializer()\n", + "\n", + " # Start the session to compute the tensorflow graph\n", + " with tf.Session() as sess:\n", + " \n", + " # Run the initialization\n", + " sess.run(init)\n", + " \n", + " # Do the training loop\n", + " for epoch in range(num_epochs):\n", + "\n", + " epoch_cost = 0. # Defines a cost related to an epoch\n", + " num_minibatches = int(m / minibatch_size) # number of minibatches of size minibatch_size in the train set\n", + " seed = seed + 1\n", + " minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)\n", + "\n", + " for minibatch in minibatches:\n", + "\n", + " # Select a minibatch\n", + " (minibatch_X, minibatch_Y) = minibatch\n", + " \n", + " # IMPORTANT: The line that runs the graph on a minibatch.\n", + " # Run the session to execute the \"optimizer\" and the \"cost\", the feedict should contain a minibatch for (X,Y).\n", + " ### START CODE HERE ### (1 line)\n", + " _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n", + " ### END CODE HERE ###\n", + " \n", + " epoch_cost += minibatch_cost / minibatch_size\n", + "\n", + " # Print the cost every epoch\n", + " if print_cost == True and epoch % 100 == 0:\n", + " print (\"Cost after epoch %i: %f\" % (epoch, epoch_cost))\n", + " if print_cost == True and epoch % 5 == 0:\n", + " costs.append(epoch_cost)\n", + " \n", + " # plot the cost\n", + " plt.plot(np.squeeze(costs))\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per fives)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + "\n", + " # lets save the parameters in a variable\n", + " parameters = sess.run(parameters)\n", + " print (\"Parameters have been trained!\")\n", + "\n", + " # Calculate the correct predictions\n", + " correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y))\n", + "\n", + " # Calculate accuracy on the test set\n", + " accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n", + "\n", + " print (\"Train Accuracy:\", accuracy.eval({X: X_train, Y: Y_train}))\n", + " print (\"Test Accuracy:\", accuracy.eval({X: X_test, Y: Y_test}))\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "sQ1doxmHT13B" + }, + "source": [ + "Run the following cell to train your model! On our machine it takes about 5 minutes. Your \"Cost after epoch 100\" should be 1.048222. If it's not, don't waste time; interrupt the training by clicking on the square (⬛) in the upper bar of the notebook, and try to correct your code. If it is the correct cost, take a break and come back in 5 minutes!" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "AISfljZVT13B", + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 1.913693\n", + "Cost after epoch 100: 1.048222\n", + "Cost after epoch 200: 0.756012\n", + "Cost after epoch 300: 0.590844\n", + "Cost after epoch 400: 0.483423\n", + "Cost after epoch 500: 0.392928\n", + "Cost after epoch 600: 0.323629\n", + "Cost after epoch 700: 0.262100\n", + "Cost after epoch 800: 0.210199\n", + "Cost after epoch 900: 0.171622\n", + "Cost after epoch 1000: 0.145907\n", + "Cost after epoch 1100: 0.110942\n", + "Cost after epoch 1200: 0.088966\n", + "Cost after epoch 1300: 0.061226\n", + "Cost after epoch 1400: 0.053860\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parameters have been trained!\n", + "Train Accuracy: 0.999074\n", + "Test Accuracy: 0.716667\n" + ] + } + ], + "source": [ + "parameters = model(X_train, Y_train, X_test, Y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ogOoTX2CT13E" + }, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **Train Accuracy**\n", + " \n", + " 0.999074\n", + "
\n", + " **Test Accuracy**\n", + " \n", + " 0.716667\n", + "
\n", + "\n", + "Amazing, your algorithm can recognize a sign representing a figure between 0 and 5 with 71.7% accuracy.\n", + "\n", + "**Insights**:\n", + "- Your model seems big enough to fit the training set well. However, given the difference between train and test accuracy, you could try to add L2 or dropout regularization to reduce overfitting. \n", + "- Think about the session as a block of code to train the model. Each time you run the session on a minibatch, it trains the parameters. In total you have run the session a large number of times (1500 epochs) until you obtained well trained parameters." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cka8pF8BT13E" + }, + "source": [ + "### 2.7 - Test with your own image (optional / ungraded exercise)\n", + "\n", + "Congratulations on finishing this assignment. You can now take a picture of your hand and see the output of your model. To do that:\n", + " 1. Click on \"File\" in the upper bar of this notebook, then click \"Open\" to go on your Coursera Hub.\n", + " 2. Add your image to this Jupyter Notebook's directory, in the \"images\" folder\n", + " 3. Write your image's name in the following code\n", + " 4. Run the code and check if the algorithm is right!" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "EJ8Aft1CT13F", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your algorithm predicts: y = 2\n" + ] + }, + { + "data": { + "image/png": "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\nV4oAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import scipy\n", + "from PIL import Image\n", + "from scipy import ndimage\n", + "\n", + "## START CODE HERE ## (PUT YOUR IMAGE NAME) \n", + "my_image = \"thumbs up.png\"\n", + "## END CODE HERE ##\n", + "\n", + "# We preprocess your image to fit your algorithm.\n", + "fname = \"images/\" + my_image\n", + "image = np.array(ndimage.imread(fname, flatten=False))\n", + "image = image/255.\n", + "my_image = scipy.misc.imresize(image, size=(64,64)).reshape((1, 64*64*3)).T\n", + "my_image_prediction = predict(my_image, parameters)\n", + "\n", + "plt.imshow(image)\n", + "print(\"Your algorithm predicts: y = \" + str(np.squeeze(my_image_prediction)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "6Q5jJuAqT13G" + }, + "source": [ + "You indeed deserved a \"thumbs-up\" although as you can see the algorithm seems to classify it incorrectly. The reason is that the training set doesn't contain any \"thumbs-up\", so the model doesn't know how to deal with it! We call that a \"mismatched data distribution\" and it is one of the various of the next course on \"Structuring Machine Learning Projects\"." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "DMY1FYvOT13H" + }, + "source": [ + "\n", + "**What you should remember**:\n", + "- Tensorflow is a programming framework used in deep learning\n", + "- The two main object classes in tensorflow are Tensors and Operators. \n", + "- When you code in tensorflow you have to take the following steps:\n", + " - Create a graph containing Tensors (Variables, Placeholders ...) and Operations (tf.matmul, tf.add, ...)\n", + " - Create a session\n", + " - Initialize the session\n", + " - Run the session to execute the graph\n", + "- You can execute the graph multiple times as you've seen in model()\n", + "- The backpropagation and optimization is automatically done when running the session on the \"optimizer\" object." + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "BFd89", + "launcher_item_id": "AH2rK" + }, + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Coursera/Lesson2/Week3/tensorflow_lesson.py b/Coursera/Lesson2/Week3/tensorflow_lesson.py new file mode 100644 index 0000000..e0656e3 --- /dev/null +++ b/Coursera/Lesson2/Week3/tensorflow_lesson.py @@ -0,0 +1,19 @@ +import numpy as np + +import tensorflow.compat.v1 as tf +tf.disable_v2_behavior() + +coefficients = np.array([[1],[-20],[25]]) +w = tf.Variable([0], dtype=tf.float32) +x = tf.placeholder(tf.float32, [3,1]) +cost = x[0][0] * w**2 + x[1][0] * w + x[2][0] +train = tf.train.GradientDescentOptimizer(0.01).minimize(cost) +init = tf.global_variables_initializer() +session = tf.Session() +session.run(init) + +print(session.run(w)) +for i in range(1000): + session.run(train, feed_dict={x:coefficients}) + +print(session.run(w)) diff --git a/Coursera/Lesson2/Week3/trans b/Coursera/Lesson2/Week3/trans new file mode 100755 index 0000000..c6cb5b8 --- /dev/null +++ b/Coursera/Lesson2/Week3/trans @@ -0,0 +1,5693 @@ +#!/usr/bin/env bash +export TRANS_ENTRY="$0" +if [[ ! $LANG =~ (UTF|utf)-?8$ ]]; then export LANG=en_US.UTF-8; fi +read -r -d '' TRANS_PROGRAM << 'EOF' +BEGIN { +Name = "Translate Shell" +Description = "Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc." +Version = "0.9.6.11" +ReleaseDate = "2019-07-25" +Command = "trans" +EntryPoint = "translate.awk" +EntryScript = "translate" +} +function initConst() { +NULLSTR = "" +NONE = "\0" +TRUE = 1 +STDIN = "/dev/stdin" +STDOUT = "/dev/stdout" +STDERR = "/dev/stderr" +SUPOUT = " > /dev/null " +SUPERR = " 2> /dev/null " +PIPE = " | " +} +function anything(array, +i) { +for (i in array) +if (array[i]) return 1 +return 0 +} +function exists(value) { +if (isarray(value)) +return anything(value) +else +return value ? 1 : 0 +} +function belongsTo(element, array, +i) { +for (i in array) +if (element == array[i]) return element +return NULLSTR +} +function identical(x, y, +i) { +if (!isarray(x) && !isarray(y)) +return x == y +else if (isarray(x) && isarray(y)) { +if (length(x) != length(y)) return 0 +for (i in x) +if (!identical(x[i], y[i])) return 0 +return 1 +} else +return 0 +} +function append(array, element) { +array[anything(array) ? length(array) : 0] = element +} +function compareByIndexFields(i1, v1, i2, v2, +t1, t2, tl, j) { +split(i1, t1, SUBSEP) +split(i2, t2, SUBSEP) +tl = length(t1) < length(t2) ? length(t1) : length(t2) +for (j = 1; j <= tl; j++) { +if (t1[j] < t2[j]) +return -1 +else if (t1[j] > t2[j]) +return 1 +} +return 0 +} +function isnum(string) { +return string == string + 0 +} +function startsWithAny(string, substrings, +i) { +for (i in substrings) +if (index(string, substrings[i]) == 1) return substrings[i] +return NULLSTR +} +function matchesAny(string, patterns, +i) { +for (i in patterns) +if (string ~ "^" patterns[i]) return patterns[i] +return NULLSTR +} +function replicate(string, len, +i, temp) { +temp = NULLSTR +for (i = 0; i < len; i++) +temp = temp string +return temp +} +function reverse(string, +i, temp) { +temp = NULLSTR +for (i = length(string); i > 0; i--) +temp = temp substr(string, i, 1); +return temp +} +function join(array, separator, sortedIn, preserveNull, +i, j, saveSortedIn, temp) { +if (!sortedIn) +sortedIn = "compareByIndexFields" +temp = NULLSTR +j = 0 +if (isarray(array)) { +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = sortedIn +for (i in array) +if (preserveNull || array[i] != NULLSTR) +temp = j++ ? temp separator array[i] : array[i] +PROCINFO["sorted_in"] = saveSortedIn +} else +temp = array +return temp +} +function explode(string, array) { +split(string, array, NULLSTR) +} +function escapeChar(char) { +switch (char) { +case "b": +return "\b" +case "f": +return "\f" +case "n": +return "\n" +case "r": +return "\r" +case "t": +return "\t" +case "v": +return "\v" +case "u0026": +return "&" +case "u003c": +return "<" +case "u003e": +return ">" +default: +return char +} +} +function literal(string, +c, cc, escaping, i, s) { +if (string !~ /^".*"$/) +return string +explode(string, s) +string = NULLSTR +escaping = 0 +for (i = 2; i < length(s); i++) { +c = s[i] +if (escaping) { +if (cc) { +cc = cc c +if (length(cc) == 5) { +string = string escapeChar(cc) +escaping = 0 +cc = NULLSTR +} +} else if (c == "u") { +cc = c +} else { +string = string escapeChar(c) +escaping = 0 +} +} else { +if (c == "\\") +escaping = 1 +else +string = string c +} +} +return string +} +function escape(string) { +gsub(/\\/, "\\\\", string) +gsub(/"/, "\\\"", string) +return string +} +function unescape(string) { +gsub(/\\"/, "\"", string) +gsub(/\\\\/, "\\", string) +return string +} +function parameterize(string, quotationMark) { +if (!quotationMark) +quotationMark = "'" +if (quotationMark == "'") { +gsub(/'/, "'\\''", string) +return "'" string "'" +} else { +return "\"" escape(string) "\"" +} +} +function unparameterize(string, temp) { +match(string, /^'(.*)'$/, temp) +if (temp[0]) { +string = temp[1] +gsub(/'\\''/, "'", string) +return string +} +match(string, /^"(.*)"$/, temp) +if (temp[0]) { +string = temp[1] +return unescape(string) +} +return string +} +function toString(value, inline, heredoc, valOnly, numSub, level, sortedIn, +i, items, j, k, p, saveSortedIn, temp, v) { +if (!level) level = 0 +if (!sortedIn) +sortedIn = "compareByIndexFields" +if (isarray(value)) { +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = sortedIn +p = 0 +for (i in value) { +split(i, j, SUBSEP); k = join(j, ",") +if (!numSub || !isnum(k)) k = parameterize(k, "\"") +v = toString(value[i], inline, heredoc, valOnly, numSub, level + 1, sortedIn) +if (!isarray(value[i])) v = parameterize(v, "\"") +if (valOnly) +items[p++] = inline ? v : (replicate("\t", level) v) +else +items[p++] = inline ? (k ": " v) : +(replicate("\t", level) k "\t" v) +} +PROCINFO["sorted_in"] = saveSortedIn +temp = inline ? join(items, ", ") : +("\n" join(items, "\n") "\n" replicate("\t", level)) +temp = valOnly ? ("[" temp "]") : ("{" temp "}") +return temp +} else { +if (heredoc) +return "'''\n" value "\n'''" +else +return value +} +} +function squeeze(line, preserveIndent) { +if (!preserveIndent) +gsub(/^[[:space:]]+/, NULLSTR, line) +gsub(/^[[:space:]]*#.*$/, NULLSTR, line) +gsub(/#[^"/]*$/, NULLSTR, line) +gsub(/[[:space:]]+$/, NULLSTR, line) +gsub(/[[:space:]]+\\$/, "\\", line) +return line +} +function yn(string) { +return (tolower(string) ~ /^([0fn]|off)/) ? 0 : 1 +} +function initAnsiCode() { +if (ENVIRON["TERM"] == "dumb") return +AnsiCode["reset"] = AnsiCode[0] = "\33[0m" +AnsiCode["bold"] = "\33[1m" +AnsiCode["underline"] = "\33[4m" +AnsiCode["negative"] = "\33[7m" +AnsiCode["no bold"] = "\33[22m" +AnsiCode["no underline"] = "\33[24m" +AnsiCode["positive"] = "\33[27m" +AnsiCode["black"] = "\33[30m" +AnsiCode["red"] = "\33[31m" +AnsiCode["green"] = "\33[32m" +AnsiCode["yellow"] = "\33[33m" +AnsiCode["blue"] = "\33[34m" +AnsiCode["magenta"] = "\33[35m" +AnsiCode["cyan"] = "\33[36m" +AnsiCode["gray"] = "\33[37m" +AnsiCode["default"] = "\33[39m" +AnsiCode["dark gray"] = "\33[90m" +AnsiCode["light red"] = "\33[91m" +AnsiCode["light green"] = "\33[92m" +AnsiCode["light yellow"] = "\33[93m" +AnsiCode["light blue"] = "\33[94m" +AnsiCode["light magenta"] = "\33[95m" +AnsiCode["light cyan"] = "\33[96m" +AnsiCode["white"] = "\33[97m" +} +function ansi(code, text) { +switch (code) { +case "bold": +return AnsiCode[code] text AnsiCode["no bold"] +case "underline": +return AnsiCode[code] text AnsiCode["no underline"] +case "negative": +return AnsiCode[code] text AnsiCode["positive"] +default: +return AnsiCode[code] text AnsiCode[0] +} +} +function w(text) { +print ansi("yellow", text) > STDERR +} +function e(text) { +print ansi("bold", ansi("yellow", text)) > STDERR +} +function wtf(text) { +print ansi("bold", ansi("red", text)) > STDERR +} +function d(text) { +print ansi("gray", text) > STDERR +} +function da(value, name, inline, heredoc, valOnly, numSub, sortedIn, +i, j, saveSortedIn) { +if (!name) +name = "_" +if (!sortedIn) +sortedIn = "compareByIndexFields" +d(name " = " toString(value, inline, heredoc, valOnly, numSub, 0, sortedIn)) +} +function assert(x, message) { +if (!message) +message = "[ERROR] Assertion failed." +if (x) +return x +else +e(message) +} +function initUrlEncoding() { +UrlEncoding["\t"] = "%09" +UrlEncoding["\n"] = "%0A" +UrlEncoding[" "] = "%20" +UrlEncoding["!"] = "%21" +UrlEncoding["\""] = "%22" +UrlEncoding["#"] = "%23" +UrlEncoding["$"] = "%24" +UrlEncoding["%"] = "%25" +UrlEncoding["&"] = "%26" +UrlEncoding["'"] = "%27" +UrlEncoding["("] = "%28" +UrlEncoding[")"] = "%29" +UrlEncoding["*"] = "%2A" +UrlEncoding["+"] = "%2B" +UrlEncoding[","] = "%2C" +UrlEncoding["-"] = "%2D" +UrlEncoding["."] = "%2E" +UrlEncoding["/"] = "%2F" +UrlEncoding[":"] = "%3A" +UrlEncoding[";"] = "%3B" +UrlEncoding["<"] = "%3C" +UrlEncoding["="] = "%3D" +UrlEncoding[">"] = "%3E" +UrlEncoding["?"] = "%3F" +UrlEncoding["@"] = "%40" +UrlEncoding["["] = "%5B" +UrlEncoding["\\"] = "%5C" +UrlEncoding["]"] = "%5D" +UrlEncoding["^"] = "%5E" +UrlEncoding["_"] = "%5F" +UrlEncoding["`"] = "%60" +UrlEncoding["{"] = "%7B" +UrlEncoding["|"] = "%7C" +UrlEncoding["}"] = "%7D" +UrlEncoding["~"] = "%7E" +} +function quote(string, i, r, s) { +r = NULLSTR +explode(string, s) +for (i = 1; i <= length(s); i++) +r = r (s[i] in UrlEncoding ? UrlEncoding[s[i]] : s[i]) +return r +} +function unquote(string, i, k, r, s, temp) { +r = NULLSTR +explode(string, s) +temp = NULLSTR +for (i = 1; i <= length(s); i++) +if (temp) { +temp = temp s[i] +if (length(temp) > 2) { +for (k in UrlEncoding) +if (temp == UrlEncoding[k]) { +r = r k +temp = NULLSTR +break +} +if (temp) { +r = r temp +temp = NULLSTR +} +} +} else { +if (s[i] != "%") +r = r s[i] +else +temp = s[i] +} +if (temp) +r = r temp +return r +} +function initUriSchemes() { +UriSchemes[0] = "file://" +UriSchemes[1] = "http://" +UriSchemes[2] = "https://" +} +function readFrom(file, line, text) { +if (!file) file = "/dev/stdin" +text = NULLSTR +while (getline line < file) +text = (text ? text "\n" : NULLSTR) line +return text +} +function writeTo(text, file) { +if (!file) file = "/dev/stdout" +print text > file +} +function getOutput(command, content, line) { +content = NULLSTR +while ((command |& getline line) > 0) +content = (content ? content "\n" : NULLSTR) line +close(command) +return content +} +function fileExists(file) { +return !system("test -f " parameterize(file)) +} +function dirExists(file) { +return !system("test -d " parameterize(file)) +} +function detectProgram(prog, arg, returnOutput, command, temp) { +command = prog " " arg SUPERR +command | getline temp +close(command) +if (returnOutput) +return temp +if (temp) +return prog +return NULLSTR +} +function getGitHead( line, group) { +if (fileExists(".git/HEAD")) { +getline line < ".git/HEAD" +match(line, /^ref: (.*)$/, group) +if (fileExists(".git/" group[1])) { +getline line < (".git/" group[1]) +return substr(line, 1, 7) +} else +return NULLSTR +} else +return NULLSTR +} +BEGIN { +initConst() +initAnsiCode() +initUrlEncoding() +initUriSchemes() +} +function initGawk( group) { +Gawk = "gawk" +GawkVersion = PROCINFO["version"] +split(PROCINFO["version"], group, ".") +if (group[1] < 4) { +e("[ERROR] Oops! Your gawk (version " GawkVersion ") "\ +"appears to be too old.\n"\ +" You need at least gawk 4.0.0 to run this program.") +exit 1 +} +} +function initBiDiTerm() { +if (ENVIRON["MLTERM"]) +BiDiTerm = "mlterm" +else if (ENVIRON["KONSOLE_VERSION"]) +BiDiTerm = "konsole" +} +function initBiDi() { +FriBidi = detectProgram("fribidi", "--version", 1) +BiDiNoPad = FriBidi ? "fribidi --nopad" : "rev" SUPERR +BiDi = FriBidi ? "fribidi --width %s" : +"rev" SUPERR "| sed \"s/'/\\\\\\'/\" | xargs -0 printf '%%%ss'" +} +function initRlwrap() { +Rlwrap = detectProgram("rlwrap", "--version") +} +function initEmacs() { +Emacs = detectProgram("emacs", "--version") +} +function initCurl() { +Curl = detectProgram("curl", "--version") +} +function l(value, name, inline, heredoc, valOnly, numSub, sortedIn) { +if (Option["debug"]) { +if (name) +da(value, name, inline, heredoc, valOnly, numSub, sortedIn) +else +d(value) +} +} +function m(string) { +if (Option["debug"]) +return ansi("cyan", string) RS +} +function newerVersion(ver1, ver2, i, group1, group2) { +split(ver1, group1, ".") +split(ver2, group2, ".") +for (i = 1; i <= 4; i++) { +if (group1[i] + 0 > group2[i] + 0) +return 1 +else if (group1[i] + 0 < group2[i] + 0) +return 0 +} +return 0 +} +function rlwrapMe( i, command) { +initRlwrap() +if (!Rlwrap) { +l(">> not found: rlwrap") +return 1 +} +if (ENVIRON["TRANS_ENTRY"]) { +command = Rlwrap " " ENVIRON["TRANS_ENTRY"] " "\ +parameterize("-no-rlwrap") +} else if (fileExists(ENVIRON["TRANS_DIR"] "/" EntryScript)) { +command = Rlwrap " sh "\ +parameterize(ENVIRON["TRANS_DIR"] "/" EntryScript)\ +" - " parameterize("-no-rlwrap") +} else { +l(">> not found: $TRANS_ENTRY or EntryPoint") +return 1 +} +for (i = 1; i < length(ARGV); i++) +if (ARGV[i]) +command = command " " parameterize(ARGV[i]) +l(">> forking: " command) +if (!system(command)) { +l(">> process exited with code 0") +exit ExitCode +} else { +l(">> process exited with non-zero return code") +return 1 +} +} +function emacsMe( i, params, el, command) { +initEmacs() +if (!Emacs) { +l(">> not found: emacs") +return 1 +} +params = "" +for (i = 1; i < length(ARGV); i++) +if (ARGV[i]) +params = params " " parameterize(ARGV[i], "\"") +if (ENVIRON["TRANS_ENTRY"]) { +el = "(progn (setq explicit-shell-file-name \"" ENVIRON["TRANS_ENTRY"] "\") "\ +"(setq explicit-" Command "-args '(\"-I\" \"-no-rlwrap\"" params ")) "\ +"(command-execute 'shell) (rename-buffer \"" Name "\"))" +} else if (fileExists(ENVIRON["TRANS_DIR"] "/" EntryScript)) { +el = "(progn (setq explicit-shell-file-name \"" "sh" "\") "\ +"(setq explicit-" "sh" "-args '(\"" ENVIRON["TRANS_DIR"] "/" EntryScript "\" \"-I\" \"-no-rlwrap\"" params ")) "\ +"(command-execute 'shell) (rename-buffer \"" Name "\"))" +} else { +l(">> not found: $TRANS_ENTRY or EntryPoint") +return 1 +} +command = Emacs " --eval " parameterize(el) +l(">> forking: " command) +if (!system(command)) { +l(">> process exited with code 0") +exit ExitCode +} else { +l(">> process exited with non-zero return code") +return 1 +} +} +function curl(url, output, command, content, line) { +initCurl() +if (!Curl) { +l(">> not found: curl") +w("[WARNING] curl is not found.") +return NULLSTR +} +command = Curl " --location --silent" +if (Option["proxy"]) +command = command " --proxy " parameterize(Option["proxy"]) +if (Option["user-agent"]) +command = command " --user-agent " parameterize(Option["user-agent"]) +command = command " " parameterize(url) +if (output) { +command = command " --output " parameterize(output) +system(command) +return NULLSTR +} +content = NULLSTR +while ((command |& getline line) > 0) +content = (content ? content "\n" : NULLSTR) line +close(command) +return content +} +function curlPost(url, data, output, command, content, line) { +initCurl() +if (!Curl) { +l(">> not found: curl") +w("[WARNING] curl is not found.") +return NULLSTR +} +command = Curl " --location --silent" +if (Option["proxy"]) +command = command " --proxy " parameterize(Option["proxy"]) +if (Option["user-agent"]) +command = command " --user-agent " parameterize(Option["user-agent"]) +command = command " --request POST --data " parameterize(data) +command = command " " parameterize(url) +if (output) { +command = command " --output " parameterize(output) +system(command) +return NULLSTR +} +content = NULLSTR +while ((command |& getline line) > 0) +content = (content ? content "\n" : NULLSTR) line +close(command) +return content +} +function dump(text, group, command, temp) { +command = "hexdump" " -v -e'1/1 \"%03u\" \" \"'" +command = "echo " parameterize(text) PIPE command +command | getline temp +split(temp, group, " ") +close(command) +return length(group) - 1 +} +function dumpX(text, group, command, temp) { +command = "hexdump" " -v -e'1/1 \"%02X\" \" \"'" +command = "echo " parameterize(text) PIPE command +command | getline temp +split(temp, group, " ") +close(command) +return length(group) - 1 +} +function base64(text, command, temp) { +command = "echo -n " parameterize(text) PIPE "base64" +command = "bash -c " parameterize(command, "\"") +command | getline temp +close(command) +return temp +} +function uprintf(text, command, temp) { +command = "echo -en " parameterize(text) +command = "bash -c " parameterize(command, "\"") +command | getline temp +close(command) +return temp +} +function initLocale() { +Locale["af"]["name"] = "Afrikaans" +Locale["af"]["endonym"] = "Afrikaans" +Locale["af"]["translations-of"] = "Vertalings van %s" +Locale["af"]["definitions-of"] = "Definisies van %s" +Locale["af"]["synonyms"] = "Sinonieme" +Locale["af"]["examples"] = "Voorbeelde" +Locale["af"]["see-also"] = "Sien ook" +Locale["af"]["family"] = "Indo-European" +Locale["af"]["iso"] = "afr" +Locale["af"]["glotto"] = "afri1274" +Locale["af"]["script"] = "Latn" +Locale["sq"]["name"] = "Albanian" +Locale["sq"]["endonym"] = "Shqip" +Locale["sq"]["translations-of"] = "Përkthimet e %s" +Locale["sq"]["definitions-of"] = "Përkufizime të %s" +Locale["sq"]["synonyms"] = "Sinonime" +Locale["sq"]["examples"] = "Shembuj" +Locale["sq"]["see-also"] = "Shihni gjithashtu" +Locale["sq"]["family"] = "Indo-European" +Locale["sq"]["iso"] = "sqi" +Locale["sq"]["glotto"] = "alba1267" +Locale["sq"]["script"] = "Latn" +Locale["am"]["name"] = "Amharic" +Locale["am"]["endonym"] = "አማርኛ" +Locale["am"]["translations-of"] = "የ %s ትርጉሞች" +Locale["am"]["definitions-of"] = "የ %s ቃላት ፍችዎች" +Locale["am"]["synonyms"] = "ተመሳሳይ ቃላት" +Locale["am"]["examples"] = "ምሳሌዎች" +Locale["am"]["see-also"] = "የሚከተለውንም ይመልከቱ" +Locale["am"]["family"] = "Afro-Asiatic" +Locale["am"]["iso"] = "amh" +Locale["am"]["glotto"] = "amha1245" +Locale["am"]["script"] = "Ethi" +Locale["ar"]["name"] = "Arabic" +Locale["ar"]["endonym"] = "العربية" +Locale["ar"]["translations-of"] = "ترجمات %s" +Locale["ar"]["definitions-of"] = "تعريفات %s" +Locale["ar"]["synonyms"] = "مرادفات" +Locale["ar"]["examples"] = "أمثلة" +Locale["ar"]["see-also"] = "انظر أيضًا" +Locale["ar"]["family"] = "Afro-Asiatic" +Locale["ar"]["iso"] = "ara" +Locale["ar"]["glotto"] = "stan1318" +Locale["ar"]["script"] = "Arab" +Locale["ar"]["rtl"] = "true" +Locale["hy"]["name"] = "Armenian" +Locale["hy"]["endonym"] = "Հայերեն" +Locale["hy"]["translations-of"] = "%s-ի թարգմանությունները" +Locale["hy"]["definitions-of"] = "%s-ի սահմանումները" +Locale["hy"]["synonyms"] = "Հոմանիշներ" +Locale["hy"]["examples"] = "Օրինակներ" +Locale["hy"]["see-also"] = "Տես նաև" +Locale["hy"]["family"] = "Indo-European" +Locale["hy"]["iso"] = "hye" +Locale["hy"]["glotto"] = "nucl1235" +Locale["hy"]["script"] = "Armn" +Locale["az"]["name"] = "Azerbaijani" +Locale["az"]["endonym"] = "Azərbaycanca" +Locale["az"]["translations-of"] = "%s sözünün tərcüməsi" +Locale["az"]["definitions-of"] = "%s sözünün tərifləri" +Locale["az"]["synonyms"] = "Sinonimlər" +Locale["az"]["examples"] = "Nümunələr" +Locale["az"]["see-also"] = "Həmçinin, baxın:" +Locale["az"]["family"] = "Turkic" +Locale["az"]["iso"] = "aze" +Locale["az"]["glotto"] = "nort2697" +Locale["az"]["script"] = "Latn" +Locale["eu"]["name"] = "Basque" +Locale["eu"]["endonym"] = "Euskara" +Locale["eu"]["translations-of"] = "%s esapidearen itzulpena" +Locale["eu"]["definitions-of"] = "Honen definizioak: %s" +Locale["eu"]["synonyms"] = "Sinonimoak" +Locale["eu"]["examples"] = "Adibideak" +Locale["eu"]["see-also"] = "Ikusi hauek ere" +Locale["eu"]["family"] = "Language Isolate" +Locale["eu"]["iso"] = "eus" +Locale["eu"]["glotto"] = "basq1248" +Locale["eu"]["script"] = "Latn" +Locale["be"]["name"] = "Belarusian" +Locale["be"]["endonym"] = "беларуская" +Locale["be"]["translations-of"] = "Пераклады %s" +Locale["be"]["definitions-of"] = "Вызначэннi %s" +Locale["be"]["synonyms"] = "Сінонімы" +Locale["be"]["examples"] = "Прыклады" +Locale["be"]["see-also"] = "Гл. таксама" +Locale["be"]["family"] = "Indo-European" +Locale["be"]["iso"] = "bel" +Locale["be"]["glotto"] = "bela1254" +Locale["be"]["script"] = "Cyrl" +Locale["bn"]["name"] = "Bengali" +Locale["bn"]["endonym"] = "বাংলা" +Locale["bn"]["translations-of"] = "%s এর অনুবাদ" +Locale["bn"]["definitions-of"] = "%s এর সংজ্ঞা" +Locale["bn"]["synonyms"] = "প্রতিশব্দ" +Locale["bn"]["examples"] = "উদাহরণ" +Locale["bn"]["see-also"] = "আরো দেখুন" +Locale["bn"]["family"] = "Indo-European" +Locale["bn"]["iso"] = "ben" +Locale["bn"]["glotto"] = "beng1280" +Locale["bn"]["script"] = "Beng" +Locale["bs"]["name"] = "Bosnian" +Locale["bs"]["endonym"] = "Bosanski" +Locale["bs"]["translations-of"] = "Prijevod za: %s" +Locale["bs"]["definitions-of"] = "Definicije za %s" +Locale["bs"]["synonyms"] = "Sinonimi" +Locale["bs"]["examples"] = "Primjeri" +Locale["bs"]["see-also"] = "Pogledajte i" +Locale["bs"]["family"] = "Indo-European" +Locale["bs"]["iso"] = "bos" +Locale["bs"]["glotto"] = "bosn1245" +Locale["bs"]["script"] = "Latn" +Locale["bg"]["name"] = "Bulgarian" +Locale["bg"]["endonym"] = "български" +Locale["bg"]["translations-of"] = "Преводи на %s" +Locale["bg"]["definitions-of"] = "Дефиниции за %s" +Locale["bg"]["synonyms"] = "Синоними" +Locale["bg"]["examples"] = "Примери" +Locale["bg"]["see-also"] = "Вижте също" +Locale["bg"]["family"] = "Indo-European" +Locale["bg"]["iso"] = "bul" +Locale["bg"]["glotto"] = "bulg1262" +Locale["bg"]["script"] = "Cyrl" +Locale["ca"]["name"] = "Catalan" +Locale["ca"]["endonym"] = "Català" +Locale["ca"]["translations-of"] = "Traduccions per a %s" +Locale["ca"]["definitions-of"] = "Definicions de: %s" +Locale["ca"]["synonyms"] = "Sinònims" +Locale["ca"]["examples"] = "Exemples" +Locale["ca"]["see-also"] = "Vegeu també" +Locale["ca"]["family"] = "Indo-European" +Locale["ca"]["iso"] = "cat" +Locale["ca"]["glotto"] = "stan1289" +Locale["ca"]["script"] = "Latn" +Locale["ceb"]["name"] = "Cebuano" +Locale["ceb"]["endonym"] = "Cebuano" +Locale["ceb"]["translations-of"] = "%s Mga Paghubad sa PULONG_O_HUGPONG SA PAMULONG" +Locale["ceb"]["definitions-of"] = "Mga kahulugan sa %s" +Locale["ceb"]["synonyms"] = "Mga Kapulong" +Locale["ceb"]["examples"] = "Mga pananglitan:" +Locale["ceb"]["see-also"] = "Kitaa pag-usab" +Locale["ceb"]["family"] = "Austronesian" +Locale["ceb"]["iso"] = "ceb" +Locale["ceb"]["glotto"] = "cebu1242" +Locale["ceb"]["script"] = "Latn" +Locale["ny"]["name"] = "Chichewa" +Locale["ny"]["endonym"] = "Nyanja" +Locale["ny"]["translations-of"] = "Matanthauzidwe a %s" +Locale["ny"]["definitions-of"] = "Mamasulidwe a %s" +Locale["ny"]["synonyms"] = "Mau ofanana" +Locale["ny"]["examples"] = "Zitsanzo" +Locale["ny"]["see-also"] = "Onaninso" +Locale["ny"]["family"] = "Atlantic-Congo" +Locale["ny"]["iso"] = "nya" +Locale["ny"]["glotto"] = "nyan1308" +Locale["ny"]["script"] = "Latn" +Locale["zh-CN"]["name"] = "Chinese Simplified" +Locale["zh-CN"]["endonym"] = "简体中文" +Locale["zh-CN"]["translations-of"] = "%s 的翻译" +Locale["zh-CN"]["definitions-of"] = "%s的定义" +Locale["zh-CN"]["synonyms"] = "同义词" +Locale["zh-CN"]["examples"] = "示例" +Locale["zh-CN"]["see-also"] = "另请参阅" +Locale["zh-CN"]["family"] = "Sino-Tibetan" +Locale["zh-CN"]["iso"] = "zho-CN" +Locale["zh-CN"]["glotto"] = "mand1415" +Locale["zh-CN"]["script"] = "Hans" +Locale["zh-CN"]["dictionary"] = "true" +Locale["zh-TW"]["name"] = "Chinese Traditional" +Locale["zh-TW"]["endonym"] = "正體中文" +Locale["zh-TW"]["translations-of"] = "「%s」的翻譯" +Locale["zh-TW"]["definitions-of"] = "「%s」的定義" +Locale["zh-TW"]["synonyms"] = "同義詞" +Locale["zh-TW"]["examples"] = "例句" +Locale["zh-TW"]["see-also"] = "另請參閱" +Locale["zh-TW"]["family"] = "Sino-Tibetan" +Locale["zh-TW"]["iso"] = "zho-TW" +Locale["zh-TW"]["glotto"] = "mand1415" +Locale["zh-TW"]["script"] = "Hant" +Locale["zh-TW"]["dictionary"] = "true" +Locale["co"]["name"] = "Corsican" +Locale["co"]["endonym"] = "Corsu" +Locale["co"]["translations-of"] = "Traductions de %s" +Locale["co"]["definitions-of"] = "Définitions de %s" +Locale["co"]["synonyms"] = "Synonymes" +Locale["co"]["examples"] = "Exemples" +Locale["co"]["see-also"] = "Voir aussi" +Locale["co"]["family"] = "Indo-European" +Locale["co"]["iso"] = "cos" +Locale["co"]["glotto"] = "cors1242" +Locale["co"]["script"] = "Latn" +Locale["hr"]["name"] = "Croatian" +Locale["hr"]["endonym"] = "Hrvatski" +Locale["hr"]["translations-of"] = "Prijevodi riječi ili izraza %s" +Locale["hr"]["definitions-of"] = "Definicije riječi ili izraza %s" +Locale["hr"]["synonyms"] = "Sinonimi" +Locale["hr"]["examples"] = "Primjeri" +Locale["hr"]["see-also"] = "Također pogledajte" +Locale["hr"]["family"] = "Indo-European" +Locale["hr"]["iso"] = "hrv" +Locale["hr"]["glotto"] = "croa1245" +Locale["hr"]["script"] = "Latn" +Locale["cs"]["name"] = "Czech" +Locale["cs"]["endonym"] = "Čeština" +Locale["cs"]["translations-of"] = "Překlad výrazu %s" +Locale["cs"]["definitions-of"] = "Definice výrazu %s" +Locale["cs"]["synonyms"] = "Synonyma" +Locale["cs"]["examples"] = "Příklady" +Locale["cs"]["see-also"] = "Viz také" +Locale["cs"]["family"] = "Indo-European" +Locale["cs"]["iso"] = "ces" +Locale["cs"]["glotto"] = "czec1258" +Locale["cs"]["script"] = "Latn" +Locale["da"]["name"] = "Danish" +Locale["da"]["endonym"] = "Dansk" +Locale["da"]["translations-of"] = "Oversættelser af %s" +Locale["da"]["definitions-of"] = "Definitioner af %s" +Locale["da"]["synonyms"] = "Synonymer" +Locale["da"]["examples"] = "Eksempler" +Locale["da"]["see-also"] = "Se også" +Locale["da"]["family"] = "Indo-European" +Locale["da"]["iso"] = "dan" +Locale["da"]["glotto"] = "dani1285" +Locale["da"]["script"] = "Latn" +Locale["nl"]["name"] = "Dutch" +Locale["nl"]["endonym"] = "Nederlands" +Locale["nl"]["translations-of"] = "Vertalingen van %s" +Locale["nl"]["definitions-of"] = "Definities van %s" +Locale["nl"]["synonyms"] = "Synoniemen" +Locale["nl"]["examples"] = "Voorbeelden" +Locale["nl"]["see-also"] = "Zie ook" +Locale["nl"]["family"] = "Indo-European" +Locale["nl"]["iso"] = "nld" +Locale["nl"]["glotto"] = "dutc1256" +Locale["nl"]["script"] = "Latn" +Locale["nl"]["dictionary"] = "true" +Locale["en"]["name"] = "English" +Locale["en"]["endonym"] = "English" +Locale["en"]["translations-of"] = "Translations of %s" +Locale["en"]["definitions-of"] = "Definitions of %s" +Locale["en"]["synonyms"] = "Synonyms" +Locale["en"]["examples"] = "Examples" +Locale["en"]["see-also"] = "See also" +Locale["en"]["family"] = "Indo-European" +Locale["en"]["iso"] = "eng" +Locale["en"]["glotto"] = "stan1293" +Locale["en"]["script"] = "Latn" +Locale["en"]["dictionary"] = "true" +Locale["eo"]["name"] = "Esperanto" +Locale["eo"]["endonym"] = "Esperanto" +Locale["eo"]["translations-of"] = "Tradukoj de %s" +Locale["eo"]["definitions-of"] = "Difinoj de %s" +Locale["eo"]["synonyms"] = "Sinonimoj" +Locale["eo"]["examples"] = "Ekzemploj" +Locale["eo"]["see-also"] = "Vidu ankaŭ" +Locale["eo"]["family"] = "Artificial Language" +Locale["eo"]["iso"] = "epo" +Locale["eo"]["glotto"] = "espe1235" +Locale["eo"]["script"] = "Latn" +Locale["et"]["name"] = "Estonian" +Locale["et"]["endonym"] = "Eesti" +Locale["et"]["translations-of"] = "Sõna(de) %s tõlked" +Locale["et"]["definitions-of"] = "Sõna(de) %s definitsioonid" +Locale["et"]["synonyms"] = "Sünonüümid" +Locale["et"]["examples"] = "Näited" +Locale["et"]["see-also"] = "Vt ka" +Locale["et"]["family"] = "Uralic" +Locale["et"]["iso"] = "est" +Locale["et"]["glotto"] = "esto1258" +Locale["et"]["script"] = "Latn" +Locale["tl"]["name"] = "Filipino" +Locale["tl"]["endonym"] = "Tagalog" +Locale["tl"]["translations-of"] = "Mga pagsasalin ng %s" +Locale["tl"]["definitions-of"] = "Mga kahulugan ng %s" +Locale["tl"]["synonyms"] = "Mga Kasingkahulugan" +Locale["tl"]["examples"] = "Mga Halimbawa" +Locale["tl"]["see-also"] = "Tingnan rin ang" +Locale["tl"]["family"] = "Austronesian" +Locale["tl"]["iso"] = "tgl" +Locale["tl"]["glotto"] = "taga1270" +Locale["tl"]["script"] = "Latn" +Locale["fi"]["name"] = "Finnish" +Locale["fi"]["endonym"] = "Suomi" +Locale["fi"]["translations-of"] = "Käännökset tekstille %s" +Locale["fi"]["definitions-of"] = "Määritelmät kohteelle %s" +Locale["fi"]["synonyms"] = "Synonyymit" +Locale["fi"]["examples"] = "Esimerkkejä" +Locale["fi"]["see-also"] = "Katso myös" +Locale["fi"]["family"] = "Uralic" +Locale["fi"]["iso"] = "fin" +Locale["fi"]["glotto"] = "finn1318" +Locale["fi"]["script"] = "Latn" +Locale["fr"]["name"] = "French" +Locale["fr"]["endonym"] = "Français" +Locale["fr"]["translations-of"] = "Traductions de %s" +Locale["fr"]["definitions-of"] = "Définitions de %s" +Locale["fr"]["synonyms"] = "Synonymes" +Locale["fr"]["examples"] = "Exemples" +Locale["fr"]["see-also"] = "Voir aussi" +Locale["fr"]["family"] = "Indo-European" +Locale["fr"]["iso"] = "fra" +Locale["fr"]["glotto"] = "stan1290" +Locale["fr"]["script"] = "Latn" +Locale["fr"]["dictionary"] = "true" +Locale["gl"]["name"] = "Galician" +Locale["gl"]["endonym"] = "Galego" +Locale["gl"]["translations-of"] = "Traducións de %s" +Locale["gl"]["definitions-of"] = "Definicións de %s" +Locale["gl"]["synonyms"] = "Sinónimos" +Locale["gl"]["examples"] = "Exemplos" +Locale["gl"]["see-also"] = "Ver tamén" +Locale["gl"]["family"] = "Indo-European" +Locale["gl"]["iso"] = "glg" +Locale["gl"]["glotto"] = "gali1258" +Locale["gl"]["script"] = "Latn" +Locale["ka"]["name"] = "Georgian" +Locale["ka"]["endonym"] = "ქართული" +Locale["ka"]["translations-of"] = "%s-ის თარგმანები" +Locale["ka"]["definitions-of"] = "%s-ის განსაზღვრებები" +Locale["ka"]["synonyms"] = "სინონიმები" +Locale["ka"]["examples"] = "მაგალითები" +Locale["ka"]["see-also"] = "ასევე იხილეთ" +Locale["ka"]["family"] = "Kartvelian" +Locale["ka"]["iso"] = "kat" +Locale["ka"]["glotto"] = "nucl1302" +Locale["ka"]["script"] = "Geor" +Locale["de"]["name"] = "German" +Locale["de"]["endonym"] = "Deutsch" +Locale["de"]["translations-of"] = "Übersetzungen für %s" +Locale["de"]["definitions-of"] = "Definitionen von %s" +Locale["de"]["synonyms"] = "Synonyme" +Locale["de"]["examples"] = "Beispiele" +Locale["de"]["see-also"] = "Siehe auch" +Locale["de"]["family"] = "Indo-European" +Locale["de"]["iso"] = "deu" +Locale["de"]["glotto"] = "stan1295" +Locale["de"]["script"] = "Latn" +Locale["de"]["dictionary"] = "true" +Locale["el"]["name"] = "Greek" +Locale["el"]["endonym"] = "Ελληνικά" +Locale["el"]["translations-of"] = "Μεταφράσεις του %s" +Locale["el"]["definitions-of"] = "Όρισμοί %s" +Locale["el"]["synonyms"] = "Συνώνυμα" +Locale["el"]["examples"] = "Παραδείγματα" +Locale["el"]["see-also"] = "Δείτε επίσης" +Locale["el"]["family"] = "Indo-European" +Locale["el"]["iso"] = "ell" +Locale["el"]["glotto"] = "mode1248" +Locale["el"]["script"] = "Grek" +Locale["gu"]["name"] = "Gujarati" +Locale["gu"]["endonym"] = "ગુજરાતી" +Locale["gu"]["translations-of"] = "%s ના અનુવાદ" +Locale["gu"]["definitions-of"] = "%s ની વ્યાખ્યાઓ" +Locale["gu"]["synonyms"] = "સમાનાર્થી" +Locale["gu"]["examples"] = "ઉદાહરણો" +Locale["gu"]["see-also"] = "આ પણ જુઓ" +Locale["gu"]["family"] = "Indo-European" +Locale["gu"]["iso"] = "guj" +Locale["gu"]["glotto"] = "guja1252" +Locale["gu"]["script"] = "Gujr" +Locale["ht"]["name"] = "Haitian Creole" +Locale["ht"]["endonym"] = "Kreyòl Ayisyen" +Locale["ht"]["translations-of"] = "Tradiksyon %s" +Locale["ht"]["definitions-of"] = "Definisyon nan %s" +Locale["ht"]["synonyms"] = "Sinonim" +Locale["ht"]["examples"] = "Egzanp:" +Locale["ht"]["see-also"] = "Wè tou" +Locale["ht"]["family"] = "Indo-European" +Locale["ht"]["iso"] = "hat" +Locale["ht"]["glotto"] = "hait1244" +Locale["ht"]["script"] = "Latn" +Locale["haw"]["name"] = "Hawaiian" +Locale["haw"]["endonym"] = "ʻŌlelo Hawaiʻi" +Locale["haw"]["family"] = "Austronesian" +Locale["haw"]["iso"] = "haw" +Locale["haw"]["glotto"] = "hawa1245" +Locale["haw"]["script"] = "Latn" +Locale["ha"]["name"] = "Hausa" +Locale["ha"]["endonym"] = "Hausa" +Locale["ha"]["translations-of"] = "Fassarar %s" +Locale["ha"]["definitions-of"] = "Ma'anoni na %s" +Locale["ha"]["synonyms"] = "Masu kamancin ma'ana" +Locale["ha"]["examples"] = "Misalai" +Locale["ha"]["see-also"] = "Duba kuma" +Locale["ha"]["family"] = "Afro-Asiatic" +Locale["ha"]["iso"] = "hau" +Locale["ha"]["glotto"] = "haus1257" +Locale["ha"]["script"] = "Latn" +Locale["he"]["name"] = "Hebrew" +Locale["he"]["endonym"] = "עִבְרִית" +Locale["he"]["translations-of"] = "תרגומים של %s" +Locale["he"]["definitions-of"] = "הגדרות של %s" +Locale["he"]["synonyms"] = "מילים נרדפות" +Locale["he"]["examples"] = "דוגמאות" +Locale["he"]["see-also"] = "ראה גם" +Locale["he"]["family"] = "Afro-Asiatic" +Locale["he"]["iso"] = "heb" +Locale["he"]["glotto"] = "hebr1245" +Locale["he"]["script"] = "Hebr" +Locale["he"]["rtl"] = "true" +Locale["hi"]["name"] = "Hindi" +Locale["hi"]["endonym"] = "हिन्दी" +Locale["hi"]["translations-of"] = "%s के अनुवाद" +Locale["hi"]["definitions-of"] = "%s की परिभाषाएं" +Locale["hi"]["synonyms"] = "समानार्थी" +Locale["hi"]["examples"] = "उदाहरण" +Locale["hi"]["see-also"] = "यह भी देखें" +Locale["hi"]["family"] = "Indo-European" +Locale["hi"]["iso"] = "hin" +Locale["hi"]["glotto"] = "hind1269" +Locale["hi"]["script"] = "Deva" +Locale["hmn"]["name"] = "Hmong" +Locale["hmn"]["endonym"] = "Hmoob" +Locale["hmn"]["translations-of"] = "Lus txhais: %s" +Locale["hmn"]["family"] = "Hmong-Mien" +Locale["hmn"]["iso"] = "hmn" +Locale["hmn"]["glotto"] = "firs1234" +Locale["hmn"]["script"] = "Latn" +Locale["hu"]["name"] = "Hungarian" +Locale["hu"]["endonym"] = "Magyar" +Locale["hu"]["translations-of"] = "%s fordításai" +Locale["hu"]["definitions-of"] = "%s jelentései" +Locale["hu"]["synonyms"] = "Szinonimák" +Locale["hu"]["examples"] = "Példák" +Locale["hu"]["see-also"] = "Lásd még" +Locale["hu"]["family"] = "Uralic" +Locale["hu"]["iso"] = "hun" +Locale["hu"]["glotto"] = "hung1274" +Locale["hu"]["script"] = "Latn" +Locale["is"]["name"] = "Icelandic" +Locale["is"]["endonym"] = "Íslenska" +Locale["is"]["translations-of"] = "Þýðingar á %s" +Locale["is"]["definitions-of"] = "Skilgreiningar á" +Locale["is"]["synonyms"] = "Samheiti" +Locale["is"]["examples"] = "Dæmi" +Locale["is"]["see-also"] = "Sjá einnig" +Locale["is"]["family"] = "Indo-European" +Locale["is"]["iso"] = "isl" +Locale["is"]["glotto"] = "icel1247" +Locale["is"]["script"] = "Latn" +Locale["ig"]["name"] = "Igbo" +Locale["ig"]["endonym"] = "Igbo" +Locale["ig"]["translations-of"] = "Ntụgharị asụsụ nke %s" +Locale["ig"]["definitions-of"] = "Nkọwapụta nke %s" +Locale["ig"]["synonyms"] = "Okwu oyiri" +Locale["ig"]["examples"] = "Ọmụmaatụ" +Locale["ig"]["see-also"] = "Hụkwuo" +Locale["ig"]["family"] = "Atlantic-Congo" +Locale["ig"]["iso"] = "ibo" +Locale["ig"]["glotto"] = "nucl1417" +Locale["ig"]["script"] = "Latn" +Locale["id"]["name"] = "Indonesian" +Locale["id"]["endonym"] = "Bahasa Indonesia" +Locale["id"]["translations-of"] = "Terjemahan dari %s" +Locale["id"]["definitions-of"] = "Definisi %s" +Locale["id"]["synonyms"] = "Sinonim" +Locale["id"]["examples"] = "Contoh" +Locale["id"]["see-also"] = "Lihat juga" +Locale["id"]["family"] = "Austronesian" +Locale["id"]["iso"] = "ind" +Locale["id"]["glotto"] = "indo1316" +Locale["id"]["script"] = "Latn" +Locale["ga"]["name"] = "Irish" +Locale["ga"]["endonym"] = "Gaeilge" +Locale["ga"]["translations-of"] = "Aistriúcháin ar %s" +Locale["ga"]["definitions-of"] = "Sainmhínithe ar %s" +Locale["ga"]["synonyms"] = "Comhchiallaigh" +Locale["ga"]["examples"] = "Samplaí" +Locale["ga"]["see-also"] = "féach freisin" +Locale["ga"]["family"] = "Indo-European" +Locale["ga"]["iso"] = "gle" +Locale["ga"]["glotto"] = "iris1253" +Locale["ga"]["script"] = "Latn" +Locale["it"]["name"] = "Italian" +Locale["it"]["endonym"] = "Italiano" +Locale["it"]["translations-of"] = "Traduzioni di %s" +Locale["it"]["definitions-of"] = "Definizioni di %s" +Locale["it"]["synonyms"] = "Sinonimi" +Locale["it"]["examples"] = "Esempi" +Locale["it"]["see-also"] = "Vedi anche" +Locale["it"]["family"] = "Indo-European" +Locale["it"]["iso"] = "ita" +Locale["it"]["glotto"] = "ital1282" +Locale["it"]["script"] = "Latn" +Locale["it"]["dictionary"] = "true" +Locale["ja"]["name"] = "Japanese" +Locale["ja"]["endonym"] = "日本語" +Locale["ja"]["translations-of"] = "「%s」の翻訳" +Locale["ja"]["definitions-of"] = "%s の定義" +Locale["ja"]["synonyms"] = "同義語" +Locale["ja"]["examples"] = "例" +Locale["ja"]["see-also"] = "関連項目" +Locale["ja"]["family"] = "Japonic" +Locale["ja"]["iso"] = "jpn" +Locale["ja"]["glotto"] = "nucl1643" +Locale["ja"]["script"] = "Jpan" +Locale["ja"]["dictionary"] = "true" +Locale["jv"]["name"] = "Javanese" +Locale["jv"]["endonym"] = "Basa Jawa" +Locale["jv"]["translations-of"] = "Terjemahan %s" +Locale["jv"]["definitions-of"] = "Arti %s" +Locale["jv"]["synonyms"] = "Sinonim" +Locale["jv"]["examples"] = "Conto" +Locale["jv"]["see-also"] = "Deleng uga" +Locale["jv"]["family"] = "Austronesian" +Locale["jv"]["iso"] = "jav" +Locale["jv"]["glotto"] = "java1254" +Locale["jv"]["script"] = "Latn" +Locale["kn"]["name"] = "Kannada" +Locale["kn"]["endonym"] = "ಕನ್ನಡ" +Locale["kn"]["translations-of"] = "%s ನ ಅನುವಾದಗಳು" +Locale["kn"]["definitions-of"] = "%s ನ ವ್ಯಾಖ್ಯಾನಗಳು" +Locale["kn"]["synonyms"] = "ಸಮಾನಾರ್ಥಕಗಳು" +Locale["kn"]["examples"] = "ಉದಾಹರಣೆಗಳು" +Locale["kn"]["see-also"] = "ಇದನ್ನೂ ಗಮನಿಸಿ" +Locale["kn"]["family"] = "Dravidian" +Locale["kn"]["iso"] = "kan" +Locale["kn"]["glotto"] = "nucl1305" +Locale["kn"]["script"] = "Knda" +Locale["kk"]["name"] = "Kazakh" +Locale["kk"]["endonym"] = "Қазақ тілі" +Locale["kk"]["translations-of"] = "%s аудармалары" +Locale["kk"]["definitions-of"] = "%s анықтамалары" +Locale["kk"]["synonyms"] = "Синонимдер" +Locale["kk"]["examples"] = "Мысалдар" +Locale["kk"]["see-also"] = "Келесі тізімді де көріңіз:" +Locale["kk"]["family"] = "Turkic" +Locale["kk"]["iso"] = "kaz" +Locale["kk"]["glotto"] = "kaza1248" +Locale["kk"]["script"] = "Cyrl" +Locale["km"]["name"] = "Khmer" +Locale["km"]["endonym"] = "ភាសាខ្មែរ" +Locale["km"]["translations-of"] = "ការ​បក​ប្រែ​នៃ %s" +Locale["km"]["definitions-of"] = "និយមន័យ​នៃ​ %s" +Locale["km"]["synonyms"] = "សទិសន័យ" +Locale["km"]["examples"] = "ឧទាហរណ៍" +Locale["km"]["see-also"] = "មើល​ផង​ដែរ" +Locale["km"]["family"] = "Austroasiatic" +Locale["km"]["iso"] = "khm" +Locale["km"]["glotto"] = "cent1989" +Locale["km"]["script"] = "Khmr" +Locale["ko"]["name"] = "Korean" +Locale["ko"]["endonym"] = "한국어" +Locale["ko"]["translations-of"] = "%s의 번역" +Locale["ko"]["definitions-of"] = "%s의 정의" +Locale["ko"]["synonyms"] = "동의어" +Locale["ko"]["examples"] = "예문" +Locale["ko"]["see-also"] = "참조" +Locale["ko"]["family"] = "Koreanic" +Locale["ko"]["iso"] = "kor" +Locale["ko"]["glotto"] = "kore1280" +Locale["ko"]["script"] = "Kore" +Locale["ko"]["dictionary"] = "true" +Locale["ku"]["name"] = "Kurdish" +Locale["ku"]["endonym"] = "Kurdî" +Locale["ku"]["family"] = "Indo-European" +Locale["ku"]["iso"] = "kur" +Locale["ku"]["glotto"] = "kurd1259" +Locale["ku"]["script"] = "Latn" +Locale["ky"]["name"] = "Kyrgyz" +Locale["ky"]["endonym"] = "Кыргызча" +Locale["ky"]["translations-of"] = "%s котормосу" +Locale["ky"]["definitions-of"] = "%s аныктамасы" +Locale["ky"]["synonyms"] = "Синонимдер" +Locale["ky"]["examples"] = "Мисалдар" +Locale["ky"]["see-also"] = "Дагы караңыз" +Locale["ky"]["family"] = "Turkic" +Locale["ky"]["iso"] = "kir" +Locale["ky"]["glotto"] = "kirg1245" +Locale["ky"]["script"] = "Cyrl" +Locale["lo"]["name"] = "Lao" +Locale["lo"]["endonym"] = "ລາວ" +Locale["lo"]["translations-of"] = "ຄຳ​ແປ​ສຳລັບ %s" +Locale["lo"]["definitions-of"] = "ຄວາມໝາຍຂອງ %s" +Locale["lo"]["synonyms"] = "ຄຳທີ່ຄ້າຍກັນ %s" +Locale["lo"]["examples"] = "ຕົວຢ່າງ" +Locale["lo"]["see-also"] = "ເບິ່ງ​ເພີ່ມ​ເຕີມ" +Locale["lo"]["family"] = "Tai-Kadai" +Locale["lo"]["iso"] = "lao" +Locale["lo"]["glotto"] = "laoo1244" +Locale["lo"]["script"] = "Laoo" +Locale["la"]["name"] = "Latin" +Locale["la"]["endonym"] = "Latina" +Locale["la"]["translations-of"] = "Versio de %s" +Locale["la"]["family"] = "Indo-European" +Locale["la"]["iso"] = "lat" +Locale["la"]["glotto"] = "lati1261" +Locale["la"]["script"] = "Latn" +Locale["lv"]["name"] = "Latvian" +Locale["lv"]["endonym"] = "Latviešu" +Locale["lv"]["translations-of"] = "%s tulkojumi" +Locale["lv"]["definitions-of"] = "%s definīcijas" +Locale["lv"]["synonyms"] = "Sinonīmi" +Locale["lv"]["examples"] = "Piemēri" +Locale["lv"]["see-also"] = "Skatiet arī" +Locale["lv"]["family"] = "Indo-European" +Locale["lv"]["iso"] = "lav" +Locale["lv"]["glotto"] = "latv1249" +Locale["lv"]["script"] = "Latn" +Locale["lt"]["name"] = "Lithuanian" +Locale["lt"]["endonym"] = "Lietuvių" +Locale["lt"]["translations-of"] = "„%s“ vertimai" +Locale["lt"]["definitions-of"] = "„%s“ apibrėžimai" +Locale["lt"]["synonyms"] = "Sinonimai" +Locale["lt"]["examples"] = "Pavyzdžiai" +Locale["lt"]["see-also"] = "Taip pat žiūrėkite" +Locale["lt"]["family"] = "Indo-European" +Locale["lt"]["iso"] = "lit" +Locale["lt"]["glotto"] = "lith1251" +Locale["lt"]["script"] = "Latn" +Locale["lb"]["name"] = "Luxembourgish" +Locale["lb"]["endonym"] = "Lëtzebuergesch" +Locale["lb"]["family"] = "Indo-European" +Locale["lb"]["iso"] = "ltz" +Locale["lb"]["glotto"] = "luxe1241" +Locale["lb"]["script"] = "Latn" +Locale["mk"]["name"] = "Macedonian" +Locale["mk"]["endonym"] = "Македонски" +Locale["mk"]["translations-of"] = "Преводи на %s" +Locale["mk"]["definitions-of"] = "Дефиниции на %s" +Locale["mk"]["synonyms"] = "Синоними" +Locale["mk"]["examples"] = "Примери" +Locale["mk"]["see-also"] = "Види и" +Locale["mk"]["family"] = "Indo-European" +Locale["mk"]["iso"] = "mkd" +Locale["mk"]["glotto"] = "mace1250" +Locale["mk"]["script"] = "Cyrl" +Locale["mg"]["name"] = "Malagasy" +Locale["mg"]["endonym"] = "Malagasy" +Locale["mg"]["translations-of"] = "Dikan'ny %s" +Locale["mg"]["definitions-of"] = "Famaritana ny %s" +Locale["mg"]["synonyms"] = "Mitovy hevitra" +Locale["mg"]["examples"] = "Ohatra" +Locale["mg"]["see-also"] = "Jereo ihany koa" +Locale["mg"]["family"] = "Austronesian" +Locale["mg"]["iso"] = "mlg" +Locale["mg"]["glotto"] = "plat1254" +Locale["mg"]["script"] = "Latn" +Locale["ms"]["name"] = "Malay" +Locale["ms"]["endonym"] = "Bahasa Melayu" +Locale["ms"]["translations-of"] = "Terjemahan %s" +Locale["ms"]["definitions-of"] = "Takrif %s" +Locale["ms"]["synonyms"] = "Sinonim" +Locale["ms"]["examples"] = "Contoh" +Locale["ms"]["see-also"] = "Lihat juga" +Locale["ms"]["family"] = "Austronesian" +Locale["ms"]["iso"] = "msa" +Locale["ms"]["glotto"] = "stan1306" +Locale["ms"]["script"] = "Latn" +Locale["ml"]["name"] = "Malayalam" +Locale["ml"]["endonym"] = "മലയാളം" +Locale["ml"]["translations-of"] = "%s എന്നതിന്റെ വിവർത്തനങ്ങൾ" +Locale["ml"]["definitions-of"] = "%s എന്നതിന്റെ നിർവ്വചനങ്ങൾ" +Locale["ml"]["synonyms"] = "പര്യായങ്ങള്‍" +Locale["ml"]["examples"] = "ഉദാഹരണങ്ങള്‍" +Locale["ml"]["see-also"] = "ഇതും കാണുക" +Locale["ml"]["family"] = "Dravidian" +Locale["ml"]["iso"] = "mal" +Locale["ml"]["glotto"] = "mala1464" +Locale["ml"]["script"] = "Mlym" +Locale["mt"]["name"] = "Maltese" +Locale["mt"]["endonym"] = "Malti" +Locale["mt"]["translations-of"] = "Traduzzjonijiet ta' %s" +Locale["mt"]["definitions-of"] = "Definizzjonijiet ta' %s" +Locale["mt"]["synonyms"] = "Sinonimi" +Locale["mt"]["examples"] = "Eżempji" +Locale["mt"]["see-also"] = "Ara wkoll" +Locale["mt"]["family"] = "Afro-Asiatic" +Locale["mt"]["iso"] = "mlt" +Locale["mt"]["glotto"] = "malt1254" +Locale["mt"]["script"] = "Latn" +Locale["mi"]["name"] = "Maori" +Locale["mi"]["endonym"] = "Māori" +Locale["mi"]["translations-of"] = "Ngā whakamāoritanga o %s" +Locale["mi"]["definitions-of"] = "Ngā whakamārama o %s" +Locale["mi"]["synonyms"] = "Ngā Kupu Taurite" +Locale["mi"]["examples"] = "Ngā Tauira:" +Locale["mi"]["see-also"] = "Tiro hoki:" +Locale["mi"]["family"] = "Austronesian" +Locale["mi"]["iso"] = "mri" +Locale["mi"]["glotto"] = "maor1246" +Locale["mi"]["script"] = "Latn" +Locale["mr"]["name"] = "Marathi" +Locale["mr"]["endonym"] = "मराठी" +Locale["mr"]["translations-of"] = "%s ची भाषांतरे" +Locale["mr"]["definitions-of"] = "%s च्या व्याख्या" +Locale["mr"]["synonyms"] = "समानार्थी शब्द" +Locale["mr"]["examples"] = "उदाहरणे" +Locale["mr"]["see-also"] = "हे देखील पहा" +Locale["mr"]["family"] = "Indo-European" +Locale["mr"]["iso"] = "mar" +Locale["mr"]["glotto"] = "mara1378" +Locale["mr"]["script"] = "Deva" +Locale["mn"]["name"] = "Mongolian" +Locale["mn"]["endonym"] = "Монгол" +Locale["mn"]["translations-of"] = "%s-н орчуулга" +Locale["mn"]["definitions-of"] = "%s үгийн тодорхойлолт" +Locale["mn"]["synonyms"] = "Ойролцоо утгатай" +Locale["mn"]["examples"] = "Жишээнүүд" +Locale["mn"]["see-also"] = "Мөн харах" +Locale["mn"]["family"] = "Mongolic" +Locale["mn"]["iso"] = "mon" +Locale["mn"]["glotto"] = "mong1331" +Locale["mn"]["script"] = "Cyrl" +Locale["my"]["name"] = "Myanmar" +Locale["my"]["endonym"] = "မြန်မာစာ" +Locale["my"]["translations-of"] = "%s၏ ဘာသာပြန်ဆိုချက်များ" +Locale["my"]["definitions-of"] = "%s၏ အနက်ဖွင့်ဆိုချက်များ" +Locale["my"]["synonyms"] = "ကြောင်းတူသံကွဲများ" +Locale["my"]["examples"] = "ဥပမာ" +Locale["my"]["see-also"] = "ဖော်ပြပါများကိုလဲ ကြည့်ပါ" +Locale["my"]["family"] = "Sino-Tibetan" +Locale["my"]["iso"] = "mya" +Locale["my"]["glotto"] = "nucl1310" +Locale["my"]["script"] = "Mymr" +Locale["ne"]["name"] = "Nepali" +Locale["ne"]["endonym"] = "नेपाली" +Locale["ne"]["translations-of"] = "%sका अनुवाद" +Locale["ne"]["definitions-of"] = "%sको परिभाषा" +Locale["ne"]["synonyms"] = "समानार्थीहरू" +Locale["ne"]["examples"] = "उदाहरणहरु" +Locale["ne"]["see-also"] = "यो पनि हेर्नुहोस्" +Locale["ne"]["family"] = "Indo-European" +Locale["ne"]["iso"] = "nep" +Locale["ne"]["glotto"] = "nepa1254" +Locale["ne"]["script"] = "Deva" +Locale["no"]["name"] = "Norwegian" +Locale["no"]["endonym"] = "Norsk" +Locale["no"]["translations-of"] = "Oversettelser av %s" +Locale["no"]["definitions-of"] = "Definisjoner av %s" +Locale["no"]["synonyms"] = "Synonymer" +Locale["no"]["examples"] = "Eksempler" +Locale["no"]["see-also"] = "Se også" +Locale["no"]["family"] = "Indo-European" +Locale["no"]["iso"] = "nor" +Locale["no"]["glotto"] = "norw1258" +Locale["no"]["script"] = "Latn" +Locale["ps"]["name"] = "Pashto" +Locale["ps"]["endonym"] = "پښتو" +Locale["ps"]["translations-of"] = "د %sژباړې" +Locale["ps"]["definitions-of"] = "د%s تعریفونه" +Locale["ps"]["synonyms"] = "مترادف لغتونه" +Locale["ps"]["examples"] = "بېلګې" +Locale["ps"]["see-also"] = "دا هم ووینئ" +Locale["ps"]["family"] = "Indo-European" +Locale["ps"]["iso"] = "pus" +Locale["ps"]["glotto"] = "pash1269" +Locale["ps"]["script"] = "Arab" +Locale["ps"]["rtl"] = "true" +Locale["fa"]["name"] = "Persian" +Locale["fa"]["endonym"] = "فارسی" +Locale["fa"]["translations-of"] = "ترجمه‌های %s" +Locale["fa"]["definitions-of"] = "تعریف‌های %s" +Locale["fa"]["synonyms"] = "مترادف‌ها" +Locale["fa"]["examples"] = "مثال‌ها" +Locale["fa"]["see-also"] = "همچنین مراجعه کنید به" +Locale["fa"]["family"] = "Indo-European" +Locale["fa"]["iso"] = "fas" +Locale["fa"]["glotto"] = "west2369" +Locale["fa"]["script"] = "Arab" +Locale["fa"]["rtl"] = "true" +Locale["pl"]["name"] = "Polish" +Locale["pl"]["endonym"] = "Polski" +Locale["pl"]["translations-of"] = "Tłumaczenia %s" +Locale["pl"]["definitions-of"] = "%s – definicje" +Locale["pl"]["synonyms"] = "Synonimy" +Locale["pl"]["examples"] = "Przykłady" +Locale["pl"]["see-also"] = "Zobacz też" +Locale["pl"]["family"] = "Indo-European" +Locale["pl"]["iso"] = "pol" +Locale["pl"]["glotto"] = "poli1260" +Locale["pl"]["script"] = "Latn" +Locale["pt"]["name"] = "Portuguese" +Locale["pt"]["endonym"] = "Português" +Locale["pt"]["translations-of"] = "Traduções de %s" +Locale["pt"]["definitions-of"] = "Definições de %s" +Locale["pt"]["synonyms"] = "Sinônimos" +Locale["pt"]["examples"] = "Exemplos" +Locale["pt"]["see-also"] = "Veja também" +Locale["pt"]["family"] = "Indo-European" +Locale["pt"]["iso"] = "por" +Locale["pt"]["glotto"] = "port1283" +Locale["pt"]["script"] = "Latn" +Locale["pt"]["dictionary"] = "true" +Locale["pa"]["name"] = "Punjabi" +Locale["pa"]["endonym"] = "ਪੰਜਾਬੀ" +Locale["pa"]["translations-of"] = "ਦੇ ਅਨੁਵਾਦ%s" +Locale["pa"]["definitions-of"] = "ਦੀਆਂ ਪਰਿਭਾਸ਼ਾ %s" +Locale["pa"]["synonyms"] = "ਸਮਾਨਾਰਥਕ ਸ਼ਬਦ" +Locale["pa"]["examples"] = "ਉਦਾਹਰਣਾਂ" +Locale["pa"]["see-also"] = "ਇਹ ਵੀ ਵੇਖੋ" +Locale["pa"]["family"] = "Indo-European" +Locale["pa"]["iso"] = "pan" +Locale["pa"]["glotto"] = "panj1256" +Locale["pa"]["script"] = "Guru" +Locale["ro"]["name"] = "Romanian" +Locale["ro"]["endonym"] = "Română" +Locale["ro"]["translations-of"] = "Traduceri pentru %s" +Locale["ro"]["definitions-of"] = "Definiții pentru %s" +Locale["ro"]["synonyms"] = "Sinonime" +Locale["ro"]["examples"] = "Exemple" +Locale["ro"]["see-also"] = "Vedeți și" +Locale["ro"]["family"] = "Indo-European" +Locale["ro"]["iso"] = "ron" +Locale["ro"]["glotto"] = "roma1327" +Locale["ro"]["script"] = "Latn" +Locale["ru"]["name"] = "Russian" +Locale["ru"]["endonym"] = "Русский" +Locale["ru"]["translations-of"] = "%s: варианты перевода" +Locale["ru"]["definitions-of"] = "%s – определения" +Locale["ru"]["synonyms"] = "Синонимы" +Locale["ru"]["examples"] = "Примеры" +Locale["ru"]["see-also"] = "Похожие слова" +Locale["ru"]["family"] = "Indo-European" +Locale["ru"]["iso"] = "rus" +Locale["ru"]["glotto"] = "russ1263" +Locale["ru"]["script"] = "Cyrl" +Locale["ru"]["dictionary"] = "true" +Locale["sm"]["name"] = "Samoan" +Locale["sm"]["endonym"] = "Gagana Sāmoa" +Locale["sm"]["family"] = "Austronesian" +Locale["sm"]["iso"] = "smo" +Locale["sm"]["glotto"] = "samo1305" +Locale["sm"]["script"] = "Latn" +Locale["gd"]["name"] = "Scots Gaelic" +Locale["gd"]["endonym"] = "Gàidhlig" +Locale["gd"]["translations-of"] = "Eadar-theangachadh airson %s" +Locale["gd"]["definitions-of"] = "Deifiniseanan airson %s" +Locale["gd"]["synonyms"] = "Co-fhaclan" +Locale["gd"]["examples"] = "Buill-eisimpleir" +Locale["gd"]["see-also"] = "Faic na leanas cuideachd" +Locale["gd"]["family"] = "Indo-European" +Locale["gd"]["iso"] = "gla" +Locale["gd"]["glotto"] = "scot1245" +Locale["gd"]["script"] = "Latn" +Locale["sr-Cyrl"]["name"] = "Serbian (Cyrillic)" +Locale["sr-Cyrl"]["endonym"] = "српски" +Locale["sr-Cyrl"]["translations-of"] = "Преводи за „%s“" +Locale["sr-Cyrl"]["definitions-of"] = "Дефиниције за %s" +Locale["sr-Cyrl"]["synonyms"] = "Синоними" +Locale["sr-Cyrl"]["examples"] = "Примери" +Locale["sr-Cyrl"]["see-also"] = "Погледајте такође" +Locale["sr-Cyrl"]["family"] = "Indo-European" +Locale["sr-Cyrl"]["iso"] = "srp-Cyrl" +Locale["sr-Cyrl"]["glotto"] = "serb1264" +Locale["sr-Cyrl"]["script"] = "Cyrl" +Locale["sr-Latn"]["name"] = "Serbian (Latin)" +Locale["sr-Latn"]["endonym"] = "srpski" +Locale["sr-Latn"]["translations-of"] = "Prevodi za „%s“" +Locale["sr-Latn"]["definitions-of"] = "Definicije za %s" +Locale["sr-Latn"]["synonyms"] = "Sinonimi" +Locale["sr-Latn"]["examples"] = "Primeri" +Locale["sr-Latn"]["see-also"] = "Pogledajte takođe" +Locale["sr-Latn"]["family"] = "Indo-European" +Locale["sr-Latn"]["iso"] = "srp-Latn" +Locale["sr-Latn"]["glotto"] = "serb1264" +Locale["sr-Latn"]["script"] = "Latn" +Locale["st"]["name"] = "Sesotho" +Locale["st"]["endonym"] = "Sesotho" +Locale["st"]["translations-of"] = "Liphetolelo tsa %s" +Locale["st"]["definitions-of"] = "Meelelo ea %s" +Locale["st"]["synonyms"] = "Mantsoe a tšoanang ka moelelo" +Locale["st"]["examples"] = "Mehlala" +Locale["st"]["see-also"] = "Bona hape" +Locale["st"]["family"] = "Atlantic-Congo" +Locale["st"]["iso"] = "sot" +Locale["st"]["glotto"] = "sout2807" +Locale["st"]["script"] = "Latn" +Locale["sn"]["name"] = "Shona" +Locale["sn"]["endonym"] = "chiShona" +Locale["sn"]["translations-of"] = "Shanduro dze %s" +Locale["sn"]["definitions-of"] = "Zvinoreva %s" +Locale["sn"]["synonyms"] = "Mashoko anoreva zvakafana nemamwe" +Locale["sn"]["examples"] = "Mienzaniso" +Locale["sn"]["see-also"] = "Onawo" +Locale["sn"]["family"] = "Atlantic-Congo" +Locale["sn"]["iso"] = "sna" +Locale["sn"]["glotto"] = "core1255" +Locale["sn"]["script"] = "Latn" +Locale["sd"]["name"] = "Sindhi" +Locale["sd"]["endonym"] = "سنڌي" +Locale["sd"]["translations-of"] = "%s جو ترجمو" +Locale["sd"]["definitions-of"] = "%s جون وصفون" +Locale["sd"]["synonyms"] = "هم معني" +Locale["sd"]["examples"] = "مثالون" +Locale["sd"]["see-also"] = "به ڏسو" +Locale["sd"]["family"] = "Indo-European" +Locale["sd"]["iso"] = "snd" +Locale["sd"]["glotto"] = "sind1272" +Locale["sd"]["script"] = "Arab" +Locale["sd"]["rtl"] = "true" +Locale["si"]["name"] = "Sinhala" +Locale["si"]["endonym"] = "සිංහල" +Locale["si"]["translations-of"] = "%s හි පරිවර්තන" +Locale["si"]["definitions-of"] = "%s හි නිර්වචන" +Locale["si"]["synonyms"] = "සමානාර්ථ පද" +Locale["si"]["examples"] = "උදාහරණ" +Locale["si"]["see-also"] = "මෙයත් බලන්න" +Locale["si"]["family"] = "Indo-European" +Locale["si"]["iso"] = "sin" +Locale["si"]["glotto"] = "sinh1246" +Locale["si"]["script"] = "Sinh" +Locale["sk"]["name"] = "Slovak" +Locale["sk"]["endonym"] = "Slovenčina" +Locale["sk"]["translations-of"] = "Preklady výrazu: %s" +Locale["sk"]["definitions-of"] = "Definície výrazu %s" +Locale["sk"]["synonyms"] = "Synonymá" +Locale["sk"]["examples"] = "Príklady" +Locale["sk"]["see-also"] = "Pozrite tiež" +Locale["sk"]["family"] = "Indo-European" +Locale["sk"]["iso"] = "slk" +Locale["sk"]["glotto"] = "slov1269" +Locale["sk"]["script"] = "Latn" +Locale["sl"]["name"] = "Slovenian" +Locale["sl"]["endonym"] = "Slovenščina" +Locale["sl"]["translations-of"] = "Prevodi za %s" +Locale["sl"]["definitions-of"] = "Razlage za %s" +Locale["sl"]["synonyms"] = "Sopomenke" +Locale["sl"]["examples"] = "Primeri" +Locale["sl"]["see-also"] = "Glejte tudi" +Locale["sl"]["family"] = "Indo-European" +Locale["sl"]["iso"] = "slv" +Locale["sl"]["glotto"] = "slov1268" +Locale["sl"]["script"] = "Latn" +Locale["so"]["name"] = "Somali" +Locale["so"]["endonym"] = "Soomaali" +Locale["so"]["translations-of"] = "Turjumaada %s" +Locale["so"]["definitions-of"] = "Qeexitaannada %s" +Locale["so"]["synonyms"] = "La micne ah" +Locale["so"]["examples"] = "Tusaalooyin" +Locale["so"]["see-also"] = "Sidoo kale eeg" +Locale["so"]["family"] = "Afro-Asiatic" +Locale["so"]["iso"] = "som" +Locale["so"]["glotto"] = "soma1255" +Locale["so"]["script"] = "Latn" +Locale["es"]["name"] = "Spanish" +Locale["es"]["endonym"] = "Español" +Locale["es"]["translations-of"] = "Traducciones de %s" +Locale["es"]["definitions-of"] = "Definiciones de %s" +Locale["es"]["synonyms"] = "Sinónimos" +Locale["es"]["examples"] = "Ejemplos" +Locale["es"]["see-also"] = "Ver también" +Locale["es"]["family"] = "Indo-European" +Locale["es"]["iso"] = "spa" +Locale["es"]["glotto"] = "stan1288" +Locale["es"]["script"] = "Latn" +Locale["es"]["dictionary"] = "true" +Locale["su"]["name"] = "Sundanese" +Locale["su"]["endonym"] = "Basa Sunda" +Locale["su"]["translations-of"] = "Tarjamahan tina %s" +Locale["su"]["definitions-of"] = "Panjelasan tina %s" +Locale["su"]["synonyms"] = "Sinonim" +Locale["su"]["examples"] = "Conto" +Locale["su"]["see-also"] = "Tingali ogé" +Locale["su"]["family"] = "Austronesian" +Locale["su"]["iso"] = "sun" +Locale["su"]["glotto"] = "sund1252" +Locale["su"]["script"] = "Latn" +Locale["sw"]["name"] = "Swahili" +Locale["sw"]["endonym"] = "Kiswahili" +Locale["sw"]["translations-of"] = "Tafsiri ya %s" +Locale["sw"]["definitions-of"] = "Ufafanuzi wa %s" +Locale["sw"]["synonyms"] = "Visawe" +Locale["sw"]["examples"] = "Mifano" +Locale["sw"]["see-also"] = "Angalia pia" +Locale["sw"]["family"] = "Atlantic-Congo" +Locale["sw"]["iso"] = "swa" +Locale["sw"]["glotto"] = "swah1253" +Locale["sw"]["script"] = "Latn" +Locale["sv"]["name"] = "Swedish" +Locale["sv"]["endonym"] = "Svenska" +Locale["sv"]["translations-of"] = "Översättningar av %s" +Locale["sv"]["definitions-of"] = "Definitioner av %s" +Locale["sv"]["synonyms"] = "Synonymer" +Locale["sv"]["examples"] = "Exempel" +Locale["sv"]["see-also"] = "Se även" +Locale["sv"]["family"] = "Indo-European" +Locale["sv"]["iso"] = "swe" +Locale["sv"]["glotto"] = "swed1254" +Locale["sv"]["script"] = "Latn" +Locale["tg"]["name"] = "Tajik" +Locale["tg"]["endonym"] = "Тоҷикӣ" +Locale["tg"]["translations-of"] = "Тарҷумаҳои %s" +Locale["tg"]["definitions-of"] = "Таърифҳои %s" +Locale["tg"]["synonyms"] = "Муродифҳо" +Locale["tg"]["examples"] = "Намунаҳо:" +Locale["tg"]["see-also"] = "Ҳамчунин Бинед" +Locale["tg"]["family"] = "Indo-European" +Locale["tg"]["iso"] = "tgk" +Locale["tg"]["glotto"] = "taji1245" +Locale["tg"]["script"] = "Cyrl" +Locale["ta"]["name"] = "Tamil" +Locale["ta"]["endonym"] = "தமிழ்" +Locale["ta"]["translations-of"] = "%s இன் மொழிபெயர்ப்புகள்" +Locale["ta"]["definitions-of"] = "%s இன் வரையறைகள்" +Locale["ta"]["synonyms"] = "இணைச்சொற்கள்" +Locale["ta"]["examples"] = "எடுத்துக்காட்டுகள்" +Locale["ta"]["see-also"] = "இதையும் காண்க" +Locale["ta"]["family"] = "Dravidian" +Locale["ta"]["iso"] = "tam" +Locale["ta"]["glotto"] = "tami1289" +Locale["ta"]["script"] = "Taml" +Locale["te"]["name"] = "Telugu" +Locale["te"]["endonym"] = "తెలుగు" +Locale["te"]["translations-of"] = "%s యొక్క అనువాదాలు" +Locale["te"]["definitions-of"] = "%s యొక్క నిర్వచనాలు" +Locale["te"]["synonyms"] = "పర్యాయపదాలు" +Locale["te"]["examples"] = "ఉదాహరణలు" +Locale["te"]["see-also"] = "వీటిని కూడా చూడండి" +Locale["te"]["family"] = "Dravidian" +Locale["te"]["iso"] = "tel" +Locale["te"]["glotto"] = "telu1262" +Locale["te"]["script"] = "Telu" +Locale["th"]["name"] = "Thai" +Locale["th"]["endonym"] = "ไทย" +Locale["th"]["translations-of"] = "คำแปลของ %s" +Locale["th"]["definitions-of"] = "คำจำกัดความของ %s" +Locale["th"]["synonyms"] = "คำพ้องความหมาย" +Locale["th"]["examples"] = "ตัวอย่าง" +Locale["th"]["see-also"] = "ดูเพิ่มเติม" +Locale["th"]["family"] = "Tai-Kadai" +Locale["th"]["iso"] = "tha" +Locale["th"]["glotto"] = "thai1261" +Locale["th"]["script"] = "Thai" +Locale["tr"]["name"] = "Turkish" +Locale["tr"]["endonym"] = "Türkçe" +Locale["tr"]["translations-of"] = "%s çevirileri" +Locale["tr"]["definitions-of"] = "%s için tanımlar" +Locale["tr"]["synonyms"] = "Eş anlamlılar" +Locale["tr"]["examples"] = "Örnekler" +Locale["tr"]["see-also"] = "Ayrıca bkz." +Locale["tr"]["family"] = "Turkic" +Locale["tr"]["iso"] = "tur" +Locale["tr"]["glotto"] = "nucl1301" +Locale["tr"]["script"] = "Latn" +Locale["uk"]["name"] = "Ukrainian" +Locale["uk"]["endonym"] = "Українська" +Locale["uk"]["translations-of"] = "Переклади слова або виразу \"%s\"" +Locale["uk"]["definitions-of"] = "\"%s\" – визначення" +Locale["uk"]["synonyms"] = "Синоніми" +Locale["uk"]["examples"] = "Приклади" +Locale["uk"]["see-also"] = "Дивіться також" +Locale["uk"]["family"] = "Indo-European" +Locale["uk"]["iso"] = "ukr" +Locale["uk"]["glotto"] = "ukra1253" +Locale["uk"]["script"] = "Cyrl" +Locale["ur"]["name"] = "Urdu" +Locale["ur"]["endonym"] = "اُردُو" +Locale["ur"]["translations-of"] = "کے ترجمے %s" +Locale["ur"]["definitions-of"] = "کی تعریفات %s" +Locale["ur"]["synonyms"] = "مترادفات" +Locale["ur"]["examples"] = "مثالیں" +Locale["ur"]["see-also"] = "نیز دیکھیں" +Locale["ur"]["family"] = "Indo-European" +Locale["ur"]["iso"] = "urd" +Locale["ur"]["glotto"] = "urdu1245" +Locale["ur"]["script"] = "Arab" +Locale["ur"]["rtl"] = "true" +Locale["uz"]["name"] = "Uzbek" +Locale["uz"]["endonym"] = "Oʻzbek tili" +Locale["uz"]["translations-of"] = "%s: tarjima variantlari" +Locale["uz"]["definitions-of"] = "%s – ta’riflar" +Locale["uz"]["synonyms"] = "Sinonimlar" +Locale["uz"]["examples"] = "Namunalar" +Locale["uz"]["see-also"] = "O‘xshash so‘zlar" +Locale["uz"]["family"] = "Turkic" +Locale["uz"]["iso"] = "uzb" +Locale["uz"]["glotto"] = "uzbe1247" +Locale["uz"]["script"] = "Latn" +Locale["vi"]["name"] = "Vietnamese" +Locale["vi"]["endonym"] = "Tiếng Việt" +Locale["vi"]["translations-of"] = "Bản dịch của %s" +Locale["vi"]["definitions-of"] = "Nghĩa của %s" +Locale["vi"]["synonyms"] = "Từ đồng nghĩa" +Locale["vi"]["examples"] = "Ví dụ" +Locale["vi"]["see-also"] = "Xem thêm" +Locale["vi"]["family"] = "Austroasiatic" +Locale["vi"]["iso"] = "vie" +Locale["vi"]["glotto"] = "viet1252" +Locale["vi"]["script"] = "Latn" +Locale["cy"]["name"] = "Welsh" +Locale["cy"]["endonym"] = "Cymraeg" +Locale["cy"]["translations-of"] = "Cyfieithiadau %s" +Locale["cy"]["definitions-of"] = "Diffiniadau %s" +Locale["cy"]["synonyms"] = "Cyfystyron" +Locale["cy"]["examples"] = "Enghreifftiau" +Locale["cy"]["see-also"] = "Gweler hefyd" +Locale["cy"]["family"] = "Indo-European" +Locale["cy"]["iso"] = "cym" +Locale["cy"]["glotto"] = "wels1247" +Locale["cy"]["script"] = "Latn" +Locale["fy"]["name"] = "Frisian" +Locale["fy"]["endonym"] = "Frysk" +Locale["fy"]["translations-of"] = "Oersettings fan %s" +Locale["fy"]["definitions-of"] = "Definysjes fan %s" +Locale["fy"]["synonyms"] = "Synonimen" +Locale["fy"]["examples"] = "Foarbylden" +Locale["fy"]["see-also"] = "Sjoch ek" +Locale["fy"]["family"] = "Indo-European" +Locale["fy"]["iso"] = "fry" +Locale["fy"]["glotto"] = "west2354" +Locale["fy"]["script"] = "Latn" +Locale["xh"]["name"] = "Xhosa" +Locale["xh"]["endonym"] = "isiXhosa" +Locale["xh"]["translations-of"] = "Iinguqulelo zika-%s" +Locale["xh"]["definitions-of"] = "Iingcaciso zika-%s" +Locale["xh"]["synonyms"] = "Izithethantonye" +Locale["xh"]["examples"] = "Imizekelo" +Locale["xh"]["see-also"] = "Kwakhona bona" +Locale["xh"]["family"] = "Atlantic-Congo" +Locale["xh"]["iso"] = "xho" +Locale["xh"]["glotto"] = "xhos1239" +Locale["xh"]["script"] = "Latn" +Locale["yi"]["name"] = "Yiddish" +Locale["yi"]["endonym"] = "ייִדיש" +Locale["yi"]["translations-of"] = "איבערזעצונגען פון %s" +Locale["yi"]["definitions-of"] = "דפיניציונען %s" +Locale["yi"]["synonyms"] = "סינאָנימען" +Locale["yi"]["examples"] = "ביישפילע" +Locale["yi"]["see-also"] = "זייען אויך" +Locale["yi"]["family"] = "Indo-European" +Locale["yi"]["iso"] = "yid" +Locale["yi"]["glotto"] = "yidd1255" +Locale["yi"]["script"] = "Hebr" +Locale["yi"]["rtl"] = "true" +Locale["yo"]["name"] = "Yoruba" +Locale["yo"]["endonym"] = "Yorùbá" +Locale["yo"]["translations-of"] = "Awọn itumọ ti %s" +Locale["yo"]["definitions-of"] = "Awọn itumọ ti %s" +Locale["yo"]["synonyms"] = "Awọn ọrọ onitumọ" +Locale["yo"]["examples"] = "Awọn apẹrẹ" +Locale["yo"]["see-also"] = "Tun wo" +Locale["yo"]["family"] = "Atlantic-Congo" +Locale["yo"]["iso"] = "yor" +Locale["yo"]["glotto"] = "yoru1245" +Locale["yo"]["script"] = "Latn" +Locale["zu"]["name"] = "Zulu" +Locale["zu"]["endonym"] = "isiZulu" +Locale["zu"]["translations-of"] = "Ukuhumusha i-%s" +Locale["zu"]["definitions-of"] = "Izincazelo ze-%s" +Locale["zu"]["synonyms"] = "Amagama afanayo" +Locale["zu"]["examples"] = "Izibonelo" +Locale["zu"]["see-also"] = "Bheka futhi" +Locale["zu"]["family"] = "Atlantic-Congo" +Locale["zu"]["iso"] = "zul" +Locale["zu"]["glotto"] = "zulu1248" +Locale["zu"]["script"] = "Latn" +Locale["yue"]["support"] = "bing-only" +Locale["yue"]["name"] = "Cantonese" +Locale["yue"]["endonym"] = "粵語" +Locale["yue"]["family"] = "Sino-Tibetan" +Locale["yue"]["iso"] = "yue" +Locale["yue"]["glotto"] = "cant1236" +Locale["yue"]["script"] = "Hant" +Locale["fj"]["support"] = "bing-only" +Locale["fj"]["name"] = "Fijian" +Locale["fj"]["endonym"] = "Vosa Vakaviti" +Locale["fj"]["family"] = "Austronesian" +Locale["fj"]["iso"] = "fij" +Locale["fj"]["glotto"] = "fiji1243" +Locale["fj"]["script"] = "Latn" +Locale["mww"]["support"] = "bing-only" +Locale["mww"]["name"] = "Hmong Daw" +Locale["mww"]["endonym"] = "Hmoob Daw" +Locale["mww"]["family"] = "Hmong-Mien" +Locale["mww"]["iso"] = "mww" +Locale["mww"]["glotto"] = "hmon1333" +Locale["mww"]["script"] = "Latn" +Locale["otq"]["support"] = "bing-only" +Locale["otq"]["name"] = "Querétaro Otomi" +Locale["otq"]["endonym"] = "Hñąñho" +Locale["otq"]["family"] = "Oto-Manguean" +Locale["otq"]["iso"] = "otq" +Locale["otq"]["glotto"] = "quer1236" +Locale["otq"]["script"] = "Latn" +Locale["ty"]["support"] = "bing-only" +Locale["ty"]["name"] = "Tahitian" +Locale["ty"]["endonym"] = "Reo Tahiti" +Locale["ty"]["family"] = "Austronesian" +Locale["ty"]["iso"] = "tah" +Locale["ty"]["glotto"] = "tahi1242" +Locale["ty"]["script"] = "Latn" +Locale["to"]["support"] = "bing-only" +Locale["to"]["name"] = "Tongan" +Locale["to"]["endonym"] = "Lea faka-Tonga" +Locale["to"]["family"] = "Austronesian" +Locale["to"]["iso"] = "ton" +Locale["to"]["glotto"] = "tong1325" +Locale["to"]["script"] = "Latn" +Locale["yua"]["support"] = "bing-only" +Locale["yua"]["name"] = "Yucatec Maya" +Locale["yua"]["endonym"] = "Màaya T'àan" +Locale["yua"]["family"] = "Mayan" +Locale["yua"]["iso"] = "yua" +Locale["yua"]["glotto"] = "yuca1254" +Locale["yua"]["script"] = "Latn" +Locale["tlh"]["support"] = "bing-only" +Locale["tlh"]["name"] = "Klingon" +Locale["tlh"]["endonym"] = "tlhIngan Hol" +Locale["tlh"]["family"] = "Artificial Language" +Locale["tlh"]["iso"] = "tlh" +Locale["tlh"]["script"] = "Latn" +Locale["tlh-Qaak"]["support"] = "bing-only" +Locale["tlh-Qaak"]["name"] = "Klingon (pIqaD)" +Locale["tlh-Qaak"]["endonym"] = " " +Locale["tlh-Qaak"]["family"] = "Artificial Language" +Locale["tlh-Qaak"]["iso"] = "tlh" +Locale["tlh-Qaak"]["script"] = "Piqd" +Locale["as"]["support"] = "unstable" +Locale["as"]["name"] = "Assamese" +Locale["as"]["endonym"] = "অসমীয়া" +Locale["as"]["family"] = "Indo-European" +Locale["as"]["iso"] = "asm" +Locale["as"]["glotto"] = "assa1263" +Locale["as"]["script"] = "Beng" +Locale["ba"]["support"] = "yandex-only" +Locale["ba"]["name"] = "Bashkir" +Locale["ba"]["endonym"] = "башҡорт теле" +Locale["ba"]["family"] = "Turkic" +Locale["ba"]["iso"] = "bak" +Locale["ba"]["glotto"] = "bash1264" +Locale["ba"]["script"] = "Cyrl" +Locale["br"]["support"] = "unstable" +Locale["br"]["name"] = "Breton" +Locale["br"]["endonym"] = "Brezhoneg" +Locale["br"]["family"] = "Indo-European" +Locale["br"]["iso"] = "bre" +Locale["br"]["glotto"] = "bret1244" +Locale["br"]["script"] = "Latn" +Locale["dz"]["support"] = "unstable" +Locale["dz"]["name"] = "Dzongkha" +Locale["dz"]["endonym"] = "རྫོང་ཁ" +Locale["dz"]["family"] = "Sino-Tibetan" +Locale["dz"]["iso"] = "dzo" +Locale["dz"]["glotto"] = "nucl1307" +Locale["dz"]["script"] = "Tibt" +Locale["mhr"]["support"] = "yandex-only" +Locale["mhr"]["name"] = "Eastern Mari" +Locale["mhr"]["endonym"] = "Олык марий" +Locale["mhr"]["family"] = "Uralic" +Locale["mhr"]["iso"] = "mhr" +Locale["mhr"]["glotto"] = "east2328" +Locale["mhr"]["script"] = "Cyrl" +Locale["fo"]["support"] = "unstable" +Locale["fo"]["name"] = "Faroese" +Locale["fo"]["endonym"] = "Føroyskt" +Locale["fo"]["family"] = "Indo-European" +Locale["fo"]["iso"] = "fao" +Locale["fo"]["glotto"] = "faro1244" +Locale["fo"]["script"] = "Latn" +Locale["gn"]["support"] = "unstable" +Locale["gn"]["name"] = "Guarani" +Locale["gn"]["endonym"] = "Avañe'ẽ" +Locale["gn"]["family"] = "Tupian" +Locale["gn"]["iso"] = "grn" +Locale["gn"]["glotto"] = "para1311" +Locale["gn"]["script"] = "Latn" +Locale["mrj"]["support"] = "yandex-only" +Locale["mrj"]["name"] = "Hill Mari" +Locale["mrj"]["endonym"] = "Кырык мары" +Locale["mrj"]["family"] = "Uralic" +Locale["mrj"]["iso"] = "mrj" +Locale["mrj"]["glotto"] = "west2392" +Locale["mrj"]["script"] = "Cyrl" +Locale["ie"]["support"] = "unstable" +Locale["ie"]["name"] = "Interlingue" +Locale["ie"]["endonym"] = "Interlingue" +Locale["ie"]["family"] = "Artificial Language" +Locale["ie"]["iso"] = "ile" +Locale["ie"]["glotto"] = "occi1241" +Locale["ie"]["script"] = "Latn" +Locale["rw"]["support"] = "unstable" +Locale["rw"]["name"] = "Kinyarwanda" +Locale["rw"]["endonym"] = "Ikinyarwanda" +Locale["rw"]["family"] = "Atlantic-Congo" +Locale["rw"]["iso"] = "kin" +Locale["rw"]["glotto"] = "kiny1244" +Locale["rw"]["script"] = "Latn" +Locale["oc"]["support"] = "unstable" +Locale["oc"]["name"] = "Occitan" +Locale["oc"]["endonym"] = "Occitan" +Locale["oc"]["family"] = "Indo-European" +Locale["oc"]["iso"] = "oci" +Locale["oc"]["glotto"] = "occi1239" +Locale["oc"]["script"] = "Latn" +Locale["om"]["support"] = "unstable" +Locale["om"]["name"] = "Oromo" +Locale["om"]["endonym"] = "Afaan Oromoo" +Locale["om"]["family"] = "Afro-Asiatic" +Locale["om"]["iso"] = "orm" +Locale["om"]["glotto"] = "nucl1736" +Locale["om"]["script"] = "Latn" +Locale["or"]["support"] = "unstable" +Locale["or"]["name"] = "Oriya" +Locale["or"]["endonym"] = "ଓଡ଼ିଆ" +Locale["or"]["family"] = "Indo-European" +Locale["or"]["iso"] = "ori" +Locale["or"]["glotto"] = "macr1269" +Locale["or"]["script"] = "Orya" +Locale["pap"]["support"] = "yandex-only" +Locale["pap"]["name"] = "Papiamento" +Locale["pap"]["endonym"] = "Papiamentu" +Locale["pap"]["family"] = "Indo-European" +Locale["pap"]["iso"] = "pap" +Locale["pap"]["glotto"] = "papi1253" +Locale["pap"]["script"] = "Latn" +Locale["rm"]["support"] = "unstable" +Locale["rm"]["name"] = "Romansh" +Locale["rm"]["endonym"] = "Rumantsch" +Locale["rm"]["family"] = "Indo-European" +Locale["rm"]["iso"] = "roh" +Locale["rm"]["glotto"] = "roma1326" +Locale["rm"]["script"] = "Latn" +Locale["ti"]["support"] = "unstable" +Locale["ti"]["name"] = "Tigrinya" +Locale["ti"]["endonym"] = "ትግርኛ" +Locale["ti"]["family"] = "Afro-Asiatic" +Locale["ti"]["iso"] = "tir" +Locale["ti"]["glotto"] = "tigr1271" +Locale["ti"]["script"] = "Ethi" +Locale["bo"]["support"] = "unstable" +Locale["bo"]["name"] = "Tibetan" +Locale["bo"]["endonym"] = "བོད་ཡིག" +Locale["bo"]["family"] = "Sino-Tibetan" +Locale["bo"]["iso"] = "bod" +Locale["bo"]["glotto"] = "tibe1272" +Locale["bo"]["script"] = "Tibt" +Locale["tk"]["support"] = "unstable" +Locale["tk"]["name"] = "Turkmen" +Locale["tk"]["endonym"] = "Türkmen" +Locale["tk"]["family"] = "Turkic" +Locale["tk"]["iso"] = "tuk" +Locale["tk"]["glotto"] = "turk1304" +Locale["tk"]["script"] = "Latn" +Locale["tt"]["support"] = "yandex-only" +Locale["tt"]["name"] = "Tatar" +Locale["tt"]["endonym"] = "татарча" +Locale["tt"]["family"] = "Turkic" +Locale["tt"]["iso"] = "tat" +Locale["tt"]["glotto"] = "tata1255" +Locale["tt"]["script"] = "Cyrl" +Locale["udm"]["support"] = "yandex-only" +Locale["udm"]["name"] = "Udmurt" +Locale["udm"]["endonym"] = "удмурт" +Locale["udm"]["family"] = "Uralic" +Locale["udm"]["iso"] = "udm" +Locale["udm"]["glotto"] = "udmu1245" +Locale["udm"]["script"] = "Cyrl" +Locale["ug"]["support"] = "unstable" +Locale["ug"]["name"] = "Uyghur" +Locale["ug"]["endonym"] = "ئۇيغۇر تىلى" +Locale["ug"]["family"] = "Turkic" +Locale["ug"]["iso"] = "uig" +Locale["ug"]["glotto"] = "uigh1240" +Locale["ug"]["script"] = "Arab" +Locale["ug"]["rtl"] = "true" +Locale["vo"]["support"] = "unstable" +Locale["vo"]["name"] = "Volapük" +Locale["vo"]["endonym"] = "Volapük" +Locale["vo"]["family"] = "Artificial Language" +Locale["vo"]["iso"] = "vol" +Locale["vo"]["script"] = "Latn" +Locale["wo"]["support"] = "unstable" +Locale["wo"]["name"] = "Wolof" +Locale["wo"]["endonym"] = "Wollof" +Locale["wo"]["family"] = "Atlantic-Congo" +Locale["wo"]["iso"] = "wol" +Locale["wo"]["glotto"] = "wolo1247" +Locale["wo"]["script"] = "Latn" +Locale["chr"]["support"] = "unstable" +Locale["chr"]["name"] = "Cherokee" +Locale["chr"]["endonym"] = "ᏣᎳᎩ" +Locale["chr"]["family"] = "Iroquoian" +Locale["chr"]["iso"] = "chr" +Locale["chr"]["glotto"] = "cher1273" +Locale["chr"]["script"] = "Cher" +Locale["emj"]["support"] = "yandex-only" +Locale["emj"]["name"] = "Emoji" +Locale["emj"]["endonym"] = "Emoji" +} +function initLocaleAlias( i) { +for (i in Locale) { +LocaleAlias[Locale[i]["iso"]] = i +LocaleAlias[tolower(Locale[i]["name"])] = i +LocaleAlias[tolower(Locale[i]["endonym"])] = i +} +LocaleAlias["in"] = "id" +LocaleAlias["iw"] = "he" +LocaleAlias["ji"] = "yi" +LocaleAlias["jw"] = "jv" +LocaleAlias["mo"] = "ro" +LocaleAlias["nb"] = "no" +LocaleAlias["nn"] = "no" +LocaleAlias["sh"] = "sr-Cyrl" +LocaleAlias["sr"] = "sr-Cyrl" +LocaleAlias["srp"] = "sr-Cyrl" +LocaleAlias["serbian"] = "sr-Cyrl" +LocaleAlias["zh"] = "zh-CN" +LocaleAlias["zh-CHS"] = "zh-CN" +LocaleAlias["zh-CHT"] = "zh-TW" +LocaleAlias["zh-Hans"] = "zh-CN" +LocaleAlias["zh-Hant"] = "zh-TW" +LocaleAlias["zho"] = "zh-CN" +LocaleAlias["chinese"] = "zh-CN" +LocaleAlias["tlh-Latn"] = "tlh" +LocaleAlias["tlh-Piqd"] = "tlh-Qaak" +} +function initLocaleDisplay( i) { +for (i in Locale) { +Locale[i]["display"] = show(Locale[i]["endonym"], i) +} +} +function getCode(code, group) { +if (code == "auto" || code in Locale) +return code +else if (code in LocaleAlias) +return LocaleAlias[code] +else if (tolower(code) in LocaleAlias) +return LocaleAlias[tolower(code)] +match(code, /^([[:alpha:]][[:alpha:]][[:alpha:]]?)-(.*)$/, group) +if (group[1]) +return group[1] +return +} +function getName(code) { +return Locale[getCode(code)]["name"] +} +function getEndonym(code) { +return Locale[getCode(code)]["endonym"] +} +function getDisplay(code) { +return Locale[getCode(code)]["display"] +} +function showTranslationsOf(code, text, fmt) { +fmt = Locale[getCode(code)]["translations-of"] +if (!fmt) fmt = Locale["en"]["translations-of"] +return sprintf(fmt, text) +} +function showDefinitionsOf(code, text, fmt) { +fmt = Locale[getCode(code)]["definitions-of"] +if (!fmt) fmt = Locale["en"]["definitions-of"] +return sprintf(fmt, text) +} +function showSynonyms(code, tmp) { +tmp = Locale[getCode(code)]["synonyms"] +if (!tmp) tmp = Locale["en"]["synonyms"] +return tmp +} +function showExamples(code, tmp) { +tmp = Locale[getCode(code)]["examples"] +if (!tmp) tmp = Locale["en"]["examples"] +return tmp +} +function showSeeAlso(code, tmp) { +tmp = Locale[getCode(code)]["see-also"] +if (!tmp) tmp = Locale["en"]["see-also"] +return tmp +} +function getFamily(code) { +return Locale[getCode(code)]["family"] +} +function getISO(code) { +return Locale[getCode(code)]["iso"] +} +function getGlotto(code) { +return Locale[getCode(code)]["glotto"] +} +function getScript(code) { +return Locale[getCode(code)]["script"] +} +function isRTL(code) { +return Locale[getCode(code)]["rtl"] ? 1 : 0 +} +function hasDictionary(code) { +return Locale[getCode(code)]["dictionary"] ? 1 : 0 +} +function compName(i1, v1, i2, v2) { +if (getName(i1) < getName(i2)) +return -1 +else +return (getName(i1) != getName(i2)) +} +function scriptName(code) { +switch (code) { +case "Arab": return "Arabic" +case "Armn": return "Armenian" +case "Beng": return "Bengali" +case "Cher": return "Cherokee" +case "Cyrl": return "Cyrillic" +case "Deva": return "Devanagari" +case "Ethi": return "Ethiopic (Geʻez)" +case "Geor": return "Georgian (Mkhedruli)" +case "Grek": return "Greek" +case "Gujr": return "Gujarati" +case "Guru": return "Gurmukhi" +case "Hani": return "Han" +case "Hans": return "Han (Simplified)" +case "Hant": return "Han (Traditional)" +case "Hebr": return "Hebrew" +case "Jpan": return "Japanese (Han + Hiragana + Katakana)" +case "Khmr": return "Khmer" +case "Knda": return "Kannada" +case "Kore": return "Korean (Hangul + Han)" +case "Laoo": return "Lao" +case "Latn": return "Latin" +case "Mlym": return "Malayalam" +case "Mymr": return "Myanmar" +case "Orya": return "Oriya" +case "Piqd": return "Klingon (pIqaD)" +case "Sinh": return "Sinhala" +case "Taml": return "Tamil" +case "Telu": return "Telugu" +case "Thai": return "Thai" +case "Tibt": return "Tibetan" +default: return "Unknown" +} +} +function getDetails(code, group, iso, language, script) { +if (code == "auto" || !getCode(code)) { +e("[ERROR] Language not found: " code "\n"\ +" Run '-reference / -R' to see a list of available languages.") +exit 1 +} +script = scriptName(getScript(code)) +if (isRTL(code)) script = script " (R-to-L)" +split(getISO(code), group, "-") +iso = group[1] +split(getName(code), group, " ") +language = length(group) == 1 ? group[1] "_language" : +group[2] ~ /^\(.*\)$/ ? group[1] "_language" : join(group, "_") +return ansi("bold", sprintf("%s\n", getDisplay(code)))\ +sprintf("%-22s%s\n", "Name", ansi("bold", getName(code)))\ +sprintf("%-22s%s\n", "Family", ansi("bold", getFamily(code)))\ +sprintf("%-22s%s\n", "Writing system", ansi("bold", script))\ +sprintf("%-22s%s\n", "Code", ansi("bold", getCode(code)))\ +sprintf("%-22s%s\n", "ISO 639-3", ansi("bold", iso))\ +sprintf("%-22s%s\n", "SIL", ansi("bold", "http://www-01.sil.org/iso639-3/documentation.asp?id=" iso))\ +sprintf("%-22s%s\n", "Glottolog", getGlotto(code) ? +ansi("bold", "http://glottolog.org/resource/languoid/id/" getGlotto(code)) : "")\ +sprintf("%-22s%s", "Wikipedia", ansi("bold", "http://en.wikipedia.org/wiki/" language)) +} +function showPhonetics(phonetics, code) { +if (code && getCode(code) == "en") +return "/" phonetics "/" +else +return "(" phonetics ")" +} +function show(text, code, command, temp) { +if (!code || isRTL(code)) { +if (Cache[text][0]) +return Cache[text][0] +else { +if ((FriBidi || (code && isRTL(code))) && BiDiNoPad) { +command = "echo " parameterize(text) PIPE BiDiNoPad +command | getline temp +close(command) +} else +temp = text +return Cache[text][0] = temp +} +} else +return text +} +function s(text, code, width, command, temp) { +if (!code || isRTL(code)) { +if (!width) width = Option["width"] +if (Cache[text][width]) +return Cache[text][width] +else { +if ((FriBidi || (code && isRTL(code))) && BiDi) { +command = "echo " parameterize(text) PIPE sprintf(BiDi, width) +command | getline temp +close(command) +} else +temp = text +return Cache[text][width] = temp +} +} else +return text +} +function ins(level, text, code, width, i, temp) { +if (code && isRTL(code)) { +if (!width) width = Option["width"] +return s(text, code, width - Option["indent"] * level) +} else +return replicate(" ", Option["indent"] * level) text +} +function parseLang(lang, code, group) { +match(lang, /^([a-z][a-z][a-z]?)(_|$)/, group) +code = getCode(group[1]) +if (lang ~ /^zh_(CN|SG)/) code = "zh-CN" +else if (lang ~ /^zh_(TW|HK)/) code = "zh-TW" +if (!code) code = "en" +return code +} +function initUserLang( lang, utf) { +if (lang = ENVIRON["LC_ALL"]) { +if (!UserLocale) UserLocale = lang +utf = utf || tolower(lang) ~ /utf-?8$/ +} +if (lang = ENVIRON["LANG"]) { +if (!UserLocale) UserLocale = lang +utf = utf || tolower(lang) ~ /utf-?8$/ +} +if (!UserLocale) { +UserLocale = "en_US.UTF-8" +utf = 1 +} +if (!utf) +w("[WARNING] Your locale codeset (" UserLocale ") is not UTF-8.") +UserLang = parseLang(UserLocale) +} +function getVersion( build, gitHead) { +initAudioPlayer() +initPager() +Platform = Platform ? Platform : detectProgram("uname", "-s", 1) +if (ENVIRON["TRANS_BUILD"]) +build = "-" ENVIRON["TRANS_BUILD"] +else { +gitHead = getGitHead() +build = gitHead ? "-git:" gitHead : "" +} +return ansi("bold", sprintf("%-22s%s%s\n\n", Name, Version, build))\ +sprintf("%-22s%s\n", "platform", Platform)\ +sprintf("%-22s%s\n", "terminal type", ENVIRON["TERM"])\ +sprintf("%-22s%s\n", "bi-di emulator", BiDiTerm ? BiDiTerm : +"[N/A]")\ +sprintf("%-22s%s\n", "gawk (GNU Awk)", PROCINFO["version"])\ +sprintf("%s\n", FriBidi ? FriBidi : +"fribidi (GNU FriBidi) [NOT INSTALLED]")\ +sprintf("%-22s%s\n", "audio player", AudioPlayer ? AudioPlayer : +"[NOT INSTALLED]")\ +sprintf("%-22s%s\n", "terminal pager", Pager ? Pager : +"[NOT INSTALLED]")\ +sprintf("%-22s%s\n", "web browser", Option["browser"] != NONE ? +Option["browser"] :"[NONE]")\ +sprintf("%-22s%s (%s)\n", "user locale", UserLocale, getName(UserLang))\ +sprintf("%-22s%s\n", "home language", Option["hl"])\ +sprintf("%-22s%s\n", "source language", join(Option["sls"], "+"))\ +sprintf("%-22s%s\n", "target language", join(Option["tl"], "+"))\ +sprintf("%-22s%s\n", "translation engine", Option["engine"])\ +sprintf("%-22s%s\n", "proxy", Option["proxy"] ? Option["proxy"] : +"[NONE]")\ +sprintf("%-22s%s\n", "user-agent", Option["user-agent"] ? Option["user-agent"] : +"[NONE]")\ +sprintf("%-22s%s\n", "ip version", Option["ip-version"] ? Option["ip-version"] : +"[DEFAULT]")\ +sprintf("%-22s%s\n", "theme", Option["theme"])\ +sprintf("%-22s%s\n", "init file", InitScript ? InitScript : "[NONE]")\ +sprintf("\n%-22s%s", "Report bugs to:", "https://github.com/soimort/translate-shell/issues") +} +function getHelp() { +return "Usage: " ansi("bold", Command)\ +" [" ansi("underline", "OPTIONS") "]"\ +" [" ansi("underline", "SOURCES") "]"\ +":[" ansi("underline", "TARGETS") "]"\ +" [" ansi("underline", "TEXT") "]..." RS\ +RS "Information options:" RS\ +ins(1, ansi("bold", "-V") ", " ansi("bold", "-version")) RS\ +ins(2, "Print version and exit.") RS\ +ins(1, ansi("bold", "-H") ", " ansi("bold", "-help")) RS\ +ins(2, "Print help message and exit.") RS\ +ins(1, ansi("bold", "-M") ", " ansi("bold", "-man")) RS\ +ins(2, "Show man page and exit.") RS\ +ins(1, ansi("bold", "-T") ", " ansi("bold", "-reference")) RS\ +ins(2, "Print reference table of languages and exit.") RS\ +ins(1, ansi("bold", "-R") ", " ansi("bold", "-reference-english")) RS\ +ins(2, "Print reference table of languages (in English names) and exit.") RS\ +ins(1, ansi("bold", "-L ") ansi("underline", "CODES")\ +", " ansi("bold", "-list ") ansi("underline", "CODES")) RS\ +ins(2, "Print details of languages and exit.") RS\ +ins(1, ansi("bold", "-S") ", " ansi("bold", "-list-engines")) RS\ +ins(2, "List available translation engines and exit.") RS\ +ins(1, ansi("bold", "-U") ", " ansi("bold", "-upgrade")) RS\ +ins(2, "Check for upgrade of this program.") RS\ +RS "Translator options:" RS\ +ins(1, ansi("bold", "-e ") ansi("underline", "ENGINE")\ +", " ansi("bold", "-engine ") ansi("underline", "ENGINE")) RS\ +ins(2, "Specify the translation engine to use.") RS\ +RS "Display options:" RS\ +ins(1, ansi("bold", "-verbose")) RS\ +ins(2, "Verbose mode. (default)") RS\ +ins(1, ansi("bold", "-b") ", " ansi("bold", "-brief")) RS\ +ins(2, "Brief mode.") RS\ +ins(1, ansi("bold", "-d") ", " ansi("bold", "-dictionary")) RS\ +ins(2, "Dictionary mode.") RS\ +ins(1, ansi("bold", "-identify")) RS\ +ins(2, "Language identification.") RS\ +ins(1, ansi("bold", "-show-original ") ansi("underline", "Y/n")) RS\ +ins(2, "Show original text or not.") RS\ +ins(1, ansi("bold", "-show-original-phonetics ") ansi("underline", "Y/n")) RS\ +ins(2, "Show phonetic notation of original text or not.") RS\ +ins(1, ansi("bold", "-show-translation ") ansi("underline", "Y/n")) RS\ +ins(2, "Show translation or not.") RS\ +ins(1, ansi("bold", "-show-translation-phonetics ") ansi("underline", "Y/n")) RS\ +ins(2, "Show phonetic notation of translation or not.") RS\ +ins(1, ansi("bold", "-show-prompt-message ") ansi("underline", "Y/n")) RS\ +ins(2, "Show prompt message or not.") RS\ +ins(1, ansi("bold", "-show-languages ") ansi("underline", "Y/n")) RS\ +ins(2, "Show source and target languages or not.") RS\ +ins(1, ansi("bold", "-show-original-dictionary ") ansi("underline", "y/N")) RS\ +ins(2, "Show dictionary entry of original text or not.") RS\ +ins(1, ansi("bold", "-show-dictionary ") ansi("underline", "Y/n")) RS\ +ins(2, "Show dictionary entry of translation or not.") RS\ +ins(1, ansi("bold", "-show-alternatives ") ansi("underline", "Y/n")) RS\ +ins(2, "Show alternative translations or not.") RS\ +ins(1, ansi("bold", "-w ") ansi("underline", "NUM")\ +", " ansi("bold", "-width ") ansi("underline", "NUM")) RS\ +ins(2, "Specify the screen width for padding.") RS\ +ins(1, ansi("bold", "-indent ") ansi("underline", "NUM")) RS\ +ins(2, "Specify the size of indent (number of spaces).") RS\ +ins(1, ansi("bold", "-theme ") ansi("underline", "FILENAME")) RS\ +ins(2, "Specify the theme to use.") RS\ +ins(1, ansi("bold", "-no-theme")) RS\ +ins(2, "Do not use any other theme than default.") RS\ +ins(1, ansi("bold", "-no-ansi")) RS\ +ins(2, "Do not use ANSI escape codes.") RS\ +ins(1, ansi("bold", "-no-autocorrect")) RS\ +ins(2, "Do not autocorrect. (if defaulted by the translation engine)") RS\ +ins(1, ansi("bold", "-no-bidi")) RS\ +ins(2, "Do not convert bidirectional texts.") RS\ +ins(1, ansi("bold", "-bidi")) RS\ +ins(2, "Always convert bidirectional texts.") RS\ +ins(1, ansi("bold", "-no-warn")) RS\ +ins(2, "Do not write warning messages to stderr.") RS\ +ins(1, ansi("bold", "-dump")) RS\ +ins(2, "Print raw API response instead.") RS\ +RS "Audio options:" RS\ +ins(1, ansi("bold", "-p, -play")) RS\ +ins(2, "Listen to the translation.") RS\ +ins(1, ansi("bold", "-speak")) RS\ +ins(2, "Listen to the original text.") RS\ +ins(1, ansi("bold", "-n ") ansi("underline", "VOICE")\ +", " ansi("bold", "-narrator ") ansi("underline", "VOICE")) RS\ +ins(2, "Specify the narrator, and listen to the translation.") RS\ +ins(1, ansi("bold", "-player ") ansi("underline", "PROGRAM")) RS\ +ins(2, "Specify the audio player to use, and listen to the translation.") RS\ +ins(1, ansi("bold", "-no-play")) RS\ +ins(2, "Do not listen to the translation.") RS\ +ins(1, ansi("bold", "-no-translate")) RS\ +ins(2, "Do not translate anything when using -speak.") RS\ +ins(1, ansi("bold", "-download-audio")) RS\ +ins(2, "Download the audio to the current directory.") RS\ +ins(1, ansi("bold", "-download-audio-as ") ansi("underline", "FILENAME")) RS\ +ins(2, "Download the audio to the specified file.") RS\ +RS "Terminal paging and browsing options:" RS\ +ins(1, ansi("bold", "-v") ", " ansi("bold", "-view")) RS\ +ins(2, "View the translation in a terminal pager.") RS\ +ins(1, ansi("bold", "-pager ") ansi("underline", "PROGRAM")) RS\ +ins(2, "Specify the terminal pager to use, and view the translation.") RS\ +ins(1, ansi("bold", "-no-view") ", " ansi("bold", "-no-pager")) RS\ +ins(2, "Do not view the translation in a terminal pager.") RS\ +ins(1, ansi("bold", "-browser ") ansi("underline", "PROGRAM")) RS\ +ins(2, "Specify the web browser to use.") RS\ +ins(1, ansi("bold", "-no-browser")) RS\ +ins(2, "Do not open the web browser.") RS\ +RS "Networking options:" RS\ +ins(1, ansi("bold", "-x ") ansi("underline", "HOST:PORT")\ +", " ansi("bold", "-proxy ") ansi("underline", "HOST:PORT")) RS\ +ins(2, "Use HTTP proxy on given port.") RS\ +ins(1, ansi("bold", "-u ") ansi("underline", "STRING")\ +", " ansi("bold", "-user-agent ") ansi("underline", "STRING")) RS\ +ins(2, "Specify the User-Agent to identify as.") RS\ +ins(1, ansi("bold", "-4") ", " ansi("bold", "-ipv4")\ +", " ansi("bold", "-inet4-only")) RS\ +ins(2, "Connect only to IPv4 addresses.") RS\ +ins(1, ansi("bold", "-6") ", " ansi("bold", "-ipv6")\ +", " ansi("bold", "-inet6-only")) RS\ +ins(2, "Connect only to IPv6 addresses.") RS\ +RS "Interactive shell options:" RS\ +ins(1, ansi("bold", "-I") ", " ansi("bold", "-interactive") ", " ansi("bold", "-shell")) RS\ +ins(2, "Start an interactive shell.") RS\ +ins(1, ansi("bold", "-E") ", " ansi("bold", "-emacs")) RS\ +ins(2, "Start the GNU Emacs front-end for an interactive shell.") RS\ +ins(1, ansi("bold", "-no-rlwrap")) RS\ +ins(2, "Do not invoke rlwrap when starting an interactive shell.") RS\ +RS "I/O options:" RS\ +ins(1, ansi("bold", "-i ") ansi("underline", "FILENAME")\ +", " ansi("bold", "-input ") ansi("underline", "FILENAME")) RS\ +ins(2, "Specify the input file.") RS\ +ins(1, ansi("bold", "-o ") ansi("underline", "FILENAME")\ +", " ansi("bold", "-output ") ansi("underline", "FILENAME")) RS\ +ins(2, "Specify the output file.") RS\ +RS "Language preference options:" RS\ +ins(1, ansi("bold", "-l ") ansi("underline", "CODE")\ +", " ansi("bold", "-hl ") ansi("underline", "CODE")\ +", " ansi("bold", "-lang ") ansi("underline", "CODE")) RS\ +ins(2, "Specify your home language.") RS\ +ins(1, ansi("bold", "-s ") ansi("underline", "CODES")\ +", " ansi("bold", "-sl ") ansi("underline", "CODES")\ +", " ansi("bold", "-source ") ansi("underline", "CODES")\ +", " ansi("bold", "-from ") ansi("underline", "CODES")) RS\ +ins(2, "Specify the source language(s), joined by '+'.") RS\ +ins(1, ansi("bold", "-t ") ansi("underline", "CODES")\ +", " ansi("bold", "-tl ") ansi("underline", "CODES")\ +", " ansi("bold", "-target ") ansi("underline", "CODES")\ +", " ansi("bold", "-to ") ansi("underline", "CODES")) RS\ +ins(2, "Specify the target language(s), joined by '+'.") RS\ +RS "Text preprocessing options:" RS\ +ins(1, ansi("bold", "-j") ", " ansi("bold", "-join-sentence")) RS\ +ins(2, "Treat all arguments as one single sentence.") RS\ +RS "Other options:" RS\ +ins(1, ansi("bold", "-no-init")) RS\ +ins(2, "Do not load any initialization script.") RS\ +RS "See the man page " Command "(1) for more information." +} +function showMan( temp) { +if (ENVIRON["TRANS_MANPAGE"]) { +initPager() +Groff = detectProgram("groff", "--version") +if (Pager && Groff) { +temp = "echo -E \"${TRANS_MANPAGE}\"" +temp = temp PIPE\ +Groff " -Wall -mtty-char -mandoc -Tutf8 "\ +"-rLL=" Option["width"] "n -rLT=" Option["width"] "n" +switch (Pager) { +case "less": +temp = temp PIPE\ +Pager " -s -P\"\\ \\Manual page " Command "(1) line %lt (press h for help or q to quit)\"" +break +case "most": +temp = temp PIPE Pager " -Cs" +break +default: +temp = temp PIPE Pager +} +system(temp) +return +} +} +if (fileExists(ENVIRON["TRANS_DIR"] "/man/" Command ".1")) +system("man " parameterize(ENVIRON["TRANS_DIR"] "/man/" Command ".1") SUPERR) +else if (system("man " Command SUPERR)) +print getHelp() +} +function getReference(displayName, +code, col, cols, i, j, name, num, r, rows, saveSortedIn, +t1, t2) { +num = 0 +for (code in Locale) +if (Locale[code]["support"] != "unstable") +num++ +rows = int(num / 3) + (num % 3 ? 1 : 0) +cols[0][0] = cols[1][0] = cols[2][0] = NULLSTR +i = 0 +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = displayName == "endonym" ? "@ind_num_asc" : +"compName" +for (code in Locale) { +if (Locale[code]["support"] != "unstable") { +col = int(i / rows) +append(cols[col], code) +i++ +} +} +PROCINFO["sorted_in"] = saveSortedIn +if (displayName == "endonym") { +r = "┌" replicate("─", 23) "┬" replicate("─", 23) "┬" replicate("─", 23) "┐" RS +for (i = 0; i < rows; i++) { +r = r "│" +for (j = 0; j < 3; j++) { +if (cols[j][i]) { +t1 = getDisplay(cols[j][i]) +switch (cols[j][i]) { +case "he": +t1 = sprintf(" %-18s", t1) +break +case "ur": +t1 = sprintf(" %-17s", t1) +break +case "hi": case "gu": case "km": case "kn": +case "my": case "ne": case "pa": case "si": +case "ta": case "te": case "yi": +t1 = sprintf(" %-16s", t1) +break +case "yue": +t1 = sprintf(" %-13s", t1) +break +case "ja": case "ko": +t1 = sprintf(" %-12s", t1) +break +case "zh-CN": case "zh-TW": +t1 = sprintf(" %-11s", t1) +break +default: +if (length(t1) <= 15) +t1 = sprintf(" %-15s", t1) +} +switch (length(cols[j][i])) { +case 1: case 2: case 3: case 4: +t2 = sprintf("- %s │", ansi("bold", sprintf("%4s", cols[j][i]))) +break +case 5: +t2 = sprintf("- %s│", ansi("bold", cols[j][i])) +break +case 6: +t2 = sprintf("-%s│", ansi("bold", cols[j][i])) +break +case 7: +t2 = sprintf("-%s", ansi("bold", cols[j][i])) +break +default: +t2 = ansi("bold", cols[j][i]) +} +r = r t1 t2 +} else +r = r sprintf("%23s│", NULLSTR) +} +r = r RS +} +r = r "└" replicate("─", 23) "┴" replicate("─", 23) "┴" replicate("─", 23) "┘" +} else { +r = "┌" replicate("─", 23) "┬" replicate("─", 23) "┬" replicate("─", 23) "┐" RS +for (i = 0; i < rows; i++) { +r = r "│" +for (j = 0; j < 3; j++) { +if (cols[j][i]) { +t1 = getName(cols[j][i]) +if (length(t1) > 15) +t1 = substr(t1, 1, 12) "..." +t1 = sprintf(" %-15s", t1) +switch (length(cols[j][i])) { +case 1: case 2: case 3: case 4: +t2 = sprintf("- %s │", ansi("bold", sprintf("%4s", cols[j][i]))) +break +case 5: +t2 = sprintf("- %s│", ansi("bold", cols[j][i])) +break +case 6: +t2 = sprintf("-%s│", ansi("bold", cols[j][i])) +break +case 7: +t2 = sprintf("-%s", ansi("bold", cols[j][i])) +break +default: +t2 = ansi("bold", cols[j][i]) +} +r = r t1 t2 +} else +r = r sprintf("%23s│", NULLSTR) +} +r = r RS +} +r = r "└" replicate("─", 23) "┴" replicate("─", 23) "┴" replicate("─", 23) "┘" +} +return r +} +function getList(codes, code, i, r, saveSortedIn) { +r = NULLSTR +if (!isarray(codes)) +r = getDetails(codes) +else if (anything(codes)) { +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "@ind_num_asc" +for (i in codes) +r = (r ? r RS prettify("target-seperator", replicate(Option["chr-target-seperator"], Option["width"])) RS\ +: r) getDetails(codes[i]) +PROCINFO["sorted_in"] = saveSortedIn +} else +r = getDetails(Option["hl"]) +return r +} +function tokenize(returnTokens, string, +delimiters, +newlines, +quotes, +escapeChars, +leftBlockComments, +rightBlockComments, +lineComments, +reservedOperators, +reservedPatterns, +blockCommenting, +c, +currentToken, +escaping, +i, +lineCommenting, +p, +quoting, +r, +s, +tempGroup, +tempPattern, +tempString) { +if (!delimiters[0]) { +delimiters[0] = " " +delimiters[1] = "\t" +delimiters[2] = "\v" +} +if (!newlines[0]) { +newlines[0] = "\n" +newlines[1] = "\r" +} +if (!quotes[0]) { +quotes[0] = "\"" +} +if (!escapeChars[0]) { +escapeChars[0] = "\\" +} +if (!leftBlockComments[0]) { +leftBlockComments[0] = "#|" +leftBlockComments[1] = "/*" +leftBlockComments[2] = "(*" +} +if (!rightBlockComments[0]) { +rightBlockComments[0] = "|#" +rightBlockComments[1] = "*/" +rightBlockComments[2] = "*)" +} +if (!lineComments[0]) { +lineComments[0] = ";" +lineComments[1] = "//" +lineComments[2] = "#" +} +if (!reservedOperators[0]) { +reservedOperators[0] = "(" +reservedOperators[1] = ")" +reservedOperators[2] = "[" +reservedOperators[3] = "]" +reservedOperators[4] = "{" +reservedOperators[5] = "}" +reservedOperators[6] = "," +} +if (!reservedPatterns[0]) { +reservedPatterns[0] = "[+-]?((0|[1-9][0-9]*)|[.][0-9]*|(0|[1-9][0-9]*)[.][0-9]*)([Ee][+-]?[0-9]+)?" +reservedPatterns[1] = "[+-]?0[0-7]+([.][0-7]*)?" +reservedPatterns[2] = "[+-]?0[Xx][0-9A-Fa-f]+([.][0-9A-Fa-f]*)?" +} +split(string, s, "") +currentToken = "" +quoting = escaping = blockCommenting = lineCommenting = 0 +p = 0 +i = 1 +while (i <= length(s)) { +c = s[i] +r = substr(string, i) +if (blockCommenting) { +if (tempString = startsWithAny(r, rightBlockComments)) +blockCommenting = 0 +i++ +} else if (lineCommenting) { +if (belongsTo(c, newlines)) +lineCommenting = 0 +i++ +} else if (quoting) { +currentToken = currentToken c +if (escaping) { +escaping = 0 +} else { +if (belongsTo(c, quotes)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +quoting = 0 +} else if (belongsTo(c, escapeChars)) { +escaping = 1 +} else { +} +} +i++ +} else { +if (belongsTo(c, delimiters) || belongsTo(c, newlines)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +i++ +} else if (belongsTo(c, quotes)) { +if (currentToken) { +returnTokens[p++] = currentToken +} +currentToken = c +quoting = 1 +i++ +} else if (tempString = startsWithAny(r, leftBlockComments)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +blockCommenting = 1 +i += length(tempString) +} else if (tempString = startsWithAny(r, lineComments)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +lineCommenting = 1 +i += length(tempString) +} else if (tempString = startsWithAny(r, reservedOperators)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +returnTokens[p++] = tempString +i += length(tempString) +} else if (tempPattern = matchesAny(r, reservedPatterns)) { +if (currentToken) { +returnTokens[p++] = currentToken +currentToken = "" +} +match(r, "^" tempPattern, tempGroup) +returnTokens[p++] = tempGroup[0] +i += length(tempGroup[0]) +} else { +currentToken = currentToken c +i++ +} +} +} +if (currentToken) +returnTokens[p++] = currentToken +} +function parseJsonArray(returnAST, tokens, +leftBrackets, +rightBrackets, +separators, +i, j, key, p, stack, token) { +if (!leftBrackets[0]) { +leftBrackets[0] = "(" +leftBrackets[1] = "[" +leftBrackets[2] = "{" +} +if (!rightBrackets[0]) { +rightBrackets[0] = ")" +rightBrackets[1] = "]" +rightBrackets[2] = "}" +} +if (!separators[0]) { +separators[0] = "," +} +stack[p = 0] = 0 +for (i = 0; i < length(tokens); i++) { +token = tokens[i] +if (belongsTo(token, leftBrackets)) +stack[++p] = 0 +else if (belongsTo(token, rightBrackets)) +--p +else if (belongsTo(token, separators)) +stack[p]++ +else { +key = stack[0] +for (j = 1; j <= p; j++) +key = key SUBSEP stack[j] +returnAST[key] = token +} +} +} +function parseJson(returnAST, tokens, +arrayStartTokens, arrayEndTokens, +objectStartTokens, objectEndTokens, +commas, colons, +flag, i, j, key, name, p, stack, token) { +if (!arrayStartTokens[0]) arrayStartTokens[0] = "[" +if (!arrayEndTokens[0]) arrayEndTokens[0] = "]" +if (!objectStartTokens[0]) objectStartTokens[0] = "{" +if (!objectEndTokens[0]) objectEndTokens[0] = "}" +if (!commas[0]) commas[0] = "," +if (!colons[0]) colons[0] = ":" +stack[p = 0] = 0 +flag = 0 +for (i = 0; i < length(tokens); i++) { +token = tokens[i] +if (belongsTo(token, arrayStartTokens)) { +stack[++p] = 0 +} else if (belongsTo(token, objectStartTokens)) { +stack[++p] = NULLSTR +flag = 0 +} else if (belongsTo(token, objectEndTokens) || +belongsTo(token, arrayEndTokens)) { +--p +} else if (belongsTo(token, commas)) { +if (isnum(stack[p])) +stack[p]++ +else +flag = 0 +} else if (belongsTo(token, colons)) { +flag = 1 +} else if (isnum(stack[p]) || flag) { +key = stack[0] +for (j = 1; j <= p; j++) +key = key SUBSEP stack[j] +returnAST[key] = token +flag = 0 +} else { +stack[p] = unparameterize(token) +} +} +} +function parseList(returnAST, tokens, +leftBrackets, +rightBrackets, +separators, +i, j, key, p, stack, token) { +if (!leftBrackets[0]) { +leftBrackets[0] = "(" +leftBrackets[1] = "[" +leftBrackets[2] = "{" +} +if (!rightBrackets[0]) { +rightBrackets[0] = ")" +rightBrackets[1] = "]" +rightBrackets[2] = "}" +} +if (!separators[0]) { +separators[0] = "," +} +stack[p = 0] = 0 +for (i = 0; i < length(tokens); i++) { +token = tokens[i] +if (belongsTo(token, leftBrackets)) { +stack[++p] = 0 +} else if (belongsTo(token, rightBrackets)) { +stack[--p]++ +} else if (belongsTo(token, separators)) { +} else { +key = NULLSTR +if (p > 0) { +for (j = 0; j < p - 1; j++) +key = key SUBSEP stack[j] +returnAST[key][stack[p - 1]] = NULLSTR +key = key SUBSEP stack[p - 1] +} +returnAST[key][stack[p]] = token +stack[p]++ +} +} +} +function prettify(name, string, i, temp) { +temp = string +if ("sgr-" name in Option) +if (isarray(Option["sgr-" name])) +for (i in Option["sgr-" name]) +temp = ansi(Option["sgr-" name][i], temp) +else +temp = ansi(Option["sgr-" name], temp) +return temp +} +function randomColor( i) { +i = int(5 * rand()) +switch (i) { +case 0: return "green" +case 1: return "yellow" +case 2: return "blue" +case 3: return "magenta" +case 4: return "cyan" +default: return "default" +} +} +function setRandomTheme( i, n, temp) { +srand(systime()) +for (i = 0; i < 3; i++) { +do temp = randomColor(); while (belongsTo(temp, n)) +n[i] = temp +} +Option["sgr-prompt-message"] = Option["sgr-languages"] = n[0] +Option["sgr-original-dictionary-detailed-word-class"][1] = n[0] +Option["sgr-original-dictionary-detailed-word-class"][2] = "bold" +Option["sgr-original-dictionary-synonyms"] = n[0] +Option["sgr-original-dictionary-synonyms-word-class"][1] = n[0] +Option["sgr-original-dictionary-synonyms-word-class"][2] = "bold" +Option["sgr-original-dictionary-examples"] = n[0] +Option["sgr-original-dictionary-see-also"] = n[0] +Option["sgr-dictionary-word-class"][1] = n[0] +Option["sgr-dictionary-word-class"][2] = "bold" +Option["sgr-original"][1] = Option["sgr-original-phonetics"][1] = n[1] +Option["sgr-original"][2] = Option["sgr-original-phonetics"][2] = "bold" +Option["sgr-prompt-message-original"][1] = n[1] +Option["sgr-prompt-message-original"][2] = "bold" +Option["sgr-languages-sl"] = n[1] +Option["sgr-original-dictionary-detailed-explanation"][1] = n[1] +Option["sgr-original-dictionary-detailed-explanation"][2] = "bold" +Option["sgr-original-dictionary-detailed-example"] = n[1] +Option["sgr-original-dictionary-detailed-synonyms"] = n[1] +Option["sgr-original-dictionary-detailed-synonyms-item"][1] = n[1] +Option["sgr-original-dictionary-detailed-synonyms-item"][2] = "bold" +Option["sgr-original-dictionary-synonyms-synonyms"] = n[1] +Option["sgr-original-dictionary-synonyms-synonyms-item"][1] = n[1] +Option["sgr-original-dictionary-synonyms-synonyms-item"][2] = "bold" +Option["sgr-original-dictionary-examples-example"] = n[1] +Option["sgr-original-dictionary-examples-original"][1] = n[1] +Option["sgr-original-dictionary-examples-original"][2] = "bold" +Option["sgr-original-dictionary-examples-original"][3] = "underline" +Option["sgr-original-dictionary-see-also-phrases"] = n[1] +Option["sgr-original-dictionary-see-also-phrases-item"][1] = n[1] +Option["sgr-original-dictionary-see-also-phrases-item"][2] = "bold" +Option["sgr-dictionary-explanation"] = n[1] +Option["sgr-dictionary-explanation-item"][1] = n[1] +Option["sgr-dictionary-explanation-item"][2] = "bold" +Option["sgr-alternatives-original"][1] = n[1] +Option["sgr-alternatives-original"][2] = "bold" +Option["sgr-translation"][1] = Option["sgr-translation-phonetics"][1] = n[2] +Option["sgr-translation"][2] = Option["sgr-translation-phonetics"][2] = "bold" +Option["sgr-languages-tl"] = n[2] +Option["sgr-dictionary-word"][1] = n[2] +Option["sgr-dictionary-word"][2] = "bold" +Option["sgr-alternatives-translations"] = n[2] +Option["sgr-alternatives-translations-item"][1] = n[2] +Option["sgr-alternatives-translations-item"][2] = "bold" +Option["sgr-brief-translation"][1] = Option["sgr-brief-translation-phonetics"][1] = n[2] +Option["sgr-brief-translation"][2] = Option["sgr-brief-translation-phonetics"][2] = "bold" +Option["fmt-welcome-message"] = Name +Option["sgr-welcome-message"][1] = n[0] +Option["sgr-welcome-message"][2] = "bold" +Option["fmt-welcome-submessage"] = "(:q to quit)" +Option["sgr-welcome-submessage"] = n[0] +Option["fmt-prompt"] = "%s> " +Option["sgr-prompt"][1] = n[1] +Option["sgr-prompt"][2] = "bold" +} +function setDefaultTheme() { +Option["sgr-translation"] = Option["sgr-translation-phonetics"] = "bold" +Option["sgr-prompt-message-original"] = "underline" +Option["sgr-languages-sl"] = "underline" +Option["sgr-languages-tl"] = "bold" +Option["sgr-original-dictionary-detailed-explanation"] = "bold" +Option["sgr-original-dictionary-detailed-synonyms-item"] = "bold" +Option["sgr-original-dictionary-synonyms-synonyms-item"] = "bold" +Option["sgr-original-dictionary-examples-original"][1] = "bold" +Option["sgr-original-dictionary-examples-original"][2] = "underline" +Option["sgr-original-dictionary-see-also-phrases-item"] = "bold" +Option["sgr-dictionary-word"] = "bold" +Option["sgr-alternatives-original"] = "underline" +Option["sgr-alternatives-translations-item"] = "bold" +Option["fmt-welcome-message"] = Name +Option["sgr-welcome-message"] = "bold" +Option["fmt-welcome-submessage"] = "(:q to quit)" +Option["fmt-prompt"] = "%s> " +Option["sgr-prompt"] = "bold" +} +function setTheme( file, line, script) { +if (Option["theme"] && Option["theme"] != "default"\ +&& Option["theme"] != "none" && Option["theme"] != "random") { +file = Option["theme"] +if (!fileExists(file)) { +file = ENVIRON["HOME"] "/.translate-shell/" Option["theme"] +if (!fileExists(file)) { +file = ENVIRON["HOME"] "/.config/translate-shell/" Option["theme"] +if (!fileExists(file)) return +} +} +} +if (file && fileExists(file)) { +script = NULLSTR +while (getline line < file) +script = script "\n" line +loadOptions(script) +} else if (Option["theme"] == "none") +; +else if (Option["theme"] == "random") +setRandomTheme() +else +setDefaultTheme() +} +function provides(engineName) { +Translator[tolower(engineName)] = TRUE +} +function engineMethod(methodName, engine, translator) { +if (!Translator[Option["engine"]]) { +engine = tolower(Option["engine"]) +if (!Translator[engine]) +for (translator in Translator) +if (Translator[translator] && +translator ~ "^"engine) { +engine = translator +break +} +if (!Translator[engine]) { +e("[ERROR] Translator not found: " Option["engine"] "\n"\ +" Run '-list-engines / -S' to see a list of available engines.") +exit 1 +} +Option["engine"] = engine +} +return Option["engine"] methodName +} +function initAudioPlayer() { +AudioPlayer = !system("mpv" SUPOUT SUPERR) ? +"mpv --no-config" : +(!system("mplayer" SUPOUT SUPERR) ? +"mplayer" : +(!system("mpg123 --version" SUPOUT SUPERR) ? +"mpg123" : +"")) +} +function initSpeechSynthesizer() { +SpeechSynthesizer = !system("say ''" SUPOUT SUPERR) ? +"say" : +(!system("espeak ''" SUPOUT SUPERR) ? +"espeak" : +"") +} +function initPager() { +Pager = !system("less -V" SUPOUT SUPERR) ? +"less" : +(!system("more -V" SUPOUT SUPERR) ? +"more" : +(!system("most" SUPOUT SUPERR) ? +"most" : +"")) +} +function initHttpService( inet) { +_Init() +inet = "inet" +if (Option["ip-version"]) +inet = inet Option["ip-version"] +if (Option["proxy"]) { +match(Option["proxy"], /^(http:\/*)?(([^:]+):([^@]+)@)?([^\/]*):([^\/:]*)/, HttpProxySpec) +HttpAuthUser = HttpProxySpec[3] +HttpAuthPass = HttpProxySpec[4] +HttpAuthCredentials = base64(unquote(HttpAuthUser) ":" HttpAuthPass) +HttpService = "/" inet "/tcp/0/" HttpProxySpec[5] "/" HttpProxySpec[6] +HttpPathPrefix = HttpProtocol HttpHost +} else { +HttpService = "/" inet "/tcp/0/" HttpHost "/" HttpPort +HttpPathPrefix = "" +} +PROCINFO[HttpService, "READ_TIMEOUT"] = 2000 +} +function preprocess(text) { +return quote(text) +} +function preprocessByDump(text, arr, len, temp) { +len = dumpX(text, arr) +temp = "" +for (i = 1; i <= len; i++) +temp = temp "%" arr[i] +return temp +} +function postprocess(text) { +text = gensub(/ ([.,;:?!"])/, "\\1", "g", text) +text = gensub(/(["]) /, "\\1", "g", text) +return text +} +function getResponse(text, sl, tl, hl, +content, header, isBody, url, group, status, location) { +url = _RequestUrl(text, sl, tl, hl) +header = "GET " url " HTTP/1.1\r\n"\ +"Host: " HttpHost "\r\n"\ +"Connection: close\r\n" +if (Option["user-agent"]) +header = header "User-Agent: " Option["user-agent"] "\r\n" +if (Cookie) +header = header "Cookie: " Cookie "\r\n" +if (HttpAuthUser && HttpAuthPass) +header = header "Proxy-Authorization: Basic " HttpAuthCredentials "\r\n" +content = NULLSTR; isBody = 0 +while (1) { +print header |& HttpService +while ((HttpService |& getline) > 0) { +if (isBody) +content = content ? content "\n" $0 : $0 +else if (length($0) <= 1) +isBody = 1 +else { +match($0, /^HTTP[^ ]* ([^ ]*)/, group) +if (RSTART) status = group[1] +match($0, /^Location: (.*)/, group) +if (RSTART) location = squeeze(group[1]) +} +l(sprintf("%4s bytes > %s", length($0), $0)) +} +close(HttpService) +if (ERRNO == "Connection timed out") { +w("[WARNING] " ERRNO ". Retrying IPv4 connection.") +Option["ip-version"] = 4 +initHttpService() +PROCINFO[HttpService, "READ_TIMEOUT"] = 0 +ERRNO = "" +} else +break +} +if ((status == "301" || status == "302") && location) +content = curl(location) +return assert(content, "[ERROR] Null response.") +} +function postResponse(text, sl, tl, hl, type, +content, contentLength, contentType, group, +header, isBody, reqBody, url, status, location) { +url = _PostRequestUrl(text, sl, tl, hl, type) +contentType = _PostRequestContentType(text, sl, tl, hl, type) +reqBody = _PostRequestBody(text, sl, tl, hl, type) +if (DumpContentengths[reqBody]) +contentLength = DumpContentengths[reqBody] +else +contentLength = DumpContentengths[reqBody] = dump(reqBody, group) +header = "POST " url " HTTP/1.1\r\n"\ +"Host: " HttpHost "\r\n"\ +"Connection: close\r\n"\ +"Content-Length: " contentLength "\r\n"\ +"Content-Type: " contentType "\r\n" +if (Option["user-agent"]) +header = header "User-Agent: " Option["user-agent"] "\r\n" +if (Cookie) +header = header "Cookie: " Cookie "\r\n" +if (HttpAuthUser && HttpAuthPass) +header = header "Proxy-Authorization: Basic " HttpAuthCredentials "\r\n" +content = NULLSTR; isBody = 0 +while (1) { +print (header "\r\n" reqBody) |& HttpService +while ((HttpService |& getline) > 0) { +if (isBody) +content = content ? content "\n" $0 : $0 +else if (length($0) <= 1) +isBody = 1 +else { +match($0, /^HTTP[^ ]* ([^ ]*)/, group) +if (RSTART) status = group[1] +match($0, /^Location: (.*)/, group) +if (RSTART) location = squeeze(group[1]) +} +l(sprintf("%4s bytes > %s", length($0), $0)) +} +close(HttpService) +if (ERRNO == "Connection timed out") { +w("[WARNING] " ERRNO ". Retrying IPv4 connection.") +Option["ip-version"] = 4 +initHttpService() +PROCINFO[HttpService, "READ_TIMEOUT"] = 0 +ERRNO = "" +} else +break +} +if (status == "404") { +e("[ERROR] 404 Not Found") +exit 1 +} +if ((status == "301" || status == "302") && location) { +url = "https" substr(url, 5) +content = curlPost(url, reqBody) +} +return content +} +function p(string) { +if (Option["view"]) { +print string | Option["pager"] +close(Option["pager"]) +} else +print string > Option["output"] +} +function play(text, tl, url, status) { +url = _TTSUrl(text, tl) +status = system(Option["player"] " " parameterize(url) SUPOUT SUPERR) +if (status) +w("Voice output isn't available for " getName(tl)) +return status +} +function download_audio(text, tl, url, output) { +url = _TTSUrl(text, tl) +if (Option["download-audio-as"]) +output = Option["download-audio-as"] +else +output = text " [" Option["engine"] "] (" Option["narrator"] ").ts" +if (url ~ /^\//) +system("mv -- " parameterize(url) " " parameterize(output)) +else +curl(url, output) +} +function getTranslation(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl) { +return _Translate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl) +} +function fileTranslation(uri, group, temp1, temp2) { +temp1 = Option["input"] +temp2 = Option["verbose"] +match(uri, /^file:\/\/(.*)/, group) +Option["input"] = group[1] +Option["verbose"] = 0 +translateMain() +Option["input"] = temp1 +Option["verbose"] = temp2 +} +function webTranslation(uri, sl, tl, hl, temp) { +temp = _WebTranslateUrl(uri, sl, tl, hl) +if (temp) { +p(temp) +if (Option["browser"] != NONE) +system(Option["browser"] " " parameterize(temp) SUPOUT SUPERR) +} +} +function translate(text, inline, +i, j, playlist, il, saveSortedIn) { +if (!getCode(Option["hl"])) { +w("[WARNING] Unknown language code: " Option["hl"] ", fallback to English: en") +Option["hl"] = "en" +} else if (isRTL(Option["hl"])) { +if (!FriBidi) +w("[WARNING] " getName(Option["hl"]) " is a right-to-left language, but FriBidi is not found.") +} +if (!getCode(Option["sl"])) { +w("[WARNING] Unknown source language code: " Option["sl"]) +} else if (isRTL(Option["sl"])) { +if (!FriBidi) +w("[WARNING] " getName(Option["sl"]) " is a right-to-left language, but FriBidi is not found.") +} +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "@ind_num_asc" +for (i in Option["tl"]) { +if (!Option["interactive"]) +if (Option["verbose"] && i > 1) +p(prettify("target-seperator", replicate(Option["chr-target-seperator"], Option["width"]))) +if (inline && +startsWithAny(text, UriSchemes) == "file://") { +fileTranslation(text) +} else if (inline && +startsWithAny(text, UriSchemes) == "http://" || +startsWithAny(text, UriSchemes) == "https://") { +webTranslation(text, Option["sl"], Option["tl"][i], Option["hl"]) +} else { +if (!Option["no-translate"]) +p(getTranslation(text, Option["sl"], Option["tl"][i], Option["hl"], Option["verbose"], Option["play"] || Option["download-audio"], playlist, il)) +else +il[0] = Option["sl"] == "auto" ? "en" : Option["sl"] +if (Option["play"] == 1) { +if (Option["player"]) +for (j in playlist) +play(playlist[j]["text"], playlist[j]["tl"]) +else if (SpeechSynthesizer) +for (j in playlist) +print playlist[j]["text"] | SpeechSynthesizer +} else if (Option["play"] == 2) { +if (Option["player"]) +play(text, il[0]) +else if (SpeechSynthesizer) +print text | SpeechSynthesizer +} +if (Option["download-audio"] == 1) { +if (Option["play"] != 2 && !Option["no-translate"]) +download_audio(playlist[length(playlist) - 1]["text"],\ +playlist[length(playlist) - 1]["tl"]) +else +download_audio(text, il[0]) +} +} +} +PROCINFO["sorted_in"] = saveSortedIn +} +function translates(text, inline, +i) { +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "@ind_num_asc" +for (i in Option["sls"]) { +if (!Option["interactive"]) +if (Option["verbose"] && i > 1) +p(prettify("target-seperator", replicate(Option["chr-target-seperator"], Option["width"]))) +Option["sl"] = Option["sls"][i] +translate(text, inline) +} +PROCINFO["sorted_in"] = saveSortedIn +} +function translateMain( i, line) { +if (Option["interactive"]) +prompt() +if (Option["input"] == STDIN || fileExists(Option["input"])) { +i = 0 +while (getline line < Option["input"]) +if (line) { +if (!Option["interactive"]) +if (Option["verbose"] && i++ > 0) +p(prettify("source-seperator", +replicate(Option["chr-source-seperator"], +Option["width"]))) +if (Option["interactive"]) +repl(line) +else +translates(line) +} else { +if (!Option["interactive"]) +if (!Option["verbose"]) +p(line) +} +} else +e("[ERROR] File not found: " Option["input"]) +} +function _Init( vm) { +vm = engineMethod("Init") +return @vm() +} +function _RequestUrl(text, sl, tl, hl, vm) { +vm = engineMethod("RequestUrl") +return @vm(text, sl, tl, hl) +} +function _PostRequestUrl(text, sl, tl, hl, type, vm) { +vm = engineMethod("PostRequestUrl") +return @vm(text, sl, tl, hl, type) +} +function _PostRequestContentType(text, sl, tl, hl, type, vm) { +vm = engineMethod("PostRequestContentType") +return @vm(text, sl, tl, hl, type) +} +function _PostRequestBody(text, sl, tl, hl, type, vm) { +vm = engineMethod("PostRequestBody") +return @vm(text, sl, tl, hl, type) +} +function _TTSUrl(text, tl, vm) { +vm = engineMethod("TTSUrl") +return @vm(text, tl) +} +function _WebTranslateUrl(uri, sl, tl, hl, vm) { +vm = engineMethod("WebTranslateUrl") +return @vm(uri, sl, tl, hl) +} +function _Translate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +vm) { +vm = engineMethod("Translate") +return @vm(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl) +} +BEGIN { provides("google") } +function genRL(a, x, +b, c, d, i, y) { +tokenize(y, x) +parseList(b, y) +i = SUBSEP 0 +for (c = 0; c < length(b[i]) - 2; c += 3) { +d = b[i][c + 2] +d = d >= 97 ? d - 87 : +d - 48 +d = b[i][c + 1] == 43 ? rshift(a, d) : lshift(a, d) +a = b[i][c] == 43 ? and(a + d, 4294967295) : xor(a, d) +} +return a +} +function genTK(text, +a, d, dLen, e, tkk, ub, vb) { +if (TK[text]) return TK[text] +tkk = systime() / 3600 +ub = "[43,45,51,94,43,98,43,45,102]" +vb = "[43,45,97,94,43,54]" +dLen = dump(text, d) +a = tkk +for (e = 1; e <= dLen; e++) +a = genRL(a + d[e], vb) +a = genRL(a, ub) +0 > a && (a = and(a, 2147483647) + 2147483648) +a %= 1e6 +TK[text] = a "." xor(a, tkk) +l(text, "text") +l(tkk, "tkk") +l(TK[text], "tk") +return TK[text] +} +function googleInit() { +HttpProtocol = "http://" +HttpHost = "translate.googleapis.com" +HttpPort = 80 +} +function googleRequestUrl(text, sl, tl, hl, qc) { +qc = Option["no-autocorrect"] ? "qc" : "qca"; +return HttpPathPrefix "/translate_a/single?client=gtx"\ +"&ie=UTF-8&oe=UTF-8"\ +"&dt=bd&dt=ex&dt=ld&dt=md&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=gt"\ +"&dt=" qc "&sl=" sl "&tl=" tl "&hl=" hl\ +"&q=" preprocessByDump(text) +} +function googleTTSUrl(text, tl) { +return HttpProtocol HttpHost "/translate_tts?ie=UTF-8&client=gtx"\ +"&tl=" tl "&q=" preprocessByDump(text) +} +function googleWebTranslateUrl(uri, sl, tl, hl) { +return "https://translate.google.com/translate?"\ +"hl=" hl "&sl=" sl "&tl=" tl "&u=" uri +} +function googleTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +r, +content, tokens, ast, +_sl, _tl, _hl, il, ils, isPhonetic, +article, example, explanation, ref, word, +translation, translations, phonetics, +wordClasses, words, segments, altTranslations, +original, oPhonetics, oWordClasses, oWords, +oRefs, oSynonymClasses, oSynonyms, +oExamples, oSeeAlso, +wShowOriginal, wShowOriginalPhonetics, +wShowTranslation, wShowTranslationPhonetics, +wShowPromptMessage, wShowLanguages, +wShowOriginalDictionary, wShowDictionary, +wShowAlternatives, +genderedTrans, hasWordClasses, hasAltTranslations, +i, j, k, group, temp, saveSortedIn) { +isPhonetic = match(tl, /^@/) +tl = substr(tl, 1 + isPhonetic) +if (!getCode(tl)) { +w("[WARNING] Unknown target language code: " tl) +} else if (isRTL(tl)) { +if (!FriBidi) +w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.") +} +_sl = getCode(sl); if (!_sl) _sl = sl +_tl = getCode(tl); if (!_tl) _tl = tl +_hl = getCode(hl); if (!_hl) _hl = hl +content = getResponse(text, _sl, _tl, _hl) +if (Option["dump"]) +return content +tokenize(tokens, content) +parseJsonArray(ast, tokens) +l(content, "content", 1, 1) +l(tokens, "tokens", 1, 0, 1) +l(ast, "ast") +if (!isarray(ast) || !anything(ast)) { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +ExitCode = 1 +return +} +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "compareByIndexFields" +for (i in ast) { +if (ast[i] == "null") continue +if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "0$") +append(translations, literal(ast[i])) +if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "1$") +append(original, literal(ast[i])) +if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "2$") +append(phonetics, literal(ast[i])) +if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "3$") +append(oPhonetics, literal(ast[i])) +if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +wordClasses[group[1]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "([[:digit:]]+)$", group)) +words[group[1]][group[2]][group[3]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)$", group)) +words[group[1]][group[2]]["1"][group[3]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "5" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) { +segments[group[1]] = literal(ast[i]) +altTranslations[group[1]][0] = "" +} +if (match(i, "^0" SUBSEP "5" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +altTranslations[group[1]][group[2]] = literal(ast[i]) +if (i ~ "^0" SUBSEP "7" SUBSEP "5$") { +if (ast[i] == "true") +w("Showing translation for: (use -no-auto to disable autocorrect)") +else +w("Did you mean: "\ +ansi("bold", unparameterize(ast["0" SUBSEP "7" SUBSEP "1"]))) +} +if (i ~ "^0" SUBSEP "8" SUBSEP "0" SUBSEP "[[:digit:]]+$" || +i ~ "^0" SUBSEP "2$") +append(ils, literal(ast[i])) +if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +oSynonymClasses[group[1]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "1$", group)) +if (ast[i]) { +oRefs[literal(ast[i])][1] = group[1] +oRefs[literal(ast[i])][2] = group[2] +} +if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0" SUBSEP "([[:digit:]]+)$", group)) +oSynonyms[group[1]][group[2]][group[3]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +oWordClasses[group[1]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +oWords[group[1]][group[2]][0] = literal(ast[i]) +if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "1$", group)) +oWords[group[1]][group[2]][1] = literal(ast[i]) +if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2$", group)) +oWords[group[1]][group[2]][2] = literal(ast[i]) +if (match(i, "^0" SUBSEP "13" SUBSEP "0" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) +oExamples[group[1]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "14" SUBSEP "0" SUBSEP "([[:digit:]]+)$", group)) +oSeeAlso[group[1]] = literal(ast[i]) +if (match(i, "^0" SUBSEP "18" SUBSEP "0" SUBSEP "([[:digit:]]+)" SUBSEP "1$", group)) +genderedTrans[group[1]] = literal(ast[i]) +} +PROCINFO["sorted_in"] = saveSortedIn +translation = join(translations) +returnIl[0] = il = !anything(ils) || belongsTo(sl, ils) ? sl : ils[0] +if (Option["verbose"] < -1) +return il +else if (Option["verbose"] < 0) +return getList(il) +if (!isVerbose) { +r = isPhonetic && anything(phonetics) ? +prettify("brief-translation-phonetics", join(phonetics, " ")) : +prettify("brief-translation", s(translation, tl)) +if (toSpeech) { +returnPlaylist[0]["text"] = translation +returnPlaylist[0]["tl"] = _tl +} +} else { +wShowOriginal = Option["show-original"] +wShowOriginalPhonetics = Option["show-original-phonetics"] +wShowTranslation = Option["show-translation"] +wShowTranslationPhonetics = Option["show-translation-phonetics"] +wShowPromptMessage = Option["show-prompt-message"] +wShowLanguages = Option["show-languages"] +wShowOriginalDictionary = Option["show-original-dictionary"] +wShowDictionary = Option["show-dictionary"] +wShowAlternatives = Option["show-alternatives"] +if (!anything(oPhonetics)) wShowOriginalPhonetics = 0 +if (!anything(phonetics)) wShowTranslationPhonetics = 0 +if (getCode(il) == getCode(tl) &&\ +(isarray(oWordClasses) || isarray(oSynonymClasses) ||\ +isarray(oExamples) || isarray(oSeeAlso))) { +wShowOriginalDictionary = 1 +wShowTranslation = 0 +} +hasWordClasses = exists(wordClasses) +hasAltTranslations = exists(altTranslations[0]) +if (!hasWordClasses && !hasAltTranslations) +wShowPromptMessage = wShowLanguages = 0 +if (!hasWordClasses) wShowDictionary = 0 +if (!hasAltTranslations) wShowAlternatives = 0 +if (wShowOriginal) { +if (r) r = r RS RS +r = r m("-- display original text & phonetics") +r = r prettify("original", s(join(original, " "), il)) +if (wShowOriginalPhonetics) +r = r RS prettify("original-phonetics", showPhonetics(join(oPhonetics, " "), il)) +} +if (wShowTranslation) { +if (r) r = r RS RS +r = r m("-- display major translation & phonetics") +if (!exists(genderedTrans)) +r = r prettify("translation", s(translation, tl)) +else { +r = r prettify("prompt-message", s("(♂) ", hl)) +r = r prettify("translation", s(genderedTrans[0], tl)) RS +r = r prettify("prompt-message", s("(♀) ", hl)) +r = r prettify("translation", s(genderedTrans[1], tl)) +} +if (wShowTranslationPhonetics) +r = r RS prettify("translation-phonetics", showPhonetics(join(phonetics, " "), tl)) +} +if (wShowPromptMessage || wShowLanguages) +if (r) r = r RS +if (wShowPromptMessage) { +if (hasWordClasses) { +if (r) r = r RS +r = r m("-- display prompt message (Definitions of ...)") +if (isRTL(hl)) +r = r prettify("prompt-message", s(showDefinitionsOf(hl, join(original, " ")))) +else { +split(showDefinitionsOf(hl, "\0%s\0"), group, "\0") +for (i = 1; i <= length(group); i++) { +if (group[i] == "%s") +r = r prettify("prompt-message-original", show(join(original, " "), il)) +else +r = r prettify("prompt-message", group[i]) +} +} +} else if (hasAltTranslations) { +if (r) r = r RS +r = r m("-- display prompt message (Translations of ...)") +if (isRTL(hl)) +r = r prettify("prompt-message", s(showTranslationsOf(hl, join(original, " ")))) +else { +split(showTranslationsOf(hl, "\0%s\0"), group, "\0") +for (i = 1; i <= length(group); i++) { +if (group[i] == "%s") +r = r prettify("prompt-message-original", show(join(original, " "), il)) +else +r = r prettify("prompt-message", group[i]) +} +} +} +} +if (wShowLanguages) { +if (r) r = r RS +r = r m("-- display source language -> target language") +temp = Option["fmt-languages"] +if (!temp) temp = "[ %s -> %t ]" +split(temp, group, /(%s|%S|%t|%T)/) +r = r prettify("languages", group[1]) +if (temp ~ /%s/) +r = r prettify("languages-sl", getDisplay(il)) +if (temp ~ /%S/) +r = r prettify("languages-sl", getName(il)) +r = r prettify("languages", group[2]) +if (temp ~ /%t/) +r = r prettify("languages-tl", getDisplay(tl)) +if (temp ~ /%T/) +r = r prettify("languages-tl", getName(tl)) +r = r prettify("languages", group[3]) +} +if (wShowOriginalDictionary) { +if (exists(oWordClasses)) { +if (r) r = r RS +r = r m("-- display original dictionary (detailed explanations)") +for (i = 0; i < length(oWordClasses); i++) { +r = (i > 0 ? r RS : r) RS prettify("original-dictionary-detailed-word-class", s(oWordClasses[i], hl)) +for (j = 0; j < length(oWords[i]); j++) { +explanation = oWords[i][j][0] +ref = oWords[i][j][1] +example = oWords[i][j][2] +r = (j > 0 ? r RS : r) RS prettify("original-dictionary-detailed-explanation", ins(1, explanation, il)) +if (example) +r = r RS prettify("original-dictionary-detailed-example", ins(2, "- \"" example "\"", il)) +if (ref && isarray(oRefs[ref])) { +temp = prettify("original-dictionary-detailed-synonyms", ins(1, show(showSynonyms(hl), hl) ": ")) +temp = temp prettify("original-dictionary-detailed-synonyms-item", show(oSynonyms[oRefs[ref][1]][oRefs[ref][2]][0], il)) +for (k = 1; k < length(oSynonyms[oRefs[ref][1]][oRefs[ref][2]]); k++) +temp = temp prettify("original-dictionary-detailed-synonyms", ", ")\ +prettify("original-dictionary-detailed-synonyms-item", show(oSynonyms[oRefs[ref][1]][oRefs[ref][2]][k], il)) +r = r RS temp +} +} +} +} +if (exists(oSynonymClasses)) { +r = r RS RS +r = r m("-- display original dictionary (synonyms)") +r = r prettify("original-dictionary-synonyms", s(showSynonyms(hl), hl)) +for (i = 0; i < length(oSynonymClasses); i++) { +r = (i > 0 ? r RS : r) RS prettify("original-dictionary-synonyms-word-class", ins(1, oSynonymClasses[i], hl)) +for (j = 0; j < length(oSynonyms[i]); j++) { +temp = prettify("original-dictionary-synonyms-synonyms", ins(2, "- ")) +temp = temp prettify("original-dictionary-synonyms-synonyms-item", show(oSynonyms[i][j][0], il)) +for (k = 1; k < length(oSynonyms[i][j]); k++) +temp = temp prettify("original-dictionary-synonyms-synonyms", ", ")\ +prettify("original-dictionary-synonyms-synonyms-item", show(oSynonyms[i][j][k], il)) +r = r RS temp +} +} +} +if (exists(oExamples)) { +r = r RS RS +r = r m("-- display original dictionary (examples)") +r = r prettify("original-dictionary-examples", s(showExamples(hl), hl)) +for (i = 0; i < length(oExamples); i++) { +example = oExamples[i] +temp = prettify("original-dictionary-examples-example", ins(1, "- ")) +split(example, group, /(|<\/b>)/) +if (group[3] ~ / [[:punct:].]/) +group[3] = substr(group[3], 2) +if (isRTL(il)) +temp = temp show(group[1] group[2] group[3], il) +else +temp = temp prettify("original-dictionary-examples-example", group[1])\ +prettify("original-dictionary-examples-original", group[2])\ +prettify("original-dictionary-examples-example", group[3]) +r = (i > 0 ? r RS : r) RS temp +} +} +if (exists(oSeeAlso)) { +r = r RS RS +r = r m("-- display original dictionary (see also)") +r = r prettify("original-dictionary-see-also", s(showSeeAlso(hl), hl)) +temp = ins(1, prettify("original-dictionary-see-also-phrases-item", show(oSeeAlso[0], il))) +for (k = 1; k < length(oSeeAlso); k++) +temp = temp prettify("original-dictionary-see-also-phrases", ", ")\ +prettify("original-dictionary-see-also-phrases-item", show(oSeeAlso[k], il)) +r = r RS temp +} +} +if (wShowDictionary) { +if (r) r = r RS +r = r m("-- display dictionary entries") +for (i = 0; i < length(wordClasses); i++) { +r = (i > 0 ? r RS : r) RS prettify("dictionary-word-class", s(wordClasses[i], hl)) +for (j = 0; j < length(words[i]); j++) { +word = words[i][j][0] +article = words[i][j][4] +if (isRTL(il)) +explanation = join(words[i][j][1], ", ") +else { +explanation = prettify("dictionary-explanation-item", words[i][j][1][0]) +for (k = 1; k < length(words[i][j][1]); k++) +explanation = explanation prettify("dictionary-explanation", ", ")\ +prettify("dictionary-explanation-item", words[i][j][1][k]) +} +r = r RS prettify("dictionary-word", ins(1, (article ? "(" article ") " : "") word, tl)) +if (isRTL(il)) +r = r RS prettify("dictionary-explanation-item", ins(2, explanation, il)) +else +r = r RS ins(2, explanation) +} +} +} +if (wShowAlternatives) { +if (r) r = r RS RS +r = r m("-- display alternative translations") +for (i = 0; i < length(altTranslations); i++) { +r = (i > 0 ? r RS : r) prettify("alternatives-original", show(segments[i], il)) +if (isRTL(tl)) { +temp = join(altTranslations[i], ", ") +r = r RS prettify("alternatives-translations-item", ins(1, temp, tl)) +} else { +temp = prettify("alternatives-translations-item", altTranslations[i][0]) +for (j = 1; j < length(altTranslations[i]); j++) +temp = temp prettify("alternatives-translations", ", ")\ +prettify("alternatives-translations-item", altTranslations[i][j]) +r = r RS ins(1, temp) +} +} +} +if (toSpeech) { +if (index(showTranslationsOf(hl, "%s"), "%s") > 2) { +returnPlaylist[0]["text"] = showTranslationsOf(hl) +returnPlaylist[0]["tl"] = _hl +returnPlaylist[1]["text"] = join(original) +returnPlaylist[1]["tl"] = il +} else { +returnPlaylist[0]["text"] = join(original) +returnPlaylist[0]["tl"] = il +returnPlaylist[1]["text"] = showTranslationsOf(hl) +returnPlaylist[1]["tl"] = _hl +} +returnPlaylist[2]["text"] = translation +returnPlaylist[2]["tl"] = _tl +} +} +return r +} +BEGIN { provides("bing") } +function bingInit() { +HttpProtocol = "http://" +HttpHost = "www.bing.com" +HttpPort = 80 +} +function bingSetIG( content, cookie, group, header, isBody, +url, status, location) { +url = HttpPathPrefix "/translator" +header = "GET " url " HTTP/1.1\r\n"\ +"Host: " HttpHost "\r\n"\ +"Connection: close\r\n" +if (Option["user-agent"]) +header = header "User-Agent: " Option["user-agent"] "\r\n" +cookie = NULLSTR +print header |& HttpService +while ((HttpService |& getline) > 0) { +match($0, /Set-Cookie: ([^;]*);/, group) +if (group[1]) { +cookie = cookie (cookie ? "; " : NULLSTR) group[1] +} +if (isBody) +content = content ? content "\n" $0 : $0 +else if (length($0) <= 1) +isBody = 1 +else { +match($0, /^HTTP[^ ]* ([^ ]*)/, group) +if (RSTART) status = group[1] +match($0, /^Location: (.*)/, group) +if (RSTART) location = squeeze(group[1]) +} +l(sprintf("%4s bytes > %s", length($0), length($0) < 1024 ? $0 : "...")) +} +close(HttpService) +if ((status == "301" || status == "302") && location) +content = curl(location) +Cookie = cookie +match(content, /IG:"([^"]+)"/, group) +if (group[1]) { +IG = group[1] +} else { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +exit 1 +} +} +function bingTTSUrl(text, tl, +country, gender, i, group, +header, content, isBody) { +gender = "female" +country = NULLSTR +split(Option["narrator"], group, ",") +for (i in group) { +if (group[i] ~ /^(f(emale)?|w(oman)?)$/) +gender = "female" +else if (group[i] ~ /^m(ale|an)?$/) +gender = "male" +else +country = group[i] +} +if (country) tl = tl "-" country +else if (tl == "ar") tl = tl "-EG" +else if (tl == "da") tl = tl "-DK" +else if (tl == "de") tl = tl "-DE" +else if (tl == "en") tl = tl "-US" +else if (tl == "es") tl = tl "-ES" +else if (tl == "fi") tl = tl "-FI" +else if (tl == "fr") tl = tl "-FR" +else if (tl == "it") tl = tl "-IT" +else if (tl == "ja") tl = tl "-JP" +else if (tl == "ko") tl = tl "-KR" +else if (tl == "nl") tl = tl "-NL" +else if (tl == "nb") tl = tl "-NO" +else if (tl == "pl") tl = tl "-PL" +else if (tl == "pt") tl = tl "-PT" +else if (tl == "ru") tl = tl "-RU" +else if (tl == "sv") tl = tl "-SE" +else if (tl == "yue") ; +else if (tl == "zh") tl = tl "-CN" +header = "GET " "/tspeak?"\ +"&language=" tl "&text=" preprocess(text)\ +"&options=" gender "&format=audio%2Fmp3" " HTTP/1.1\r\n"\ +"Host: " HttpHost "\r\n"\ +"Connection: close\r\n" +if (Option["user-agent"]) +header = header "User-Agent: " Option["user-agent"] "\r\n" +if (Cookie) +header = header "Cookie: " Cookie "\r\n" +content = NULLSTR; isBody = 0 +print header |& HttpService +while ((HttpService |& getline) > 0) { +if (isBody) +content = content ? content "\n" $0 : $0 +else if (length($0) <= 1) +isBody = 1 +} +close(HttpService) +if (!TempFile) +TempFile = getOutput("mktemp") +printf("%s", content) > TempFile +close(TempFile) +return TempFile +} +function bingWebTranslateUrl(uri, sl, tl, hl, _sl, _tl) { +_sl = sl; _tl = tl +if (_sl == "bs") _sl = "bs-Latn" +if (_sl == "zh") _sl = "zh-CHS" +if (_sl == "zh-CN") _sl = "zh-CHS" +if (_sl == "zh-TW") _sl = "zh-CHT" +if (_tl == "bs") _tl = "bs-Latn" +if (_tl == "zh") _tl = "zh-CHS" +if (_tl == "zh-CN") _tl = "zh-CHS" +if (_tl == "zh-TW") _tl = "zh-CHT" +return "https://www.translatetheweb.com/?" "from=" _sl "&to=" _tl "&a=" uri +} +function bingRequestUrl(text, sl, tl, hl) { +return HttpPathPrefix "/translator/api/Dictionary/Lookup?"\ +"from=" sl "&to=" tl "&text=" preprocess(text) +} +function bingPostRequestUrl(text, sl, tl, hl, type) { +if (type == "lookup") +return HttpPathPrefix "/tlookupv3" +else # type == "translate" +return HttpPathPrefix "/ttranslatev3" +} +function bingPostRequestContentType(text, sl, tl, hl, type) { +return "application/x-www-form-urlencoded" +} +function bingPostRequestBody(text, sl, tl, hl, type) { +if (type == "lookup") +return "&text=" quote(text) "&from=" sl "&to=" tl +else # type == "translate" +return "&text=" quote(text) "&fromLang=" sl "&to=" tl +} +function bingTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +r, +content, tokens, ast, dicContent, dicTokens, dicAst, +_sl, _tl, _hl, il, isPhonetic, +translation, phonetics, oPhonetics, +wordClasses, words, wordBackTranslations, +wShowOriginal, wShowOriginalPhonetics, +wShowTranslation, wShowTranslationPhonetics, +wShowLanguages, wShowDictionary, +i, j, k, group, temp, saveSortedIn) { +isPhonetic = match(tl, /^@/) +tl = substr(tl, 1 + isPhonetic) +if (!getCode(tl)) { +w("[WARNING] Unknown target language code: " tl) +} else if (isRTL(tl)) { +if (!FriBidi) +w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.") +} +_sl = getCode(sl); if (!_sl) _sl = sl +_tl = getCode(tl); if (!_tl) _tl = tl +_hl = getCode(hl); if (!_hl) _hl = hl +if (_sl == "auto") _sl = "auto-detect" +if (_sl == "bs") _sl = "bs-Latn" +if (_sl == "zh-CN") _sl = "zh-Hans" +if (_sl == "zh-TW") _sl = "zh-Hant" +if (_tl == "bs") _tl = "bs-Latn" +if (_tl == "zh-CN") _tl = "zh-Hans" +if (_tl == "zh-TW") _tl = "zh-Hant" +content = postResponse(text, _sl, _tl, _hl, "translate") +if (content == "") { +HttpHost = "cn.bing.com" +if (Option["proxy"]) { +HttpPathPrefix = HttpProtocol HttpHost +} else { +HttpService = "/" "inet" "/tcp/0/" HttpHost "/" HttpPort +} +content = postResponse(text, _sl, _tl, _hl, "translate") +} +if (Option["dump"]) +return content +tokenize(tokens, content) +parseJson(ast, tokens) +l(content, "content", 1, 1) +l(tokens, "tokens", 1, 0, 1) +l(ast, "ast") +if (!isarray(ast) || !anything(ast)) { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +ExitCode = 1 +return +} +translation = unparameterize(ast[0 SUBSEP 0 SUBSEP "translations" SUBSEP 0 SUBSEP "text"]) +returnIl[0] = il = _sl == "auto-detect" ? +unparameterize(ast[0 SUBSEP 0 SUBSEP "detectedLanguage" SUBSEP "language"]) : _sl +if (Option["verbose"] < -1) +return il +if (Option["verbose"] < 0) +return getList(il) +wShowTranslationPhonetics = Option["show-translation-phonetics"] +if (wShowTranslationPhonetics) { +split(_tl, group, "-") +phonetics = unparameterize(ast[0 SUBSEP 0 SUBSEP "translations" SUBSEP 0 SUBSEP "transliteration"\ +SUBSEP "text"]) +if (phonetics == translation) phonetics = "" +} +if (!isVerbose) { +r = isPhonetic && phonetics ? +prettify("brief-translation-phonetics", join(phonetics, " ")) : +prettify("brief-translation", s(translation, tl)) +} else { +wShowOriginal = Option["show-original"] +wShowTranslation = Option["show-translation"] +wShowLanguages = Option["show-languages"] +wShowDictionary = Option["show-dictionary"] +wShowOriginalPhonetics = Option["show-original-phonetics"] +if (wShowOriginalPhonetics) { +split(_sl, group, "-") +delete ast +content = postResponse(text, il, il, _hl, "translate") +tokenize(tokens, content) +parseJson(ast, tokens) +oPhonetics = unparameterize(ast[0 SUBSEP 0 SUBSEP "translations" SUBSEP 0\ +SUBSEP "transliteration" SUBSEP "text"]) +if (oPhonetics == text) oPhonetics = "" +} +if (!oPhonetics) wShowOriginalPhonetics = 0 +if (!phonetics) wShowTranslationPhonetics = 0 +if (wShowOriginal) { +if (r) r = r RS RS +r = r m("-- display original text") +r = r prettify("original", s(text, _sl)) +if (wShowOriginalPhonetics) +r = r RS prettify("original-phonetics", showPhonetics(join(oPhonetics, " "), _sl)) +} +if (wShowTranslation) { +if (r) r = r RS RS +r = r m("-- display major translation") +r = r prettify("translation", s(translation, tl)) +if (wShowTranslationPhonetics) +r = r RS prettify("translation-phonetics", showPhonetics(join(phonetics, " "), tl)) +} +if (wShowLanguages) { +if (r) r = r RS RS +r = r m("-- display source language -> target language") +temp = Option["fmt-languages"] +if (!temp) temp = "[ %s -> %t ]" +split(temp, group, /(%s|%S|%t|%T)/) +r = r prettify("languages", group[1]) +if (temp ~ /%s/) +r = r prettify("languages-sl", getDisplay(il)) +if (temp ~ /%S/) +r = r prettify("languages-sl", getName(il)) +r = r prettify("languages", group[2]) +if (temp ~ /%t/) +r = r prettify("languages-tl", getDisplay(tl)) +if (temp ~ /%T/) +r = r prettify("languages-tl", getName(tl)) +r = r prettify("languages", group[3]) +} +if (wShowDictionary) { +dicContent = postResponse(text, il, _tl, _hl, "lookup") +if (dicContent != "") { +tokenize(dicTokens, dicContent) +parseJson(dicAst, dicTokens) +l(dicContent, "dicContent", 1, 1) +l(dicTokens, "dicTokens", 1, 0, 1) +l(dicAst, "dicAst") +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "compareByIndexFields" +for (i in dicAst) { +if (match(i, "^0" SUBSEP "0" SUBSEP "translations" SUBSEP "([[:digit:]]+)" SUBSEP\ +"posTag$", group)) +wordClasses[group[1]] = tolower(literal(dicAst[i])) +} +for (i in dicAst) { +if (match(i, "^0" SUBSEP "0" SUBSEP "translations" SUBSEP "([[:digit:]]+)" SUBSEP\ +"displayTarget$", group)) +words[wordClasses[group[1]]][group[1]] = literal(dicAst[i]) +if (match(i, "^0" SUBSEP "0" SUBSEP "translations" SUBSEP "([[:digit:]]+)" SUBSEP\ +"backTranslations" SUBSEP "([[:digit:]]+)" SUBSEP "displayText$", group)) +wordBackTranslations[wordClasses[group[1]]][group[1]][group[2]] = literal(dicAst[i]) +} +PROCINFO["sorted_in"] = saveSortedIn +if (r) r = r RS +r = r m("-- display dictionary entries") +for (i = 0; i < length(words); i++) { +r = (i > 0 ? r RS : r) RS prettify("dictionary-word-class", s(wordClasses[i], hl)) +for (j in words[wordClasses[i]]) { +r = r RS prettify("dictionary-word", ins(1, words[wordClasses[i]][j], tl)) +if (isRTL(il)) +explanation = join(wordBackTranslations[wordClasses[i]][j], ", ") +else { +explanation = prettify("dictionary-explanation-item", +wordBackTranslations[wordClasses[i]][j][0]) +for (k = 1; k < length(wordBackTranslations[wordClasses[i]][j]); k++) +explanation = explanation prettify("dictionary-explanation", ", ")\ +prettify("dictionary-explanation-item", +wordBackTranslations[wordClasses[i]][j][k]) +} +if (isRTL(il)) +r = r RS prettify("dictionary-explanation-item", ins(2, explanation, il)) +else +r = r RS ins(2, explanation) +} +} +} +} +} +if (toSpeech) { +returnPlaylist[0]["text"] = translation +returnPlaylist[0]["tl"] = _tl +} +return r +} +BEGIN { provides("yandex") } +function genSID( content, group, temp) { +content = curl("http://translate.yandex.com") +match(content, /SID:[[:space:]]*'([^']+)'/, group) +if (group[1]) { +split(group[1], temp, ".") +SID = reverse(temp[1]) "." reverse(temp[2]) "." reverse(temp[3]) +} else { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +exit 1 +} +} +function yandexInit() { +genSID() +YandexWebTranslate = "z5h64q92x9.net" +HttpProtocol = "http://" +HttpHost = "translate.yandex.net" +HttpPort = 80 +} +function yandexRequestUrl(text, sl, tl, hl, group) { +split(sl, group, "-"); sl = group[1] +split(tl, group, "-"); tl = group[1] +return HttpPathPrefix "/api/v1/tr.json/translate?"\ +"id=" SID "-0-0&srv=tr-text"\ +"&text=" preprocess(text) "&lang=" (sl == "auto" ? tl : sl "-" tl) +} +function yandexPostRequestBody(text, sl, tl, hl, type) { +return "text=" quote(text) "&lang=" sl +} +function yandexGetDictionaryResponse(text, sl, tl, hl, content, header, isBody, url) { +split(sl, group, "-"); sl = group[1] +split(tl, group, "-"); tl = group[1] +url = "http://dictionary.yandex.net/dicservice.json/lookupMultiple?"\ +"&text=" preprocess(text) "&dict=" sl "-" tl +content = curl(url) +return assert(content, "[ERROR] Null response.") +} +function yandexTTSUrl(text, tl, +speaker, emotion, i, group) { +speaker = NULLSTR +emotion = NULLSTR +split(Option["narrator"], group, ",") +for (i in group) { +if (group[i] ~ /^(g(ood)?|n(eutral)?|e(vil)?)$/) +emotion = group[i] +else if (group[i] ~ /^(f(emale)?|w(oman)?)$/) +speaker = "alyss" +else if (group[i] ~ /^m(ale|an)?$/) +speaker = "zahar" +else +speaker = group[i] +} +switch (tl) { +case "ar": tl = "ar_AE"; break +case "cs": tl = "cs_CZ"; break +case "da": tl = "da_DK"; break +case "de": tl = "de_DE"; break +case "el": tl = "el_GR"; break +case "en": tl = "en_GB"; break +case "es": tl = "es_ES"; break +case "fi": tl = "fi_FI"; break +case "fr": tl = "fr_FR"; break +case "it": tl = "it_IT"; break +case "nl": tl = "nl_NL"; break +case "no": tl = "no_NO"; break +case "pl": tl = "pl_PL"; break +case "pt": tl = "pt_PT"; break +case "ru": tl = "ru_RU"; break +case "sv": tl = "sv_SE"; break +case "tr": tl = "tr_TR"; break +default: tl = NULLSTR +} +return HttpProtocol "tts.voicetech.yandex.net" "/tts?"\ +"text=" preprocess(text) (tl ? "&lang=" tl : tl)\ +(speaker ? "&speaker=" speaker : speaker)\ +(emotion ? "&emotion=" emotion : emotion)\ +"&format=mp3" "&quality=hi" +} +function yandexWebTranslateUrl(uri, sl, tl, hl) { +gsub(/:\/\//, "/", uri) +return HttpProtocol YandexWebTranslate "/proxy_u/"\ +(sl == "auto" ? tl : sl "-" tl)"/" uri +} +function yandexTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +r, +content, tokens, ast, +_sl, _tl, _hl, il, isPhonetic, +translation, +wShowOriginal, wShowTranslation, wShowLanguages, +wShowDictionary, dicContent, dicTokens, dicAst, +i, syn, mean, +group, temp) { +isPhonetic = match(tl, /^@/) +tl = substr(tl, 1 + isPhonetic) +if (!getCode(tl)) { +w("[WARNING] Unknown target language code: " tl) +} else if (isRTL(tl)) { +if (!FriBidi) +w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.") +} +_sl = getCode(sl); if (!_sl) _sl = sl +_tl = getCode(tl); if (!_tl) _tl = tl +_hl = getCode(hl); if (!_hl) _hl = hl +content = getResponse(text, _sl, _tl, _hl) +if (Option["dump"]) +return content +tokenize(tokens, content) +parseJson(ast, tokens) +l(content, "content", 1, 1) +l(tokens, "tokens", 1, 0, 1) +l(ast, "ast") +if (!isarray(ast) || !anything(ast)) { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +ExitCode = 1 +return +} +if (ast[0 SUBSEP "code"] != "200") { +e("[ERROR] " unparameterize(ast[0 SUBSEP "message"])) +ExitCode = 1 +return +} +translation = unparameterize(ast[0 SUBSEP "text" SUBSEP 0]) +wShowTranslationPhonetics = Option["show-translation-phonetics"] +if (wShowTranslationPhonetics && _tl != "emj") { +split(_tl, group, "-") +data = yandexPostRequestBody(translation, group[1], group[1], _hl, "translit") +content = curlPost("https://translate.yandex.net/translit/translit", data) +phonetics = (content ~ /not supported$/) ? "" : unparameterize(content) +} +split(unparameterize(ast[0 SUBSEP "lang"]), group, "-") +returnIl[0] = il = group[1] +if (Option["verbose"] < -1) +return il +else if (Option["verbose"] < 0) +return getList(il) +if (!isVerbose) { +r = isPhonetic && phonetics ? +prettify("brief-translation-phonetics", join(phonetics, " ")) : +prettify("brief-translation", s(translation, tl)) +} else { +wShowOriginal = Option["show-original"] +wShowTranslation = Option["show-translation"] +wShowLanguages = Option["show-languages"] +wShowDictionary = Option["show-dictionary"] +wShowOriginalPhonetics = Option["show-original-phonetics"] +if (wShowTranslationPhonetics && il != "emj") { +split(il, group, "-") +data = yandexPostRequestBody(text, group[1], group[1], _hl, "translit") +content = curlPost("https://translate.yandex.net/translit/translit", data) +oPhonetics = (content ~ /not supported$/) ? "" : unparameterize(content) +} +if (!oPhonetics) wShowOriginalPhonetics = 0 +if (!phonetics) wShowTranslationPhonetics = 0 +if (wShowOriginal) { +if (r) r = r RS RS +r = r m("-- display original text & phonetics") +r = r prettify("original", s(text, il)) +if (wShowOriginalPhonetics) +r = r RS prettify("original-phonetics", showPhonetics(join(oPhonetics, " "), il)) +} +if (wShowTranslation) { +if (r) r = r RS RS +r = r m("-- display major translation") +r = r prettify("translation", s(translation, tl)) +if (wShowTranslationPhonetics) +r = r RS prettify("translation-phonetics", showPhonetics(join(phonetics, " "), tl)) +} +if (wShowLanguages) { +if (r) r = r RS RS +r = r m("-- display source language -> target language") +temp = Option["fmt-languages"] +if (!temp) temp = "[ %s -> %t ]" +split(temp, group, /(%s|%S|%t|%T)/) +r = r prettify("languages", group[1]) +if (temp ~ /%s/) +r = r prettify("languages-sl", getDisplay(il)) +if (temp ~ /%S/) +r = r prettify("languages-sl", getName(il)) +r = r prettify("languages", group[2]) +if (temp ~ /%t/) +r = r prettify("languages-tl", getDisplay(tl)) +if (temp ~ /%T/) +r = r prettify("languages-tl", getName(tl)) +r = r prettify("languages", group[3]) +} +if (wShowDictionary && false) { +dicContent = yandexGetDictionaryResponse(text, il, _tl, _hl) +tokenize(dicTokens, dicContent) +parseJson(dicAst, dicTokens) +if (anything(dicAst)) { +if (r) r = r RS +r = r m("-- display dictionary entries") +saveSortedIn = PROCINFO["sorted_in"] +PROCINFO["sorted_in"] = "@ind_num_asc" +for (i in dicAst) { +if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\ +"pos$") { +r = r RS prettify("dictionary-word-class", s((literal(dicAst[i])), hl)) +syn = mean = "" +} +if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\ +"tr" SUBSEP "[[:digit:]]+" SUBSEP\ +"mean" SUBSEP "[[:digit:]]+" SUBSEP "text") { +if (mean) { +mean = mean prettify("dictionary-explanation", ", ")\ +prettify("dictionary-explanation-item", s((literal(dicAst[i])), sl)) +} else { +mean = prettify("dictionary-explanation-item", s((literal(dicAst[i])), sl)) +} +} +if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\ +"tr" SUBSEP "[[:digit:]]+" SUBSEP\ +"syn" SUBSEP "[[:digit:]]+" SUBSEP "text") { +if (syn) { +syn = syn prettify("dictionary-explanation", ", ")\ +prettify("dictionary-word", s((literal(dicAst[i])), il)) +} else { +syn = prettify("dictionary-word", s((literal(dicAst[i])), il)) +} +} +if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\ +"tr" SUBSEP "[[:digit:]]+" SUBSEP "text$") { +text = prettify("dictionary-word", s((literal(dicAst[i])), il)) +if (syn) { +r = r RS ins(1, text prettify("dictionary-explanation", ", ") syn) +} else { +r = r RS ins(1, text) +} +r = r RS ins(2, mean) +syn = mean = "" +} +} +PROCINFO["sorted_in"] = saveSortedIn +} +} +} +if (toSpeech) { +returnPlaylist[0]["text"] = translation +returnPlaylist[0]["tl"] = _tl +} +return r +} +BEGIN { provides("apertium") } +function apertiumInit() { +HttpProtocol = "http://" +HttpHost = "www.apertium.org" +HttpPort = 80 +} +function apertiumRequestUrl(text, sl, tl, hl) { +return HttpPathPrefix "/apy/translate?"\ +"langpair=" preprocess(sl) "|" preprocess(tl)\ +"&q=" preprocess(text) +} +function apertiumTTSUrl(text, tl, narrator) { +} +function apertiumWebTranslateUrl(uri, sl, tl, hl) { +} +function apertiumTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +r, +content, tokens, ast, +_sl, _tl, _hl, il, +translation, +wShowOriginal, wShowTranslation, wShowLanguages, +group, temp) { +if (!getCode(tl)) { +w("[WARNING] Unknown target language code: " tl) +} else if (isRTL(tl)) { +if (!FriBidi) +w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.") +} +_sl = getCode(sl); if (!_sl) _sl = sl +_tl = getCode(tl); if (!_tl) _tl = tl +_hl = getCode(hl); if (!_hl) _hl = hl +_sl = "auto" == _sl ? "en" : _sl +content = getResponse(text, _sl, _tl, _hl) +if (Option["dump"]) +return content +tokenize(tokens, content) +parseJson(ast, tokens) +l(content, "content", 1, 1) +l(tokens, "tokens", 1, 0, 1) +l(ast, "ast") +if (!isarray(ast) || !anything(ast)) { +e("[ERROR] Oops! Something went wrong and I can't translate it for you :(") +ExitCode = 1 +return +} +translation = uprintf(unquote(unparameterize(ast[0 SUBSEP "responseData" SUBSEP "translatedText"]))) +returnIl[0] = il = _sl +if (Option["verbose"] < -1) +return il +else if (Option["verbose"] < 0) +return getList(il) +if (!isVerbose) { +r = translation +} else { +wShowOriginal = Option["show-original"] +wShowTranslation = Option["show-translation"] +wShowLanguages = Option["show-languages"] +if (wShowOriginal) { +if (r) r = r RS RS +r = r m("-- display original text") +r = r prettify("original", s(text, il)) +} +if (wShowTranslation) { +if (r) r = r RS RS +r = r m("-- display major translation") +r = r prettify("translation", s(translation, tl)) +} +if (wShowLanguages) { +if (r) r = r RS RS +r = r m("-- display source language -> target language") +temp = Option["fmt-languages"] +if (!temp) temp = "[ %s -> %t ]" +split(temp, group, /(%s|%S|%t|%T)/) +r = r prettify("languages", group[1]) +if (temp ~ /%s/) +r = r prettify("languages-sl", getDisplay(il)) +if (temp ~ /%S/) +r = r prettify("languages-sl", getName(il)) +r = r prettify("languages", group[2]) +if (temp ~ /%t/) +r = r prettify("languages-tl", getDisplay(tl)) +if (temp ~ /%T/) +r = r prettify("languages-tl", getName(tl)) +r = r prettify("languages", group[3]) +} +} +if (toSpeech) { +returnPlaylist[0]["text"] = translation +returnPlaylist[0]["tl"] = _tl +} +return r +} +BEGIN { +provides("spell") +provides("aspell") +provides("hunspell") +} +function spellInit() { +Ispell = detectProgram("aspell", "--version") ? "aspell" : +(detectProgram("hunspell", "--version") ? "hunspell" : "") +if (!Ispell) { +e("[ERROR] Spell checker (aspell or hunspell) not found.") +exit 1 +} +} +function aspellInit() { +if (!(Ispell = detectProgram("aspell", "--version") ? "aspell" : "")) { +e("[ERROR] Spell checker (aspell) not found.") +exit 1 +} +} +function hunspellInit() { +if (!(Ispell = detectProgram("hunspell", "--version") ? "hunspell" : "")) { +e("[ERROR] Spell checker (hunspell) not found.") +exit 1 +} +} +function spellTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl, +args, i, j, r, line, group, word, sug) { +args = " -a" (sl != "auto" ? " -d " sl : "") +if (system("echo" PIPE Ispell args SUPOUT SUPERR)) { +e("[ERROR] No dictionary for language: " sl) +exit 1 +} +i = 1 +r = "" +while ((("echo " parameterize(text) PIPE Ispell args SUPERR) |& getline line) > 0) { +match(line, +/^& (.*) [[:digit:]]+ [[:digit:]]+: ([^,]+)(, ([^,]+))?(, ([^,]+))?/, +group) +if (RSTART) { +ExitCode = 1 +word = group[1] +sug = "[" group[2] +if (group[4]) sug = sug "|" group[4] +if (group[6]) sug = sug "|" group[6] +sug = sug "]" +j = i + index(substr(text, i), word) - 1 +r = r substr(text, i, j - i) +r = r ansi("bold", ansi("red", word)) ansi("yellow", sug) +i = j + length(word) +} +} +r = r substr(text, i) +return r +} +function aspellTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl) { +return spellTranslate(text, sl, tl, hl) +} +function hunspellTranslate(text, sl, tl, hl, +isVerbose, toSpeech, returnPlaylist, returnIl) { +return spellTranslate(text, sl, tl, hl) +} +function spellTTSUrl(text, tl, narrator) { +e("[ERROR] Spell checker does not support TTS.") +ExitCode = 1 +return +} +function aspellTTSUrl(text, tl, narrator) { +return spellTTSUrl(text, tl) +} +function hunspellTTSUrl(text, tl, narrator) { +return spellTTSUrl(text, tl) +} +function spellWebTranslateUrl(uri, sl, tl, hl) { +e("[ERROR] Spell checker does not support web translation.") +ExitCode = 1 +return +} +function aspellWebTranslateUrl(uri, sl, tl, hl) { +return spellWebTranslateUrl(uri, sl, tl, hl) +} +function hunspellWebTranslateUrl(uri, sl, tl, hl) { +return spellWebTranslateUrl(uri, sl, tl, hl) +} +function loadOptions(script, i, j, tokens, name, value) { +tokenize(tokens, script) +for (i in tokens) { +if (tokens[i] ~ /^:/) { +name = substr(tokens[i], 2) +value = tokens[i + 1] +if (value ~ /^[+-]?((0|[1-9][0-9]*)|[.][0-9]*|(0|[1-9][0-9]*)[.][0-9]*)([Ee][+-]?[0-9]+)?$/) { +delete Option[name] +Option[name] = value +} else if (value == "false" || value == "true") { +delete Option[name] +Option[name] = yn(value) +} else if (value ~ /^".*"$/) { +delete Option[name] +Option[name] = literal(value) +} else if (value == "[") { +delete Option[name] +for (j = 1; tokens[i + j + 1] && tokens[i + j + 1] != "]"; j++) { +if (tokens[i + j + 1] ~ /^".*"$/) +Option[name][j] = literal(tokens[i + j + 1]) +else { +e("[ERROR] Malformed configuration.") +return +} +} +} else { +e("[ERROR] Malformed configuration.") +return +} +} +} +} +function upgrade( i, newVersion, registry, tokens) { +RegistryIndex = "https://raw.githubusercontent.com/soimort/translate-shell/registry/index.trans" +registry = curl(RegistryIndex) +if (!registry) { +e("[ERROR] Failed to check for upgrade.") +ExitCode = 1 +return +} +tokenize(tokens, registry) +for (i in tokens) +if (tokens[i] == ":translate-shell") +newVersion = literal(tokens[i + 1]) +if (newerVersion(newVersion, Version)) { +w("Current version: \t" Version) +w("New version available: \t" newVersion) +w("Download from: \t" "https://www.soimort.org/translate-shell/trans") +} else { +w("Current version: \t" Version) +w("Already up-to-date.") +} +} +function welcome() { +if (Option["fmt-welcome-message"]) +print prettify("welcome-message", Option["fmt-welcome-message"]) > STDERR +if (Option["fmt-welcome-submessage"]) +print prettify("welcome-submessage", Option["fmt-welcome-submessage"]) > STDERR +} +function prompt( i, p, temp) { +p = Option["fmt-prompt"] +if (p ~ /%a/) gsub(/%a/, strftime("%a"), p) +if (p ~ /%A/) gsub(/%A/, strftime("%A"), p) +if (p ~ /%b/) gsub(/%b/, strftime("%b"), p) +if (p ~ /%B/) gsub(/%B/, strftime("%B"), p) +if (p ~ /%c/) gsub(/%c/, strftime("%c"), p) +if (p ~ /%C/) gsub(/%C/, strftime("%C"), p) +if (p ~ /%d/) gsub(/%d/, strftime("%d"), p) +if (p ~ /%D/) gsub(/%D/, strftime("%D"), p) +if (p ~ /%e/) gsub(/%e/, strftime("%e"), p) +if (p ~ /%F/) gsub(/%F/, strftime("%F"), p) +if (p ~ /%g/) gsub(/%g/, strftime("%g"), p) +if (p ~ /%G/) gsub(/%G/, strftime("%G"), p) +if (p ~ /%h/) gsub(/%h/, strftime("%h"), p) +if (p ~ /%H/) gsub(/%H/, strftime("%H"), p) +if (p ~ /%I/) gsub(/%I/, strftime("%I"), p) +if (p ~ /%j/) gsub(/%j/, strftime("%j"), p) +if (p ~ /%m/) gsub(/%m/, strftime("%m"), p) +if (p ~ /%M/) gsub(/%M/, strftime("%M"), p) +if (p ~ /%n/) gsub(/%n/, strftime("%n"), p) +if (p ~ /%p/) gsub(/%p/, strftime("%p"), p) +if (p ~ /%r/) gsub(/%r/, strftime("%r"), p) +if (p ~ /%R/) gsub(/%R/, strftime("%R"), p) +if (p ~ /%u/) gsub(/%u/, strftime("%u"), p) +if (p ~ /%U/) gsub(/%U/, strftime("%U"), p) +if (p ~ /%V/) gsub(/%V/, strftime("%V"), p) +if (p ~ /%w/) gsub(/%w/, strftime("%w"), p) +if (p ~ /%W/) gsub(/%W/, strftime("%W"), p) +if (p ~ /%x/) gsub(/%x/, strftime("%x"), p) +if (p ~ /%X/) gsub(/%X/, strftime("%X"), p) +if (p ~ /%y/) gsub(/%y/, strftime("%y"), p) +if (p ~ /%Y/) gsub(/%Y/, strftime("%Y"), p) +if (p ~ /%z/) gsub(/%z/, strftime("%z"), p) +if (p ~ /%Z/) gsub(/%Z/, strftime("%Z"), p) +if (p ~ /%_/) +gsub(/%_/, showTranslationsOf(Option["hl"]), p) +if (p ~ /%l/) +gsub(/%l/, getDisplay(Option["hl"]), p) +if (p ~ /%L/) +gsub(/%L/, getName(Option["hl"]), p) +if (p ~ /%S/) { +temp = getName(Option["sls"][1]) +for (i = 2; i <= length(Option["sls"]); i++) +temp = temp "+" getName(Option["sls"][i]) +gsub(/%S/, temp, p) +} +if (p ~ /%t/) { +temp = getDisplay(Option["tl"][1]) +for (i = 2; i <= length(Option["tl"]); i++) +temp = temp "+" getDisplay(Option["tl"][i]) +gsub(/%t/, temp, p) +} +if (p ~ /%T/) { +temp = getName(Option["tl"][1]) +for (i = 2; i <= length(Option["tl"]); i++) +temp = temp "+" getName(Option["tl"][i]) +gsub(/%T/, temp, p) +} +if (p ~ /%,/) { +temp = getDisplay(Option["tl"][1]) +for (i = 2; i <= length(Option["tl"]); i++) +temp = temp "," getDisplay(Option["tl"][i]) +gsub(/%,/, temp, p) +} +if (p ~ /% STDERR +} +function repl(line, command, group, name, i, value, words) { +split(line, words, " ") +command = words[1] +if (command ~ /^:(q|quit)$/) { +exit +} else if (command ~ /^:set$/) { +name = words[2] +value = words[3] +Option[name] = value +} else if (command ~ /^:show$/) { +name = words[2] +print prettify("welcome-submessage", toString(Option[name], 1, 0, 1)) +} else if (command ~ /^:engine$/) { +value = words[2] +Option["engine"] = value +initHttpService() +} else { +match(command, /^[{(\[]?((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)?(:|=)((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)[})\]]?$/, group) +if (RSTART) { +if (group[1]) { +split(group[1], Option["sls"], "+") +Option["sl"] = Option["sls"][1] +} +if (group[7]) split(group[7], Option["tl"], "+") +line = words[2] +for (i = 3; i <= length(words); i++) +line = line " " words[i] +} +if (line) { +translates(line) +if (Option["verbose"]) printf RS +} +} +prompt() +} +function init() { +initGawk() +initBiDiTerm() +initBiDi() +initLocale() +initLocaleAlias() +initUserLang() +RS = "\n" +ExitCode = 0 +Option["debug"] = 0 +Option["engine"] = "google" +Option["verbose"] = 1 +Option["show-original"] = 1 +Option["show-original-phonetics"] = 1 +Option["show-translation"] = 1 +Option["show-translation-phonetics"] = 1 +Option["show-prompt-message"] = 1 +Option["show-languages"] = 1 +Option["show-original-dictionary"] = 0 +Option["show-dictionary"] = 1 +Option["show-alternatives"] = 1 +Option["width"] = ENVIRON["COLUMNS"] ? ENVIRON["COLUMNS"] - 2 : 0 +Option["indent"] = 4 +Option["no-ansi"] = 0 +Option["no-autocorrect"] = 0 +Option["no-bidi"] = 0 +Option["force-bidi"] = 0 +Option["no-warn"] = 0 +Option["theme"] = "default" +Option["dump"] = 0 +Option["play"] = 0 +Option["narrator"] = "female" +Option["player"] = ENVIRON["PLAYER"] +Option["no-translate"] = 0 +Option["download-audio"] = 0 +Option["download-audio-as"] = NULLSTR +Option["view"] = 0 +Option["pager"] = ENVIRON["PAGER"] +Option["browser"] = ENVIRON["BROWSER"] +Option["proxy"] = ENVIRON["HTTP_PROXY"] ? ENVIRON["HTTP_PROXY"] : ENVIRON["http_proxy"] +Option["user-agent"] = ENVIRON["USER_AGENT"] ? ENVIRON["USER_AGENT"] : +"Mozilla/5.0 (X11; Linux x86_64) "\ +"AppleWebKit/602.1 (KHTML, like Gecko) Version/8.0 "\ +"Safari/602.1 Epiphany/3.18.2" +Option["ip-version"] = 0 +Option["no-rlwrap"] = 0 +Option["interactive"] = 0 +Option["emacs"] = 0 +Option["input"] = NULLSTR +Option["output"] = STDOUT +Option["hl"] = ENVIRON["HOME_LANG"] ? ENVIRON["HOME_LANG"] : UserLang +Option["sl"] = ENVIRON["SOURCE_LANG"] ? ENVIRON["SOURCE_LANG"] : "auto" +Option["sls"][1] = Option["sl"] +Option["tl"][1] = ENVIRON["TARGET_LANG"] ? ENVIRON["TARGET_LANG"] : UserLang +Option["join-sentence"] = 0 +} +function initScript( file, line, script, temp) { +file = ".trans" +if (!fileExists(file)) { +file = ENVIRON["HOME"] "/.translate-shell/init.trans" +if (!fileExists(file)) { +file = ENVIRON["XDG_CONFIG_HOME"] "/translate-shell/init.trans" +if (!fileExists(file)) { +file = ENVIRON["HOME"] "/.config/translate-shell/init.trans" +if (!fileExists(file)) { +file = "/etc/translate-shell" +if (!fileExists(file)) return +} +} +} +} +InitScript = file +script = NULLSTR +while (getline line < InitScript) +script = script "\n" line +loadOptions(script) +if (!isarray(Option["tl"])) { +temp = Option["tl"] +delete Option["tl"] +Option["tl"][1] = temp +} +} +function initMisc( command, group, temp) { +initHttpService() +if (!Option["width"] && detectProgram("tput", "-V")) { +command = "tput cols" SUPERR +command | getline temp +close(command) +Option["width"] = temp > 5 ? temp - 2 : 64 +} +if (Option["no-ansi"]) +delete AnsiCode +if (Option["no-bidi"] || BiDiTerm == "mlterm") +BiDi = BiDiNoPad = NULLSTR +else if (!Option["force-bidi"] && BiDiTerm == "konsole") { +BiDiNoPad = NULLSTR +BiDi = "sed \"s/'/\\\\\\'/\" | xargs -0 printf '%%%ss'" +} +initLocaleDisplay() +if (Option["no-warn"]) +STDERR = "/dev/null" +if (Option["play"]) { +if (!Option["player"]) { +initAudioPlayer() +Option["player"] = AudioPlayer ? AudioPlayer : Option["player"] +if (!Option["player"]) +initSpeechSynthesizer() +} +if (!Option["player"] && !SpeechSynthesizer) { +w("[WARNING] No available audio player or speech synthesizer.") +Option["play"] = 0 +} +} +if (Option["view"]) { +if (!Option["pager"]) { +initPager() +Option["pager"] = Pager +} +if (!Option["pager"]) { +w("[WARNING] No available terminal pager.") +Option["view"] = 0 +} +} +if (!Option["browser"]) { +Platform = detectProgram("uname", "-s", 1) +Option["browser"] = Platform == "Darwin" ? "open" : "xdg-open" +} +} +BEGIN { +init() +if (!(belongsTo("-no-init", ARGV) || belongsTo("--no-init", ARGV))) +initScript() +pos = 0 +noargc = 0 +while (ARGV[++pos]) { +match(ARGV[pos], /^--?(V|vers(i(on?)?)?)$/) +if (RSTART) { +InfoOnly = "version" +continue +} +match(ARGV[pos], /^--?(H|h(e(lp?)?)?)$/) +if (RSTART) { +InfoOnly = "help" +continue +} +match(ARGV[pos], /^--?(M|m(a(n(u(al?)?)?)?)?)$/) +if (RSTART) { +InfoOnly = "manual" +continue +} +match(ARGV[pos], /^--?(T|ref(e(r(e(n(ce?)?)?)?)?)?)$/) +if (RSTART) { +InfoOnly = "reference" +continue +} +match(ARGV[pos], /^--?r$/) +if (RSTART) { +w("[WARNING] Option '-r' has been deprecated since version 0.9.\n"\ +" Use option '-T' or '-reference' instead.") +exit 1 +} +match(ARGV[pos], /^--?(R|reference-e(n(g(l(i(sh?)?)?)?)?)?)$/) +if (RSTART) { +InfoOnly = "reference-english" +continue +} +match(ARGV[pos], /^--?(L|list)(=(.*)?)?$/, group) +if (RSTART) { +InfoOnly = "list" +if (group[2]) { +if (group[3]) split(group[3], Option["tl"], "+") +} else +split(ARGV[++pos], Option["tl"], "+") +continue +} +match(ARGV[pos], /^--?(S|list-e(n(g(i(n(es?)?)?)?)?)?)$/) +if (RSTART) { +InfoOnly = "list-engines" +continue +} +match(ARGV[pos], /^--?(U|upgrade)$/) +if (RSTART) { +InfoOnly = "upgrade" +continue +} +match(ARGV[pos], /^--?(N|nothing)$/) +if (RSTART) { +InfoOnly = "nothing" +continue +} +match(ARGV[pos], /^--?(e|engine)(=(.*)?)?$/, group) +if (RSTART) { +Option["engine"] = group[2] ? +(group[3] ? group[3] : Option["engine"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^\/(.*)$/, group) +if (RSTART) { +Option["engine"] = group[1] +continue +} +match(ARGV[pos], /^--?verbose$/) +if (RSTART) { +Option["verbose"] = 1 +continue +} +match(ARGV[pos], /^--?b(r(i(ef?)?)?)?$/) +if (RSTART) { +Option["verbose"] = 0 +continue +} +match(ARGV[pos], /^--?d(i(c(t(i(o(n(a(ry?)?)?)?)?)?)?)?)?$/) +if (RSTART) { +Option["show-original-dictionary"] = 1 +Option["show-dictionary"] = 0 +Option["show-alternatives"] = 0 +continue +} +match(ARGV[pos], /^--?id(e(n(t(i(fy?)?)?)?)?)?$/) +if (RSTART) { +Option["verbose"] = Option["verbose"] - 2 +continue +} +match(ARGV[pos], /^--?show-original(=(.*)?)?$/, group) +if (RSTART) { +Option["show-original"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-original-phonetics(=(.*)?)?$/, group) +if (RSTART) { +Option["show-original-phonetics"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-translation(=(.*)?)?$/, group) +if (RSTART) { +Option["show-translation"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-translation-phonetics(=(.*)?)?$/, group) +if (RSTART) { +Option["show-translation-phonetics"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-prompt-message(=(.*)?)?$/, group) +if (RSTART) { +Option["show-prompt-message"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-languages(=(.*)?)?$/, group) +if (RSTART) { +Option["show-languages"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-original-dictionary(=(.*)?)?$/, group) +if (RSTART) { +Option["show-original-dictionary"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-dictionary(=(.*)?)?$/, group) +if (RSTART) { +Option["show-dictionary"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?show-alternatives(=(.*)?)?$/, group) +if (RSTART) { +Option["show-alternatives"] = yn(group[1] ? group[2] : ARGV[++pos]) +continue +} +match(ARGV[pos], /^--?w(i(d(th?)?)?)?(=(.*)?)?$/, group) +if (RSTART) { +Option["width"] = group[4] ? +(group[5] ? group[5] : Option["width"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?indent(=(.*)?)?$/, group) +if (RSTART) { +Option["indent"] = group[1] ? +(group[2] ? group[2] : Option["indent"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?theme(=(.*)?)?$/, group) +if (RSTART) { +Option["theme"] = group[1] ? +(group[2] ? group[2] : Option["theme"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?no-theme$/) +if (RSTART) { +Option["theme"] = NULLSTR +continue +} +match(ARGV[pos], /^--?no-ansi$/) +if (RSTART) { +Option["no-ansi"] = 1 +continue +} +match(ARGV[pos], /^--?no-auto(correct)?$/) +if (RSTART) { +Option["no-autocorrect"] = 1 +continue +} +match(ARGV[pos], /^--?no-bidi/) +if (RSTART) { +Option["no-bidi"] = 1 +continue +} +match(ARGV[pos], /^--?bidi/) +if (RSTART) { +Option["force-bidi"] = 1 +continue +} +match(ARGV[pos], /^--?no-warn/) +if (RSTART) { +Option["no-warn"] = 1 +continue +} +match(ARGV[pos], /^--?dump/) +if (RSTART) { +Option["dump"] = 1 +continue +} +match(ARGV[pos], /^--?p(l(ay?)?)?$/) +if (RSTART) { +Option["play"] = 1 +continue +} +match(ARGV[pos], /^--?sp(e(ak?)?)?$/) +if (RSTART) { +Option["play"] = 2 +continue +} +match(ARGV[pos], /^--?(n|narrator)(=(.*)?)?$/, group) +if (RSTART) { +if (!Option["play"]) Option["play"] = 1 +Option["narrator"] = group[2] ? +(group[3] ? group[3] : Option["narrator"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?player(=(.*)?)?$/, group) +if (RSTART) { +if (!Option["play"]) Option["play"] = 1 +Option["player"] = group[1] ? +(group[2] ? group[2] : Option["player"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?no-play$/) +if (RSTART) { +Option["play"] = 0 +continue +} +match(ARGV[pos], /^--?no-tran(s(l(a(te?)?)?)?)?$/) +if (RSTART) { +Option["no-translate"] = 1 +continue +} +match(ARGV[pos], /^--?download-a(u(d(io?)?)?)?$/) +if (RSTART) { +Option["download-audio"] = 1 +continue +} +match(ARGV[pos], /^--?download-audio-as(=(.*)?)?$/, group) +if (RSTART) { +if (!Option["download-audio"]) Option["download-audio"] = 1 +Option["download-audio-as"] = group[1] ? +(group[2] ? group[2] : Option["download-audio-as"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?v(i(ew?)?)?$/) +if (RSTART) { +Option["view"] = 1 +continue +} +match(ARGV[pos], /^--?pager(=(.*)?)?$/, group) +if (RSTART) { +Option["view"] = 1 +Option["pager"] = group[1] ? +(group[2] ? group[2] : Option["pager"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?no-(view|pager)$/) +if (RSTART) { +Option["view"] = 0 +continue +} +match(ARGV[pos], /^--?browser(=(.*)?)?$/, group) +if (RSTART) { +Option["browser"] = group[1] ? +(group[2] ? group[2] : Option["browser"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?no-browser$/) +if (RSTART) { +Option["browser"] = NONE +continue +} +match(ARGV[pos], /^--?(x|proxy)(=(.*)?)?$/, group) +if (RSTART) { +Option["proxy"] = group[2] ? +(group[3] ? group[3] : Option["proxy"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?(u|user-agent)(=(.*)?)?$/, group) +if (RSTART) { +Option["user-agent"] = group[2] ? +(group[3] ? group[3] : Option["user-agent"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?(4|ipv4|inet4-only)$/) +if (RSTART) { +Option["ip-version"] = 4 +continue +} +match(ARGV[pos], /^--?(6|ipv6|inet6-only)$/) +if (RSTART) { +Option["ip-version"] = 6 +continue +} +match(ARGV[pos], /^--?(I|int(e(r(a(c(t(i(ve?)?)?)?)?)?)?)?|shell)$/) +if (RSTART) { +Option["interactive"] = 1 +continue +} +match(ARGV[pos], /^--?(E|emacs)$/) +if (RSTART) { +Option["emacs"] = 1 +continue +} +match(ARGV[pos], /^--?no-rlwrap$/) +if (RSTART) { +Option["no-rlwrap"] = 1 +continue +} +match(ARGV[pos], /^--?prompt(=(.*)?)?$/, group) +if (RSTART) { +w("[ERROR] Option '-prompt' has been deprecated since version 0.9.\n"\ +" Use configuration variable 'fmt-prompt' instead.") +exit 1 +} +match(ARGV[pos], /^--?prompt-color(=(.*)?)?$/, group) +if (RSTART) { +w("[ERROR] Option '-prompt-color' has been deprecated since version 0.9.\n"\ +" Use configuration variable 'sgr-prompt' instead.") +exit 1 +} +match(ARGV[pos], /^--?i(n(p(ut?)?)?)?(=(.*)?)?$/, group) +if (RSTART) { +Option["input"] = group[4] ? +(group[5] ? group[5] : Option["input"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?o(u(t(p(ut?)?)?)?)?(=(.*)?)?$/, group) +if (RSTART) { +Option["output"] = group[5] ? +(group[6] ? group[6] : Option["output"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?(l(a(ng?)?)?|hl)(=(.*)?)?$/, group) +if (RSTART) { +Option["hl"] = group[4] ? +(group[5] ? group[5] : Option["hl"]) : +ARGV[++pos] +continue +} +match(ARGV[pos], /^--?(s(o(u(r(ce?)?)?)?|l)?|f|from)(=(.*)?)?$/, group) +if (RSTART) { +if (group[6]) { +if (group[7]) split(group[7], Option["sls"], "+") +} else +split(ARGV[++pos], Option["sls"], "+") +Option["sl"] = Option["sls"][1] +continue +} +match(ARGV[pos], /^--?t(a(r(g(et?)?)?)?|l|o)?(=(.*)?)?$/, group) +if (RSTART) { +if (group[5]) { +if (group[6]) split(group[6], Option["tl"], "+") +} else +split(ARGV[++pos], Option["tl"], "+") +continue +} +match(ARGV[pos], /^[{(\[]?((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)?(:|=)((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)[})\]]?$/, group) +if (RSTART) { +if (group[1]) { +split(group[1], Option["sls"], "+") +Option["sl"] = Option["sls"][1] +} +if (group[7]) split(group[7], Option["tl"], "+") +continue +} +match(ARGV[pos], /^--?j(o(i(n(-(s(e(n(t(e(n(ce?)?)?)?)?)?)?)?)?)?)?)?$/) +if (RSTART) { +Option["join-sentence"] = 1 +continue +} +match(ARGV[pos], /^--?(D|debug)$/) +if (RSTART) { +Option["debug"] = 1 +continue +} +match(ARGV[pos], /^--?no-init/) +if (RSTART) continue +match(ARGV[pos], /^-(-?no-op)?$/) +if (RSTART) continue +match(ARGV[pos], /^--$/) +if (RSTART) { +++pos +break +} +noargv[noargc++] = ARGV[pos] +} +if (Option["interactive"] && !Option["no-rlwrap"]) +rlwrapMe() +else if (Option["emacs"] && !Option["interactive"] && !Option["no-rlwrap"]) +if (emacsMe()) +Option["interactive"] = 1 +initMisc() +switch (InfoOnly) { +case "version": +print getVersion() +exit ExitCode +case "help": +print getHelp() +exit ExitCode +case "manual": +showMan() +exit ExitCode +case "reference": +print getReference("endonym") +exit ExitCode +case "reference-english": +print getReference("name") +exit ExitCode +case "list": +print getList(Option["tl"]) +exit ExitCode +case "list-engines": +for (translator in Translator) +print (Option["engine"] == translator ? "* " : " ") translator +exit ExitCode +case "upgrade": +upgrade() +exit ExitCode +case "nothing": +exit ExitCode +} +setTheme() +if (Option["interactive"]) +welcome() +if (pos < ARGC) +for (i = pos; i < ARGC; i++) +noargv[noargc++] = ARGV[i] +if (noargc > 1 && Option["join-sentence"]) { +noargv[0] = join(noargv, " ") +noargc = 1 +} +if (noargc) { +for (i = 0; i < noargc; i++) { +if (Option["verbose"] && i > pos) +p(prettify("source-seperator", replicate(Option["chr-source-seperator"], Option["width"]))) +translates(noargv[i], 1) +} +} else { +if (!Option["input"]) Option["input"] = STDIN +} +if (Option["input"]) +translateMain() +exit ExitCode +} +EOF +read -r -d '' TRANS_MANPAGE << 'EOF' +.\" Automatically generated by Pandoc 2.5 +.\" +.TH "TRANS" "1" "2019\-07\-25" "0.9.6.11" "" +.hy +.SH NAME +.PP +trans \- Command\-line translator using Google Translate, Bing +Translator, Yandex.Translate, etc. +.SH SYNOPSIS +.PP +\f[B]trans\f[R] [\f[I]OPTIONS\f[R]] +[\f[I]SOURCE\f[R]]:[\f[I]TARGETS\f[R]] [\f[I]TEXT\f[R]]... +.SH DESCRIPTION +.PP +This tool translates text into any language from the command\-line, +using a translation engine such as Google Translate, Bing Translator and +Yandex.Translate. +.PP +Each argument which is not a valid option is treated as \f[I]TEXT\f[R] +to be translated. +.PP +If neither \f[I]TEXT\f[R] nor the input file is specified by +command\-line arguments, the program will read and translate from +standard input. +.SH OPTIONS +.SS Information options +.TP +.B \f[B]\-V\f[R], \f[B]\-version\f[R] +Print version and exit. +.TP +.B \f[B]\-H\f[R], \f[B]\-help\f[R] +Print help message and exit. +\f[B]\-M\f[R], \f[B]\-man\f[R] +Show man page and exit. +.TP +.B \f[B]\-T\f[R], \f[B]\-reference\f[R] +Print reference table of all supported languages and codes, and exit. +Names of languages are displayed in their endonyms (language name in the +language itself). +.TP +.B \f[B]\-R\f[R], \f[B]\-reference\-english\f[R] +Print reference table of all supported languages and codes, and exit. +Names of languages are displayed in English. +.TP +.B \f[B]\-L\f[R] \f[I]CODES\f[R], \f[B]\-list\f[R] \f[I]CODES\f[R] +Print details of languages and exit. +When specifying two or more language codes, concatenate them by plus +sign \[dq]+\[dq]. +.TP +.B \f[B]\-S\f[R], \f[B]\-list\-engines\f[R] +List available translation engines and exit. +.TP +.B \f[B]\-U\f[R], \f[B]\-upgrade\f[R] +Check for upgrade of this program. +.SS Translator options +.TP +.B \f[B]\-e\f[R] \f[I]ENGINE\f[R], \f[B]\-engine\f[R] \f[I]ENGINE\f[R] +Specify the translation engine to use. +(default: google) +.SS Display options +.TP +.B \f[B]\-verbose\f[R] +Verbose mode. +.RS +.PP +Show the original text and its most relevant translation, then its +phonetic notation (if any), then its alternative translations (if any) +or its definition in the dictionary (if it is a word). +.PP +This option is unnecessary in most cases since verbose mode is enabled +by default. +.RE +.TP +.B \f[B]\-b\f[R], \f[B]\-brief\f[R] +Brief mode. +.RS +.PP +Show the most relevant translation or its phonetic notation only. +.RE +.TP +.B \f[B]\-d\f[R], \f[B]\-dictionary\f[R] +Dictionary mode. +.RS +.PP +Show the definition of the original word in the dictionary. +.RE +.TP +.B \f[B]\-identify\f[R] +Language identification. +.RS +.PP +Show the identified language of the original text. +.RE +.TP +.B \f[B]\-show\-original\f[R] \f[I]Y/n\f[R] +Show original text or not. +(default: yes) +.TP +.B \f[B]\-show\-original\-phonetics\f[R] \f[I]Y/n\f[R] +Show phonetic notation of original text or not. +(default: yes) +.TP +.B \f[B]\-show\-translation\f[R] \f[I]Y/n\f[R] +Show translation or not. +(default: yes) +.TP +.B \f[B]\-show\-translation\-phonetics\f[R] \f[I]Y/n\f[R] +Show phonetic notation of translation or not. +(default: yes) +.TP +.B \f[B]\-show\-prompt\-message\f[R] \f[I]Y/n\f[R] +Show prompt message or not. +(default: yes) +.TP +.B \f[B]\-show\-languages\f[R] \f[I]Y/n\f[R] +Show source and target languages or not. +(default: yes) +.TP +.B \f[B]\-show\-original\-dictionary\f[R] \f[I]y/N\f[R] +Show dictionary entry of original text or not. +(default: no) +.RS +.PP +This option is enabled in dictionary mode. +.RE +.TP +.B \f[B]\-show\-dictionary\f[R] \f[I]Y/n\f[R] +Show dictionary entry of translation or not. +(default: yes) +.TP +.B \f[B]\-show\-alternatives\f[R] \f[I]Y/n\f[R] +Show alternative translations or not. +(default: yes) +.TP +.B \f[B]\-w\f[R] \f[I]NUM\f[R], \f[B]\-width\f[R] \f[I]NUM\f[R] +Specify the screen width for padding. +.RS +.PP +This option overrides the setting of environment variable +$\f[B]COLUMNS\f[R]. +.RE +.TP +.B \f[B]\-indent\f[R] \f[I]NUM\f[R] +Specify the size of indent (number of spaces). +(default: 4) +.TP +.B \f[B]\-theme\f[R] \f[I]FILENAME\f[R] +Specify the theme to use. +(default: default) +.TP +.B \f[B]\-no\-theme\f[R] +Do not use any other theme than default. +.TP +.B \f[B]\-no\-ansi\f[R] +Do not use ANSI escape codes. +.TP +.B \f[B]\-no\-autocorrect\f[R] +Do not autocorrect. +(if defaulted by the translation engine) +.TP +.B \f[B]\-no\-bidi\f[R] +Do not convert bidirectional texts. +.TP +.B \f[B]\-bidi\f[R] +Always convert bidirectional texts. +.TP +.B \f[B]\-no\-warn\f[R] +Do not write warning messages to stderr. +.TP +.B \f[B]\-dump\f[R] +Print raw API response instead. +.SS Audio options +.TP +.B \f[B]\-p\f[R], \f[B]\-play\f[R] +Listen to the translation. +.RS +.PP +You must have at least one of the supported audio players +(\f[B]mplayer\f[R], \f[B]mpv\f[R] or \f[B]mpg123\f[R]) installed to +stream from Google Text\-to\-Speech engine. +Otherwise, a local speech synthesizer may be used instead (\f[B]say\f[R] +on macOS, \f[B]espeak\f[R] on Linux or other platforms). +.RE +.TP +.B \f[B]\-speak\f[R] +Listen to the original text. +.TP +.B \f[B]\-n\f[R] \f[I]VOICE\f[R], \f[B]\-narrator\f[R] \f[I]VOICE\f[R] +Specify the narrator, and listen to the translation. +.RS +.PP +Common values for this option are \f[B]male\f[R] and \f[B]female\f[R]. +.RE +.TP +.B \f[B]\-player\f[R] \f[I]PROGRAM\f[R] +Specify the audio player to use, and listen to the translation. +.RS +.PP +Option \f[B]\-play\f[R] will try to use \f[B]mplayer\f[R], \f[B]mpv\f[R] +or \f[B]mpg123\f[R] by default, since these players are known to work +for streaming URLs. +Not all command\-line audio players can work this way. +Use this option only when you have your own preference. +.PP +This option overrides the setting of environment variable +$\f[B]PLAYER\f[R]. +.RE +.TP +.B \f[B]\-no\-play\f[R] +Do not listen to the translation. +.TP +.B \f[B]\-no\-translate\f[R] +Do not translate anything when using \-speak. +.TP +.B \f[B]\-download\-audio\f[R] +Download the audio to the current directory. +.TP +.B \f[B]\-download\-audio\-as\f[R] \f[I]FILENAME\f[R] +Download the audio to the specified file. +.SS Terminal paging and browsing options +.TP +.B \f[B]\-v\f[R], \f[B]\-view\f[R] +View the translation in a terminal pager (\f[B]less\f[R], \f[B]more\f[R] +or \f[B]most\f[R]). +.TP +.B \f[B]\-pager\f[R] \f[I]PROGRAM\f[R] +Specify the terminal pager to use, and view the translation. +.RS +.PP +This option overrides the setting of environment variable +$\f[B]PAGER\f[R]. +.RE +.TP +.B \f[B]\-no\-view\f[R], \f[B]\-no\-pager\f[R] +Do not view the translation in a terminal pager. +.TP +.B \f[B]\-browser\f[R] \f[I]PROGRAM\f[R] +Specify the web browser to use. +.RS +.PP +This option overrides the setting of environment variable +$\f[B]BROWSER\f[R]. +.RE +.TP +.B \f[B]\-no\-browser\f[R] +Do not open the web browser. +.SS Networking options +.TP +.B \f[B]\-x\f[R] \f[I]HOST:PORT\f[R], \f[B]\-proxy\f[R] \f[I]HOST:PORT\f[R] +Use HTTP proxy on given port. +.RS +.PP +This option overrides the setting of environment variables +$\f[B]HTTP_PROXY\f[R] and $\f[B]http_proxy\f[R]. +.RE +.TP +.B \f[B]\-u\f[R] \f[I]STRING\f[R], \f[B]\-user\-agent\f[R] \f[I]STRING\f[R] +Specify the User\-Agent to identify as. +.RS +.PP +This option overrides the setting of environment variables +$\f[B]USER_AGENT\f[R]. +.RE +.TP +.B \f[B]\-4\f[R], \f[B]\-ipv4\f[R], \f[B]\-inet4\-only\f[R] +Connect only to IPv4 addresses. +.TP +.B \f[B]\-6\f[R], \f[B]\-ipv6\f[R], \f[B]\-inet6\-only\f[R] +Connect only to IPv6 addresses. +.SS Interactive shell options +.TP +.B \f[B]\-I\f[R], \f[B]\-interactive\f[R], \f[B]\-shell\f[R] +Start an interactive shell, invoking \f[B]rlwrap\f[R] whenever possible +(unless \f[B]\-no\-rlwrap\f[R] is specified). +.TP +.B \f[B]\-E\f[R], \f[B]\-emacs\f[R] +Start the GNU Emacs front\-end for an interactive shell. +.RS +.PP +This option does not need to, and cannot be used along with +\f[B]\-I\f[R] or \f[B]\-no\-rlwrap\f[R]. +.RE +.TP +.B \f[B]\-no\-rlwrap\f[R] +Do not invoke \f[B]rlwrap\f[R] when starting an interactive shell. +.RS +.PP +This option is useful when your terminal type is not supported by +\f[B]rlwrap\f[R] (e.g. +\f[B]emacs\f[R]). +.RE +.SS I/O options +.TP +.B \f[B]\-i\f[R] \f[I]FILENAME\f[R], \f[B]\-input\f[R] \f[I]FILENAME\f[R] +Specify the input file. +.RS +.PP +Source text to be translated will be read from the input file, instead +of standard input. +.RE +.TP +.B \f[B]\-o\f[R] \f[I]FILENAME\f[R], \f[B]\-output\f[R] \f[I]FILENAME\f[R] +Specify the output file. +.RS +.PP +Translations will be written to the output file, instead of standard +output. +.RE +.SS Language preference options +.TP +.B \f[B]\-l\f[R] \f[I]CODE\f[R], \f[B]\-hl\f[R] \f[I]CODE\f[R], \f[B]\-lang\f[R] \f[I]CODE\f[R] +Specify your home language (the language you would like to see for +displaying prompt messages in the translation). +.RS +.PP +This option affects only the display in verbose mode (anything other +than source language and target language will be displayed in your home +language). +This option has no effect in brief mode. +.PP +This option is optional. +When its setting is omitted, English will be used. +.PP +This option overrides the setting of environment variables +$\f[B]LC_ALL\f[R], $\f[B]LANG\f[R], and $\f[B]HOME_LANG\f[R]. +.RE +.TP +.B \f[B]\-s\f[R] \f[I]CODES\f[R], \f[B]\-sl\f[R] \f[I]CODES\f[R], \f[B]\-source\f[R] \f[I]CODES\f[R], \f[B]\-from\f[R] \f[I]CODES\f[R] +Specify the source language(s) (the language(s) of original text). +When specifying two or more language codes, concatenate them by plus +sign \[dq]+\[dq]. +.RS +.PP +This option is optional. +When its setting is omitted, the language of original text will be +identified automatically (with a possibility of misidentification). +.PP +This option overrides the setting of environment variable +$\f[B]SOURCE_LANG\f[R]. +.RE +.TP +.B \f[B]\-t\f[R] \f[I]CODES\f[R], \f[B]\-tl\f[R] \f[I]CODES\f[R], \f[B]\-target\f[R] \f[I]CODES\f[R], \f[B]\-to\f[R] \f[I]CODES\f[R] +Specify the target language(s) (the language(s) of translated text). +When specifying two or more language codes, concatenate them by plus +sign \[dq]+\[dq]. +.RS +.PP +This option is optional. +When its setting is omitted, everything will be translated into English. +.PP +This option overrides the setting of environment variables +$\f[B]LC_ALL\f[R], $\f[B]LANG\f[R], and $\f[B]TARGET_LANG\f[R]. +.RE +.TP +.B [\f[I]SOURCE\f[R]]:[\f[I]TARGETS\f[R]] +A simpler, alternative way to specify the source language and target +language(s) is to use a shortcut formatted string: +.RS +.IP \[bu] 2 +\f[I]SOURCE\-CODE\f[R]:\f[I]TARGET\-CODE\f[R] +.IP \[bu] 2 +\f[I]SOURCE\-CODE\f[R]:\f[I]TARGET\-CODE1\f[R]+\f[I]TARGET\-CODE2\f[R]+... +.IP \[bu] 2 +\f[I]SOURCE\-CODE\f[R]=\f[I]TARGET\-CODE\f[R] +.IP \[bu] 2 +\f[I]SOURCE\-CODE\f[R]=\f[I]TARGET\-CODE1\f[R]+\f[I]TARGET\-CODE2\f[R]+... +.PP +Delimiter \[dq]:\[dq] and \[dq]=\[dq] can be used interchangeably. +.PP +Either \f[I]SOURCE\f[R] or \f[I]TARGETS\f[R] may be omitted, but the +delimiter character must be kept. +.RE +.SS Text preprocessing options +.TP +.B \f[B]\-j\f[R], \f[B]\-join\-sentence\f[R] +Treat all arguments as one single sentence. +.SS Other options +.TP +.B \f[B]\-no\-init\f[R] +Do not load any initialization script. +.TP +.B \f[B]\-\-\f[R] +End\-of\-options. +.RS +.PP +All arguments after this option are treated as \f[I]TEXT\f[R] to be +translated. +.RE +.SH EXIT STATUS +.TP +.B \f[B]0\f[R] +Successful translation. +.TP +.B \f[B]1\f[R] +Error. +.SH ENVIRONMENT +.TP +.B \f[B]PAGER\f[R] +Equivalent to option setting \f[B]\-pager\f[R]. +.TP +.B \f[B]BROWSER\f[R] +Equivalent to option setting \f[B]\-browser\f[R]. +.TP +.B \f[B]PLAYER\f[R] +Equivalent to option setting \f[B]\-player\f[R]. +.TP +.B \f[B]HTTP_PROXY\f[R] +Equivalent to option setting \f[B]\-proxy\f[R]. +.TP +.B \f[B]USER_AGENT\f[R] +Equivalent to option setting \f[B]\-user\-agent\f[R]. +.TP +.B \f[B]HOME_LANG\f[R] +Equivalent to option setting \f[B]\-lang\f[R]. +.TP +.B \f[B]SOURCE_LANG\f[R] +Equivalent to option setting \f[B]\-source\f[R]. +.TP +.B \f[B]TARGET_LANG\f[R] +Equivalent to option setting \f[B]\-target\f[R]. +.SH FILES +.TP +.B \f[I]/etc/translate\-shell\f[R] +Initialization script. +(system\-wide) +.TP +.B \f[I]$HOME/.translate\-shell/init.trans\f[R] +Initialization script. +(user\-specific) +.TP +.B \f[I]$XDG_CONFIG_HOME/translate\-shell/init.trans\f[R] +Initialization script. +(user\-specific) +.TP +.B \f[I]./.trans\f[R] +Initialization script. +(current directory) +.SH FURTHER DOCUMENTATION +.PP + +.SH REPORTING BUGS +.PP + +.SH AUTHORS +Mort Yao . +EOF +export TRANS_MANPAGE +export TRANS_BUILD=release +gawk -f <(echo -E "$TRANS_PROGRAM") - "$@" diff --git a/Coursera/Lesson3/.DS_Store b/Coursera/Lesson3/.DS_Store new file mode 100644 index 0000000..3597aeb Binary files /dev/null and b/Coursera/Lesson3/.DS_Store differ