{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Burgers Optimization with a Differentiable Physics Gradient\n", "\n", "To illustrate the process of computing gradients in a _differentiable physics_ (DP) setting, we target the same inverse problem (the reconstruction task) used for the PINN example in {doc}`physicalloss-code`. The choice of DP as a method has some immediate implications: we start with a discretized PDE, and the evolution of the system is now fully determined by the resulting numerical solver. Hence, the only real unknown is the initial state. We will still need to re-compute all the states between the initial and target state many times, just now we won't need an NN for this step. Instead, we can rely on our discretized model. \n", "\n", "Also, as we choose an initial discretization for the DP approach, the unknown initial state consists of the sampling points of the involved physical fields, and we can simply represent these unknowns as floating point variables. Hence, even for the initial state we do not need to set up an NN. Thus, our Burgers reconstruction problem reduces to a gradient-based optimization without any NN when solving it with DP. Nonetheless, it's a very good starting point to illustrate the process.\n", "\n", "First, we'll set up our discretized simulation. Here we can employ phiflow, as shown in the overview section on _Burgers forward simulations_. \n", "[[run in colab]](https://colab.research.google.com/github/tum-pbs/pbdl-book/blob/main/diffphys-code-burgers.ipynb)\n", "\n", "\n", "## Initialization\n", "\n", "phiflow directly gives us a sequence of differentiable operations, provided that we don't use the _numpy_ backend.\n", "The important step here is to include `phi.tf.flow` instad of `phi.flow` (for _pytorch_ you could use `phi.torch.flow`).\n", "\n", "So, as a first step, let's set up some constants, and initialize a `velocity` field with zeros, and our constraint at $t=0.5$ (step 16), now as a `CenteredGrid` in phiflow. Both are using periodic boundary conditions (via `extrapolation.PERIODIC`) and a spatial discretization of $\\Delta x = 1/128$.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#!pip install --upgrade --quiet phiflow\n", "!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop \n", "from phi.tf.flow import *\n", "\n", "N = 128\n", "STEPS = 32\n", "DT = 1./STEPS\n", "NU = 0.2/np.pi\n", "\n", "# allocate velocity grid\n", "velocity = CenteredGrid(0, extrapolation.PERIODIC, x=N, bounds=Box[-1:1])\n", "\n", "# and a grid with the reference solution \n", "REFERENCE_DATA = math.tensor([0.008612174447657694, 0.02584669669548606, 0.043136357266407785, 0.060491074685516746, 0.07793926183951633, 0.0954779141740818, 0.11311894389663882, 0.1308497114054023, 0.14867023658641343, 0.1665634396808965, 0.18452263429574314, 0.20253084411376132, 0.22057828799835133, 0.23865132431365316, 0.25673879161339097, 0.27483167307082423, 0.2929182325574904, 0.3109944766354339, 0.3290477753208284, 0.34707880794585116, 0.36507311960102307, 0.38303584302507954, 0.40094962955534186, 0.4188235294008765, 0.4366357052408043, 0.45439856841363885, 0.4720845505219581, 0.4897081943759776, 0.5072391070000235, 0.5247011051514834, 0.542067187709797, 0.5593576751669057, 0.5765465453632126, 0.5936507311857876, 0.6106452944663003, 0.6275435911624945, 0.6443221318186165, 0.6609900633731869, 0.67752574922899, 0.6939334022562877, 0.7101938106059631, 0.7263049537163667, 0.7422506131457406, 0.7580207366534812, 0.7736033721649875, 0.7889776974379873, 0.8041371279965555, 0.8190465276590387, 0.8337064887158392, 0.8480617965162781, 0.8621229412131242, 0.8758057344502199, 0.8891341984763013, 0.9019806505391214, 0.9143881632159129, 0.9261597966464793, 0.9373647624856912, 0.9476871303793314, 0.9572273019669029, 0.9654367940878237, 0.9724097482283165, 0.9767381835635638, 0.9669484658390122, 0.659083299684951, -0.659083180712816, -0.9669485121167052, -0.9767382069792288, -0.9724097635533602, -0.9654367970450167, -0.9572273263645859, -0.9476871280825523, -0.9373647681120841, -0.9261598056102645, -0.9143881718456056, -0.9019807055316369, -0.8891341634240081, -0.8758057205293912, -0.8621229450911845, -0.8480618138204272, -0.833706571569058, -0.8190466131476127, -0.8041372124868691, -0.7889777195422356, -0.7736033858767385, -0.758020740007683, -0.7422507481169578, -0.7263049162371344, -0.7101938950789042, -0.6939334061553678, -0.677525822052029, -0.6609901538934517, -0.6443222327338847, -0.6275436932970322, -0.6106454472814152, -0.5936507836778451, -0.5765466491708988, -0.5593578078967361, -0.5420672759411125, -0.5247011730988912, -0.5072391580614087, -0.4897082914472909, -0.47208460952428394, -0.4543985995006753, -0.4366355580500639, -0.41882350871539187, -0.40094955631843376, -0.38303594105786365, -0.36507302109186685, -0.3470786936847069, -0.3290476440540586, -0.31099441589505206, -0.2929180880304103, -0.27483158663081614, -0.2567388003912687, -0.2386513127155433, -0.22057831776499126, -0.20253089403524566, -0.18452269630486776, -0.1665634500729787, -0.14867027528284874, -0.13084990929476334, -0.1131191325854089, -0.09547794429803691, -0.07793928430794522, -0.06049114408297565, -0.0431364527809777, -0.025846763281087953, -0.00861212501518312] , math.spatial('x'))\n", "SOLUTION_T16 = CenteredGrid( REFERENCE_DATA, extrapolation.PERIODIC, x=N, bounds=Box[-1:1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can verify that the fields of our simulation are now backed by TensorFlow." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensorflow.python.framework.ops.EagerTensor" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(velocity.values.native())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradients\n", "\n", "The `record_gradients` function of phiflow triggers the generation of a gradient tape to compute gradients of a simulation via `math.gradients(loss, values)`.\n", "\n", "To use it for the Burgers case we need to specify a loss function: we want the solution at $t=0.5$ to match the reference data. Thus we simply compute an $L^2$ difference between step number 16 and our constraint array as `loss`. Afterwards, we evaluate the gradient of the initial velocity state `velocity` with respect to this loss." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Instructions for updating:\n", "This op will be removed after the deprecation date. Please switch to tf.sets.difference().\n", "Loss: 0.382915\n" ] } ], "source": [ "velocities = [velocity]\n", "\n", "with math.record_gradients(velocity.values):\n", "\n", " for time_step in range(STEPS):\n", " v1 = diffuse.explicit(1.0*velocities[-1], NU, DT, substeps=1)\n", " v2 = advect.semi_lagrangian(v1, v1, DT)\n", " velocities.append(v2)\n", "\n", " loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n", "\n", " grad = math.gradients(loss, velocity.values)\n", "\n", "print('Loss: %f' % (loss))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we're only constraining time step 16, we could actually omit steps 17 to 31 in this setup. They don't have any degrees of freedom and are not constrained in any way. However, for fairness regarding a comparison with the previous PINN case, we include them.\n", "\n", "Note that we've done a lot of calculations here: first the 32 steps of our simulation, and then another 16 steps backwards from the loss. They were recorded by the gradient tape, and used to backpropagate the loss to the initial state of the simulation.\n", "\n", "Not surprisingly, because we're starting from zero, there's also a significant initial error of ca. 0.38 for the 16th simulation step.\n", "\n", "So what do we get as a gradient here? It has the same dimensions as the velocity, and we can easily visualize it:\n", "Starting from the zero state for `velocity` (shown in blue), the first gradient is shown as a green line below. If you compare it with the solution it points in the opposite direction, as expected. The solution is much larger in magnitude, so we omit it here (see the next graph).\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pylab as plt\n", "\n", "fig = plt.figure().gca()\n", "pltx = np.linspace(-1,1,N)\n", "\n", "# first gradient\n", "fig.plot(pltx, grad.numpy('x') , lw=2, color='green', label=\"Gradient\") \n", "fig.plot(pltx, velocity.values.numpy('x'), lw=2, color='mediumblue', label=\"u at t=0\")\n", "plt.xlabel('x'); plt.ylabel('u'); plt.legend();\n", "\n", "# some (optional) other fields to plot:\n", "#fig.plot(pltx, (velocities[16]).values.numpy('x') , lw=2, color='cyan', label=\"u at t=0.5\") \n", "#fig.plot(pltx, (SOLUTION_T16).values.numpy('x') , lw=2, color='red', label=\"solution at t=0.5\") \n", "#fig.plot(pltx, (velocities[16] - SOLUTION_T16).values.numpy('x') , lw=2, color='blue', label=\"difference at t=0.5\") \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This gives us a \"search direction\" for each velocity variable. Based on a linear approximation, the gradient tells us how to change each of them to increase the loss function (gradients _always_ point \"upwards\"). Thus, we can use the gradient to run an optimization and find an initial state `velocity` that minimizes our loss.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization \n", "\n", "Equipped with the gradient we can run a gradient descent optimization. Below, we're using a learning rate of `LR=5`, and we're re-evaluating the loss for the updated state to track convergence. \n", "\n", "In the following code block, we're additionally saving the gradients in a list called `grads`, such that we can visualize them later on. For a regular optimization we could of course discard the gradient after performing an update of the velocity.\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization step 0, loss: 0.382915\n", "Optimization step 1, loss: 0.329677\n", "Optimization step 2, loss: 0.284684\n", "Optimization step 3, loss: 0.246604\n", "Optimization step 4, loss: 0.214305\n" ] } ], "source": [ "LR = 5.\n", "\n", "grads=[]\n", "for optim_step in range(5):\n", " velocities = [velocity]\n", " with math.record_gradients(velocity.values):\n", " for time_step in range(STEPS):\n", " v1 = diffuse.explicit(1.0*velocities[-1], NU, DT)\n", " v2 = advect.semi_lagrangian(v1, v1, DT)\n", " velocities.append(v2)\n", "\n", " loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n", " print('Optimization step %d, loss: %f' % (optim_step,loss))\n", "\n", " grads.append( math.gradients(loss, velocity.values) )\n", "\n", " velocity = velocity - LR * grads[-1]\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Now we can check well the 16th state of the simulation actually matches the target after the 5 update steps. This is what the loss measures, after all. The next graph shows the constraints (i.e. the solution we'd like to obtain) in green, and the reconstructed state after the initial state `velocity` (which we updated five times via the gradient by now) was updated 16 times by the solver. \n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure().gca()\n", "\n", "# target constraint at t=0.5\n", "fig.plot(pltx, SOLUTION_T16.values.numpy('x'), lw=2, color='forestgreen', label=\"Reference\") \n", "\n", "# optimized state of our simulation after 16 steps\n", "fig.plot(pltx, velocities[16].values.numpy('x'), lw=2, color='mediumblue', label=\"Simulated velocity\")\n", "\n", "plt.xlabel('x'); plt.ylabel('u'); plt.legend(); plt.title(\"After 5 Optimization Steps at t=0.5\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This seems to be going in the right direction! It's definitely not perfect, but we've only computed 5 GD update steps so far. The two peaks with a positive velocity on the left side of the shock and the negative peak on the right side are starting to show.\n", "\n", "This is a good indicator that the backpropagation of gradients through all of our 16 simulated steps is behaving correctly, and that it's driving the solution in the right direction. The graph above only hints at how powerful the setup is: the gradient that we obtain from each of the simulation steps (and each operation within them) can easily be chained together into more complex sequences. In the example above, we're backpropagating through all 16 steps of the simulation, and we could easily enlarge this \"look-ahead\" of the optimization with minor changes to the code.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More optimization steps\n", "\n", "Before moving on to more complex physics simulations, or involving NNs, let's finish the optimization task at hand, and run more steps to get a better solution.\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization step 0, loss: 0.186823\n", "Optimization step 5, loss: 0.098101\n", "Optimization step 10, loss: 0.055802\n", "Optimization step 15, loss: 0.033452\n", "Optimization step 20, loss: 0.020761\n", "Optimization step 25, loss: 0.013248\n", "Optimization step 30, loss: 0.008643\n", "Optimization step 35, loss: 0.005733\n", "Optimization step 40, loss: 0.003848\n", "Runtime 204.01s\n" ] } ], "source": [ "import time\n", "start = time.time()\n", "\n", "for optim_step in range(45):\n", " velocities = [velocity]\n", " with math.record_gradients(velocity.values):\n", " for time_step in range(STEPS):\n", " v1 = diffuse.explicit(1.0*velocities[-1], NU, DT)\n", " v2 = advect.semi_lagrangian(v1, v1, DT)\n", " velocities.append(v2)\n", "\n", " loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n", " if optim_step%5==0: \n", " print('Optimization step %d, loss: %f' % (optim_step,loss))\n", "\n", " grad = math.gradients(loss, velocity.values)\n", "\n", " velocity = velocity - LR * grad\n", "\n", "end = time.time()\n", "print(\"Runtime {:.2f}s\".format(end-start))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thinking back to the PINN version from {doc}`diffphys-code-burgers`, we have a much lower error here after only 50 steps (by ca. an order of magnitude), and the runtime is also lower (roughly by a factor of 2).\n", "\n", "Let's plot again how well our solution at $t=0.5$ (blue) matches the constraints (green) now:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure().gca()\n", "fig.plot(pltx, SOLUTION_T16.values.numpy('x'), lw=2, color='forestgreen', label=\"Reference\") \n", "fig.plot(pltx, velocities[16].values.numpy('x'), lw=2, color='mediumblue', label=\"Simulated velocity\")\n", "plt.xlabel('x'); plt.ylabel('u'); plt.legend(); plt.title(\"After 50 Optimization Steps at t=0.5\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not bad. But how well is the initial state recovered via backpropagation through the 16 simulation steps? This is what we're changing, and because it's only indirectly constrained via the observation later in time there is more room to deviate from a desired or expected solution.\n", "\n", "This is shown in the next plot: " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure().gca()\n", "pltx = np.linspace(-1,1,N)\n", "\n", "# ground truth state at time=0 , move down\n", "INITIAL_GT = np.asarray( [-np.sin(np.pi * x) * 1. for x in np.linspace(-1,1,N)] ) # 1D array\n", "fig.plot(pltx, INITIAL_GT.flatten() , lw=2, color='forestgreen', label=\"Ground truth initial state\") # ground truth initial state of sim\n", "fig.plot(pltx, velocity.values.numpy('x'), lw=2, color='mediumblue', label=\"Optimized initial state\") # manual\n", "plt.xlabel('x'); plt.ylabel('u'); plt.legend(); plt.title(\"Initial State After 50 Optimization Steps\");\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Naturally, this is a tougher task: the optimization receives direct feedback what the state at $t=0.5$ should look like, but due to the non-linear model equation, we typically have a large number of solutions that exactly or numerically very closely satisfy the constraints. Hence, our minimizer does not necessarily find the exact state we started from. However, it's still quite close in this Burgers scenario.\n", "\n", "Before measuring the overall error of the reconstruction, let's visualize the full evolution of our system over time as this also yields the solution in the form of a numpy array that we can compare to the other versions:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAEeCAYAAACAIyQ5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABcMElEQVR4nO29fZBmZ3ne+bvPOd0zAsynHFkWKkMqZBMSJ9irwt5lNyZ8JIrjRa5alshOHOzg0nrLxM43It4yXmK2ZGfLhC27HE9hYpE4FoTEQZuQYMzHprZiCJLNBgPrWJbBSBbIwkhGzEx3n/e594/zjmgGzbS657l6+lZfv6mp6fftt59+5rznPee5nvu+rzsyE2OMMcYYY4wxj53hck/AGGOMMcYYY6phIWWMMcYYY4wx+8RCyhhjjDHGGGP2iYWUMcYYY4wxxuwTCyljjDHGGGOM2ScWUsYYY4wxxhizT6bLPQFjjDHGGGPM44c/f/2fys898PC+f+7OO3/73Zl5vWBKEiykjDHGGGOMMd343AMP86E7/sG+f26Kv3KlYDoyLKSMMcYYY4wx3UiS1laXexpyLKSMMcYYY4wxHUky58s9CTkWUsYYY4wxxph+JGQ6ImWMMcYYY4wxj5kkaY5IGWOMMcYYY8x+cGqfMcYYY4wxxuwTCyljjDHGGGOM2R+ZZLOQMsYYY4wxxpj94YiUMcYYY4wxxuwHp/YZY4wxxhhjzD5JaDuXexJyLKSMMcYYY4wx3ch0RMoYY4wxxhhj9kmCzSaMMcYYY4wxZh+khZQxxhhjjDHG7B+n9hljjDHGGGPMYydIwhEpY4wxxhhjjNkHxyS1b7jcEzDGGGOMMcaYajgiZYwxxhhjjOnI8YhIWUgZY4wxxhhjOpKEwGwiIq4H3gSMwJsz85bzvv9G4M+uHz4B+EOZ+dT191bAR9ff+53MfNmlzsdCyhhjjDHGGNOPBNqq65ARMQI/BbwUuAf4cETcnpkff+TXZv7NXa//68A37BriTGY+r+ecLKSMMcYYY4wxHZG49j0fuCsz7waIiNuAG4CPX+D13wG8rvckdmOzCWOMMcYYY0xHcolI7ffvxbkG+PSux/esn/sKIuLrgGcD79v19MmIuCMiPhgR334J/7lHcETKGGOMMcYY04+D259fGRF37Hp8KjNPHWCcG4F3ZOZudfZ1mXlvRPxh4H0R8dHM/K2DTPIcFlLGGGOMMcaYrsTBaqQeyMzrLvC9e4Frdz1+5vq5R+NG4Pt3P5GZ967/vTsiPsBSP3VJQsqpfcYYY4wxxph+pCS178PAcyLi2RGxySKWbj//RRHxx4CnAb+y67mnRcSJ9ddXAi/gwrVVjxlHpIwxxhhjjDFdOWBE6oJk5hwRrwbezWJ//pbM/FhEvB64IzPPiaobgdsyM3f9+B8HfiYiGksg6Zbdbn8HxULKGGOMMcYY05Hsbn8OkJnvAt513nM/fN7jH3mUn/uPwNf3no+FlDHGGGOMMaYbkdk9InUUsZAyxhhjjDHG9MVCyhhjjDHGGGP2gSNSxhhjjDHGGHMALKSMMcYYY4wxZj8k0drlnoQcCyljjDHGGGNMP5JjEZFyQ15jjDHGGGOM2SeOSBljjDHGGGM6oukjddSwkDLGGGOMMcZ0JdI1UsYYY4wxxhjz2ElHpIwxxhhjjDFm/9i1zxhjjDHGGGP2QaaFlDHGGGOMMcbsl3BqnzHGGGOMMcbsB0ekjDHGGGOMMWZ/JBZSxhhjjDHGGLM/HJEyxhhjjDHGmP2RHAv780E1cERcHxG/ERF3RcTNqt9jjDHGGGOMOToESbS277/VkESkImIEfgp4KXAP8OGIuD0zP674fcYYY4wxxpgjREFhtF9UqX3PB+7KzLsBIuI24AbAQsoYY4wxxpjHMzabuCSuAT696/E9wDdd6MVP3djMrzn5hL4zyL7D6YnLPYHHJeVOA2OMMcaYXXxm6zQP7WwVWyjabEJKRNwE3ATwNSeu4Oe+8b+/XFPZFy1rncdZbL4Kqr1nVfC5ZcCfL2PU+Fprvu+j77vcU9g/CbTH/3a2SkjdC1y76/Ez1889QmaeAk4BPPfJT8mNce4+CdXFp9LCodIFOEVRuVEwZqVzQEWlc6salc6vMR7/N8rLhT9jBoBin7FK1y8jxhGpA/Nh4DkR8WwWAXUj8J0XenFEsrGx030SiptQpsbosLU6Fx7Vzb3SoqHajUJybEWHQCWoK2HxXwvZtavYAroS/jzo8OZKf8KFCkcWiZDKzDkiXg28m2VN8JbM/NiFXh8k09jfa15xc2upUdfDUEecWExCFLoJZ0apBVm1BU6VDQDl4ubYi1/Rsa32WaiE6vNQ5XpgilHytHKN1CWRme8C3vWYXhwwTf2FlGJhPkiESRRLQ2yS+Q5DnZtQJTEZxRYM5RY4RUSqclGu2i2tcj1QIfss1FyV1aDze2YxXZPjfu0CXCN1mEQkkyK1T7AobU2zgFYszFsLifADVaSrlpjsTWYwiFpk69IxZT29u1Mp4ql4v6ql21SLpCpQLaIrpQkd9wWpI8lF6fy+lX2nRFlcR4kjI6Q2N7e7jpkZrFb9Kw0G0UnRVv0XpOOoEzwq4adAFUVUUGnRsCzyNIJSgUKkWqAuVIqkKqgWnVVw3CO+UC96ZEFttKQjUodFRDJOfV37MgfJjTgzJBfLiCwT5ckWZPY/thF1FqUq0VdJoI2ic7ZSvYnqcxvRP9UZhAt+gTtGLTGZpSKeRoPsmmgEW3bVKChIRKl9EXE98CYWD4Y3Z+Yt533/u4F/yJfcwn8yM9+8/t4rgf91/fyPZuatlzqfIyGkiGTY6LtwyNaI6H8jzhwkEY626n+ytQxSkIqYIsGjiMoBx170gUb4ZYZss0KBYndflX4mS+kq9H5ZTNYTkwosUA1ApU+CgrKfgs5CKiJG4KeAlwL3AB+OiNsz8+PnvfRtmfnq83726cDrgOtYLlh3rn/285cypyMhpCKSabNvjVS2oAlS+zJDUns1CPKOMgeNc6FI8KxCYfpcq54rBQ43qtqrSmlt1SKI5Vwhi9BE4h80x0ElJhVUEqigFKl1IgeVRGqlz62EItPcTaakROr5wF2ZeTdARNwG3ACcL6QejT8PvCczf3/9s+8Brgd+4VImdDSE1JCMvYVUBsPc/x1sK5E4GQSir2nc9UIkeCpdKKtF+1QpngocQay1wKmWjqqgkjFGpWgn1Ip4llmUr3EUFRTCt9L1W07/1L5rgE/venwP8E2P8rr/MSL+DPBfgL+ZmZ++wM9ec6kTOhJCaknt61wj1YJUXNiHAUTOfd0Z0UTlRHngqqOqiKANAILeZ4pFjkLwAcQoqgcQJMMra5kkC/5CCxxVmxDVe3bcqVbH49qYatR6xxTXxWGosakiJzno6XBlRNyx6/GpzDy1j5//v4BfyMytiPifgVuBFx1oJo+BIyGkIpLhROeI1DyQgpM5hkG2MO2NqoalrUZNlKf7iAtjKNLlNJHJUNQyRcp2oR2Vq1MnVkn0wbkFTo3d4mrRmErUuNuuEV5rjYYqkclKDotfxsGWXw9k5nUX+N69wLW7Hj+TL5lKAJCZn9v18M3Aj+/62Ree97MfONAMd3EkhBSRjCc6259vDLSd/v+9nAcQ7GDEIFjst0ESjQnRbotirtlUdWKaDhwpiCCCyAK+BQjO25WqV5tiXFETaV0NXp1FniLFE6qledrAoZKYzIwylvXV7OorCVTJxkqd//6X0/9QfBh4TkQ8m0UY3Qh85+4XRMTVmXnf+uHLgE+sv3438L9HxNPWj/8c8NpLndCREFIxCCJSLSTipMWkCQV3H3HtXChwGWhDagw3uo+oS0OU2dWLohuaSFepvWLJsW0ZGkGtEpMCESFbkAlTBnuzRP9r7GyDU0dNvdTZWncbA0D237zLzDkiXs0iikbgLZn5sYh4PXBHZt4O/EBEvAyYgd8Hvnv9s78fEf+ARYwBvP6c8cSlcCSEFJFE5xopmqaWadicybn/XUiyQyjaeR3QLKIV98sITURKJdAa/c+tIDXpcpmgENSyVLEiqZgZMK40O7CCa6Isrc2irxiag6BwtFVh0WfOUUmkShF8JjLzXcC7znvuh3d9/VouEGnKzLcAb+k5nyMipCBOdN7NE/RlAmBnJMa+Z0a2EEWkQlInlsMoselWRM9k6Y0igaaLdCns9UMn0HrTAsWepsJwI1givpK+V4V6XqlEn+RzO4qiXKLUPkVGgZtT14r0gYWfkt4bTHVrpB7/gvJoCKkB4gl9h4y5kZ0FD0AOrXvaTYBG8LQgdwQLpyE1O/EiC3iVQJMIHkG0EzQNn5fISfdhJU6TjLoeXZXSJqtE5UAj+kAn/LrfF4QGFpWEn6qu77ibxEC1Hl3HvF6wyDS/DEFq31HkaAipADY6f/AiNQq+NeGOeV8iQ5JsMQyalC7J5liExByjzSlpmqraIJTc1oqlLhz7qBwqV8g6ok8W6VunY/ZGIfoCTQ1etWifhGJ1fTrqhLoqpY7WIxyROjSGgM2NzmOuAEFKQEuid4OxBkyCQuU2EIJxgeU964xkZ3sYFA3hljqxKoYbbZCcX7TQ1CEqIskih0HaIFnoKdJRQWI4Ssjyg2qkYgKydaOst57is7AMrBm3CpX++3W0jpgaB6Jsat8x4GgIqVAIKVE6ACtR/ZVgoSuqE4tKrn1tWCzrBUTntAhZCsvYSIW1fGh6tUmis0LTke5jpqZm8tzY3ccUmdoc91o50CyeHJXTRuUUqCJ9qqhUpRRPI6ZY5spBOCJCaoATJ/uOOc4w9O1NtbAtqdCU7Oq2pkkJ2NE4IiqINpCKGqm5v5iMUVcrJ0tv7D6qppdWitJRQ5TWpqhpA5WQUh0Dwbhj1kqbVPQsFIo+xWL3uIu+ZWDRZmCllEHRkqOM6KuoR1wjdYhEkJsn+g45DJACcbLZYBZEjzb6f5hjlaTgIhHUqRND1DwYKCMmlemNvVkuuv0/X5GhqZGqFJ3N0GSxiNLEVMdAtnDqnOK5zFWTkqsp69OkuVYSfeVSMRVUuS8q8SH4EsfgfDiwkIqIa4G3Alex2Kmcysw3RcTTgbcBzwI+CbwiMz+/x2Aw9dV0iS7Kg6I4USHOBtVui6BODGBz7i6msg26jZwiHeyjpag/1UoSlZNYAaryy1U1Ut1HXDY0FRG0zNDsOgoWj6qULsXCSbXYV7lpV6qVkw1brFZOgevvzCOkzSb2Ygb+dmb+akR8FXBnRLyHpYPwezPzloi4GbgZeM1FRxoG8mRn//N5p+94awJg7tw8GOBk6x81aI3lbepLkKIbRuv/ocuEWTDZELn2KbJRh1icFjuT89C/TiwHWQ2eKr1RgaxGSlTTphJo3cdsQQhSuhYxebwFGqqUwUICTbGpArp0OVUqpmS+hVIxFRs2qvo7NdXcfQ/CgYVUZt4H3Lf++gsR8QngGuAG4IXrl90KfIC9hFQM5GbnGqlhkFyAE03jWLL1r72S3YBmjZBqSe/IQbREksciqrmRpcsJ+lOFpKdakwm0KumNoPORUoh/m44ADZlAU6BqBSDJgChnZqKgUFSOOnVHMtEHEuFXkmMQSeySTxcRzwK+AfgQcNVaZAF8hiX1b68ByKm3a98oacAZbSVJEop57p/RtJo1YqqlxnAjBZGuhqhOTJQioziuooVIzmP/xWOGxlqfVZn0RoBBUL2aLSRlozE0zc1S8fkaVuUEmgRRKwAJhXYrnDYppNB5YBbSZhOPjYh4EvAvgb+RmX+we9GWmRkXiEdGxE3ATQDXfu1J2uYVlzqVLx9/3u4vzgA2TxCDoIZDkYqobDSnqOlqKRCTImc5RHViCvsX5YWs++JJlBrTBgZB4X5GSD5nKcgeVtWfpSgag8C9EZAsyJImqsUUHQOFoB5XIjFZR6C5rk1JnfMAjoeA2BvXSO1JRGywiKifz8x/tX76sxFxdWbeFxFXA/c/2s9m5ingFMA3fv1TMzc610gNo8agCmAQiB6FkGqqmzswCFZ6CuaVxBQihv7Rs2xrR8TehhsDGvevQROZXFwGO6cMinpp0QaJoK60vJGkOlMwvVGSIqRJD1LVtGlS+zROgJINNpH5jC7FU2HZL6o7Eom+Kg6WrpE6ulyKa18APwt8IjN/Yte3bgdeCdyy/vedew82kpt9hVTOI0MT7EBvrqBIRCrmHRAcA1pben8pxu3NMAAa45He1urBuXhMkTqxlaZODNDa1vckUpKKKKuVk0Q8NfUQ1dIbJQtzlcuiQKYGlEnxlBluVHOsq3RshQ2Ee1Mr0ickcY3UHrwA+C7goxHxkfVzf59FQL09Il4FfAp4xZ4jRZBT5z5SQCqElEKYACFIQ8xh0DUPVlwoVoKVk2qurDTpMZOiAHqxrO+Nrk6sv+kILYhJ8NmdR3rPNddz7W7kMWjSUSW1Z0PK0hsVEbRFoCmcJjW1TKqoiUSgFRIRpWraoJRAyxZlojKS+2INDfkVHIcUx0tx7ft/uPBb++J9jRUDOfZ17cth0kSkVltk54hUtNXiWth7vm1YGggLCEUq4iwQUoNKSCHZiZdEEAVpiADM2T+VpwUoBE8LUuFcOAl6aQ06I48UrHAGkeGGql5QYkI0DCJ7fYVF92oxdelNoZ5qoBFooYqaWKDpjq0CyWGtISK/nKjznl0CilvV/okBNp7Ud8ycydZ/S7O1mei82M2coa26j6uzP0dSYC9roKxgEDgiitwQaRCbgovwgCBNKglFL60xJemCOY8yV0QJAjHJEJqFkyJlUGQOQtOkMynSG0G0SxwpEWiVeqpl09RelappE/ZqU9W1defxn8322HBq3yESA0x9XftoMzme7TsmwOYK5q3Og54g5+3ul7SYt/uLM4DWNHsjk6B5cFsJI1JFhF9LNEXrSSgshCWRPlVmhMZOW0Kqon2DxNAlRSmDgh7lpCgipUhvBJ1BSKld80IL6ONe0waUispJGvJ2He3wcGrfIREEMXRO7eMsTJ2b/AKsznav5wLIabP7mCCq6WorzYd66p8umE3TmHlBsMqZBBEDhTABYCW5uivqxLIBs+A4ZEgiXUt/qv7W8iFY5SzW34rVkygFTXDXC1FEqlp6owLJxgq6+jMJlQRasWMg6SeW0f/8KqhHErv2HR4xMHSukWpAjv0Xurkxw6p/pCvH/uKMmERCqvV3LmwrEBhuRGuaRQP0TxFqDaYiUS7l2CkQJk2zVx6Ku3CLxbJ+EKTHdB9x3fBZ4bKoMvIQLKATTURKsVfDyLFPb1zmKXi/ROmNlQSaQpxBLYGmcS4sFO09R2rSvo8aR0NI0V9IRUyaZKa2I7my52bvdEFg3qIJckMGgLl3IcuGzKpd05AXTdqkgpWw55diF16xAx1I6gFK1YkBkhTPFpI6A8k+ZhPd2FULaFWDbsEGSKX0xhjRdblVCbTeqGqORPVcKDaWRDVtEuOVooEdp/YdEsEifLoyQCgEz3QFCEwsFOmCgGiuKgt4RWrfSiLQoilSr1TW8sKPeRUhJYvKpWYxIrLBl20qCHahE7qfXyEyHVFEz2QMaMSkar/G6Y0SFP3UQJMyqag5AkqlTJqjy5EQUkQwdBZSDRg6110B5DAv9Ve96RyRg3NRE4GQEkVicuq/DR8zpCBlkNY0tVfzjiZlUIFq3GnsP/YwojHcQFQjJVjoDEjqxFT9xGJu3Rc62QZR/zeRBbxoN1dSHzQh2lgRRc+6j4pEnIEFGiznbHcDh9BYqscgqpksiGukDo0gom/NzcDSS6o3w3hSstfQu4/WI+MKnPBoK00vLYGQymHUbDq1phGUKtHXf9R1rZxKpFW5+GoaM9MSQYaMJmai6CcGkp5Xi4tn/3Nr6ftVJCLVBsliN4b+wheQWPYHq8UKvzfDoDm/FNEzaXpjf7Ih6a2nslTvfT2o0oz4y3CN1OER9I9I0Xs8Mave9u8Aw4Zm4dRWROt7c0uQ1HPFvC2LoPWvE0PSQDnmHZHRAloji55IDTeKNGZGUyemucZo+kgxigw3JlGqr0KlDymKHA2SXfgQpJJn00SkaA2Ba7/IHESU3lhKoGkiR5KIb1GOQ2SultrYJ72jXMuYU3djDIC2UqT2ndUYY0wnoLOQAmA+0b/Z8aSygG+EwrJ+FtSJTRuiRYNIoCpCMQOaxciQSEJSk6j2TFEHP9H/EAyQiskq68QUxfCKBspN8xFT2eCromeSiGf3EdcUSm8EUQTN6Y3lsP3544DuUS4gYyXJ5FEYY8BJiQU8bSaj87g5E8PUPx2zjRpzjLbShKxFFvCSG/G0IRlXUnsmjUgVMdyQFUCLUk5k6yZRnZik1kIRkdIItBiQOKspUvsgNU54QyUHy0aKxInrzwSUTO1zRMo8ChGamhuJMUbMknS5xQJeMe7cPcoRbRTVMoncAFXOhQKW1D6RSO0+ZrFeWpJ0wRAJNFFjZlFESrJbXKhOjKZLl1NsKmjmGrLoWfc6HiAF+YIxpCR9Nlto0hs1g5aJntWUI0GWSfM8OBZS+2SISbKvq0kXPEso3ABz1tiqj2f7XytXZzUL8+wv+kDjXChJwwRdVE4UkZLdiEKR2qdp9Mus2FQQuCyqGJLewXRYUoglboCqOrEiLosgip6NksRRiThbUNzDolZ6o+AYZKrSG0UunhU5BsfhSAipJDWNY0WGE6qUwe6MJxfR05kYTmos4BX1XJxcoke9aTMI3jONkFpJmgfntNE/Da+tNLVMIKqREs11mgQW8KK5ziskK2hFmlgLEPToihmNiFDViQlEn2zjWdH3C2HvMwGy6JkgdVQSRcXpjUVDUpqU54jrgTexbL2/OTNvOe/7fwv4Xpbudr8H/LXM/NT6eyvgo+uX/k5mvuxS53MkhBQkmZ1TugRGE0oU8x3Q2Kov4kwwrsQC/qyk2XG0mZy3uo+bAgOLmLclvbSirfovHIZBVndVyrmwNRi7N1HSiKmJOk2UBzSNY6fUlKC5TkzmgKaJxrTF8rkzigavgdAGX4AseiaKpvcXaK6RAohlsfxTwEuBe4APR8TtmfnxXS/7NeC6zDwdEf8L8OPAX1p/70xmPq/nnI6GkMr+EakB0X2tUJSrsbgM9mYYTvY3m0BnAa8gp1kTQVNEjlS9tFis1bujMMZoK5lb27E33JhnzYJfli6oMERAUsLhOjFhnZgkIjWgEamiiG8lG3yR8YomPT2I3teZghGp1NRIPR+4KzPvBoiI24AbgEeEVGa+f9frPwj8ld6T2M2REFJJ0lZ9U8VymBgFBg4NnZhSIElDHCZNPYDCcIOzoIjKtbm74Ua0WRM9mzWRLtpKcwWRmE2I0jdUFvCT4MBWM9yYFNbfqUkVm5omKifahJZsKrhObKkTE7Bs2CjESfchFxv8IrVyUCu9sSICUX0N8Oldj+8Bvukir38V8O92PT4ZEXewbH/dkpn/+lIndEQUQfav5WnQBFGTsVDKoMoYI2KS7EDLLOAFDoMIxGSOEzEo0gVPLOYYvZk2Nc6FiigXgOKGqagTQ+QkBaLGnoMmIiWpXWgagTavx+6N4gI+giy1r/uoyNImJXViKjGJpu+VZkO0/5jZghDVytVJbyya2newVNcr12LnHKcy89R+B4mIvwJcB3zLrqe/LjPvjYg/DLwvIj6amb91kEme45JXrut8xTuAezPz2yLi2cBtwDOAO4HvysyLV9Bn6x6RimGSLMwzRa59hVIGM1brLpz9aDlL0hAZEEWkRBbwnT8HwNpdT2A6oqiRAkk9l8q5UHUMQmA2oWzAKYt2KQw3ZsXGSsCgOMcU0dlE1ZZYE4mgv1BvIBGTDXJQHdvO50LTuPZJxJnIZRF0Rh7dKZjaBwcWUg9k5nUX+N69wLW7Hj9z/dyXEREvAX4I+JbMfGSHOjPvXf97d0R8APgG4PIKKeAHgU8AT14//jHgjZl5W0T8Y5aw2k9fbIDMRs4Pd5jKLsaTNJE4kdQdjUckOPgYUBhjjDFKmgdnmyXCV2oB35thJgRzbUCsBBG0Kr2p1uNKIlJo6qSOveFGJVRpiAMaG3wCUiBOJNFO14kxpCY1uamaEitCiCEz8ug/Zk0EqX0fBp6zDtrcC9wIfOfuF0TENwA/A1yfmffvev5pwOnM3IqIK4EXsBhRXBKXtHqPiGcCfxF4A/C3IiKAF/Gl/9StwI+wh5AiG6zOXMpUvnJIkAgpVVqbwv4dNBGpISbJfFURqUjNeSCx+50EzoWzyrlQFZFSpAtua+y0p02J8Iu26u/61JqkUWQOo+Ymr6oTU3xwJXb1fYd7hKZKb1zRfbnXkNjVL2YT/SlVJ4YweiYz8uhM09WJKUathsJsIjPniHg18G6WROW3ZObHIuL1wB2ZeTvwD4EnAf9ikSWP2Jz/ceBnIqKxXGFvOc/t70Bc6p3qHwF/D/iq9eNnAA/mlwqe7mEpDNuDhLn/TnwKUvtamxgU1t+CRZ7SAr5KLy2Vc2GMJ/tHpHImFWJy0vQTYzqhaW6qSJFSmG2ArtGvJE1MNO4g6MXSmsxGWWI8IuuhpPJUVzigCT4JKrt6WW8q0XJXNV9JPzHNUZCJsyJ1YiVDUgL7c4DMfBfwrvOe++FdX7/kAj/3H4Gv7z2fA6/aIuLbgPsz886IeOEBfv4m4CaAa695ItHbtS/n7nU8ACkycFi1qf+CPzW2xKp6LlkvLYGgjlREJieN4JnPSOrEELkMKlImiZUmvW/aENnnFnIuhP7zHYZ1emP/cSXMc52+X7JeWmicC1WNmYViqjeCpIqSdWK9kZl4kBpreXMkuZSP5wuAl0XEt7J0Z30yS6fhp0bEtI5KPWoRGMDageMUwDf+qadnbJ++hKl8JTGMktS+BMliN6K/kIphIgVXYJUFvKqXlsIGH9YW6L3HHObuDnup6M+FxgIekNRzZVtpnAtBJHoUvak0qZiARKRFE0W6VOWo3d8zkehrTePXqzCFUNGaxhGR1DjaSqJyqkui68RkRh4FUTTpPmoc+HKama8FXguwjkj9ncz8yxHxL4CXszj3vRJ4596DNWLniwedyqMPOZ4ghr5jgia6AZDTk7oLtEhBlIt6zY4VkS6tBXzn49BmjQX8JEhvbLMmgshyTeg+rsq1T1HLxLLB1B1VCp7EvXElWTzGIIgeteY0RNCkDMruYqJhVdEzwS1XtV917OvEol6NFFhIHZTXALdFxI8Cvwb87J4/kW0pBu/NLIhITQJXNTS21ymIcgEM05O6j6lCZYwh7dHVm0G0AdAEYnJY0ht7R6UWEdF/5zHHE4LGzKulgXLnndKlj1R/IZXDqruIWKJRql5aivogheAZRLbyotw+heEGiETEuVpzxbh1GjNLkAl114mVI0NSI3XU6LK6yswPAB9Yf3038Pz9/HxkMmx3du2btzUbQ8NITgrba0H62XQFrfVfQEvquUB2AValDEpuw6qonCC9cXGo6h2R2oGYyN7tABQROYA2d78R5zgtIqq36BFZwCtqpB5xAuw+rqaXVoImHVPlXCjL7RMgEb6jyAJeGOnqTUMiTkLkXFitTozee1YF9chSClNw4vvkaDQvaivibN80vJg2JbuvDWDunyIkEVIiF7iminRJ7Op1zoUScwxF82BRrkXLub+T9DBpckOapu8X0wlN3yvJMRD10gJNw+NWKNI1bUiOr8xwQ9GUmEmzva9AVicm2AA5N253RIYIg6BOTGVXLxhTPXI1etufH0WOhpDKJOadvmO2JqkHkNQYwFIj1nnsFAopxYJfkoJHmf1BQBc9O/YW8INos6KtNBuFCqOcAZH9uaiPlCINkbXo6T3uvCM6BsWs5RVUWoiJ0s906Y2KHl0icSagVAJe0cBOc0TqkMgktrf6DjltEJ3TBQGGYZDsQOdG3/8/sOyWj4Laq3ZWkzapEGfAKIpK9RY9yqbM5Szgu6cMskS7OpPTCV00pnsEbdQ4VA2jZjEi6P0VbUUK6nFjbdeuGFeCalwFlQw3JkR1YgpxokpvFImzSnb1gjFL4hqpQyQbcbaz6JlmQnBBa0BMnaNnsBSX9x5zPqHprz1MZHR+v4YNmkBIRUyylEGF8FGkC2auNBEpmcviBJ1rpFRumwDZ25s45yXyLaiRUjgXnhu7NwrRt0SkBNdakNxvNItyjfCNeaeOQGsNWU2XAkl9UOrSG3uj6n02oqkTa9RKhRHhGqnDpCVs990ljHnW7RD2TkMcRoazD/cdE8hpmxSl8ijSpCRCajzJSmC4MQ4npfVXPYkYNS0Hh4nofAnJNi8pg71RWcBLooiTxNBGWiMlOLaS2rO2kizIQhaV05hNSOz1pw2N4YYsDVFkuKEQk5KaNpFlkqox89Q041ZJRSyqRyykDotM2OmcbjFN3dMFgeUi2T3Hfpbk7QMMO30bHQO0YYKpdwH0KLGAB40TXsQkEScqcabqpdW999kwLSmDvalkAY9mrjr781FkISw4ZwEENviS2jMQ9maqsQkE1IlygSYNEYTHQGWvr4jOIuopVisVsRoWUodFJmz3N5tQoIhI5TCKbG5XOsON3vUbw0RufKHvmEC2HZmQQhA5UdVzKSjVSwuRBfwwA503QdYW8L1ZzCYEKXiDqimxxmxCIiImdLVynQk0VtK9M1zPIRPUClSCp5LhhirSJRMmkgIITaSrGhm0UufuwTgaQqolnO29MJ9FYeDWvX7jkY9bb6tfRXrQmpwEDZSHsftOfE5nyaF/tK8N/aMxAMOGqu5IEZHSpQx2py3Rru6MJ/ufB0ILeNVSJAQiQpLap+onNm9rFueKeq62koiepa9c/yuCJAbRhv5OwaBrSqyIdI2qwiN0Zh69aYUaMxfUZQk2mzg0EnKr70m3bOgKFvsguRlLIlLTjuZ6NoykwnBj4wndrxU5nZBEpNowSSIcq/GsJCKjinSpUga7M8CA4P1qc//55kyOVyyRqZ4MLKmIvRlEAk0RiWhIonI5bWpq0BQ1R9SKSKnSEFOQTi8x3GhNVit37BszyxqkDP31WdQUJE7tOyyS7p+9bBCK2/sgciaazmouwJLUvqG7c2EOA8PWF/qnceRMTIIGytNJchQU2E9PIjt/GGKYSMHKSVXPpeql1fu4gibKlees2nuPLWpKnDmJojEnuouT5Y7Q/3oQbJWxP09EUZ5B01NN0kC5+4gL0jTE3qK6WhqiZL7CiJQiI6ogFlKHRULudD6ZB1DsNASt/85IBAxb/S8U06yLBncWUjGMkjSWtnlSUm+ymk5IFqWr6UndF+eRkyTKM6BLGezNgCZlcKB/al+Mk8RaPwckdX0gsICHRUT1/iy0kZwFJkSpaUosiXQNYynnwkpiUhE1yWHQRboU2HADXaSrGOmGvIdHBrnVOcw+Ns153JpgAyOJ3Okfuh2Q9HQIUaqB4oY5bmucAAFy8wndx2zjye41XTGe1KTLjSfLOBdGjIyKVEzOaq4zCoMUkNQLaizgl7Tc6LxZsfSR6jrkI+MSIrv2zlGOaCtZeqOq91dvojVSUCMV04YkxbOU4YaqTkwR6RoGzVznuX82UEE9koQjUodGBjn3bj4ZIteUWRMJHvoXJ8rqxIaAlWB3//TD/W8Y0w6DYidr0DTk5cRTug+Z00lWioX5oHHtq+RcGKGxPx8UJhaiy322ne4GPOQMbSJ7jzvMomhMMedCQfQ/5u1Sx8CRLpHhhgpZpEsxpmSLUTCm6cGREFKZQdvpnMIxiDqXb0+aTtjRf8xsqakTO7vdv48UwDj1v7lNE4PE7lhTXJ4nHuo+ZjtnXtB73PEkgyBVTFXPJanpSoHZBDoL+FSMO10hSHPdkKTOLiURgnFVhgiiSITKHEQjImr16KqS3khrtSJdqtS+leA8UMy1qI5yROqwSPoLqWiEYAdj2JglF2BJdtBqpXF9am3pMt6b4Uz/MTc3JNefGIbuaYM5DORmf8HDvKVxLpRETSAEFvCqei6FMQYs9VzR+fKcbdZYwOekqS9XzBWNUEdltDD2N8YgVgSKZvWaGinF/dbOhesxBREpXVROVSNVxbmwpiBxjdRhkUF2FlIZjUhFPwdNx+pB4aa1MxKKGqnVihgVNzfBzX17Z8lX7szQGrnZd5ETsNzcetdEbAoEKuteWr0jUsMGTdI4d5LUSKlQWcCHYPWYoXHtU0RRCU0qU4KkIa+u5kgg0EBjAa+gDaV6aUlobanp6s28QwpEj2Q5rjLcQFQnVhBHpA6JJbWvd2HewCAQUk0kpBSEKHUBWOqkuo8pEH1zQ1MndprY6TxuDAydxRkAJ7c1O5rTCdrmE/uOGROr6Ul9x2SpOZI4F8bUPdKVqVmMRmjcG2OYUOxZqSJSmmbHmqicoj4IRKl9IudCxbUrQRbpknDc0xApZrihoNRkFzItpA6NzGDVvUYqQbAgiRbL2J2RpPZF0zTkbYOmRkohUOdcLOu7cxY2BQ0dNx/uPuYw70gWI23zCgbBDnQ78bT+Y+YsqeciJonwkfTSSk1qX6TGcEORe5WypsST5CKusOyXLWvaSpTiKVpAK5wL0RzfVGwydh9xjUL8t5UktU+WhtiaYL4VBUk4tW8vIuKpwJuBP8lyTv414DeAtwHPAj4JvCIzP3/RgQQ1UgA5Ci7A00piDDEIHAZjSHIlqAvZmEHwfkmOwdiIlaCOpzViS1Fn8Afdh4zNTck6dwLayc4RKRZb+d4LyNx4EiuFkJookzI4hMZlURXpWgnSnStawHenjYSgl1YOIyGJTIrSG+1cWKaBMkKHQcn7NdE/ta+oHnFEam/eBPz7zHx5RGwCTwD+PvDezLwlIm4GbgZec7FBMoN5u3PvnCFpK4HgWQ2aiJRg3IgkRsEuzmqk9x0zhpTY1ce0IlYC05G2Q06C84uz/Xf3N7YXg5DODK0xdI6gqQw32okna9ojXnE1KXCBmwTpjaCJdCmiJoAkepZt6avWfVzQ1F8pamcHNGnUE6SiRkohUocRZkXKt6DGVdBLDFjMQQTHQNVLS+beKEAjUmsKEgupixARTwH+DPDdAJm5DWxHxA3AC9cvuxX4AHsIKTJosyCFYRTsZAlOioiURaQUQoqcIQQCTZE2uRoZRMW/sSOwrI/t/imOUyM43XdM1rnw2313tgMYTz6h/2Jk3pbs7rfxClJU09V9TJHDoCIalSJbeQZq1XMpxhVZwMvSpETnrUJMVqrnAke6lEv8GpX0WhK79u3Fs4HfA/5JRPxp4E7gB4GrMvO+9Ws+A1y110CZwU7nVLEhUhKJyLERgvyFJhA8MSSDQki1QXNhV4jUsZGz4hj0Nx2JoYEgbTSmlWSHMHhYUic2nPx89/zy2D5LClJ55ukEuSmwEN58avcxGxoxNcTUvTm1Kl0QkNVzlbKAp79QD87K+lNJSJGleGdU9VyArv+ZYMxSDZQVRJmZfgmbTTymn/1G4K9n5oci4k0saXyPkJkZFygoioibgJsAvvaKTXa2+i5yIlKSgheRkhqpURA9i0gGgU35PGrqxMaNufu4MeRS09WZtjNJzq9xWxCZnRrjTv+aiNjZITYE43J/d1fIOHGSSZFj31a0K/rXtc0bX9V9Jz6GiWnjqV3HhEVIVUkZDCbaqm//N6hoAS84Bqk5BkjqxDSbSzn1t6xXuNUBawOHQlEeSe3VSAruC49/6fBYsdnEXtwD3JOZH1o/fgeLkPpsRFydmfdFxNXA/Y/2w5l5CjgF8Cee8uTc2urck0ckeCKSQdFHSrTjpBBSw9Ak1urTjkZMKlI8x2nFIBh3Eph4xLiibfWPHI1bW/37iQ2NsfWvE4uTZxl629UDG63RnnBxL52DsK0y3FBEeaYnSYRUpZRBW8CzWMCPneebs6aeC42RR8yUci5UNCVmruNcCIUiXQUjUgmkolos4noWj4YReHNm3nLe908AbwX+a+BzwF/KzE+uv/da4FXACviBzHz3pc7nwB+jzPxMRHw6Iv6rzPwN4MXAx9d/Xwncsv73nXuPFWxt90+7UQgeRVofLOJEwajYcXJUjnGaGQTHYDojiJoMySRIPxs3d7of2xga0xfP9Dde2ZgZv9C/MfFw+pOMJztfu4aBTei+eFo94cnMVwpqY554LaOgTkwieEJj1R45EZ1FROZcywJ+Oikwx5g0hhuoFvu1nAs1fb9W/RvytkZMmyITizo9uirSO7UvlsaNPwW8lCWg8+GIuD0zP77rZa8CPp+ZfyQibgR+DPhLEfFc4EbgTwBfC/xyRPzRvMQeJpd6Nf3rwM+vHfvuBr6H5Tb19oh4FfAp4BV7DdIyOLMt6rTeGYWAUKFY6AOE4BIRkbL5KkTqMKREVEvmGikRqdPUPxUT4MTJ/umCw9jYuKJ/OtPmk04znugvUk/c95+7L/jHrxrYuPaTfQcFdr7mWayeeGX3cdsVz+g+pgxBuiAgsSkf2gyCcaOtJJGuUDjLtZVkXFrrntoHSBwGozVN7eysaQWAJDVb9H611t/+fCWqkxMjSO17PnBXZt4NEBG3ATewBHHOcQPwI+uv3wH8ZETE+vnbMnML+O2IuGs93q9cyoQuSUhl5keA6x7lWy/ezzjzauRzX9TY/famibJfs44+o2VICggVx3aZa/dhaWiOwUow5pyhGbcN3S+SDTgrMImZW0jGfWhnYO58frWE+840WucT9+HVzO8Ov9d1TIAH8nfYbp/uPu726ovdx1QRMRCCUNcQAjOXGCTjBgNDCPoWKgxSGBlRHINJcgzGS97z/kqCkUGQhzgJ5gqaYzDkwCD43Ab9x/2Ns+/qOt7hIFknXQPsvuHcA3zThV6TmXNEPAQ8Y/38B8/72WsudUKiBOz90TL44k7/i5piYa4REKJxMyS9c1I07kpgU54sQqI3i4joPizbAhv8OYNZMO7ZFqwEJ8IX5v5z3WnwBYFd/YPzNmc778I3Gr873kvr/CnbGh7mD3Z+t+uYANvzQywbfJ2RFB0had0QgkU5MYgs60VCKgZCcGzH6J+tMgiFbyUxqTgGCoE6xCgRJwSMKZivYK697weHQeaBI1JXRsQdux6fWvsqHEmOhpAiOLvqOxWZOBGNq4gYqITUShSR2hEs9pto3Llpju3Zlebc2hZM9uyK7kKqAV/Yad2TR7da4wutf3rMA8Pvc3boGzlpND63c3fXMQFWbZud+aHu42ZukYp0X0X0PwY0RVKahblirirBozEcGRgkwncgJIJHI04GFGYTg2Rc1TFQCDRAEpEaUF0P6nHAteIDmflo2W4A9wLX7nr8zPVzj/aae2Iptn0Ki+nEY/nZfXMkhFQmnFn1/UDXi8ZoRIRCoK0yJNEYhTjJDASBCHaa5hicFaRBr1Iz7plVYyU4Bp+ft+ktpbbY4aHhwa5jAjzIZ9laPdx93CXK0/fTkDRJ5EghogBJ5AiWlKb+Y2rEiWRMRtlcVce2+5gxMorSGzXvmUacqY6BRJxI7BA1QkpxDCQbSzX5MPCciHg2iwi6EfjO815zO4vZ3a8ALwfet27HdDvwzyPiJ1jMJp4D/KdLndCREFJLRKq3kEIYjek/riL9LNEItB2ZkBKMmdG9hgWWVLHexyCBswJlstNgW/CGPbya2RGkX30uHqR1NvLY4ix/8OidGC6JL+78HqvOka5kxaoJ6oOyyUSP5iavERGS1D5RpEuWgic6torokeIYgEacqISJKhqjEWgaQV0pcjQwyIRfNXqX2Kxrnl4NvJvF/vwtmfmxiHg9cEdm3g78LPBP12YSv88itli/7u0sxhQz8P2X6tgHR0RIZcJW5wV/pqZGanXwnM89x+1NikTE3DTHdqf1twxtuYzbm22JkErOrrL7uKtMTguciR7OLXboXB8UyR8Mgr5MeZqtlaBxbjtD6y6kmqQ+qJSIEkU3lCl4dSJSmhopXd2RpiFtpciR6hhoojEaE4sqkSPQmFhUjEclmlKYzHwX8K7znvvhXV+fBf6nC/zsG4A39JzP0RBS9K9jSXSCR1IfpHCWS1VqnyYaoxA8K5WQWqVEpJ4WuDfsZON09q8POh1n2I7+IuJM9q/j2Wln2Jq/0H3cVTtLZn9bXlm6nAJRCp7GFEIneOqktdWqO1LVmkjqg1Rpo6JjIIkcCZ3weqOKHGkiXRWlVEjW4UeNIyGkWmrcyqqICNAYIiSaSJcirQ2QGCKsMiVC6uyqsRLkeD7c+i/Kd5h5OPqnij08PMR29m9ye2Z+kKRvBG3VtpkF6XKZW3TIDDg0qqTggU5EKBr9DrFRKCIlMkQQOdZJjDFEx0BmAV8ocqSyP68SOQJdpKsiisDDUeNICKkkJBEphTXznIp2tJqoSUvK1AfBUsejSJfbEkz2bFtJ6oMejv7CZCvOcjr6R2Mebp9jFpgXbAtS8DJnjdFCNRElWpjr6o56I4ocidLadIYIddzaVFEepU13bxw5qhQ5gikF52yhJIVzJBqvgqPGkRBS0N9ooBGSaIwuItV/TFW63E5LieGGwhBhzuSsoD7obM5sd64PAjgTp5camY5sxzZns7+z3E473V1IZTZa2+5+DEhN3dFC73EHoUOTrb9VtTFVam5CttivcwxUdUeVHOsUvY7OjaugWuSo/7gFIzuiUpijxpEQUpmLE1xPlvqgrkMCOiGlcKxbeihpXOAUaW1bTVMftCWIGpxhi53on4Z3Nr7YvfHenFtsNYFFd/sirfUVk8mKpmjuis6xTpXa1h1hHU+ptLZKNVKqxb4oBe+41x3ZsU5nU66LdPVf6A/SzbBauEbqkFBETlRCanGs649C8CxGCwIhlSkRUqc7L8phqQ8609kQAeB0PMzc3bGu8cXs71g3ty2NY93qi7Ts/54hGDNlSQZ1jBZgsPV3DJLGsWNsyKI8vRli1BwDNiSip1KvozE3NOOKlmpTCuoFC6XLgUakjpJrQU2y7MwfO49bIaVzgetfxwOatLZFSPU/CFvZWAnSpM6w3T1qMMeKM3G665gAZ+KL/euDErYFzV3n3GJn1d9oYUnBq+JYp0nrU+06hqJvTCHrb1nkSFUjJao7kogIYeSojJhkYExBjVShdLlqRguqFDyF6BmOgXh4LKRd+w6PTEWNlCb9TGW0oIlIJTuKFLxcsersqgawFf1rY+aY2YqzXceEpS+Rwmhhp/U3m2g5k5Ioz46o7khVy1QpeqQZV+KAVqlprMr6W1V3ZMc6nWPdMU+X0zaj7b94rpQqpxF9df7/u1Gsl48aR0NI0d9dbpUpsv7W7Jcr6oNWpMRZbosdiZA6K4gczcxsKYwW8gxz6y/QVm27u/V35qypO0pl3VERRGltCotulfW3zMBBUHekahqrExF2rKvmWFclGqMzxgjRMdAICcW4CtFXU0Y5te/QSPqnti3W34qIVG8rAGiZnBUYIqxobAlSr7Ziizk61wfROCPodTTnlkRInV09JKkPWrUzIsc6RURKaf2tiRr0R2en3R9bfy+Cp/+4o6qPFKI0PEUaIpPk/KpVx6NZUlWKHI2CcwA0gkdlCqFroVyLxGYTh0Zmdk9tW2qkNPVBTZEuJxA8Kxpb0T8SsRVnJUYL29nf+nuVO+y0/pGuVdumZd/3LLMVdKxToFiQhmZc0WJfVXc0DIpmtJoFtCRlsJhjXbXIkSoFrTfKyNFxFz26yJHmvqARaP2jUiXlSCJplXPUOBpCCrrX8qSoPmgnG63zojRJdgQ9ieZYsS1wrNuKM6wE893J/vVBq9xhbv3FyaptSeqOQNXvqE5bPEkufEHr797zldUdMWrqjgo51qnqjqr1OjruDV6VIkplttAblZCqFDmqVM+lph2DY3F0hFTn6FGCpH/QDjOzYFG6Ezv9+wfJjBbOsBJE0OZ2VhKRmiUGDtsSwZOCc1aLpsFrf2z9raplUtUd6USEJnJkx7o69UFDDhJL8UqRI4CpyPu1jFsjcgQwhCDSFfUESeKGvHsSEX8T+F6W4/VR4HuAq4HbgGcAdwLflZkXDYu0TLY7LyBnUZRnSyB4kiax6J5DY7SwnadZ9U5ro7HdFBbdM631j8pl7kjqjipFjhDll2tS+1SuagLzBjRRk4hBUnc0iHooqSJHinQ5VcqgJLVPFDkamSTjKuqOVFE5Xa8jVTSmTrrcqEoZFAgUxZ2xphyx/flFiYhrgB8AnpuZZyLi7cCNwLcCb8zM2yLiHwOvAn76YmMlsNM7GsNKIqR22O5utACwE1vdBdoqd9ihf0Rqp51mJTFa6J+ClyLrb3IuVnfUnyA0UR7F7qvKsU7V70h0XO1YpzPGUEVOuo+JMhpTJypXyaLbRgsawQMq1z7dfM3R41KvphNwRUTsAE8A7gNeBHzn+vu3Aj/CnkIq2e4sepJkJ/qnn+3EdnfB02jsCEwGVojqg3LubrQASARPy1nYNLZW9Kg7lVLwlLVMRcTkEJqmsTrzAk0PJVWvI8l7phIRhWqkbNFto4UvjV3DVnxJ7TPAsdhuPrCQysx7I+L/AH4HOAP8Eksq34P5pRXxPcA1e44VyU7nKM+KWWK0sB3bkvqg7eyf2tdyZiUQaHM7Q3auD0pWmhQ8VqK6o1oiSpWCp1nwK0o361h/Lyl4itS+UZTaN8nqjnozxCiJxqgc6xRzBU2kSzdXTTRmFAkplejpjSpyNIoalNdK7YPoPG7F+Jbtz/cgIp4G3AA8G3gQ+BfA9fv4+ZuAmwCmeEJ3UwSZkMrTEiG1IzFE2JGMq3KsU0SOFkMIlehR7LUo0pmEKXiqfkfH3Po7BFEelWPdyIZESKnMJlS9jupEY2y0MMiiMZpNq0m0jFaInkqpcgrBc25cs1Bpy/mgXMrV9CXAb2fm7wFExL8CXgA8NSKmdVTqmcC9j/bDmXkKOAVwcnxq7tBX9DQaM4JoDFvdjRZgET1NEuURCB5Z3ZHABU8aWK6001LEaCE0DVOVTWNLNaOVLEo1qX2VIkey/kGiuR73dDlV5EgR5YJCznLUSpUL0biuj/oSdu27OL8DfHNEPIElte/FwB3A+4GXszj3vRJ4514DJdndwGHFDjvZ32hhzi2aIFVMUcvUcpY0eM2cSfofA43oaWgiR3V6Zch6KImsv1W1TKoGr4q6I43DoKqPlKjJrUL05cAkEWjFGryK0uVUKWj9x1TNVUMVZzmoFzlSzFdxXCvKkUyn9l2UzPxQRLwD+FVgBn6NJcL0b4HbIuJH18/97J5j0brXCCWNWVIfdFbkWNc/DXGJcolS8I5509gFhYGDyllOVHekSMGTRbo0/Z4kttci0aeoO1I61lVp8KpK7ZOk4IkiR+NanvQfV9VDSePapxI9vXG63PL/14hJwaBFsdnEHmTm64DXnff03cDz9zUO2T0Nb5U7GiGVWxJxookctaXfUfdxV2hEj+ojpzJaUNzc6lh/D7EhavCqMBnQRKQUjnXnIke90/ACTR8pVa8jVeRI0ZdIZbSg6ktUyWihkrOcKl1ulFl/90c1V9kxUCSBEN3HVYjTw8ARqUMiye51R6vUWH+3nCV1RwpxRjZR09hKBJoGrxoDh+Nu/b2kiYmOgWKRV8yx7rhHjmT1QaL0O51bW53IkaQ2Rhg5qtGifEESOSokeEAlqG04AZRrEnNQjoSQIrN79ChzJel11JqmhxLZBHVHrVjdUSFU9UES0aOzKdf0UFKIPpH1t8hooZJjnUqcKCJHypqjOtGYOnMFR45AF42YitQHLePWEWhLemP/cesRNps4LJLWPXqUrER1R5rUvlp1R8VS8CSL0g1N9EiUgqex/t6Q1R31H1MjpEZErn0ixzpVWlslowVFupzKonsSRXk0qX2axe4k2axxfZCyPkgV5ek+JjrB0z21r+9wh4YjUodEkt2jPItjncKmfBbWHfWmWuRI1chQk4KnqI1RWX8rDBxUdUcSo4XQGS1IhFQqomea/kGqyJHKaKFSXyI3YrWdNrg+CEQpnqE7BmZZfToidWhk9yhPyx1N09jcQaOxq+n2GosGlfX3IkxqWH+rmsYOIhGhOAaqyJHS9loxZqXIkcqi+7iny8mMFuwsh8pO2/VBmshRpehZVVqlvfwDciSEVGay6m4M0TRNY2miFLxKZ5vqqi5JYJCNqxI9vYkYGCW26oVc4Bg1NuVslGnwOjBI5qoSkzrzghpGC8sWkKo2pk66nB3rXB8Ejp5V1WaVVrYH5UgIKcjuoidpS91RZ3TW35XQpOCFYAGNLK3N1t/TcKKUY50qrU3VP0ghejTHQOQGWMhdTtGTCGo1YlUYF4Drg86N231M6ggeqCWobTSxcDka8kbE04G3Ac8CPgm8IjM/f95rngf8NPBkYAW8ITPftv7ezwHfAjy0fvl3Z+ZHLvY7H8dCaiU0b6iksUUpeKWsvwVCapg0tTGSiFQdx7oB1VwHWd2RqsFrb5YeShqjBYXgURgthLCWSRKNkUWkBMdAVB9UqWmqKsIxFjFEgFrpglBITBYVZ5ch7HAz8N7MvCUibl4/fs15rzkN/NXM/M2I+Frgzoh4d2Y+uP7+383MdzzWX3hEhBSFrL+riSiV4Klie62pD1LYlAejxGFwFEXPVHVHmp5EmqiJKnJUq4dSLaMFhThR2Wm7PkgnIjQOg92HBOrVSHUfkzrueqDRPEV11OUwm7gBeOH661uBD3CekMrM/7Lr69+NiPuBrwYePMgvPCJCKrs3js1j0wrs4qjaA0rEiag+qJL1t8SxDjvW6VzgVD2UNP2eFLbXKotuRbpctciRneVqRThUi33XSCnFZH9sNrFwmVbhV2XmfeuvPwNcdbEXR8TzgU3gt3Y9/YaI+GHgvcDNmRdvdHtEhBSC6JFT8FRGCyFaQEvqg4ZJUiM1xiSqZ1L0+dnQCCk00b5J0kNpKNVDqVJfIoU4A52dti4i1R+FOKlWH6SK8hx3FzgLnnPvlwb3kbokroyIO3Y9PpWZp849iIhfBr7mUX7uh3Y/yMyMiAsKgYi4GvinwCszH6kFei2LANsETrFEs15/sckeESHl6FElAweV9bcicqRyllsiUkWMFkR1R8HYPa1NGTmy0YIqXc522hLBg2auyzHoPqwuIlUopauaIUKVtDbQzVUl/ByVWsiDxTMeyMzrLjxmvuRC34uIz0bE1Zl531oo3X+B1z0Z+LfAD2XmB3eNfS6atRUR/wT4O3tN9ogIKTju0SNND6WplPW3KsqlahqrqjvqzRCaxb7KsU5lJ67roVTHaKFSupxmBzpKiR5VfZDqGCio5AJXzRChUlqbaq6V5luRdvhH4nbglcAt63/fef4LImIT+EXgreebSuwSYQF8O/Dre/3CIySkqqAycFBEY8Zy1t+9645kvY5U9UGFHOt0aW2Cc1bmWKdp8KpIl1NFjqZQHIFaznKuD1JGOGodAwW1XPs0TCKVWkVMVhRmyWVpyHsL8PaIeBXwKeAVABFxHfB9mfm96+f+DPCMiPju9c+dszn/+Yj4apZD/hHg+/b6hRZS+0azAx0ikwGV9bdCoE3Die5jBpo+UirHOklEKgc22Ow+rioiVc1oQXE9qOQsNxYSJ64PqiV4QFcjNXphXiqtrVrKoFk4YGrfJfy+/Bzw4kd5/g7ge9df/zPgn13g51+039/5OBdSohS8ImltITREUJgM2LFO0z9IldZmo4VzEan+qBqxqtKZJHbarg8qZ4hQJcrjtLZ6aW3Hfq4l1VlcjtS+Q+dxLKRUKXiDxMBBZf0tqeMRiQhVqpxCSKkEmkrwyASaoEeEpB/P2nql/7iaRWklO21V5KhafVAVBzRV09hax6BWJELyfonE5Lmxe1NproOg5r+kHMnDj0hdDo6QkOp9mgyS5qbBhiZdTmT9PUb/dLlBIKSGGJkUcxU51m3kCYno2cj+KXgqJ7yNnCSiR5UupzBaGENTI6WoDwKNiFDWB2miR/3HrGaIUEXwgLIhb39UUZ5KIqLSXBWCB3S1ctU4Ln7ce66uIuItwLcB92fmn1w/93TgbcCzgE8Cr8jMz69dLt4EfCtwmqV461f3nkb/6FGIIlIRk6zuqPuYMTFKeihtyOqOuo8pikhNTP3FpMr6W2S0MMlSBjXpcoq+RKPKsa5Q3ZFKSFWrD6oi+sBRHgueWnM9J3gqbQBYSy1cBrOJQ+exrNp+DvhJ4K27nrsZeG9m3hIRN68fvwb4C8Bz1n+/Cfjp9b970n0HOgaNgUNMIsc6leDR1EipRE9vBmUjVoFNdyWjBZX1t8poQTHuFCGpD5I41qFLETruLnAqQ4RKUZ5SC3PXSOmMJgpFeSq9X1U5BjpqbyGVmf8hIp513tM3AC9cf30r8AEWIXUDiy97Ah+MiKee82Tfcybdxckg60ukqjvqzRAbGutvNFEelWOdphFr/4gUqGqkhlJGC5PEzKWanbZgUGqlimlqr6qJvv5UExHVonIKjnta27n/fxWBUuncUrLYn1ec+f446Arzql3i6DPAVeuvrwE+vet196yf20NIRXcDh4iJYRDUm4isvzW1TJq6o404KUlr2xTUB4Vo3CUi1fcCMTCwIXGs00SkVGltqsV+lbS2IXTpcqr6oCpRnkqCB2qJiEoCTSl4JEYDhc6DSmISNBsrABG9z4OasR2bTTwGMjPjAGdMRNwE3LQ86t/vSGX9PcaJ7k1jl3Hr1AeNTLIGr71RRaRURgsq629NWpumEetxF1LgKA/UEj2VRESluYJQTB5zwQO1zoM6gkd0PRSMeRjYbOLCfPZcyl5EXA3cv37+XuDaXa975vq5ryAzTwGnACI2sr+Q0jRiHWIQCTRRCp5i3NxgEqXL9SZERgtL4mj/iJTCWS4ISbqcqhGr64M0zUKr2V7r0hv7j1lORBQRqFAzBa03laI8lQQPKOfbe8DO4x0CiSNSF+N24JXALet/37nr+VdHxG0sJhMPPZb6qOUG3zu1TyV4TjB0tlU/15NIYSmuiEhtsCnrd9SbIUOS1qaw6F4apirqrjSNWFVCqlJ90CiKmtRL7dOM2xuloK5yDEDohHfMozwWPBY8AIPoGFTEESkgIn6BxVjiyoi4B3gdi4B6e0S8CvgU8Ir1y9/FYn1+F4v9+fc8pllEMHauZ4oYmIb+9UHTcIKhc/pVMDBF/75EwSipD5pykqXL9WZpnyyInokavKoc6zaKpLWp6oMGakV5qgmeKiKi0lzBaW1QKyoHqjRXixOoI1AU//2CASlI258DkJnfcYFvvfhRXpvA9+93EoqI1BiTxGhB5Vi3kQLRxyRp8LrBZnejBVj6EvVGlS6nbMSqsNOuVB9UzRBBlSJUZcFfKQUPikW6CgmeSucsWPBALcFTSUioztlqJFUtMvZH/636AxHdG8dKrb8F46p6HWmsv/untYHQaKFQI1ZNlEdUGyOqD7ILnK7Pz3GP8lQSPFBLpJ8bu/uY/YcE6pgMQC3BA7XOLwWq64E5mhwJIbWk4Z3sOqaqaexGnJA41ikiR4PIaEHVl0gVOarSiPWcs1zvm8ViNtF3TNCJCEUaIqhS++oIKdW4Tmur5TAIFjwWPAtVNkCgljhRnAdFNORX4NS+Q2JZ6PVNbRvZYDOu6DomLCl4kvogBEIqNfVBi2df/4/1RmcTD1iEiSLKM4UiZgIbgruQqj5IZjZRSPBYSCmFlChNqtAiR7EBAhYnUCv9zOJEeB5ohpWleVbDrn2HRBBM9BVSQ4yayBGbkjQ8VeRII6QGWVpb74taREjstEdB+tlitNB1yF3jao5Bb1THAOoZOPRGmdZ23K2kdb206tTcVBI8UOdzC7VSR1VUEzzd1zKdxzsMErv2HSLRve5oZEMS5VE51o30Ny9QGS2oGrEqUrqGCMkCWmf9rTgGtUSEbKF7zCNHoFmQKSKIYMEDtaI8lQQPuFYOdOeXgmqfMbPg1L5DIhi6u9ZNTBLr743ckJgibDAJhJQmXW5D6CxXpT5oHDSGCBuCq7pK8KjEWaUoj05I1Uprq1Jzo1yMWZxYnKg47tEYFUrziu7HttD5uptjoKOOhpAaGDhBX7OJKSc2BKl9J5bEtv7jCgTPgKZ/0MYgikgNitQ+TZRHZXtdKV2ukkADmBQ1EdUiUiLBc9xrbioJHqefLVQT6lWQpeQWqjmSnFuCMdUkjkgdGkF/+++RSVIfNDJq3OVEznKq2pgq0RhtREowrjDK05tSFt3COp4qi10LnpqCp4ohgAWP7rNQxfYb6h1bBZpjUOM68GWkzSYOjcjoHj0a112UeqMyWtgYFM1oNS5wS2pf92E19UGoHOs0i6epkGNdpbS2SoIHhKl9gjF1Ubk66Y2gs1VXUC1VrDfVBE+V4wo+t6CW6FNjs4lDIghOdO75NDKyITidN2KQuMApUvDGCEmUR1HLBKqIlGbBrxI81dLaqlhJVzIZUNXbgC2fVZHJZewaVIsYWJxYnIDy/KpxDAoFJR/BqX2HSNC/39FIcGLQGC30jkgFcEJwt4jQRKRG0QJakYJXrT6omuCpZDLgaIzNAKCOoAaLExUWJlrhX0WcQE2BUok6Z8LBORpCKoKN6PuxHtHUB20MIakPUjVM1Vh/i4RUsbS2SlbSEjHZf0ip4KlYH9N1TAseC541lWrlFFQ7DxQoxU4lcVJJ9FXEEalDIqC/kIqQRHlU9UGK1L4lItV9WJmQUpkXVIrylKo76j7iwjjUEjzHvTam2qK0kjhRUC0aY3FSS5hALXFS5XNb7iRYY7OJQ2IATnY2W1DVB6ksulX1QYooj8xoQSR4ZE54/YctlYI2RJaKxlicaOZaTZhUWZgrF3iuN9FR5RhAIRFBnc+tioo6KrHZxKERguhRhKbuaBw0C/NSRguhWZRa8DgaAyLR139IQJciVU2c9KbS+wUWJqA0HSl0DArNFWqJEx/bmrRjEJI6GkIKmDqvHKbQRWOqpHSp0tpUPZQUZhPVam6Ou+CBWtbf1QTPcY+eqXBKl/AYFFpAVzpnwcfW6Klzhh2coyGkAk50NtgLatUHbRRKa1MIHtAsoFWCp1ItE9RaQKvOr0oL/kpzVVFNnDhyoqHSOevjqqPS50tBFJQkmTabODQGYLPzp3qUiQhNWptC9A1YnIAuGlNlAV0tVaxSWle1lC5HOLzYBR8DJcd+wX/M//8gWhsIxnw8EhFPB94GPAv4JPCKzPz8o7xuBXx0/fB3MvNl6+efDdwGPAO4E/iuzNy+2O88EkIq6C+klv5BmsV+pYhUJcGjisZUcqyT9HsSpTeeG7s3FicaqgmTSgvoaovHSse2kjCpdh4oqHRugd8zLUkefiTtZuC9mXlLRNy8fvyaR3ndmcx83qM8/2PAGzPztoj4x8CrgJ++2C/cU0hFxFuAbwPuz8w/uX7uHwL/A7AN/BbwPZn54Pp7r13/4hXwA5n57r1/B2x0LrJXNWIdC5kM6Hoo1RE8UCtVzIKnTu0Z1BMnCiqdsyoqLR4rCRPweVCNSu+XClXPvmoklyW17wbgheuvbwU+wKMLqa8gIgJ4EfCdu37+R7hUIQX8HPCTwFt3Pfce4LWZOUfEjwGvBV4TEc8FbgT+BPC1wC9HxB/NzNVFJw+c6HwFikiRC5zG8lnW66j7qEIhJXKsq5KCBypDhFqRGImQKvR+Qa3FSKXFo7QJaaH3TEGl8wD8foEX/KAzTepOlXmex2WwP78qM+9bf/0Z4KoLvO5kRNwBzMAtmfmvWdL5HszMef2ae4Br9vqFewqpzPwPEfGs8577pV0PPwi8fP31DcBtmbkF/HZE3AU8H/iVi/2OiGRz7Hu4pY1Yu48qSj+LWpEImdGCIxylzoNKC5xKUTkVld4vqLXgr3Zse1NxoV9mYV6MStdEBVVPqzyY/fmVa5FzjlOZeercg4j4ZeBrHuXnfui8351x4Yvo12XmvRHxh4H3RcRHgYcOMtkeNVJ/jaWwCxbl9sFd37ugmouIm4CbAJ4yPql7jVCIaqRUhfs6m27VMTje4sQRjoVKi9JKIlVFpfer0nGFmov+nlhAeLGv5Lh/vioaiV9CQ94HMvO6C46b+ZILfS8iPhsRV2fmfRFxNXD/Bca4d/3v3RHxAeAbgH8JPDUipnVU6pnAvXtN9pKEVET8EEtY7Of3+7NrdXkK4Jkn/lBOvWuk0KSKVWruqkzpOu7ipNJcodYNvtqxVWARUQuLiFrXGBXH/XOgpNo10SwcMCJ1KdwOvBK4Zf3vO89/QUQ8DTidmVsRcSXwAuDH1xGs97Nk2d12oZ8/nwMLqYj4bhYTihfnl47UvcC1u172mNTcEMnJzql9UCcFD3TCpFKE47iLCOWNotJ5oKLSIscL8zqfWyWVzlkVla4x1fBnrA5VbwmXoUbqFuDtEfEq4FPAKwAi4jrg+zLze4E/DvxMRDSW5dEtmfnx9c+/BrgtIn4U+DXgZ/f6hQcSUhFxPfD3gG/JzNO7vnU78M8j4idYzCaeA/ynPccDTgz9D7dqsW8RUesYKNBFTerc2Kot9qstGiqdCwq8gNZR7bNQiWrXRdOf437tPsfi2ne4xyIzPwe8+FGevwP43vXX/xH4+gv8/N0s3g6Pmcdif/4LLFaCV0bEPcDrWFz6TgDvWdwC+WBmfl9mfiwi3g58nCXl7/v3cuxbfgdMAiFVKl2uUDqTRUStm2W1RVOl8wC84Id651gVKl1nTL1rlzFqLkMfqUPnsbj2fcejPH3BUFdmvgF4w34mESQbRYRUNRFR6UZcaTFW7YZZabFf6TyoRKVrQTWqXQ9MrWuiMVWv35chte/Q6eHad8lEwKZCSBUTPQoq3SwqLaCrXtR6UulzUI1Kn1ujo9I10ZhzhO8NAuod0yRpBee9X46EkBpITozz3i88AlRbQB/3xa4XpDq8yDPgRZMxu/F10SgotvRcyMOvkbocHAkhpaqRqoQvvgtelBkV/owZY5RU22g1Ro1rpA6JpUZqT08KcwB8YTfGmJpY/BtjqrI05H38X8OOhJD6zdOff+Av3PH2LwIPXO65mCPJlfjcMI+Ozw1zMXx+mAvhc8NciKN4bnzd5Z7AQbCQOiQy86sj4o7MvO5yz8UcPXxumAvhc8NcDJ8f5kL43DAXwudGL/JYpPZV6oFqjDHGGGOMMUeCIxGRMsYYY4wxxjw+cI3U4XPqck/AHFl8bpgL4XPDXAyfH+ZC+NwwF8LnRg8CWjz+Hbkjj4HHuzHGGGOMMeZweOJ4Zf6xk39x3z/3q6ffemelGrWjFJEyxhhjjDHGFGexmnj8R6QspIwxxhhjjDFdOQ41UpfdtS8iro+I34iIuyLi5ss9H3P4RMRbIuL+iPj1Xc89PSLeExG/uf73aevnIyL+z/X58p8j4hsv38yNmoi4NiLeHxEfj4iPRcQPrp/3+XHMiYiTEfGfIuL/XZ8b/9v6+WdHxIfW58DbImJz/fyJ9eO71t9/1mX9Dxg5ETFGxK9FxL9ZP/a5YQCIiE9GxEcj4iMRccf6Od9XOtOi7ftvNS6rkIqIEfgp4C8AzwW+IyKeeznnZC4LPwdcf95zNwPvzcznAO9dP4blXHnO+u9NwE8f0hzN5WEG/nZmPhf4ZuD719cInx9mC3hRZv5p4HnA9RHxzcCPAW/MzD8CfB541fr1rwI+v37+jevXmcc3Pwh8YtdjnxtmN382M5+3qx7H95WOLIl9+/9TjcsdkXo+cFdm3p2Z28BtwA2XeU7mkMnM/wD8/nlP3wDcuv76VuDbdz3/1lz4IPDUiLj6UCZqDp3MvC8zf3X99RdYFkXX4PPj2LN+jx9eP9xY/03gRcA71s+ff26cO2feAbw4IuJwZmsOm4h4JvAXgTevHwc+N8zF8X2lMxZSeq4BPr3r8T3r54y5KjPvW3/9GeCq9dc+Z44p63SbbwA+hM8PwyOpWx8B7gfeA/wW8GBmzuuX7H7/Hzk31t9/CHjGoU7YHCb/CPh78MjK7Bn43DBfIoFfiog7I+Km9XO+r3RliUnt9281bDZhjjyZmRHx+K9YNBckIp4E/Evgb2TmH+zeLPb5cXzJzBXwvIh4KvCLwB+7vDMyR4GI+Dbg/sy8MyJeeJmnY44m/11m3hsRfwh4T0T8f7u/6fvKpZMcjz5SlzsidS9w7a7Hz1w/Z8xnz4XO1//ev37e58wxIyI2WETUz2fmv1o/7fPDPEJmPgi8H/hvWNJuzm0S7n7/Hzk31t9/CvC5w52pOSReALwsIj7JUjLwIuBN+NwwazLz3vW/97Nswjwf31c64xqpw+DDwHPWTjqbwI3A7Zd5TuZocDvwyvXXrwTeuev5v7p20flm4KFdoXjzOGNdp/CzwCcy8yd2fcvnxzEnIr56HYkiIq4AXspSQ/d+4OXrl51/bpw7Z14OvC/dkf5xSWa+NjOfmZnPYllXvC8z/zI+NwwQEU+MiK869zXw54Bfx/eV7iSrff+txmVN7cvMOSJeDbwbGIG3ZObHLueczOETEb8AvBC4MiLuAV4H3AK8PSJeBXwKeMX65e8CvhW4CzgNfM+hT9gcJi8Avgv46LoWBuDv4/PDwNXArWv31wF4e2b+m4j4OHBbRPwo8GssQpz1v/80Iu5iMbe58XJM2lxWXoPPDbPUPv3iOkV8Av55Zv77iPgwvq9045xr3+Od8KaLMcYYY4wxphcnxqfk1U/4b/f9c596+N/fucuS/shjswljjDHGGGNMR7Jkqt5+sZAyxhhjjDHGdCPhWKT2XW6zCWOMMcYYY4wphyNSxhhjjDHGmK5UbLC7XyykjDHGGGOMMR1J2jGokXJqnzHGGGOMMaYbySKl9vv3UoiIp0fEeyLiN9f/Pu1RXvNnI+Iju/6ejYhvX3/v5yLit3d973l7/U4LKWOMMcYYY0xHkparff+9RG4G3puZzwHeu3785bPKfH9mPi8znwe8iKU32C/tesnfPff9zPzIXr/QQsoYY4wxxhjTlcOOSAE3ALeuv74V+PY9Xv9y4N9l5umD/kILKWOMMcYYY0xHlj5S+/17iVyVmfetv/4McNUer78R+IXznntDRPzniHhjRJzY6xfabMIYY4wxxhjTjQRaHijCdGVE3LHr8anMPHXuQUT8MvA1j/JzP/Rlvz8zIyIv9Esi4mrg64F373r6tSwCbBM4BbwGeP3FJmshZYwxxhhjjOlIHjRV74HMvO6Co2a+5ELfi4jPRsTVmXnfWijdf5Hf8wrgFzNzZ9fY56JZWxHxT4C/s9dkndpnjDHGGGOM6UdC5mrffy+R24FXrr9+JfDOi7z2OzgvrW8tvoiIYKmv+vW9fqGFlDHGGGOMMaYbSzxq/38ukVuAl0bEbwIvWT8mIq6LiDefe1FEPAu4Fvi/z/v5n4+IjwIfBa4EfnSvXxiZF0wfNMYYY4wxxph9MQ5X5BNPPHvfP/eFs5+482KpfUcN10gZY4wxxhhjOpI9XPiOPBZSxhhjjDHGmK7kwVz7SmEhZYwxxhhjjOnIgV37SmEhZYwxxhhjjOlGQg8XviOPhZQxxhhjjDGmI+nUPmOMMcYYY4zZL8chtc99pIwxxhhjjDFmnzgiZYwxxhhjjOlH2rXPGGOMMcYYY/aJXfuMMcYYY4wxZl/Ytc8YY4wxxhhj9k2CI1LGGGOMMcYYsz9cI2WMMcYYY4wx+8I1UsYYY4wxxhhzACykjDHGGGOMMWZ/OLXPGGOMMcYYY/aDU/uMMcYYY4wx5gBYSBljjDHGGGPM/si83DOQYyFljDHGGGOM6UiSWEgZY4wxxhhjzH54N8xXHuDnHug+EyGRxyDsZowxxhhjjDE9GS73BIwxxhhjjDGmGhZSxhhjjDHGGLNPLKSMMcYYY4wxZp9YSBljjDHGGGPMPrGQMsYYY4wxxph98v8DLo2bDnntdmYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pylab\n", "\n", "def show_state(a):\n", " a=np.expand_dims(a, axis=2)\n", " for i in range(4):\n", " a = np.concatenate( [a,a] , axis=2)\n", " a = np.reshape( a, [a.shape[0],a.shape[1]*a.shape[2]] )\n", " fig, axes = pylab.subplots(1, 1, figsize=(16, 5))\n", " im = axes.imshow(a, origin='upper', cmap='inferno')\n", " pylab.colorbar(im) \n", " \n", "# get numpy versions of all states \n", "vels = [ x.values.numpy('x,vector') for x in velocities] \n", "# concatenate along vector/features dimension\n", "vels = np.concatenate(vels, axis=-1) \n", "\n", "# save for comparison with other methods\n", "import os; os.makedirs(\"./temp\",exist_ok=True)\n", "np.savez_compressed(\"./temp/burgers-diffphys-solution.npz\", np.reshape(vels,[N,STEPS+1])) # remove batch & channel dimension\n", "\n", "show_state(vels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Physics-informed vs. differentiable physics reconstruction\n", "\n", "Now we have both versions, the one with the PINN, and the DP version, so let's compare both reconstructions in more detail. (Note: The following cells expect that the Burgers-forward and PINN notebooks were executed in the same environment beforehand.)\n", "\n", "Let's first look at the solutions side by side. The code below generates an image with 3 versions, from top to bottom: the \"ground truth\" (GT) solution as given by the regular forward simulation, in the middle the PINN reconstruction, and at the bottom the differentiable physics version.\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Solutions Ground Truth (top), PINN (middle) , DiffPhys (bottom):\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# note, this requires previous runs of the forward-sim & PINN notebooks in the same environment\n", "sol_gt=npfile=np.load(\"./temp/burgers-groundtruth-solution.npz\")[\"arr_0\"] \n", "sol_pi=npfile=np.load(\"./temp/burgers-pinn-solution.npz\")[\"arr_0\"] \n", "sol_dp=npfile=np.load(\"./temp/burgers-diffphys-solution.npz\")[\"arr_0\"] \n", "\n", "divider = np.ones([10,33])*-1. # we'll sneak in a block of -1s to show a black divider in the image\n", "sbs = np.concatenate( [sol_gt, divider, sol_pi, divider, sol_dp], axis=0)\n", "\n", "print(\"\\nSolutions Ground Truth (top), PINN (middle) , DiffPhys (bottom):\")\n", "show_state(np.reshape(sbs,[N*3+20,33,1]))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's quite clearly visible here that the PINN solution (in the middle) recovers the overall shape of the solution, hence the temporal constraints are at least partially fulfilled. However, it doesn't manage to capture the amplitudes of the GT solution very well.\n", "\n", "The reconstruction from the optimization with a differentiable solver (at the bottom) is much closer to the ground truth thanks to an improved flow of gradients over the whole course of the sequence. In addition, it can leverage the grid-based discretization for both forward as well as backward passes, and in this way provide a more accurate signal to the unknown initial state. It is nonetheless visible that the reconstruction lacks certain \"sharper\" features of the GT version, e.g., visible in the bottom left corner of the solution image.\n", "\n", "Let's quantify these errors over the whole sequence:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MAE PINN: 0.22991 \n", "MAE DP: 0.05811\n", "\n", "Error GT to PINN (top) , DiffPhys (bottom):\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "err_pi = np.sum( np.abs(sol_pi-sol_gt)) / (STEPS*N)\n", "err_dp = np.sum( np.abs(sol_dp-sol_gt)) / (STEPS*N)\n", "print(\"MAE PINN: {:7.5f} \\nMAE DP: {:7.5f}\".format(err_pi,err_dp))\n", "\n", "print(\"\\nError GT to PINN (top) , DiffPhys (bottom):\")\n", "show_state(np.reshape( np.concatenate([sol_pi-sol_gt, divider, sol_dp-sol_gt],axis=0) ,[N*2+10,33,1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's a pretty clear result: the PINN error is almost 4 times higher than the one from the Differentiable Physics (DP) reconstruction.\n", "\n", "This difference also shows clearly in the jointly visualized image at the bottom: the magnitudes of the errors of the DP reconstruction are much closer to zero, as indicated by the purple color above.\n", "\n", "A simple direct reconstruction problem like this one is always a good initial test for a DP solver. It can be tested independently before moving on to more complex setups, e.g., coupling it with an NN. If the direct optimization does not converge, there's probably still something fundamentally wrong, and there's no point involving an NN. \n", "\n", "Now we have a first example to show similarities and differences of the two approaches. In the next section, we'll present a discussion of the findings so far, before moving to more complex cases in the following chapter.\n", "\n", "\n", "## Next steps\n", "\n", "As with the PINN version, there's variety of things that can be improved and experimented with using the code above:\n", "\n", "* You can try to adjust the training parameters to further improve the reconstruction.\n", "* As for the PINN case, you can activate a different optimizer, and observe the changing (not necessarily improved) convergence behavior.\n", "* Vary the number of steps, or the resolution of the simulation and reconstruction.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }