Skip to content

Instantly share code, notes, and snippets.

@sharanry
Created July 20, 2019 20:55
Show Gist options
  • Save sharanry/79d646fdc2f1677dbf141db649442e85 to your computer and use it in GitHub Desktop.
Save sharanry/79d646fdc2f1677dbf141db649442e85 to your computer and use it in GitHub Desktop.
Normalised Flows Demo
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Info: Recompiling stale cache file /home/sharan/.julia/compiled/v1.1/Flows/HDEsO.ji for Flows [b7844722-a0ec-11e9-22bc-51d568b73702]\n",
"└ @ Base loading.jl:1184\n",
"┌ Warning: Package Flows does not have LinearAlgebra in its dependencies:\n",
"│ - If you have Flows checked out for development and have\n",
"│ added LinearAlgebra as a dependency but haven't updated your primary\n",
"│ environment's manifest file, try `Pkg.resolve()`.\n",
"│ - Otherwise you may need to report an issue with Flows\n",
"└ Loading LinearAlgebra into Flows from project dependency, future warnings for Flows are suppressed.\n"
]
}
],
"source": [
"# using CuArrays # comment me out if you don't want to use GPU\n",
"using Flux, Flows\n",
"import Distributions: rand, logpdf\n",
"import PyPlot; const plt = PyPlot\n",
"using Tracker: update!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate some data from a mixture of two Gaussians to use"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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dHNM6/Dhw3j88cfxjW98w+im6KKrqwsDAwMoLS0dcntpaSk6OjoMapW5RKNR3HXXXVi2bBnmz59vdHMMtXXrVtTX12Pjxo1GNyUtlgm5e++9Fy6Xa9QvZY4FAP71X/8VN954IxYvXoynn34aLpcLv/nNbwz+LdSV6nvy+OOPo7u7G+vXrze6ybpI9X1J1NbWhs9//vO46aabsGbNGoNaTmazdu1a7N+/H1u3bjW6KYZqaWnBnXfeieeffx75+flGNyctltnWq7OzEydOnBj1MbNnz8Ybb7yBz372s/i///s/XHXVVYP31dTUYPny5fjBD36gdVN1k+p78qUvfQm///3vh5zJNzAwgJycHNxyyy149tlntW6qrlJ9X/Ly8gAA7e3tqK2txRVXXIFnnnkmrbOqrKy3txeFhYX47//+7yHVx7feeitOnz6N7du3G9g6491xxx3Yvn07Xn/9dcyaNcvo5hhq27ZtuOGGG5CTkzN428DAAFwuF9xuNyKRyJD7zMT8u2t+ori4GMXFxWM+bvHixfB6vTh48OBgyPX19aGpqQkzZszQupm6SvU92bx5Mx566KHBn9vb27FixQq88MILqKmp0bKJhkj1fQGkB3fNNdcM9vidEnAAkJeXh8WLF2Pnzp2DIReNRrFz507ccccdBrfOOLFYDN/85jfx0ksvYdeuXY4POAC49tprsW/fviG3rV69GnPnzsU999xj2oADLBRyqfL7/bj99tuxYcMGlJeXY8aMGXjkkUcAADfddJPBrTNGRUXFkJ/HjRsHAJgzZ07ah9LaSVtbG2prazFjxgw8+uij6OzsHLxvypQpBrZMP+vWrcOtt96KJUuWYOnSpXjsscfQ09OD1atXG900w6xduxa/+tWvsH37dvh8vsH5yUAggIKCAoNbZwyfz3fBnGRRUREmTZpk+rlK24UcADzyyCPweDz46le/inPnzqGmpgavvfYaJkyYYHTTyEReffVVHD58GIcPH74g7C0yip+1m2++GZ2dnbj//vvR0dGBhQsXYseOHRcUozjJE088AQCora0dcvvTTz+Nuro6/RtEWbHMnBwREVG6nDMBQUREjsOQIyIi22LIERGRbTHkiIjIthhyRERkWww5IiKyLYYcERHZFkOOiIhsiyFHRES2xZAjIiLbYsgREZFtMeSIiMi2/j9tVm2HUgSTlAAAAABJRU5ErkJggg==",
"text/plain": [
"PyPlot.Figure(PyObject <Figure size 500x500 with 1 Axes>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"2×100 Array{Float32,2}:\n",
" 2.69262 1.84365 2.37286 2.58955 … -3.71394 -3.2344 0.857955\n",
" 3.10267 2.74642 3.19628 2.38161 -3.83816 -2.77462 -2.20049 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = randn(Float32, 2, 100)\n",
"X[:,1:50] .*= 0.5\n",
"X[:,1:50] .+= 5.0\n",
"X .-= 2.5\n",
"\n",
"function makeplot(x; xgen=nothing, logpdf2plot=nothing, contourevals=100)\n",
" p = plt.figure(figsize=(5, 5))\n",
" plt.scatter(x[1,:], x[2,:], c=\"blue\", alpha=0.5, label=\"data\")\n",
" xgen == nothing || plt.scatter(xgen[1,:], xgen[2,:], c=\"red\", alpha=0.5, label=\"samples\")\n",
" xlims = [extrema(x[1,:])...] + [-1, 1]\n",
" ylims = [extrema(x[2,:])...] + [-1, 1]\n",
" if logpdf2plot != nothing\n",
" rangex = range(xlims..., length=contourevals)\n",
" rangey = range(ylims..., length=contourevals)\n",
" gridxy = [[xy...] for xy in Iterators.product(rangex, rangey)]\n",
" gridx = map(xy -> xy[1], gridxy)\n",
" gridy = map(xy -> xy[2], gridxy)\n",
" gridz = exp.(logpdf2plot(hcat(gridxy[:]...) |> gpu)) |> cpu |> Flux.data\n",
" gridz = reshape(gridz, size(gridx)...)\n",
" plt.contour(gridx, gridy, gridz, alpha=0.5)\n",
" plt.colorbar()\n",
" end\n",
" plt.xlim(xlims)\n",
" plt.ylim(ylims)\n",
" plt.legend()\n",
" nothing\n",
"end\n",
"\n",
"makeplot(X)\n",
"\n",
"# Send data to GPU\n",
"X = X |> gpu"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create a normalising flow by stacking multiple layers of Planar Flows\n",
"\n",
"$$ f = f_1 \\circ f_2 \\circ \\cdots \\circ f_{N-1} \\circ f_N : \\mathcal{Z} \\rightarrow \\mathcal{X}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We assume base distribution is the unit Gaussian, i.e. $p_{\\mathcal{Z}} = \\mathcal{N}(0,1)$."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"rand (generic function with 197 methods)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define a base distribution that is easy to work with GPU\n",
"struct MvNormal01\n",
" dim::Int\n",
"end\n",
"\n",
"# The constant below is a hack to make things work on GPU.\n",
"const LOG2PI32 = log(2Float32(pi))\n",
"logpdf(d::MvNormal01, x) = sum(-(LOG2PI32 .+ x .* x) ./ 2; dims=1)\n",
"rand(d::MvNormal01, n::Int=1) = randn(Float32, d.dim, n) |> gpu"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"PlanarLayer <: AbstractInvertibleTransformation"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"DEPTH = 10\n",
"# initialize flow with dim 2 and depth 6\n",
"T = compose([PlanarLayer(2) for i in 1:DEPTH]...)\n",
"base = MvNormal01(size(X, 1))\n",
"\n",
"# A normalising flow is nothing but a transformation plus a base distribution\n",
"# Check `src/flows.jl` for the abstraction\n",
"flow = Flow(T, base)\n",
"\n",
"# Create optimiser\n",
"\n",
"ps = params(flow)\n",
";"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define loss\n",
"\n",
"$$\\mathcal{L} = -\\log p_{\\mathcal{X}}(x) = -\\left(\\log p_{\\mathcal{Z}}(f^{-1}(x)) + \\log \\left| \\det \\frac{\\partial f^{-1}(x)}{\\partial x} \\right|\\right),$$\n",
"\n",
"where $f^{-1}: \\mathcal{X} \\rightarrow \\mathcal{Z}$."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"logpdf (generic function with 65 methods)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function logpdf(f::Flow{Composed{PlanarLayer}}, x) where {T<:AbstractInvertibleTransformation}\n",
"# it = inv(f.t)\n",
" res = forward(f.t, x)\n",
" return logpdf(f.base, res.rv) + transpose(res.logabsdetjacob)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"compute_loss (generic function with 1 method)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"compute_loss(X) = sum(logpdf(flow, X))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run optimisation"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: ignoring conflicting import of Tracker.update! into Main\n"
]
}
],
"source": [
"using Flux.Tracker: update!"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"..........(100/2000) done; loss=-346.87729739068055 (tracked)\n",
"..........(200/2000) done; loss=-324.07838660872756 (tracked)\n",
"..........(300/2000) done; loss=-311.3845781507522 (tracked)\n",
"..........(400/2000) done; loss=-307.97254130388376 (tracked)\n",
"..........(500/2000) done; loss=-303.52109233761666 (tracked)\n",
"..........(600/2000) done; loss=-301.94549737596446 (tracked)\n",
"..........(700/2000) done; loss=-303.3340152797165 (tracked)\n",
"..........(800/2000) done; loss=-301.6967261096378 (tracked)\n",
"..........(900/2000) done; loss=-297.9975433544365 (tracked)\n",
"..........(1000/2000) done; loss=-298.1516161774655 (tracked)\n",
"..........(1100/2000) done; loss=-295.39705084693264 (tracked)\n",
"..........(1200/2000) done; loss=-291.44568067889236 (tracked)\n",
"..........(1300/2000) done; loss=-291.7580122639125 (tracked)\n",
"..........(1400/2000) done; loss=-290.54013844853284 (tracked)\n",
"..........(1500/2000) done; loss=-289.65333850743184 (tracked)\n",
"..........(1600/2000) done; loss=-289.0341820108083 (tracked)\n",
"..........(1700/2000) done; loss=-288.2912592948587 (tracked)\n",
"..........(1800/2000) done; loss=-292.02409635570996 (tracked)\n",
"..........(1900/2000) done; loss=-287.9374177935742 (tracked)\n",
"..........(2000/2000) done; loss=-287.5360871195456 (tracked)\n",
"done; 119.408444541s used\n"
]
}
],
"source": [
"opt = ADAM(2e-3)\n",
"niters = 2_000\n",
"timeused = @elapsed for iter = 1:niters\n",
" iter % 10 == 0 && print(\".\")\n",
" for j in 1:10:size(X)[2]\n",
" loss = compute_loss(X[:, j:(j+9)])\n",
" gs = Tracker.gradient(() -> loss, ps)\n",
" for p in ps\n",
" Tracker.update!(opt, p, gs[p])\n",
" end\n",
" end\n",
" loss = compute_loss(X)\n",
" iter % 100 == 0 && println(\"($iter/$niters) done; loss=$loss\")\n",
"end\n",
"println(\"done; $(timeused)s used\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw samples\n",
"\n",
"$$ z \\sim \\mathcal{N}(0,1) $$\n",
"$$ x = f(z) $$"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAb8AAAGyCAYAAAB0jcqsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsvXl0HOWZt31V9b639n2zLMuyvMo7GGywjcM2gfCGCTCDIXmTycJHgk8yhHcCIUNm8CRkDhOSDIRJMiEkISuQsAYb22y28SLhRZsta9/Vknrfu74/ympZlsE2lizZfq5z+rS6qrr66epS/eq+n3uRFEVREAgEAoHgEkKe6gEIBAKBQHC+EeInEAgEgksOIX4CgUAguOQQ4icQCASCSw4hfgKBQCC45BDiJxAIBIJLDiF+AoFAILjkEOInEAgEgksOIX4CgUAguOQQ4icQCASCSw4hfgKBQCD42Pz4xz+muLgYo9HI8uXLef/99z9026effporrriClJQUUlJSWLdu3bjtFUXhoYceIicnB5PJxLp16zhy5MiYbQYHB7njjjuw2+04nU4+97nP4fP5zmrcQvwEAoFA8LH43e9+x6ZNm/j2t7/N/v37WbBgARs2bKCvr++U22/fvp3bbruNbdu2sXPnTgoKCrjmmmvo7OxMbvO9732PH/7whzz55JPs3r0bi8XChg0bCIVCyW3uuOMODh8+zBtvvMFLL73EW2+9xRe+8IWzG7wiEAgEAsHHYNmyZcpXvvKV5Ot4PK7k5uYqjz766Bm9PxaLKTabTfnlL3+pKIqiJBIJJTs7W/n+97+f3GZ4eFgxGAzKb3/7W0VRFKW2tlYBlD179iS3efXVVxVJkpTOzs4zHrv246j9+SKRSNDV1YXNZkOSpKkejkAgEJwziqLg9XrJzc1Fls/d+RYKhYhEIhMwMhVFUcZdbw0GAwaDYcyySCTCvn37eOCBB5LLZFlm3bp17Ny584w+KxAIEI1GSU1NBaC5uZmenh7WrVuX3MbhcLB8+XJ27tzJZz7zGXbu3InT6WTJkiXJbdatW4csy+zevZubb775jD57WotfV1cXBQUFUz0MgUAgmHDa29vJz88/p32EQiFKirPo6fVM0KjAarWOmz/79re/zcMPPzxm2cDAAPF4nKysrDHLs7KyqK+vP6PPuv/++8nNzU2KXU9PT3IfJ+9zZF1PTw+ZmZlj1mu1WlJTU5PbnAnTWvxsNhugniR2u32KRyMQTAANDfDkk+ByQW4uWCzg90NXF6SlwYYN8Prro+tDITh8WF2v1UJFBSxdCjfcAOXlU/MdWlvh3/5NHe+p/i/dbhgchH/5FygqOv/jm+Z4PB4KCgqS17dzIRKJ0NProa2taUKukR6Ph8LC0nHX3JOtvolg8+bNPPfcc2zfvh2j0Tjh+z8d01r8Rkxvu90uxE9wcbB0KVit8PzzUF8PAwNgNMLy5XDTTaq4zZs3uj4UglmzYPVquPxyWLAACgthAtxlH5vKSpg/H6qrIT0dTnSRKQr090NVlbrdVI5zmjORUzkOR/qEXCMlSQ+c2TU3PT0djUZDb2/vmOW9vb1kZ2d/5Hsfe+wxNm/ezJYtW5g/f35y+cj7ent7ycnJGbPPhQsXJrc5OaAmFosxODh42s89kWktfgLBRUlFhWq1tbWB1ws221hBO936qUaW4eabob0damshP3/Ugu3oUAXxppumz3gFk4Jer2fx4sVs3bqVm266CVDjNLZu3co999zzoe/73ve+x7/927/x+uuvj5m3AygpKSE7O5utW7cmxc7j8bB7926+9KUvAbBy5UqGh4fZt28fixcvBuDNN98kkUiwfPnyMx6/ED+BYCqQZSgu/vjrp5qKCrj33lELtbNTtWCrqkYtWMFFz6ZNm9i4cSNLlixh2bJlPP744/j9fu6++24A7rzzTvLy8nj00UcB+I//+A8eeughfvOb31BcXJyco7NarVitViRJ4mtf+xrf/e53KSsro6SkhAcffJDc3NykwFZUVPCJT3yCz3/+8zz55JNEo1HuuecePvOZz5Cbm3vmgz/juNApwO12K4DidruneigCgeBUxOOK0tysKAcOqM/x+FSPaNozkde1ib5Gfpz9PfHEE0phYaGi1+uVZcuWKbt27UquW716tbJx48bk66KiIgUY9/j2t7+d3CaRSCgPPvigkpWVpRgMBmXt2rVKQ0PDmM90uVzKbbfdplitVsVutyt333234vV6z+q7SoqiKBNyCzAJeDweHA4Hbrf7I/3P8XicaDR6HkcmOBt0Oh0ajWaqhyEQTAvO9Lp2vvc1GfubzlzQbk9FUejp6WF4eHiqhyI4DU6nk+zsbJGvKRAIpgUXtPiNCF9mZiZms1lcWKchiqIQCASS0VknRnAJBALBVHHBil88Hk8KX1pa2lQPR/ARmEwmAPr6+sjMzBQuUIFAMOVcsLHII3N8ZrN5ikciOBNGficxNysQCKYDF6z4jSBcnRcG4ncSCATTiQvW7SkQXNQkEtMryX26jUcgOEeE+E0T1qxZw8KFC3n88ceneiiCqaaubmx5M6MRZs9Wq6pMRfL4dBuPQDABiFu3C5Dt27cjSZJI8bgYqauDH/5wtG5mebn6XF2tLq+ru7THIxBMEJe8+CUS0NICBw+qz4nEVI9IcMmSSKgW1sAAzJmjdkzQaNTnOXPU5S+8cP5O0uk2HoFgAjlv4rd58+Zk3bbpQl0dbN4MDz0EjzyiPm/ePPk3s36/nzvvvBOr1UpOTg4/+MEPxqz/1a9+xZIlS7DZbGRnZ3P77bcn8+RaWlq46qqrAEhJSUGSJO666y4AXnvtNVatWoXT6SQtLY0bbriBpqamyf0ygomjrU11LRYUjO2UAOrr/Hz15GxrG//eybiLO5fxCATTnPMy57dnzx6eeuqpMa0rppoRb87AgPq/PVKUvrpaLVZ/772TN53xjW98gx07dvDiiy+SmZnJ//t//4/9+/cnq5hHo1EeeeQRysvL6evrY9OmTdx111288sorFBQU8Kc//YlbbrmFhoYG7HZ7Mo/O7/ezadMm5s+fj8/n46GHHuLmm2+mpqZmQjpGCyYZr1edU7NYTr3eYlELSHu9Y5dP1pzcxx2PQHABMOni5/P5uOOOO3j66af57ne/O9kfd0ac7M0Zuakd8ebU1qrenPLyiQ9o8/l8/OxnP+PZZ59l7dq1APzyl78c09H5s5/9bPLvGTNm8MMf/pClS5fi8/mwWq2kpqYCkJmZidPpTG57yy23jPmsn//852RkZFBbW8vcuXMn9osIJh6bTRUuv//UTWL9fnX9iU1QJ/Mu7uOMRyC4QJh0c+ArX/kK119/fbJN/XRgKr05TU1NRCKRMX2nUlNTKT+hK/e+ffu48cYbKSwsxGazsXr16uPj/ugBHTlyhNtuu40ZM2Zgt9spPt4S53TvE0wTCgtVi629XW0KeyKKovbKq6hQt4PJn5M72/EIBBcQk2r5Pffcc+zfv589e/ac0fbhcJhwOJx87fF4JmVc09mb4/f72bBhAxs2bODXv/41GRkZtLW1sWHDBiKRyEe+98Ybb6SoqIinn36a3NxcEokEc+fOPe37BNOEs20SezZ3cR+nN6BoWiu4iJm0s7a9vZ2vfvWr/PrXv8ZoNJ7Rex599FEcDkfyUVBQMCljO9Gbcyom05tTWlqKTqdj9+7dyWVDQ0M0NjYCUF9fj8vlYvPmzVxxxRXMnj07Gewygl6vB9T6piO4XC4aGhr41re+xdq1a6moqGBoaGjiv4BgchlpErtoEbhc0NioPldVjXdhnsldXCh0bndxZzMegeACYtIsv3379tHX10dVVVVyWTwe56233uJHP/oR4XB4XIHjBx54gE2bNiVfezyeSRHAEW9OdfXYOT8Y9eZUVU2ON8dqtfK5z32Ob3zjG6SlpZGZmcm//Mu/JANSCgsL0ev1PPHEE3zxi1/k0KFDPPLII2P2UVRUhCRJvPTSS1x33XWYTCZSUlJIS0vjpz/9KTk5ObS1tfHNb35z4r+AYPKpqFAnnE9XUeV8zcmd6XgEgguISTt7165dy8GDB6mpqUk+lixZwh133EFNTc0pK/sbDAbsdvuYx2Qw4s1JT1e9OW43xGLqc23t5Htzvv/973PFFVdw4403sm7dOlatWsXixYsByMjI4H//93/5wx/+wJw5c9i8eTOPPfbYmPfn5eXxne98h29+85tkZWVxzz33IMsyzz33HPv27WPu3Lncd999fP/735+cLyCYfGRZdVXOm6c+n+pkPJ9zcmcyHoHgAuK8dnI/2xJeH9VVOBQK0dzcTElJyRm7VU/mVBHiFRWq8AlvzsQyEb+X4BScGO15qjk54ZqcdohO7tODS7q2p/DmCC54RubkRu7iOjvVu7iqqvN2FxeJxOjtHCIeT2CxGrHajRhNetHJQzCtOa/it3379vP5cWfEiDdHILhgmYK7uGg0RuOhTjpbB+jvcZNIjHUgma1G5i4qonR2DlqdaF4smH5c0pafQHDRcJ7u4hRF4VhDDzW7mwj4R9OS7E4zBqMOvy9M0B8m4Avx/tsNHNzXQsWCAioWFIgqQ4JphRA/gUBwRnjdAd5+4zCuPjX/1mY3UbGwkNzCNGx2U3K7WDROU303h2ta8XtD7N95lN6uIVatn4teLy45gumBOBMFAsFpcfV7efOlGkLBCDq9lvlLSiifm4dGO96lqdVpKJ+Xz8w5uRxr6GHvO410trr42/P7uOq6BVhsIuBJMPUIP4RAIPhIejoGeePF/YSCEVLTbfzdbSuYs7DwlMJ3IhqNTNmcXNZ/sgqT2cCQy8drf97LsMt3nkYuEHw4QvwEAsGH0tk6wNaXPyAaiZGVl8L6Ty7CbDGc1T7Ss+xce8sSnKlWAv4wb/ylWgigYMoR4icQCE7JsMvH228cJhFPUFSaydrrF6A36D7Wviw2I9fcVEVqho1QMCIEUDDlCPETCKaCyWg+O4GEghG2v3ogafFdvq7ytG7O02Ew6lh346JRAXxRCKBg6hABLwIA7rrrLoaHh3nhhRemeigXP5PVfHaCSCQSvP23Q3g9QWx2E1deMxeNZmLuk0cEcOtLNbj6PGx75QAbPrX4rF2pAsG5Iiw/geB8MlKOrLpaLT9WXq4+V1ery+vqpnqEHNrfSk/nEDqdhjXXzkdv0E+okWow6rj6+gXYHGZ83iBb/lI9JmdQIDgfCMsvkRD1zQTnh5Obz46U/xppPltbqzafLS8/9Tl4Hs5V95Cfg/taAFi2ejbdfVZ+8tTEG6lGk561Ny7kjRf34x7ys+Uv1az/5CJMZmEBCs4Pl/ZVvq4ONm+Ghx6CRx5RnzdvnvS77z/+8Y/MmzcPk8lEWloa69atw+/3s2fPHtavX096ejoOh4PVq1ezf//+Me+VJImnnnqKG264AbPZTEVFBTt37uTo0aOsWbMGi8XCZZddRlNTU/I9Dz/8MAsXLuSpp56ioKAAs9nMrbfeitvt/tAxJhIJHn30UUpKSjCZTCxYsIA//vGPyfVDQ0PccccdZGRkYDKZKCsr4xe/+MXEH6yLibNpPjvCyNzgiy/C/ffDgw9O2rmqKArvv9VAIp4gryiNUCxrUo1Um93E+r9bhNlqxD3k582XPiASiU3MlxEITsOlK35T5H7q7u7mtttu47Of/Sx1dXVs376dT33qUyiKgtfrZePGjbzzzjvs2rWLsrIyrrvuOrwnNSN95JFHuPPOO6mpqWH27Nncfvvt/NM//RMPPPAAe/fuRVEU7rnnnjHvOXr0KL///e/561//ymuvvUZ1dTVf/vKXP3Scjz76KM888wxPPvkkhw8f5r777uMf/uEf2LFjBwAPPvggtbW1vPrqq9TV1fHf//3fpKenT/wBu5g42+azIzdnX/0qbNoEv/89HDsGaWmTcq42H+mlp3MIrVbD4svLeeEFKWmk2u2g0YwaqQMDqpGaSJxb7I7NYeaaTy7CaNIzOODlrdcOEovGT/9GgeAcuTTdnufqfjoHuru7icVifOpTn6KoqAiAefPmAXD11VeP2fanP/0pTqeTHTt2cMMNNySX33333dx6660A3H///axcuZIHH3yQDRs2APDVr36Vu+++e8y+QqEQzzzzDHl5eQA88cQTXH/99fzgBz8gOzt7zLbhcJh///d/Z8uWLaxcuRKAGTNm8M477/DUU0+xevVq2traWLRoEUuWLAGgWFQHPz1n03x25Oasv189T/V6yMiAoSHYsweWL5/QczWRSHBwbzMA8xYXMzRsOiMj9aVXgrz1noujzYNEojF0OomcbJmVKwysWJpCYW4KJqP+ow+Lw8xV1y3gjRf3090xyJsv1xyfa/x4aRUCwZlwaVp+H8f9NEEsWLCAtWvXMm/ePD796U/z9NNPMzQ0BEBvby+f//znKSsrw+FwYLfb8fl8tJ00jvnz5yf/zsrKAkYFdGRZKBTC4/EklxUWFiaFD2DlypUkEgkaGhrGjfHo0aMEAgHWr1+P1WpNPp555pmkO/VLX/oSzz33HAsXLuSf//mfee+99ybg6FzknGnz2fz80ZuzvDzw+cDpVIUxIwMCAfX8hQk7V9ubB/AMBzAYdZTPzz+tkaoz+OkcPMBP/nc/hxpa0Zu8pKYFMZgCtLT5ePElFy+8cpTf/mUvr7x5iO6+D3exg5oIv/bGhegNWnq7htn61xrhAhVMKpem+J2t+2kC0Wg0vPHGG7z66qvMmTOHJ554gvLycpqbm9m4cSM1NTX813/9F++99x41NTWkpaURiUTG7EOnG70jHumZdqpliY8ZlufzqblXL7/8MjU1NclHbW1tct7v2muvpbW1lfvuu4+uri7Wrl3L17/+9Y/1eZcMsqxGiqSnqxab2w2xmPpcW6suv+kmVQRHbs4iEXWbkd9XklSrcWBAfd8EnKuKolBb3QpA+dx8dDrtGCP1ZHyhflr6DuINeIlGJArznOSnl5KfNo+S7Ermlc0hFiyk5ZiVREKhu9/NK9sO8cbbdQy5Ax86jswcJ+v+rgqjUc9An4ftr3xANCoEUDA5XJri91H/2TDW/TQJSJLE5Zdfzne+8x2qq6vR6/U8//zzvPvuu9x7771cd911VFZWYjAYGBgYmJDPbGtro6urK/l6165dyLJMeXn5uG3nzJmDwWCgra2NmTNnjnkUFBQkt8vIyGDjxo08++yzPP744/z0pz+dkLFe1Iw0n120CFwuaGxUn6uqRruun3hzZjCAVgvR6Og+9HpVEMPhCTlXB3rdDPR50GhlyufmA6c2UhVFYdDXSu9wIwMDcZSok8qSJeSmVmI3Z2PU2zHpnViMKZQWFOAfWMBlC5ZQMTMbWZJo6xrkhddr2PNBC9EPmddLy7Bx9QkW4LZXDhAJR0+5rUBwLlyac34j/9nV1WPn/GDU/VRVpW43wezevZutW7dyzTXXkJmZye7du+nv76eiooKysjJ+9atfsWTJEjweD9/4xjcwmUyn3+kZYDQa2bhxI4899hgej4d7772XW2+9ddx8H4DNZuPrX/869913H4lEglWrVuF2u3n33Xex2+1s3LiRhx56iMWLF1NZWUk4HOall16iYhokaF8QnK757Ik3Zw6HahF2d6suT0lSrUGtVhXBCThXW4/2AVBUmoXRrM7PjRip7e2qUZqXB55AD33uDgJBsOrz0VkKcdhP3a3dYlGbysdjBi5bXMqcshz2fNBKW9cgB+o7aWodYNnCYkoK0sZ1fE/LsHH19QvY+tcaejuH+NsL+1l740KRBiGYUC5Ny+9M3U+TkO9nt9t56623uO6665g1axbf+ta3+MEPfsC1117Lz372M4aGhqiqquIf//Efuffee8nMzJyQz505cyaf+tSnuO6667jmmmuYP38+P/nJTz50+0ceeYQHH3yQRx99lIqKCj7xiU/w8ssvU1JSAoBer+eBBx5g/vz5XHnllWg0Gp577rkJGeslwUjz2Xnz1OcTz7UTzS5Q/zab1eCXYFA9T61WVV3O8VxVFIWOVhcABSVjo3VHjNS8PNjxdoj3P2iltQ3cfcWk24swGqQzdp447WbWX1HBNVfMwWYx4g+G2bazgW07G4mcwrWZke3kmpsXJ7tBvPFiNX5f6GN9R8Hk8uMf/5ji4mKMRiPLly/n/fff/9BtDx8+zC233EJxcTGSJPH444+P22Zk3cmPr3zlK8lt1qxZM279F7/4xbMat6QoJ8+8Tx88Hg8OhwO32439pOi4UChEc3MzJSUlGI0fsz/YqcpMVVSoF5OLyIp5+OGHeeGFF6ipqZmyMUzI73UpMRLtOTCgBrUEg2ouQUeHavXNnQsrVpzzueoe8vOX3+5C1sh8+u4rxjWbrauDxx9XaOo6jNHixm6xk2mbS0eHRHu7aphWVKjGqMGgvgb1HrKqSk1NPFmXY7E4B+o7+aC2g4Si4LCZuPqyclKd4+fgPcMBtvy1Gr83hM1hZt2NC7HaJ8YbMlV81HVtKvf1cfb3u9/9jjvvvJMnn3yS5cuX8/jjj/OHP/yBhoaGU96479mzh9///vcsXryY++67j/vvv5+vfe1rY7bp7+8nHh91ix86dIj169ezbds21qxZA6jiN2vWLP71X/81uZ3ZbD6rY3Bpuj1HOJ37SSCYKkbMrj/9CfbvV02pzEy47DJYtQoWLJiQc7WzTbX6snKc44RvJCOo19VPTp4bWdaQnzoTnVbC4VA9sXV10NCgCp/BoMbiWK0wY8aHG6RarYaquYXkZTvZ9l4jbm+Qv2w5wNL5xcwpyx7jBrU7zVzzySq2/KUarzvA317cz9XXLcCZZj2n732xkVCiJJRznxs9233853/+J5///OeTqVVPPvkkL7/8Mj//+c/55je/OW77pUuXsnTpUoBTrgc1luBENm/eTGlpKatXrx6z3Gw2n3La5ky5tMUPRt1PAsF0ZEQIFEX92+mEWbMm7Jx1D6p+y4wcx7h1IxlBtpRekMBpyUOnVa2ugQH1fjEeVzU5ElHjbzr7gqSbBrlmRQSvTssHrVqsBj35aQ4MurGXm6x0OzdtWMBbu4/Q3j3Erupj9PS7WbV0JoYThNhqN7H+piq2/rUG95Cf157fx+pPzCMnP3VCjsHFQOPQM1jj524R+zxBgDFpUgAGgwGDYeycayQSYd++fTzwwAPJZbIss27dOnbu3HnOYxn5jGeffZZNmzaNmxv+9a9/zbPPPkt2djY33ngjDz74IGaz+Yz3LcTvEuDhhx/m4YcfnuphCM6GE92excVqBInfDzU1qutzJDL0HPF71Xk02ylciV4vBIJBjCYPMhI2o5pTqiiqKEajqhYvWaoQMnYyHB8goQ3i9cDeI2DIBI9HFUWTUaKixM7M7FRm5Wag06jtkYwGHeuvqODwkW72ftBKS4cL15Cfqy8rJz111LqzWI1suHkxO147QG/XMG++VMOKNRWUzs4552MgGM+JUd0A3/72t8ddQwYGBojH48lc4xGysrKoH8lDPUdeeOEFhoeHueuuu8Ysv/322ykqKiI3N5cDBw5w//3309DQwJ///Ocz3rcQP4FgunEeKxD5joufxTZ+HtZmA0k/QCQKKTYnWo0aCep2q0MzGiGuxHCbjpAwDmMAJCQsOBg4amZPKM7gcIxgIoCkD/JBupvZs90U5XWwaEYec/Iz0Wk0SJLE3Fm5ZKXZ2LazEa8/xMtvHmL1ijKK89OS4zEYday9YSHvvVlHy9Fe3nuzlnA4ypwFEx+VfaExK+XOiZnz03iATbS3t4/Z38lW3/niZz/7Gddeey25ubljln/hC19I/j1v3jxycnJYu3YtTU1NlJaWntG+hfgJBNONs6lAdA7uT0VRkhGUVtt4y6+wENKzhmhuhfz0UREKh1WrT1EUUuY2EDd40CCTpS3GLqfRP6Rlzx6QBtW4HIsFhvxBmlsG2efuheVhApEW9h/rZGlpPnPys5BliYw0G5+8ZgE7djXS3j3E1nfrqZpbyMI5+UmXl0arYdX6Siw2I4erW9n37hHCwSgLl88Y5xa7lJAlHbJ07uXgRvZht9tPK6bp6eloNBp6e3vHLO/t7T2nubgRWltb2bJlyxlZc8uXLwfU6lRnKn4XfGTHx61iIji/iN/pLDiPFYgScfV30WjHXwpkGcpmBTGboeWYNZkRNJJbr03vIiXXg0bSUKSrJEWThYyWgwfV7SoqRgtip9tNLCnNQ9+zEF/zDCwGA8FIlB21zfz0lYO8tdtHSwvotFrWrapgzkzVnbn/UBtvvtdALDYa/SdJElUrZ7JouXqRO7S/hV3b68U5dp7R6/UsXryYrVu3JpclEgm2bt2arAl8LvziF78gMzOT66+//rTbjkSy5+ScuRv8grX89Ho9sizT1dVFRkYGer3+kr7zm64oikIkEqG/vx9ZltHrP7rIsYCzK4B9DkiShCxLJBIKicT4jKdoNI4jJcby5RAZNnCkUU0tNBhgVmUIf2o7ZhNka4sxyer83PCwOiVZUKCmPQwPq2I5kgZRkC/TeySLL96RweH2Xn63pZ2+fj+/ix3EruRSllLA5ZfLZGTMIMth4Wj7MZrbXQRDUdavmo3hhGLXcxcXYzDp2b2jnqN1XUSjcS5fO2fCus4LTs+mTZvYuHEjS5YsYdmyZTz++OP4/f5k9Oedd95JXl4ejz76KKAGsNTW1ib/7uzspKamBqvVysyZM5P7TSQS/OIXv2Djxo1otWNlqqmpid/85jdcd911pKWlceDAAe677z6uvPLKMXWPT8cFK36yLFNSUkJ3d/eYsl2C6YnZbKawsBBZpJGcnvNYgUiSJUgoSQvwRHwBtbt6bq6WO76sHZMR9F5DD8++rODucZCXkkHseDxOXZ2ahpifD+++q84NxmLqsvR0KCtTjdZDB2VefTUHV3sappw2/Jp+Ooa7ONDg4RfPlmHWGXE6syiaYSSrqJ5ZszyEI4fYcOUcrJbR+aeyObkYTTre+tshWo/2kognuGJ9JRqt5pyPjeD0/P3f/z39/f089NBD9PT0sHDhQl577bVkEExbW9uY//muri4WLVqUfP3YY4/x2GOPsXr1arZv355cvmXLFtra2vjsZz877jP1ej1btmxJCm1BQQG33HIL3/ok+f8nAAAgAElEQVTWt85q7BdskvsIiqIQi8XGJEUKphcajQatViss87Ph5CT3kWjPjg5VRSYo2vO5/9lBNBLjk7evxO4cGybe2TPMazsO47SbueXa0QuWoij8fNteOrpihJpn03kkJVkjIjsb9u6F/gGFqGUIY1EvkjlAIqIj5NGhiRsotKaSY3Gw530JWVabVHgTgxgKjiJp4sQjGuibiU2Tik4H2bl+7Fl1LF0aprjIwLVrKrGfNEfZ2TrAjtcPEo8lyC9O58oN86atBXgxJblfyFywlt8IkiSh0+nGdDUQCC54RpLcRyoQdXaq6lJVNaEViIwmPdFIjIA/PE78RpBPumnxBMOEozGys2Q+9xknHR2jFmFuLqy7oxe3vZ2U7AhIoACSIYzRCsND0Gbt4YhHj5SZQWokB49HT9STin9wPuaSI1jTfSiFDVgoJtCVTTxqIeGbx7Gmw6SlB3ll22GuvaoSxwkCmFeUzlXXLWDbKx/Q0TLAu1trWbVujvA0CD6UC178BIKLhkRibLWh8nL45jcntQKR1WbE6w4QOEXdzBHLKX5SIInLq7YlSrEY0WqlMQGn2w4MEMlrwjQMQY8WSyATUyiFSDyOLxzFYvMRUgaIEiG1rJNgtIdwMA9DJJew24i3oRI51oIpq5eYowWzLkR/VzFFRQb8A3NRYofxBwO8su0Q166pxGkfFeyc/FTWfGI+2149QOvRXnQ6DSvWzBYeB8EpEeInEEwHTlVndvZstQD7JNaZHcnvG0l2PxHtiPidNB846FPFL802NhrVFQiwrbUJjRbmpucwVFOEq1/GfXzOLy8dsp1ZbN9Rgj5rCAydxA0+5OI2pLxe5P2lyG4nnqYSpJiRlJRWJEcP8WgYjXYWEZ+eRRWVtPUfZsgd4JVth7n+6rljLMDcwjRWravk7b8d4mhdFzq9lsWXzRQCKBiH8AkIBFPNyPxedbU6n1derj5XV6vL6+om7aPNVjV4xHcK8dNoVMGInSR+w361BFaKZey829ttLci6ONa4g8JEMVdcLnPVVXDllXDVVWpJUllWRTVLl0Zk/zxMHWUQ0SMZwpiqatEVdRCPg+zJxeyZRTwmI9uG6JOOYDAqpKfpuXZNJakOC8FQhNd31BI6qd9fUWkmK69SbxjqPmij8XDnxBwswUWFED+BYCo5uZrLSGLcSDWXgQG1mssk5bCNlDUbqel4Iga9Oo8ejsTGpEKEj+fcGU+ov+mPRGh1D+NwwPKMGXS0q8LpdEJWlvoMat/e1FS1PKnFLBFoy0A+sIhoZxaSBHJxG+aFjaRmxNGE0gg1z8ZiknHHBrHPOEZBgYLJqOcTa9TWSF5/iG3vNYyzTktn57BohZoHuPedRnq7hiboiAkuFoT4CQRTydlUc5kErEnxG2/5GQ06JElCUZQx1lXseGS1VjOaTnBk0IWiQK7Nym03m07ZKvNgY4SM8kEuWxskEFRYtkwNkDEbNUTqSwnXlYIiYcx1kSg/TK8rijbqwOwtw2KWyJzZx+6j6nEwGfWsv2I2Oq2Grj43u2uax42/clERxTOzSCQU3nr9kOgHKBiDmPMTCKaSM6nm0tl5ztVcxsTSWBIU0obs92LTGuF4mbN4PDEmPUCWJYx6LcFwlGAoitmkFigYcYNqJJmWFnWf7w72o+ihPD2DiuzRQNW6eoUmj4tYdhf2qwYpnq3uu3mXTMOgleIVecx2Z9LeJtHQkEW41YSmsp6gxod+Ti1F0TlctiyVhVfMoNnfRE1LFzaTgXmF2aQ4LKxZMYst79ZTd7SHVKeF2aWjZbUkSWLFVbNxD/kZcvnY8dpBNtxUJXIABYAQP4FgajkP1VxOjKVJ66tjZe/zeKmnKCuELcOIJlFKvHw2QX94XKNYo1FHMBwdY/nFEwn6++F/npbpPAL+SJSBYh8ZabDamgbZo60yf3ugnvrh3mSFF4feiD8WYemKBPX1HloGPEjxTtKzZ3LncjvLl9vROebyWtth0PrJd9RzTX4loWAmCTlKi6eNd+pbyHHaSLdbKMxLZfHcQvYebGVXdTO5WU7s1tEi3TqdltXXzufVP+7B1efh0P5WFiyb8bGPpeDiQYifQDCVTHI1lxNz5Reb67i6/4cY/AO0KAW0SRZWZPmRO7uID7tRGsph6cIx79cf78EXicaSyzq7FXa/D7o+idJcSLMFCWigr8PA0z/RJ/PvW/0uhgy9ZGdLLEotYI4zB6feREJRcJcEOVrRz9amNvwhD0bDfq6aUcTKzGIkyUxlZSU/2naQV9728vuWJiw9M0lNzcUyw0du2SBvHjrKLSvmoZFl5lfk0dU7TFefm137j7H+ioox0Z02u4llV5bz9t8Ocai6laKZWThTP8TSFlwyiDk/gWAqkWU1neFUk2S1teryD2uJfhpOjKWprEiwpON5LMEBhnLmYM214w9pqO2wq91oAwF4+ZVxgTUj3d0j0XhynzU1CoEAzCqTsdshpg1iMEBRpikZnxOOxXm79wgAC1PzuSxzBk69alXKkkSKwczSjCL+v8XLuKIsC4cT9g+2sq2nkYSisOtNMy/9ZzmHD0l0hPtpDfbSfEzi2Psl7N2tpe5YgP3H1ChOSZJYuXgGGlmmvXuI1s7BcceiqDST/KJ0EvEEu3fUM40LWwnOE0L8BIKpIJGAlhY4eBBMJrjnHli0SA2HbGxUn6uqzqmM2YmxNE5PG+kD9XgcamCNJKle1oEBCIWOv2hsHBdYo9VoGB6G+vo4LS3qkHv7FBz20covIVmNFDViSsbnvF7Xjicawqo1sDS9+EPHaNEZuCavgquyZyEBtcPdPL3rMN95JEFPg5NUfyFWK8gzWhgM+Rnq1+NvLaG+HvY0dTLgUTvRO+1m5s3OA2DX/uYxliqoArnsynJ0Og193cMcqRX1gC91hNtTIDjffFhC+yc/CbffPmHVXE6MpdEPeNHFQrh1o+4+vR76vAqhKFhMejTh4JjAmro6ePEFmaY2eCsex2FSUxa8vgRWp9q4FiAsqeJnSJiwWKC9O0bNYDupmXB5Vil6+fQBJpUpuRg1Ol7vrOPlPQO40hvJl2Zj8OUS8HuIWofQVzbj31uJ3pWGt8fF8PAgu4+2c32VGkWzoCKPptZ+vP4Qjcf6mFs+tgGqxWZkwbJS9r7byMG9zZTOzpm29T8Fk4/45QWC88lHJbT/6EcQDMK8eWqT2nMsY3ZiLE3EYCOqNaKP+pPrw2GFLo2CRqNQpA9hthiSgTUjw2w6FsNshuIiLenpcOSowuBwDLcHNMcbn46In1Ex4fdDIrMXWR8nRW9mpi3jjMdbas9goTwXVz/oinqQswaQkDB1z0BKyMQtHix5Q3g9ErHeIiIRaO0fYsCrfietVsP8CtX6qz3Sfco2TbMqczGa9AT8YTpbBz7egRVcFAjxEwjOF+c5oX0klqa9HYbthQykz8bubgdFQVGg3Qtxs4LFBFWhdtW9Wlg4Zpi5uXEMBtBqtNjtULU4jkar0N0FUkJLggQRSc2f08dNdHSAvaILhwPmpuQiSVLSw/vBgTh7j/bQ4DlKzfAHvO/ay76jvRw8qK5PJMAWSUXfW4BGC8GiRhRtFDlmwDCoNilN5LcSCivoMDIzW+0uX9PclfyMkDeTYECHxxeipWO8uGm0Gkor1H01HOyYkOMsuDARbk+B4HxxNgntJ1aL/piMxNK0HPNzsNqDVl9OhdRIrLORDm0eXqORXFuECm8v1qLUZGBNW8voMD2x2PF9qa7LhBwlJxc6WjXs3ydTXBEgboB4SENjrQ5ndpC8Sj+yLFHuyBr18DZGic58F53TTXq6WvWlpwe6uzsJ9mSiaZ9PVaWFFSsgL1SCR+ciIAXQFx1BOjyHaGsecWsvMU2QiL2fiopM1i3J5c/vu9h50MU7fyngWKORUEhG0WVjSWknHunmn+4cb3nOmpNHXU0bPZ1DuPq9pGWcW1NgwYWJED+B4HxxnhLaR1AUhXiwlbm23bgP1yENuTgWlTHG4phpw6m1UmgwMHdFOdwyWkB7ZJhmcwLXoGrVaeXjCe5KBIcdgk4dZRnQ4fPjksCSMLGqSqJywyBtJsgx2Wlu1B1Ps0iQuWofcqqbaFjD0fez2dFkRtbFsM9sRdL2oRRu4/ntizl4MIecHBlnawXBvH30KH0EegtRvFbkaC5yURspRX1s3JhJdooVKWRn524PkstFeVYeFgt4vNk0dHTw+hteFs8NsaTKOOa4WO0mCmdk0nK0l5YjPUL8LlGE+AkE54vzkNA+QjQaY+ebdbTsqsV8cDf5sgdNSQomqwM7QdIGW3DaQ6R/+TaktWvHzC+ODHPQ7SahxNDKevRaVbBDSoBIFFIsZr76Vdg74KOmBxZk2fj0UnipwwV+KDSn8fyvVddp8erDRFJ6kRIa7H2XU/1uCg2HwWyGmYMzcC6sQXa4YNF+ql9fg9FoIV1vo6k1EyW9D11ZG6G9c4h2ZGApacOW6yGUiJBI6DlSk0og4KG4yI1dr873pTj1FMRttHd5+OPzbqoWGsdNnxaUZNBytJeeDlHz81JFzPkJBOeLEyfhTs4zG0loPz7vdi6EghFe+9M+9u3qpfn1evoGIxxKFNE8ZMc7rCM/w0bZqrlkaKNIe/d++DC7B0EBsyE1mTQeSgTweKA030xxMShmL5mZML/USow4HQFVTLTDadTXQ878FiIpxwAw91Th602htVVtcSRJkAhYCVRfhuJNxeqIkbFsPwcOJjCbwdJfgM0G1tJ+0nMjzJ1lYHG5FZ0enn3FRUsL9Bxzqpao4iWhxJPfwWRwYLfDkSb3KcuiZuelAODq91JfFx4z7yi4NBCWn0BwvhiZhGtvVxPY8/NVV6ffrwrfOSS0n0j1riYa6z3s3zXEzKiHoDMNRa+hLwFtIQ17GxSWhRQqM0vIr23AfNIcoyzDjX8XZ3/DIP39YM1JJRZTh9ky5Mdsh+vXm1FI0B9Qe/vlWK20+wZJKAoOvQnZbyYUjULhYQBMAxXo/bm0udSAVosFolE1nx9FJni4CuuK7TjzBxlqaaKtrYxrVtpoz7Lj03rIyuihWCpkQJdOzOijtsdFY2MO0aARs96APxSmze3BqU/B4QCj3o5ODz6vB49HAcbOsRrNeiIxG7t3enl1+yBxKed8tVAUTBOE+AkE55OKitGqz/X16hyf0agmtN900zlfdV39Xg7UtPJu7SCyRovRlCCh01IUi+GVJA5naumJakgMxBnMtiMHIxTtOkKlNZXMNFuyi0O/5yhLl0Y40qjHN+TA1Qd6Y4yMogDl5bBsoYUur5dYIoFZp8NhMPK+S+2sUGxNw66RMBa2EInHMCes6AfLGHbD0JBqXSUSx3v7Hb8CJYIWgvXz0JVX45x9hMihYqxWHblSNl0WD+gGkYYKscVT0OlbGJS9JBSFSFii9ZCdoK6fpn4/Wm8K6ekwq9xGNAKyNozRFAN0Y45TXR289Z6ToV4v2YU+sgpVca+uVu9NzqG2gOACQYifQHC+Gan6nGyzcO4J7aAGuOx7t5EDbUP0G2JkWozMGgjikQNoNCa0RgikSCSAbreMLRYhQ6uj2R2heetBbBYjiYRCOBIjFo+TlSXzj5+eRSQo4/VCX2iQepdCms2Mw2zkg9YeAIqdTqJKgmM+NbWgzJ5JalqMzHlNdPWD4irjg50SAwNqFbVoFAYH1apqBsPo+CNdBYRSjmBx+nDMbcXvn4lJ5yAUgkDUg3M4gcNhJBaW0egShAjR3W2iL2IktQz0qSGkOHR3g9utwZato7g4Slp6hBPFbySVw+szkZEBBl14TMZJba2acVJefs4/iWAaI8RPIJgKZHlC0hlOpKvNRfXhdloTPnxZGkxGPQ3DxUiuHlw2G+5MmfYc0CsJ0EkQ8BErzSSjNA/PcBCvf7TfnUYjc/mSUnKzHMllf9rViyRBWY6aX9c8rNbQLHGm0uJzEUsksOuMZBltNPtbmDU3TPffTLzx23w0strE1miE/n7VynK7YXhY7fYQiYDbLaHVzOSyO2qwaVs5+JtSIlEz/bO1xDUxOqr9pOttBEpN5M3ys7MmQEqKiWjASDgMEiEsOvVeorMTdHY95eVRgqEIMBphO5JxkpNrIDQM8djo956EjBPBNEWIn0BwEaAoCvt3HqXb6yfqABI6PHo/b5fkUhENEMZLn9VCOBUMoRjmcJBjTjsV5TPpiQeZNyeb4hQnJoMOvV6LyaBDpxstS9br9tHr9iFJEhV5mQwGAwwFQ2hkiUKHgy3ddYBq9SkoHPEdJT0NUsIzMZtkZBl8PtXNWVERxx/y4vaG6erKJBxWa41qNFCZk8vSxQdwDfnocXtxddhJzbejzxok4XTTWGPDajJTXuWn8WCQykooCBs5OAxBbwiXS/2MoiKw2fXo9H78wciYYzWSypGTeVz8ouEx6yc440QwTRHiJxBcBPi9IYZcPkw6LU67EXcwQSAYQquR6EgvJ8XTQSgaIa7EicdjyFYn8xbOoSR/Jl39Hg629zAUCLJu3kzMBv2YfUfjcbYePApAWXYaZoOe3S1qdZRCh5OIEqPF5wKg3JFFs78FfzRAT7uB1r2FLFumWmN6RwMZJfuw2r0Eggo93VDz3kIirhWkp8OSJXDzzTr601J5oX6A/NlDpJnt9HutBB2DaA1Byssh4jDQ2wuJWBSLBUw2HW4bhMMx8vJUV6rFAgcatUTCEI3Fx3yfkVSOYEi9/CUSY4tgT2DGiWAaI8RPILgI6O4YQpIkZuanE455GY4NkXApyJ06YlETvfoigjEP/sEQMZ2Ra5et4MqF6XgjETIcVg4d66bD5ea5dz9gTWUpM7JSk/t+r6GVYX8Qi0HP5bOLCUaj1Pb3AVCVnUvtcDcKkGd24tAb+Ut9Iwfq4Nib5dTs15KSAmXzmlm5ZDsWi5riYTZqKS6JYTR+wKKiQhbPz01Oe7Y32BgYGKCkwofGAa2KDncWZGVGKY/BsYjMUQ+YlTh+P5htquVoNCqMeGndbtDpFPSGk4/UaCrHvj3g1MGJkaAT0EJRcIEgxE8guMAJBSPU7G4CYNGCIhw9g3jf95IVSyBpUvG5zcTdccw+CTkOjiw9Id8Abx7zIEkybjdIUS2xUIhMq8JrNQ3MzE5DI8u4fAEGPH4k4Op5pZj0OnZ3tBONJ8i0WMixWdnSpKYzzE3J5Z3DXby9K0xg2EhqoginE1Iy+8gs20pnp4JdNxs5sJQhlxld2g70jnp06dtJKP8HOG5xhqz4/eDq9tGxHaLpOiQJQpEYaTKYM2TkCKRlKLQfgVkVJ4qXmtbQ0QH5xep8onRSmkOy7FuTQs8xcKZIyVSOCcw4EUxzhPgJBBc4Qy4foePzWsfqewj4Q8xPScWWb2TugiKsqQX0dQdoaTzC0e5Wan3D7D3YRrTfiOLLYcilIxaLodVqSLVHmV+oBVxjPmNJaT4FaU7CsRgf9KpRnotz82j2ufDHIpg0OorMaTy97x2CASg0FmPMk+kpGSZv3mvYbDHamwrYWX0lZpNMRwe4Bi/j6ls78Xg8vOreR0HKSm6+GfwDNoaGIBb1YTaDZNER0MHwcJTdh6FwqYzWAYsWx2kbUoNXovmg14HbA53HBWzpMogkxpdRBTXg9v/+X/ifH8LgkERj44RmnAguAIT4CQQXOD7PaLRiMBDGYjWydFU5M8qzMRjVEP/ZFQauuGopDQdzeO7P71PtGqTTHyeh66NcswinyUIbbfS5JHZ7ddx2pZPKWSZSrSbSbBYcZrU+5rvtbQSiUVJMRmampPK7ln2AavUdaOmnxzOMQafB3VBMWBtn1Q2v0z8YoLczjYNvr6erU8ZkUoNfZFlPX9MKMnPeICq3smPHStraQOfQo9GCYogi6SEug1YDepuCLwD1jQkqPgHz58ncNAd+96c473aALyZjiowKWGtvjM5e0GlP3U+wsDDKqlUQVzQsWT1hGSeCCwQhfgLBBU5OfgqyLCX71y1aOZMZs7LHbSdJErPnF3DdcJBDP96PZBtGyhvGZTiCQ1OBzZRAa4ox0AtvHgryyTUFOE2q6CmKwoG+Xg4ct/rWlpTS5BtgMOzHIGuZn5LHU9U76ekBX1Mx7oMGCmcfwlg0hMNmZP/r19PdpScQUC0xg0GNyNQpuVgsIDGMIgVpbTUx4IeKW6G3A9r7wWJNoCgQC2uIRkFJqIEtJp2WilnwhS9H0b8BWkXHrSukpIDVtarWsNmkH3csAAL+MJIEBQVG5s2bjF9GMJ0R9zgCwQWO1W6iqDQLALPVSFFp5kdun54/E8U3gxS3CQIR3LE+Gh17iOpCYA9hS4nT4vLxw7eq+VvTEbq8Hl460sC2ZrVG5/ysbHJtdvb0twCwIC2ffQ2D7KsfJhjQEG4pIzM7xKyqPQwPw+t/Xkp7q5lQSBW+aFTN+ZNlGB404R1yojdATOrFaIShIQmDQbXCcnIgFIsTCEIkpCE/H7LzY1itYDxeHiYUjeB0QmmxbkwP4GAoCoDJqDv5EAAQ8IWOH7NTRMUILnqE5ScQXAQsWD6DcDhK+dx8NJqPvqf1+2Vk00KyNG7CrmbcBj+JRBiTbMakWNDaFcI9dkJhD7X9/dT29wOgkSUuLyhiUXYO7/e30twXQIlqsWtz+Z897xGLg9U/A5fHwNwlbyNrwwx3pVC7twKtVq3jKUlqYElTE+h0qgWYUpvNjMph9JZejLpiAMIhSHUorFoFrYk4PQ5wZmvIToNGJYZePyp+/rAqciemaMTjCULhjxY/v0/N7zOZhfhdigjxEwjOF4nEhJc0G8FmN7H2hoVntq0NTGY9VuMC0oaHCLkHCKWHGDT3kh0vRAlb0GZ6WJCfgcEcpWV4mAyLhbXFpYRcVn76Yi8vt7Xg84G5pZTd8Q6CmW4yUnQUG0oJF3ZhyzqMzwc1b1+OTifj8ahpBGazavnF4+prWYZoVE84DD6/gtkEqVkRAkFIs+rVFAZHCKsF7Ojp7ISMZSEcDrAdz2MY8qnFtUfmJRMJOFQbpK8XLBYtet2pxW/Y5VPfl2I+18MvuAAR4icQnA+SLc3r1fIiU9hCYCTPbf/+DDKsJfhdAfrtfqL2BNq4HZdHQ0aplz5jJ5WOHL44cxnHGjX8/AmJdw65OWKrRwHMAwWYelMwLKkm4IZj2yrIlrSs+8wOghE4tHc2/Z35SXenw6HW9pRlVfgk6XhXBykMEsSjehrbYc0tQYIO6G41gRuCtiChMHQeNVGQrpBTGUSSIMVkAsDlVcUvzWZOHuYPagO4Q2DUmfH1SuMOs6IoDA2oJVxS00U2+6WIED+BYLKpq+N4S3MoKBhtYzRFLQRGOytJ9PVUYE/0EuqK4JHiHFGOkVYgU1ARIq5kUDvczaEWP++8YmMoEMaVNYw2qqBxpdP+5gyyV1aTZ4ridzkZaigic+EhvEE3douZ3iMryclRS4WZTGr6QUuL+vnxuGqhaTSgEEECNLKBSARWrgngT4HmPUY6j0GnKQhWWDbTxP/ZEOVtfxxJAqfRiKIoDPqDAAx2m3nmf9TDbE8PoLOATjKf8jB7hgNEo3G0Wg12YfldkgjxEwgmk5EWAgMDasuAkaSzKW4hMNpZycoH75dh6A6iNQyi5Hux5YfQWWScZj3hsI03D3ro0Xmw5UO4BUxRG0PvV+Ao7MVZ1k40Br7D8zGZQ5Qt2kc4BAcPLEGnVd2S8Tg4narmm0zqIQmFVKsvkQCDKYReD9mZeqwymFOCmNPh8k+bMa1TeKYtiFYPX15kxhsKQD04DEa0sow/FCEcjYECW18zJg9zz7CfSAScNjOFWeMPs6vPA4AzzYoschsuSYT4CQSTyUgLgYKC8dnWU9xCYKSz0tEjM/jr77vY2+el1xAhJofwR6HKeRWSq4RXGjsptsvEewwo1UY04RQU8yB5V+5H1sLA4RkY4ynMXPM3ZE0YvzuNowdnYzCoFVO0WlXrtVo1yEWrVQXIZAJnSpySWf2UlIA9mkavDFH9EDogxWBHm+MjPZTAIGtJMRg5MqC2Tcq0WAHodR+vPh0109igoaAAQCEUVZcbdbZTHuaudrUjRVae87wec8H0QdzyCASTyUgLAYvl1OstFnX9FLUQkGWYVa5j1ZU5ZFkMmEIagh4LoUA+4bgFJWDA6HaQTybp4Vx0nhR0hY3kXPUuWkOU6GAK/fvmkFPcRGnlMTRaicM7r2J4WMZqVecX09LUuT6dDvR69asajZCbC/bUflJSY1jNRlqOplA+J4rWrlplKfoUugNuALLNdiRJotOrrsuz2wHoHlKPm0VjSx7mcMxHQomhkbTotepxP/EwK4pC93Hxy81PRXBpIsRPIJhMRloI+P2nXj9NWgikZthIMxkxhzVoQzpc/iBv9xzlmPYDDAveYzB/K9Ki1yi6YRvGGQ1I/z97dx4dV3Un+v57atZQVRpK8yzZGmzJtjybwQbixCF0Oganm07SD8JLJ933GdLg1+s29MoDkr7vme4mhNuvSdK9OkDuWs2DpgMkBEICDhgMso1ledBszXNJJamqpFLNdd4fJ5YtW8aSLXnS77PWWZJO7Tpnn4OpX+199t4/HXg68uh//yYscUGWrz9ALApRz1pWVThYswb+x/+AF16Au+7SGrmdnVoATEzUfrrdkJE3gM0Gna1ZOBwKd3zZjQIkGOKJ08cx6NeCX1acnZiqMjipjdDM/sP9GnRrwS8/3Tp9mwMhLUBaTFrAhJm3+fRycEajnrQsafldrueee47CwkIsFgubNm3i8OHDFyzb0NDArl27KCwsRFEUnn322fPKPPnkkyiKMmMrLy+fUSYQCLB7925SU1NJTExk165dOJ3OedVbgp8Qi+n00MreXm2I49lOpxCoqLjqKQRSHFYSLSYsQTBNGlCCepyTk7Sox3E4wOuBmD5Eev4kJoMB5ydr6flgLX6fwobPv4eKn5A/hUSqcTqhuFhr2VVUwDPPwI9/DPfcA2vWQFWVNsk9MREKSkwf1vMAACAASURBVHtAhdz0bL77XbDmatkiUkwpqKrKwNSZ4OecnCQcjWI26HHExROKRBjxal8qqius07d5KugGwGLUUjyce5uH+scBSM9OuuicSPHZXnnlFfbs2cMTTzzB0aNHWb16NTt27GB4eHjW8lNTUxQXF/PUU0+RmXn+KkSnrVy5ksHBwentwIEDM15/5JFHePPNN3n11VfZv38/AwMD3HPPPfOquzzzE2IxnRlaqY26yM09M9rzGkohkJJmpTDXQeeoB683SNCl0BU/jtESpKQ0gu/YFoZOWMgonKRgwoEzHM9wGCo31JCWPYDFbGS46fM0njAQCmkDWZ588sxsju3b4Y47zkxzTEiAsDrCYHgIs0lhbX4xJr3Kb4e0PIFZcVkM+r1MRUKYdHoy423U9PYCUGBPRlEUelxuVFXFHm8hKcHC3XdDd0+Y7gEPNiuY7cl4POff5oFubdHurNzUq3W7bxjPPPMM3/72t3nggQcA+OlPf8pbb73F888/z6OPPnpe+Q0bNrBhwwaAWV8/zWAwXDA4ejwefvazn/HSSy9xxx13APDCCy9QUVHBwYMH2bx585zqLl97hFhsp4dWVlfD6Ci0tmo/16694tMcLkRRFNZtKaHYkYTNqxCajDLpDTMZimKw+fmzPw+zZnkKnvZ8xofiqayE/313C3/0J/VkZkJv/R0cO5KMosCWLbBhgxZw6uq0WR5NTVrgKSzUWn7FxWDNrCc9HfLTSzAbEnCFXPijAQyKEf9ABv/5vou2NrBMOuju1HGgYQy3G4qTtOd0XcNaC64oXfu7ogJ2/ek4mZkqwUA8nR1x593mcDiCc1BrGeYU3DjBLxKLLNg2V6FQiNraWrZv3z69T6fTsX37dmpqai7rek6dOkV2djbFxcV84xvfoKenZ/q12tpawuHwjPOWl5eTn58/r/Muastv7969vPbaazQ3NxMXF8dNN93EP/zDP1BWVraYpxXi2nN6aOUirfCyEPKK0lhWmMaQdxLvpI9Jb5SRiQCZCQYy8/08+uiZ6usTW8G2HxWIuNcx1lTEsmVaNvbTl/RZszkiMT+e4CkAki3aqtK9U32MuODYu9n8Xy/pmKgcIWaGV2sdWFU/ibf6SYxX0B1NYtdOlW6XFsQK05Knr0FvHuOWWyDbkUpexvm3eahvnFg0htUej9Ued0Xu65Xwm8HfEj95+fMVp/6wYIDX652x32w2YzbPXAbO5XIRjUbJyMiYsT8jI4Pm5uZLrsOmTZt48cUXKSsrY3BwkO9///vceuut1NfXY7VaGRoawmQykZQ083ltRkYGQ0NDcz7Pov6ft3//fnbv3s3Bgwd59913CYfDfOELX8B3oYf/QtzIzm76nL0C8zVCURSqN5VQmGLHOgHqJLh9KoNTE9R7mokRobAQKitjpGaMgRLDasrHpluP2611cZ57SedOMwAt8PVNvoNKjDhDOvGGDALRAHXd/ezfDx/8Vy5TBi+W5ACxsA5PRwoj0VE8HrCEbJysM/BP/+KhbyCC2WggM0kb/BKJxugfcqMosKE6edbb3NOhrVOak586PRhGnC8vLw+73T697d2794qd+8477+RP/uRPWLVqFTt27ODtt9/G7Xbzn//5nwt6nkVt+b3zzjsz/n7xxRdJT0+ntraWrVu3LuaphRCXIDs/leKSDE6NjOOeiDE1YWLM7qXXN0q9p4E1yasBmAhpGR4SjQX0Tyr4/dqanU6ntli13X5mWmN8vNbTW1sLEXUcNek3hFUvesVEZvwtADR5WqlvitLXnAwTqSRvbmIsBJH+dFLsOsK5I/inYHLSwcZKONw1QrAZtq5JRafTTtQ/OE44EiUx3owjJfG8awuHI/R2aAMxCpd/duaL682dWTuw/WH6x+U43eLr7e2dcbxzW30ADocDvV5/3ihLp9P5mYNZ5ispKYnS0lLa2toAyMzMJBQK4Xa7Z7T+5nveK/rV0+PRRm6lpMw+tyYYDOL1emdsQogrR1EUCkrSSU+MJzVkxjRpwe1JpHtinNqxBvqm+lAUHSmWSgDGAscZckZpa4P33oMPP4T334cDB2B4GDo64K23oL4+xi/eauf/+90bvP+hl/ERG4W2ncQZ0vFFfBwf7GZwEDwNFdjSQgSTRgiHQTeQg842icnmJxbR4WpJxe2NYkkdw+WCRDVtuu6dvdpAlsLc2Vt1vR0jhMNRrPZ4HBn2K3NDrxCDzrBgG4DNZpuxzRb8TCYT69atY9++fdP7YrEY+/btY8uWLQt2bZOTk7S3t5OVlQXAunXrMBqNM87b0tJCT0/PvM57xUZ7xmIxHn74YW6++WYqKytnLbN3716+//3vX6kqCSFmkZZpJznBQoJngkSfmYBPz9jEJG2GEWymI3zRaMduLsflr2Ng2MtHx/eTkp3LhCeR1BQ94ZCe0dEYHx7ygy6A2e5h881t5JV40RuhvSWd4/vuJOW/xVFaHuXoeB2BYAy/M42QKw3Lmi5iqkpk1I7eZ4XiDhQFYq4UwgED7pALgzWG6jFjVrUWXiQSpWdAm7helO+Y9bo6WrTnQcVlmdLluUD27NnD/fffz/r169m4cSPPPvssPp9vevTnfffdR05OznS3aSgUorGxcfr3/v5+jh07RmJiIsuWLQPgb/7mb/jyl79MQUEBAwMDPPHEE+j1er72ta8BYLfb+da3vsWePXtISUnBZrPx0EMPsWXLljmP9IQrGPx2795NfX39efM1zvbYY4+xZ8+e6b+9Xi952npFQohzjLkmOPFpJ6s2FC1oZoKklARsiRaseiOxiMK4T8+UF8bMHk55hrDoPqTMVordtIYPmmrQJ7Ryxz2tDA5q63gajeCbBL+23jRx8ZCYAO5xM23HK8m0rmHYaeQXb/q5OeUw7rCbeLMBfe8qVEOYYFofOh3EunOACAbHCKoKUWc6JhMEzSOEwmBVHNhsWhDr6hsjHIliTbCQNkuX54TXPz2/r2iWLPfi0tx7772MjIzw+OOPMzQ0xJo1a3jnnXemB8H09PTMWDt1YGCA6urq6b+ffvppnn76abZt28YHH3wAQF9fH1/72tcYHR0lLS2NW265hYMHD5KWdqaV/6Mf/QidTseuXbsIBoPs2LGDH//4x/Oq+xUJfg8++CC//vWv+fDDD8nNzb1gudlGFAkhzheLxfj4vUbcY5NMePzc9acbFmyBZp1OR2llLs6xSYLeCeKNenwmM26zlXiTn26Ti7AaJuCNo+ZIKdGpEErMj6oECUeiRKNRolEFvy+OSMhCkjUBTzCT/vZlOIeMZBf5WL2tlxbDKawdARLMRqqtG+gsT6Al2kggGiExFo/Zk4Y/ZQCDPkrIHYfisZO5JkDM7MbrgtuK06fXBmhu01p1pUXps7bqOpoHUVWVrLwUrLYbZ5TnteDBBx/kwQcfnPW10wHttMLCQtRzF3s4x8svv3zRc1osFp577jmee+65OdfzXIsa/FRV5aGHHuL111/ngw8+oKioaDFPJ8SS0Vrfz5hrAvdUgFhM5VTDAGVVF/5iOV8rVufTcqKXYe8UetUAUxEmJ2KMGkykmuIIRT1MDcboCurRm8Cks4A/HZ/PxGCvETWmB1VbxHpSFyMUmyKSc5Sk5T4itgnawhB2gv93VnTtG/mQRAz5g9iWj+ByKbg/LSfRqhLKHdQG03TmkOlQsOc5GXFBqiWJe++xaBkaxn04R73oFIXS4ozzrkVV1ekuz2Xl2Qt2j8T1bVGD3+7du3nppZf45S9/OT0/A7Q+27g4+fYlxKWIRqKcrO2ib8yLT43hngpiOdxO4fIMzJbZs5bPlyXORFlVHl5fkA63lzidjojfhNGi0DMepciewbGOIFMBIymOIEZ9EOJdxFvBkQgxVUtZpNeDogeTCnEGbQRowK/Q15jCZF8myQUFlJUZGQ1P0GA4hVkPlZYiumI2xiyD6ONC6AImkvUO8vJj+A3DZKXBX9yVMb02QNMfWn2FeanEx5nOu5bhQTeTE36MJgO5hbM/DxRLz6IGv5/85CcA3HbbbTP2v/DCC3zzm99czFMLccNSVbCnJBDrGSYrN5m2pkFCwQhe9xRpmQs3inHF6nxa6/tI8gWwoCPo9hMxKKTHJ9HQ72HQE0fIHEfXiIWk5CCGmI5YBLxBBSWmMDWhR4kaMGLAGI0jNhVPcDwBZ0s60ZCJ+IQYrmwPTrsLd/wQDiWGpyOZ9el5PPFSgBfreojE4M7yXCpSdJzsHqJhOEJOhpnbN2kT24OhCO3d2ty98pLZn+W11vcDUFCSjsGoX7D7I65vi97tKYRYWHqDjmgkhj3OTG/bMCXpSaRl2nFkXP48r7NZ4k2srC4geDBCx5iXjLR4fJNRfKYwxmAC4SmVhCw3ITeMBw2YFBN69PhjegIBBdUAijFGUBfCaAyhpHoIpkN8SRsmvR6bDVz6KFY9WBRIDCWRE11JczOkjrRRWBwly2rlzhUZqGqMj/sGSEqC6qKs6bl9p7qGiUSjJNvjyUw7//p9kwF6/jC3byG7hcX1Txa2FuI6oygK629ehsvpITlRe3yw7qZlizJ8v2J1Pq2NA2SHI4yFY8SMYPAb0Ct6CPowkUgGJsYCMQKRCDElis4SwoCeWMSAHh06RUfYryOqqugMMYxGLYmt0Qh+j5G4cQf5FgeJoRSi8QptxgF63F5ysvTsKFmGTlFo6h9hwh8kzmSkIleboK6q6vRAlxXLslBVhe7umavHtdT3EYupZOQkL+iIWHH9k+AnxHUoLTOJgpJ0utuHKShJJy1zcfLSGYx6Vq0v4uAHTQT8AVJS7ExEQgRDfvLVFIYGYySm+UlLjRGNGIiiYNBZcLuMRHR6Jrzacz6LDsxGPWlmK84OK+Z+K0rEiGE8npzbFKw6iBKlN+JkytGDyQS35heQZIkjEo1R26Fle6guysao17ou+4fceCb8mIwGwv40nnoKmpu1pLUWC5Quj5BkHMBug4pVMmVKzCTBT4jr1ObbyknPSqK4bHHnrZWUZ9J8ohd1VEWv6kiwWbEGzSjpAQLuRCb7TdjsOkxGCIZVPJMxUhIjVG+O0dRkYMilkJIZQxvj5sajc+OeACUQT3JuHD6HGT8Ko/phBifCZGXBmoJkqtK1kZt1XQN4/UHiTUZW5mn7VFXleJMWEC36dH78Yz0uF+TlnckYdfTQICY1zO2fi7+hMjiIhSHBT4jrlMlspPwKtGh0Oh03fW4F77x2hNhEkJJ8B84pPwadjlRDjMZmlZFhBT869GaV3AxYVmYgM01PAnDoMPj6dViSDJgTDKRaFNzjfjBOEZczhVMP4RB4x8FutnD/rTl8qSwNRVFw+/wc7dAGrNxcXjjd6hsc9jA04kWn09F4IhuXS8sgcbrn12qNkWbvZXAAugfykext4lwS/IQQF5WaZqV6cwm1H5+ivaEfS4KJNEcidqtKqsOPxxMlFIxi+sOi1lFVBW+UbJueTdUxGttUxkajeN1RjAY9W7LSMeoT8XhUpsaC6C1htuTYeeDLaaxcoUUwVVXZ39hBNBYjz5HEsszU6f11DVpi25TEDN4/ZSYv70zgAwhMjhIJ+7EnGel1ZtLTo2V4EOI0CX5CiDmpWJWHxWLk2OEOfBMBAr4xLBYTZfkpWErjiSrgnfDjmQgw4QugxlTwx8iNh8yVKkEMBBQ9EV0Qu30EneLCYUon35ZDRqp5Rt69cCTK/sYO+se86HU6tlYUTQ/oGXBqrT69Xkd2Wi6BgNbVebaJMS04JqdnMzSuZ2LiSt4pcT2Q4CeEmBNFUSguy6KgJJ3mk3001HUTCIToatVGXGrZEmzk56WRlJpIVK/gGpukd2Ac56gXAyGsOoXs3GQmlQhOzyQjISejY8OsiEsnNpKELc5MOKry2kdtDLv9WMxw983F2OMtAMRiKp8e7wKgrDiDtBQTFov2jO90Bp6Ab5ygbxxF0YEpF4tFG/0pxNkk+Akh5kVv0LOyuoDyVXkM9Y3R3jJEb+cIE54pJjxTdP4hGFosJrLyU1iZn8b6Vfkcre9lcMRDX88YKfYEbl1eQPvoOAPjXup7ndT3OhkZ0UZsulwQCxtxRJejttu5+26oqNDm9Y26fZiMBqpX5mEyakl06+q0Z36g4h3Rcg3GJ2UzOGRh7Vqm1wAV4jQJfkKIS6LX68gpcJBT4CAUDONyenENexl1enEOugkEQnS2DtHZOoTFYqK4PJPcynxOnhpkzOPj09ouKkuzWbs2h+aBYVo6Ahw5FGJyKkymPYnC+BKCUybq6qC3F/7b/xGhvr0bgOrKPCxmbSm3u+/WXm9shPSUMfyTbiIRHZ6RAtIyYOfO8zPMCyHBTwhx2UxmI9n5qWTna4NSotEYLqeH/p5Ruk458U0EaDzWg6IorNpYzHg4RFv3CCdb+hkY9vCFW1dw5C0jliGorlCnV3Ax27QWXWMjvPgfvaxYEybJFkfFWUuZVVTAd78Lr72mcuyTToJTEGfPYd0GCzt3Mr0GqBBnk+AnhFhwer2OjOxkMrKTWbOxmP7uUVpO9jHYN8bxQ+2sWl/E9pvLOXCkndHxSf7jF/U0Nq0gL888HfhOUxRISR+mtWuAnCLYsbUIvX5mU66iAu77+ig2xUMkouPOrxZQWi4tPnFh8k9DCLGodDodeUVpfO7La1i9sRiAE0c6GWwb4c7bVpIQZ8Y1NsWo/zgYRs97vy8wii/SRiQCOWnZ5GUnn1dGVVVOHOkgKQm2bs+lfIVZAp/4TNLyE0JcEYqisGp9EZY4E4c/bOFUYz+hUIQvblvBLyZb0Rt89LmacdjTscVloCh6gpFJXN4OQiGVBFMGm6oLZz12b+cIYyMTGI16Vq4puLIXJq5LEvyEEFdU6coczBYjB95roLvNicGg48+/WkX9iV6a2gYwm4aZCAyfeYMKUxMOblpbQkHB+Yt3R6Mxjh3WRniWr8rDEn9+Tj8hziUdA0KIK66gJJ1tO6pQFIX25kG6Wgb5zv2F5KSsZMxlIxIyo2AiHDLidqWT61jO3Xcrs3ZlnmroxzPmw2IxsWKNzGkQcyPBTwhxVeQWOli7ZRkARz5uJdk2zt88YufmtVUYw+sJjG7AFN7ITeuW89d/rZt11GbAH+L4p1qrb/WmYkzmhclkL2580u0phLhqKlbnMTrspavNyf53TvCFnet49NFEenpm5uW70OCV4592EgpGSHFYWVaRdWUrL65r0vITQlw1iqKw5fYK0rOSCAUjfPD2CSKRCIWFUFWlLUZ9ocA3OuzlVIOW8WHdzcvRyfBOMQ/yr0UIcVUZjHpuu3MVidY4Jif81NW0XfQ90WiMmvebUFWVwmUZZOacP/1BiM8iwU8IcdWZLUa23F4OQGtDPwO958/3O1t9bRfjo5NYLCY23FJ6JaoobjAS/IQQ14TM3BTKqnIB2P+bk3S1OWctN9AzysnaLgA23FoqUxvEJZHgJ4S4ZlRvLiErL4VIJMqBdxvOawG6nF4+/O1JVFVlWUU2BcvSr1JNxfVOgp8Q4pphNBq4467VFJdloaoqB95twOX0MuH14xwY5/dvHSMcjpKZk8zGW0unE9wKMV8y1UEIcU3R6XRs3laG1z2Fy+nhN7/4dMbraZl2bvvSKvQG/VWqobgRSMtPCHHN0Rv0bN1RiSPDjsGgx2jUtuz8VO64azVGo3xvF5dH/gUJIa5JCYkW7ty1/mpXQ9ygpOUnhBBiyZHgJ4QQYsmR4CeEEGLJkeAnhBBiyZHgJ4QQYsmR4CeEEGLJkeAnhBBiyZHgJ4QQ4pI999xzFBYWYrFY2LRpE4cPH75g2YaGBnbt2kVhYSGKovDss8+eV2bv3r1s2LABq9VKeno6O3fupKWlZUaZ2267DUVRZmx/9Vd/Na96S/ATQghxSV555RX27NnDE088wdGjR1m9ejU7duxgeHh41vJTU1MUFxfz1FNPkZmZOWuZ/fv3s3v3bg4ePMi7775LOBzmC1/4Aj6fb0a5b3/72wwODk5v//iP/zivussKL0IIIS7JM888w7e//W0eeOABAH7605/y1ltv8fzzz/Poo4+eV37Dhg1s2LABYNbXAd55550Zf7/44oukp6dTW1vL1q1bp/fHx8dfMIDOhbT8hBDiOheKRRdsm/M5QyFqa2vZvn379D6dTsf27dupqalZsGvzeDwApKSkzNj/H//xHzgcDiorK3nssceYmpqa13Gl5SfEdSwaiUp2A8ELpz4hLjHhso/jn9S6Fr1e74z9ZrMZs9k8Y5/L5SIajZKRkTFjf0ZGBs3NzZddF4BYLMbDDz/MzTffTGVl5fT+r3/96xQUFJCdnc2JEyf427/9W1paWnjttdfmfGwJfkJcpxqP9XDscDurNxSzsrrgaldH3EDy8vJm/P3EE0/w5JNPXvF67N69m/r6eg4cODBj/3e+853p36uqqsjKyuJzn/sc7e3tlJSUzOnYEvyEuA4N9I5ytKaNcCRK3cF2kh2JZOelXu1qiavkgeU3YbPZLvs4Xq+X/w709vbOON65rT4Ah8OBXq/H6XTO2O90Oi/rWdxpDz74IL/+9a/58MMPyc3N/cyymzZtAqCtrW3OwU+e+QlxHWqt72cqGKZrzEv/mJeP320kHI5c7WqJq8Sk0y/YBmCz2WZsswU/k8nEunXr2Ldv3/S+WCzGvn372LJlyyVfi6qqPPjgg7z++uv8/ve/p6io6KLvOXbsGABZWVlzPo+0/IS4zqiqOv17SlI8kx4/kUiUWFQF41WsmFhy9uzZw/3338/69evZuHEjzz77LD6fb3r053333UdOTg579+4FtEEyjY2N07/39/dz7NgxEhMTWbZsGaB1db700kv88pe/xGq1MjQ0BIDdbicuLo729nZeeuklvvSlL5GamsqJEyd45JFH2Lp1K6tWrZpz3SX4CXGdURSF9OwkejqGCQei5KXaWLOpBLNFIp+4su69915GRkZ4/PHHGRoaYs2aNbzzzjvTg2B6enrQ6c50MA4MDFBdXT3999NPP83TTz/Ntm3b+OCDDwD4yU9+AmgT2c/2wgsv8M1vfhOTycR77703HWjz8vLYtWsX3/ve9+ZVd0U9+2vkNcbr9WK32/F4PAvSny3EjSIWi/Hb14/icnpIy7TzhZ1rZ3zIiGvXQn6uLfRn5FL6zJWWnxDXIZ1Ox9YdlbTW91NamSOBT4h5kuAnxHUqIdFC9ea5jWwTQswkXxeFEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5EvyEEEIsORL8hBBCLDkS/IQQQiw5hqtdAXF9icWgqwtaW7W/S0uhsBB08jVKCHEdWfSPrOeee47CwkIsFgubNm3i8OHDi31KsUiammDPHti1C/7yL7Vt1y5tX1PT1a6dEELM3aIGv1deeYU9e/bwxBNPcPToUVavXs2OHTsYHh5ezNOKRdDUBN//PvzqVzA5CZmZ2ubzwZtvaq9JABRCXC8WNfg988wzfPvb3+aBBx5gxYoV/PSnPyU+Pp7nn39+MU8rFlgsBq+9BvX1YDZDdjbExWlbVpa2r6FBKxOLXe3aCiHExS1a8AuFQtTW1rJ9+/YzJ9Pp2L59OzU1NbO+JxgM4vV6Z2zi6uvpgdpaiEYhKQkU5cxrigI2G0QiWpmenqtXTyGEmKtFC34ul4toNEpGRsaM/RkZGQwNDc36nr1792K326e3vLy8xaqemIeJCa2rU1HAaDz/dZNJe83n08oKIcS17poao/fYY4/h8Ximt97e3qtdJQFYrZCYCKoK4fD5r4dC2msJCVpZIYS41i3aVAeHw4Fer8fpdM7Y73Q6yczMnPU9ZrMZs9m8WFUSlyg/H9at06Y3uN2Qnn6m61NVwesFg0Erk59/desqhBBzsWgtP5PJxLp169i3b9/0vlgsxr59+9iyZctinVYsAp0O7rkHKishGISBAZiaAr9f+z0YhJUrtTIy308IcT1Y1Enue/bs4f7772f9+vVs3LiRZ599Fp/PxwMPPLCYpxWLoKICnngC/vVfYf9+ON2gT0mB226D73xHKyOEENeDRQ1+9957LyMjIzz++OMMDQ2xZs0a3nnnnfMGwYjrQ0UFPPOMrPAihLj+Kaqqqle7Ehfi9Xqx2+14PB5sNtvVro4QQly2hfxcW+jPyKX0mSvf14UQQiw5EvyEEEIsORL8hBBCLDkS/IQQQlyy+WTuaWhoYNeuXRQWFqIoCs8+++wlHTMQCLB7925SU1NJTExk165d580pvxgJfkIIIS7JfDP3TE1NUVxczFNPPXXBxU7mcsxHHnmEN998k1dffZX9+/czMDDAPffcM7/Kq9cwj8ejAqrH47naVRFCiAWxkJ9rp481MjamBiORy95GxsbmVbeNGzequ3fvnv47Go2q2dnZ6t69ey/63oKCAvVHP/rRvI/pdrtVo9Govvrqq9NlmpqaVECtqamZU71VVVUlk7sQQlzn/v3oESwJCZd9nIDPB3BeRp3Zlp48nbnnsccem953scw9FzOXY9bW1hIOh2dkDCovLyc/P5+amho2b948p3NJt6cQQogZ8vLyZmTY2bt373llLiVzz8XM5ZhDQ0OYTCaSkpIu67zS8hNCiOvcX6xdv2CT3B8Dent7ZxzvRkw4IMFPCCGucya9HpNevyDHAbDZbBcNppeSuedi5nLMzMxMQqEQbrd7RutvvueVbk8hhBDzthiZe+ZyzHXr1mE0GmeUaWlpoaenZ17nlZbfdSIWg54eLVO61arlzZPFpIUQV9PFMvfcd9995OTkTD8zDIVCNDY2Tv/e39/PsWPHSExMZNmyZXM6pt1u51vf+hZ79uwhJSUFm83GQw89xJYtW+Y82AUk+F0Xmprg9deh44q8MAAAIABJREFUuRkCAbBYoLwc7r5b0ggJIa6ei2Xu6enpQXfWt/SBgQGqq6un/3766ad5+umn2bZtGx988MGcjgnwox/9CJ1Ox65duwgGg+zYsYMf//jH86q7ZHW4xjU1wT//M7hckJcHCQng80FvLzgc8N3vSgAU4noiWR2uDdJxdg2LxbQWn8sFK1aAzQZ6vfZzxQpt/xtvaOWuNFVVCQXDV/7EQgixAKTb8xrW06N1deblgaLMfE1RIDdXaxn29GgJZRdbwB+it3OEob5xhvrHCfhDONJtFJdnkV+cRlz8jTccWghxY5Lgdw2bmNCe8V1o4YaEBOjv18otplAoQtPxHpqO9RAOR2e85hr24hr28ulHrWy4pZSyqtzFrYwQQiwACX7XMKtVG9zi82ldnefy+bTXrdbFOb+qqrQ1DXDsUAcBfwiA5NRE8orSyMxNJtEWR3fbMN1tTlzDXo583EpKmpW0TPviVEgIIRaIBL9rWH6+Nqqzrk57xnd216eqQl8frF2rlVtogakQNe830dftAsCWFM/qjcUUlKSjnFWRFWvyqVidx4F3G+hqc3Lg3Qbu+tMNmMzGha+UEEIsEAl+1zCdTpvO0NsLjY3aM77Toz37+rTRnjt3Lvx8v/5uF5/8vomAP4ROr6N6cwlllbno9bOfSFEUNm0rY3TYy4TXz8H9Ldz6+ZUzgqQQQlxLZLTnNa6iQpvOUF0No6PQ2qr9XLt24ac5xGIxjh1q5/dvHSfgD5GUksiXvrqBFavzLxj4TjOZjdzy+Up0OoXuNicNdd0LVzEhhFhg0vK7DlRUQFnZ4q7wEpgKceC9Bgb7xgAoq8pl7eZlGIxzXy/QkWFj/S2lHP6whYa6bsqqcjEa5Z+YEOLaI59M1wmdbvGmM4yPTvL+28fxTQQwGPRsvq2cotL5L0wbi4EpIYdJXy8R9xRtjUNUrJbRn0KIa48EvyVuoHeUD39bTzgUwZYUz7YdVSSlJs77OGeWYFPwjeehBlpobu1l93/PYcUKefYnhLi2yDO/JexU4wDvv3WccChCRk4yX7xn/SUHvn/+Z21UqsMB5asySbQa6O2e4of/MEJT0yJUXgghLoO0/P5gqWVNqK/tou5QOwBFpZlsua0cvWH++cDOXYJNG+BpIDUrD6OhE9dAF6+/nkZZmXJD308hxPVFgh9LK2uCqqocO9RB/dEuAKrWFbJ6Y/ElT0u40BJsicm5TI72YI2foP7YKD09jiuyBJsQQszFkg9+F8qaUFenza+7kbImqKpK7cenaDrRC8C6m5azYs3lzZC/0BJseoOJhORcIpFuxt1dTEw4Lus8QgixkJZ0R9S1nDVhoamqypEDZwLfxq1llx34YOYSbOe9lppHOKJDp3qIhRd5AVIhhJiHJR385pM14Xqmqip1h9ppPqkFvi23V1BWuTBTEE4vwdbbqy25djad3sxkIJ20NJgc71uQ8wkhxEJY0sFvLlkTAoHFz5qw2E7WdtFwVFtxZdO2cpZVZC/YsXU62LlTJTU1SmMjeDwQiWg/GxshLTuH8nLobh+aXhxbCCGutiX9zO9qZ024EppP9HL8cAcA625eTunKnMs+ZiQao7XDSUe3C58/iD8QpqhKxdCZwrCzgHB/HBaLtgTbV75ip7PBytjIBO3Ng6ysLrjs8wshxOVa0sHvamZNuBK62pwc+fgUAKs3FrNi9eVdSDQa41TnMMca+/D5gzNeczggNXWUCe8YWY4s1lblsazEgE6nYFJyqXm/iZb6PipW56GTOQ9CiKtsSQe/q5U14UpwDozz8b5GVFWlrCqXqnWFl3U8t3eKD2paGXVrI1sS4sxUleeQlppInMVIKBSl9mQ3vco4vvAArd2TLCupBBSKlmdQd7Ad30SAnvYRCpdnXP4FCiHEZVjSwQ/OZE04Pc+vv5/pLrudO6/PaQ7uMR8f/OYEsWiM/OJ01t+8/LLSC53qGqamtoNwJIrFbKR6ZR6lxRkYzs70kABf2LqC/iE3v/+kBeeolxNNfaxZmYfeoKe0MocTn3bSdLyHgmXpku5ICHFVLfngB1cma8KVEvCH+ODt44SCEdIy7dz8uRWX3M0YjcaoOdpJS8cQANnpdrZtLiU+znTB9+RkJrFlbTH7D7VS19BLZpqNzHQ7ZStzaajrxjXsxTngJjMn+ZLqJIQQC+E6/HhfHKezJlRVaT+vx8AXi8U48G4DE14/Vlsct925al4pic4WDEV496MmWjqGUBSF6pV57Ni28jMD32klBQ6K8x3EVJX3Pm7G7Z3CEm+ipFwbZXp6dRkhhLharsOPeHEhdQfbGewbw2jUc9udq7DMIVDNZtIX5O3f19PvdGPQ69l+SzlrK/PR6ebWVakoCrduWEZ6qpVgKMK+j1uIxVRWrtGOMdg7hsvpvaS6CSHEQpDgd4PobB2i8Zg2G3/LHSsuKTsDaANbfr3vJGMeH3EWE3fdUUl+dsq8j2MwaEHTYjbi9k7R1jVMoi1uOk+gtP6EEFeTBL8FEItBVxecPKn9vNLLobnHfBz8oBmAyrWFFJSkX9Jxxj1TvP1+Az5/kCRbPH+8fRWOlEsLogBxFhOrK7SVZGrrewiGIqysLkBRFHo7RxgfnbzkYwshxOWQAS+X6WpnhIhGonz8XgORSJSs3BRWbyy6pOOMe3z85v0G/MEwqUkJfPG2lVjMxsuuX/myTJrahvBO+vn0eDe3bCghvySd7jYnxw51ULRi1XU/yEgIcf2R4HcZroWMEHUH2xlzTWCxmLjpEkd2ur1TZwJfciJ3bluBeQECH4BBr+OWDSW8/X49LR1DFOensmp9EbUHh/nooxF86jjhWPINnUZKCHHtke/Zl+hayAjR1+WaztKw5Y4K4hPM8z7GpC/Ib/c3XlbgG3JP8ElLNwdbe6jr7Kexz8lU8Mw6nlnpdspLtGd9Bz5tp28gjmMN2QwNgTHWSmlpDIdD+9Lwz/+MZH4XQiw6afldovlkhFiMJK6BqRA172tRomJVHrmF88+XFwyG+e3+BiangiRZ49ixtWLOgS8WU+kcHuNY1wBOz/nP7kwGPTeXFVKek4aiKGxYXUDPwBjeyQAvvjSAL1JMRuYwsegkAe8AtpRcVqzQVtp54w1t3qV0gQohFot8vFyiuWSE8Pu1ALkYA2EOH2gl4A+RlJJI9eaSeb8/Eo3x7oFm3BN+EuLM7Ni2kjjL3KZGTAVDvFnbyG+Pt+L0TKLTKSzLTKUqP5Oy7DTs8RZCkSjvN7Tz1tFmJgNBTEYD66sK8HigpaOP7LwY9rRiADwj7UQjoRsqjZQQ4tomLb9LdLGMEL290NYG//ZvYDAs7ECY7vZhutuc6HQKN91Rgd4wv4nsqqry8adtOF1eTEYDO7ZVkDjHLtO+UQ/vnTjFVCiMUa9nVUEmVfmZxJvPBM5YTOV49wCH2/rocbl5/XADuzZVsawwjcQ4J+GIl0Csk6SkUnzuAUKBCbwjHSRnlZOQoC0xd72nkRJCXNuk5XeJPiuJ6/AwHDgA4TAUFGhdeAv1TCswFeLwhy0ArKwuIDV9lsh7ESea+mnrHkGnKNxxUxnJ9gs0X88Si8Fvagb497cbGRgOk5wQz1c3V7Fpef6MwAeg0ylUF+XwJ1uqsMdbmPAH+d3xVmKqypa1JRgNOtyTY/hDbpIylwPgcw8QnHLfEGmkhBDXPgl+l+h0RgiHgxlJXN1u+PBDLSBu3Qp2+8IOhDnyySkC/hDJqYlUrZ//tIaegTGOnNQS225ZW0xOZtJF39PYqPLw3/fwzM+72b8fDr6bTvv+SoZ64z7zfSmJ8dxZXYZRr2dg3Mu7x09RUW5heWE2Xg+MeNvRmxNISMpCVVVG+xro7QlRUXH9ppESQlwfJPhdhtMZIaqrYXQUWlu1Z1VGI9x6K6SfM9f8cp9pDfWN0dmqrbW5+bYK9Pr5/efzTgbYf1DL71exLJPyZZkXfU9jo8oPnuvmRG8/8fFQkV7AMlsJx4/p59SKTUmMZ8eaUvQ6HR3DY7x38hTf/EYOtsR4hpxhepztJKQsJxJLYGgwgIV6/viPYzLYRQixqOSZ32U6NyNEfz/87GcXbrlc6jOtaDTG4Y9aAVi+MgdHxvy6OyPRGO9/0kIoHCE91cqmNRdvNUajKj/+zy6GgkOkOSDLWESKPhNMzGtkZr4jiS9Vl/F2XQudw2OkL0/g/3ywlH/9XycYHhnDOz5KoqmK7JxPKSsdJzTRCcx/EI8QQsyVBL8FcDojBGjPquLiLjwQ5lKfaTUd78Ez7sMSZ2LNxuJ51/HT4124xicxmwzcvqVsTq3GX3/SS8vQEHYbZBuLSdafSUI73+kceY4ktlYU8X5DO4dP9fKVDTYe2V3A7/Z3Eo10cee2VSSYKvj4vXrqj3aRlJIwvQ6oEEIsNOlcWmCfNRBGVbUM8fN9pjXlC1Jf2wXAupuWYbbMbxJ678A4jacGAdi6afmcRnY29A5xtLOfSATyLEUzAt9pCQnadI+5tmLLc9Ioy05DBX5zrIWsbDsrypJIdURp7WkmpzCVitXajfl4XyOtDf1zvkYhxNXx3HPPUVhYiMViYdOmTRw+fPgzy7/66quUl5djsVioqqri7bffnvG6oiizbv/0T/80XaawsPC815966ql51VuC3wK70EAYj0f72+HQMsTP55nWiU87CYejODLs824NBYJhPvq0DYCVpdlzytDQ43LzYVMXZjMkqXmYArOfc7ZWbExV6Z/w0j/hZdzvJxiJTL+mKApbK4rIsCcSDEd462gz61bnkxBnxj3h5/cfN7NmUzGlK3NQVZVD+5s5caQT9dxvEUKIa8Irr7zCnj17eOKJJzh69CirV69mx44dDA8Pz1r+k08+4Wtf+xrf+ta3qKurY+fOnezcuZP6+vrpMoODgzO2559/HkVR2LVr14xj/eAHP5hR7qGHHppX3RX1Gv5k8Xq92O12PB4Pttn6EK9hsy14XVGhBb75zPNzj/n49SuHUFWVHXevIz3r4qMzz/Z+TQsdPS6SbPF85fOrMFxkTuDY5BSvHaonFIlSmpXGoTdLOHZMYcWKmSvZqKoWzNeuhb/9WwhEw9QPOzk57GQiGJxxzKzERG7JLyTnD/8NA+EIbxxuYGxyCoc1nq2lRfxufyPhSJRlhencuqGEk0e6OHGkE4BlFdls3Dq3rlohrnUL+bl2+liu0bEF+Yz0er04UlPmXLdNmzaxYcMG/uVf/gXQEmrn5eXx0EMP8eijj55X/t5778Xn8/HrX/96et/mzZtZs2YNP/3pT2c9x86dO5mYmGDfvn3T+woLC3n44Yd5+OGH53uJ0+SZ3wKLxbRnYJEI/Nmfaft8vkvPWlBX04aqquQVpc078HX2uujocaFTFLZtWn7RwBcMR/hNXQuhSJSsZBu3VxaTY1To69MCXW7umcW7+/q0VuxXvqJS5xzgk94eojHte5RZb2BqwoDHF0ZnjKKqk7zaWE9xcjI35RXgiI/nS2vL+MXBelwTU9T1DnLbllL2HWjW8v7Fm1m3sRhLnIlPD7TS1jTAhGeKmz+3kgSrZX43UIgl4MUPaom70HJT8+D3+QAtCJ7NbDZjNs98XBIKhaitreWxxx6b3qfT6di+fTs1NTWzHr+mpoY9e/bM2Ldjxw7eeOONWcs7nU7eeustfv7zn5/32lNPPcXf//3fk5+fz9e//nUeeeQRDIa5hzQJfgvos9IbXcr6niNDbvq6Xdqk8XkuYRYKRzhYp7WcqspzLpqXT1VV3m9oxzMVINFiZsdqbXrC6ekcp6+rv1+7rrVr4ctfiTFg6aC+W+viyExMxDqVSd27qbQ26wkEwBAfwlbRR9pKJzBOt8fN54pKWJGWzp1rynjjSAOdw2MY9Do2ryvmkyPtHGvsJRKJsmF1IYk2Cx+924BzwM2brxxizcZiSitzLil7hRBibvLy8mb8/cQTT/Dkk0/O2OdyuYhGo2RkzBwPkJGRQXNz86zHHRoamrX80NDQrOV//vOfY7Vaueeee2bs/+53v8vatWtJSUnhk08+4bHHHmNwcJBnnnlmLpcHSPBbMIuR3ujEkS4AisuysCfP71tdXX0vU/4QtsQ41qzMu2j5xj4nHc4xFEVhx5pS4s9a4Prc6RxWK2TkRHinrZXuYTeKArcVFGEcy+T/fUE55x6Y6D1STLg3k6x7ugnFj/O79jZGfD5uLSjkC6tK+e3xVk4NuohmxFhflc+Rkz3Utw4wORVk26bl3LlrPZ/8vgmX08OnB1o51TjAhluWk5k7/wzzQtyIvnnbugXr9vwboLe3d8bxzm31XSnPP/883/jGN7BYZvb4nN16XLVqFSaTib/8y79k7969c66rfH1eAIuR3mhkyMNAzyg6nULlusJ51WfM7Zse3bllbRGGizwrG52Y4kDzH1Z9WZ5Phv38VuLp6RxVVZCdF+VXrU10e9wY9Tq+XFpOVXoWb7yhXPAeeJ3xuA+VszFbC8R1Q4O80dxITqqNL64pRadT6HCO0euf5NaNy9DrdXT1jfL2+w0YLUZ23L2WjVvLMFuMuMcmefdXdXz0u3r8U8Hz6nquWExbWHwxFhgX4lpgNOgXbAOw2WwzttkCisPhQK/X43Q6Z+x3Op1kZs4+SC4zM3PO5T/66CNaWlr4i7/4i4te/6ZNm4hEInR1dV207GkS/BbAfNIbzdXJWq3LsrgsC6vts5cRO5uqqtQc7SCmqhTmppKblfyZ5aOxGPtOniIai5HnSGJ1YdZnlo+pKm+famFwYgKzQc9XKyopTk6Z0z1oblLIjuXxR6Xakmc9Hg//1dSAw57AXdXlGPQ6elxuGkdclBaU4R4zcqpjgtd/e5wBp4eyyly+8vUtlFXloigKXW1O3nz5EI3HewiHI7PWt6kJnnoKHn8c/v7vtZ9PPSU5A4W4XCaTiXXr1s0YiBKLxdi3bx9btmyZ9T1btmyZUR7g3XffnbX8z372M9atW8fq1asvWpdjx46h0+lIP3dZrc8g3Z4LYC7pjeazqsuYa4L+7lEURaFybcG86tLTP8bQiBeDXj+nVVzqOgdwTUxhMRr4XGUJyrmR6xwfdXfR5dZafF8pqyAjUWslzuceVBWmYjObeaO5iRGfj5cbTvBHy8v5o7UVvPjbZj76yMv4SBCLpxhV6SU5dYq+vkY2b0hn05pCNt5aRklZFgf3NzM2MkHtx6doPtHLltsryDqrK3QxuqKFEGfs2bOH+++/n/Xr17Nx40aeffZZfD4fDzzwAAD33XcfOTk57N27F4C//uu/Ztu2bfzwhz/krrvu4uWXX+bIkSP827/924zjer1eXn31VX74wx+ed86amhoOHTrE7bffjtVqpaamhkceeYQ///M/Jzn5s7/sn02C3wK4WHqj+a7q0linNRELStKx2uPnXI9YTOXICa37srIs+6KT2d0+P7Ud2kTym8sLz8vOcK6mkWHqhrTu1B0ly8m2nrnY+d6D9IRE7l1Zxa9amxmdmuK/murJiRbQ9uEKhoOtJCYFMSa3YQ3mM9wb4JB3CBimb3CcjasLWVaYxp271tPePEh9bTeTE37e+1UdZVW5VG8uQa83zOiKPh3TT3fDStJcIS7fvffey8jICI8//jhDQ0OsWbOGd955Z3pQS09Pz4zBaTfddBMvvfQS3/ve9/i7v/s7li9fzhtvvEFlZeWM47788suoqsrXvva1885pNpt5+eWXefLJJwkGgxQVFfHII4+cN4r0YmSe3wKIxbSutLo6Ljof7mIftJNeP798qYZYTOVLf7KR1LS5r4PW0uHkwKdtWMxGvvqltZhNF/5uo6oqvzrSSP+Yl7xUO3+0ruKCrb5YDE6cmuIXrSfQG2N8fkUuN5+zRM2l3oNQNMrv2k9xanSMAx/DeGcSGxyFuCK9TMTGALAqKYyeSiMjt5sNm6ZQFMhMs3Hz+hKSbPGEwxGO1rTTWt8HgD0lgbI1a/m//x8TDsfswdjj0RYj/8EPLm0krhCXajHm+S3UZ+T18pm7EKTltwBOr+rS23vh+XBzXdWl6XgvsZhKVl7KvAJfKBRl34c9eLywYXUuxovMd2kddNE/5kWv07F1RfEFA19TE/zi9Rj7R1uZUmJYI0kYj+aRck5S3rPvQUODFnAMBm2+o9cLaWmz3wOTXs9dy8v43ZSTX410Yclw026qJzdUTHzYynCkhwl1DCXXy6g7n7z0MENjfQyNeHnjd8dZVZ5DVVkOm7aWkVfkoOb3TXjGfOx/5xj+qbUkJMx+HyRprhBLm3T4LJDZ0huNjmqtnbk+WwqHI7S3aN2KK9bMffHPpib43veHefudEB99aObn/575mYM6ItEYh071ArC+JAd7/OwTx08/MzvQ0Y/BPkVmipFS/TKO1SmzpjOqqIC77tKC3QcfwG9+o/2cmND2X+geKIpCtj6TpN5V2PUJRJQIXeZWpixT5BtXYFbiCcci9Ec6ONTp5qbNy8jNTCYajVHX0Mt//eYoHT0jZOel8vmvrMUSZyI4NYESqGdycvahnZI0V4ilTVp+C2i2+XDzWdWl69Qw4VAEqz1+xsCNz9LUBP/zf8bodvVjtUFWSg76mO4zB3XU9wwxGQiSYDGxqmD20Z2np28Muf3Ere5DVSA3VESy1UTyBZ6ZNTXBW29prb7bb9emOkSjWhfjW29BScmFA6DVClZDPKmjVfhSehkx9DNqGGZoyou3voAR1xRR6wD7Pp6gqXOC7VtS2FBdSHPrEBO+AO/XtDLmnmJdVT63f2k1v3vjKEnWUbqaW6jaUI5Od6Zle3qB8bVrJWmuEEuVBL8FdnZ6o/lqa9QGnyxfkX3RUZdwVoByuXA4ghj0JuwJGeiUCw/qCIYj1HZq59lYkodRP/uSZz090NSsol/WQURRsUWTSYqmArOnMzp7ruPKlTOf+eXmQn1LmBfeHud/y4gQZzASpzdiN8WRaNQG5ZzOhlFXp2OFtQBbLInGUBtdQwHC9hZUXSIZaiE5di+Dgy5+8dsxhjxudmzKITYZ4WRzP8eb+vBOBti6cRm3fmElTudJvIcGqD+WQkFJxiV3RQshbjwS/K4RY64JXMNedHodJWWfPdfutJ4eaGpSSUjqAwXs8dnoFO3T/EL59uo6BwiGIyQnxFGWnXbBY09MgFs3ii7eg17VkRMuQuFMRDv3mdmF5vmpqDitHQQ39VLjgdDHWuCx27VyBYkp3JK+jGRz/Iznpjk5dqZOriak9qHLHsKYOklCziQ6i41V1mU09gxT3+glKaWXNHsClZW5NDUO0NnrYmoqxBdvW8EdXywEOjnV1obL5aC/Xz+9NNt8FxgXQtxYJPhdIzqatWd9eYUOLPGfPeXgtIkJ8AU8xMf70SkGbHEz18w7N0CFIhHqe7U19DYtz5vRFXiuxEQVf2ovxjAU6HIwqzOfC577zGy2eX4xYvQk1eOMjjHihPGeBNQRC9aUMGnZYYor/cAYvb5PWZ2Sy9rl+Xz3u0Zefx2OHIHONgMJCYVkGHJIW91PJH6IScWLL36CtOwMAoMp+H19uBQfY5NTVJZn0HlqBOeol5qjnWypLqKjZYjUVD/5pYOkZuZe8gLjQogbi3wEXAOi0RidrdqSP8VzbPXBHwKPcYhQGKyWNHS6md9lzg1QjX3DhCJRkhLiKEr/7GeKIesY9iw/k+N6HOGZdZotKe/Z8/xOG07sxBkdo79Hh+ejlZiPbaBaV0WFby3+32+i79WNGDwpxFSVutFe/lf7QcZTO/ju34T4zne0btDPfQ62bjGyIqGQ8mA1SdFUVEVl0jrEiO3/Z+/No+Oq7nzfz6m5VKpSSaqSSqM12JIlzwMYA4kBE2wglzahu4GmO8Dlku71XkanuwNZDSSh14XkpfPSGV7o3PU66dfdXOh00k7ClDgmQAB5wLLxJMmSbM0qSaVSzXOd8/44lizJGrEGS9qftbTkOrVrn31KrvOt32//hk4KcvMpcWQhywqnevqwFajqe/5iH62dHmq3lCJJMOTuYN06mbIyIXwCgWCexK+trY3HHnuM8vJyzGYzlZWVPPPMMyQSifk43ZKnp2OQWCyBOcNIYenMizXnOuJk5XgJ+ME6zuobL1BpWeZUu2r1bVpVMOWeoqIofNDbxdpqsMcKOFqno7MTksnJm/KO72Af0fsZyOjE3Quhw7UofU5cLsjJuZxo7u/NYOj3G7mraAMOUyZJOU39YAf/euEwPXmnsKztQjFHRtyoBsVIWaKayngtUtSMxpiiOdbFgCZKQb6ak9QdCBIzqWXY6uovkOW0YjIbCAWjtLVM3GBTIBCsPObF7dnY2Igsy/zTP/0Tq1ev5syZMzz++OOEw2G+/e1vz8cplzQXmlRRqqh2zapVT3NbH2vXKkRCNlrOW6bML2zu9RKKxckw6Kfc6wNo8/toaA/T3KgFdwG9vdDSos5dUQE33HDlntn4XMdQbTO9rdBb7yJ81oHRqK7H41Fz/kbvSWq8udxflkNbaJCjnjYGYiHCJi/6dV5OuWGLvobs+GVxz0zb0TdsZtv2fgqdnQTicQLEKSvMot8dImlUiCXTaNIS7xxroWpdEac/uMi5E+2Ur8mfUTCRQCBY3syL+O3du5e9e/eOPK6oqKCpqYkf/ehHQvzGkUym6O7wAFC2Jn+a0ZdRFIXWdg8OJ/yPh10cq7uy395ogWroVq2e2pL8abs8HDzRz5EjIPXlsb5cz6Z10NurCltmJtxzz8TBIsO5jv/0T/B6d5y4ArHWwpEAl0AAjhyBHTtUARy9JylJEuVWB2WZuXjiYQ60n2Tt2hT+ALQ2p1mTMVbYnQ6Jx+/JZ3WVg7quTup7e2gL+3E5Mxl0h1AytCTDCsFwjKRBQqvTMDQYYmgwRI5DJPcJBCudBQt48fv95ORM7dKLx+PE45db1IzvJrwc6enwkk7JWG1msnOnbjg7mgFviEAoil6n5Zabc9i9a/L8wmA0TvegH2Baqy+SSHLwAy+k1ViFAAAgAElEQVSRCNxUmMdwZdGSEigqUgNRfvxj+MIXmHD/rLpaFbY8yYzOkcRcHicrrgqyosDAgCrSDsfEieYKcGaoh7icwumET3+8hPq+Apoa1XSKnJzxwq7l46vKsBmNvNV2EXcshGySMcY0hHUpLFGJxgv9FBRl09s+SPO5HnZ8vHrG77NAIFieLIj4tbS08P3vf39aq++5557j61//+kIs6Zqh8+IAACUVzmndcbJ8WeBauwZQFFhVlINer+bqTZZfeL53AAUozLZNWM1l9Lwnegbp9yjkZWaQweXQzWHR6ulRy5d1dsL27aqrc7QV2NEBTU1QUm0inhMgWRLFWw9Go+rqtNlU16fPp861dSsUlyj4EjHaQoOcHephKBFBAkqiazjzuyL63OoaNRpwuSa2PDe7CjDpdPy2tQXZCOF4EotZT78/SKFGQ8qmyvjFpl623FCJYYq6pwKBYPkzqzvAE088wTe/+c0pxzQ0NLB27dqRx93d3ezdu5c/+ZM/4fHHH5/ytU8++eSYytyBQICSkum7kM8lo4VgvsPi02mZ7nbV5VlSPrVF1tCgJpE3NkI0qhDXeshxwJriqV8H0NSjnmNt0ZVjR88bi0GP3cNAHApynXCpru3AgOqujERU8ZIk1f05URWZ4ZSHHJ0FD2DdcoFwQEu/34DVoEdrkYlGYpwIxHCui2LcFebHzVHkUfXVDRot5dG1/OJ/OUfaEZWVqZZiWxv84AcTV65Z63AST6X4fdtFlAyZWCiFPlOPLxxHNxTCajMRCcS4eN5N9friad83gUCwfJmV+H35y1/mkUcemXJMRUXFyL97enq49dZbufHGG6/o1zQRRqNxxi3o54PxQmAyqRGM462bucI7ECART2E06XHkT15BfXxfOq0hSHt/kj63jv/9b3bycidfny8cxReOIkkSFfk5U85rtqQZTAWJX4Szf8gh93rVPdnYqAqf0wnxOOj1qvsxK+vKKjLDKQ8ZfauwmHyQMYRrVzMeD4QjkEqCIkN2LazfDIZskBXQShpyjRZq7QWszszjO/+X7iO1I9qY76LN7+Pi0BABXYxsi5HBYJBsWcacYyESiNF5cUCIn0CwwpmV+DmdTpzO6S0NUC2+W2+9lW3btvGTn/xkVlGMi8FiND7t6VRb9riKcyZ9f0aXDRsWgsHQEEYj5BZn4+mWpuxL1+7xAVCYbcUwqtPDRPOGNGGsFoVcm56+XhONjbB+vTomK0t9XSAABQWXK7SMryJzuUwZVNlq8WZ2YdOFcbiSBOMJ+nolygvM/I/7TGSbTOQYLWQbMrDqjSNu37a26bvCj69cc/l5idtWVfLDzg8JBFO4Q34cOi3RZJKYoha57uvxkUiklqzrcyG9EwLBcmVePv3d3d3ccsstrFq1im9/+9sMDAyMPOdyuebjlFfFREIA89/4tKdDFb+pilhPVDYsEldfZzFlY5pCCADaB4YAWOUc2+F4onnDmgBIsCrHRjJHoqVFfQ8SCdWaGxiAjAxV3IZfM76KzOiUh/Nn9RQXl5N76YtErAs2O+Dz/w1qiiZ/X2bTFX48qvVu4MTF1fRkNZAypiiUjJTYwmTo9WRajMTDcdxdXkor8iZfxDXKQnsnBILlyryI38GDB2lpaaGlpYXi4rHupWuxd+5kdSlhekvjoxKPJRnsV6NZp0psHy8EqXScRCqChITZYEfRTS4EyXSaniH1HGXjxG8igYlo1EkKMq3k3QjvvadaepGI+j4UFKg32tHG/0QRm8MpD8M36cnSLyZjtl3hhxlrvWdjzsqlV4nRMxTFP5jGZZapcukhHKenY+mJ32J4JwSC5cq8iN8jjzwy7d7gtcTVWBoflf5eH4qikJVtwZI5cT89uFIIYklVzAx6C1qNHn9w8r50nkAYWVawGA3YLeYp5wVISmoFHqNsQjHD5s3w+OPwn/+pJrlv3z7W8p2qNdDVtHca7TqdqCv8ROecyHpXFCcBgwc5J0yizcTJ81Hy7GBQFIY8S6uL7WJ5JwSC5crS3PSYYz6qpXE19Peqe3F5BfYpx40XglhCvWmb9NZp+9L1+UPqObKuzB+cSGBSUhIAraKn7dK8N9+sWnrDzWtn06X+o7Z3Gl8tprBYBlsAT8KH2x/DvDpOclOcfz6pwazXY9Hr0YRtnGtyUVKiu+ySla1ISOh0BoxZRvp9QwwMGchOp/APhVEUZX6qvczDptxieCcEguWMED8+mqVxtfT3qknneQVZU44bLwSGrABoIRWzca5javEZCKhVpp22K03a8fMWFSvEDUkSSWhtMJA/at6rdWN+FKrXKnzqsSFefnOAUx4fiXAanQ6cFerfypYDoQSEEgkGgP5+H+253WTYC8mQXejQo0OPWbGQltLI5gSpgJZISkGJxLAY9YSCMaw287RrmRXztCm3GN4JgWA5I8SPK4VgNtbNRyGdSuMdUN2X01l+cFl8fv6LNEdOR0imQDJbpxWfYfGbyPIbPe9//Reca5LxaBV0Orhpk5b7xs1bUwNr1sDhw9DXp1qDhYUQjarRmXMVcRhPpTg70M+HfW78qRjrPgbFftCk9VTmZFNbZsFmMOIfMBIIKehMSTJz47wV7UVjiNJJJ15TL5XxdZgVCxY5i4guTEySMGgthIlCOo2iKPgGQ3MrfvO4KTeRd0JRFNLJGFq9iXBYmnPvhECwnBHid4mFtG58XnUvzmQyYLFOvt83fn2PfyaC+RcKKHru22ucUnAURSEYVUvFTVTVZfS81dXQ3q7h/z0jodMrfHZXCrt57H+N0QZNf78qgAD5+ZCXd/XGTSKd5sO+Xo739BBLpQAw6XSsc+axZkMu+ZZMJEmioQFensCwuueefLrsgxzr7cBYEKPVeI7V8XXkpvLwaHvxJ2QKXBJpXRyNXkMilWZoMDRtcYEZM8+bchN5JwIDFwh42rA6yukeqJhz74RAsJwR4jeKqwnSmA1ej7oXl+3InNWekz8YwW6HwnzLtPs60USKtCwjAZmmy81xJ9uOKi+XqPQb8cdihJMJ7ObLgjnaoMnIUMUvFFJvwAMDqgB+VONGVhRO9/dxtLuTcELdc8wxm9laUEh1rgO9VjvhOkpKICNDIRhJc+zDJG2deu6520GgI4vz3ecwO8I0687h8q4jHCjA6urCXNKPHAe9xUgknqTzwgAbt5fPfLFTMc+bcuO9E/kOH+GBNqLJBP0NF3GV57Bvn10EuwgEM0SI3zg+apDGbPANquJnn0UhawCvPwJAdlbGNCMhFFOtvgyjAe2lO+Kw9dbQAF6veq1r18Ijj8C6dWA1GPDHYgQTl4uLjzZoamrU9IdYTHV5gip+XV1w003qvLMxbtp8Q7zT3oY3GgUgy2TihqJiqh1ONOMEZHgdfd4Y+VX9DChDJNMxZKOMrhyaB+DAMSt777PjrKvg6FArbinCkOYs11VWYN1kpCuiITUkI+s0REJxvJ4gAV8Em33693NaFmBTbsT9/Z8pTr5/jlDaj2KMkZtnYvv6Blavvg7xkRYIZob4pCwCQ95Llt8sxc8fUEViJuIXuWRFZRj1wGWr6cIF1WobvlefOgXvvANPPQXFm7PoCgS4MORlrUN1B442aAKBy9VeRnv1PB71uZkaN95ohHc72rkwpCbgm/U6biguZb0zb0Sox3P8bJD3L3ahLfIxKI99TitpsWalae8Lct4TpOT6bnbnlnO0v5uYFMXlaGGtw8nrDYN4Q2HCyRQZGao13NXmoXbzHPgKFyhkuKYGnvyqlpf+2cjpJg2mPAfevn7MxjD9PT6KVjmuan6BYKUgxG8RCF0SMZt9dsEWoYhqkWVmTF//VJZVhdBpNCNW04ULMDioJq1nZYHdrlZv6eqCZ5+FZ3+gWi3tfh/JdBq9VjvGoPF4IJVSa3sOYzCoQhqPQ27u1MZNJJnkSHcnp/v6kBUFjSSx2VXAjqJijLqJ/yv6wlEON3dQd8pLWAGHATI1drI0TsyaTHTo0Uhaopo45/qGyNQNICshznsv8EcbK/iDu51IMslAJIzZoEej0xBLpdAYjSiKgrvbOzfit6Ahwwo2a4rsbOjp76cwO5Mch5X8wuzpXyoQCAAhfgtOOpUmElJFzGqbnbstElWT0C0ZhmlGcrlLgiTR0aFaZKHQ5QLVw/dmk0nt0+d2w8GfZVPzoIlAPEbToIf1efljDBqjEXQ6SCbVf4Mqnjqd+ngy4yaRTnPS3csHPd0k0mkAKrKzubl0FTnmid+DeCLNq4e7ON3ei96gYDSAjTxciSJybVcG8CQiRrK1Lu7ekkdrsIUW9yBvnWnFkZ9JJJmkOxDAqNchaSUS6RSGTD3JYJL+Hh/ptIx2mga/07KAIcNarYZb7txA9Odx8mwWLBYju+7ciE6vnf7FAoEAEOK34ISCMRRFQa/XYjTrp3/BJZLJNImkGgWZYZ5e/Ea0D9US83rV36NdlsMYjepPY4PELiWfAO2ccPey1uGktFQzYtDU1Kj38N7eyyXOhgtd22yqwI42blKyzLmBfo52dxFKqMLttFj4eGkZJVmT5zf+/oiPn7xygd6BOKkUWKRstpSWUp6ZQXcn5ExhWJWXaShnDTqtlsbufrp7fEQsaTKMBow6LWlkTHoNeqOOdDBJMplmsD8wo5STaVnAkGFrVga33LmRsyfaWb911dznKwoEyxwhfgtMOBgDINNmnlWkZzSu7uHptFoM+un/bMNTK4qC1aoaHLGY6uocTyKhip8sg0uTR7u2i8FIhJ+fO8Nda6q5914jnZ2quBUVwdCQ2ogWVNEb3usbNm4iqQSn+tyc7ncTvSTYWSYTO4tLqM51THrdqbTMfxxq599ecROJQK7NSKm5HCmaTeMp0GrVn9GGlT8QpaNnEFuWzIatOlo7dDhzMrl1XQWJVIoLfV6CsSQYQaPRoNdpMZu0hJIJ7BY9xGUG3P65ET9YuJBh1BzROVu3QLDCEOK3wMQuuS5NM3BdjiZ9yV2o183sJpp5yS8ZiidGtqNOnbrcoWEYRVGtt+xstUefw67nk/ZqXm85T28oxEtnT3HX6mo+/3nbiEGTl3fZsnQ61X9v2ppiy24vTdIgB0/4RtyuVqORbQWFrM/LRzeFAHiCYQ5+2MKv34kQiUBVfj4u3So0khb0l1PlioshO0fmTGMf4fgAki6I06VeX58P+o6g7iWuK+G6yhIu9nnRJSWiiSRmg57K3BziSgKPJ4JGMZCraPF5w7P6W0zLQoQMCwSCq0KI3wITi6oWnGkGrsvRpNOqmMx0byrz0vyhWAJQeOQRiXfeUd2DRUWqpZdIqMJnNqud2Wtrh40UOw+s38Ar55vwRCL87NwZcsxmbv6zbD4eyiISkTCZFBJyim5fiLAUIm0K0yzLoJYspcBqZaurkMqcnCvSFkajKAoftvdyuLkDr1fBO6Cn2lZJgX5s8IYkQVGRQu+AhzWbO9iRFyMRB4NBIi/Xjk5jQqtLYspIMOANUH+mg263j/ysTBQ/eOMxJCPctqaS92JtdPX4yDUYCEUT+C5F3woEgpWDEL8FZsTyM818vw9UlyAw46bAFqMBjUZClhXC8QTr1hl56in4xjfU4Jbhfb7sbFX4KirGxmPYTWb+dN0G3mq7QKPHgzcavZSPd8nfGbl0omErUlGT06tyHVTl5k4ayDKacCzBoTMtdA2qdU5zTdlYfZXk5V353iRSEYKpVnyxAH4/lJcZyTQVUn/EwcH3DWOqvVy3cwD30AX6PAHiA2mSmRqyDUbuqa6lOCuLMxfc2KwmYkmZaChG9lAEWZav+YbLAoFg7hDit8DEY6rlZ7gkfjNuAHDJjTjTbUJJkrCZTfjCUQYCYaxmI5/8JJSXw09/qrovZVl1ddbWThyPYdBquaNyDbtWldPm93FxaIiBSBiNJKGRJHQaDY6MDFyZVlyWTOwm04z3MdsHhnjzTCvRRBKdVsNN1avISOXz3s+lK1LlQrEBBgKtRKNp9DotW9YVUZRfyP/zQ+0kZTSdPPa4lTb3OfzBKJFoAr3exLn2fko22VntyqV7wM9QXxAlniCVShMNJ2Zcak4gECx9hPgtMOlLFpxOp51VA4DhMPZkKj3jcxXnZuELR+kc9FGRrzbMXbcOvvnN2cVjGHU6qnMdVOdefQJ1Mp2m7nwHZzrcADisGXxiYxXZmWZkeWyqnILMYPAigagbFAgHs9ixeQ237zLyrW9NXUbz4G9MfPrRSt54+wymuEQikaLVPUhXsZ9VjmwyzAbaEwksikIqLRMJx4T4CQQrCCF+C4wsqxZcR6eGX7428wYAOo0Wnw8GPekZd1FY5bBzpsNN+4BvTO+6xYrH6PeH+N3pFnxhNcl/Q6mLnVWr0F3axxydKnfmbAyTvQm0IZJJiVigmBJHCX9yn0RX18zKaCZjWRS7sulyDxFNymCAYy2d3LhuFd3xIIpGIa2XiCSShENx5qjEtUAgWAII8Vtg0qk0igJvv62ZcQOAhgb42X9qOXoWUqk0pw8r1NRI03ZRKMyxodVoCMXi9PlDuOyL0+8mlZb5oLWLE209KIraWf629ZWUOK4M06+pgQceGuL/+4/z9PWnSKf02E1V7NxmH3HNnj498zKa2zeuoss9hCamENMm6fUF+V8ffECIBCFDCo0WIvEk0XBint8FgUBwLSHEb4HRajX4/dDWplBSOn0DgGhUrck5MKDDYpPQ6xVyzAlOnDBO20VBr9VSVeCgobufMx3uRRG/gUCIQ6db8YbUCJlKVy4frynHbLgyqEVRFM4299La08bOGxV0ko3aiirynGPbN01VRlNRZEIhCZNJwmqF3GwLq1c5aWkfYMgXRu/UMBSKYjEZGNSGULQSsWQa/9AcpzsIBIJrGhHetsAoippikIhPbbnEYuD3X+6osG6dBkuGCUkDxowotbXq8QMH1MCVyVhXko8EnO/10Onx09amWk5tbVO/7mpJpFK829jGfx4+gzcUwWzQs2dTFXs2VU0ofKm0zB+OtnDkxEUURaG6Ip+/+ON1XH+dkbKysS7e4bzFzk61hmnY72aot5G+i8fobnybC6feJd/ejN2mCu6OLeVkmA1o0uALxogkEmrAjlaD0WwglU7TcaGf9Cz2UwUCgcoPf/hDysrKMJlM7Nixg6NHj045/mc/+xlr167FZDKxYcMGXnvttTHPP/LII0iSNOZn7969Y8Z4vV4eeughbDYbdrudxx57jFBodilLwvJbYDQaCYMBDAZ52gYAweDYvS2DLoNkOkoyFSXDYJ9RF4W8rExqS/J5q76Pp753kXTbRuIxzZTBNVeDoii0uAd5v6mdcFx1Ja525XLz2vKRDhPjiUQTHHqvkf7BIJIkcf3mMtatKZg0clSjgX37FFob+/jw/YtYLRH0erXmaCAAGRkJCh0d/PqlDorLHHzsE+tZvSqPAX+IrlCYcEaSbEsGklbCYNZDOEU8lqSrfZBVlXlz92YIBMucl19+mf379/PCCy+wY8cOvvvd77Jnzx6amprIy7vys/T+++/z4IMP8txzz/HJT36SF198kX379lFfX8/69etHxu3du5ef/OQnI4+NxrHF/B966CF6e3s5ePAgyWSSRx99lM985jO8+OKLM167EL8FRqvTkJUFpaVpLnRO3QDAah27t6XXmSEO8aT6DWemLeLs6VI+ODJIMBqlzNFNtaVkyuCaj0rXoJ/DzR30+9X1ZWWY+HhN+YR7e8MMDAb53XuNRKIJjAYdt+6spsg1dcku/1CYi2fPsn51kIYkDA4ZiKQKMGVY2b7Lyq6PhZFjPXS1e+hq81B/uIWiNfmY9XrCvjhpo0w8lULSSCiA9VI/vwuNvUL8BEuSZDJNMnn1novZzvGd73yHxx9/nEcffRSAF154gVdffZV//ud/5oknnrhi/D/+4z+yd+9e/uZv/gaAZ599loMHD/KDH/yAF154YWSc0WjE5XJNeM6GhgbeeOMNjh07xvbt2wH4/ve/z1133cW3v/1tCoebjU6DEL8FRq/XIUmw84YUgbembgBgNo/d2zLpMpGQSKTU/amZtIiTZXj11zoYLMNZ2kJE6mJI0ZBrLaS2VroiuOaj4B4K8sGFLjo8ankXvVbLlvJCNpcVjkRyTsSFDg/vHG0mnZax2zL4xM1rsVmnLtDceXGA9w6dI5lIUVikY/ddq8jIKiYa041K28gAnHReHOCt10/RdLoLm92CyaDHKGkp0WXQ4w+x2ppDOprAbDYS9sXp6fKSTKbQz6B2qkBwLfG/f3UMc8Yk+yizIBpR7y2BQGDMcaPReIX1lUgkOH78OE8++eTIMY1Gw+23305dXd2E89fV1bF///4xx/bs2cOBAwfGHHvrrbfIy8sjOzub2267jb//+78nNzd3ZA673T4ifAC33347Go2GI0eOcO+9987oWsWnfIExW9SyY05HYtoGAOPz3kwGKwoK8VSYZCpBV5dh2hZxw81o17icxHRRPOlu+tMdRJQAhbrVFBfrZ9SAdjyyrHCx38uH7b24farpKUkS60ry2V5RPKmLE1TX6MlzXdSf6QCgpCCbW3ZWTVmwW5ZlTh27yOnjbQDkF9r52B3rMU/R27Ck3Mmm6yv48OgFjr93npyKXIqsVnqDYbYXF2LQaSmpzsTd62doIIwlraev20dxmWgIK1jZlJSUjHn8zDPP8LWvfW3MMY/HQzqdJj8/f8zx/Px8GhsbJ5zX7XZPON7tdo883rt3L5/61KcoLy+ntbWVr371q9x5553U1dWh1Wpxu91XuFR1Oh05OTlj5pkOIX4LTIZFvVlHw/FpGwBc2SLOgF5jJRQJcrZxiAJn/rQt4kY3o7VqStBJBvpS7YRkHxeSH+IwlxGN5RAMTm/2KYpCnz9Ec6+HFvcg0Uvd4jUaiaoCJ1vLC7Fbprbc4okU7xxppqPHC8C6qkKu31SGRjN5ZZhEIsV7B8/S1e4BoGZjCVt2rp5RndMN28rwe8O0tfQx0DpIhkVHOi6jpBVqVuVR5cjlNbefuEZNdu/uGBTiJ1hyPHjPddgmCiCYJYFAgM8BnZ2dY+Ybb/XNJw888MDIvzds2MDGjRuprKzkrbfeYvfu3XN2HiF+C4z5kvhFLnVlny7hfHyLOH/UTlobpKzMy//5WP60e3Vj0wIkcrQuMiQb3alm4kqEtngzsWwtp/uy0ditWExGLEY9GklDLJkklkjhi0Rx+0L0DgXp96SIx9W6oPkOHetL89lQ6iLDOH2hbl8gwsE/NBIIRdFqNezcWkF1Rf6Ur4mE47z5ykmGBkNodRpuuKWGiqqJ9wImQpIkdt5aw5A3hN8bRpNWWJ2djd1gZmdVKVpJA3oJU6YRjzdCT/vgjOcWCK4V9Hot+jloZjw8h81mm1ZMHQ4HWq2Wvr6+Mcf7+vom3a9zuVyzGg9QUVGBw+GgpaWF3bt343K56O/vHzMmlUrh9XqnnGc8QvwWmOGmo0F/dKSD+HT1PUdbiN29uRw+1YndPkRRSYzLlaUnZjgtYNh1Kklg0mRQrl+PJ9VDo6+f/MIEQykPb5/zTDrPwIAqvoMeLZpoNjaNg42rs7ixUMMUnscROrq9vH2kmUQyRWaGkd03rcWRkznla4L+CId+fZJgIIo5w8gtd27EkT/7b7c6vZa1G0o48nYjUiSJ0WQmGUgQiyZpcA/QFQ+RUBIQiRMKRonHkhhnWXhcIFhpGAwGtm3bxqFDh9i3bx+gbk8cOnSIz372sxO+ZufOnRw6dIgvfvGLI8cOHjzIzp07Jz1PV1cXg4ODFBQUjMzh8/k4fvw427ZtA+DNN99ElmV27Ngx4/UL8VtgLFYTBqOORDyFfyhM34B1RvU9hy3EsjILoYRasutsUw87t1VMeb4rXafDwTVaBrpKqHIU89AfBdHahvCFo4TiCSKxBLKiYDLoMet1+AYNnK+zEh20sq4wg0ynhnAYPjwJ3V1TR4vKssLx0+2cauwGID/Xxu6bqzGbprYUBweCvPnKSWLRBFabmd33bLmqbuUVVS4+PHoBJRJHQSKVljl9vpfDbYPEo2Z6fH5y0mlSaRn/UFg0iRUIZsD+/ft5+OGH2b59O9dffz3f/e53CYfDI9Gfn/70pykqKuK5554D4Atf+AK7du3iH/7hH7j77rt56aWX+OCDD/jxj38MQCgU4utf/zr33XcfLpeL1tZW/vZv/5bVq1ezZ88eAGpqati7dy+PP/44L7zwAslkks9+9rM88MADM470BCF+C44kSWQ7rPR1D1F/LMTPf2WdcX3PYTasLaTLPcT5i/1sWV+CaYrgErjSdTo2uEaipsYGTGxRyTI8/zwk+mHTDEqxjSYUjvP2kfP09qttiIqchdRWrMJomHqvrrfLy9uvnyKZTJPjsHLbJzdNGdgyE3R6LTWbSjhxuJVUIM5A0sih9zvpScuELEPowzLOINiIC/ETCGbI/fffz8DAAE8//TRut5vNmzfzxhtvjAS1dHR0jGkVduONN/Liiy/yd3/3d3z1q19lzZo1HDhwYCTHT6vVcurUKf7lX/4Fn89HYWEhd9xxB88+++yYfcd///d/57Of/Sy7d+9Go9Fw33338b3vfW9Wa5cUZbgn97VHIBAgKysLv98/J5u51wofvHuecx92cqqhmPa+6glz/c6dU8XpK1+5UlQUReFXB0/hGQqxcW0R120qm9F5Z9w+aRRtbfD002r6xUR/Ar8fBgfVPoGj9y7buwZ552gLPT0pmpp0RIYqkROOaZPru9o8vP2b08hpGVdRNrvu3IjBMDff0RKJFP/1r+/R1ZngnUaFoKSQqoiSMsdJpGKYzxvICRp4+MENfOrPqubknALBeObyvjbX98jles+dCFHebBFwFtjV+p6tXoqLlWnre45HkiS2rFdDkc809dA/OE2W+yWGXacbNnBFybDJGB0tOhHDpdiGE+1TaZkjJy7yu/ca6elJUf+BFX/vRgrzHFRXqyJ64oRar7ShYexc7a39vOaZ1boAACAASURBVP3GKeS0zKrKPG67e9OcCR+AwaCjdvMqmpo0xIZCZGYl0JBAkiBTycSWaSCaTPDb13qJRpJzdl6BQHDtIcRvESgoySGZ0pCIRTDqIxOOGS8q4yktzKGi1IGsKPz+/SZi8fm5WY+OFp2I0Yn2/YNBfvnbDzlzvgdFAXdnIenQetavM2OzgVZ72V06vi7phfNu/vDbM8iyQvkaFzd/Yh1a3dVHr43Hkl3KUMCO3WREF02jD0nYYnZy43lkaR0YLVrcfTF+/5v2OT+3QCC4dhDitwgYDDoKS+zodODzTBxhOZPqLTdtryTLaiYUifPOkWbmw4M9uoj0+OmHS7FVV6dxD7XxyqHT+AIRzEY9tRU1DPaWU1qqmdaybT7Xw/uHzqEoCqtrCrlxd82YfYK5JBzWIGsLyNAb0SRlDGkDxpgemzYHiz6HDFs2CSVB0+lOQoHovKxBIBAsPkL8FolNW504HNDb2T+pqNTUqCIxWScGg17HbTdWo9Vq6Owd4nD9xTkXwOFoUYdD3Yf0+yGVUn+fOwdWuxdr/gnOnu9Wxassj0/duQWrOWdG7tJzJ7s4/FYDiqJQtb6YG25ZO2/CB+qXCXNmNsmkhD6pITNuQZOQydOUYTZkIZOBlAE6ncy5DyfwOQsEgmWBiPZcJMrWOFm3rplAXYAzHwYoLbddUd9zwwb41remToPIsVv42HWreftIM+daeglHE3zs+tUY53CvbKJoUb0xhqusjeJVg1iskJlhZOe2CkoLc4Cpe+6Belwrd9N6rgm7HWo2lbLtxtWTdnKYK0pLoXa9maNv52I3pAgGfVi0LhJxP2ZDDp7kWfIKtKCP03nRw3U3V837mgQCwcIjxG+RMGcY2b4zH1nupaO3k8HBdWNSEDZsgFdfZUZpEJWrnMiKwnvHWmnvHsT3uwi7b6omO+vqC90OM5xo39AU48SZLgaG+rHaFLQaifXVhWyuLRlTYWKi5PphFAXaW3pwWhvJylo44YPLlmz7xRp6W4MYrXGiuiH6Um6GYnG0NgVTYYQef5qsDANeT4hc58I3ARYIBPOLEL9FZO2GYi409eJ09rFtVyWptAmrVXV1futbqvDVzjC3bk1ZHnarmTffb8IfjPLr351mU20xtasLrrrskaIo9HmCNLW6udg5SFqWsWVBUb6d6zeXkWO/UmQnT66H9uZODMp51q5V63QulPANU1MDX9xv5N//ZS1nj58klOhHZzVgXDNIVlmUeDhGIKVlMBSlq21AiJ9AsAwR4reI5ObZyC+009fjIzDQxo5dawF1b290E9vRjA8WGZ1b58y1cs8nNvLW4WZ6+nx8cKqdM009rK8qZHWZE8ssE8XDkTgdPV7OX+jHM3S5S3Jhvp2t60vId0ydBzSRu1Sb7sJpU4XvY7eVsO2mNYviVqypgW/8Tyev/LyEd+qCRDRDJAu1JCzgRyYW0dDtDdJ0tpuajSUYpikkIBAIlhZC/BaY8YnmG7ZV0NdTT/O5HirXFuLIt80ot26yJrZmk4G9u2ppaR/g5NkuAqEoH5xu54PT7eRmZ1JakE1utoVMi4lMixGtVkM6LSPLMqFwHF8gypA/Qk+/n8FRgqfVaqgsdbK2Mh9n7swtodF1SRtP99J8uomsLLXbwuYdFYu6n6bRwB13V+Ab7OZYaw+DQzGSei1VuU5yjTo84UFaOj0cfec8N91eK/b+BIJlhBC/BaShgQnqeGZTWVRAItzL0T80sfdT27BaNdMGi0yVBiFJEmvK8qgsdXKhw0NDSy8D3hCDQ6ExgjYdkiSRl2OltDiHqvK8acuoTYZGA8lIN56uS8EtG0sWXfiGMWUYuG5nFd5AlIhnEEx61lU6ueWGCn4Rr6etyc2pUx0UluZQUV2w2MsVCARzhBC/BaKhQa1qMlEAS3tbJevLB4AA5890U7W+ZMpgka4upm1iC2qfvdVlTlaXOYlEE3S7fXS7ffiDUUKR+BWJ8WaTgWybGXtWBo7sTIoL7NMWoJ4J5052cPz9ZgCq1hcvmqtzMqrWF9Hc0E0gGieWlJC9SQYCIQZ0CUJ2DRf6h3j/rUacBfarKq4tEAiuHYT4LQCyrFp8kwewGOmxVZJla6L+cAu5eTbuvTdrwmCR4TSI6ZrYjifDbGBNeR5ryi93QE4m0ygoaDQatBppWkH6KLVBG091jgjf+q2L7+qcCK1Ww/ab1uD1BLnQ78M3GKL+VAfZ9gz8oSjpRJLWXi/vHjzLHfu2zqiJrkAguLYR4rcAdHRMH8DS1VfE1o1eYqEB3n7jNHfet53Pf940SSeGyVsIzYbZRIFO7LKdvEA1QNPpLo69ex6AjdvL2XT91O2XFpPCklxqNpYinZa42OcnppHpToRZv7oAspI0n+2mqdVNznvN7Ph49WIvVyAQXCVC/BaAmQWwSKzeUEtPcz1eT5C3Xj/FHfdu5YkndLO2tuaaqVy2E7VeUhSFM8fbOHn0AqDm8W28rnxhF/0R2H7TGrz9AdJpmU5PhKqSbMoz7TiLM4lFE3S0DmA50UaOw8qa2pn3DRMIBNcewn+zAMy0OHR2to5b7tyIyWzA6wnyh9+eQZHTs+7EMJeMd9lOV6BaURROHG4dEb6N15UveB7fR0Wr1XDzJ9aRYTbgNBqJDkbp7hkiGIrhKs7G6DTT4h7i/bca6O/1LfZyBQLBVSDEbwGYSXHomhp1nMVq4pY7N6LVaehuH+TQKydJzFPHhpkwE5ftcM6hoigcf6+ZsyfUjgjbblrDpuuuvT2+qbBmZbD95iqsZgPmpEJgKEJrxwDeWJS0VYvBYuBc5wCv/uIDPH2BxV6uQCD4iAjxWwCmKw49PoDF6critrs2oTfo6Ovx8Zv/qiccii3K2mfaz8/vl6n7fQMNpzoBuP7j1dRumiYc9Rqlcm0BVeuLybaY0AYTeNx+kqEkm4sLWLu+GJ1Zz9mOfl4/cJyg6PwgECxJhPgtEMPVTrZsUTufnz+v/t669co9MwBXcQ537NtKhsWIzxvijZ9/gLt7aMHXPROXrdGYpvnUWVobe9FoJG7aXUv1+uKFXegcIkkS1928hjW1RWRbTJgTCkM9AcKBGNs2lmIotuDWJPjwopvfHDhOLJpY7CULBIJZIgJeFpDR1U5mEsCS47Cy595t/P61U/i8IX73qxNsvK6c9VtXzWvbn9FMV6C6sz1GQfZpIoEAWp2Gj9+xnpJy54KsbT7RaDTccMtacpxWjv2hiWB/nAvn3QSUJKZcE7JfT5c7Qn1TN4YD9dxy50Zs9ozFXrZAIJghQvwWGI1mbD3O6ci0mdl73zaO/eE8rY29fHj0Al1taqsdpytr3tY5zFQFqjvaghjTH1KxKo7ZbOBjd6zDVZwz72taSKrWFWHPsfCbX9VzorWXrpYBQvkasGgw5WQQ9abxDgb55Yt15BfaqVxbSHlV/qy/nCTiSd793Vl0Oi037a6dly72AoHgMkL8lgB6vY4bb6vFVZzDsT80Mdgf4I1ffEDl2gK23FCJeZYFq2fL+ALVXV0KevpwWhqprkqzuiqTW+/aSOYyrX6SV2DnE3dvJvSfCU509eFNp7Bkmal2Oti9u5Khbj8DPT76Lv30dnrZeVvNjJPh02mZN187xeGTF9FIEnqDjp23zkEip0AgmBQhfkuIiioXBcXZnDjcSmtjL62NvXS09rO6toiaTSVYMk3zdu5hl21TQ4xjf2jC7/WQlQWFJTl8fM/6Zd/1wFWcwyf/aBvpXxzjXI+HLLOJT95YS7fbT3csijHfQiqcwNvtQ27qJZlM8fE71k9rwSmKwuG3G3m3vpWLsRDICpo/NJBflE1FlWuBrk4gWHkI8VtimDOM3HhbLWtqi/jg3fN4+gM0fNhB05kuKqpcrK5RO0PMdXpBKpnm/NluTh27gCSnycnVsH7rKtZvLRuxcD5K+bOlREm5k7v+21Z0r54kLcucr+/Ai4xGKxFPpsCgQZNtor0vgEYj8fZvTnPrXZuIRhIEfBEkCSRJi7tPgyJlkJWlIeLv4vjxi3RHwmhyDOr77Pfxm1dP8umCW7BY5+8LjUCwkhHit0RxurLYe992eju9nKlvo6/HR0tDDy0NPWTlWKisLqCk3Ik1y3xVQphOpWk+18OZ+naikfjIuW+4pQZ7zuX8h49S/mwpUlHlYq+0hcNvNeAfDNHhD7Fqdd7Ie2yzZ5BlNaMJJuhuH+TffvQmiqIQiiUZ9CpcaJXweiUU2UpmdiU51l4Ki7QUFmTTJ8XRSBIJUoRjCSLhmBA/gWCeEOK3hJEkicLSXApLcxlw+zh/toeO1n783jD1dS3U17VgtZkpKM3FmW8j22HFZs+Yci9KURQi4Th93UN0tXno6RgkmUwDkGk1s2F7GZVrC8YI6mzLny11ytbkk5Fp5Le/qkeXlOm84MGenYHRqCcn28Inbqml5XQ35890kZZlLvT76Awk6O5RSCbAmCVjVnyQCNNxUUt/n4ZNe3PRxHoIDUVZbcrkpp1VOF32xb5UgWDZIsRvmeB02XG67Fx38xraW/tpb+mnr9dHMBAleKaL82fUcRqtBovFiNFswJxhQKORkGUFWZaJhlX3XCqVHjO3xWpi/VZV9MYL5/QdK9TyZ9XVy8sFmldgZ9cdG+CN08iyjKRIEJNJ9gY5e6yN62+uIifPRt2ZNgJyiIvRBBGnHosZ4uk0qXAK/F5yDNl4Bw0MtRaQY+0lS5vBxzaXc/3Hqhb7EgWCZY0Qv2WGwahnTW0Ra2qLSCZTuLuG6OsewusJ4vWESCZSqiBOUZlEo5Gw52RStCqX4jInuXnWSV2nsyl/NpsUj6VASbmTW+/ayMXzfSSTKVLJNP29Ptpb+ggMhXFUOujyB+gMhQkYNZitBmSdQkpWSGck0enN6HwxrFYtF862s+uWHIrXmNl992bRNkkgmGeE+C1j9HodJeXOkaRzRVEIB2NEI3GikQSxaBJFVtBo1V5+JrMBmz0Di9U045vvzDpWqOOWI0WrHBStcow8HnD7ePuNMwwNhujyBFB0MoosISug0w5/O5BAUkjLCVLJBBZdBmEyWbOumNvvcmEwiI+lQDDfiE/ZCkKSJDJt5jnNxxtd/sxmu/L54Y4VVuucnfKaxumyc8e+rRz8ZT0xXxhftw+9ksYQglQsgk4D2nQaYxDMPhkbuUi6bKyuLdRu1mIwLPYVCAQrA+FbEVwVs+lYsVKw2TO4Y99WKlfns67QQbXOjHNQRt+axNKZJLNbxj5kwiHlk+OsIpjeQm2tdkW9RwLBYiMsP8FVMVX5s66uKztWrBSsWRncdvdmBtw+Th69gIl+6usVYgEJqxWs1lyMWTV09WfidK7M90ggWEyE+C1RrqWE8vHlz7q7VVfn1q3qTX05pTnMFqfLzifu2cqNt8VobFB49VWJ880SQ3ED5qAk3iOBYJEQ4rcEuRYTymfbsWKlYck0se062LJNvEcCwbWAEL8lxrWcUD7bjhUrEfEeCQTXBuI75xJifEK5zQZa7eWEco9HTSiX5cVeqUAgEFzbCPFbQswmoVwgEAgEkyPcnkuIlZ5Qfk1wLUUaCQSCj4z41C4hRieUT8RSSCiXZWhrg9On1d9LykXb0ADPPw9PPw3PPqv+fv559bhAsEL54Q9/SFlZGSaTiR07dnD06NEpx//sZz9j7dq1mEwmNmzYwGuvvTbyXDKZ5Ctf+QobNmzAYrFQWFjIpz/9aXp6esbMUVZWhiRJY36ef/75Wa173sUvHo+zefNmJEni5MmT8326Zc1STyhf0toxHGl04oSavFhdrf4+cUI9viQuQiCYW15++WX279/PM888Q319PZs2bWLPnj309/dPOP7999/nwQcf5LHHHuPEiRPs27ePffv2ceaMWnk/EolQX1/PU089RX19Pb/4xS9oamrinnvuuWKub3zjG/T29o78fO5zn5vV2iVFGX8bnVu+8IUv0NzczOuvv86JEyfYvHnzjF8bCATIysrC7/djm6h21gpkdLTnRAnl12r7oMmiVDs7r+11A6p5+vzzqtCNbl0B6reOc+fUpMavfEW4QAXTMpf3teG5PJ7BOblHBgIBHI7cGa9tx44dXHfddfzgBz8AQJZlSkpK+NznPscTTzxxxfj777+fcDjMK6+8MnLshhtuYPPmzbzwwgsTnuPYsWNcf/31tLe3U3rpm31ZWRlf/OIX+eIXv/hRLhOY5z2/119/nd/+9rf8/Oc/5/XXX5/PU60YlmJC+ZJve7SSW1cIlgQ//+m7mM2TBAPMgmhU3VMJBAJjjhuNRoxG45hjiUSC48eP8+STT44c02g03H777dTV1U04f11dHfv37x9zbM+ePRw4cGDSNfn9fiRJwm4f29/y+eef59lnn6W0tJQ/+7M/40tf+hI63cwlbd7Er6+vj8cff5wDBw6QkZExo9fE43Hi8fjI4/F/AIHKUksoX/LaISKNBCuMkpKSMY+feeYZvva1r4055vF4SKfT5Ofnjzmen59PY2PjhPO63e4Jx7vd7gnHx2IxvvKVr/Dggw+OsUQ///nPs3XrVnJycnj//fd58skn6e3t5Tvf+c5ML3F+xE9RFB555BH+6q/+iu3bt9PW1jaj1z333HN8/etfn48lLTsWK1n6owQ7LnntEK0rBNc49z1y85y5Pf/yr6Gzs3PMfOOtvoUgmUzyp3/6pyiKwo9+9KMxz422Hjdu3IjBYOAv//Ivee6552a81lmJ3xNPPME3v/nNKcc0NDTw29/+lmAwOMYcnglPPvnkmIsKBAJXfAMRLB4ftazakteO4Uijyfb8urpUv/O1GmkkWPbo9Tr0+qu3ZYbnsNls04qpw+FAq9XS19c35nhfXx8ul2vC17hcrhmNHxa+9vZ23nzzzWnXsmPHDlKpFG1tbVRXV085dphZOcq+/OUv09DQMOVPRUUFb775JnV1dRiNRnQ6HatXrwZg+/btPPzww5PObzQaR970mbz5goXjaoIdl3qU6kjrCodD3aD0+yGVUn+fO7dyW1cIVjQGg4Ft27Zx6NChkWOyLHPo0CF27tw54Wt27tw5ZjzAwYMHx4wfFr7m5mZ+97vfkZubO+1aTp48iUajIS8vb8brn9VXBafTidPpnHbc9773Pf7+7/9+5HFPTw979uzh5ZdfZseOHbM5pWACFjrP+moDVpZF26OlGGkkEMwz+/fv5+GHH2b79u1cf/31fPe73yUcDvPoo48C8OlPf5qioiKee+45QI3+37VrF//wD//A3XffzUsvvcQHH3zAj3/8Y0AVvj/+4z+mvr6eV155hXQ6PbIfmJOTg8FgoK6ujiNHjnDrrbditVqpq6vjS1/6En/+539Odnb2jNc+L3t+peO+wmdmZgJQWVlJcXHxfJxyxbAYHR3mImBlWWjHUos0Egjmmfvvv5+BgQGefvpp3G43mzdv5o033hgJauno6EAz6vNx44038uKLL/J3f/d3fPWrX2XNmjUcOHCA9evXA9Dd3c2vfvUrgCvS4n7/+99zyy23YDQaeemll/ja175GPB6nvLycL33pS1dEkU7HvOf5AbS1tVFeXi7y/K6SxcqVO31aTUqvrlYLaY8nlYLz5+Gpp2DDhqnnEtXBBCud+cjzm6t75Eq65y5Ibc+ysjIWQGOXNYuZKzeXASuipY9AILgWEN+5lwiL2dFhyQesCAQCwTiE+C0RZpIrF4vNT66cCHYUCATLDXG7WiIsdkeH4YCVLVtgcFDd4xscVANWrum6nAKBQDABop/fEuFayLMWwY4CgWC5IMRviXCt5MqJgBWBQLAcEN/ZlxDC9SgQCARzg7D8lhjC9SgQCARXjxC/JYhwPQoEAsHVIewFgUAgEKw4hPgJBAKBYMUhxE8gEAgEKw4hfgKBQCBYcQjxEwgEAsGKQ4ifQCAQCFYcQvwEAoFAsOIQeX6C5YvonCsQCCZBiJ9gedLQoHb/bWxUez2ZTGpl8HvvFXXgBAKBED/BMqShAb73PbXtfUnJ5QrgJ06olcFFIVSBYMUjfECC5YUsqxafx6P2frLZQKtVf9fWqscPHFDHCQSCFYsQP8HyoqNDdXWWlIxtegjq4+Ji1TLs6Fic9QkEgmsCIX6C5UUwqO7xWSwTP2+xqM8Hgwu7LoFAcE0hxE+wvLBa1eCWcHji58Nh9XmrdWHXJRAIrimE+AmWF6WlalRnZycoytjnFEVte19To44TCAQrFiF+guWFRqOmMzgccO4c+P2QSqm/z51Tj+/bJ/L9BIIVjrgDCJYfNTVqOsOWLTA4COfPq7+3bhVpDgKBABB5foLlSk0NVFeLCi8CgWBChPgJli8aDZSVLfYqBALBNYj4GiwQCASCFYcQP4FAIBCsOIT4CQQCgWDFIfb8BILZINokCQTLAiF+AsFMEW2SBIJlgxA/gWAmiDZJAsGyQvhrBILpEG2SBIJlhxA/gWA6RJskgWDZIcRPIJgO0SZJIFh2CPETCKZDtEkSCCblhz/8IWVlZZhMJnbs2MHRo0enHP+zn/2MtWvXYjKZ2LBhA6+99tqY5xVF4emnn6agoACz2cztt99Oc3PzmDFer5eHHnoIm82G3W7nscceIxQKzWrdQvwEgukQbZIEggl5+eWX2b9/P8888wz19fVs2rSJPXv20N/fP+H4999/nwcffJDHHnuMEydOsG/fPvbt28eZM2dGxnzrW9/ie9/7Hi+88AJHjhzBYrGwZ88eYrHYyJiHHnqIs2fPcvDgQV555RXeeecdPvOZz8xq7ZKijP80XzsEAgGysrLw+/3YbLbFXo5gJTM62rO4+HK0Z1eX2iZJRHsKZshc3teG5/IMeObkHhkIBHA4HTNe244dO7juuuv4wQ9+AIAsy5SUlPC5z32OJ5544orx999/P+FwmFdeeWXk2A033MDmzZt54YUXUBSFwsJCvvzlL/PXf/3XAPj9fvLz8/npT3/KAw88QENDA7W1tRw7dozt27cD8MYbb3DXXXfR1dVFYWHhjK71mk51GNblQCCwyCsRrHiKiuC//3f49a/VFknxOBiNarTnJz+pPi/+nwpmwPD9bC7tjn/9n/+B2Wi+6nmi8Shw5T3XaDRiNBrHHEskEhw/fpwnn3xy5JhGo+H222+nrq5uwvnr6urYv3//mGN79uzhwIEDAFy8eBG3283tt98+8nxWVhY7duygrq6OBx54gLq6Oux2+4jwAdx+++1oNBqOHDnCvffeO6NrvabFL3gpgKCkpGSRVyIQTME3vrHYKxAsQYLBIFlZWVc1h8FgwOVy8aX/+/+Yo1VBZmbmFffcZ555hq997Wtjjnk8HtLpNPn5+WOO5+fn09jYOOHcbrd7wvFut3vk+eFjU43Jy8sb87xOpyMnJ2dkzEy4psWvsLCQzs5OrFYr0vgQ80sEAgFKSkro7Oxcdq7R5XxtsLyvbzlfGyzv65vva1MUhWAwOGP33FSYTCYuXrxIIpGYg5WpKIpyxf12vNW3HLimxU+j0VBcXDyjsTabbdl9CIdZztcGy/v6lvO1wfK+vvm8tqu1+EZjMpkwmUxzNt9McTgcaLVa+vr6xhzv6+vD5XJN+BqXyzXl+OHffX19FBQUjBmzefPmkTHjA2pSqRRer3fS806EiPYUCAQCwawxGAxs27aNQ4cOjRyTZZlDhw6xc+fOCV+zc+fOMeMBDh48ODK+vLwcl8s1ZkwgEODIkSMjY3bu3InP5+P48eMjY958801kWWbHjh0zvwBlieP3+xVA8fv9i72UOWc5X5uiLO/rW87XpijL+/qW87XNNS+99JJiNBqVn/70p8q5c+eUz3zmM4rdblfcbreiKIryF3/xF8oTTzwxMv69995TdDqd8u1vf1tpaGhQnnnmGUWv1yunT58eGfP8888rdrtd+eUvf6mcOnVK+aM/+iOlvLxciUajI2P27t2rbNmyRTly5Ijy7rvvKmvWrFEefPDBWa19yYtfLBZTnnnmGSUWiy32Uuac5XxtirK8r285X5uiLO/rW87XNh98//vfV0pLSxWDwaBcf/31yuHDh0ee27Vrl/Lwww+PGf8f//EfSlVVlWIwGJR169Ypr7766pjnZVlWnnrqKSU/P18xGo3K7t27laampjFjBgcHlQcffFDJzMxUbDab8uijjyrBYHBW676m8/wEAoFAIJgPxJ6fQCAQCFYcQvwEAoFAsOIQ4icQCASCFYcQP4FA8P+3d3chTf1xHMffZ0oxa8UKg4waSwIvIgzLBQatB3qgGyMsKESHSMIxlC4qKrSLYpFBkhclBBZRGBU1eiAYRBZCEGiRQsIIISblSBIRsTHP/+KPo2HZ5jZ/e/i+YBfnnF18fuzi49lvnq8QWSfjyu/58+c4HA7MZjNWq5Xy8nLVkRJqcnKS4uJiNE3jw4cPquMkxODgIDU1NdjtdsxmM4WFhTQ3Nyf0qRXzLdYxL+nA7XazefNmLBYLK1asoLy8nIGBAdWxkuLSpUtomkZjY6PqKCJJMqr8Hj16RGVlJS6Xi48fP9Ld3c2RI0dUx0qokydPJuSxSKnk8+fPTE1N0d7eTn9/P1evXuXGjRucOXNGdbQ5iXXMS7ro6upC13XevXuH1+slGAyye/duxv825zBNvX//nvb2djZs2KA6ikimmP4xIoUFg0Fj1apVxs2bN1VHSZoXL14YRUVFRn9/vwEYvb29qiMlzeXLlw273a46xpyUlpYauq6Hj0OhkFFQUGC43W6FqRJveHjYAIyuri7VURJmbGzMWLduneH1eo1t27YZDQ0NqiOJJMmYO7+enh78fj8mk4mNGzeycuVK9u3bFzEkMZ19//6d2tpa7ty5Q15enuo4STc6OsqyZctUx4jZ9JiX30ey/GvMS7oaHR0FSMvP6W90XWf//v0Rn5/ITBlTfl++fAHg/PnznDt3jmfPnmG1WnE6nYyMjChOFx/DMKiurqauri5ihlWm8vl8tLW1cezYMdVRYjbbmJdYxq2kWlI5hwAAAwZJREFUuqmpKRobGykrK2P9+vWq4yREZ2cnPT09uN1u1VHEPEj58jt9+jSaps36mt4zAjh79iwHDx6kpKSEjo4ONE3jwYMHilfxZ9Gura2tjbGxsYihkekg2vX9zu/3s3fvXioqKqitrVWUXPyLruv09fXR2dmpOkpCfP36lYaGBu7evatkQoKYfyn/eLNAIMCPHz9mfc/atWvp7u5mx44dvH37lq1bt4avORwOdu3axcWLF5MdNWbRru3QoUM8ffo0YsZWKBQiJyeHo0ePcvv27WRHnZNo17dgwQIAhoaGcDqdbNmyhVu3bmEypfzfZjP8+vWLvLw8Hj58GPFL46qqKn7+/InH41GYLjHq6+vxeDy8efMGu92uOk5CPHnyhAMHDpCTkxM+FwqF0DQNk8nE5ORkxDWR/lJ6nh9Afn4++fn5/3xfSUkJCxcuZGBgIFx+wWCQwcFBbDZbsmPOSbRru3btGhcuXAgfDw0NsWfPHu7fvx/bCI95Fu364P87vu3bt4fv2NOx+CByzMt0+U2Peamvr1ecLj6GYXD8+HEeP37M69evM6b4AHbu3MmnT58izrlcLoqKijh16pQUXwZK+fKL1pIlS6irq6O5uZnVq1djs9loaWkBoKKiQnG6+KxZsybiePHixQAUFhZGPew3lfn9fpxOJzabjStXrhAIBMLXYhlOmSpOnDhBVVUVmzZtorS0lNbWVsbHx3G5XKqjxUXXde7du4fH48FisYT3MJcuXYrZbFacLj4Wi2XG3uWiRYtYvnx5xuxpikgZU34ALS0t5ObmUllZycTEBA6Hg1evXmG1WlVHE7Pwer34fD58Pt+MMk/xb+X/6PDhwwQCAZqamvj27RvFxcW8fPlyxo9g0s3169cBcDqdEec7Ojqorq6e/0BCxCHl9/yEEEKIREvPjRUhhBAiDlJ+Qgghso6UnxBCiKwj5SeEECLrSPkJIYTIOlJ+Qgghso6UnxBCiKwj5SeEECLrSPkJIYTIOlJ+Qgghso6UnxBCiKwj5SeEECLr/Ac/S1Cm3fWIRwAAAABJRU5ErkJggg==",
"text/plain": [
"PyPlot.Figure(PyObject <Figure size 500x500 with 2 Axes>)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Draw 100 samples from the normalising flow\n",
"Xgen = rand(flow, 100) |> cpu |> Flux.data\n",
"\n",
"makeplot(X; xgen=Xgen, logpdf2plot=x -> logpdf(flow, x))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"kernelspec": {
"display_name": "Julia 1.1.0",
"language": "julia",
"name": "julia-1.1"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.1.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment