{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Probabilistic Programming 2: Message Passing & Analytical Solutions\n", "\n", "#### Goal \n", " - Understand when and how analytical solutions to Bayesian inference can be obtained.\n", " - Understand how to perform message passing in a Forney-style factor graph.\n", "\n", "#### Materials \n", " - Mandatory\n", " - This notebook\n", " - Lecture notes on factor graphs\n", " - Lecture notes on continuous data\n", " - Lecture notes on discrete data\n", " - Optional\n", " - Chapters 2 and 3 of [Model-Based Machine Learning](http://www.mbmlbook.com/LearningSkills.html).\n", " - [Differences between Julia and Matlab / Python](https://docs.julialang.org/en/v1/manual/noteworthy-differences/index.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that none of the material below is new. The point of the Probabilistic Programming sessions is to solve practical problems so that the concepts from Bert's lectures become less abstract." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\"./workspace/\")\n", "Pkg.instantiate();" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "using LinearAlgebra\n", "using SpecialFunctions\n", "using ForneyLab\n", "using PyCall\n", "using Plots\n", "pyplot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll be using the toolbox [ForneyLab.jl](https://github.com/biaslab/ForneyLab.jl) to visualize factor graphs and compute messages passed within the graph." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem: A Job Interview\n", "\n", "After you finish your master's degree, you will need to start looking for jobs. You will get one or more job interviews and some will be fun while others will be frustrating. The company you applied at wants a talented and skilled employee, but measuring a person's skill is tricky. Even a highly-skilled person makes mistakes and people with few skills can get lucky. In this session, we will look at various ways to assess skills using questions and test assignments. Along the way, you will gain experience with message passing, factor graphs and working with discrete vs continuous data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1: Right or wrong\n", "\n", "Suppose you head to a job interview for a machine learning engineer position. The company is interested in someone who knows Julia and has set up a test with syntax questions. We will first look at a single question, which we treat as an outcome variable $X_1$. You can either get this question right or wrong, which means we're dealing with a Bernoulli likelihood. The company assumes you have a skill level, denoted $\\theta$, and the higher the skill, the more likely you are to get the question right. Since the company doesn't know anything about you, they chose an uninformative prior distribution: the Beta(1,1). We can write the generative model for answering this question as follows:\n", "\n", "$$\\begin{align*}\n", "p(X_1, \\theta) =&\\ p(X_1 \\mid \\theta) \\cdot p(\\theta) \\\\\n", "=&\\ \\text{Bernoulli}(X_1 \\mid \\theta) \\cdot \\text{Beta}(\\theta \\mid \\alpha = 1, \\beta=1) \\, .\n", "\\end{align*}$$\n", "\n", "The factor graph for this model is:\n", "\n", "\n", "![](../figures/ffg-PP2-01.png)\n", "\n", "where $f_b(X_1, \\theta) \\triangleq \\text{Bernoulli}(X_1 \\mid \\theta)$ and $f_a(\\theta) \\triangleq \\text{Beta}(\\theta \\mid 1,1)$. We are now going to construct this factor graph using the toolbox ForneyLab." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Start building a model by setting up a FactorGraph structure\n", "factor_graph1 = FactorGraph()\n", "\n", "# Add the prior over \n", "@RV θ ~ Beta(1.0, 1.0, id=:f_a)\n", "\n", "# Add the question correctness likelihood\n", "@RV X1 ~ Bernoulli(θ, id=:f_b)\n", "\n", "# The outcome X1 is going to be observed, so we set up a placeholder for the data entry\n", "placeholder(X1, :X1)\n", "\n", "# Visualize the graph\n", "ForneyLab.draw(factor_graph1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Code notes:\n", "- @RV is a macro that lets you add Random Variables as nodes to your factor graph.\n", "- The symbol ~ means \"is distributed as\". For example, $\\theta \\sim \\text{Beta}(1,1)$ should be read as \"$\\theta$ is distributed according to a Beta($\\theta$ | $a$=1, $b$=1) probability distribution\".\n", "\n", "----" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above you can see the factor graph that ForneyLab has generated. It is not as clean as the ones in the theory lectures. For example, ForneyLab generates nodes for the clamped parameters of the Beta prior ($\\alpha = 1$ and $\\beta = 1$), while we ignore these in the manually constructed graphs. Nonetheless, ForneyLab's version is very useful for debugging later on. \n", "\n", "We are now going to tell ForneyLab to generate a message passing procedure for us." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Indicate which variables you want posteriors for\n", "q = PosteriorFactorization(θ, ids=[:θ])\n", "\n", "# Generate a message passing inference algorithm\n", "algorithm = messagePassingAlgorithm(θ, q)\n", "\n", "# Compile algorithm code\n", "source_code = algorithmSourceCode(algorithm)\n", "\n", "# Bring compiled code into current scope\n", "eval(Meta.parse(source_code))\n", "\n", "# Visualize message passing schedule\n", "pfθ = q.posterior_factors[:θ]\n", "ForneyLab.draw(pfθ, schedule=pfθ.schedule);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Code notes:\n", "- ForneyLab.jl compiles the specified model and inference procedure into a string. This string is human-readable and portable across devices. The functions `eval(Meta.parse())` are used to bring that string into the current scope, so the generated code can be used.\n", "- In `ForneyLab.draw()`, only the edge of interest is shown with the two connecting nodes and their inputs. All other parts of the graph are ignored.\n", "\n", "----" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ForneyLab's visualization of the message passing procedure for a specific variable isolates that variable in the graph and shows where the incoming messages come from. In this case, we are interested in $\\theta$ (your skill level), which receives message ((2)) from the likelihood node (the \"Ber\" node above $\\theta$) and message ((1)) from the prior node (the \"Beta\" node below $\\theta$). \n", "\n", "In the message passing framework, the combination of these two messages produces the \"marginal\" distribution for $\\theta$. We are using message passing to do Bayesian inference, so note that the \"marginal\" for $\\theta$ corresponds to the posterior distribution $p(\\theta \\mid X_1)$. \n", "\n", "Let's inspect these messages." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Message ((1)) = Beta(a=1.00, b=1.00)\n", "Message ((2)) = Beta(a=2.00, b=1.00)\n", "\n" ] } ], "source": [ "# Initialize data structure for messages\n", "messages = Array{Message}(undef, 2)\n", "\n", "# Initalize data structure for marginal distributions\n", "marginals = Dict()\n", "\n", "# Suppose you got question 1 correct\n", "data = Dict(:X1 => 1)\n", "\n", "# Update coefficients\n", "stepθ!(data, marginals, messages);\n", "\n", "# Print messages\n", "print(\"\\nMessage ((1)) = \"*string(messages[1].dist))\n", "println(\"Message ((2)) = \"*string(messages[2].dist))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Code notes:\n", "- A `Dict` is a [dictionary data structure](https://docs.julialang.org/en/v1/base/collections/#Base.Dict). In the `marginals` dictionary we only have one entry: the key is the variable `θ` (as a Symbol, i.e. as `:θ`) and the value is a `ProbabilityDistribution` object. It is the initial distribution for that variable. In the `data` dictionary, we also only have one entry: the key is the variable `X1` and the value is a Float. This is because `X1` is observed. We know its value without uncertainty.\n", "- The `stepθ!` function comes from the algorithm compilation.\n", "\n", "----" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alright. So, they are both Beta distributions. Do they actually make sense? Where do these parameters come from?\n", "\n", "Recall from the lecture notes that the formula for messages sent by factor nodes is:\n", "\n", "$$ \\boxed{\n", "\\underbrace{\\overrightarrow{\\mu}_{Y}(y)}_{\\substack{ \\text{outgoing}\\\\ \\text{message}}} = \\sum_{x_1,\\ldots,x_n} \\underbrace{\\overrightarrow{\\mu}_{X_1}(x_1)\\cdots \\overrightarrow{\\mu}_{X_n}(x_n)}_{\\substack{\\text{incoming} \\\\ \\text{messages}}} \\cdot \\underbrace{f(y,x_1,\\ldots,x_n)}_{\\substack{\\text{node}\\\\ \\text{function}}} }\n", "$$\n", "\n", "
\n", "\n", "The prior node is not connected to any other unknown variables and so does not receive incoming messages. Its outgoing message is therefore:\n", "\n", "$$\\begin{align}\n", "\\overrightarrow{\\mu}(\\theta) =&\\ f(\\theta) \\\\\n", "=&\\ \\text{Beta}(\\theta \\mid 1,1) \\, .\n", "\\end{align}$$\n", "\n", "So that confirms the correctness of Message ((1)).\n", "\n", "Similarly, we can also derive the message from the likelihood node by hand. For this, we need to know that the message coming from the observation $\\overleftarrow{\\mu}(x)$ is a delta function, which, if you gave the right answer ($X_1 = 1$), has the form $\\delta(X_1 - 1)$. The \"node function\" is the Bernoulli likelihood $\\text{Bernoulli}(X_1 \\mid \\theta)$. Another thing to note is that this is essentially a convolution with respect to a delta function and that its [sifting property](https://en.wikipedia.org/wiki/Dirac_delta_function#Translation) holds: $\\int_{X_1} \\delta(X_1 - x) \\ f(X_1, \\theta) \\mathrm{d}X_1 = f(x, \\theta)$. The fact that $X_1$ is a discrete variable instead of a continuous one, does not negate this. Using these facts, we can perform the message computation by hand:\n", "\n", "$$\\begin{align}\n", "\\overleftarrow{\\mu}(\\theta) =&\\ \\sum_{X_1} \\overleftarrow{\\mu}(X_1) \\ f(X_1, \\theta) \\\\\n", "=&\\ \\sum_{X_1} \\delta(X_1 - 1) \\ \\text{Bernoulli}(X_1 \\mid \\theta) \\\\\n", "=&\\ \\sum_{X_1} \\delta(X_1 - 1) \\ \\theta^{X_1} (1 - \\theta)^{1-X_1} \\\\\n", "=&\\ \\theta^{1} (1 - \\theta)^{1-1} \\, .\n", "\\end{align}$$\n", "\n", "Remember that the pdf of a Beta distribution is proportional to $\\theta^{\\alpha-1} (1 - \\theta)^{\\beta-1}$. So, if you read the second-to-last line above as $\\theta^{2-1} (1 - \\theta)^{1-1}$, then the outgoing message $\\overleftarrow{\\mu}(\\theta)$ is proportional to a Beta distribution with $\\alpha=2$ and $\\beta=1$. So, our manual derivation verifies ForneyLab's Message ((2)).\n", "\n", "Let's now look at these messages visually." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Probability density function of a Beta distribution\n", "Beta(θ, α, β) = 1/beta(α,β) * θ^(α-1) * (1-θ)^(β-1)\n", "\n", "# Extract parameters from message ((1))\n", "α1 = messages[1].dist.params[:a]\n", "β1 = messages[1].dist.params[:b]\n", "\n", "# Extract parameters from message ((2))\n", "α2 = messages[2].dist.params[:a]\n", "β2 = messages[2].dist.params[:b]\n", "\n", "# Plot messages\n", "θ_range = range(0, step=0.01, stop=1.0)\n", "plot(θ_range, Beta.(θ_range, α1, β1), color=\"red\", linewidth=3, label=\"Message ((1))\", xlabel=\"θ\", ylabel=\"p(θ)\")\n", "plot!(θ_range, Beta.(θ_range, α2, β2), color=\"blue\", linewidth=3, label=\"Message ((2))\", size=(800,300))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The marginal distribution for $\\theta$, representing the posterior $p(\\theta \\mid X_1)$, is obtained by taking the product (followed by normalization) of the two messages: $\\overrightarrow{\\mu}(\\theta) \\cdot \\overleftarrow{\\mu}(\\theta)$. Multiplying two Beta distributions produces another Beta distribution with parameter:\n", "\n", "$$\\begin{align}\n", "\\alpha \\leftarrow&\\ \\alpha_1 + \\alpha_2 - 1 \\\\\n", "\\beta \\leftarrow&\\ \\beta_1 + \\beta_2 - 1 \\, ,\n", "\\end{align}$$\n", "\n", "In our case, the new parameters would be $\\alpha = 1 + 2 - 1 = 2$ and $\\beta = 1 + 1 - 1 = 1$. Let's check with ForneyLab what it computed." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Beta(a=2.00, b=1.00)\n" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "marginals[:θ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, ForneyLab matches our manual derivations. Let's visualize the messages as well as the marginal." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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iIiIiEinFR0dzZYtW9zLK1asaPAt4x3ByZMnefPNN3E4HO51P/vZz/jxj38MgL+/P//xH/9BdnY2X3zxBddffz0/+clPALDZbDz66KP86le/cu/70EMP8ec//5kLFy54dJwKICIiIiLSad1///2sWLECgOLiYvbs2cOUKVPqtHn++ee58cYbSUlJYerUqeTm5gKwdetWhg4dyvDhw7Hb7WzevBmAZ555hqSkJIYPH87w4cM5ceIEAHfffTejRo1i6NChTJ8+nfz8fHcfP//5z4mNjWX06NE8/vjjdULQypUrGT16NCkpKUycOJH09PQGj2XFihWkpqZis9kAyMnJwTRNJkyYAEDfvn0ZN26cu/3o0aM5evSoe3nGjBls27aNkpISAIKCgpg8eTJOp/MKfrKN04sIRURERKRNnDpV+8fT+vev/dMSEyZM4MUXX+TkyZNs3bqVefPm4e/v797+17/+lYMHD7J79278/f1ZuXIlS5YsYfPmzTz55JO89NJLjB07FpfLxYULFygqKuL555/n1KlTdOnShbKyMvz8an/n/8ILL9CrVy8Afvvb3/L000+zbNkytm7dyuuvv86BAwfo0qULqamp7v4/+ugj0tLS2LlzJ8HBwXz44YfcddddHDhwoN6x7Nixo86lYx988AFjxoxp8Lhramr44x//yOzZs93rAgMDsdvtfPTRR+4QNnbsWLZt28YDDzzQsh9oCyiAiIiIiEibWL4cvnHFj8c89RT88pctb3/PPffwyiuvsGnTJlavXs3q1avd2zZt2sTevXsZOXIkUPvF/euAcuutt7J06VJSU1OZPHkyw4cPp6amhri4OO6++24mT57MtGnTGDBgAACrV69m5cqVXLp0ifLycvr16wfA+++/z/z58+natSsACxcu5Ne//jUAmzdv5sCBA4wePdo9prNnz1JZWUlQUFCd48jLy3PXbGj5a5Zl8fDDDxMREcEPfvCDOtv69etHXl5eo8ueoAAiIiIiIm3ioYdg5kzP123p2Y+vLVq0iJSUFOLj44mLi6uzzbIsnnzySe6///56+/3ud7/DNE3ef/99Fi5cyF133cUTTzzBnj172LVrFzt27GDMmDGsWbMGm83GsmXL2LVrF71792bLli08/fTT7j6+vmzqcpZlcf/997vbNiU0NJTy8vJGl7/2yCOPkJuby6ZNm9xnZ75WUVFBly5dGl32BAUQEREREWkTrblUypuioqJ47rnnSExMrLdt5syZ/P73v2f27NlERkZSVVVFeno6I0aMICsrC8MwMAyDgIAAtm/fTklJCSUlJYwfP57x48djmiafffYZgwYNIiwsjMjISCorK1m+fLm7j5tvvpmnnnqKpUuXEhISwsqVK93bZsyYwb333ssDDzzAwIEDcblc7N+/v8Eb5YcOHUpWVhZjx451L2/YsKFOm0ceeYTDhw+zadOmemdQADIzMxk2bFijy56gACIiIiIind59993X4Pp77rmHc+fOMWnSJGw2G9XV1SxevJgRI0bw05/+lIMHDxIUFERoaCh/+tOfKC4uJjU1ldLSUmw2G3FxcSxcuJCuXbuyatUqEhMTGTBgAGPHjuXtt98GakPOrl27GDZsGFFRUYwZM4aioiKg9h6VZ599llmzZlFTU0NVVRXTpk1rMICkpqby6quvus/WjBs3jpycHAoLC4mMjOSjjz7ixRdfJDEx0X1J16BBg3jttdcAOH78OAB2u91d86233uLZZ5/1zA/5H2yWZVkerehD+/fvZ+TIkezbt4+UlBSP1f36L0mko9Iclo5M81c6Os1h731Hu5aVlJTQvXt3XC4X3/3ud4mKiuKZZ55pVQ2Xy8W3vvUtNm/e7L7v5D//8z+x2Ww8/vjjze7/k5/8hLi4OBYvXgxARkYG3/ve99i5c2eL+m/p37sewysiIiIi0sbuvfdeRowYQXJyMhUVFTzxxBOtruHn58fy5cvdZzIAfvjDH7pvbm9OVFRUnTNBubm5vPTSS60eR3N0CZaIiIiIeER1RTWH3jzEu396t62H0uF8fRnU1br80qzg4GAefvjhFu37yCOP1Fm+/fbbPTKmyymAiIiIiMgVq6ms4cj2I5hOk6zNWVSWVPIVX7X1sKQdUwARERERkVZxVbs49t4x0p3pZG3MouJ8RVsPSToQBRARERERaZarxsWJnScwnSaZGzIpKyhr6yFJB6UAIiIiIiLN2v3fu3n3x7q3Q66enoIlIiIiIs1KmJXQ1kPwuJiYGPr06UNVVZV73XvvvYfNZuOxxx7zWD979+7lrrvuuqoaO3bsaPDdHx2RAoiIiIiINKq4GF55Be59tBen6dfWw/G46OhotmzZ4l5esWJFq7/oV1dXN7l91KhRrF69+orGdy1SABERERGROi5ehDVrYPZs6NMHFi2CN9+EdIy2HprH3X///axYsQKA4uJi9uzZw5QpUwD48ssvGT9+PCkpKSQnJ/Pcc8+591u0aBGPPPIIU6ZMYdiwYQD8/Oc/JzY2ltGjR/P444+7g8w3z14cP36cXr168Ytf/IKRI0cSGxvLtm3b3HXvvvtuRo0axdChQ5k+fTr5+fk++Tn4kgKIiIiISCdy7tA59v15X7315eWwfj3Mm1cbOv71X2HzZqis/Gcb8xoMIBMmTODo0aOcPHmSNWvWMG/ePPz9/YHaS7Teffdd9u/fz759+1i7di179+517/v3v/+d9evXY5omW7du5fXXX+fAgQPs3r2bI0eONNrnuXPn3G8MX7ZsGY8++qh72wsvvMDevXv54osvGDduHE8//bT3Dr6N6CZ0ERERkWvc+ePnMdeamE6TU/tPATD41sGEXteDt98GpxO2bKk989GUInrwlS2KKKvh93z0Tu6NscCgxl7D/5vz/5odV8mpEi6eqttpSI8QegzqQXVFNWczztbbp39KfwAKsguoKq2qsy0iJoIukV2a7fdy99xzD6+88gqbNm1i9erV7sulysvLefjhh/n888/x8/MjNzeXzz//3H02Y/78+XTr1g2A999/n/nz57vfOr5w4UJ+/etfN9hf165dmTVrFgDf/va364SV1atXs3LlSi5dukR5eTn9+l17l70pgIiIiIhcgy6cvEDGugxMp0nenrx62381z+TlI+MoLm6+VmAgTJkCDgdcl2Png5/9M4BExkViOAzsDjt97H0A2L9/f4vGuG/5Pj741Qd11t1w1w3MWTWHC3kX+H8j64eYp6ynANi8aHO947pz5Z0MvXtoi/r+pkWLFpGSkkJ8fDxxcXHu9T/72c/o27cvn332GQEBAcyZM4eKin++8+Tr8AFgWRY2m61F/YWEhLj/v7+/PzU1NUDtGZVly5axa9cuevfuzZYtW3QGRERERETar4tnLpK5IZP0tHRy/p4DVuNtL+1Pp5hxjW7394fvfKc2dMyeDRERteuLc5M58OdPMOYbGA6DfsP7tfiL9+VGPjSShJl1n64V0qP2y3nYgDAe3Pdgo/vOenlWg2dArkRUVBTPPfcciYmJddYXFRVht9sJCAggOzubd955h1tuuaXBGjfffDNPPfUUS5cuJSQkhJUrV7Z6HEVFRYSFhREZGUllZSXL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tDU1RDytNfOvtLQUp9PJJ598Ume9Pn+lvfPl9+BOcQakT58+jBgxglWrVgGwYcMGYmJiiImJaXG7ltYQ8YaWzr/f/e53rFmzhnfeeYeIiIg620pLSzl//rx7ec2aNYwYMcLLIxdp+fxtao7qM1jaUmvm37p16xg6dCiJiYnudfr8lY7Ap9+Dr+jOkQ4oKyvLGjNmjBUXF2eNHDnSSk9Pd2+74447rE8//bTZdk1tE/G25ubwhx9+aAHW4MGDrWHDhlnDhg2zbrzxRnebI0eOWMOHD7duuOEGy263WzNnztQNvOIzLfkMbm6O6jNY2lJLv0eMGzfOWrFiRZ199fkrbe3hhx+2rrvuOsvf39/q27dvnYfUtMX3YJtl6SJaERERERHxjU5xCZaIiIiIiLQPCiAiIiIiIuIzCiAiIiIiIuIzCiAiIiIiIuIzCiAiIiIiIuIzCiAiIiIiIuIzCiAiItIufPnll0ycOJHQ0FAGDx7Mn/70p7YekoiIeEFAWw9ARETk9OnT3Hrrrdx88828/vrrHDhwgKVLlxIcHMz999/f1sMTEREP0osIRUSkzT3++ONs3ryZzMxM/P39Afj1r3/Nn/70J3Jzc93rRESk49MlWCIi0uY2bdpEampqnaCRmprKqVOn+Pjjj9twZCIi4mkKICIi0qbKy8s5cuQISUlJVFdXu/8MGTKEwMBA0tPT23qIIiLiQQogIiLSpoqKirAsi3vvvZfAwED3n+DgYKqqqjh37lxbD1FERDxIN6GLiEi78Nxzz3HbbbfVWXfTTTe10WhERMRbFEBERKRNRUZGYrPZ6NOnD6NGjXKvr6yspKqqip49e7bh6ERExNN0CZaIiLSpkJAQYmNjOXz4cJ31Bw8exLIsbrjhhjYamYiIeIMCiIiItLnZs2ezceNGqqur3ev++te/EhUVxY033tiGIxMREU/Te0BERKTNnTlzhqFDh3LTTTexZMkSPvvsM37605/y5z//mYULF7b18ERExIMUQEREpF348ssvWbJkCZ988gn9+vXjiSee4N/+7d/aelgiIuJhCiAiIiIiIuIzugdERERERER8RgFERERERER8RgFERERERER8RgFERERERER8RgFERERERER8RgFERERERER85v8HZ2+eGbLgVFMAAAAASUVORK5CYII=" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract marginal's parameters\n", "α_marg = marginals[:θ].params[:a]\n", "β_marg = marginals[:θ].params[:b]\n", "\n", "# Plot messages\n", "θ_range = range(0, step=0.01, stop=1.0)\n", "plot(θ_range, Beta.(θ_range, α1, β1), color=\"red\", linewidth=3, label=\"Message ((1))\", xlabel=\"θ\", ylabel=\"p(θ)\")\n", "plot!(θ_range, Beta.(θ_range, α2, β2), color=\"blue\", linewidth=3, label=\"Message ((2))\", size=(800,300))\n", "plot!(θ_range, Beta.(θ_range, α_marg, β_marg), color=\"purple\", linewidth=6, linestyle=:dash, label=\"Marginal\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pdf of the marginal distribution lies on top of the pdf of Message ((2)). That's not always going to be the case; the Beta(1,1) distribution is special in that when you multiply Beta(1,1) with a general Beta(a,b) the result will always be Beta(a,b), kinda like multiplying by $1$. We call prior distributions that have this special effect \"non-informative priors\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Multiple questions\n", "\n", "Of course, you won't be evaluated on just a single question: it's still possible for you to get one question wrong even if you have a high skill level. You would consider it unfair to be rejected based on only one question. So, we are going to add another question. We're also going to change the prior: the company now assumes that you must have _some_ skill if you applied for the position. This is reflected in a prior Beta distributions with $\\alpha = 3.0$ and $\\beta = 2.0$. \n", "\n", "For now, the second question is also a right-or-wrong question. The outcome of this new question is denoted with variable $X_2$. With this addition, the generative model becomes\n", "\n", "$$p(X_1, X_2, \\theta) = p(X_1 \\mid \\theta) p(X_2 \\mid \\theta) p(\\theta) \\, ,$$ \n", "\n", "with the accompanying factor graph\n", "\n", "![](../figures/ffg-PP2-02.png)\n", "\n", "where $f_c \\triangleq \\text{Bernoulli}(X_2 \\mid \\theta)$ and $f_a, f_b$ are still the same. Notice that we now have an equality node as well. That is because the variable $\\theta$ is used in three factor nodes. ForneyLab automatically generates the same factor graph:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Start building a model\n", "factor_graph2 = FactorGraph()\n", "\n", "# Add the prior\n", "@RV θ ~ Beta(3.0, 2.0, id=:f_a)\n", "\n", "# Add question 1 correctness likelihood\n", "@RV X1 ~ Bernoulli(θ, id=:f_b)\n", "\n", "# Add question 2 correctness likelihood\n", "@RV X2 ~ Bernoulli(θ, id=:f_c)\n", "\n", "# The question outcomes are going to be observed\n", "placeholder(X1, :X1)\n", "placeholder(X2, :X2)\n", "\n", "# Visualize the graph\n", "ForneyLab.draw(factor_graph2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will go through the message passing operations below. First, we generate an algorithm and visualize where all the messages for $\\theta$ come from." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Indicate which variables you want posteriors for\n", "q = PosteriorFactorization(θ, ids=[:θ])\n", "\n", "# Generate a message passing inference algorithm\n", "algorithm = messagePassingAlgorithm(θ, q)\n", "\n", "# Compile algorithm code\n", "source_code = algorithmSourceCode(algorithm)\n", "\n", "# Bring compiled code into current scope\n", "eval(Meta.parse(source_code))\n", "\n", "# Visualize message passing schedule\n", "pfθ = q.posterior_factors[:θ]\n", "ForneyLab.draw(pfθ, schedule=pfθ.schedule);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 4 messages, one from the prior ((1)), one from the first likelihood ((2)), one from the second likelihood ((3)) and one from the equality node ((4)). ForneyLab essentially combines messages 2 and 3 into message 4 and then multiplies messages 1 and 4 to produce the marginal. We can see this if we look in the source code:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "begin\n", "\n", "function stepθ!(data::Dict, marginals::Dict=Dict(), messages::Vector{Message}=Array{Message}(undef, 4))\n", "\n", "messages[1] = ruleVBBetaOut(nothing, ProbabilityDistribution(Univariate, PointMass, m=3.0), ProbabilityDistribution(Univariate, PointMass, m=2.0))\n", "messages[2] = ruleVBBernoulliIn1(ProbabilityDistribution(Univariate, PointMass, m=data[:X1]), nothing)\n", "messages[3] = ruleVBBernoulliIn1(ProbabilityDistribution(Univariate, PointMass, m=data[:X2]), nothing)\n", "messages[4] = ruleSPEqualityBeta(nothing, messages[2], messages[3])\n", "\n", "marginals[:θ] = messages[1].dist * messages[4].dist\n", "\n", "return marginals\n", "\n", "end\n", "\n", "end # block\n" ] } ], "source": [ "println(source_code)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see that `messages[4]` is a function of `messages[2]` and `messages[3]` and that `marginals[:θ]` is the product of `messages[1]` and `messages[4]`. \n", "\n", "\n", "Suppose you got the first question right and the second question wrong. Let's execute the message passing procedure and take a look at the functional form of the messages." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Message ((1)) = Beta(a=3.00, b=2.00)\n", "Message ((2)) = Beta(a=2.00, b=1.00)\n", "Message ((3)) = Beta(a=1.00, b=2.00)\n", "Message ((4)) = Beta(a=2.00, b=2.00)\n", "\n" ] } ], "source": [ "# Initialize a message data structure\n", "messages = Array{Message}(undef, 4)\n", "\n", "# Initalize marginal distributions data structure\n", "marginals = Dict()\n", "\n", "# Suppose you got question 1 right and question 2 wrong\n", "data = Dict(:X1 => 1,\n", " :X2 => 0)\n", "\n", "# Update coefficients\n", "stepθ!(data, marginals, messages);\n", "\n", "# Print messages\n", "print(\"\\nMessage ((1)) = \"*string(messages[1].dist))\n", "print(\"Message ((2)) = \"*string(messages[2].dist))\n", "print(\"Message ((3)) = \"*string(messages[3].dist))\n", "println(\"Message ((4)) = \"*string(messages[4].dist))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Messages ((1)) and ((2)) are clear, but Message ((3)) and Message ((4)) are new. \n", "\n", "---\n", "\n", "#### $\\ast$ **Try for yourself**\n", "\n", "Try deriving the functional form of Message ((3)) for yourself. \n", "Tip: the derivation is very similar to that of Message ((2)). The most important change is to use $\\delta(X_2 - 0)$ instead of $\\delta(X_1 - 1)$.\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Message ((4)) is the result of the standard message computation formula for the case of an equality node:\n", "\n", "$$\\begin{align}\n", "\\downarrow \\mu(\\theta) =&\\ \\sum_{\\theta',\\ \\theta''} \\overrightarrow{\\mu}(\\theta'')\\ f_{=}(\\theta, \\theta', \\theta'') \\ \\overleftarrow{\\mu}(\\theta') \\\\\n", " =&\\ \\overrightarrow{\\mu}(\\theta) \\cdot \\overleftarrow{\\mu}(\\theta) \\\\\n", "=&\\ \\text{Beta}(\\theta \\mid 2, 1) \\cdot \\text{Beta}(\\theta \\mid 1, 2) \\\\\n", " =&\\ \\text{Beta}(\\theta \\mid 2, 2) \\quad .\n", "\\end{align}$$\n", "\n", "Let's visualize the messages and the marginal again." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAEsCAYAAAA7Ldc6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAACUnUlEQVR4nOzdd1hUZ/bA8e/Qi2Jv2LCA4mDXaOwt2AtS7myKmp5NTzZlsym7m03bbOomm7LZzSYxZV6Kij32XhJjNDKIXbF3Eekw8/vj/kIEBmZUGBg4n+fhUebed+aghztz7tsMNpvNhhBCCCGEEEK4gEd1ByCEEEIIIYSoO6QAEUIIIYQQQriMWxcg2dnZbN++nezs7OoORQghhBBCCOEEty5A0tLS6Nu3L2lpaZX6vBkZGZX6fEK4muSwcGeSv8LdSQ4Ld+aK/HXrAqSqFBUVVXcIQtwQyWHhziR/hbuTHBbuzBX5KwWIEEIIIYQQwmWkABFCCCGEEEK4jJcrXiQ3NxeTyURqaioBAQG0bNmSTz75hJCQkDLn7tu3j5kzZ3Lu3DkaNmzIF198Qbdu3VwRphBCCCGEqCTp6emcO3euusMQ1ygjI4MGDRpcd/umTZvSrl27Cs9xSQECcN999zF+/HgMBgMffvgh9913H8uWLStz3v333899993HrFmzSExM5O6772bz5s2uChOAy3mXuUfdQ0y3GKZ0mUI9n3oufX0hhBBCCHeWnp5OeHi4rFRaBwUEBLB79+4KixCXFCB+fn5MmDCh+PuBAwfy3nvvlTnvzJkzbN++vbgwiY6O5uGHH+bw4cN2e0uqyuKDi5mbNpe5aXPx9/JnYthETEYTE0In4O/t77I4hBBCCCHc0blz58jOzubrr78mPDy8usMRLrJ7925uv/12zp07V/0FSGn//Oc/mTx5cpnHjx49SnBwMF5eelgGg4F27dqRnp5eYQHy8MMP06BBA6ZPn050dPQNx5eQmlD895zCHBJTE0lMTSTQO5DxHcYzLXQao9qPwtfT94ZfS4iqcPHixeoOQYjrJvkr3J3k8G9LuYaHh9OnT59qjka4WkZGBhcuXCj+vnHjxiWOu7wAee2119i3bx+ffPKJ3eMGg6HE9zabzeFzfvjhh5WW3BdyLrDh1Aa7x7IKskjcm0ji3kQa+DYgKjwKzagxusNovD29K+X1hagspX/ZhXAnkr/C3dX1HL6ROQTC/TVo0KDC3wGXroL11ltvMWfOHJYsWUJAQECZ423btuXYsWMUFhYCevFx9OhRhxNZKpOflx/vjnqXcZ3H4WnwLPe8jLwMvtjxBeO/GU+rt1tx34L7WHlwJUVWWftbCCGEEEKI8risAHnnnXf47rvvWL58OQ0bNrR7TvPmzenduzdff/01AElJSYSEhLh0/keAdwC3ht/KktuWcOqpU3w66VNGdRiFh6H8f6rzOef5bPtnjJk9htbvtObhxQ+z/sh6rDary+IWQgghhBDCHbikADl27Bh/+MMfuHTpEiNHjqRXr14MGDCg+PiECRPYtm0bAJ9++imffvopYWFhvPHGG/z3v/91RYh2NQ1oyn1972PljJUcf/I4H4z/gCHthlTY5nTWaf71478Y9sUw2r3bjieWPsHWY1udGkomhBBCCCFEbeeSOSBt2rSp8AP44sWLi//epUsXly+764yW9Vry8E0P8/BND3Ps8jESLAkoi2Lr8a3ltjmeeZz3tr7He1vfI6RhCHHd4tAiNHq37F1mrosQQgghhBB1geyEfh3aBLXhiZufYMs9Wzj46EHeGP0GvVv2rrDN4UuHeXPTm/T9d1/CPgzjxVUvknImxUURCyGEEEIIUTNIAXKDOjTqwLNDnmX7/dvZ8/Ae/jbybxibGStss//Cfl5Z/wrdP+6O8SMjL699mT3n9rgoYiGEEEIIARASEkLz5s0pKCgofmzVqlUYDAaeeuqpaozs+j355JOYzebi73fs2MHEiRMBOHHiBGPHjqVLly706NGDuLi44uVybTYbQ4cO5dChQ8VtP/jgA15//fVKj1EKkEoU1iSMF4a9QMqDKaT8PoUXh71IWJOwCtuknk3lz2v+TNd/daXXJ714Y8MbHLx40EURCyGEEELUbe3atWP+/PnF33/++ef069evGiO6fsePH2fJkiVomlb82J/+9CeeffZZADw9PXnxxRfZs2cPv/zyC+3bt+ePf/wjoG+F8cQTT/DXv/61uO3999/PZ599xuXLlys1TilAqoixuZGXR75M2kNp/Hz/z/xx8B8JaRhSYZudp3fy3Mrn6PTPTtz02U28veltjmYcdU3AQgghhBB10F133cXnn38O6BvobdmyhXHjxpU456233uKmm26iT58+TJgwgaNH9c9nCxYsoEePHvTq1YuIiAiS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" }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract parameters from message ((2))\n", "α2 = messages[2].dist.params[:a]\n", "β2 = messages[2].dist.params[:b]\n", "\n", "# Extract parameters from message ((3))\n", "α3 = messages[3].dist.params[:a]\n", "β3 = messages[3].dist.params[:b]\n", "\n", "# Extract parameters from message ((4))\n", "α4 = messages[4].dist.params[:a]\n", "β4 = messages[4].dist.params[:b]\n", "\n", "plot(θ_range, Beta.(θ_range, α2, β2), color=\"black\", linewidth=3, label=\"Message ((2))\", xlabel=\"θ\", ylabel=\"p(θ)\")\n", "plot!(θ_range, Beta.(θ_range, α3, β3), color=\"green\", linewidth=3, label=\"Message ((3))\", size=(800,300))\n", "plot!(θ_range, Beta.(θ_range, α4, β4), color=\"blue\", linewidth=3, label=\"Message ((4))\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Message ((2)) and Message ((3)) are direct opposites: ((2)) increases the estimate and ((3)) decreases the estimate of your skill level. Message ((4)) end up being centered on $0.5$. With one question right and one question wrong, you have essentially been guessing at random." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAEsCAYAAAA7Ldc6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAACbRklEQVR4nOzdd1gUVxcH4N8uHekoKiJiwYYdKyr23gW72FuMMSZRk6iJibEk+UxiEqMSY++9YG/YSwSsKIoFAUWUDtJ39/vjRGTZWepWOO/z7KPMnZ29wLA7Z+6954hkMpkMjDHGGGOMMaYBYm13gDHGGGOMMVZ2cADCGGOMMcYY0xi9DkBSU1MRFBSE1NRUbXeFMcYYY4wxVgh6HYCEhITA3d0dISEhKj1uYmKiSo/HmKbxOcz0GZ+/TN/xOcz0mSbOX70OQNRFIpFouwuMlQifw0yf8fnL9B2fw0yfaeL85QCEMcYYY4wxpjEcgDDGGGOMMcY0xlDbHWCMMcaYcmHnw3B/531kp2dDbCiGoZkhjMyMYGRulPN/QzNDmNubw8rJCpZVLGFRyQJiA77HyLQrPDwcMTEx2u4GK6LExERYW1sX+/nly5eHs7NzvvtwAMIYY4ypkVQiRdyTOLy5/wZv7r9B7KNYJL9MRtLLJDQY0QCdf+ic7/PfPniLQN/AIr2myEAEy8qWsKxiCSsnK9hUt0HFRhVRsVFFVKhXAQbGBiX5lhgrUHh4OOrVq8eZSssgc3NzPHz4MN8ghAMQxhhjTEWyUrMQeSMSr26+ygk43j54C0mG8KLO+KfxBR7T0KzoH9UyiQxJkUlIikzCyxsv5drEhmJ0/bkr2nzWpsjHZaywYmJikJqaiq1bt6JevXra7g7TkIcPH2L06NGIiYnhAIQxxhhTh7T4NERcicCLSy8QfjEcrwJfQZolLfTzk18mF7iPkZlRSbqoQJothWVlS5UekzFl6tWrh2bNmmm7G0zHcADCGGOMFZIkS4LwS+F45PcIYefCEH0vGpAV/3hJL5MK3Kc4IyAFqdioYoH7XFp6CZJMCeoOrIuKjStCJBKpvB+MsbKJAxDGGGOsELLTs/Fb1d+QGqO6Oe3Jr5Ihk8nyvbg3MjeCgYkBDE0NIc2WIjstGzJp8aMeAxMD2Ne2z3cfmUyGf1f+i5SoFFz4/gJsa9iinnc91PeuD8fmjhyMMMZKhAMQxhhjrBAMTQ1Rwa0CXlx4UbLjmBnCtrotLRCvYgVJpgSGJso/jmt2q4kF6QtyvpbJZJBmSZGVloXstGxkpWUh610WkqOSaXF7ZBKSXiYhOZIWuieEJSA9Pj3n+Q5uDhAb5p8hK/ZxLFKiUnK+jn8Wj6s/X8XVn6/C2tmaghGv+nBq48TBCGOsyDgAYYwxxgqpTv86hQ5ARAYi2Ne2R8WGFVGhQQVUbFgRDg0cYFPdpkQpckUiEQyMDSiTVa5MmQ4NHAT3l8lkSIlKQfTdaETfjYapjWmBrxHmH6a0LTE8Edd/vY7rv16Hnasd3Ke4o8m4JjAvb17Ub4UxVkZxAMIYY6zMkslkiLgSgTub78CxhSPcJ7vnu3/tfrVx6otTgm2mNqZwbucM5/b0qNyscr4jG5oiEolg6WgJS0dL1OpZq1DPyS8AyS0uNA6n55zGufnnUG9wPbhPdUe1DtV4VIQxli+NvDOmp6dj+PDhePDgAczNzVGpUiWsWbMGLi4uCvuGhoZi7NixiImJgY2NDTZu3Ij69etropuMMcbKiLT4NNxadwsBawJyUuG+CnhVYABi72qP8nXLIyYkBqa2pqjZrSacPZ1RrX01ODRwgEhcOi68xUZiGJoaIjs9u1D7SzIluL/zPu7vvA/7OvY5oyJmdmZq7iljTB9prEzqlClT8OjRI9y+fRt9+/bFlClTBPebOnUqpkyZgsePH2Pu3LmYOHGiprrIGGOslIu+Fw2/qX74tcqvOD3ntFwdjte3XuPN/TcFHqPb8m4Ye34s5ryZA+9d3mj5cUtUbFSx1AQfADB462DMeTsH3ru94TbUDUblCp8KOPZRLE59cQorqq3AqTmnkBxVcKphxrTFxcUFDg4OyMrKytl27tw5iEQizJ49W4s9K77PP/8cO3fuzPn69u3b6NOnT87X3t7ecHSkZBIpKR/WeslkMrRv3x7Pnz/P2fbnn39i2bJlKu+jRgIQU1NT9O7dO2dItnXr1nj27JnCfm/evEFQUBBGjx4NAPDy8sLz588RFhamiW4yxhgrhaTZUjzc/xCbOm3CmkZrEPR3ELLThO/s39lyp8Dj1e5TGy4dXApcyK3vjC2M4TbEDd67vDHn7RwMOzAMDUc1hLGlcaGen5mSiWvLr+F3l9/hN9UPkkzhYoyMaZuzszMOHz6c8/X69evRvHlzLfao+F6+fInjx49j2LBhOdvmzZuHL7/8MufradOm4fbt2wrPFYlE+Oyzz/D999/nbJs6dSrWrl2LpKSCU4YXhVYmp/7xxx/o16+fwvaIiAg4OjrC0JC6JRKJ4OzsjPDwcMHpWu/NmDED1tbWGDx4MLy8vErcv/j4givTMqbL+Bxm+kxV5292WjaCtwTj1l+3kBxZuLvwdzbfQdPZTUu0SLy0cvB0gIOnA9r/rz2enXiG+xvvI/JiZIHPk2RKEP0gGokpiRropW7g92AgMVF/ft8TJkzA+vXr4eXlhcTERFy/fh0jRoxAWlpazj7Lly/H7t27kZ2djUqVKsHX1xdVq1aFn58f5s+fD7FYjOzsbCxZsgQDBgzA4sWLsW3bNpiYmAAADh06hGrVqmH06NEICQlBZmYmnJ2dsX79ejg4UAKJ+fPnY9euXbC3t4enpyf8/f0REBAAANiyZQtWrlyJrKwsWFpa4q+//kKDBg0Uvpf169fD29s756Z/eHg4goOD4enpmbNP165dlf4s+vXrh2nTpiE5ORmWlpYwNjZG9+7dsWvXLkyePLnQP9PExETExcXlfG1nZyfXrvEAZOnSpQgNDcWaNWsE2/MuXJPJCs51vnLlSpVX2cz7g2JM3/A5zPRZSc7fjOQMBKwOwLVfruHdm3eFfp6prSnqDaoHC2MLmFoXnCmqLKswvgJajW+FuCdxCFwbiNsbbiP1rfL6KJ2+7VTm3pPK2vebl7W1dcE7AUBUFD1UrXJlehSCp6cn/vzzT7x8+RJ+fn4YMmQIDAwMctq3b9+Ox48f49q1azAwMMCWLVswY8YMHDp0CAsWLMCaNWvg4eEBqVSKpKQkxMfHY/ny5YiKioKZmRlSU1MhFtNNjRUrVqB8+fIAgB9//BGLFi3CypUr4efnhyNHjuDOnTswMzODt7d3zutfuXIFO3fuxMWLF2FiYoJLly5h1KhRuHNHccT2/PnzclPHLly4gNatWxf6x2ZkZIQGDRrgypUr6NmzJwDAw8MDx44dK1IAYm1tne/fgEYDkOXLl2P//v04c+YMzM0V0/VVrVoVkZGRyM7OhqGhIWUniYiAs7OzJrvJGGNMD6XFp+HfP//F9RXX5epeFKR65+poPr05avetrRNZq/SJXS07dPupGzr/0BkhB0MQ6BuI5+eey+1T2b0yanStoaUeMp3n6wvkmvKjMgsXAt99V+jdfXx8sGnTJhw8eBDbtm3Dtm3bctoOHjyIgIAAuLtTkgqJRJIToHTp0gWzZs2Ct7c3unfvjiZNmkAikcDV1RWjR49G9+7d0adPHzg5OQEAtm3bhi1btiAjIwNpaWmoVKkSAMDf3x9Dhw5FuXLlAABjx47FDz/8AIBGT+7cuYNWrVrl9Ont27fIzMyEsbH8lMjIyMicYwp9XRiVKlVCZGSk0q9VQWPvtL/++it27NiBM2fOwMbGRnAfBwcHNG3aFFu3bsW4ceOwb98+uLi45Dv9ijHGWNmWGpuKa79cw78r/0VmcmahnmNkboRGYxqh5YyWcHATrp/BCs/A2ABuQ93gNtQNr2+/xuUfLyN4dzAgA9rPa1+otLySTAnVNmFly9SpQP/+qj9uIUc/3hs3bhyaNWuG2rVrw9XVVa5NJpNhwYIFmDBhgsLzfv31VwQHB8Pf3x9jx47FqFGjMHfuXFy/fh1Xr17F+fPn0bp1a+zYsQMikQgrV67E1atXUaFCBRw+fBiLFi3KeQ1lfycymQwTJkzI2Tc/5ubmclPH8n5dGOnp6TAzM1P6tSpoJACJjIzEF198gRo1aqBTp04AABMTE9y4cQMA0Lt3byxatAjNmzeHr68vxo0bh6VLl8LKygqbNm3SRBcZY4zpocC/A3F6zmlkJGUUan/bGrZoMaMFmo5vWqiCfKzoKjWpBO+d3uj0Qyfc3nAbdQfWLfA5rwJeYUf/HeiwsAOaTWxW6hf4s1yKMFVKnRwdHbFs2TLUrat4vvbv3x+///47Bg4cCDs7O2RlZeH+/fto2rQpQkJC4ObmBjc3NxgaGuLUqVNITk5GcnIy2rdvj/bt2yM4OBi3bt1C9erVYWVlBTs7O2RmZsLX1zfnNTp16oSFCxdi1qxZMDU1xZYtW3La+vXrhzFjxmDy5MmoWrUqpFIpgoKCBBfKN2rUCCEhIfDw8Mj5et++fUX6WTx8+BCNGzdW+rUqaCQAcXJyynctx7Fjx3L+X6dOHVy7dk0T3WKMMabnDE0NCxV8OLV2Qruv28G1jysvMNcQe1d7dFnapcD9ZDIZTs85jZSoFByddhQ3fr+BPqv7wKWDi/o7yVgu48ePF9zu4+OD2NhYdOzYESKRCNnZ2Zg4cSKaNm2Kr7/+Go8fP4axsTHMzc2xevVqJCYmwtvbG+/evYNIJIKrqyvGjh2LcuXKYevWrahbty6cnJzg4eGBkydPAqAg5+rVq2jcuDEcHR3RunXrnGQGnp6eWLp0KQYMGACJRIKsrCz06dNHMADx9vbG5s2bc0Zr2rVrh/DwcMTFxeWsyejfvz+CgoIA0HW3q6srzp8/DwA5mWdzL3A/ceIEli5dWvIfcC4iWWFWeeuooKAguLu7IzAwUKWL0HP/khjTR3wOM31WlPNXKpHCt6kv3twTrt/h0skFngs84dLJhatz66jQY6HY3me7wvbGYxuj+/LuMC+vuGZU1/F7sPqu0Uqz95mnpFIpJk2aBEdHRyxevLhIx5BKpWjRogUOHTqUs+7k559/hkgkwpw5cwp8/ldffQVXV9ecOnwPHjzAtGnTcPHixUK9fmF/73wbiDHGmN4SG4jR9UfFlJK1etXC+MvjMfbcWFTvXJ2DDx0lzZbi9NzTgm13Nt3ByjorcWv9LcikenuvlLFCGzNmDJo2bYr69esjPT0dc+fOLfIxxGIxfH195WroffrppzmL2wvi6OgoNxIUERGhNHNtSXC6D8YYY3qtVq9aqNahGl5ceIE6A+rA8xtPOLo7artbrBBCj4XibfBbpe1pcWk4PPEwbm+4jT5r+nDCAFaqHThwQCXHyTs1y8TEBNOnTy/Uc2fOnCn3dY8ePVTSp7x4BIQxxpjOkWRKcHX5VZyac6rAfUUiEXr90QsTrk7A8IPDOfjQI7X71cbIYyPh0CD/wCL8cjh8m/ji7LyzyE4XrmLPGNMfPALCGGNMp4T7h+Py/MuIfRQLiICGIxqicrP8s+RUbFRRQ71jqiQSieDayxU1u9XEvyv/hf83/shMEU6lLM2W4vKyy3js9xiDtgxCpSZFq23AGNMdPALCGGNMJySEJWDX4F045H2Igg8AkAHHZhzjNQClnNhQjNazWuPjhx+j3uB6+e775v4brG25FpeWXoI0W6qhHjLGVIkDEMYYY1ollUhx7bdrWOW2CiEHQhTaI69F4u7Wu1roGdM0KycrDN03FCP8RsC6mrXS/aRZUpybfw4bPDcg7kmcBnvIGFMFDkAYY4xpzes7r7GuzTqc+vwUslKzlO535sszPPe/DKndtzamB09H2y/b5luUMPJaJNY0XoOANQH51htjjOkWDkAYY4xpXFZaFs7OO4u1zdfi1c1X+e5bqUklDNkzBIamvGyxLDEuZ4yuP3bFlKAp+a73yErNwtGPjmJ7n+149+adBnvISgMXFxc4ODggK+vDDZBz585BJBJh9uzZWuxZ8X3++efYuXNnzte3b99Gnz59FPabMGECRCIRUlJSAFBR0Pbt2+P58+c5+/z5559YtmyZyvvIAQhjjDGNCrsQhjWN1+Dyssv5zuE3tTVF71W9MTlgMpzbOWuwh0yXVGxYEZNuTEK7ee0gEiuv5/Lk+BPcXHVTgz1jpYWzszMOHz6c8/X69esFq4zrg5cvX+L48eMYNmxYzrZ58+bhyy+/lNvPz89PoT6SSCTCZ599hu+//z5n29SpU7F27VokJSWptJ8cgDDGGNOIzJRMHJl2BJs6bkJcaP7z9ptNboZPHn+CFh+1gNiAP6rKOgNjA3RZ0gXjL42HbU1bwX2c2jih/fz2Gu4ZKw0mTJiA9evXAwASExNx/fp19OzZU26f5cuXo2XLlmjWrBl69+6NiIgIAHQh36hRIzRp0gQNGjTAoUOHAACLFy9GvXr10KRJEzRp0gQvXrwAAIwePRrNmzdHo0aN0LdvX7x58ybnNebPn49atWqhVatWmDNnjlwQtGXLFrRq1QrNmjVDhw4dcP/+fcHvZf369fD29s4JLsLDwxEcHAxPT8+cfWJjY/H999/j119/VXh+v379cOzYMSQnJwMAjI2N0b17d+zatatoP9QC8Hg2Y4wxtQu/HI6DYw8i/ll8vvvZ17ZHh186oGHfhhrqGdMnVT2qYtrtaTg15xQC1wTmbDezN4P3Lm8YGBlosXesOKKi6KFqlSvTozA8PT3x559/4uXLl/Dz88OQIUNgYPDhXNq+fTseP36Ma9euwcDAAFu2bMGMGTNw6NAhLFiwAGvWrIGHhwekUimSkpIQHx+P5cuXIyoqCmZmZkhNTYVYTDdSVqxYgfLlywMAfvzxRyxatAgrV66En58fjhw5gjt37sDMzAze3t45r3/lyhXs3LkTFy9ehImJCS5duoRRo0bhzp07Ct/L+fPn5aaOXbhwAa1bt5bb5+OPP8Z3330Ha2vFRA9GRkZo0KABrly5khOEeXh44NixY5g8eXLhfqCFwAEIY4wxtclOz4b/t/64uvwqkM8aYbGhGG2/bAvPBZ5ISlXtUD8rXYwtjNF3dV/U6V8HhyceRkpUCgZvHQzrqsqzZjHd5esL5JrxozILFwLffVf4/X18fLBp0yYcPHgQ27Ztw7Zt23LaDh48iICAALi7uwMAJBJJToDSpUsXzJo1C97e3ujevTuaNGkCiUQCV1dXjB49Gt27d0efPn3g5OQEANi2bRu2bNmCjIwMpKWloVIlWt/k7++PoUOHoly5cgCAsWPH4ocffgAAHDp0CHfu3EGrVq1y+vT27VtkZmbC2NhY7vuIjIzMOabQ13v27IGxsTH69u2r9GdRqVIlREZGKv1aFTgAYYwxphavb7/GAZ8DeHP/Tb77ObZwRP9/+n8oJpiqgc4xvefayxUf3f0IT048Qa2etbTdHVZMU6cC/fur/riFHf14b9y4cWjWrBlq164NV1dXuTaZTIYFCxZgwoQJCs/79ddfERwcDH9/f4wdOxajRo3C3Llzcf36dVy9ehXnz59H69atsWPHDohEIqxcuRJXr15FhQoVcPjwYSxatCjnNfKuycj9+hMmTMjZNz/m5uZIS0tT+rW/vz/OnTsHFxeXnG1ubm44cuQIGjakkef09HSYmZnltOf9WhU4AGGMMaZy0mwpdg3ehYTnCUr3MTI3QuclndHyk5a8zoMVi3l5czQa3ahQ+6bFp8HQ1BBGZkZq7hUriqJMlVInR0dHLFu2DHXr1lVo69+/P37//XcMHDgQdnZ2yMrKwv3799G0aVOEhITAzc0Nbm5uMDQ0xKlTp5CcnIzk5GS0b98e7du3R3BwMG7duoXq1avDysoKdnZ2yMzMhK+vb85rdOrUCQsXLsSsWbNgamqKLVu25LT169cPY8aMweTJk1G1alVIpVIEBQUJLpRv1KgRQkJC4OHhkfP1vn37ctpXrVqFVatW5XwtEokQHBwMCwuLnG0PHz5E48aNlX6tChyAMMYYUzmxoRh91/TF1h5bBdud2zljwMYBsKtpp+GesbJIkiXB7sG7kZWahWEHh8GysqW2u8R00Pjx4wW3+/j4IDY2Fh07doRIJEJ2djYmTpyIpk2b4uuvv8bjx49hbGwMc3NzrF69GomJifD29sa7d+8gEong6uqKsWPHoly5cti6dSvq1q0LJycneHh44OTJkwAoyLl69SoaN24MR0dHtG7dGvHxtGbO09MTS5cuxYABAyCRSJCVlYU+ffoIBiDe3t7YvHlzzmhNu3btEB4ejri4ONjZFfx+GxYWBgBo0KBBzrYTJ05g6dKlRfpZFkQk0+PKPUFBQXB3d0dgYCCaNWumsuMW9pfEmK7ic5jpiqMfH0XAqoCcrw2MDdB5SWe0/qy10lEPPn+Zqh2dfhQBq+k8tKxiieEHh8OxuaPaXo/PYfVdo5VmycnJsLS0hFQqxaRJk+Do6IjFixcX6RhSqRQtWrTAoUOHctad/PzzzxCJRJgzZ06Bz//qq6/g6uqKiRMnAgAePHiAadOm4eLFi4V6/cL+3nkEhDHGmNp0+7kbnp16hrgncajUpBIGbRkEhwYO2u4WKw6JBIiLA96+pUdiIpCSArx7p/hvRgYgkwFSKT1y/9/AADA1BczMFP8tVw6wtwfs7Ojf9w+j4k+burn6Zk7wAQDJL5Oxof0GDNg4AA2GNcjnmYxp1pgxYxAWFoa0tDQ0a9YMc+fOLfIxxGIxfH19ERYWlhOAfPrpp1i3bl2hnu/o6Cg3EhQREYE1a9YUuR8F4QCEMcaY2hiXM8bAzQMRejQUHb7tAANjTpOqc2QyICEBCA8HXryQ//f16w8BR2ws7asNlpZAhQpA1aqAs7P8o2pVoFo1INcc9vee+z/H8U+OK2zPTs/GvuH78ObeG3Ra1CnfAoeMacqBAwdUcpy8U7NMTEwwffr0Qj135syZcl/36NFDJX3KiwMQxhhjRSaTyRB2PgzVO1UvcN+qbaqiapuqGugVy1diIvDoERASQv8+egQ8fgyEhQH/FR3TWcnJ9Hj2TPk+VaoA9erJPSyNK8O2hq3SwpeXllzC2+C3GLRlEIwtjAX3YYypHgcgjDHGiiQ9IR2Hxh9CyMEQeO/2htsQN213ieWWmQk8eADcvk2PO3eAhw+B6Ght90y9Xr6kx5kzOZvKA5hkUxl77YbiWZxwBfWQgyHY2HEjRh4dCYuKiqMojDHV4wCEMcZYoUXdisIe7z05Fc39JvuhSosqsHGx0W7HyqqMDODWLeDGjQ8BR3AwkJWl3te1tgZsbWna0/tHuXIf/jUxobUeYjEgEtG/7/8vkQDp6UBa2od/3/8/KYmmesXG0v9VwCwhCqPwJ06hO26gteA+UYFRWO+xHqNOjIK9q71KXpcxphwHIIwxxgolaF0Qjn18DJIMSc62jMQM7BuxD+MujoOBEa/vUCuZDIiIAK5fB65do3+DgmjEQxVEIirIUK0ara2oVg1wdAQcHGj9xftH+fKAsQamK2Vl0aL39wHJ69f0/YeHyz/evi3wUGJI0RMn4IA3OIo+kELxXI1/Fo/1jf/EyB8bosrEnhRIMcbUggMQxhhj+cpKzcKxGcdwe8NtwfbI65E4v/A8uiztotmOlXYyGRAaCpw/D/j7AxcvAq9eleyYBgZA9epA3bpAnTr0b82aFGw4OWkmsCgsIyOgYkV65CctDXj6lKaZ5X48ekSjKrk0QxDsEYvdGIpUKAYYqWkibPo0CN6fLUDt1nZA9+5A375A06Y0gsNKHRcXF6SmpuLly5cw+i/b2rlz59ClSxd88cUXWL58uUpeJyAgAL/99hu2bdtW7GOcP38es2fPRkBAQME76zgOQBhjjCkV9yQOu712I/qu8vUD5hXMUc2zmgZ7VUrJZHQh/T7gOH++ZAFH9epAkyb0aNjwQ7ChS0GGKpiZAQ0a0CM3qZSyed25A9y8CQQEADdvolr8C0zCP9iK0YiD4nSrLBhjp3Qo+l49gmZXvwO++45Ghvr0oWCka1ceHSllnJ2dcfjwYXh5eQEA1q9fL1jkLz/Z2dkwNFR+Wd28efMSBR+lDQcgjDHGBIUcDMHBsQeRkZShdB/nds7w3uUNS0euLF0sKSnAuXPAiRP0eP686McQiYD69YEWLehOfZMmQKNGgI2NqnurX8RiCsKqVwcGDqRtMhnw/DlsAwIw4cJN7NicgJcpNgpPlUEMP/RHEqzQAechiooC/vmHHiYmQKdOwKBBgJcX1Slhem3ChAlYv349vLy8kJiYiOvXr2PEiBFIS0vDvXv3MH36dLx79w7p6enw8fHB119/DQAYN24crKys8PjxY0RERCA4OBjz58/Hrl27YG9vD09PT/j7+yMgIEBu9CIsLAzNmzfH9OnTcfToUSQmJuKPP/5A7969AQCjR49GSEgIMjMz4ezsjPXr18PBoXTVT+IAhDHGmByZVAb/b/1xacmlfPdr80UbdFnWhdd+FIVMBty//yHguHSp6AvGbW2B1q2BNm3o35YtaVE4K5hIBNSoAdSogXJDh2Ls/7Kw12snHp8QTu97AR2RAgv0wVGI8F8NlIyMD7+/jz+maVrDhwMDBgBWVhr8ZpiqeHp64s8//8TLly/h5+eHIUOGwMCA3tdcXFxw5swZmJiYIC0tDR4eHujWrVvOCMnly5dx8eJFWFhYwM/PD0eOHMGdO3dgZmYGb29vpa8ZGxsLd3d3LFq0CCdOnMCnn36aE4CsWLEC5cuXBwD8+OOPWLRoEVauXKnmn4JmcQDCGGMsR3piOvaP2o/Qo6FK9zGxMsGADQNQb3A9DfZMj2VnU6Bx8CBw6BBNCyqKypXpjnvHjoCnJ1C7Nl1IsxIzMjfCML9RODr9KILWBgnuE4jmyIIRBuAQxJDKN2ZnA8eO0cPUlKZpDR9OwSErlOSoZKREpchtM7U1hW11W2SnZ+PtA8UkA5WbVQYAxDyKQdY7+QDexsUGZnZmRe6Hj48PNm3ahIMHD2Lbtm0506XS0tIwffp03L59G2KxGBEREbh9+3ZOADJ06FBY/FcE09/fH0OHDkW5/6bojR07Fj/88IPg65UrVw4DBgwAALRp0wZPnz7Nadu2bRu2bNmCjIwMpKWloVKlSkX+fnQdByCMMcYAADEhMdg5cCdiH8Uq3adio4oYsncIpyotyLt3wMmTFHQcPUrZnAqrYsUPAUenToCrKwccaiQ2FKOvb19YVbXC+W/PC+5zF43RqLEINYMPU9AhJD0d2LcP2LcPNlZWgI8PMHky0Lix+jpfCgT6BuLC9xfktjUc1RCDtw5GUmQS/nb/W+E5C2ULAQCHxh1C5PVIubZBWwah0ehGRe7HuHHj0KxZM9SuXRuurq452+fNm4eKFSvi1q1bMDQ0xODBg5GeK7nB++ADoAKtokL+rZqamub838DAABIJZRe8fPkyVq5ciatXr6JChQo4fPgwFi1aVOTvR9dxAMIYYwyP/B5h/6j9yExWntK18djG6LOqD4zMjTTYMz2SkgL4+QG7dlHwkScDk1JGRkC7dkDPnkCvXrSYmgMOjRKJROjwTQdYOlriyNQjkElkcu09VvRAzU8XAgkJ9Lvdt49+10p+x+KkJOCvv+jRogUFIsOHA5a8Viov96nuqNO/jtw2U1u6OLdyssKUwClKnztg4wDBEZDicHR0xLJly1C3bl257fHx8WjQoAEMDQ3x6NEjnD59Gp07dxY8RqdOnbBw4ULMmjULpqam2LJlS5H7ER8fDysrK9jZ2SEzMxO+vr7F+n50HQcgjDFWhsmkMlxaegn+3/oDMuF9xEZi9PqzF9ynuBf67l6ZkZpK02927aKRjrS0wj3P2ZmCjV69gM6d+cJURzSb2AwWFS2w23t3Tr2bzks6o/Wn/xUwtLEBhg2jR3IycPgwsGMHBSXKRkZu3qTH559TEDJtGuDurplvSA9YVraEZWXh89/Q1DBnupWQ8nXKq7Qv48ePV9i2YMEC+Pj4YNu2bXBxcVEafABA//79cfXqVTRu3BiOjo5o3bo14uPji9SHXr16YevWrahbty6cnJzg4eGBkydPFvl70XUimUym5CNH9wUFBcHd3R2BgYFo1qyZyo4bFxcHOzs7lR2PMU3jc5gVRmZKJg6OO4iH+x4q3adcxXIYum8onNs6a6xfOn/+ZmXRAuTt2+ku+Lt3hXtes2aUjWngQB7l0HHP/Z9jR78daDWzVeHq28TFAfv3UzDi70/JBvLTvj0FJP36UW2WUkhd12i6Ljk5GZaWlpBKpZg0aRIcHR2xePFibXdLYwr7e+cREMYYK6MCfAPyDT4cWzhi2P5hsHLizD6QyYDAQGDzZrrIjIkp+DmGhkCHDhRw9O9Pox5ML1TvVB0f3f0INtVtCvcEOztg0iR6PH+OtL/+gtmOHcrruFy6RI+aNYFPPwXGjwdyrSVg+mvMmDEICwtDWloamjVrhrlz52q7SzqJAxDGGCujWs9qjTD/MMGMV43HNkbfNX1haFrGPyYiIoBt2yjweKg8WMthaEiF6oYOpcDD1lbtXWTqYVujmL+76tWRNm8ezH78ETh+HFi7lqbnSaWK+z59CsycCXz7LTBlCvDJJ1SRnumtAwcOaLsLekGs7Q4wxhjTDrGBGF7bveDQ4EOBK5GBCD1/74kBGwaU3eAjI4PWdHTrBlSrBnz9df7Bh1gMdOkC/P038Po1XXSOH8/BRxmR/CoZ794ITMMzNKQpVocPA+HhwA8/AI6OwgdJSAB+/plqlEybVvRUzYzpGQ5AGGOsDDOxMsEIvxEwr2AOM3sz+JzyQauZrcrmYvMHD2hefpUqtFj4zJn85/J7eFCWo1evaN/Jk7kqdhmT9DIJGztuxOaum5Eak6p8xypVgAULqNL91q1UsV5IVhbg60upl6dMAcLC1NJvxrSNAxDGGCvjbFxsMPLISEz+dzKqd66u7e5o1rt3wIYNQNu2gJsb8NtvQKzyOihwcaHpMo8fA1euANOnU90OVuYkRSZhU8dNiAuNw5t7b7C5y2akxuYThACAsTEwahStJzp/ntYGCQX7WVk0dcvVldaVPBOu1M6YvuIAhDHGGKq0rFL8Oe/66NEjWvzr6AhMmABcvap8Xysrugi8eJHm7H//PV0YsjIrMTwRGztsRNyTDwUmo+9GY0vXLUiLK0QqZpGIEhQcOgSEhAAffQSYmCjul50NrFsH1K4NTJwIREYq7sOYHuIAhDHGSqm3D99iz5A9yHynvLhgmZKdDRw4QIvE69YF/vgDSEpSvn/HjjRd5vVruhvdvj2t92Blnt8UP8Q/U6zv8Pr2a2zptgXpCYUsQglQcLFqFY1yzJwJ5KqQnUMiAdavp8B33jwgMbEEvWdM+/idlDHGSqGw82FY77EeD/Y+wP6R+yGVCGTgKSuio4HFi4Hq1YHBg4GzZ5XvW7Ei8OWXNMXK35+my5iZaa6vTC/0X9cftjWFRwyjgqJwyOtQ0YIQgEbjfv+dApFZs4QDkfR0YNkyoFYt4M8/gUy+ucD0EwcgjDFWytzdehdbun+4C/vo8COc/Lz0VdIt0K1bwNixQNWqwDffKJ++IhJRRfL9+ynt7o8/8hQrli+rKlYY6z9W6bTFN7ffYFuvbchMKUaAULkyrUV6/pySIggFwDExNFri5gbs3Vtw4UPGdEwZzbHIGGOlj0wmw6Ull+D/jb9C279//Avb6rZoPau1FnqmQRIJVSdfsQK4cCH/fe3taW3HtGm0uJyxIrCuao2x/mOxseNGJDxPUGiPvB6JnQN3YuSRkcVLaV2pEvDLL8CcOcCiRZTmWSKR3+fJE2DIEKBNGxoRcXcv3jejRg8LUz+HlRqF/X2LZDL9DZsLW+69qOLi4mBnZ6ey4zGmaXwOlz2SLAmOTDuC2+tvK93Hub0zxvqPhdhAtwe/i3X+JidTNqs//qCF4vlp1Qr4+GO6cBOa5sJYESS8SMDGDhuR+EJ4XUadAXUwdO9QiA1L+Hf36BHw1VfAwYPC7SIRBdOLF1Nldi0LDw9HvXr1kJpaQGYwVuqYm5vj4cOHcHZ2VroPByAC+OKN6Ts+h8uWjKQM7PbejWenlafqdBvqhoGbBupFccEinb9RUTRvfvXq/BeUm5gAI0dS4KGDd4mZfot/Ho9NHTchMVw4CGnk0wgDNw6ESKyC+jqXL9OoyPXrwu3ly1NRw7FjtZ40ITw8HDExMVrtAyu6xMREWFtbF/v55cuXzzf4ADgAEcQXb0zf8TlcdiRHJWN77+14ffu10n085nqg67Kuqrn40YBCnb8hIcDy5cCWLfkvxK1UiYKOqVOBChVU21HGcol7GocN7TYg5XWKYHuLGS3Q649eqinyKZMB+/bRiIiyEb82bSi7VpMmJX89VqZo4hpCt8fhGWOMKRXzKAbrPdYrDT5EYhH6rO6Dbj9105vgo0DXrgGDBgH161N9BGXBR9OmwObNVEl6wQIOPpja2dW0w+hTo2FqKzyt7+bKm/D/VnF9VrGIRIC3NxAcDCxdKrxQ/do1Gu2bOTP/0UHGtIADEMYY00OR1yOxvu16JIQlCLYblTPCCL8RaD6tuWY7pg4yGXDiBNXh8PCgOfBCg/ciETBgAFWYDgwEfHyEi7sxpiYVG1bEqOOjYFTOSLD90uJLuLo8n6KXRWViAnz9NY0IDhqk2C6V0uL0Bg3ob4gxHcEBCGOM6ZlHfo+wqfMmpMUKV1y2qGyB8ZfGw7W3nqeSlUqpcGCLFpQm9/Jl4f2MjYHJk+ki7OBBqjCtimkujBWDUysn9NnaBwYmBoLtp+ecRuDaQNW+qLMzpZE+dgyoWVOxPSKC/obGjwfiFQsoMqZpHIAwxpgeCfonCLsG7kJ2WrZge/m65THx2kRUblpZwz1ToexsYPt2oFEjKhwYqORizdqa7v6+eEEpSmvX1mw/GVOiqmdVeO/yhshAOBA+Ou0oQg6GqP6Fe/UC7t+ntL1CGd42bqTaIX5+qn9txopAo4vQZ86cicOHD+PFixe4d+8eGjRoILifi4sLTE1NYfrfH8/XX3+NYcOGKezHi9AZE8bncOkjk8lwYdEFXPhOeW2Lqh5VMfzwcJjbm2uwZx9kZVE23JQU+jc1FcjIoOLN6ekf/p+RQUs3pFIqa/D+X0mmBNKAIEj8/WEU9xZiSGEAidy/hsiGqa05TPp2g2mfzvR/E7rWMjMDLCzoYWlJ23gghGnD+/fgu1vv4oDPAcF9TKxMMOvFLJjaqCkV9LNnNDJ47pxw+8iRlLba3l49r8/0liauITSaj9Hb2xtz585Fu3btCtx37969SgMUxhgrS6QSKY7NOIbANcqnbdQZUAdeO7xgZCY897ywZDIgMRF48waIjqZ/Y2Jo1kZc3IfH+68TEz8EHPkloyocAwAt/nvkIx7Alv8e+R3N4ENAYmUF2NpSeQQ7O/n/29kBDg5AxYr0b/ny9FzGSqrR6EZIT0zH8RnH5bYbWxpj6P6h6gs+AKBGDeDMGWDtWmD2bPojzW37dmr/5x+gXz/19YMxARoNQDw9PTX5cowxViocGn8Id7fcVdruPtUdvVf2LrDQWXIyEBlJj5cvP/w/MpKCjfcBR0aGqr8D7ZBIKEBKTKTvt7DEYgpCHBwoi6+jI+Dk9OFRpQr9W7681sssMD3Q8uOWSI9Ph/83lAHLopIFRh0fhUpNKqn/xUUiYMoUmpo1ZYriQvQ3b4D+/YGPPqK01ubaGT1lZY/OVqQaNWoUpFIpWrVqhWXLlqFCPikUZ8yYAWtrawwePBheXl4lfu14XqDF9Byfw6WLUzcn3Nt2DzKp4ozZVl+3QosvWiAhKQEpKUB4uAFevBAjPFyc8/+ICPo6KYmvlgtDKqXrsjdvaDq9MsbGMjg5SeHsLEW1ahJUrSpFtWpSODtLUK2aFOXLy3gKWBmV9z3Y7SM3xDyPQcTFCAzYMwDGzsaIi4vTXIfKlQO2boXxjh0wX7AA4sQ8BRNXr4bk7FmkrF0LCc8+KfPUcQ2Rd0qXVgoRuri44MiRI0qnWIWHh8PZ2RlZWVlYsGAB7t27h2PHjinsx2tAGBPG53DpE7QuCH6Tci0cFYtgPLgvnts2w+PHwOPHVBRcl5iY0LqM92s0TExkME1LgMmbcBhnJCus7zCABAaQQGZtDZlrXUjsykMqFcmtE8nKohGa3OtJ3q8xSUsTzs6rLZaWtC4+78PVldbPs9JL6D1YKpEiIykDZrYCNTs06dUrYNo04YXoxsbAjz8Cn37Kw3tlWKlbA1JY78u3GxkZYdasWajNmU0YY2VMRgYFFcHB7x/NIC2fiqYxZ5EFQ+yVeuPR3jpq7YOlJa2LKF9eeO2ErS1gY0P7vV/4/f7fcuVyraOQySid7rffAo+Dlb9gq1bA998jrnl92BVjYaxMRkFI7oXw7/9NTKR1K7nXsrz/f0wMjXbExqo2gElOpgReQkm8KlemZERublRT8f3/bWxU9/pMt4gNxNoPPgCaU3joEK0NmTWL/mjey8wEPv8cOHmSMmZV0sA0MVYm6VwA8u7dO2RlZcHmv3fhHTt2oGnTptrtFGOMqdHr18Dt2x8ed+4AoaF0x19eWyQiC89QA+GoVuzXs7dXXM9QuTIFG+8fDg7CxZWLRCYDTp2iSuQBAcr3a9kS+P57oEcPmrNezKkpIhFNYTc3p++hqLKzKRjJvR4mKkp+vczLl3QDWSotVhdzREXR48wZ+e2OjpR9uEmTD49atXhRPFOx92tDPD0pG9atW/LtJ08CDRsCW7YAPXtqp4+sVNNoAPLxxx/j0KFDeP36Nbp27QoLCws8efIEANC7d28sWrQIdnZ28PLygkQigUwmQ40aNbB582ZNdpMxxtRCJgPCwoCbN+mu+PuA482bwh5BhPPoVOBelSoB1avLP1xcqFaZk5MKAovCuHwZmD8fuHhR+T4tWlDg0bOnTuTLNTSkn11BN32zsylACQ+n3+fz5x8eYWFUliRbuExLgV69okfutcLm5nQt2KQJ0KwZ/dgaNACMSpbwjOmoVwGvEH03Gk0naODma926wLVrdJNg+XL5tpgYoHdvGrn85huOgplKaWUNiKrwGhDGhPE5rBtev6Zg4/0jIIA+04UYIQtZKPwVZcWK8msK3v+/Rg0NBRjK3LtHxQGPHlW+T6NGwOLFQN++goGHvp+/EgkVng4NRc76nPf/f/685KMnAK2padKEgpH3j9q1edq+rijuORxyMAT7Ru6DJEOC4YeGo3ZfDU5BP3MGGDNGeDFZ9+7Atm00H5OVemV2DQhjjOmb7Gy69r569cMjLKxwz62NR+iHI9iKUYiG/O33qlUV1wnUrauDi5jDw+lO6ebNyhdSuLpSheahQ0v1lbKBAY04ubgA3brJt2VkAE+fAg8e5F7fQ8FJUUZN0tOB69fp8Z61NdCmDeDhQY+WLWk9DtN9MpkM13+7jlOzTwH//fnsHb4X4y+NR+WmlTXTia5dgbt3gUmTaI1IbqdO0fDb3r10YjFWQjwCIkDf774xxuew+qWkUJBx6RL9e+MG8O5d0Y/TEPcwCAcghgwZRuWQMmQ8Gna0R8OGFHRYWam+7yoVGwssWwasXKm8gEjVqsB339HdVcOC73uVxfM3MxN48oSC2Dt3PkzPK0lmM7GYBps8PIC2bYEOHWjND1O/opzDMpkMx2YcQ8AqxXVSlo6WmHRjEqycNPhGIJMBv/4KfPml4kI0IyPg998pi5YOTJtk6sEjIIwxpiOSkmhZw4UL9AgIEFokXjh2djRlpjluwujUsZw7niZZ71Dh0mYMXTYB1s66NsSRR2oqXYj8+CP9cIQ4ONA6kKlTKRcvU8rYmALO+vWBYcM+bI+O/hCQBAXReff0aeGOKZV+CGRWraJtNWtSIPL+Ua34uQyYiohEIlhXFf57T36VjB39dmDcxXEwsdTQ35BIBHzxBY10DB1Kc0nfy8oCpk8HrlwBfH0p3R1jxcAjIALK4t03VrrwOVxyqakUcJw+Dfj7U5KY4szdL1cOcHeXn6tfvTpw5afLOPv1WcHn2Ne2x8RrE2FmpwMpO/OSSikzzvz5ysuLW1gAc+ZQOk8LiyK/BJ+/+YuNpUAk9/qi4o6UVKsGdOxIs2+6duWsq6pS1HNYJpPBb7Ifbq27Jdju2scVww8Oh9hQw1MXX7+miFgomUTjxsDhw5TdgpUqPALCGGMaIpFQZqozZ+hx5QpNiymqWrU+zMFv04bWbOROHiOTyXD267O48tMVpceo3qU6TG1Mi/FdqNnZs8Ds2XRLXYiREU3NWLCARj+YWtjbU8biHj0+bIuMpGRG79cfBQUVbk3JixfApk30ACi71vtgxNOT15BoikgkQp/VfZAQloDnZ58rtIceDcXJz0+i1x+9NNuxSpXo737+fODnn+Xb7tyhUZIDB+jNjrEi4BEQAXz3jek7PocL5+VLSnd6/Dh9xiYkFO35hoY0otG+/YeAI7/rbplUhqMfH0XgGoHKdP9p93U7dF7SGSJdml8dHAzMnQscO6Z8nxEjgB9+oDk+JcTnb8mlpdEoydWrNJJ3+XLxzu/WrYFevejRpAlP+y+s4p7D6QnpWN92Pd4+eCvY3mNFD7T+tHVJu1c8Bw4A48YpTrk0Ngb++Qfw8dFKt5jqaeI9mAMQAfzhx/Qdn8PCsrLoLvGxYxR03L1btOcbG1Ox7vfz59u0KfwUaGm2FIcmHMLdLcpftMuPXdDuy3ZF65Q6vX4NLFxIFxfK5p916UJ3Rvk9WKdJJLTA/fx5WsN08WLR6z1WqvQhGOnWjau256ck53D883isa70O794oZrUQiUUYcWQEXHu5lrSLxRMaCvTrBzx6pNj25ZfA0qWlOsNdWcEBSAE4AGFMGJ/DH8TFUcBx+DAV91W2XlqIgQEFHF26AJ070/+LU2NDkinBvpH78HDfQ+EdRECfVX3QfFrzoh9cHdLTgRUrgCVLKN2XEDc34H//U0sRQT5/1U8qpVTA/v40+ufvX/S/DQ8Puhbt3x+oU0d9fdVHJT2HI29EYlPHTchOV5xHZ2JlgonXJ6JCvQol6WLxJSTQupBTpxTbBgwAtm4t1tovpjs4ACkAByCMCSvr5/DTp5TG/vBhmnpSlGxV9erR3d2uXWmUo6RpcLPSsrDHew9Cj4UKtosMRBi0eRAajmxYshdSBZkM2LePFpArK2JSsSJNtRo/vlApdYujrJ+/2pCdTVO23q+BunqVRgwLq04dCkT696eRwbJeNFsV5/CDfQ+wx3uPYJttTVtMujEJ5vbmJXqNYsvOpkxZf/yh2NaoEb35coo1vcUBSAE4AGFMWFk7h2UyWnS7bx8FHg8eFP651tZU5LdXL/pXlXUSMlMysaP/DoT5hwm2G5gYYMieIajTTwduHwcGAp99RoVNhJib0wL0OXPUfnezrJ2/uujdO5qqdfw4PQqb+hegYtl9+wKDB1Mwb6qD+RTUTVXn8JWfr+DMl2cE26p3ro5RJ0bBwEiL0d7ffwMff6yY8aBSJRp6btpUO/1iJcIBSAE4AGFMWFk4h6VSKv63dy+wf3/hq44D9Jn4fi5769bquZGfnpCObb23IfJapGC7kbkRhh8ejhpdaqj+xYsiKooy3GzcKFzBXCQCxo6l6ViOjhrpUlk4f/VNaCgFIseO0ToSZTUn87K0pGDEy4tm65WVshGqOodlMhkOjTuEO5vvCLY3n94cff7qU+LXKRF/f8DbW3FRkaUlvTl37aqdfrFi4wCkAByAMCastJ7DEglNqXofdLx6VbjnmZnRndh+/YA+fYDKldXbz3dv32Frj614feu1YLuJlQlGHhsJ57ZazJ+fkUHrPBYvVr7Oo3174LffqJCJBpXW87e0SE2la87DhwE/v8LXIDEzo6Df25v+FkvzMgFVnsPZ6dnY1HmT0psZvf/qjRbTW6jktYrtyRP6pYaEyG83NKSbG6NGaaVbrHg4ACkAByCMCStN57BMRoXWduwAdu8ufNDh4PBhgWzXrjSDSBOSo5KxpesWpWk0zezNMPrkaDi6a2Y0QYFMBhw9StOtnjwR3sfFBVi+nObQaCHvamk6f0s7qZRm7x0+TI/CZpYzM6ORkeHDgd69S980LVWfwymvU7C25VokRShmChAZiOBzygfVO1dX2esVS0ICMHAgzd3L66efaPom53HWCxyAFIADEMaE6fs5LJNRytCdO+nxXLEul6CaNWmqx6BBVB9L09kgEyMSsbnLZsSFCuc3tahkAZ8zPnBw01KRvkePgFmzqPiJEAsLKiL46adavSLU9/O3LHv+nNZh7d9Po5WFucKwtKS/2eHD6WaBkZH6+6lu6jiHo25FYUO7DchKVcwOYGprikk3JsHe1V6lr1lk6enAmDHAHoHF8598QiOqZT1DgR7QxHswJ2tmjOmMiAjgxx+Bhg2Bxo2BZcsKDj7q1we++YaKc4eG0o221q21k4peJBJBmi1cL8Pa2RrjL43XTvCRlEQLyBs0EA4+RCJgwgT6AX75Zem7Hc00pnp1inEvXqTRylWrKI11ftecycnA5s00ElK5Mq1pvn69cMFLWVK5aWUM3DxQsK18nfIwsTTRbIeEmJrSXaNZsxTb/vyTosz0dI13i+keHgERwHffmL7Tp3M4OZmyV23ZQvPKC/OO1LAhMHQojXbUq6f+PhZFQlgCNnhukJsqYVfLDj5nfGBTzUaznZHJ6Ac7dy4QHS28T5s2lEqzuY7UIIF+nb+scGJiaIrW3r3A6dOKSZOEuLpSce3Roymw0SfqPIcvLLqA8wvP53zdyKcR+v3dD4am6kmLXWy//EI3PvLq0IEWD1laar5PrFB4BIQxVipJJFQUcNQoKisxfjxw7lz+wYerK/Dtt0BwMM0zX7BA94IPALBxscGYs2NgUZlW2FaoXwHjLo7TfPBx+zYtIh87Vjj4qFyZbjtfvqxTwQcrncqXp0G2Y8do0bqvL9CpU/5LAkJD6W++Rg3A0xNYuxZITNRcn3WV5zeecBvqBoiArj91xcBNA3Uv+ACoTsj27Ypz6i5coLl2ebNmsTKFR0AE8N03pu909Rx+9gzYsIGSokQKJ3SRU7UqjdgPH06pc/Vp/eLbB29xYtYJDN42GOUqaDD3aHw8zUlbvZpWCOdlbEwL0OfP19k7kLp6/jLVe/WKlgvs3EnTrgpiZkZZtCZMoBvpuvqeoO5zOCs1CxHXIrSfxrswzp2jRT5JeRbQN2pEw2EOWloTx5TiRegF4ACEMWG6dA6nptKC1HXrqH5AQaytaXqVjw/Qtq121nLoJamUoruvvqL5LkL69KFFoK6umu1bEenS+cs059kzYNs2mjUYGlrw/jVr0ujp2LGAk5P6+1cUfA7ncecO5UJ/myc7YJ06wJkzuvcLLON4ChZjTG8FBQHTptFMHx+f/IMPQ0NKybl7N/D6NRXXbd+eg49CCwoCPDyASZOEg48aNWjO9ZEjOh98sLKrRg0avHv0CLh2DZg+HcjvGujpU5qKWa0a1RfZvx/IUkwQxXRB48bApUtAlSry2x89ojf7Z8+00y+mNfzxzhhTmXfvaKSjZUuqXefrqzjqnlvTpsDvvwMvX9L18ZAhup+AKexCGK7/Xoi5IpqQkECpLVu0oLLweZmaAosW0cKZvn013j3GikMkokx2f/1F60UOHKDyEoZKljlIpZTczcuLgpFvvgHCwzXaZZ2mMxNd6tShIKRGnmljYWEUhDx8qJVuMe3gAIQxVmL37gEzZgCOjnQT/uZN5fva2QEzZwK3btGN+5kz9WcK8LMzz7Ct1zacnHUSN/4UuODXFJkM2LoVqFsXWLlSeK3HoEH0gf7NN7of1TGmhLExBR8HDtCNil9+odTbykRFAYsXU9asvn3pxoZEorHu6hRJpgRHpx+F/zf+2u7KB9WrU47munXlt796RZkGbt/WSreY5nEAwhgrlsxMSnDSti2tJfzrL+WjHSIR0KMHsGsXfc78/jvQpIlGu1tiocdDsb3vdmSnUf7QEzNPIMA3QPMdCQ6m9EE+PsLZrVxd6Xbw/v1U0ZyxUsLBAfj8c+D+fVqwPmWK8jwKUilw9CjQvz9d8y5eDLx5o9n+alNKdAo2d9mMgNUBuLTkEh7se6DtLn1QpQoFIXk/BGJigM6d6e4UK/U4AGGMFcmrV8DChYCzM6XRvXpV+b5OTsB33wEvXtA18dChgIkO1MoqqkeHH2HXwF2QZMjfSj067ShurdfQh+W7d1QksEkTSmOZl6kpXWXdu0fRHmOllEgEtGpFUzyjoiirnoeH8v0jImggsGpVitv//VdjXdWKlzdf4m/3vxF++cM8tINjD+JNsA5FYBUqUOGn1q3lt8fHU4reO3e00y+mMRyAMMYKJJNRuYjhw2mO9aJFyuvaiURU0fjwYapivnAhffDrqwf7HmC3125IMoXncTw/91z9c6z9/Gjeyc8/C1dw69cPePCAUuvqY4THWDGVK0dZsK5coWvW6dOVj4pkZtLMxVataJ3ali1ARoZm+6tuafFp2NJ1C5JfJsttz3qXhd2DdyM9UYeqkNvYAKdO0YhubnFxFITcv6+VbjHN4ACEMaZURgawaRPQrBmtEdy1S3kF40qV6Pr32TOa+tCvn/JFo/ri/s772DtsL6TZAmssADQe0xgDNw2ESF3FCCIiaC1H//7Cq2qrVQMOHaJoT99KRTOmYu+ngr56RUUL86uvefMmMGYM3Rz59lvKvlcamNmaodv/ugm2xT6OxaFxhyCT6siidICixSNHFIOQ99OxHujQ1DGmUhyAMMYUxMTQbB4XF2DcuPzXBXp6Uvrc8PAPzykN7my5g/2j9kMmEf6wbjqpKQZsGACxgRreRrOzgV9/pVLvBw8qthsZAfPm0Ydz//6qf33G9JiFxYdkGDdv0nuYsoHBt2+BH36gWH78eODuXY12VS3cp7jDfaq7YFvIwRBc+fmKhntUAHNzGuXt0EF++9u3FISEhGinX0ytOABhjOV4+BCYOpXuCn7zjfK7gmZmwOTJFJhcuEDpc42MNNpVtbq1/hYOjj2o9E5h8+nN0c+3H0RiNYx8XL9Ot26/+ILWfeTVsSNdJS1ZQh/cjDGlmjen+pwREcCyZcqng2Zm0lqSxo1p9s+xY8LJ5fRFz997okqrKoJt5+afw7MzOlZ3o1w5Gglp105+e3Q0BSGPH2unX0xtOABhrIyTyWgtYJ8+tMzg77+BdCXThKtXB5YvByIjab/GjTXbV00I/DsQhyceBpTMUmj9WWv0Xtlb9cFHYiJNYPfwEF6AWaECsHkzcO6cYgpLxli+KlQAvvqKpoju36844ye3s2cL936oywxNDDF071CYV1C8SSGTyrB3+F4kvEjQfMfyY2FBkV+bNvLbo6LoF/bkiXb6xdSCAxDGyiiJBNizhxZjdu5M7/vKdOxISw1CQ+nGfH7VifXZv3/9iyNTjyhtb/tlW3T/pbtq13zIZPSLqFsXWL2avs5ryhSahuDjQ6v8GWPFYmhIy6rOnaOEcZMmKZ+e9egRjQi7uNDoSUKCJntaclZOVvDe5S14syQtNg17vPcgO13Joj5tsbSklImtWslvf/WKghCuMFlqcADCWBmTlgasWUNFaYcOBQKUlLIwMqLr3aAgGiHp3x8wMNBsXzXp+orrOD7juNJ2z2880WVZF9UGH2FhVC1t6FDh+W4NG1J6H1/f0hv1MaYlDRrQYvXwcOD775UXRI2OpiVXVasCs2fTCLC+qN6pOrr+1FWw7VXAKxz7JJ87T9piZUVBSN4sApGRQLduZaugSynGAQhjZURCArB0Kd3N++gj4OlT4f3s7OjDNiyMZvw0barBTmrJlf9dwcnPTipt77ioIzot6qS64CM7m+ayubkJDz2Zm1PK3cDA/AscMMZKzMGBMmG9eAGsX0+BiZCUFKrEXqMGLVh/+FCz/SyuNl+0QX1v4fLxt/65haB/gjTco0J4n6K3WTP57Y8fA716Ka96y/QGByCMlXJv31JAUa0apclVdvOoRg1KYRkRQeubHR01209tubTsEs7MPaO0vcuyLujwTQel7UV28ybQogUwZw6QmqrY3rs3VTufM6d0rexnTMeZmn7IhHXqFC1GF5KVRQvW3dwAb2/dL9wtEonQf31/lK9XXrD92MfH8CrglYZ7VQi2tvSLqJ8neAoKoiH5tDTt9IupBAcgjJVSr14Bn3/+Yf6yshtGzZpRfY9Hj2gNdFlKrHRh0QWcm3dOaXu35d3Q7qt2StuLJCUF+OwzqvwrlNe4UiXKZ3zkSOnJZcyYHhKJaKbP6dM0CDlsGCAWuFqSyYB9++g9tE8f4No1zfe1sEwsTTBs/zAYWxgrtEkyJdjtvRtpcTp4QW9vT0FItWry2y9coF9MVpZ2+sVKjAMQxkqZsDDgiy/MUb068NtvwjfZgQ8fsAEBtARB34sGFtXDAw9xfuF5pe09VvSAxxcqmv507BjdLl2xQjG3p0hEc+IePqR8xrzInDGd0awZsHMnJeCYPp1GSYQcO0azJTt3pgXuQrkktK183fIYsHGAYFvii0QcGHNAt4oUvlelCn1Y5V2k4+cHTJyo3/mSyzAOQBgrJZ49o/fiWrWAjRtNkZmpuI9IRMFGYOCHKQZl9Xq3Tv86aDS6kWBb7796o/WnrUv+ItHRwPDhdHtUKHtLgwa0yHzVKprzzBjTSe+nqL54ASxYAFhbC+/n7w906QL07m2J06d1LxCp71UfHnOFb6yEHg3F5Z8ua7hHheTqCpw8SQvUc9uyhUaWde0HzQokksmU/9ZiY2Nx/vx53LhxA69fv0ZaWhrs7e1Rp04dtG/fHs3zZijQsKCgILi7uyMwMBDN8i5UKoG4uDjYccYZpieeP6cK5Js2UWpdIQYGwOjRwNdfU/YrRqQSKQ6MPoD7O+/TBhHQ17cv3CcLVxEuNJmMqp998YVw7k4TE1r1yus8BPF7MNN1iYl03+DXX4GYGOX7tW0LfPcdBSW6crNHmi3F5q6b8eLCC4U2kVgEnzM+qN6puhZ6VgiXLwPduyuu//j+e3pPZSqhifdgwRGQ8+fPY9CgQXB0dMSQIUOwe/duPHjwAFFRUbh06RK+/fZbtGzZEjVq1MCSJUuQxNkIGNO4sDCqRl67NmVuEQo+jI2BadNo+sDGjRx85CU2EGPQlkGUIUYEDFg/oOTBx5MndLUxcaJw8NGpExUgmDePgw/G9JS1Nd3QCQujIKRyZeH9rlyh6a6enlTgUBdu1IsNxfDe6Q2LShaCbYnhiVroVSG1awfs3as4Z3jhQmDdOu30iRWLQgDSvXt3DBgwANbW1ti/fz/i4uIQFhaGgIAAXL58GcHBwUhKSsK9e/cwbdo07N+/HzVq1MCx/KqYMcZU5sULqkvn6gr88w9ldM3LzEyGzz6jaVmrV1MFcyZMbCjG4O2DMebMGDQZ16T4B8rOptS5DRvSPIy8bG0pUjx7ln55jDG9V64c5N5r866Vfu/yZZry2qGD8NuDpllUsqAihQYfhmWsq1ljwpUJaDK2ifY6Vhi9e1OO+LxDSlOn0jQtphcUApAOHTogPDwcGzduRJ8+fWAjMC9ZJBLBzc0Nc+fORWBgIPbv3w8pLwJiTK1evwZmzqRr17VrlQUeNOsnKCgBv/5Ka/dYwQyMDFC9cwmitKAgKin/5ZdAerpi+4gRtMh8/HjdmYfBGFMZU1MabX78mN6fq1YVng976RItVO/aFbhxQ8OdzKOaZzV0WdoFAODaxxVTg6bCsbme5F8fMQL480/5bRIJ5UUWyjLIdE6+a0B0Ha8BYWVBXBzwv/8Bf/yhPKOVqSllaJk7F6hYkc/h96QSKSQZEhiZq2mqU2oqzT3+5RfhOXBVq1LZ+d691fP6pRSfv0zfvX4dBz8/OyxeLJx/4r3+/WkNX8OGmutbbjKZDA/2PEB97/oQifXw5shXXwE//SS/rXJl4Pp1wNlZO30qBbS2BiS3zMxMREdHIzo6GplCaXUYY2qRnEwfTDVqAD/+KBx8mJoCs2bRQvRffqHggxFpthSHxh3Ctl7bkPlODe9d/v5Ao0Y07Spv8CESAZ98QgUFOfhgrMwxNqY1eqGhdA+ialXh/Q4fBho3BkaNouVjmiYSieA21E0/gw8AWLqUMg3mFhVF77tCa/CYzhAMQN6+fYuvvvoKdevWhbm5ORwdHeHo6Ihy5cqhXr16mD9/PmLyS/vAGCu2jAzg99+BmjWBb76hbCt5GRvT9e2zZ1Tro1IlzfdTl0myJDjgcwB3t97Fi4svsLP/TmSlqqhgVUICLcLp3Bl4+lSxvX59Wnn6xx+ApaVqXpMxppeMjWlpQmgoZc1yFJjhJJMB27cDdevSW8srHSxKrrPEYsqw4ukpvz04GPDygmA+eqYTFAKQ+/fvo0GDBjh06BAGDhyIdevWQSaTYcmSJVi9ejX69u2LHTt2oGHDhnj48KE2+sxYqSSV0odQvXo0qvH2reI+BgaUXCk0lK5vlWVeKcskmRLsG7HvQ2pdAM/PPceuQbuQnS6wcKYoDh2igoJr1yq2GRnRdKxbt4A2bUr2OoyxUsXEhOqNPnlCo9X29or7SCT01lKrFjB/vvDNJybAxAQ4cIAiuNzOnQMmTdKN1GNMgcIakI4dO8Le3h67d++GgYEBJBIJjIyMEBAQkLPOIjMzE0OGDEFycjLOnTunlY4DvAaElR5nztD65aAg5fsMH07Xt7VrF3y8snoOZ2dkY++wvXh06JFge33v+hiyZ0jRDxwdTRkAdu8Wbm/ThlKS1a9f9GMzBWX1/GWlR0HncFISsGIFBSPKKhnY21PRw48+omtsbQq/Eo6U1ymo76XD73HPn9N7cXS0/PYFC4AfftBOn/SUVtaA3Lx5E5988gkMDAyUPsnY2BizZs3CDW2ncGBMz92+DfToQXnilQUfffvSTfUdOwoXfJRV2enZ2D14t9Lgw8jcCM2nF7F4qkxG6R7r1RMOPsqVo0wsly9z8MEYKzQrK6qb9+wZJQ8xM1PcJzaWUvzWq0ej49pINiqTyXB1+VVs7LARB8ccxNsHAkPzuqJ6deDIEcDcXH774sXA1q3a6RNTSiEAqVixIh48eFDgE+/cuYNKPPGcsWKJiAB8fICmTYFTp4T38fCg61o/P6BJE412T+9kpWVh54CdCD0WKthuVM4Io46PKlp13/BwWsg4diwQH6/Y3rMnzTOeMYPmITPGWBHZ21MSpydPaP2H0L3f589pkXqLFpqtIZIWl4adA3bi9JzTkElkyErNwp4he9ST1ENVmjcHdu1SfE+eNIkyYzGdofCpOXv2bMyePRtLlizB06dPc+p7iEQiSKVSPHnyBEuWLMHXX3+NuXPnarzDjOmzlBRaWF67tvIbMnXrAgcPUvDRtq1Gu6eXMt9lYnuf7Xh6SmBBOABjS2P4nPJBNU8lFcLykkqBv/6itR4nTii229nRqMixY8qrjjHGWBE4OgK+vsD9+8CgQcL7BAVR7ouBA6neiDqlJ6TDt5kvHvvJv9DbB29x9KOj0OkKDn37AitXym/LyKAfXESEVrrEFCkEINOnT8eff/6Jv/76C7Vr14a1tTUAoG3btjA2NkadOnWwatUqrFmzBlOnTtV4hxnTRxIJsG4dFRFcvFi4Vp2jIy1AvHcPGDCA69UVRkZyBrb12oYw/zDBdhNrE4w5MwZVPZTkwMzr0SMqVTxjBkWLeQ0bRgUFfXz4F8QYU7m6dYH9+ymRnrIbUO9zYcyaRXWi1MHUxhSufVwF2+5uuYtb62+p54VV5aOPKFVkbtHR9OH67p12+sTkKC1EKJVKce3aNQQHByM2NhYAYG9vj4YNG6JVq1YQF3HKwcyZM3H48GG8ePEC9+7dQ4MGDQT3Cw0NxdixYxETEwMbGxts3LgR9ZXMreZF6EwfnDlD1cnv3hVut7KiBeizZilOXS2usnAOpyekY1uvbYi8HinYbmprCp/TPnB0L0Rl3+xsWg26cCHdKcvL0ZFyaA4YUMJes8IoC+cvK91UcQ7LZDQF96uv6L6HEFtbWksyfTql/FWl7IxsrG+7HlGBUQpthqaGmHh9Iio11uGp+NnZQK9e9CGcm7e38DQtlkMT78Eaq4R+8eJF1KhRA+3atcORI0eUBiCdO3fGmDFjMG7cOOzduxe//PILrl27JrgvByBMl4WGAp9/TmvihBgYUH74774DKlRQ7WuX9nM4LS4NW3tsxasA4YT5ZvZmGHNmDCo1KcSH4507wIQJyrMATJpEpehtbIrfYVYkpf38ZaWfKs/h7GxKsvftt8Lp2QFK3fvLL0C/fqodnI1/Fg/fZr7ISFS8MWPnaocpAVNgYqXlFF35iY8HWrWiD+TcvvuObjgxQVrJgnXv3r0iHyQzMxNPCijh6enpCScnp3z3efPmDYKCgjB69GgAgJeXF54/f46wsLAi94kxbUlKoqwmbm7Kg48+fWiq1V9/qT74KO1SY1KxuctmpcFHuYrlMO78uIKDj4wM+kRv3lw4+Khene6crV3LwQdjTGsMDYFp0+ga+ssvhVPyPnlCA7Q9eyofLSkO2xq2GLhxoGBbXGgc/Kb46fZ6EFtbKjf/33KCHN99B+zdq5UuMWKYd0Pbtm3RsWNHTJ48GT179oSRkZHSJz99+hQ7duzAqlWrMHv2bHz++ecl6kxERAQcHR1haEjdEolEcHZ2Rnh4OFxcXJQ+b8aMGbC2tsbgwYPh5eVVoj4AQLxQxhvGCiCVAjt2GGPxYnO8eSM8tFu/fjYWLUpFp05UEE9d83dL6zmc+iYVBwYdQFyI8A+uXMVyGHhwIAwdDRGXzw/XIDAQ5WbOhGFIiEKbTCRCxtSpSJ03j9LsquuXxJQqrecvKzvUdQ7PnQsMHy7GDz+YYf9+xUjk1CmgUSMZJk3KwNy5abC2Lnlw4ODpgCbTm+D2qtsKbcG7glGhRQU0HN+wxK+jNg4OMPrnH1gMGwZRrlzGsjFjkFS+PCSNGmmxc7pJHedv3hEVhQAkNDQUS5YswciRIyESieDu7o6GDRuiQoUKMDExQUJCAp4/f47AwEA8ffoUzZo1w5o1a9C/f3+VdFCUZ+ywMJH1ypUrVToFC1D8QTGWn+vXqU7dzZvC7RUr0uLz8eMNYWBgpZE+lbZzOPlVMg4NOqQ0+LByssKYc2Ng7ypQYvi91FQadv/1V+Gk+vXqQbRuHUzbtIGpivrNiqe0nb+s7FHXOWxnB+zbB1y7RtN882aXzc4WYc0aU+zda4olS4CJE4XT+xZF3xV9EXMrBpHXFNfcXZp/CbU710blppVL9iLq5O1N7/uzZuVsEqWlwdrHBwgIoA9pJkfjU7AqVqyIP/74A1FRUfj9999RpUoVnDp1CsuXL8c333yDDRs2ICoqCkOGDEFAQABu3rypsuCjatWqiIyMRHY23R2WyWSIiIiAs7OzSo7PmKq9fk1lItq0EQ4+jIzojtXjx7SUoKQfAmVVwosEbPDcgJiQGMF2GxcbjLs4Lv/g4+JFoHFjYPlyxeDDwICq5d66Rb9MxhjTcW3aAFevUkp3R4FcGzExtM6wRQvaryQMjAzgvcsbZnaKFRMlGRLsHboXGUkCCTx0ycyZ9EGcW2QkMHw4LbRhGqU0BYCFhQXGjx+PrVu3IiQkBImJicjIyEBUVBTOnz+PJUuWoGnTpirtjIODA5o2bYqt/xVI2LdvH1xcXPKdfsWYNmRnA3/8AdSpQyUhhPTtS3XqfvqJMl2x4ot7EoekiCTBNtuathh3YRxsq9sKPzk5mdLqduhAE6XzatKEoscffhCeXM0YYzpKJKIihY8eAfPmCb+F3bpFKX0nTADevCn+a1lXtcbAzQMF2+Ke6MF6EJGIFl62by+//fx5SjXGNKrAHGQxMTFYsGABunbtCjc3N3Tt2hULFizAW2WpGJT4+OOP4eTkhMjISHTt2hW1atXKaevduzcCAgIAAL6+vvD19UXt2rXx448/Yt26dUX8lhhTr8uXAXd34NNPacF5XnXqAMePU/pEV+E06qyIanSpgSF7h0BsKP+WZV/HHuMvjoe1s7XwE0+fBho2pA+dvIyNgSVLgH//pZL0jDGmpyws6O3swQOqtydkwwb6fFq1impTFUftPrXhMddDsC14VzACfQOLd2BNMTamxed5kyL98guwe7d2+lRG5ZuG98aNG+jZsyckEgk6d+4MBwcHvHnzBufOnYNIJMKpU6fQqlUrTfZXDqfhZZoUHU0ZSDZtEm63sqLlBTNmqD4fe1GV1nM4eE8w9g3fB5lUhgpuFTDmzBhYVLJQ3DEhAZg9m6o/CmndmtqU1Bhi2lVaz19Wdmj7HD5zhpY7BAcLtzdtSoFI69ZFP7YkS4JNHTch4qpiVXEDEwNMvDZRt9eDAMCNG4CnJ5CZ+WFbuXJ0Q4o/F7SThje3jz/+GG5uboiIiMDBgwfx999/4+DBg4iIiICbmxtmzJih1s4xpgskEmDlSrpzpCz4GDOG1nl8/rn2g4/SzG2IGwZuGojK7pUx7vw44eDjyBHKgSwUfJiZ0ULEy5f5Q4YxVmp17UpTr379FbC0VGx/v9xt0iRaK1IUBkYG8NrppXQ9yJ4he3R/PUirVjSPOrd374BBg4SnNjCVyzcACQ4OxldffQXrPPmTra2t8dVXX+H+/ftq7Rxj2hYYSO9Tn3wCJCYqtjdqBFy6RIEJJ9HQjEajG2HS9UkwL5+nbHxsLDB6NFXieiVQI6RjRyq+8tlnnA2AMVbqGRnR292jR8DIkcL7rFsH1K1L07OKsnwjv/Ug8U/j4TdZx9eDAMCUKcD48fLbHj8Gxo0r2g+DFUu+AUitWrWQkJAg2JaYmIgaNWqoo0+MaV1SEq3xaNmSgpC8rKyA33+ntnbtNN+/si7vWhDs3UsjGtu2Ke5sYQGsXg2cPQvUrKmZDjLGmI6oXJneGv39hQd+Y2NpgXrHjkUrYpjvepDdwXi4X4UVEdXh/aL0vFP4DxwAfv5ZO30qQ/INQP73v/9h4cKFuHDhgtz28+fP47vvvsPy5cvV2jnGNE0mo/zq9erR6KxQqQgfH7qjNHMmVahlqvHk5BM8939etCdFR1N+9yFDhNO79OhBk6CnTQPEBebcYIyxUqtjR+D2bVpvbSEwe/V9pvIFC4C0tMIds/Pizqjatqr8RhHQYWEH1B1Yt6RdVj8zM/rQz7veYd48umnF1CbfRegNGzZEVFQU4uPjYW1tjQoVKuDt27dITEyEra0tHHMlnhaJRLhz545GOv0eL0JnqhQWRgvIjx4Vbq9Xj26kd+ig0W4Vi76dww8PPMTeYXthYGwAn9M+qNqmav5PkMmA7dspChSqVG5jA6xYQYtz8hQ3ZbpP385fxvLS9XP45UuanrVnj3B7jRq0SL1Hj4KPlRiRCN+mvkiLTUO5iuXgtd0L1TtXV22H1e3UKaBnT/mpV/b2tFimagGfR6WQJs7ffO/furu7K1QmZ6y0eV/T45tvqFB2Xqam1DZ7Ni8wV4e72+7i4NiDkElkkGZJsa3XNoz1H6s8i8rLlzSiceSIcPuAARQpVtbxLCyMMaYlVapQ1tljx4CPP6YbcLk9e0bX4yNH0r2cChWUH8u6qjUGbR6E679dx6Atg4STg+i67t2pFtSCBR+2xcYCI0ZQnRCe7qBy+Y6A6DoeAWEldecOZQH5rwyNgu7d6S6Qvi0d0JdzOHBtII5MPQLkeRcyL2+OcRfGoUL9XJ96Mhmwfj3wxRfCGQHKl6d0ZUOH8qiHntOX85cxZfTpHE5NpWvv5cuFC4Lb2wO//UY5PvJ7a5XJZPp901oqpSxYhw/Lb//6a2DpUu30SUu0noaXsdIqLY2meLq7CwcflSoBO3cCJ07oX/ChL66vuI4jUxSDDwBIjUnF7U23P2wIC6NocNIk4eBj2DCqwDVsGAcfjDFWBObmwLJlHyqm5xUbS7NZe/YEnuezTE+vgw+A1glu2gRUzzN9bNky4ORJ7fSpFOMAhJU5Fy7QQrtly4SrwX70EWUC4WtZ9ZDJZLi45CJOfqb8Db3lzJbouqwr3ZH66y+gQQOqrJVXxYrA/v0ULeY3R4Axxli+GjSghej//EPL6PI6dYr2+e234ldS13k2NsCuXZTDODcfH+H07qzYOABhZUZiIqX97tgRCA1VbK9bl+rTrVol/ObLSk4mk+HMV2fgv8Bf6T7tvm6Hnit6QvTsKdCpE2UGePdOcUcfHxr1GDRIjT1mjLGyQywGJk6km3BDhii2p6ZSwd02baisUlFlpWXpfn2QFi2An36S3/b2LTBqVCmOvDSPAxBWJhw7RsWx165VbDMyAr79ltITCg0/M9WQSqQ4+tFRXP35qtJ9Oi/pjC4/dITot9+oyuPFi4o7OTlRqrLNmxVTJzLGGCuxSpVokfrBg7RgPa+bN2kK86JFQFZW4Y4ZfTcavk18Efi3QHEtXTNrFtC/v/y28+dpsQxTCQ5AWKkWHw+MHQv06UPJk/Jq3RoICgK+/x4wMdF8/8oKSZYEB3wOINBX+QdPj996oP1Ae4oCv/hCOBH9lCnA/ftA795q7C1jjDGAkgo+eABMn67YlpUFLFxIAwa3bik/hkwmQ+DaQPzT6h/EPo7FiU9P4PWd1+rrtCqIRFQePm8K3kWLgHPntNOnUoYDEFZqHTpEVV83b1ZsK1eOUu9evkxzWpn6ZKVlYffg3bi/477wDiKg7+peaP3uLNC0KXDjhuI+Li60BsTXF7C2Vmt/GWOMfWBlRUvxLl2iqcp53bkDtGxJ6eozMuTbMpIzcGD0ARyZcgTZ6ZRiS5Ihwd6he5GRnKF4MF1iZ0frCw0MPmyTyWgqVnS09vpVSnAAwkqdmBjKXT5wIPBa4CZLt25UHPuTT+TfV5jqZSRnYHvv7Xh85LFgu9hQDK+l7nD3nUr51zMzFXf65BOabNyli5p7yxhjTJl27Wiq8rx5ip+d2dnA4sWKmSUjr0Xi3nbFxSKxj2NxZOoR3V8P4uEBLFkiv+31a1qDKJVqp0+lBAcgrFQ5eJDWeuzYodhmZUXZPU6eBKpV03jXypzU2FRs7rIZYefDBNsNTQ0xbHAmGiwYSJ9qebm60hqQP/4ALPSwsBVjjJUyJiZ0PX7jBtCwoWJ7cDDQqhUFKRkZQM3uNdFmdhvBY93fcR9Ba4PU3GMVmDOHchDndvo0FU5hxcYBCCsVEhIoT/mgQcCbN4rtvXvTG+PEiZxaVxOSXyVjY4eNeHVTOG2hsbkBRjmcQu3dixWziojFwNy5NK7fvr0GessYY6wo3o90fPutYpFwqZTS3LdsSW/jXZZ2gVNrJ8HjHJ95HK9v6/h6ELGY5nI7OspvX7CAFpGyYuEAhOm9kydpHceWLYptNjZUV+jIEUqexNQv7kkc1rddj7fBbwXbzUylGJO6Bi7hAhmuGjQArl+nFIhmZmruKWOMseIyNqYELjdvAk2aKLbfvUsL1H/82QADt3nD1NZUYR9JhgR7hu5BRpKOrwepUAHYvl3+DmZWFq0HSU3VXr/0GAcgTG+lpADTptHIqFCGq379aNRjzBge9dCks/POIiEsQbDNwiAV49JXowry/MIMDSmdSmAgfWIxxhjTC02aAP/+Sxlq89bvy8qigYJew63RfMlAwefHhcbBb4qf7q8H6dAB+Oor+W0hITRFixUZByBML128SGUifH0V26ysaNTj0CHFEVOmfv3W9kOlppUUttsgHhMka+GAPCMj7u4UeHz3Hd1SY4wxpleMjCjQuHmTPpvzunkT6Pt5HRh3FF4PErwrWD/qg3z3HX1m5bZqFU2zYEXCAQjTKxkZdLOhY0fg+XPF9m7dqEwEj3poj6m1KUafGA071w9FAivgDcZjPWwR/2FHExOaanX9uvAnFmOMMb3SuDEFG/Pn09KJ3NLTgQXnuyDRSng+9IlPTyDqVpQGelkCxsbAtm2Aubn89gkTODVvEXEAwvTGvXu0qG35ckrFnZu5Od2EOHlSsW4Q07xy4jT41A+EJZJQBZEYjw2wQvKHHdq1ownCc+cqrmBkjDGmt4yNKSXv1atAnTrybVIYYH2SN9JEimv8cuqD6Pp6kDp1gF9/ld/29i0FIbo+jUyHcADCdJ5USn/rzZvTNWte769lP/qIRz20Tiajwk316sHm0CaMxUaMwWaY4b+q5uXKAX/+CVy4ANSurd2+MsYYU5tWrahC+mefyX82J8IaB2QDBZ8T9yQOhycd1v31IFOmAP37y287dgxYvVo7/dFDHIAwnRYRQdOqvvhCsUadsTHwv/8B588DNWtqpXsst8hIYMAAYMQIqgYJwB5xMMZ/v7j38+NmzFAcm2eMMVbqmJnRDUR/f/n6W49RG1fgIficB3se4OaqmxrqYTGJRFRYrGJF+e1ffAE8eKCdPukZvgpgOmvnTloacO6cYlvDhjTPdPZsrmauaZIsCf5d+S+k2f9VgZVKgb//pgqQfn6KT7CxAdavp/lxLi6a7CpjjDEd0KED1QQZM+bDtrPojHAIz5k++dlJvLwpkN5Sl1SoAGzcKL8tPZ1S82bo+DQyHcABCNM5SUn0JjViBBUYzOuLLyjlH69b1rzMd5nYNXAXjn9yHEenH4UsNBTo0gWYOpV+cXkNHkx3g8aP5/lxjDFWhllbU4bKPXsAW1taD7IXXkiF4noQaZYUe4fuRVp8mhZ6WgQ9ewKffCK/7fZtypbF8sUBCNMpN24ATZsKFxV0cgLOnqVF6KaK9YyYmqXGpGJz580IPRYKAAhaG4Tz9abTHLi8KlYE9u4F9u0DKlfWbEcZY4zpLG9vSirTrRuQBGvsxyDB/RLCEnBo3CHdXw/y0080AyC3n3+mCxqmFAcgTCdIJMCyZbSg/NkzxfYRI2iheefOmu8bow+C9W3X4+W/8kPiFyXtEIDm8juPG0ejHl5emusgY4wxvVGlCnDiBPD770CkqSsuop3gfgmv3iEjUcenM5mZUWre3FUYpVL6LEzT8REcLeIAhGldZCTQtSswbx6QnS3fZmVFf9fbt9OQLdO813deY12bdYh9HCvYfgZdaQi9WjVa57FhA2BnJ7gvY4wxBlAukpkzqQ5tXKNOCEM1ufaraIMfIsbh0k09mPLQuDHw7bfy20JCFLexHByAMK3av5/WcgjN4vHwoEVrI0dqvFvsP8/PPcdGz41IeZ0i2G6OdxiDzTD/dApluOreXcM9ZIwxps/q1weu3RDDdrIXUlAO6TDBTgzDKXTHq2gDdO9OBYjzZsLUOV99pVgl/ZdfgCtXtNMfHccBCNOKtDSq2+HlBcTHy7eJxcDChVQqgpMmac+dLXewtedWpUWhbBGHibUuwPHaPmDFCsDCQrMdZIwxViqYmgK//m2JFr8Mw177qQhBXbn25cvppuTTp1rqYGEYGtIqe2PjD9tkMpqKlZqqtW7pKg5AmMaFhACtWwNr1ii2OTtT4PHdd1wgW1tkMhkuLr6Ig2MOQpolFdynMqIwYY4d7IIv0S+TMcYYK6Ghn1fF5WBb9Oyp2BYYSElqdu7UfL8Kzc0N+OEH+W1PngBff62d/ugwDkCYRm3aRCOUQhXNhw6lKVfthNeiMQ2QZktxZNRO+H/jr3SfGtaxGPvvR7D4eaH8nR7GGGOshCpWBI4eBX77TfEjJjmZktJMmaLDgwpffKF4Y+6PP+juKsvBAQjTiORkqu0hNBJpbg6sW0d3NWxstNE7BgCZiWnY0fhHBO14rHSfBu7GGPn6F5i0aKzBnjHGGCtLxGJg1izKZFunjmL72rVAy5Y6WnTcwIAKFOatFzB+PJAivJ6yLOIAhKnd7dtA8+bCtT0aNAACAoAJE7hOnTalnA/Axirz8eRBltJ92k5vhMH/fgUDUyOl+zDGGGOq0qQJXSOMHfthmxEy0QEXEBKcjebNgfXraamFTqlTh2oL5Pb8OTB3rnb6o4M4AGFqI5MBq1fTSORjgZvqU6dSRfN69TTfN/aftDS8mTwf/3Tahqh31oK7iERAn1W90fWvQRCJOUpkjDGmORYWNKCweTPgZBaLSViHTjiPHjiFtDRg4kRg9GgdHFyYORNo315+2+rVwJkz2umPjuEAhKlFcjIwahQwfTqQkSeJkpUVsGsXLUI3M9NO/xiAM2fwtGZ3rP9HikTYCO5iZG6I4YdHoPlHLTTbN8YYYywXd/MHmCb+GxXxBgDQEjfREPcAUK2wFi0oG7zOEIupLpa5ufz2KVOAd++00ycdwgEIU7l79+iNYMcOxbbmzYFbt2jBOdOSt2+BMWNwq9tcbIvqjAwIF3kq51AOY8+PQ+2+tTXcQcYYY+yDq79cxR7vPch+J18MpB/8UOG/gCQkhNaFbN6sjR4qUbMm8PPP8tueP6daA2UcByBMpTZuBFq1Ah49Umz77DOqx1Ojhsa7xQCaE7dxI81527IF5aB8vNq+tj0mXpuIKi2qaK5/jDHGmICa3WvC0EwxN78xsjAMu2EMmmqRlkbrRSZNov/rhI8+UpyK9dtvwM2b2umPjuAAhKlEairNwxw/XvGP3toaOHAA+PVXztqqNY8eAV260C8oNhYAUBuh6IETCrtWbVsVE65OgG0NW033kjHGGFNQsWFF9Pu7n2BbecSiP/wAfFiJvm6d8vWnGicWU9ouE5MP26RSipKylCd+Ke04AGEl9vgx/aGvX6/Y5u4OBAUBAwdqvFsMANLTgW+/BRo1AvwVa3u0sn6EFh0/zE9tOKohxpwdA3N7c4V9GWOMMW1pNLoR3Ke5C7Y1QDBa44bctrt3adr3nj2a6F0B6tShz+Lc7t4F/vc/7fRHB3AAwkrkwAH6A793T7Ft+nTg8mWecqU1Z84ADRtSVdbMTMX2oUOBhw/R8/QXcO3jio7fd8SgLYNgaMIl6BljjOmenit6wrG5o3Cb+BTqmIbJbUtOpo+6zz7TgcGGOXPoZmBuixYJz1kvAzgAYcWSnQ18+SUweDD9gedmYUEL0P/6S7EOD9OA6GiUmzoV6NYNePJEsb1aNeDIEUpFVrkyxIZiDD80HB2+7QARF2NhjDGmowxNDDFk7xCY2Qmk0JTKMK7cXjSvk6TQtGIF0LkzEBWl/j4qZWREc8PEuS69MzJoKpZUqr1+aQkHIKzI3rwBundXTOwA0A33gABg+HDN96vMk0oBX1+gbl2Y7N0LGUSIQqUP7QYGVAQpOBjo00fuqWIDfitgjDGm+2yq2WDwtsGAwP2yjNh3mGy1G+N8shXaLl8GmjUDLl3SQCeVad6chmNyu3wZ+Ptv7fRHi/iqgxXJtWv0ByywnAA+PsD16zTVkWlYUBDQpg0wbRqQkIBMGGM3hmIdJiECVant1i3gp5+AcuW03VvGGGOs2Gr1rIWO33UUbIu6+RJe5icU1n0DwOvXQKdOlIRKa9XTv/8eqF5dftvcuUBkpHb6oyUcgLBCkcmAlSuBDh2Aly/l24yMgFWrgE2bFOvtMDVLTAQ++YQKr/z7LwAgAdZYjwkIQT1IYIhdVpORuOMoDU8xxhhjpYDnAk/U7idcpyrQNxDNREG4coVmHecmkQCff04zNfJOIdeIcuUURzySk2nhrNaiIs3jAIQVKDUVGDOGrnPzLuJycqLhzI8+Anj5gAbJZFT6tU4digz/mz8aDmesxRRE55p69S5Jip2DdiPzncBCdMYYY0wPicQiDNoyCHaudoLtx6YfQyXJSwQGAj16KLbv3q28bpnade0KjBsnv83PT0dSdmkGByAsXy9eAO3aAVu3KrZ16UIzf1q10ny/yrSQEHrzGjUKiI4GQNnPA9AcmzAWqVCcYvX61mscmXJEwx1ljDHG1MfU2hTDDgyDUTkjhTZJpgS7vXbDVPIOR48qZsEFgIcPqXr6EW18PP7yC+DgIL9t1iwgSXERfWnEAQhT6tw5quNx65Zi29dfAydPAhUqaL5fZVZKCvDVV5TG79y5nM3ZMMRh9MdR9IUUBoJPNS9vDvepwvnTGWOMMX3l4OaAARsGCLYlRSZh77C9EMmk+P57CjRsbPLskwT060cZcTWajMrODvjzT/ltUVHAN99osBPao9EAJDQ0FB4eHqhduzZatmyJBw8eCO7n4uKCunXrokmTJmjSpAl27dqlyW6WeTIZVS3v1i2naHYOS0uq/bF0KSVVYhogk9GwbL16tIg81zy4RFhjA8bjNpopfbpDQwdMvjkZ1TyrKd2HMcYY01duQ9zgMddDsC3sfBhOzz0NgBJABgYCjRsr7rdwIZUW0OgAxJAhQK9e8ttWrqTpJaWcRgOQqVOnYsqUKXj8+DHmzp2LiRMnKt137969uH37Nm7fvo1hw4ZpsJdlW2oqzez54gvFOwF169I6Z65qrkEhIZTzeOhQhQwZz+GCv8XT8ApVlD697sC6mHh1ImxcbNTcUcYYY0x7uizpgupdqgu23d95H6mxqQCoOPLVq8CIEYr7HTpEU7JCQtTZ01xEIgo4chdNk0opo6VEoqFOaIfGApA3b94gKCgIo0ePBgB4eXnh+fPnCAsL01QXWAGePwc8PKiIYF79+wM3blAQwjQg93SrM2fkmmQAronbYotoLFKlAsWY/uP5jSeG7hsKYwtjNXeWMcYY0y6xoRjeO71h7Wwtt92xhSMm35wMc/sPaTrNzYFt22gZhjjPlfCjRxSEHDqkiV6DIqL58+W33bxZ6muDiGQyzeT8CgwMhI+Pj9y0q5YtW2L58uXw9PSU29fFxQXW1taQSqVo1aoVli1bhgoCiw2CgoLg7u6ONm3awNraGoMHD4aXl1eJ+xofHw9bW9sSH0efXLpkiAkTLBAXpxiTfvVVKr74Il3hj5SpgUwG4wMHYP7ttxALlGzNhBEOOUzCgzcVlR7CyMIIHv/zQKOhjdTZU8bUpiy+B7PShc9h7Xlz+w329t4LSYYEdYbUQeffOsPQzFDp/hcuGGLSJOHrn6+/pusftWf5zMiAtacnDJ48ydkktbJC4o0bkOVdqK4B6jh/7ezks5Up/42ogSjPb1BZ7HPx4kU4OzsjKysLCxYswNixY3Hs2DGlx125ciWaNVM+B7448v6gSrNVq4CZMxVH+6ys6A5B377mALjAh9rduUO5jpWUaX1bsQF2G45EzEvl6XTL1y2PYQeGQewgLlPnMCt9+Pxl+o7PYe2w62yH/v/0R3JUMjxmeyhce+Y1aBDQtCn9e/u2fNuyZeZ48sQcGzZooIavry+lF/2POCkJtkuWAFu2qPmFhan7/NXYPe2qVasiMjIS2dnZACj4iIiIgLOzs8K+77cZGRlh1qxZuKTkgoyVTGYmTTP8+GPF4KNePRoB7NtXO30rU2Jj6ZfQrJlw8GFkhLt952Ft8vB8g496g+th0r+TUL5ueTV2ljHGGNNtjUY3Qts5bQsMPt5zcQGuXKE1sHnt2UPlCF68UG0fFXTurNiBrVvlsl6WJhoLQBwcHNC0aVNs/a+gxL59++Di4gIXFxe5/d69e4eEhIScr3fs2IGmTZtqqptlxtu3VErC11exrV8/4Pp1oLZwgVGmKhIJsGYN/aBXrRLM/5fdqRv8Bq3DgSPGyErNFj6OCOi8tDOG7B0CE0sTNXeaMcYYK33MzWmwYflyxXUht28DLVoonaCgOr/8AljLr2HB9OlARoaaX1jzNDqr39fXF76+vqhduzZ+/PFHrFu3Lqetd+/eCAgIQHR0NDp16oRGjRqhYcOGuHDhAjZv3qzJbpZ6d+4o/0OaPx84eJCmXzE1unABaN6cSsjHxSm2u7gABw7gwfj/IWj3M6WHMbU1xajjo9D+6/aFvtPDGGOMMUUiEWUBPXZMMQ54+5ZmSK1dq8YOVKxIdQ5ye/SIoqJSRmOL0NXh/SL0wMBAla4BiYuLK7VzN/ftA8aMoXS7uZmZARs2AJzxWM2ePQPmzAH27xduNzOjKo+zZwNmZpDJZNg7bC8e7FGsmVPZvTKG7BkC2+qKC8VK8znMSj8+f5m+43NY98lkMgSsCYBLRxdUqKeY6OjxY8oA+uiR4nM//hj47TfASLEAe8lJJECbNjQP/j1TUyA4mDJmaYAmzl/Oa1RGyGTA4sWAt7di8OHkBFy+zMGHWiUnA/Pm0eIaZcHHkCHAw4dUBdWM0uuKRCL0/6c/7Fzl3wiaT2+OCVcmCAYfjDHGGFNOkimB3xQ/HJt+DDv67UBqTKrCPrVrU/mBvHUCAeCvv4DevYH4eDV0zsCApmfnngeWng58+qkaXkx7OAApA9LTgdGj6bo2Lw8PICCA1j8zNZBKgY0b6Z1s2TJa+Z9XgwbA2bPA7t1ANcVq5SZWJhi6dygMTQ1hbGEMrx1e6PNXHxiaaDSJHWOMMab33r15h81dNuPWP7cAAPFP47Fz4E5kpyuus7S2Bvz8gLlzFY9z5gwNVISGqqGTzZrRMEtuR47Q3LBSggOQUu71a6BjR2D7dsW2CRMouUJF5SUlWElcvEjVjMaPp19EXvb2dBvl1i3KfpGPio0qYvD2wZgcMBkNhjdQU4cZY4yx0ivuSRz+bv43wi+Hy22PuBKBwxMPC5aHMDAAfvqJFqib5Mnz8ugR0KoV4O+vhs7+8IPiBdqsWcI3MvUQByCl2J07dP1744b8drEY+PVX4J9/FP+YmAqEhlJC8Q4dgMBAxXZDQ3oTCQ1F2vDxiAwUCE4E1BtUD+XrcIpdxhhjrDisnKxgVUU4y8697fdw/rvzSp87ejTlj8kbE8THA927q2FxurU18OOP8ttCQ4EVK1T8QtrBAUgpdfgw0LYtEBEhv93Skto++wzqr+xZ1sTG0hzN+vUplZiQ3r2Be/eA337Di3tJWNN4Dbb32Y7kV8ka7SpjjDFW1hiaGmLYwWGwcbERbL+46CLubLmj9PmtWtHa8MaN5bdnZwNTptC1Vd66aiUyZgy9aG4//AC8eqXCF9EODkBKGZmMsrUNHAi8eyff5uICXL0K9OmjjZ6VYhkZNKRUqxbwxx/0TpRX3bo0d/PoUUhquOLs/LPY1GkTkiKTkBabhv2j90MqUawDwhhjjDHVsahogZFHR8LEWngKyOGJh/HiovKqg1WrUuKeAQMU21asoMxZSUkq6qxYDPz5p/wd45QU4KuvVPQC2sMBSCmSlQVMnUpZXvNOY2zblqZiNeDlA6ojlQI7d9KIxxdfALkKaOYoX57Wedy9C/Tqheh70Vjbci0uL70MmfTDLynMPwxXfr6iub4zxhhjZVSF+hUwdO9QiA0VL4OlWVLsGrQLsaGxSp9vYUEJLYXigGPHqHJ63hkoxdaiBS3azW3LFrqjrMc4ACklEhNpZENoDuKYMZRkycFB8/0qtc6dowU2I0ZQbY+8jI2BL78EnjwBpk+HVGyAK/+7grXN1yL6TrTgIf2/8Ufk9Ug1d5wxxhhjNbrWQJ/VwlNC0uLSsL33dqTGKqbnfU8spuSWmzbRR35u9+7RzCmhZaDFsnSpYoXoTz5R8XwvzeIApBQIC6N0uqdPK7YtW0ZZYHmxuYrcu0frOLp0Uf7OMnw4pcb48UfA2hrxz+OxqdMmnJl7BpJM5W8WLh1dYF3NWmk7Y4wxxlSn2aRm8JjrIdgW9yQOOwfsRFZaVr7HeH+Tt3yeHDFRUYCnJ3DokAo66uAAfP+9/LagIGD9ehUcXDs4ANFz//5LUfaDPIWyTU2BvXtpeJAXm6tARASl023cGDh+XHgfDw/g2jVgxw7AxQUymQxB/wRhTaM1CL8ULvwcAGIjMbr82AU+p3xgWdlSTd8AY4wxxvLquqwr6nnVE2yLuBKBfcP3QZqd/xrNdu1omnvduvLbU1MpKeaKFYpT44vs449pyndu8+apqRqi+nEAosf27aNMr2/eyG93cADOnwe8vLTSrdIlJobWd7i60lCS0DtInTrAgQO0Kq11awBAwosEbOu1DX6T/ZCZojxnt0MDB0z+dzLafdkOIjFHiowxxpgmicQiDNo8CFVaVhFsf3T4EY5MOyJYIyS3GjVoWUanTvLbZTLKjjVjhnCOmkIzMqJEN7nFxAALF5bgoNrDAYgeksmA//0P8PamKue51a9PUXjerG2siJKTabizRg3KcJWRobhPpUrAmjXA/fuUdkwkgkwqw78r/8Uqt1V4evKp8uOLAI+5HpgcMBmVmlRS27fBGGOMsfwZmRth+KHhSqdB31p3C/7fFlxt0NYWOHECGDdOsW3VKsqQlVySrPtduijeXV61iqaH6xkOQPRMdjaNws2dq9jWtStw5Qql22XFlJ5OAUeNGsB33wm/U1hYUHASGkppxwwNAQAxj2KwwXMDjn9yHFnvlM8Ztalug3EXxqHbT91gaGKopm+EMcYYY4VlUckCo0+MhpmdmWD7pcWX8O/Kfws8jrExLc1YskSx7fhxWhdSojIey5fTPPv3JBIqblziOV6axQGIHnn3Dhg8GFi9WrFt8mRK/WZjo/FulQ5ZWVQa3tWVplzFxCjuY2gITJ9Oma2+/ZYCEQCSLAkuLbuENY3XIOJK/nn3mk1uhml3pqFa+2rq+C4YY4wxVkzl65bHyGMjYWRuJNh+fOZxBO8OLvA4IhEtz9ixQzEJ0O3bQJs2QHDBhxHm4qKY//fcOeDo0WIeUDs4ANET0dE0r9DPT7Htp58AX1+aHsiKKDsb2LwZqFePorhIgTS4IhEwejRltvrrL6BixZym6LvR+KfVPzg37xwkGcozXFlUtsAIvxHo93c/mFhySjLGGGNMFzm1csKQvUMgMhBYlykDDvgcQGJ4YqGONXw4xQZ5M2SFh1N9Nv+CZ3UJmzuXKiLmNns23UzVExyA6IFHjyhavnlTfruxMbBrF52HnOmqiCQSYPt2wM0NGDsWeKpkvcaAAcCdO1T0p0YNhWZptlRpXY/3mk5qio8ffIzafWuroueMMcYYUyPXXq4YsF6x1LlILEKf1X1g7Vz4lPnvE2TWqiW/PTER6NGDLkWKzMyM6izk9ugR3Y3WExyA6LgrV+jkff5cfrutLXDmDDB0qHb6pbekUmD3bqBhQ2DUKODxY+H9OnWid4yDB2lfJSo3q4wWH7cQbLOpbgOfMz7ov7Y/TG1MBfdhjDHGmO5pPKYxuv7cNedrQ1NDDDswDE0nNC3ysWrVogxZ/yXKzJGVRZciy5YVYwnHiBFUJT23777Tm7S8HIDosL17KeFBXJz8dhcXCkzat9dKt/STREKBR5MmwLBhwMOHwvu1agWcOkVVhfK+UyjR6YdOsKhk8WGDCGg1qxU+uvcRanRRHDVhjDHGmO7zmO2B1p+3hqmNKXzO+KBO/zrFPlaFCnRpMWiQYtu8ecBHHxUxTa9YTElzcouNFV79roM4ANFRf/5Joxt5s7+6u9ON+XrCNXNYXtnZwLZtQIMGFHgoS1XXvDmt4r92DejWrUhz2kytTdH91+4AgAr1K2Di1Yno+VtPGJczVsV3wBhjjDEtEIlE6P6/7ph6eyqc2zqX+Hjm5sCePcDMmYptvr6UaCg1tQgHbNeOajLk9scfyqeV6xAOQHSMTEbJDWbOVByO69OHCgxW4rIRBcvKAjZsoEht9GggJER4v8aNgUOHqKR8r15ygYdMKsO97ffyLST4XoPhDTBgwwBMCZoCp9ZOqvouGGOMMaZFIrEINtVsVHY8AwPg999p8CLvvU4/PyqpEBtbhAP++CMtCn4vKwv48kuV9FWdOADRIVlZVLzmp58U26ZOpeUIFhaKbSyXjAzg77+B2rWBCRMoZa6QBg2olHxQEFUGyvMuEHE1Av+0/gf7R+3H5Z8uF/iyIpEITcY14boejDHGWBlVULX03D77jGaG503Te+0aDWy8eFHIA9WsqTiksm8fcOlSofuiDRyA6IiUFKBfP8oIm9fixVT7w5CvbZVLSqLy8NWrU7QWFia8X+PGtLjmzh0a6xTL/wkkvEjAvhH7sL7tery6SZWCri2/hoQXCertP2OMMcb01quAV1jXZh2SXxW+1Lm3N3D6tGINt5AQyn56924hDzR/PmBvL7/t888p8Y6O4gBEB7x5Q0mXTp6U325gAKxbR+cVp9lVIjqafkDOzpSPOCpKeL/mzWmq1a1bgJeXQuCRkZyBc9+cw191/8L9nffl2rLTs3HmyzPq+g4YY4wxpscirkVgc5fNeHnjJTZ32YyU6JRCP7d9e+DyZcApz+ztqChqO3++EAexsQG+/15+W0BAMXP8agYHIFr29Cml2Q0IkN9uZkbXyxMmaKdfOu/5c+Djjykl2NKllFBbSJs2tLj8338Fp1plp2fj+orr+KPGH7i0+BKy04VTUATvCkb4lXAVfxOMMcYY02cvLr7A1u5bkZFEWYNiQmKwqdMmJL1MKvQx3NwoTa+bm/z2pCSqFbJnTyEOMmUKULeu/Lavvy7iqnbN4QBEi27douAjb7ICe3uqjtmnj3b6pdOuX6f0YLVqAatWAenpwvt17kzjmleuKCwuB6iA4K0Nt7Cyzkqc/OwkUmPy/wO1qW6Tb6VzxhhjjJUt4VfCsa3XNoVkNTEPY7Ch3QbEPYlT8kxFVavSso28JRYyMymJ519/FXAAIyNg+XL5bZGRwC+/FLoPmsQBiJacPw906EDTr3J7X+OjVStt9EpHSSS0oKptWxrR2LNHeF6jSETrOm7coGTbXbsqBB4ymQwP9z/E6oarcXjCYSSGKxk5+Y+xpTG6/tQVHz/8GNU7V1fld8UYY4wxPWZf2x42LjaCbQlhCdjQfgOi70UX+ni2tlSKbPBg+e0yGTBjBrBwYQEFC3v3pmuf3H7+WfFiUwdwAKIFBw7QkFpynnVKTZrQEFyd4te5KV1SUiiftasrrdS6elV4PyMjmqv24AEFKi1bKuwik8kQejwU/7T6B7u9diMmJCb/1xYBzaY0wyehn6Dt3Lac3YoxxhhjcspVKIcxZ8fAvo69YHvK6xRs7LARkTciC31MU1PKjjV9umLbokU0+1yibEKGSEQjHrlvvqakUDYjHcMBiIb98w9dS2fmKS3RqRNw4QJQubJ2+qVTnj4FvviCxiM//ZTWewixsKA8ds+e0Wr9vHMfQbU8Qg6GYG2Ltdjee3tOZqv8VO9SHVNvTUU/336wqMh5jxljjDEmzKKSBcadHweHBg6C7enx6djcZTOen1NyLSPAwABYuRL44QfFttWrgZEjFQtV52jUCBgzRn7bmjU6V5yQAxANkcmoVszkyYqzhwYPpnXSVlba6ZtOkEqBEyeAvn1pxOPXX4GEBOF9nZwo5W5EBO2XN3UEKPC4v+s+1jRZg12DdiEqUEl2rFwcWzjC54wPxpwZg0qNudojY4wxxgpmUckC4y6MQ5VWVQTbs95lYVvvbQg5pKQosgCRCFiwgAKOvJlQd++my6UUZcm2Fi2SLzCSlQV8802hX1sTOADRAKkUmD2bkhHkNXkynUimpprvl05ITKRpVnXr0mLxo0eVT3B0d6eUcs+e0Q80b+LsPC7+cBFv7hU877F8vfIYum8oJt2YhBpdahTjm2CMMcZYWWZmZ4YxZ8YoXS8qyZBgt9du3N50u0jHnTYN2LWLZpvnduYM5duJEZpR7uxMi0Zy27GDii/rCA5A1CwrCxg/nm7U5zVvHuDrS0NtZU5AAKWMq1KFplmFhgrvJxJR+twLF4CbN4ERIxT/CoWeJhah/fz2+e5jVdUK/df3x0d3P0K9wfUg4mIrjDHGGCsmYwtjjDw6EnUGCC/mlUlkODTuEM7OOwuZtPBV04cMoZky5crJb795k6qmhwtVCfj6a8DaWn7bV18V+jXVjQMQNUpPp/UeQtXNf/sNWLKkjBUYTE6miMvdHWjRAli7Fnj3TnhfGxtaBxIaSgVRPD2L/MNyG+oGO1c7he2WjpbosaIHPnn8CZqObwqxIf8ZMMYYY6zkDE0NMWTPEDQa3UjpPpeXXcZur90K6Xvz07UrlWgoX15++6NHFIQ8fpznCfb2igHH6dP00AF85aUmyclUx+PwYfntBgYUkMyapZVuaZ5MBgQG0mhH5co0lpjfEGCDBhSkREZSPuuaNQUOKUPk9cgC7x6IDcRoP+/DKIh1NWv0Wd0HM5/NROtPW8PQlDNbMcYYY0y1DIwMMHDTQDSf3lzpPiEHQ7C+3foCywHk1qIF1QpxdpbfHhFBQcjt23meMHMm4Ogov+3LL4VLGWgYByBqEBdHkeq5c/LbTU3pZr6Pj3b6pVHR0TTvrHFjoHnz/Ec7DAwALy8qjnL3LgUreccZAWQkZeDmqpvwbeKLdW3W4fHRvOG+ooajGqJGtxrov64/Pgn9BM2nNeeUuowxxhhTK5FYhN4re+c7HTz6TjTWtlyLiGsRhT5u3bpUL65ePfntb98CHTtSWw5zc+D77+V3vHWLFpVomUgmy7ekiU4LCgqCu7s7AgMD0axZM5UdNy4uDnZ2ilN3CuPVK6B7dyA4WH67lRVw5IhihctSJTOTvsmNG2myotJE1f9xdqZV+OPH01oQJV4FvEKAbwDub7+PrNSsnO0uHV0w1n+sijpfupTkHGZM2/j8ZfqOz2GW260Nt3Bk6hFIs4RHHgxMDDD55mRUbFix0MeMiaHcPQEB8tvNzD7UmwMAZGcDDRsCIbkycFWvTl8bGwseWxPnL4+AqNDz5xRg5A0+ypeneXulMviQyYDr1z8M83l5AX5+yoMPAwNgwAAKUJ49oxxzAsFHemI6Av8OxN/uf2Nti7W49c8tueADAMLOhyHqVsHpdRljjDHGtKXp+KYYc3YMzMubC7bX96qvtI6IMuXLA2fPAh06yG9PSwP69QP27v1vg6EhsGyZ/E7Pn9N0dy3iAERFHjyg+XfPnslvd3Ki+XoqHKDRDffvA/Pn0xqNNm2AP/8EYmOV71+tGuWlfvECOHiQwvY86b8kWRI88nuEvcP24pdKv+DI1COICso/wLj+23UVfDOMMcYYY+pTrX01TPp3Eiq4VZDbXqVVFfT7p1+xMnFaWQHHj1NNkNyysoBhw4D16//bMGAA4OEhv9OiRUBSUpFfU1V4MrwKBAbSUFfe6+9atShPc7Vq2umXyj1/Tnmkd+ygAKQg5uaUBmzcOArRxYrxrkwmw8t/X+LulrsI3hWM1JjUInXp2elnyErLgpFZwal5GWOMMca0xba6LSZenYh9I/ch9GgorJysMPzg8BJdw5iZAfv306XW9u0ftkulwMSJFGPMmiUCfvpJfipOTAwl+1m0qPjfUAlwAFJCV64AvXsrBpGNGgGnTgEVCz+dTzeFhNCZvW9f4QvYeHrSX4K3N2BpqdAsk8kQFRSFh/sf4sGeB4gLjStyt5xaO8F9qjvchrpx8MEYY4wxvWBiZYLhh4bj3IJzcBvqBotKFiU+ppERsGULjYisWSPf9tlnlANo/vx2VFctd3rW334DPvkEqCA/KqMJHICUwNmz9LtMzXPTvk0bKuhta6udfpWITEZ53Pbto8Dj4cPCPa92bSoS6OMjmDoXAKTZUpyafQohB0KKlHbuPRMrEzQc3RDNpzZHxUb6HtkxxhhjrCwSG4jRdVnXQu+fEp0Ci4r5BypiMbBqFV175l3ysWABBSFLliyF6MiRD2l4U1JoZGT58qJ+CyXGAUgxHT1K660zMuS3d+lCqXYFssjqrvR0SoF79ChlsQoLK9zzqlQBhg8HRo4EmjYtsFCg2FCMFxdeFDn4cGzhCPep7mgwvAGMywlnbGCMMcYYK22i70bjn9b/oNnkZuj0fSeY2pgq3VckApYupQLoeWsQLlsGvHvnht9GjoZ4a64K2X/9BXz+uWK9EDXjAKQY9uyha+7sbPntfftSm6nyc0N3RERQwHH0KA3lpKUV7nn29jS1auRIWnUvsK4jP3UH18Xr268L3M+qqhUajW6EhqMawsGtaJkhGGOMMcb0XVZaFvaN2IfstGz8+8e/uL/jPros7YIm45tAbKD8+uvLL2kZ7syZ8tv/+ANIHfon1hjshIHkvyrs6enAkiUUiGgQByBFtHkzla3IW0Ry6FBg61aah6eTUlKAixcp2Dh9Grh3r/DPdXQEBg0CBg+m9R2GdNrIZDLEPY7Fi0sv8OL8C1hVtUKXpV3yPVS9wfVw/tvzgm0mViaoP6Q+Gvk0QrX21SASFz0jBGOMMcZYaXBq9im8ffA25+vUt6nwm+yHgDUB6PVnL1RtU1Xpcz/5hGbjTJpEs+vf+2e3FVJrXcLGJ21hhP/upK9dC8yZA7i4qOk7UcQBSBGsXg1Mn664fdw44J9/FLLKaldmJtXnOHuWHjduKA7Z5KdGDQo4vLyAli0BsRgyqQzR96Lx4uILhF8Kx4uLL/Au+kN1c+tq1ui8pHO+qeQq1K8A+9r2iH1MKcOMzI3g2tsV9YfWR51+dWBoyqckY4wxxsq2R4cfIWBVgGBbVGAU1nusRyOfRuj6U1dYVlZM+AMAEybQSMjo0fLl2bY/aYlU8V7slA6FCTIpb++iRbny9qofX+0V0m+/0RS5vKZPpxIYRZyJpHqJiRRwXLkCXL5MAUfe1fH5EYuB1q2BPn2APn0ga9gQieFJeBXwCq8OnqN/A14hIzFD6SESXyQi9lEsytctr3QfkUiExuMaIzYkFnUH10XN7jU5ixVjjDHGWC7Jr5IhNhIrrZ4OAHe33EXIgRA0n94cLWe0hHVVa4V9hg+nVL1Dh9K96fcOSgdgIA5iPwbDDOnApk00d6tOHXV8OwpEMlnugRn9EhQUBHd3dwQGBqKZCiv95S1B/9NPiot5AGD2bODnnwtce616Uinw5AkQEPAh4Lh3T36MrTDs7ICePZHdrRdia7bA25dZiL4XjajAKLwKeIW02EKuC8mlx2890HpW6yI/j6lW3nOYMX3C5y/Td3wOM1WIfRyLE7NO4MnxJwXuKzIQob53fbSe1RpOrZ0U2k+epNn0eZf8dsEZHEZ/mCONopUdOzRy/nIAIiD3D/6HH4Bvv1Xc57vvaLvagw+pFAgNpWqH7x+3bhWveqWREY1ydOkCdO2KV4bOODDuMGJDYyGTqOY0qNWzFkYdH6WSY7Hi4w8/ps/4/GX6js9hpkqPjz7GyVknEfekcHXTqrSqgtaftUa9wfVgYPRhfcDFizTRJSVFfv8OOI8j6AsLvAPu3EGck5Paz1+egqWETEYBxuLFim0//QTMnauGFwwPBx48oEdw8Id/854pQk8HkAZzJMMSSbBEMizRFLcgatKEAo4uXagCpsWHPNJmz+MRExKjsm/BvrY9KjTQfDEbxhhjjLHSqnaf2qjRtQaur7iOiz9cRNa7rHz3f3njJfYN3wdLR0vU7lcbNXvURPXO1eHpaYozZ4AePWjm/nsX0BE9cQLH0BtW336rkbUgHIAIkMloytXPPyu2/fYbMGtWMQ+clUXpb58/p8ezZ/Tv06dU8C9XoCGFGBkwRgZMkIbKSIX5fw+zXP8vh+T/go1kWEKS59dZ+/4BWLhVU9odm2o2MDI3QlZq/ieyIBFQsVFFVPOshmqe1eDczlkl1TwZY4wxxpg8QxNDtPuyHRr7NMaZL8/g7ta7BT4n+VUyAn0DEegbCJvqNvj02ado1YpyE3XrBsTHf9j3CtqhG07j5KEeMAgMpB3USGMBSGhoKMaOHYuYmBjY2Nhg48aNqF+/frH3UxeZDPhuSiLO73+FBrQlp238OKCLA3B3mwwy6X+PzGwgNRWyd6mQpaRCmpAIaXwiJAlJkCYmQ5qYAoN3SWgrukrBR+40BLlEoCoOYjwyYIIMmCAbJV+YHZ8oRn4hgUgsQoX6FfAq4FWBxzKxNoFjc0c4NneEc3tnOLd1zrcYDmOMMcYYUy1LR0sM2jIILWe2xLVfruHB3geFmkZfvXP1nP+7uwP+/kDXrkBMrokwGTDBeKzHH9+ugnVpCUCmTp2KKVOmYNy4cdi7dy8mTpyIa9euFXs/dZDJgBkzgBf7H8AbiqnPkjcC+zcW5YgWACxgAhu0xfYC946DfVEOXvDxnsahqofyHNEAUMFNMQAxtjBGZffKOQGHY3NH2Na0zTe9LmOMMcYY04wqLarAe6c3EiMScfOvmwj8OxDp8elK96/Zo6bc140bA+fP0wz96Gja1h6XUR6xGHz9axw7fA0V+rdRW/81EoC8efMGQUFBOHXqFADAy8sLM2bMQFhYGFxyFT0p7H7qIhIBFSoAL1R8XCkKztFrAuXpbYsr/ll8gfvU6FYDkFEgUsGtAhzcHGDtbM1FABljjDHGdJx1VWt0/bErPL/xxJ3Nd3BjxY2cWmvvicQi1OhSQ+G5bm4UhHTuJEXUazEskAIJxDBBJsyCbwH6HoBERETA0dERhv9V0BaJRHB2dkZ4eLhcYFHY/fKaMWMGrK2tMXjwYHh5eZWor598AvzyRxhQ8LV7oeUNQKSWlpBWqwZptWqQVKsGqbMzMq2dgY8eq+5FAbx+8BpxcflnTHDq5QSnXh/StUkhRXyCCr95phXx8fw7ZPqLz1+m7/gcZtpQc1hN1BhSAy/OvcCTg08Q7h+Od6/fwaGpA9KQhrQ4xfIKDg7AYT8xvLtIYJqUgTSRGXwPZiOz3agCryGLIm9WLY1Nwco7fUdZ9t/C7pfbypUrVZqGt1WlF7gdX05lx5OIDIE9e4Fq1YAaNSC2tYU4z/cpjk8DPhJY9a6ESCyCmZ0ZLCpZwNLREpZV6GFVxSrnaxsXG5jbmavs+2D6hVNAMn3G5y/Td3wOM22xH2qPZkObQSaT4W3wW2QkZeR7PtrZAYf3RuNAd6BaYxtUbteodKThrVq1KiIjI5GdnQ1DQ0PIZDJERETA2dm5WPupm8ypCvAwQYUHBGSDBuc7rcnE0gS1etWCiZUJjC2NYWJlQg9LE5jZmcHM3gzm5c3pYW8OUxtTnibFGGOMMcYEiUQiODRwKNS+tuWoTLqNk6U6u5RDIwGIg4MDmjZtiq1bt2LcuHHYt28fXFxcFKZVFXY/dWvy8wC0yMyVhSrPdb5ILKKHSPTh/2IRIALEhmIYGBlAbCimhxH9m/cYeYkNxRh1jAv4McYYY4wxzarSqgq+iPoCkiwJJBDO2KpKGpuC5evri3HjxmHp0qWwsrLCpk2bctp69+6NRYsWoXnz5vnupylWzlY8dMoYY4wxxsoEsYE4p56bKtd+KH09tb/Cf+rUqYNr167h8ePHCAgIgJubW07bsWPH0Lx58wL305R9+/Zp/DUZUyU+h5k+4/OX6Ts+h5k+08T5q7EARJ/s379f211grET4HGb6jM/f/7d3ByFNv3Ecxz/DDWuXIkHDyIbWWNF0UgzJIKSCAgsP3gqF6FJIeCnoHNWh6FAHD4FdKhHJCuoQdakOkZIhGxmZFC0oKcsOYrTh8z9Eo/3/uf0W2+9x/71fsMOePT58lQ+Pz5f9fhtKHRlGKXMjv65dglUM8/M/P05sYmKioOt++/ZNY2NjBV0TcBMZRikjvyh1ZBilrFj5DYVC8vt/fjqrxzj5nNsl6tq1azp48KDtMgAAAABk8ezZs/TXZpR0A/L582fdu3dPgUBAy5cvt10OAAAAgD/437wDAgAAAKC0cBM6AAAAANfQgAAAAABwDQ0IAAAAANfQgAAAAABwTdk0IJOTk9q2bZuCwaCi0ahevHiR9zynawDFkCt/379/V0dHh4LBoCKRiPbs2aO3b99mzAkEAgqFQopEIopEIhocHHTxN0A5c7p/ZssoezBsypW/2dnZdG4jkYiCwaC8Xq++fPkiif0Xdh07dkyBQEAej0fxeHzRea6dg02ZaGtrM1euXDHGGDM0NGRaWlrynud0DaAYcuVvfn7e3L171ywsLBhjjLl06ZLZvXt3xpx169aZWCzmSr3A75zun9kyyh4Mm/LN37lz50x7e3v6OfsvbHr48KFJJBI5c+jWObgsGpDp6WmzYsUKk0wmjTHGLCwsmJqaGvPmzRvH85yuARTD3+RvdHTUNDQ0ZIzxDxA25JPfxTLKHgyb/iZ/mzZtMjdv3kw/Z//FUpAth26eg8viEqxEIqHa2lp5vV5JksfjUV1dnd69e+d4ntM1gGL4m/xdvHhR+/bt+8/4gQMHFA6HdfjwYX369KloNQO/5JvfP2WUPRg25Zu/J0+eaGZmRu3t7Rnj7L9Yytw8B5dFAyL9/EP9zizy/YvZ5jldAyiGfPJ35swZTU5O6vTp0xnjjx490vj4uMbGxlRVVaXu7u6i1Ar8m9P8ZssoezBsyid//f396urqSh/WJPZflAa3zsHe3FNK39q1a/X+/XulUil5vV4ZY5RIJFRXV+d4nt/vd7QGUAxOMyxJ58+f1/DwsB48eCC/35/x2q/5Pp9Pvb29CgaDrtSP8pZPfhfLaD5rAIWWT/7m5uY0ODiokZGRjHH2Xyx1bp6Dy+IdkOrqajU3N+vq1auSpBs3bigQCCgQCDie53QNoBic5u/ChQsaGBjQ/fv3tXLlyozX5ubmNDs7m34+MDCg5ubmIlcOOM9vtoyyB8OmfPI3NDSkxsZGhUKh9Bj7L0qBq+fgv7pzpAS9fPnStLS0mA0bNpgtW7aYeDyefm3v3r1mdHQ057xsrwHFlivDjx8/NpJMfX29aWpqMk1NTSYajabnTE1NmUgkYsLhsNm8ebPZv38/N/DCNU724FwZZQ+GTU7PEdu3bzf9/f0ZP8v+C9uOHj1q1qxZYyoqKkxNTU3Gh9TYOAd7jOEiWgAAAADuKItLsAAAAAAsDTQgAAAAAFxDAwIAAADANTQgAAAAAFxDAwIAAADANTQgAAAAAFxDAwIAWBJisZh27Nghv9+v+vp69fX12S4JAFAEXtsFAADw8eNH7dy5U21tbbpz547Gx8fV29uryspKHTp0yHZ5AIAC4osIAQDWHT9+XLdv39bExIQqKiokSadOnVJfX58SiUR6DABQ+rgECwBg3a1bt9TZ2ZnRaHR2durDhw96+vSpxcoAAIVGAwIAsGp+fl5TU1PauHGjUqlU+tHQ0CCfz6d4PG67RABAAdGAAACs+vr1q4wx6urqks/nSz8qKyuVTCY1MzNju0QAQAFxEzoAYEk4e/asdu3alTHW2tpqqRoAQLHQgAAArFq1apU8Ho+qq6u1devW9PiPHz+UTCZVVVVlsToAQKFxCRYAwKply5Zp/fr1ev36dcb4q1evZIxROBy2VBkAoBhoQAAA1nV0dGh4eFipVCo9dv36ddXW1ioajVqsDABQaHwPCADAuunpaTU2Nqq1tVU9PT16/vy5Tp48qcuXL6u7u9t2eQCAAqIBAQAsCbFYTD09PRoZGdHq1at14sQJHTlyxHZZAIACowEBAAAA4BruAQEAAADgGhoQAAAAAK6hAQEAAADgGhoQAAAAAK6hAQEAAADgGhoQAAAAAK75B/r+tPZioeqZAAAAAElFTkSuQmCC" }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract parameters from message ((1))\n", "α1 = messages[1].dist.params[:a]\n", "β1 = messages[1].dist.params[:b]\n", "\n", "# Extract parameters from message ((4))\n", "α4 = messages[4].dist.params[:a]\n", "β4 = messages[4].dist.params[:b]\n", "\n", "# Extract parameters\n", "α_marg = marginals[:θ].params[:a]\n", "β_marg = marginals[:θ].params[:b]\n", "\n", "plot(θ_range, Beta.(θ_range, α1, β1), color=\"red\", linewidth=3, label=\"Message ((1))\", xlabel=\"θ\", ylabel=\"p(θ)\")\n", "plot!(θ_range, Beta.(θ_range, α4, β4), color=\"blue\", linewidth=3, label=\"Message ((4))\", size=(800,300))\n", "plot!(θ_range, Beta.(θ_range, α_marg, β_marg), color=\"purple\", linewidth=4, linestyle=:dash, label=\"Marginal\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we now combine the prior (Message ((1)) in red above) with the combined message from both likelihood terms (Message ((4)) in blue), we get the new marginal (purple dotted line). The mean of the marginal lies above $0.5$, which is due to the prior assumption that you must have _some_ skill if you applied. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Score questions\n", "\n", "So far, the models we have been looking at have been quite simple; they are Beta-Bernoulli combinations which is exactly what we did for the Beer Tasting Experiment. We will now move on to more complicated distributions. These will enrich your toolbox and allow you to do much more.\n", "\n", "Suppose you are not tested on a right-or-wrong question, but on a score question. For instance, you have to complete a piece of code for which you get a score. If all of it was wrong you get a score of $0$, if some of it was correct you get a score of $1$ and if all of it was correct you get a score $2$. That means we have a likelihood with three outcomes: $X_1 = \\{ 0,1,2\\}$. Suppose we once again ask two questions, $X_1$ and $X_2$. The order in which we ask these questions does not matter, so that means we choose Categorical distributions for these likelihood functions: $X_1, X_2 \\sim \\text{Categorical}(\\theta)$. The parameter $\\theta$ is no longer a single parameter, indicating the probability of getting the question right, but a vector of three parameters: $\\theta = (\\theta_1, \\theta_2, \\theta_3)$. Each $\\theta_k$ indicates the probability of getting the $k$-th outcome. In other words, $\\theta_1$ indicates the probability of getting $0$ points, $\\theta_2$ of getting $1$ point and $\\theta_3$ of getting two points. A highly-skilled applicant will have a parameter vector of $(0.05, 0.1, 0.85)$, for example. The prior distribution conjugate to the Categorical distribution is the Dirichlet distribution. \n", "\n", "Let's look at the generative model:\n", "\n", "$$p(X_1, X_2, \\theta) = p(X_1 \\mid \\theta) p(X_2 \\mid \\theta) p(\\theta) \\, .$$ \n", "\n", "It's the same as before. The only difference is that:\n", "\n", "$$\\begin{align}\n", "p(X_1 \\mid \\theta) =&\\ \\text{Categorical}(X_1 \\mid \\theta) \\\\\n", "p(X_2 \\mid \\theta) =&\\ \\text{Categorical}(X_2 \\mid \\theta) \\\\\n", "p(\\theta) =&\\ \\text{Dirichlet}(\\theta)\n", "\\end{align}$$\n", "\n", "The factor graph has the same structure as before. The only change is that the factor nodes $f_a, f_b, f_c$ are now parameterized differently. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Start building a model\n", "factor_graph3 = FactorGraph()\n", "\n", "# Add the prior\n", "@RV θ ~ Dirichlet([1.0, 3.0, 2.0], id=:f_a)\n", "\n", "# Add question 1 correctness likelihood\n", "@RV X1 ~ Categorical(θ, id=:f_b)\n", "\n", "# Add question 2 correctness likelihood\n", "@RV X2 ~ Categorical(θ, id=:f_c)\n", "\n", "# The question outcomes are going to be observed\n", "placeholder(X1, dims=(3,), :X1)\n", "placeholder(X2, dims=(3,), :X2)\n", "\n", "# Visualize the graph\n", "ForneyLab.draw(factor_graph3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The only difference with the previous graph is the fact that the node called \"prior\" is a 'Dir', short for Dirichlet, and that the two nodes called \"likelihood1\" and \"likelihood2\" are 'Cat' types, short for Categorical. Let's look at the message passing schedule:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Indicate which variables you want posteriors for\n", "q = PosteriorFactorization(θ, ids=[:θ])\n", "\n", "# Generate a message passing inference algorithm\n", "algorithm = messagePassingAlgorithm(θ, q)\n", "\n", "# Compile algorithm code\n", "source_code = algorithmSourceCode(algorithm)\n", "\n", "# Bring compiled code into current scope\n", "eval(Meta.parse(source_code))\n", "\n", "# Visualize message passing schedule\n", "pfθ = q.posterior_factors[:θ]\n", "ForneyLab.draw(pfθ, schedule=pfθ.schedule);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's the same as before as well: 2 messages from the likelihoods, 1 combined likelihood message from the equality node and 1 message from the prior.\n", "\n", "If we now setup the message passing procedure, we have to be a little bit more careful. We cannot feed the scores $\\{ 0,1,2\\}$ as outcomes directly. We have to encode them in one-hot vectors (see Bert's lecture notes on discrete distributions). Suppose you had a score of $1$ for the first question and a score of $2$ for the second one. That translates into a vector $[0, 1, 0]$ and $[0, 0, 1]$, respectively. These we enter into the `data` dictionary:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Message ((1)) = Dir(a=[1.00, 3.00, 2.00])\n", "Message ((2)) = Dir(a=[1.00, 2.00, 1.00])\n", "Message ((3)) = Dir(a=[1.00, 1.00, 2.00])\n", "Message ((4)) = Dir(a=[1.00, 2.00, 2.00])\n", "Marginal of θ = Dir(a=[1.00, 4.00, 3.00])\n", "\n" ] } ], "source": [ "# Initialize a message data structure\n", "messages = Array{Message}(undef, 4)\n", "\n", "# Initalize marginal distributions data structure\n", "marginals = Dict()\n", "\n", "# Enter the observed outcomes in the placeholders\n", "data = Dict(:X1 => [0, 1, 0],\n", " :X2 => [0, 0, 1])\n", "\n", "# Update coefficients\n", "stepθ!(data, marginals, messages);\n", "\n", "# Print messages\n", "print(\"\\nMessage ((1)) = \"*string(messages[1].dist))\n", "print(\"Message ((2)) = \"*string(messages[2].dist))\n", "print(\"Message ((3)) = \"*string(messages[3].dist))\n", "print(\"Message ((4)) = \"*string(messages[4].dist))\n", "println(\"Marginal of θ = \"*string(marginals[:θ]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualizing a Dirichlet distribution is a bit tricky. In the special case of $3$ parameters, we can plot the probabilities on a simplex. As a reminder, a [simplex](https://en.wikipedia.org/wiki/Simplex) in 3-dimensions is the triangle between the coordinates $[0,0,1]$, $[0,1,0]$ and $[1,0,0]$:\n", "\n", "\n", "\n", "Each vector $\\theta$ is a point on that triangle and its elements sum to $1$. Since the triangle is 2-dimensional, we can plot the Dirichlet's probability density over it." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAHDCAYAAAADeJEeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRQElEQVR4nO3de1xUdf4/8NcIAt7AVRRvSGbeKU1MUiO1kla72dVyFXWlYqs1Ndu8tHn0V2laZrWBlqL10MzMy1qSK+UNL1tJ2FaypamLKcSCCWYKgp/fH35nlmFmYM7MuZ/X8/GYh3LmXD4zZ+Z8XvP+nDnjEEIIEBEREZlAA70bQEREROQvBhciIiIyDQYXIiIiMg0GFyIiIjINBhciIiIyDQYXIiIiMg0GFyIiIjINBhciIiIyDQYXIiIiMg0GF4tauXIlHA4HHA4Hdu7c6XG/EAJXXXUVHA4HhgwZonn7jO7HH39EeHg49u/f73HfzTffjLS0NLdpzz77LG6//Xa0b98eDocD48eP97resWPHYuTIkR7Tf/jhB4SFheGrr75Sovmy7Ny50/VacTgcCAsLQ6tWrTBo0CDMmjUL//nPfzyWcb6+jh8/7vd2Ll68iO7du2P+/PkKtr5ukiS5HlfTpk3d7tuzZw9SU1ORkJCA8PBw2Y8HAD799FMMGDAAjRs3RnR0NMaPH4/i4mKP+S5evIg5c+bgiiuuQHh4OLp374433ngjmIeG1NRUxMfHo3nz5mjUqBG6du2Kp59+GiUlJX6v44033kD37t0RHh6OTp06Yc6cObh48aLHfMXFxRg/fjyio6PRuHFjDBgwAJ999lnAbc/NzcXjjz+Oq6++Gs2aNUNMTAxuueUWbN++3e91/Prrr5g8eTLatWuHiIgI9OnTB++//77Xeb/66ivccsstaNq0KZo3b4577rkHR48edZvnzJkzbu+Dl19+2XXfX//6V/Tt2xeXLl0K7AGTsgRZ0ooVKwQA0axZMzFmzBiP+3fs2OG6f/Dgwdo30OBGjhwpbrvtNo/pmzZtEuHh4eKnn35ym964cWNx/fXXi7S0NBEWFibGjRvndb1HjhwRoaGh4rPPPvO4b/z48eLGG29UpP1yOF8LL774oti/f7/Ys2eP+Pvf/y5mzpwp2rRpIxo1aiRWrVrltkxxcbHYv3+/uHDhgt/bWbx4sWjdurX49ddflX4IPs2ePVsAEPv37xdffPGF232SJIm4uDgxcuRIMWTIEAFAHDt2zO9179y5U4SGhoq77rpLbNu2TaxatUq0b99exMfHezwvqampIjw8XCxYsEDs2LFDTJ8+XTgcDvHCCy8E/NgefPBB8dprr4ktW7aIzz77TLz00ksiMjJS9OzZU1RUVNS7/PPPPy8cDoeYMWOG2LFjh1iwYIEICwsTDz/8sNt8Fy5cEPHx8aJDhw5i1apVYtu2beKuu+4SoaGhYufOnQG1/amnnhL9+vUTixYtEp999pnYvHmzGDFihAAg3nnnHb/WMWzYMNG8eXOxZMkSsX37dpGamioAiNWrV7vNl5+fL5o1ayaSkpLEli1bxPr160WvXr1Eu3btRHFxsWu+qqoqsX//frFhwwYBQCxcuNB135kzZ0Tz5s1FZmZmQI+XlMXgYlHO4JKamioaNWokysrK3O4fM2aMGDBggOjVqxeDSy2HDh0SAMTWrVs97uvfv7948MEHPaZXV1e7/t+kSROfwUUIIW6//XYxbNgwj+kHDhwQAMTevXsDa3iAnMFl3bp1HveVlpaKa6+9VoSGhop//etfstd97tw5IYQQFy9eFO3btxfTp08Pur1yOIOLNzX32cKFC2UHl+uuu0707NlTXLx40TVt7969AoBIT093Tfv222+Fw+EQL774otvyDz/8sGjUqJEoLS31e5v1SU9PFwC8BuOaSkpKREREhHjkkUfcpr/wwgvC4XCI7777zjXtzTffFADEvn37XNMuXrwoevbsKfr37x9QO3/++WePaVVVVeKaa64RnTt3rnf5LVu2CADivffec5s+bNgw0a5dO1FVVeWadv/994vo6Gi3Y+Dx48dFw4YNxV/+8hePdR87dswjuAghxBNPPCG6du0qLl26VG/7SF0cKrK4hx56CACwZs0a17SysjKsX78ef/zjH70uU1lZieeff95VQm7VqhUmTJiA//73v27zbd++HUOGDEHLli3RqFEjdOzYEffeey9+++031zwZGRno3bs3mjZtimbNmqF79+6YOXOm6/7//ve/eOyxx9CzZ080bdoUrVu3xk033YScnByPdv3000+477770KxZMzRv3hx/+MMf8OWXX8LhcGDlypVu8x44cAB33nknWrRogYiICFx77bX44IMP/HrOMjIy0KZNGwwbNsxtel5eHr744guM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8ORebUgqzWtXkt4NUBiHiLyyfXAhonp4O3gyzGhPMsg6tCLp3QCdaRxazFR1sXVwYbWFKEAcWjInSe8GkF90qrSYJbzYNrgwtBApiFUZImVweKhetg0uRKQyhhki/xkksJih6mLL4MJqC5FOfB2cGWjIrgwSWGoyenixXXBhaCEyoLoO3gw1ZEUGDCxmYbvgQkQmw1BDVmGisGLkqoutggurLUQW409HwHBDejFRUPHGqOHFNsGFoYXIphhuSCsmDypmYZvgQkTkk5wOhyGHbBRQjFh1sUVwYbWFiBQTaKfFwGMeNgom/jBaeLF8cGFoISJDUKozZACShyHEciwfXIiILIUdMenASFWXBno3QE2sthARESnDKH2qZYOLUZ5gIiIiUo5lgwsREREpywhFAUsGFyM8sURERFakdx9rueCi9xNKRERE6rFccCEiIiJ16VkksFRwYbWFiIhIG3r1uZYJLgwtRERE1meZ4EJERETa0qNoYIngwmoLERGRPrTug00fXBhaiIiI7MP0wYWIiIj0pWURwdTBhdUWIiIiY9CqTzZtcGFoISIish/TBhciIiIyFi2KCqYMLqy2EBERGZPafbTpggtDCxERkX0FFFzS09PRqVMnREREICEhATk5OXXOv2vXLiQkJCAiIgJXXnkllixZElBjiYiIyPjULDLIDi5r167F5MmTMWvWLOTl5SEpKQnDhw9HQUGB1/mPHTuGESNGICkpCXl5eZg5cyYmTZqE9evXy25sVNQB2csQERGR9tQKLw4hhJCzQGJiIvr27YuMjAzXtB49emDkyJGYN2+ex/zPPPMMNm/ejPz8fNe0tLQ0fP3119i/f79f2ywvL0dUVBSAzwA0kdNcIiIi0klZWQ9ERUWhrKwMkZGRiqwzVM7MlZWVyM3NxfTp092mJycnY9++fV6X2b9/P5KTk92m3XrrrVi+fDkuXryIhg0beixTUVGBiooK199lZWX/979zcppLREREOoqK2gUAkFkjqZOs4FJSUoLq6mrExMS4TY+JiUFRUZHXZYqKirzOX1VVhZKSErRt29ZjmXnz5mHOnDle1nannOYSERGRAZSWlv7fyEnwZAUXJ4fD4fa3EMJjWn3ze5vuNGPGDEydOtX195kzZxAXF4eCggLFHjgFpry8HLGxsThx4oRiZT8KDPeFcXBfGAv3h3GUlZWhY8eOaNGihWLrlBVcoqOjERIS4lFdKS4u9qiqOLVp08br/KGhoWjZsqXXZcLDwxEeHu4xPSoqii9Cg4iMjOS+MAjuC+PgvjAW7g/jaNBAuauvyFpTWFgYEhISkJ2d7TY9OzsbAwcO9LrMgAEDPObftm0b+vXr5/X8FiIiIiJfZEegqVOnYtmyZcjMzER+fj6mTJmCgoICpKWlAbg8zJOSkuKaPy0tDf/5z38wdepU5OfnIzMzE8uXL8e0adOUexRERERkC7LPcRk1ahRKS0sxd+5cFBYWIj4+HllZWYiLiwMAFBYWul3TpVOnTsjKysKUKVPw5ptvol27dnj99ddx7733+r3N8PBwzJ492+vwEWmL+8I4uC+Mg/vCWLg/jEONfSH7Oi5EREREejHdbxURERGRfTG4EBERkWkwuBAREZFpMLgQERGRaRgmuKSnp6NTp06IiIhAQkICcnJy6px/165dSEhIQEREBK688kosWbJEo5Zan5x9sWHDBgwbNgytWrVCZGQkBgwYgH/84x8attba5L4vnPbu3YvQ0FD06dNH3QbaiNx9UVFRgVmzZiEuLg7h4eHo3LkzMjMzNWqttcndF6tXr0bv3r3RuHFjtG3bFhMmTEBpaalGrbWu3bt344477kC7du3gcDiwadOmepdRpO8WBvD++++Lhg0birffflscOnRIPPnkk6JJkybiP//5j9f5jx49Kho3biyefPJJcejQIfH222+Lhg0big8//FDjlluP3H3x5JNPipdeekl88cUX4ocffhAzZswQDRs2FF999ZXGLbceufvC6cyZM+LKK68UycnJonfv3to01uIC2Rd33nmnSExMFNnZ2eLYsWPi888/F3v37tWw1dYkd1/k5OSIBg0aiNdee00cPXpU5OTkiF69eomRI0dq3HLrycrKErNmzRLr168XAMTGjRvrnF+pvtsQwaV///4iLS3NbVr37t3F9OnTvc7/l7/8RXTv3t1t2qOPPiquv/561dpoF3L3hTc9e/YUc+bMUbppthPovhg1apR49tlnxezZsxlcFCJ3X3zyySciKipKlJaWatE8W5G7LxYuXCiuvPJKt2mvv/666NChg2pttCN/gotSfbfuQ0WVlZXIzc1FcnKy2/Tk5GTs27fP6zL79+/3mP/WW2/FgQMHcPHiRdXaanWB7IvaLl26hLNnzyr6g1p2FOi+WLFiBX788UfMnj1b7SbaRiD7YvPmzejXrx8WLFiA9u3bo2vXrpg2bRrOnz+vRZMtK5B9MXDgQPz000/IysqCEAI///wzPvzwQ9x2221aNJlqUKrvDujXoZVUUlKC6upqjx9pjImJ8fhxRqeioiKv81dVVaGkpARt27ZVrb1WFsi+qO2VV17BuXPn8MADD6jRRNsIZF8cPnwY06dPR05ODkJDdX9rW0Yg++Lo0aPYs2cPIiIisHHjRpSUlOCxxx7D6dOneZ5LEALZFwMHDsTq1asxatQoXLhwAVVVVbjzzjvxxhtvaNFkqkGpvlv3iouTw+Fw+1sI4TGtvvm9TSf55O4LpzVr1kCSJKxduxatW7dWq3m24u++qK6uxujRozFnzhx07dpVq+bZipz3xaVLl+BwOLB69Wr0798fI0aMwKJFi7By5UpWXRQgZ18cOnQIkyZNwnPPPYfc3Fxs3boVx44dc/2+HmlLib5b949l0dHRCAkJ8UjLxcXFHsnMqU2bNl7nDw0NRcuWLVVrq9UFsi+c1q5di4kTJ2LdunW45ZZb1GymLcjdF2fPnsWBAweQl5eHJ554AsDlzlMIgdDQUGzbtg033XSTJm23mkDeF23btkX79u0RFRXlmtajRw8IIfDTTz+hS5cuqrbZqgLZF/PmzcOgQYPw9NNPAwCuueYaNGnSBElJSXj++edZodeQUn237hWXsLAwJCQkIDs72216dnY2Bg4c6HWZAQMGeMy/bds29OvXDw0bNlStrVYXyL4ALldaxo8fj/fee4/jxgqRuy8iIyPxzTff4ODBg65bWloaunXrhoMHDyIxMVGrpltOIO+LQYMG4dSpU/j1119d03744Qc0aNAAHTp0ULW9VhbIvvjtt9/QoIF7VxcSEgLgf5/2SRuK9d2yTuVVifPrbcuXLxeHDh0SkydPFk2aNBHHjx8XQggxffp0MXbsWNf8zq9UTZkyRRw6dEgsX76cX4dWiNx98d5774nQ0FDx5ptvisLCQtftzJkzej0Ey5C7L2rjt4qUI3dfnD17VnTo0EHcd9994rvvvhO7du0SXbp0EampqXo9BMuQuy9WrFghQkNDRXp6uvjxxx/Fnj17RL9+/UT//v31egiWcfbsWZGXlyfy8vIEALFo0SKRl5fn+mq6Wn23IYKLEEK8+eabIi4uToSFhYm+ffuKXbt2ue4bN26cGDx4sNv8O3fuFNdee60ICwsTV1xxhcjIyNC4xdYlZ18MHjxYAPC4jRs3TvuGW5Dc90VNDC7Kkrsv8vPzxS233CIaNWokOnToIKZOnSp+++03jVttTXL3xeuvvy569uwpGjVqJNq2bSv+8Ic/iJ9++knjVlvPjh076jz+q9V3O4RgrYyIiIjMQfdzXIiIiIj8xeBCREREpsHgQkRERKbB4EJERESmweBCREREpsHgQkRERKbB4EJERESmweBCREREpsHgQkRERKbB4EJERESmweBCREREpsHgQkRERKbx/wGATRBvjtvEGQAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject