Files
PINA/tutorials/tutorial2/tutorial.ipynb
Dario Coscia 29b14ee9b6 Update Tutorials (#544)
* update tutorials
* tutorial guidelines
* doc
2025-04-23 18:53:30 +02:00

770 lines
131 KiB
Plaintext
Vendored

{
"cells": [
{
"cell_type": "markdown",
"id": "de19422d",
"metadata": {},
"source": [
"# Tutorial: Enhancing PINNs with Extra Features to solve the Poisson Problem\n",
"\n",
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/mathLab/PINA/blob/master/tutorials/tutorial2/tutorial.ipynb)\n",
"\n",
"This tutorial presents how to solve with Physics-Informed Neural Networks (PINNs) a 2D Poisson problem with Dirichlet boundary conditions. We will train with standard PINN's training, and with extrafeatures. For more insights on extrafeature learning please read [*An extended physics informed neural network for preliminary analysis of parametric optimal control problems*](https://www.sciencedirect.com/science/article/abs/pii/S0898122123002018).\n",
"\n",
"First of all, some useful imports."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ad0b8dd7",
"metadata": {},
"outputs": [],
"source": [
"## routine needed to run the notebook on Google Colab\n",
"try:\n",
" import google.colab\n",
"\n",
" IN_COLAB = True\n",
"except:\n",
" IN_COLAB = False\n",
"if IN_COLAB:\n",
" !pip install \"pina-mathlab[tutorial]\"\n",
"\n",
"import torch\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"\n",
"from pina import LabelTensor, Trainer\n",
"from pina.model import FeedForward\n",
"from pina.solver import PINN\n",
"from torch.nn import Softplus\n",
"\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"id": "492a37b4",
"metadata": {},
"source": [
"## The problem definition"
]
},
{
"cell_type": "markdown",
"id": "2c0b1777",
"metadata": {},
"source": [
"The two-dimensional Poisson problem is mathematically written as:\n",
"\\begin{equation}\n",
"\\begin{cases}\n",
"\\Delta u = 2\\pi^2\\sin{(\\pi x)} \\sin{(\\pi y)} \\text{ in } D, \\\\\n",
"u = 0 \\text{ on } \\Gamma_1 \\cup \\Gamma_2 \\cup \\Gamma_3 \\cup \\Gamma_4,\n",
"\\end{cases}\n",
"\\end{equation}\n",
"where $D$ is a square domain $[0,1]^2$, and $\\Gamma_i$, with $i=1,...,4$, are the boundaries of the square.\n",
"\n",
"The Poisson problem is written in **PINA** code as a class. The equations are written as *conditions* that should be satisfied in the corresponding domains. The *solution*\n",
"is the exact solution which will be compared with the predicted one. If interested in how to write problems see [this tutorial](https://mathlab.github.io/PINA/_rst/tutorials/tutorial16/tutorial.html).\n",
"\n",
"We will directly import the problem from `pina.problem.zoo`, which contains a vast list of PINN problems and more."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "82c24040",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The problem is made of 5 conditions: \n",
"They are: ['g1', 'g2', 'g3', 'g4', 'D']\n"
]
}
],
"source": [
"from pina.problem.zoo import Poisson2DSquareProblem as Poisson\n",
"\n",
"# initialize the problem\n",
"problem = Poisson()\n",
"\n",
"# print the conditions\n",
"print(\n",
" f\"The problem is made of {len(problem.conditions.keys())} conditions: \\n\"\n",
" f\"They are: {list(problem.conditions.keys())}\"\n",
")\n",
"\n",
"# let's discretise the domain\n",
"problem.discretise_domain(30, \"grid\", domains=[\"D\"])\n",
"problem.discretise_domain(\n",
" 100,\n",
" \"grid\",\n",
" domains=[\"g1\", \"g2\", \"g3\", \"g4\"],\n",
")"
]
},
{
"cell_type": "markdown",
"id": "7086c64d",
"metadata": {},
"source": [
"## Solving the problem with standard PINNs"
]
},
{
"cell_type": "markdown",
"id": "72ba4501",
"metadata": {},
"source": [
"After the problem, the feed-forward neural network is defined, through the class `FeedForward`. This neural network takes as input the coordinates (in this case $x$ and $y$) and provides the unkwown field of the Poisson problem. The residual of the equations are evaluated at several sampling points and the loss minimized by the neural network is the sum of the residuals.\n",
"\n",
"In this tutorial, the neural network is composed by two hidden layers of 10 neurons each, and it is trained for 1000 epochs with a learning rate of 0.006 and $l_2$ weight regularization set to $10^{-8}$. These parameters can be modified as desired. We set the `train_size` to 0.8 and `test_size` to 0.2, this mean that the discretised points will be divided in a 80%-20% fashion, where 80% will be used for training and the remaining 20% for testing."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e7d20d6d",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"GPU available: True (mps), used: False\n",
"TPU available: False, using: 0 TPU cores\n",
"HPU available: False, using: 0 HPUs\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "38a34ce3c1214e90be1f5e0194d80674",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Training: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
]
}
],
"source": [
"# make model + solver + trainer\n",
"from pina.optim import TorchOptimizer\n",
"\n",
"model = FeedForward(\n",
" layers=[10, 10],\n",
" func=Softplus,\n",
" output_dimensions=len(problem.output_variables),\n",
" input_dimensions=len(problem.input_variables),\n",
")\n",
"pinn = PINN(\n",
" problem,\n",
" model,\n",
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
")\n",
"trainer_base = Trainer(\n",
" solver=pinn, # setting the solver, i.e. PINN\n",
" max_epochs=1000, # setting max epochs in training\n",
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
" enable_model_summary=False, # model summary statistics not printed\n",
" train_size=0.8, # set train size\n",
" val_size=0.0, # set validation size\n",
" test_size=0.2, # set testing size\n",
" shuffle=True, # shuffle the data\n",
")\n",
"\n",
"# train\n",
"trainer_base.train()"
]
},
{
"cell_type": "markdown",
"id": "eb83cc7a",
"metadata": {},
"source": [
"Now we plot the results using `matplotlib`.\n",
"The solution predicted by the neural network is plotted on the left, the exact one is in the center and on the right the error between the exact and the predicted solutions is showed. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1ab83c03",
"metadata": {},
"outputs": [],
"source": [
"@torch.no_grad()\n",
"def plot_solution(solver):\n",
" # get the problem\n",
" problem = solver.problem\n",
" # get spatial points\n",
" spatial_samples = problem.spatial_domain.sample(30, \"grid\")\n",
" # compute pinn solution, true solution and absolute difference\n",
" data = {\n",
" \"PINN solution\": solver(spatial_samples),\n",
" \"True solution\": problem.solution(spatial_samples),\n",
" \"Absolute Difference\": torch.abs(\n",
" solver(spatial_samples) - problem.solution(spatial_samples)\n",
" ),\n",
" }\n",
" # plot the solution\n",
" for idx, (title, field) in enumerate(data.items()):\n",
" plt.subplot(1, 3, idx + 1)\n",
" plt.title(title)\n",
" plt.tricontourf( # convert to torch tensor + flatten\n",
" spatial_samples.extract(\"x\").tensor.flatten(),\n",
" spatial_samples.extract(\"y\").tensor.flatten(),\n",
" field.tensor.flatten(),\n",
" )\n",
" plt.colorbar(), plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "dfec566d",
"metadata": {},
"source": [
"Here the solution:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "7db10610",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKcAAAJNCAYAAADkjxajAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZYklEQVR4nO3dB5xU1f3//7OwLgvSRLqUFSyLBVCICIqaiGKJirFgiShfAkbFhlFABeygUUJUIl9RLIkG1Kgx6h9FlK9RUCJoLAEUFAGRFqULS5n/43P8zTq7O7M77d57yuv5eIyys1PunZm9nznve0pBLBaLKQAAAAAAACACtaJ4UgAAAAAAAEAQTgEAAAAAACAyhFMAAAAAAACIDOEUAAAAAAAAIkM4BQAAAAAAgMgQTgEAAAAAACAyhFMAAAAAAACIDOEUAAAAAAAAIkM4BQAAAAAAgMgQTsE5s2bNUgUFBfr/+XTJJZeokpKSvD4mACBaclyX47sNdQgA8m3p0qX6eHXvvfeG+ryufK9Oth+bN29Wv/nNb1TLli31a3vNNdfo61evXq3OPvtstffee+vrJ0yYENFWA2YinHLQ448/rg948UtxcbE64IAD1NChQ/VBsfKX5+eee67KfeU+33zzTZXHPu6449QhhxxS4To5IMt9rrzyyiq3T/YcJlu5cqW65ZZb1EcffRT1pgBA6BJrR3UXQpcf/elPf9J1EwBMPk7JcbtHjx7KFa+++qr+vp5v8piJta5evXqqXbt26rTTTlOPPfaY2r59e1qPc9ddd+nacNlll6k///nP6qKLLtLXX3vtteq1115TI0eO1NefdNJJed8HwGaFUW8AgnPbbbepfffdV23btk2988476qGHHtIH808//VQfbKsjB99x48apBx54IO3nmzx5sj7Ytm7dWtlKwqlbb71VB25du3atsn+7d++ObNsAIGjyZTnRk08+qWbMmFHl+k6dOoW8ZeY2+po2bVql59UxxxyjfvjhB1VUVBTZtgGAeOqpp/T32rlz56rFixer/fbbT9lO2jMTJ04MJKAS0maqX7++bg/JyXoJlP7nf/5H93R6+eWXVdu2battH7z55pvqyCOPVGPGjKly/RlnnKF+97vfBbLdgO0Ipxx28sknq+7du+t/S9dS6UI6fvx49fe//12df/751d5XgplMwqaDDz5YLVq0SAda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",
"text/plain": [
"<Figure size 1200x600 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 6))\n",
"plot_solution(solver=pinn)"
]
},
{
"cell_type": "markdown",
"id": "49142e7f",
"metadata": {},
"source": [
"As you can see the solution is not very accurate, in what follows we will use **Extra Feature** as introduced in [*An extended physics informed neural network for preliminary analysis of parametric optimal control problems*](https://www.sciencedirect.com/science/article/abs/pii/S0898122123002018) to boost the training accuracy. Of course, even extra training will benefit, this tutorial is just to show that convergence using Extra Features is usally faster."
]
},
{
"cell_type": "markdown",
"id": "20fdf23e",
"metadata": {},
"source": [
"## Solving the problem with extra-features PINNs"
]
},
{
"cell_type": "markdown",
"id": "a1e76351",
"metadata": {},
"source": [
"Now, the same problem is solved in a different way.\n",
"A new neural network is now defined, with an additional input variable, named extra-feature, which coincides with the forcing term in the Laplace equation. \n",
"The set of input variables to the neural network is:\n",
"\n",
"\\begin{equation}\n",
"[x, y, k(x, y)], \\text{ with } k(x, y)= 2\\pi^2\\sin{(\\pi x)}\\sin{(\\pi y)},\n",
"\\end{equation}\n",
"\n",
"where $x$ and $y$ are the spatial coordinates and $k(x, y)$ is the added feature which is equal to the forcing term.\n",
"\n",
"This feature is initialized in the class `SinSin`, which is a simple `torch.nn.Module`. After declaring such feature, we can just adjust the `FeedForward` class by creating a subclass `FeedForwardWithExtraFeatures` with an adjusted forward method and the additional attribute `extra_features`.\n",
"\n",
"Finally, we perform the same training as before: the problem is `Poisson`, the network is composed by the same number of neurons and optimizer parameters are equal to previous test, the only change is the new extra feature."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "ef3ad372",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"GPU available: True (mps), used: False\n",
"TPU available: False, using: 0 TPU cores\n",
"HPU available: False, using: 0 HPUs\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "62180078584f4dfea97d9dc6f8d20856",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Training: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
]
}
],
"source": [
"class SinSin(torch.nn.Module):\n",
" \"\"\"Feature: sin(x)*sin(y)\"\"\"\n",
"\n",
" def __init__(self):\n",
" super().__init__()\n",
"\n",
" def forward(self, pts):\n",
" x, y = pts.extract([\"x\"]), pts.extract([\"y\"])\n",
" f = 2 * torch.pi**2 * torch.sin(x * torch.pi) * torch.sin(y * torch.pi)\n",
" return LabelTensor(f, [\"feat\"])\n",
"\n",
"\n",
"class FeedForwardWithExtraFeatures(FeedForward):\n",
" def __init__(self, *args, extra_features, **kwargs):\n",
" super().__init__(*args, **kwargs)\n",
" self.extra_features = extra_features\n",
"\n",
" def forward(self, x):\n",
" extra_feature = self.extra_features(x) # we append extra features\n",
" x = x.append(extra_feature)\n",
" return super().forward(x)\n",
"\n",
"\n",
"model_feat = FeedForwardWithExtraFeatures(\n",
" input_dimensions=len(problem.input_variables) + 1,\n",
" output_dimensions=len(problem.output_variables),\n",
" func=Softplus,\n",
" layers=[10, 10],\n",
" extra_features=SinSin(),\n",
")\n",
"\n",
"pinn_feat = PINN(\n",
" problem,\n",
" model_feat,\n",
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
")\n",
"trainer_feat = Trainer(\n",
" solver=pinn_feat, # setting the solver, i.e. PINN\n",
" max_epochs=1000, # setting max epochs in training\n",
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
" enable_model_summary=False, # model summary statistics not printed\n",
" train_size=0.8, # set train size\n",
" val_size=0.0, # set validation size\n",
" test_size=0.2, # set testing size\n",
" shuffle=True, # shuffle the data\n",
")\n",
"\n",
"trainer_feat.train()"
]
},
{
"cell_type": "markdown",
"id": "9748a13e",
"metadata": {},
"source": [
"The predicted and exact solutions and the error between them are represented below.\n",
"We can easily note that now our network, having almost the same condition as before, is able to reach additional order of magnitudes in accuracy."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2be6b145",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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B0E7eHqiP2rUKLP24z333GNO6HXAJXNkXZNQmnzTeKadkr/97W9y9913m46JrmcCALloMuq//uu/zMwarZDQcrU333yzauA1k56vr1q1yiSS9Jxb2yQdxH733Xer2jM9R9Vzb23vNCGjbbAmavS8NZ2g0aS+LofRo0cP00ZpFUX6cbWNK7XqQOOEDnpnKzNP/z7dxmo/QhNF999/v2lbS318XTvqgQcekBdffFGOO+64rP0GPSZdW0oTeDooog4++OCqtaf077Q/VWwM1LWv9P3RfokmpzQZpe/JT3/6U9l5551NLNSE05/+9CczqPH//t//M8mnTPr+adJSZ9FpzNTH0AHziRMnVt1GX0Md6NEknx6LxiV9DXUQPd0P0zJFjf860KL3pTOF9fj0c/OPf/xDDj300KJfa2ALKXjjkUce0eHh1N/+9rfUsmXLUosWLUpNmDAhteOOO6a23nrr1Jdffmlu9/LLL5vbPfXUU1v87Ztvvpn69NNPUw0bNkxddtllVb8/6qijUgcccEC1x9ttt91SJ510kvn/fv36pSorK1Nff/11zsfI5tRTT93ifmvq1atXqqKiwhxXmj5O48aNU0ceeWTVdenH1H8zj/H888/f4j71+eglTZ+3/q2+DjXp3+v9pD333HPmtjfffHO1251xxhmpevXqpT755JOq6/R2euyZ173zzjvm+vvuu6/W5w0AcbvkkktM+5RJ20q9bty4cVvcXq8fMWLEFtfXbHtvuumm1Lbbbpv66KOPqt1u6NChqQYNGqQWLlyY85ieffbZqviUSyHtcs1j0+PPdjqUjouff/551XUarzJjR674s379+lTLli1TBx54YOqHH36out2kSZPM7YYPH151nR6LXjdy5Mhq93nwwQenOnfunPM5A8Bbb71l2o+pU6eanzdv3pzaZZddUpdffnm122k7prfL7A+oN954w1w/ePBg8/O///1v8/Odd96Z8zGXLl1qzm2PP/741KZNm6quv//++83fjh8/Puc5dLZz9czjyzwPzxaP1D/+8Q9z/RNPPFHt+ilTpmS9vqZ0m699pWzSr8Fpp52W83nU7Adl0r/VY8+UbwxMvw5NmjQxr3OmY489NtWhQ4fU2rVrq67T97t79+6pvffee4vY1aNHD/P7NH2P9bG+++4787P+q32prl27VotT6ftN/6v33bNnz2r3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Bd2CHACKpe2ptoWnnHJK1t/rLFNtw3R2lVYmpGm7pefTF198sTmPHjNmjOy4445V5WY6i0qTMnrOrIPFes6tM7C0/dJNlpTer1Y36PIben6tx6D9BG2nf/KTn5h+QC66kPmZZ54p9913nxk40LZZB42zrROl7a3SjS50FpO2zXoM2qZeeOGFJqmiC3ZrG65trs7w0oXHtZ3VBF1dNPZoSZoOYGvCTmOXrnur8UPvp5xKiYFpOkNO37sOHTqYxed1NpW+L5r00s2lNP4WQmOoDuBoHNf3TRc915ltej+apNTYqxUqmqzT5KX2AzWm6RqU+nrp2sZ6H1puD5RN0fv8wTrprUNr2247cxvXp556Kq+/TW9zrVto57OF6scff2y2Kq35GNn8z//8T+rII49M7bjjjqlGjRql9txzz9RVV12VWrFiRbXbzZkzx2xjut1226W22Wab1DHHHJOaMWNG1udVc3vau+++O7Xzzjub+//pT39qtt3VrcBrbgf+5z//ObX//vunGjZsWG0722zbx65atcpsydqmTZvUVlttZbZZ1W13M7dZzbWdbLatzAHABtm27ta2smb7n6bbiF9zzTWp5s2bm7ZZ2+lPPvkkaxun7eawYcNSe+21l9mGXP9Gt8C+6667UuvXr895TNr+9+nTJ7Xrrruadrxly5apX/ziF6YtL6ZdznZss2fPNttp63Hp44wePboqLurW3mmLFy82cU+339bfpeNIrvgzceLE1MEHH2yOu1mzZqlzzz232jbuSo9FtxjPtd05ANR08sknpyorK1Nr1qzJeZsLLrjAtIXLly837Zi2J9om6nlx27ZtTbt0xBFHpN55552qv9Hbahxo3769aZeaNm1q2sY//elPW9z//fffb26nj9GqVavUxRdfnPr3v/9d7TbZzqGXLVuWOv30003M2GGHHVIXXnhh6r333qt27q02btyYuvTSS1MtWrRI1atXb4v28IEHHkh17tw5tfXWW5s2uUOHDqmrr7469fXXX9f62qXb1vRFX8dddtnFxJXx48en1q5du8XfZHseufpBuc7984mBme9TNp9++mmqb9++qdatW5vXXfs3etxPP/10nX26XHHq+eefN8ehr2OTJk1Shx56aOr//u//qt3m7bffTv3Xf/1XVX9Nn/tZZ52VmjZtWo5XGShOPf1P+VJdAAAAAAAAQP5YcwoAAAAAAACJITkFAAAAAACAxJCcAgAAAAAAgDvJKd36U3fFadOmjdllQbckrcv06dPlkEMOkUaNGpldIh599NFijxcAvKK7r+juXZWVlWaHSN3WOZf333/f7Iqmt9f2V3fZqenGG280v8u8tG/fXpJAvACA8vE1XhArAKC8CokXSneo1PZfb687Qk6ePDnnbXWX5mxx5dtvv5Vzzz3X7OK4/fbbm12QV69eHW1ySre91C029Qnn4/PPP5eTTjrJbPGs233qls66ZaVu1wkAIZs4caIMGTJERowYIXPmzDFtq26XnG1LZaVb++rWwbfddpu0bt065/3qdr/ffPNN1eXVV1+VJBAvAKA8fI4XxAoAKJ9C48WMGTOkT58+Jpn09ttvS69evczlvffe2+K2zz77rLz++utmMKEmTUzpwMjUqVNl0qRJZuBh4MCBBR17Sbv1acZMD1APPpdrrrlGXnjhhWpP7uyzz5bvvvtOpkyZkvVv1q1bZy5pmzdvNpm4HXfc0TwmgHBoE7Vq1SrTCNavX1wl8tq1a2X9+vUSx7HWbKN0VFcv2ehIxk9+8hO5//77q9q6tm3byqWXXipDhw6t9bF0NERPyPVScyRcR531hN0mxAsAUSNeuB8voooVingBII148R+9e/c2gwSaUEo77LDDpFOnTjJu3Liq67766itz3zoQoAMEmXFl3rx5sv/++8ubb74pXbp0Mddpe3ziiSfKl19+mTWZlU1DidjMmTOlR48e1a7TzF3NAJlp1KhR8tvf/jbqQwPgkEWLFskuu+xSVODYdddtZdmyzRK17bbbbovpqzpqoR2AmjSYzZ49W4YNG1Z1nQZHbS+13SzFxx9/bIKATs3t1q2baVN33XVXsR3xAkA5EC/8jhfFxApFvABQE/FCzPU606pmm5pZYq0JrvPOO0+uuuoqM+M2231oKV86MaX0MfWx33jjDTnttNPsSE4tXrxYWrVqVe06/XnlypXyww8/yNZbb73F3+iLmfkCrVixwgTK6W+0kO22i38N9+dWdYz9MQH8aN2ajXLnsS9J48aNi/p7baQ1cEx/o6Vst110I6OrV6fk6K5LTZDTWuu0XKMay5cvl02bNmVtHz/88MOij0NHNHTtjX333deUaOiJ+BFHHGFGmIt9DeMSZ7ygXQfc06vxO7X+fvXqzXJ012XEC8/jRTGxorZ40f2wa6Rhwy1f+4qPvpaQrd8nv5kOUVi5e/bvQhxWtU1mFt36ttHPwKlp1zbLY328Y1p9ZE3MIF7U3abq9Wm33367NGzYUC677LKc99GyZctq1+ntmzVrVu1+Ek9OFSPXNDXtaGzXONrk1NMrD9niusrtIn1IAHkodcq9Bo5o248fR040cGQGj7j9/Oc/r/r/gw46yHQ+dtttN/nTn/5kasl9U0y80Haedh1wz5RUFzmjyZw6b0e8yA/x4keamGrYsHLL6+tXSMg2Z3lN4tJskciKPZNJUDWoTCY5VX/r+CdgNNw23tf4H6s7yHGti0+oRxEziBd105lY99xzj1m/KuoS6MiTU7oI45IlS6pdpz/ri5trZCPu5BMAxK158+bSoEGDrO1jbYvXFkqn2O6zzz7yySeflO0+Q4kXAGAD4kUysWJ9+12k4sMvJVT63PU1CE3jL1KyajfWIEM48aJ1jjY1fft//OMfZjH1zJJvnZ115ZVXmh37FixYYG5bc8H1jRs3mnX9ColTkadotX592rRp1a7TFdz1+igTULkuAGCDiooK6dy5c7X2Ueu59edyto9ao/7pp5/KTjvtJLaLI14QBwC3hfgdJl4k37cAotZoYfwz9RZ82SL2x4R98aJbHW2qrjX1z3/+02yekb7oWoW6/lR6l1S9rW5KobOs0l566SXz2DorN7KZUxq4MkdUdDtXPUCtJ9RsmtZz60rujz/+uPn9RRddZFaKv/rqq+W///u/zUHqdGHdZSMKIZ60AHCTrn1x/vnnm8UDDz30UDP6oLtl9OvXz/y+b9++svPOO5tFXNP17R988EHV/2tbq+2vLpS41157met/85vfyMknn2xKM77++muzYKKOoOgWsXGzPV4AgCt8jhfECmTT9NN1iZX2ITpTF7ePtbQvREMKjBeXX365HHXUUXL33XebXfgmTJggb731ljzwwAPm97qjqV4ybbXVVmZGlK5ZqPbbbz854YQTZMCAAWaHvw0bNsigQYPMTqr57tRXVHJKD/SYY46p9uSVvgC6qKIuqLhw4cKq3+++++4mWAwePNjUKupq+A899JBZAR4AQqZbty5btkyGDx9uFgvULVt129X0ooTalmZub6udh4MPPrjq57vuustcNKBMnz7dXKfbtWrH4l//+pe0aNFCDj/8cHn99dfN/8fNtnjB4AXgB/0u57P2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nHDCCXLttdfWeruRI0fKN998U3W59NJLy3z0YfNhijrxovx4TREV4gUyMXvKr9K+EPhw3pSkiRMnypAhQ2TEiBEyZ84c6dixo/Ts2VOWLl2a9fYzZsyQPn36mGTS22+/Lb169TKX9957r+o2++yzj9x///3y7rvvyquvvmoSX8cff7wsW7aspNhTU8MSnnfwXP7icFIc3+u8ql292BKb63ZdH8tjIbeVK1dW+7lRo0bmUop58+bJlClT5M0335QuXbqY6+677z458cQT5a677pI2bdpk/bsrrrjC/Dt9+vRa779x48bSunXrko4R8WIgww+uxwg9D2q3y39OTFEY4kU4s6dIYqCc606t2i2euJFGH8OteDF69GgZMGCA9OvXz/w8btw4eeGFF2T8+PEydOjQLW5/zz33mMGJq666yvx80003mQSTJqP0b9U555yzxWM8/PDD8s9//lOOPfbYomNPTSSnAkRHw9/OR7n51PF4eck+0nB1dNPrN67RE88XpW3bttWu11ELnQpbipkzZ5rpsenGXul02vr165sptaeddlpJ969lGRqIdt11VxN8Bg8eLA0bEh5AvIiDyzHCV8SL3IgXsL20j5liCDlerF+/XmbPni3Dhg2ruk7bf40DGh+y0et1plUmnWn13HPPZb29PoaWgjdt2tTMyipn7CGaWIQ1IfwVV+fD5pEN3YjguNYfiu8WLVpkaq3TSh0FV4sXL5aWLVtWu047A82aNTO/K8Vll10mhxxyiLkvndarwUxLNXREBGHHChJT/rE5RoSIeIG4aMKGNZmiobPiWFus/HwaII8zXixfvlw2bdokrVq1qna9/vzhh9n7YRobst2+ZszQUr2zzz7blIHvtNNOZnZV8+bNyxp7SE4Fhs4GEC0NHJnBozY6tfb222+v9TY6TTZKmSMlBx10kFRUVMiFF14oo0aNKktHyVW27+oKvzB7KkzEi3BQ2odyorQvPE0KiBdROeaYY2Tu3LkmAfbggw/KWWedZWZF1UxKlYLkVEDrTZGYShadD9R05ZVXygUXXFDrbfbYYw+zvkfNRQw3btxodsUo99ofuqOH3veCBQtk3333Let9h8jFWKGIF/EjRqA2xAsgP5T2IWTNmzeXBg0ayJIlS6pdrz/nigF6fT6315369tprL3M57LDDZO+99zbrTuks2nLFHnbrswQlfWGIo8PHZ8kdLVq0MNuy1nbRkelu3bqZbb21hjztpZdeks2bN5vOQTnpiIjWh5dzFARufb9JTCXHxRhRrgQssxVrR7xwX9KlXyRsosOsuGi4OsCXpIqKCuncubNMmzat6jpt//VnjQ/Z6PWZt1daspfr9pn3u27dj5/9csUeklOBoLOBYhEYkrfffvuZXTR0541Zs2bJa6+9JoMGDTJ13+ndL7766ivTOdHfp2mNt3YePvnkE/Ozbv+qP+soRnrxwjFjxsg777wjn332mTzxxBNmcdtf/vKXssMOOyT0bAEAxSJeAOGU9sWNAXA3DBkyxJTdPfbYY6bc++KLL5Y1a9ZU7d7Xt2/fagumX3755WanvbvvvtusS6ULrb/11lsmdij922uvvVZef/11+eKLL0wC6r//+79NLDnzzDPzjj35CC45ZePIXNRfdBJTduH9QDG0I6CdCd2uVbdlPfzww81OGWkbNmyQ+fPnm0UK03T714MPPtgECnXkkUean59//nnzs64RMmHCBDnqqKPkgAMOkFtuucV0NjLvF/Zg1lQYeA9QKuIFQp89xeLvCFnv3r3lrrvukuHDh0unTp3MQIMmn9KLni9cuNBsZpHWvXt3efLJJ017rrvvPf3002anvgMPPND8XssENWl1+umnyz777CMnn3yy/Otf/5J//OMfJh7kG3vywZpTgIdri7BooX90twsNHLm0a9dOUqnqnVod+ahtW3LddUlHQRAN12YdkhSxBzECpSBe2IuF0QHEYdCgQVUzn2qaPn36FtfpDKj0LKiaKisr5Zlnnik59uQjuJlToXU46GwAAAAAQHSSSDqGUNrnUr8bpSM5lTBqd8NF4hBAvij/Do9L7wmdByB/LIweD0r7APdQ1ucxl05sMzX9rLCRhxV7JBvkbVXOsg3teLTbZVlZ7gsAkDxK+wAAgE2YOeUp1xJTmpBKX0r522LvIymuvU9ACGzcOCNKtEP24r0BEIVQZk/FjdK+aDA7NxzMnEpQyCV9USeQ0vfPrCoASSjniVSUscLF5Ecp8cPFmBDl4ujMngKSwcLo8ZX2kYgD3EFyysPMrc2djbhnNWU+nq2dkqh3ZQIAl5UzbtS8L1vjAgAAQGgo60MsbCi3s+EY4k4ohjw7D4C7AxlxtdmulIPb/l65MngH2ISF0f1EaV80iDFhIDmVkKi+0DaewNp20u9CR8RGBAUgfiEmmJNqo4kNyQttvTcA0WPXPsAdJKcQ7Im+zcfmKzoegB1sHciwoV225ThqYoYtAADwWVDJKd87xrZ0Nmw9sc/GpuO05f0DgJDbYpuPCYBfKO3zE6V90aCKw39BJacQPRdP5l1KphWDUXEAtibCbW9/bTs+m947AHAFpX2AG0hOeZIssOGE1aYTeFeP34b3EYAdfE4s25b0qYtLxwrALcyeAoAfkZxCWfhy4u7L8wCQHJunnduQAHe1nbXluKN4D8uVCLX5sw8Avpf2JYHSPpQTySkPvgxJdzZsOWEvF9+eDwDYwvX21fXjB7ClVW3rJX0IiEEIpX1JrDsFlBPJqZj5Vqbh64l6ks+LUXEAPpZ/+xIvXCtJBGA/SvsAgOQUSuD7ybnvzw8A4uJje+rbIAYAoLwo7QMKQ3LKcUmdoPrY0bDpedLxAOALn+OFT8+NzgVCtmq35Ev7kp49FQJK+/xAJYe/SE4h6JPxfIT2fAH4h4GM6DCIAcAHlPYBSBrJqRj5MCoZQkfD1+ftw+cPCGE0z5fvqg/tZr5Ceq51YUQbrrJh9hT8Q2kfkD+SUw6fbMU9ahr6yXfcz59RcSB+Uxe3F98k0ZaEGC9CfM5R8PE7CLhS2hfC7ClK+/xgY98cpSM5hbxw0v0jXgcAqF3I7aTrgxiMfAMAgKSQnHJUnCPhIXc0ksbsKQAuIV7wGgAus6G0L+nZUwCQFJJTQEAdj3KMijONFnAHAxn+YxADQDmFUNoXwrpTSZT2xT37lj6Jf4JJTiW9hoGrU+XpbGTH6wIgCq7GClRHjADcZcPsKUQrhHWnABcFk5zySVyjpJxc2/H6MCoOuMG2ETxmTSXL1deEBCmQPEr7AISI5BQAAAguCRMHBjEAuIjSvvKjtC+MgUGUhuRUHkL80NPZyA+vEwAA1YV43gS/2FDax+ypaFHaB9iH5JRj4hgdJeFi3+tVzvedkg3ATi5+N4kXdeM1AuAiZk8BiBvJqRi42OEAALiLgYzwMIgB+Dd7Cn6htC8azNb1B8kpVENnozi8bgCAXIgRAIpBaV+0KO0D7EJyCnAEC94CsAXJlsLxmgFwDaV9AOJEcsohUScnOHEuTUivXynTZ6cubl/WYwFQHbEiXAxiAP6V9jF7yi+U9kWD0j4/kJyCQWcDAIrHSRHyQawFALtQ2gfYg+RUxFhUNCyudDz4XAJ2ceU76UobBwA+zZ5KEqV9AOJCcsqR0XCm6kPxOQBQG9oI+7mS4Cs1YWrL+RPgA0r7/EJpXzSIO+4jOQVnTpRdwesJwEe0bW4gQQkAhaG0D7ADySkAAFisHzEi0Qe4xYbSviRnT1HaByAOJKcCHwXlBNm915VRcQDZ0DYAAOAGSvuALZGcAgAgQS6cuDGQUX4MYgBusWH2FKJDaZ8fWHfKbSSnAu5w0NkI+/W1/fMJAAgzTlBiC2RHaR8An5GcAgAAzibaXcZrCwDhorQPqI7klOWimprPCXE8eJ0BxIEyLgAIo7SP2VPRobTPD5T2uYvkFOAgGzqiNPyA/98FEuzuvsY2xAkAAIB8kZwKEJ0NAAAAwM3ZU4BrKO1DPoJITrGwJpJEMhCAi2i74sNrDaAQlPb5U9oXyrpTcfN5VrvPgkhOuYop+QDgt3KMJBIrYCs6BwAAIF8kpyI6qbJ16iKjs3DhcwogWcQKpBEnADtL+5KcPQUUg3iCupCcAhzt6DFbAgD8QZwA4ApK+8qL0r5oMHvXPQ2TPgAgm4p5i/K63fr92kZ+LAAAAEDN2VMhdPABIC7MnAqIC2UampTKNzFVzO0BAO7HCgAApX1wD6V9qA0zpywV2lT8UhNMmX9v62wq7fCt2IOTCADlE1qsKCVu2BobMhEnALhU2hd3+Vuc9LnFWb6opX1xJxt15p8N66dFXdrXbpdlSR8G8kRyCokr98yn9P250BEBAMQTM4gNAMqN0j4AKB/K+gJhY5lG1CV5IZT7hTxrAnCdjVPbbYwV5Y4ZoZWDEycAv1HaB8AXJKcC6XDYJM6OgW0dEJs7fgAQUsywNUllY5zgvAbIzfeyqNqwa195hbJrX9wxhV373EFyCrFKoiNgY+fDJnQ63PDtt9/KueeeK02aNJHtt99e+vfvL6tXr671by688ELZc889Zeutt5YWLVrIqaeeKh9++GG12yxcuFBOOukk2WabbaRly5Zy1VVXycaNGyN+NoA9ySNiBHxDvAgPs6cAZBo7dqy0a9dOKisrpWvXrjJr1iypzVNPPSXt27c3t+/QoYNMnjy56ncbNmyQa665xly/7bbbSps2baRv377y9ddfV7sPfbx69epVu9x2221SCJJTAUzBt2UUNskOAJ0PuE47Gu+//75MnTpVJk2aJK+88ooMHDiw1r/p3LmzPPLIIzJv3jz561//KqlUSo4//njZtGmT+b3+qx2N9evXy4wZM+Sxxx6TRx99VIYPHx7Ts3JfkqNxPpdrxd1m2zqLCigG8QIAwjVx4kQZMmSIjBgxQubMmSMdO3aUnj17ytKlS7PeXtv0Pn36mIGMt99+W3r16mUu7733nvn9999/b+7nhhtuMP8+88wzMn/+fDnllFO2uK+RI0fKN998U3W59NJLCzp2klOIhQ0n/TYcA1AM7SxMmTJFHnroITP6cfjhh8t9990nEyZM2GLUIpN2Ro488kgzknHIIYfIzTffLIsWLZIFCxaY37/44ovywQcfyB//+Efp1KmT/PznP5ebbrrJjLZoBwRhYSDDnjhhy3sB9xAvkkFpH8qF0r5ohFTaN3r0aBkwYID069dP9t9/fxk3bpyZ8Tp+/Pist7/nnnvkhBNOMLNh99tvP9O2axy4//77ze+bNm1qBjvOOuss2XfffeWwww4zv5s9e7aZUZupcePG0rp166qLzrQqBMkpBHOyb8ux+NTpCKmhz9fKlSurXdatK/39njlzpinN6NKlS9V1PXr0kPr168sbb7yR132sWbPGjIrvvvvu0rZt26r71Sm6rVq1qrqdjqzoceuoOxBiG23DMfg0y444kRvxAuVEaZ8f604BpcQLHSzQpJG2+2na/uvP2o5no9dn3j7dvue6vVqxYoUp29N4k0nL+HbccUc5+OCD5c477yy49LthQbeGc5JOhNh4kq/H5NNW4trpWNUu3BG7fC38urnU37oysvvf/MNa82/6RD5Np9TeeOONJd334sWLzfoemRo2bCjNmjUzv6vN73//e7n66qtNZ0NHO3Tko6Lix9Eq/dvMjoZK/1zX/QI+xwvf4gQKQ7wgXhQ7eyqJGSgAkmNbvFi+fLkpw87WXtdcRzAtV/ueq21fu3atWYNKSwF1bcO0yy67zMy40nijpYLDhg0zpX06kytfzJzKgZE+vzoaLh0b3KZlEDqakL5ow5zL0KFDt1g4sOYlVyApZO0RrR//+9//Lvvss4+ZkqtBBdVNXdxeQsZAhn3HlPR7gugRL+DL7ClK+8qL0j6UEi+ipIuja2zQdQn/8Ic/VPudrnN19NFHy0EHHSQXXXSR3H333aasvJBZwcycQrCSHBnXTseKPRoFnQg4rnVpJ9G20hGEzFGE2lx55ZVywQUX1HqbPfbYw9Rs11zEUKfJ6o5M+rvaaJ24Xvbee29TI77DDjvIs88+a0Y79G9r7t6xZMkS829d94vScEJmTxKoNsygQpSIF4A7pX0k4PyYfNJul2Xic7xo3ry5NGjQoKp9TtOfc7XVen0+t08npr744gt56aWX6jweXfdQ44+uXaizcfNBcgrBdTYy0fFAknS7br3UpVu3bvLdd9+ZGnLdUUlpUNi8ebNp+POloxx6SY9g6P3ecsstpiOTLgPRMg4NNrqAIuzl8059ALZEvHBDyKV9mrxhfSYgWRUVFabtnzZtmtlxT2n7rz8PGjQo699o+66/v+KKK6qu0/Zdr6+ZmPr444/l5ZdfNutK1WXu3Llmvauapea1oazP4w5HUiUBriSmAFfozhm6i4buvKEj16+99poJMGeffba0adPG3Oarr76S9u3bV41sf/bZZzJq1KiqnTS09vvMM8+UrbfeWk488URzG90mXDsV5513nrzzzjtm+/Drr79eLrnkEmnUKNyZfYiPC/HChWPMBwnNMBAvwMLoKBalfX4YMmSIPPjgg/LYY4+ZHVwvvvhis5ag7t6n+vbtW60s8PLLLze7vGoZnpaH61pWb731VlUySxNTZ5xxhrnuiSeeMGta6XpUeknv1qqLp48ZM8bEB40pervBgwfLL3/5SzMLN18kp8os9C+YiyfxLh5zTXQ6/KeNvHYmjj32WNNZ0O3BH3jggarfa+CYP3++fP/99+bnyspK+cc//mFuu9dee0nv3r3N9q7a6UiPYOi030mTJpl/dXREA4gGrJEjRyb2PBE/BjL8OtaohH5+4xLiRfKzp+CfuGeFJbHuVAhCWFe6d+/ectddd8nw4cOlU6dOZgaTJp/Si57rIIQuVJ7WvXt3efLJJ02c6Nixozz99NPy3HPPyYEHHlg1oPH888/Ll19+ae5vp512qrponFA6SDFhwgQ56qij5IADDjAzbTU5lRl78kFZH5CQ0NedQmF05wsNHLm0a9fOlGCk6Qj55MmT67zf3XbbLa/bAYgfcQLFIF4gKZT2AXYYNGhQzjK+6dOnb3GdzpbVSz4xIxvdpe/111+XUjFzCmXj8siyy8deDoyIA4iTi22ui8cMIEyU9qFYlPYhSSSnAAAAAKBMKO3zE6V9fgihtC+o5NTYsWPN9C6tUdedP2puLVuT7hqiCyZqXaLWI+6zzz5MC/Z0DRGXMSoOlB/xwm5JxAqX21qXj901Uxe3T/oQEDPihT+lfQAQS3Jq4sSJZgX4ESNGyJw5c8yiWT179jRby2ajK7gfd9xxsmDBArO4li7AqKvH77zzzkUdMOzECTuAmogXQOkYbEIIfIwXSc+eorQPxaK0D0kpeEH00aNHm+1p01sRjhs3Tl544QUZP368DB06dIvb6/XffvutWcl9q622MtfpqAhga5Jt/X5tY3s8FruFz3yPF0lNC3d5d04fBjLijhPl/uysake5Eezje7yAX6V9cc4O09I+Eo3lt/Dr5kkfAkqdOaWjFLNnz5YePXr85w7q1zc/z5w5M+vf6LaDuuWsTrvV7Qt1S8Jbb71VNm3alPNx1q1bJytXrqx2CYGrHQ4fOhsAyot4AQDIB/EiOkklNSjtAxB5cmr58uWm0dcgkEl/Xrx4cda/+eyzz8x0W/07rQO/4YYb5O6775abb7455+OMGjVKmjZtWnVp29bNEUq4ydVkm6vJTfiJeAFf2lbfnwuQNJ/jRdKlfUCxKO2Dl7v1bd68WVq2bCkPPPCAdO7cWXr37i3XXXedma6by7Bhw2TFihVVl0WLOAm0dX0KTtABlEso8cKWky/WMgLgqlDiBezErn2ABWtONW/eXBo0aCBLliypdr3+3Lp166x/oztoaC24/l3afvvtZ0ZCdBpvRcWWJ+m644ZegKS4vKYIYAPiBXwfyIgzTri+PqGuz9Zul2VJHwYs5Xu80NlTScxCySztSyK5oaV9cSdxAAQ0c0obeh2dmDZtWrWRC/1Z676z+elPfyqffPKJuV3aRx99ZIJKtsBRbmxFHB0fOxtJYPYCfORivADgxqw/+IV4AdgpyaQqwlRwWZ9u86pbtT722GMyb948ufjii2XNmjVVu2v07dvXTJtN09/rbhqXX365CRq684YuWKgLGPqGkza/kHwDSkO8gO9tqc/PDYgT8QKuobQvGvSnw1ZQWZ/Smu5ly5bJ8OHDzdTZTp06yZQpU6oWMVy4cKHZYSNNFxv861//KoMHD5aDDjpIdt55ZxNIrrnmmvI+EwCJoFwDuRAvyo+NDwD4yPd4QWkfAESQnFKDBg0yl2ymT5++xXU6Jff1118XlzrbrnY44ioRC2W0OKS1p3SkYt2u65M+DHjG93jhKmJFuHFCzzdWtWMHMdiHeAHYR5Oq7DoJb3brAwAAQGlYnxBwW9IdfJ09hfKitC8alPaFi+QUChbCSHjc6HQA8A2xAgCgpX0AkA+SU4BHWI8GAOJHIg4A4Ct27UNcSE4BdaDTAQAAgFJR2ucfSvuiQWlfmEhOoSAkagAAdSFWAADSKO0DkA+SUwAABIQ17qJBQg6AC7OngGJQ2oc4kJzyCB0OAAD8RZwHUCpK+9xHaR98RXIKyAMj4gCSPtFiwwMAgKt8Lu2Le90pwFckp5A3EjQAgLoQKwCgdpT2wUWU9iFqJKcAS1CuAQBuIzEHwAWU9rmP0j74iOSUBSjVAAAALpx30FEAUCxK+wDUhuQUAAAAAARU2sfsKRSD0j5EieQU8kKpAq8BAPdRPgwAgB9CKe1DOEhOlQnT3AEAoSOJDwDuzJ5KAqV9KBT97HCQnPIEo+EAAPifoCPeAygXSvtQDEr7EBWSU4BnWGAfAAAAAOASklNAAShZAaAWfNki6UMAAJTB+rbrE318Svv8EndpXyjrTlHaFwaSU6gTCRkAQF2IFQDgHkr7UAxK+xAFklOARZJeS4RRCQAoHYk6wC3rdmX2FAAkjeQUAACWYy05AIBPKO0rH0r74AuSUwAAAAAQKEr7UAxK+1BuJKcAAAhA0mXDAGAzSvsAIFkkp4ACsZYIAAAAUBpK+8qH0j74gOQUAAAAgOCFPHuK0j4Ug9I+lBPJKQAAUBJmlLqHRfYBAIBNSE55IMp1ROhwAABgFxfXD1vwZYukDwGAhSjtKx9K++A6klMAAABlxuAO4CZK+4DCUNqHciE5BQAAAAAAgMSQnEoYaz4AAAAACHX2lM+lfXFLqrSP2VMoB5JTAAAAAGBJaR/8Efe6U6Fg3Sk/kZwCAAAAAABAYkhOAUVgoVsAAAB/JT17itI+FIvSPriK5BQAAAAAABGgtC8alPb5h+QUAAAx8PUkipmkAAAAKBXJKQAAgAiQuAPcRmlfvCjtKx9K++AiklPIiZNqAAAAACgNpX3R8HVWeqhITgEAAABAFiHPngKAOJGcAgAAAABUQ2mf2yjtg2tITgEAAAAAECFK+6JBaZ8/SE4BAAAAQA6U9gFA9EhOAQAAAAC2QGmf2yjtg0tITgEAAACAxbOn4AdK+6JBaZ8fSE4BgAO+/fZbOffcc6VJkyay/fbbS//+/WX16tV5/W0qlZKf//znUq9ePXnuueeq/U6vq3mZMGFCRM8CABA14oWfKO0DkK+xY8dKu3btpLKyUrp27SqzZs2q9fZPPfWUtG/f3ty+Q4cOMnny5KrfbdiwQa655hpz/bbbbitt2rSRvn37ytdff1222JNGcgoAHKCN/fvvvy9Tp06VSZMmySuvvCIDBw7M62/HjBljOhG5PPLII/LNN99UXXr16lXGIwcAxIl4gXKjtM9tlPaFZeLEiTJkyBAZMWKEzJkzRzp27Cg9e/aUpUuXZr39jBkzpE+fPiaZ9Pbbb5t2XS/vvfee+f33339v7ueGG24w/z7zzDMyf/58OeWUU8oWe9IalvC8AQA1rFy5strPjRo1MpdSzJs3T6ZMmSJvvvmmdOnSxVx33333yYknnih33XWXGcHIZe7cuXL33XfLW2+9JTvttFPW2+joRuvWrUs6RgBAYYgXbpb2JVk+pLOn6PD7UdpH8g1RxYvRo0fLgAEDpF+/fubncePGyQsvvCDjx4+XoUOHbnH7e+65R0444QS56qqrzM833XSTSTDdf//95m+bNm1qfs6kvzv00ENl4cKFsuuuu5YUezKRnAIQhIpFFdKgMroTyk1rN5t/27ZtW+16HbW48cYbS7rvmTNnmg5BurFXPXr0kPr168sbb7whp512Wta/05GOc845x0ztra0zcckll8ivfvUr2WOPPeSiiy4yway2kXMA8BnxgngBwD2aOI57bTjb4sX69etl9uzZMmzYsKrrtP3XOKDxIRu9XmdaZdKZVjVLuzOtWLHCtP0ab0qJPTWRnAKAMlq0aJGptU4rdRRcLV68WFq2bFntuoYNG0qzZs3M73IZPHiwdO/eXU499dSctxk5cqT87Gc/k2222UZefPFF+fWvf23qwy+77LKSjxsAkBvxwk1Jz55KsrQv7vIwnV3EAuLloe9dEuWZOtOP9dLiixfLly+XTZs2SatWrapdrz9/+OGHWf9GY0O22+eKGWvXrjVrUGkpYPqYio09NZGcAoAy0kY6M3jURqfW3n777bXeRqfJFuP555+Xl156ydSO10brx9MOPvhgWbNmjdx5553BdTYAIG7ECxSD0j4/UNqHqOJFlHRx9LPOOstsnvGHP/yh7PdPcgoAEnLllVfKBRdcUOtttHRCSyxqLmK4ceNGsytGrvIL7Wh8+umnVdNt004//XQ54ogjZPr06Vn/Tnf00FrzdevWlWUUHwBQOuIFANhZ2meT5s2bS4MGDWTJkiXVrtefc8UAvT6f26cTU1988YWJG5nJsmJiTzYkpwAgIS1atDCXunTr1k2+++47U0PeuXNnc50Ghc2bN5vOQa5Rdl0XJJNuAfu73/1OTj755FoXxN1hhx3oaACARYgXdqG0Lz6U9pUPpX3+q6ioMG3/tGnTqnZT1fZffx40aFDOuKG/v+KKK6qu0wXQ9fqaiamPP/5YXn75Zdlxxx1Ljj3ZkJxCTuv3aysV8xYlfRhA8Pbbbz+zi4buvKG7ZmiA0ABz9tlnV+1+8dVXX8mxxx4rjz/+uNk9Q0cpso1U6I4au+++u/n/v/zlL2Zk5LDDDpPKykoTiG699Vb5zW9+E/tzBACUjngRBkr7AOSii5uff/75ZnFybePHjBljyrDTu/f17dtXdt55Zxk1apT5+fLLL5ejjjrK7NZ60kknyYQJE8yurQ888ID5vcaRM844Q+bMmSOTJk0ya1ql15HSNaU0IZZP7MkHySkAcMATTzxhGnntUOjOF1puce+991b9XoPA/PnzzY5L+dpqq63Mzky6EK7Wju+1115V288CANxEvADcwLpT0Qi9tK93796ybNkyGT58uEkiderUSaZMmVK16PnChQtNbEjTzTCefPJJuf766+Xaa6+Vvffe2+zUd+CBB1YNaOjahErvK5POojr66KPzij35IDkFAA7QkQkNHLm0a9fOdBhqU/P3OsKhFwCAP4gXYZT2JTV7itI+t1HaF4ZBgwblLOPLto7gmWeeaS7Fxox8Yk8+/pMyAwAAAAAAAGJGcgoAAAAAChRy6RDKI4kZYXHPfEtCiBsW+IDkFAAAAAA4JqkyqSTKwlibyX0s4o+6kJwCAACIaNdbAAAA1I3kFFAEOhwAAACgtA+lorQP+BHJqYStaseuBQAQAl87MCTrASA5lPbBJXGW9rHulHtITgEAAABAkXwdfACAOJGcAgAAAAAgIZT2ASSnvLBij/in1QIAAABIHqV9cAmlfciF5BRqxVoiAAAAQO0o7QOA0pCcAgAAAACHJTV7CuVDaR9CR3IKKJDPs8kY9QMAAChOiOdRlPbBdpT2uYPkFAAAQJn5PJABAIAr607BHSSnAAAAHOLiRijtdlmW9CEA3qO0z32U9iFkJKcAi7jY4QAAZgm5Z1U7OrFAFCjtiwelfSgEpX1uIDkFAAAAAABiQ2kfaiI5BQBAAJiZCQD+o7TPfZT2IVQkp1AnyjUAAACA/FDaFw9K+1AISvvsR3KqTEIMQrAT64gA/uF7DQAAfENpHzKRnAIKwCwyAAAA2DxwTWmf+yjtQ4i8T04d1/pDCQFriQAAYAcGMgCEKInSPgD+8D45BQAAokdCBgAQN9adcl+cpX2sO2U3klMWcGEtETodAPAf7XZZlvQhAAAsR2kfSkFpH0JDcgrIEwk6AAAAIDdK+wAUi+QUYAnWDQMA90U9kEGsANzC7KnoUdrn/uwpSvugSE4BAICyYIYpAABul/YBSSE5hbzR6QAAtzHrBgAQNUr7ABSD5BSQBxJzAAAkW6IEuIrSvuhR2ldevpf2VSyitM9GJKc82oWJEXEkwdXvCwCEOpDhwi7BAIAfUdqHUJCcgpcn3gCAZBAnAACU9gEoFMkpwCOujIYf1/rDpA8BcI4r328AwJYo7YsepX3l5XtpH+xDcgqoA7MAAJQL6/WgFJTvA0CYKO1DCEhOARawocNBpxkAisdABoC6hHauRWkfgEKQnLKES+UanIADgLviSIYTJwDALpT2oRiU9iFOJKc8Gw2xYQYOAAAAAKB8KO2D70hOAbVg9B8AAAA+DWbHidI+APkiOYWikLQBANQmpDgR0nMF4C5K+1AMSvsQF5JTQA50NgAAAADYgtI++IzkFIpG8qY8WCcMANwVVywkVgD+oLQPALZEcgrwJPHm0o6PAJIVV6LDxbbUd8QKIGyU9sGV0j6Eh+SUh+IcXaXjAQDxIbFgF2IggGKFNnsK5RNKaR/rToWnqOTU2LFjpV27dlJZWSldu3aVWbNm5fV3EyZMkHr16kmvXr2KeVggFnQ2gPIhXoA21R90phEl4oXfKO1zH7OnYF1yauLEiTJkyBAZMWKEzJkzRzp27Cg9e/aUpUuX1vp3CxYskN/85jdyxBFHlHK8XmNEHIBPiBcAANvjxa5tlktoQintA+B5cmr06NEyYMAA6devn+y///4ybtw42WabbWT8+PE5/2bTpk1y7rnnym9/+1vZY489Sj1mWManUfG4n4stC9wyGo4oEC/sRgm4O8/JllhRrHa7LEv6EGC5UOMF51/R8nndKUr7IKEnp9avXy+zZ8+WHj16/OcO6tc3P8+cOTPn340cOVJatmwp/fv3z+tx1q1bJytXrqx2QVgnsgDcRrwAAOSDeBHO7ClK+9xHaR+sSU4tX77cjFK0atWq2vX68+LFi7P+zauvvioPP/ywPPjgg3k/zqhRo6Rp06ZVl7Zt/Rtx9Y0Po+I+PAfAFsSL3EIdKfepjfXpuQBJsyFeMLsPADzfrW/VqlVy3nnnmcDRvHnzvP9u2LBhsmLFiqrLokWLJG7FBqlQOx0AEFq8oDMD17C2JXzgYryoDX2HaFHa5z5K+8LRsJAbawBo0KCBLFmypNr1+nPr1q23uP2nn35qFio8+eSTq67bvHnzjw/csKHMnz9f9txzzy3+rlGjRuYC90aSK+bZEehdGAUvZ+klHQ7YhngB3+JEGrOmAD/jhQ44LPiyhYRW2hd3x19L+ygNc5u+f5RoIvGZUxUVFdK5c2eZNm1atWCgP3fr1m2L27dv317effddmTt3btXllFNOkWOOOcb8vwvlFygMJ+1hYeYIciFeRKecyWjWJ7RfqO/Rca0/TPoQEBPiBbOnAKDgmVNKt3k9//zzpUuXLnLooYfKmDFjZM2aNWZ3DdW3b1/ZeeedTV13ZWWlHHjggdX+fvvttzf/1rwe/+l0NF6QKtsJbdPPGJmoCwk1IBrEC/g2e4p4AUSDeIGoS/t8LYHT5+Vz6WKazvBLYhF/WJ6c6t27tyxbtkyGDx9uFins1KmTTJkypWoRw4ULF5odNhAulzseAMqHeAEAcCleUNoXD0r73EdpH6xITqlBgwaZSzbTp0+v9W8fffTRYh4SjnElQZXUKHioZRoID/ECLseITMyaAqIVerzQ0r5GCyuSPgwASAxD1ggWHQ0AQD4YyAAAt/lc+uZrySLCE0RyKuRFNZM8sSX5Ew926gPgYpwgRrgVK1iwGaEIcbOXJNbyoSTMfXGXZsZdfor4BZGcQnJs7XzYelxJoMPhhm+//VbOPfdcadKkiVn4tX///rJ69eo6/27mzJnys5/9TLbddlvzt0ceeaT88MMPJd8vEEpb7MIxApmIF+7inAxAOYwdO1batWtnNpDo2rWrzJo1q9bbP/XUU2YnVL19hw4dZPLkydV+/8wzz8jxxx8vO+64o9SrV8/sjFrT0UcfbX6XebnooosKOm6SUxbybSaMbSf2SR8PZRoohnYI3n//fZk6dapMmjRJXnnlFRk4cGCdHY0TTjjBBBMNSm+++aZZzyNzUdli7hfJd0B8ihNJt8muHhuQC/GidCHOngoBpX3lx8L29pk4caLZAXXEiBEyZ84c6dixo/Ts2VOWLl2a9fYzZsyQPn36mAGHt99+W3r16mUu7733XtVtdPfUww8/XG6//fZaH3vAgAHyzTffVF3uuOOO6BdER+1Y0NDexW/paMBF8+bNM7sWaWdBt9lW9913n5x44oly1113SZs2bbL+3eDBg+Wyyy6ToUOHVl237777lny/gK8xwqZ4wUAGikG8cF9S/Qh27YML9DOaRBmqS0aPHm2SRP369TM/jxs3Tl544QUZP358tTY+7Z577jGDE1dddZX5+aabbjKDEPfff7/5W3XeeeeZfxcsWFDrY2+zzTbSunXroo+dmVMBsOUEN+kT/aQfH2FYuXJltcu6daWfdOmItpZQpDsEqkePHmZE+4033sj6Nzo6or9r2bKldO/e3WzHfdRRR8mrr75a0v3CTzbECZvaaJuOBf4iXgAAyhkv1q9fL7Nnzzbtc5q20/qztuPZ6PWZt1c60yrX7WvzxBNPSPPmzeXAAw+UYcOGyffff1/Q3zNzCkGMjtPRQOOFKWlQEd2I4Kb1P95327bVP2s6pfbGG28s6b4XL15sOg2ZGjZsKM2aNTO/y+azzz4z/+pj66h2p06d5PHHH5djjz3WTNPde++9i7pfnzfOmLq4fdKHETwbZlARL0C8IF6kS/sWfNki6cNABKV9vu5up88ridJFnf0W6gL3jRfZFS+WL18umzZtMoMMmfTnDz/MvkmctuHZbl9o237OOefIbrvtZmbS/vOf/5RrrrlG5s+fb9ar8jY5dUaTOfL0ykOSPgw40vmwrZNR7tkJPq0744tFixaZxWLTGjXK/Z7r1Nq6are1lKIYmzdvNv9eeOGFVdN6Dz74YJk2bZqZ1jtq1Kii7hfwOUFlW8zwIVawdk9uxAvkQmkfkFuIpX2LCogXSclcg1AXVd9pp53MIMenn34qe+65p5/JqVDoiWTjBamyJkWafmZPw5/uAETZAfG1kwG7aeDIDB61ufLKK+WCCy6o9TZ77LGHqd2uuYjhxo0bzc5Jueq6NSCo/fffv9r1++23nyxcuND8fzH3C3v4HCeSSFDZFDNsKLNE9IgXAIByxovmzZtLgwYNZMmSJdWu159ztdV6fSG3z5fuEqg++eSTvJNTrDlVC0b74ukMlLtDEMV9AlFo0aKF2ba1tktFRYV069ZNvvvuO1NDnvbSSy+Z0e50w1+Tbh+r02p1Om2mjz76yEy5VcXcLxCXONtxYgZsR7xIBn0BP7FrX/kx+80OFRUV0rlzZzPzNU3baf1Z2/Fs9PrM2ytdED3X7fM1d+7cagMg+SA5BSuUo2Nge1LKt5FwTtjio6PXuouG7ryhW3y/9tprZovvs88+u2qHpK+++sp0TvT3ql69embXjXvvvVeefvppM2pxww03mHpz3So23/tF7fgeRCvqNt32uGFTiRHcQLzwR1LfuyTKpUJdrwjFi7v81CVDhgyRBx98UB577DFT7n3xxRfLmjVrqsq2+/btaxYrT7v88svNbqx33323afd1Lau33nrLtPFpOktWk00ffPCB+VkHM/Tn9LpUWrqnu/zpAIbu6Pf888+bxznyyCPloIMOyvvYKevzrFbclZKNcpX6hdypKMcaInQ43KG7X2iQ0Npt3XXj9NNPNx2JtA0bNphAkbkrxhVXXCFr1641W4RrUOnYsaMZCcmcWlvX/SI6xInkysBtjh2+DWQgfsSL8mJhdLgmqYXRYYfevXvLsmXLZPjw4SZ5pJtcaPIpvei5lmtrG56mu7Q++eSTcv3118u1115rNsF47rnnzI57aZpsSie3lA5MZC7MrjO2/va3v8mYMWNMIkwXcNcYofdZCJJTsI7NnQYgKbojkgaOXLQsI5VKZV1EVy/F3i9gY2woNlEVYnxh44zwEC8AJCHkXftsM2jQoGoznzJNnz59i+vOPPNMc8lF1zysbd1DTUb9/e9/l1JR1hfYCSUjssngdQcQhVATD4WW41G+B8BFlPZFh5lFgH2YOQUAAKwu7cvFt4QTAxmAnSjtg2tCKO3TdaeSSKQiOsycAiJGZ6O641p/mPQhAAAAOIH1QeESdu1DKUhOBYhkiftCLeUBAF8RmwG7hbY7K6V9AOJGcgoAAFRDosQPDGQAQNilfb7T0j74g+SU5dNwObF0m80dPKaJA34gTiBKxAogeXwP4RJK+1AsklOBTuG1OWkCAKGgwwGfY7Kv51AIV2ifaUr7AMSJ5BQAAAgmYQIAQCgo7YNLSE4FjI6Hm68vJTwAAABhYaYtXEJpH4oRTHLK5e3rSUbANqFNawdC/T4wiBE9BjIAt/jc5ttS2hc3SvsAOwSTnEJ2dDyiwesKIE4kIgDAf6HMnop73SnfUdoHV5CcilgoQQRu4XMJIF8k28N9bZOKFS7PdkcYQps9BRSD0j4UiuSUI6IcFbf95Ng1Ub6ezI4A/EOyGABgM0r73BfC7Cm4j+QUAAAeYBDDLQxkAChGKAMalPYB4SE5BYOOR3nwOgLuopQIAJAvSvsAu0r7WHfKfSSnAEcwEg4gSSTfy4fXEoBrKO1zH6V9sB3JKYdGRqJOTnCyXBpePwBA0hjIAPzvI1DaB8BHJKdiEEoAgRv4PAL+YhDDfq68hqXGClsG9gAAyaK0D/kiOQUnT5ptw+uWH9b0AbIjaQwAsB2lfe6jtA82IznlGKbrh5mYsul9ZzQcCPt7QTK+eLx2gH8o7YsWpX1AOEhOYQucPAOAu2xKZiNevPcAABtR2od8kJyKiWujGySo8sPrBCBEtH2F4zUD4ANK+9xHaR9sRXLKQYyMhtXRKOf77VqSFAB84FpiilgBFIbSvmhR2geEgeRUnkJaT8TVk2kAcFk5OxlxDGIQI+zCwBUAwObZU5T2oS5BJafYKaxwdD6y43UBANrCfPAaAWEIafYUpX0AohBUcsonjJCG0dHgfQYAd4WamApxtjmAaFHaB/iP5FSMXK0LD/XkGluiwwG48/2IK7lNjEgeAxkAgEL5XtoH95CcQl7ofLg/a8rV5CgA+xEj/HlNiBVA8Sjt8wulfW5j3Sn3kJxyWNwjpa6eaJdL6M8fQPRcTgzQRvoxkAEAtqK0D/AbySkUJNTOR6jPG4DbGMSIH68BAMAVlPbBJiSnYp6qW+5R8SRGTEM78U7i+VLSBwDuCS0+AtgSpX1+obTPbZT2uYXkFIoSygl4KM8TgD1cTybTboY9kGHbxgAA/EJpnx+zp4BsSE55IKn1JnzvgCT1/GxdP4QOB+AmZtjGI8TnHIXjWn+Y9CEAJeOcCagdpX3IhuQUSuLrybivzwtAtOiQhNmO+lD+DcB9lPZFg9I+t1Ha5w6SUwlwvWTD9w6Ib8/Ht88bECVfZ20wwzY6vjxHYgUAV1DaV36U9sEGJKc8kfQIqi8n50k/j6TfRwB28ClRkHS7GiWfnxuA0oQ0kzaE2VMoP0r7IKEnp0odFQ8p0IR2ku768QOArclv39pXfT5JPicGMgCEMLhhE0r7gOgFl5zyOXDYcLKa9Am7y8dsw/sXJV/LpQC41daWyofnAACuo7Sv/Hwu7WPdKTeQnELQJ++uHGexGD0DYBuX211fBzLKFSuYXQ7Y8Z1gYXS4gtI+ZCI55RmbZt/YPEpu27HZ9L5lQ4cDiP/74usMW2VT++vzMQMAyofSPiBaJKcQ1Am9bUkpAAiVK22xTXHDluQigPwxwBcdSvvKj9I+JInkVIKimnJr48mrDSf3ST++S+8XAH/Z1ObYEBtqY/OxAUBtKO2DKyjtQxrJqSIwAuJWR8T2zk9UWG8KgCtsa6dtO54ok4rECgDIXwilfT7PnoLdSE55yqaR8dpO/KM8+bexc+Ha+wQgWSHNsLWh3U768QH4iYHt6FDah0JQ2me3hkkfQOi049FoYYWELLMj0PSz4qZ10pkAAH9om15sPCj28WxmazKx3I5r/WHShwB4JYl+hpb2kQBAMaV9JBpBcspjejLbeIFbwcH2DkKInQ1G+wA/2R4jasaDcierQoo3cSBWAAiptM/30jd9fiGUMMIuQZb1MTIH37GGCJAsOurRloMXk1gq9e99HMggVgDxIS5Ehxk3gB+YOVVCgFnwZQvrp9zaPjIeKldmTQGhDmBMXdxebEGMyM6lBBMAJIXSPrgirtI+/Wx+1yryh0ERgpw5FRoSIXYJ8f1gtiJgrxDbJFfw3gB+YfaUP0IoefO9dBH2ITkFeIYyDQBAXYgVAHxCaR/gPpJTgZwkMvpqB94HAMUgRoTHpfeE2SCA3ZJIRmtpH2CrxosoO7URyamATsZcOtH1URyvf7lPPlz7jAM2ce37Q4ywB+8F4C/XYgNyo7QvmnWnEC6SU4HhhBcAgLBR0geEJ4TvPaV9gNtITlkkhKARKpKCAFyIEbRVyeM9AOALSvv8wMLoiEuwyamQdw/jxNfP15vkJoByIEYkx8Xy73IJ+bwM4aG0zx8hlPbFjdK+cAWbnLJVXCeNdD5QF06c7PLtt9/KueeeK02aNJHtt99e+vfvL6tXr855+wULFki9evWyXp566qmq22X7/YQJE2J6VvAlsYBwESvsQ7wozDGtPpJQhBBDKO0DRMaOHSvt2rWTyspK6dq1q8yaNavW22tb3759e3P7Dh06yOTJk6v9/plnnpHjjz9edtxxR9P2z507d4v7WLt2rVxyySXmNtttt52cfvrpsmTJkoKOm+RUwCdlJKiix6wplIt2NN5//32ZOnWqTJo0SV555RUZOHBgztu3bdtWvvnmm2qX3/72tyZY/PznP69220ceeaTa7Xr16hXDMwqDqzGC+BA/XnOUC/HCDa7Gh0JR2ucHSvvcMXHiRBkyZIiMGDFC5syZIx07dpSePXvK0qVLs95+xowZ0qdPHzOQ8fbbb5t2XS/vvfde1W3WrFkjhx9+uNx+++05H3fw4MHyl7/8xSS6/v73v8vXX38t//Vf/1XQsTcs6NaILdHQaGFF0oeBEtHRCLNUY+XKldV+btSokbmUYt68eTJlyhR58803pUuXLua6++67T0488US56667pE2bNlv8TYMGDaR169bVrnv22WflrLPOMh2OTDqyXvO2odPP7dTF7SX0NqzxArZajgMDGWEiXgD+lPaRvCl/aR+z4IqLF6NHj5YBAwZIv379zM/jxo2TF154QcaPHy9Dhw7d4vb33HOPnHDCCXLVVVeZn2+66SYzuHH//febv1XnnXde1UzbbFasWCEPP/ywPPnkk/Kzn/2sajBjv/32k9dff10OO+ww8TY5dUaTOfL0ykOSPgwv0PmIBokp+zRZsE4aNozufdm4cV3VCHQmHbW48cYbS7rvmTNnmg5BuqOhevToIfXr15c33nhDTjvttDrvY/bs2WYKrk7zrUmn4P7qV7+SPfbYQy666CITzHTKLuwU5wAGMSJ6xAv7EC/CixchDUiEMAiuSQ3WLUIcmnxuV7xYv369acOHDRtWdZ22/xoHND5ko9frTKtMOtPqueeey/s49TE3bNhgHidNywR33XVXc/9eJ6dQXnQ+3O5oMBJul0WLFpl1PtJKHQVXixcvlpYtW1a7rmHDhtKsWTPzu3zoaIaOXnTv3r3a9SNHjjQjHNtss428+OKL8utf/9qsTXLZZZeVfNwA7IkXUcSKUMqSokK8gH6HFnzZQkIo7Wv8hd99jRBmT+nzYwF4u+PF8uXLZdOmTdKqVatq1+vPH36YvZpFY0O22+cbM9L3UVFRYQZHSrkfklOWBpa4RzVIUJWHLyPgdDiKp4EjM3jURqfW1la7nS7RKNUPP/xgptnecMMNW/wu87qDDz7Y1JTfeeeddDbKyPUYQXwAokG8AIDcKO0rLl64jOQUqtABcS8xxawpt1155ZVywQUX1HobLZ3Q9T1qLmK4ceNGsyNTPmt/PP300/L9999L375967yt7uihtebr1q0ryyg+/EB8KD9fBjMQD+JF9Cjt8wulfQhR8+bNzTqCNXfJ059zxQC9vpDb57oPLSn87rvvqs2eKvR+gt6tz/aFmpNIPHCyDMSnRYsWph67totOke3WrZtp7LWeO+2ll16SzZs3m85BPiUap5xyinm8uug6IzvssIMXHQ3fxR0jiA/lQ/k3CkW88Fcos9VD2LUvhJI330sXXVdRUSGdO3eWadOmVV2n7b/+rPEhG70+8/ZKF0TPdfts9DG32mqravczf/58WbhwYUH3w8ypMvGpZpwR8rBnTYVykuQSXftDd9HQnTd01wxdcHDQoEFy9tlnV+289NVXX8mxxx4rjz/+uBx66KFVf/vJJ5+YbcQnT568xf3qdq86oqGLFFZWVppAdOutt8pvfvObWJ8f3EF8KJ0vST5ihZ2IF6UJafYUAD8NGTJEzj//fLMxhrbxY8aMMWXY6d37dGbszjvvLKNGjTI/X3755XLUUUfJ3XffLSeddJJMmDBB3nrrLXnggQeq7lNn32qi6euvv65KPCmdFaWXpk2bSv/+/c1j6xqHWoJ46aWXmsRUvouhK5JTlktq2i0dkLA6GbDfE088YToY2qHQXTdOP/10uffee6t+rx0QDRRajpFJt43dZZdd5Pjjj9/iPnWEQ3djGjx4sKRSKdlrr72qtp+FGwMYScQI4kPxfBrICGkmu2uIF+5JYpCb0j64gHWnCte7d29ZtmyZDB8+3CxG3qlTJ5kyZUrVoueaZNLYkKabX+hag9dff71ce+21svfee5ud+g488MCq2zz//PNVyS2lAx41dw383e9+VxVztNxbd/z7/e9/X9Cx10tphLHcypUrTTburfdbyXaNf3whn155SFnuu5yjI1EFlSQDBx0QexNTrsycKrXTsXb1Brn5sBdlxYoVRS0EmG4/jjx8uDRsWClR2bhxrbzy6siijxPlkX6/r3/9eKncbquS748YkRvxwY2Y4UKsKFdyiniBcsSLpGZOJVGBkUT8iHvXviSSUyGUvsVZwhhFcmrT+rUy93+vI15YJug1p1yZ4p7kqKeeTCedhLFR0q+JC50NAH5Luh10iW+vFbECPgtpJp8LMytLxawbwB0kpxDkiXUpeC3yF9IJHlAXBjDClOTrE0LHE/BFKEnfEBZGR3lRmhmO4JNTrnSebTjBpANix2tgw2cBAGxrG22TdOKOWAEAyWDXPqA4wSenys33UY+kT7ZDf950NgDY2jbY0EbagtcCcJsrg9e+xI+oUdoHuIHklENsCh4hnXiH8lx9T6wCNvD9exZKe2n7axDl+YLvn2EgSaF8v0Io7WP2VHlR2hcGklOOsS1BZcNJeCjPz6b3HoB9bGkjbGo3Q44ZAEoT0uwpALAByakIhDLq4esJuY3Px5ZOJxAa1zontrQVNrajUbLpudryGfD1Owb42I9wrd0oBqV9gP1ITjl4YmRrALHp5LwYoXWmQk6oAoiH7+2qbc8v6vMDYgWAcqG0zw+U9qGcSE45yuYElU0n6j4cs63vNQA7O/g2thm2t7OhPx8AfgxgA4DLSE4h0hN3m0/ebT8+WzuZ+eKEDkBNtre5LscNl+MFgOoo7YsGpX2A3UhOORxUXAkiNp3Mu5A0ixtlGoB/bI4PrrbBLh5zORErAJQbpX1+iLO0D34jOeU4mzsgtSWG4jzJdzUh5dJ7C6AwDGC40Ta7cIwuvNeAy5gJDtiDdaf81jDpA0C4ap7sN16QKvt9AgDsl267yxEHynUsriAxBfg7iLHgyxaxtyeNFlaI76V9cSc4dPYUs4uAupGc8iCo+BJIXOsQ+NDZoEwD8Jtr8SEzDsSdqCIGxY8ZKXDpszp1cfukD8Pb0r7GXyQ/MIHSaPIthBJGRIuyPk9OkBg59QfvJRBGfIgrOexqm1KzFLycyaMo7ztODGQAfmNh9GiwMLrbKO3zV1HJqbFjx0q7du2ksrJSunbtKrNmzcp52wcffFCOOOII2WGHHcylR48etd7eN3EGlRCCCdzgerIX5UO8QDllSyoVc/EBMR++IV7AZ8wqAiJITk2cOFGGDBkiI0aMkDlz5kjHjh2lZ8+esnTp0qy3nz59uvTp00defvllmTlzprRt21aOP/54+eqrr6QUZzSZU9LfA6F3NhgJR9RsiRcgkQHAbi7ECwbeohPCrn0hYF0txJ6cGj16tAwYMED69esn+++/v4wbN0622WYbGT9+fNbbP/HEE/LrX/9aOnXqJO3bt5eHHnpINm/eLNOmTcv5GOvWrZOVK1dWu7iM2VPIB+8dfEO8qBvxAcVgIAO+IV7kRmlfNCjtcxulfX4qKDm1fv16mT17tpk6W3UH9eubn3XUIh/ff/+9bNiwQZo1a5bzNqNGjZKmTZtWXXQ0BPkLIaD4hvcMviFe2Im2xn28h/CNS/GC2VPRCWH2FKV9QBmTU8uXL5dNmzZJq1atql2vPy9evDiv+7jmmmukTZs21QJQTcOGDZMVK1ZUXRYtWiRx8CngcPLqjiTeK0bCETXf44XL30fig7vifu+i/Gz6dM6F0hAvAH9Q2odSNJQY3XbbbTJhwgRTJ66LHebSqFEjc/GJnuAt+LJFrI/p2hbiIaKTCLgRL9hGHEkjXgBuxIso0I+IrrQv7vIwnT1FAgcow8yp5s2bS4MGDWTJkiXVrtefW7duXevf3nXXXSZ4vPjii3LQQQcV8rAoASez9krqvYl6lgaj4VDEC7sRG9zCDFv4zLV4wXlOdEIo7UP5sO5U4MmpiooK6dy5c7XFBtOLD3br1i3n391xxx1y0003yZQpU6RLly4SqqRO9OiE2If3BL4jXhSGBW+RC+8TfEe8yA8J42iwMDrg8G59us3rgw8+KI899pjMmzdPLr74YlmzZo3ZXUP17dvX1HSn3X777XLDDTeY3TbatWtnasf1snr1arGRr6MhnNzaI8n3ghMbxMn3eOEDYoPdeH8QCuKFnWiDouH7wuiULSK2Nad69+4ty5Ytk+HDh5sgoFu46ohFehHDhQsXmh020v7whz+YXTjOOOOMavczYsQIufHGGyU0SdSMh1Q7bjuCPEJCvHAjPhAb7MRABkLiWrxgHcJoS/saf5FK+jDgUGkfs98CXxB90KBB5pKNLkaYacGCBcUdGSI92aUjEl5iis4GkkC8cAMJKrskHS+i5ussdZSGeFE3FkaPBgujA46W9cGPJIHvJ7624fUG3Od7h5p2yg5Jvw82nKMALvA9JiSJhdHdR+INxSA5lVCwseHkL+kT4FDY8DrH9XnjRA1wOzZoe2VDmxUqXnsAAArDrn3+IDkVOE6Eo0MnD4CLCSpF2xXma27DZw9A7djdNRpJrFvk+8LoQKFITiXIlpPAEAJOyK+pLZ8zAG6xqR3zXUivNTNs4RM+z9GhtM99lPahUCSnYDDLpzxCfh05QUMI4vqc25JUDrU9CzFm2PKZA1A3vq/RYNc3IFkkp3IIrQOSZstJsotsfO1s+3wBcI9NCRSf2PSaEisAuNRm+YTSvvJg3Sk/kJyygG0nhXRECmfj62Xb5wqA299hG9s5V/FaAv5g5nh0KO1zH6V9KATJKeREkqpuvEZAeOLsiJCg8o9tr2GcnzE68UD5sDB6NFgYHUgOyalahNwByUQCxr3XJO7PEx0OIBy2t3+24nUD/MV5EJA8Svvc53Ry6owmc8QnNieoFCfWvAYA4mdrbKA9dP91svWzBQBplPa5j9I+BJGcigMjIW6daEfFpedMZwNAnFxqH+Nk++tCrADcR2lfNCjtA5JBcsoyLp0s2n7iHeJzdOnzA7gs7oELF77brrWXUeF1yI7BPviOz3h0mD2FfFHa5zaSUxZyoROS7UTcl5NxV5+Pa58bAH5+x11sP0N73q58lgDUje9zNJg9VV6U9iEfJKcsHQlxNdBkJnZcOUlXLh6zLZ8XRgoBZONym+rz83T1/AJwQSjnRC61eQDc0TDpA0A4wavRwgqxhU9BlY4GEA79vi/4soW4xNY4EGIMSSpehNJhBxBtaV/jL1JJHwaACDFzymK+JR1qzqqK6+Q+qccNAR0OhCypz7/LscHldtjlY3f9cwOgdiyMHg1K+9ws7WPdKXcxc6qATsjUxe1jf1wXR8mjCGy5RttDCIy1obMBwFU122/bZlWFHl8AuNVnCAGzpwC/MXPKASQgss9+Cr3jwOcCSB6zp8on6fY96cePEusSAv7zMS6EOnsKCBXJKUdOsAg4sO3zQIcDSJYN7UASgxLFJo/KfX+u8P1zAtgolHMkn9vOJFHaVzpK+9zkfFnfGU3myNMrD5EQ+F7ih/zQ0QCQFnJcoFNUN+IFAN9Q2gf4i5lTjuFEEwDskvQIOXEBtn4ukv5uAKGx4XvvIxZGB+JBcsrBEy0CT7hsee9t+B4AsK9tAACEda7ELFYUitI+5EJyylF0RMLDew6gNrQRSOOzAMD30r64sTA6ED2SUw7j5DOc99mm9zqUkUDAxe+FTW0Fwv4M2PKdAEKTRBvA7KloUNqH0JCccvyEy5aTUESD9xdAoWg3wsV7D9jFpj6Db5KYPQUgWiSnPGDbzBqUB+8pgGLRfoTHpvecDjmQLJvaA59Q2lc+rDuFbEhOeXTiRSDyh63vpY2fe8AWtn0/bG1HUF4MUAF2sy02RIXSvmhQ2oeQkJzyDCep7uP9A1AutCd+4/0FEDIWRgf8QnLK05EQTljdY3ti0ebPewi+/fZbOffcc6VJkyay/fbbS//+/WX16tW1/s2nn34qp512mrRo0cL83VlnnSVLliwp+X7hFtvbFhTH1veUWJE84gUUC6P7w9fZU5T2RWfs2LHSrl07qayslK5du8qsWbNqvf1TTz0l7du3N7fv0KGDTJ48udrvU6mUDB8+XHbaaSfZeuutpUePHvLxxx9Xu40+Xr169apdbrvttoKOm+SUx+iQuIP3CXXRDsH7778vU6dOlUmTJskrr7wiAwcOzHn7NWvWyPHHH28Cw0svvSSvvfaarF+/Xk4++WTZvHlz0fcLdzvmtDP+4L1EbYgX9rE5NriOhdGB6iZOnChDhgyRESNGyJw5c6Rjx47Ss2dPWbp0qWQzY8YM6dOnjxlwePvtt6VXr17m8t5771Xd5o477pB7771Xxo0bJ2+88YZsu+225j7Xrl1b7b5Gjhwp33zzTdXl0ksvlUKQnAog2HASay8SiMjHvHnzZMqUKfLQQw+Z0Y/DDz9c7rvvPpkwYYJ8/fXXWf9GOxcLFiyQRx991IyA6OWxxx6Tt956y3Q+ir1fuI02x228f6gL8QKZaC+iQWkfbDZ69GgZMGCA9OvXT/bff3+TUNpmm21k/PjxWW9/zz33yAknnCBXXXWV7LfffnLTTTfJIYccIvfff3/VrKkxY8bI9ddfL6eeeqocdNBB8vjjj5u2/7nnnqt2X40bN5bWrVtXXTSJVQiSUwElqAhQdnHp/XDhM26LlStXVrusW1f6VOKZM2eaEoouXbpUXafTaevXr29GL7LRx9VR8EaN/nMCpVN19W9effXVou8XfnxfiAnuceH9cuGzbxPiRVhC+X5Q2hcNSvvCLu1bmWe80Fmvs2fPNu1zmrbT+rO249no9Zm3VzorKn37zz//XBYvXlztNk2bNjUDFTXvU8v4dtxxRzn44IPlzjvvlI0bNxb0PBsWdGt4c3K74MsWSR9KsFzoYPioYv5X0rB+RWT3X3/zjydjbdu2rXa9Tqm98cYbS7pvDQgtW7asdl3Dhg2lWbNm5nfZHHbYYWa04pprrpFbb73VjHoMHTpUNm3aZKbZFnu/8K89Ih7Yz4W44VPHm3hBvIB7pX2Nv0glfRgIUMVHX1sVL5YvX27a7latWlW7Xn/+8MPscVrb8Gy3T7ft6X9ru4267LLLzIwrjQtaKjhs2DATQ3QmV97PN+9bwquTMkbN4+fqa+7aZztpixYtkhUrVlRdtGHORU/+ay4cWPOSK5DURRe11cUN//KXv8h2221nRji+++47EzR0BAXRcul742rbFALeG78RLxAHFkb3p7TP19lTKG+8SIquc3X00Uebsr+LLrpI7r77blP+XcisYC9mTp3RZI48vfKQpA/DScykip7LHQuXOti20F2M9JKPK6+8Ui644IJab7PHHnuYmu2aixjqNFndOUl/l4sucKs7MOkoio5wa0mG3l7vUxV7v8j/+zN1cXtxBbOo7OFa3CBWFId4ER7X4oJLmD3ldmkfibfa5RsvmjdvLg0aNNhit1X9OVdbrdfXdvv0v3qd7taXeZtOnTrlPBYt+9M4oWsa7rvvvhJMcsoWLgccklRhdyyQDB2t1ktdunXrZkaxtYa8c+fO5jpdpFZ3UdKGP59Alf4b7VyccsopZblf+IdYkCwXYweJqXgQL1AKBh+imz3l+lpGIdH3yvfF7CsqKkwbPW3aNLPjntJ2Wn8eNGhQ1r/R9l1/f8UVV1Rdp7uy6vVq9913NwkqvU06GaXrXul6gxdffHHOY5k7d66ZfVuzJLw2zNUtM9dP0ighKI1Pr5/rn2Wf6M4ZuouG7rwxa9Yss7OSBpizzz5b2rRpY27z1VdfSfv27c3v0x555BF5/fXXzWj4H//4RznzzDNl8ODBVaMX+dwvwvwe+dSWufJa83qjHIgX9nM1LhQqhNK+JDDDCPmU1z344INm11XdaVUTSGvWrDG796m+fftWKwu8/PLLzW6sWoan5eG6lpXu1ppOZmnZuCaubr75Znn++efl3XffNfehbX86AaYLo+uOfu+884589tln8sQTT5gY8stf/lJ22GEHyRczpyLg8gyqtMyTZEZa6uZbpyKUEyeXaCOvQeLYY481oxCnn3663HvvvVW/37Bhg8yfP1++//77quv0Zw0+WnbRrl07ue6660ygKOR+ETZiQXR8iBvECjsRLxAqSvsAkd69e8uyZctk+PDhZsFyne2kyaf0guYLFy6stp5g9+7d5cknn5Trr79err32Wtl7773lueeekwMPPLDqNldffbVJcA0cONDMoj388MPNferOrkp3e50wYYJJbOkaUzrbSmOIJsoKUS+lW3JYTqeN6eKMb73fSrZrnH2yl41rTrmeoMqGzolfHQsXOhtrV2+Qmw970Sz+l+/aHNnajx4t+ke6m8bGzevlb8seLvo4UR7p9/v614+Xyu22Elv4FA+IA6XxJXbYFisU8QKuxIukYkIS7XejhdF9l7JJIjkVd2mfrtHko7hmhWlp36b1a2Xu/15Xerxo+avo48XSh4KJF8ycQkkn1SF1UnzpUACInw8zatNYl6o4xBAAPsYE24Qwe0qTOL4mqBA2b5JTNu7YF0Lg8b3kI7TOhI0j4QDs5Hv7Xw6+xhBiBQD8BwujA+XhTXLKViEkqGo7CXepw+JrJyJfdDaAaPkcD0hUhRNLiBXwTa/G78iUVBcJQRK79unC6HGX9sFNOhssjtI+TSR+2zbyh0ERSE7FwOcOiasJK987DwDsFEI8CK38m3gCoBghxIOkUNoHuInkVEwIQMWfyOfTsaFzUBpGwoH4hBYPfEtWhRxviBXwlY3Lg0SF2VPRoLQPKB3JqRiF1iEpl5A7AnGgswHEL+R4kKtNty1pReypjlgBlF/IsSBqzJ5yU1ylfbATyamYEYRgEzobQHKIB4Ung8qVwCLxVBhiBQDUjdlT7mjyOe+TjbxKTrkyJZcOCWxAZwOAa0gqxY9YgVC40o8oB0r7ANioftIHECpO9pAkPn+AHfguwmZ8PoHo8T2LtrTPdz6WwPlWqoj8kZxKOBgRkBA3PnOAXfhOAoA9s6dCkcRMVJ09FUJpH4DikJyyAEkqxIXPGWAnvpuwDZ9JID5836ITwuwpwBckpyxCYEKU+HwBduM7ClvwWQQAd/hY2ocwkZyyDCeEiAKfK8ANfFeRND6DCB2lfdGitA/5YN2pMHmXnPIhoFDmh3LiswS4he8sksJnD0gO37/oUNoHuMG75JRPCFIoBUlOwF18fxEnPm+Af4Pd+WL2lB+zpyjtgw9ITlmOk0UUik4G4A++y4gS8QKwC9/H6DB7yj2U9oWH5JQDOHlEvvicAP4hBiAKfKYAAIBNSE45hA4KcuGzAfiP7znKhc8RUDdK+6JFaV/5UdoH13mZnPI9mNBBQRqfBSA8fO9RLD47gP34jkaH0j73UNoXFi+TU6HgJDNcvPcAaAOQL2IGgLowe8qP2VOAy7xNTvk+eyrbSScnnv7jfQaQiTYBteHzAbjZn+B7Gx3fZ09R2geXNUz6ABBdMJu6uH2ix4Ly4AQFQL7tBO0+FHEDAAC4xtuZU6HNnsqGEVO38f4BKBTtRth4/4HyC6k/QWlfNFgYvTSsOxUOZk4FoOaJKiPr9qJTAaAcmEUbDuIG4O93m/Y7utK+xl+kkj4MAKElp3S04+mVhyR9GFah02IPOhUAokbJn5+IHwCimj214MsWsc+earSwItbHBGAf75NTKPzklg5MdOhMAEgKAxNuI34A4Q12M3vKn9lTWtrX9NN1sZb2+VQOp8/Ft3JFBJqcYvZUYSgDLB86EwBsRKLKDcQQAAAQiiCSU4jm5JgOzZboSABwDQMSdiGOAHYKabCb0j4/Zk8BrgkmORVSQIlLaEkrOgwAQkCyKl7EFgC1obQvOr4vjE5pH1wTTHIK9p1o2xho6SQAQNgDEVEgtgBwDbOnAMQtqOQUs6fswsk6ALiLpNWWiGuA31gYHaWitA/ILajkFAAASD5B43IniwQUAPiD0j7AHsElp5g9BQCAuwmeUhNbJJcAlCKkvgSlfbAN6075LbjkFAAAcBfJJQAhorTPn9lTlPYB2dWXQEc8AAAAAAC1z56Km86eQvkw0wiuCDI5BQAAAAAuDXQzcxT4sbQPfgo2OcXsKQAAAACAlvbFSUv7AFQXbHIqnaAiSQUAAACgECH1ISjtcx+lfXBB0MmpEIMLAAAAADdR2hcdZk+5g9I+P5Gc+v9jFhUAAAAAbInZUwCiRnKqBhJUAAAAAOrCwuhwCaV9sB3JqSxIUAEAAABAWCjtcwelff4hOZUDZX4AAAAAahPS7ClK+wBEieRUHUhQAYB7ejV+J+lDAAAAsAqlfbAZyak8MIsKAAAAQDYh9RNCmD1FaR+QjIYJPa5XgefplYfEfiwAgLrbbNpnAICvtLRv6uL2SR8GkOi6U8wG8wczp8qAmVUAAAAAQpDE7Km4xT17Kk4kc2ArklMRJKlIVAGAHWiPAQBxCGlh9CT4vjA6pX0AyanIkKQCAAAAACDa0j74geRUjLOpSFYBQPxoewEAcQgp3rAwutso7YONWBDd0qDFIr4AAAAA6sLC6P6U9jX9dF3ShwEkhplTlmLGFQCUD+0oAADlxcLosAWlfX5g5lQAHStmYQEAAADxnLMnce4dyuwpLe1rtLAi6cPwprSPpA5sQnIqAIUktkhkAfBVUh0GAACAfFDah5CRnELspS90DgEAAOCrkGZPaWnfgi9beD17Skv7Gn+Riu3xgFAVtebU2LFjpV27dlJZWSldu3aVWbNm1Xr7p556Stq3b29u36FDB5k8eXKxxwsP19NK6gK45JZbbpHu3bvLNttsI9tvv31ef5NKpWT48OGy0047ydZbby09evSQjz/+uNpttC2vV69etcttt91WtuO2LV7w3QfgO+IF4P7sqbj4tGsfJYrRtaf5xIhvv/1Wzj33XGnSpImJPf3795fVq1dLpDOnJk6cKEOGDJFx48aZJzpmzBjp2bOnzJ8/X1q2bLnF7WfMmCF9+vSRUaNGyS9+8Qt58sknpVevXjJnzhw58MADC314IMhOKrPNsH79ejnzzDOlW7du8vDDD+f1N3fccYfce++98thjj8nuu+8uN9xwg2mvP/jgAxN80kaOHCkDBgyo+rlx48ZlOWbiBQDEj3hhR7wIqZQ8idlTAOJrT/OJEZqY+uabb2Tq1KmyYcMG6devnwwcONDcX77qpTQNVgB9gj/5yU/k/vvvNz9v3rxZ2rZtK5deeqkMHTp0i9v37t1b1qxZI5MmTaq67rDDDpNOnTqZFyybdevWmUvaihUrZNddd5Xpb7SQ7bZjg0EgCs+t6ig2Wrdmo9x57Evy3XffSdOmTQv++5UrV5q/O7r5edKwXnRTwDem1sv05f8rixYtMiMGaY0aNTKXcnn00UfliiuuMK9HbbRpb9OmjVx55ZXym9/8pqotbdWqlbmPs88+21ynoyp6f3opN5vjha2fdwDFI15UR7xIvn+RVKx5eck+sT/mwq+bx/6YFYviXRi98aL4SvuafB7fulMVH30tvli/T5u8brdx4zqZ8frtpceLFn2jjxfLHi8oXpS7Pc0nRsybN0/2339/efPNN6VLly7mNlOmTJETTzxRvvzyS/P3eUkVYN26dakGDRqknn322WrX9+3bN3XKKadk/Zu2bdumfve731W7bvjw4amDDjoo5+OMGDFCv/lcuHDhUnX59NNPU8X44YcfUq1bt47lGLfbbrstrtP2rJweeeSRVNOmTeu8nb5e+vhvv/12teuPPPLI1GWXXVb182677ZZq1apVqlmzZqlOnTql7rjjjtSGDRtKPk7iBRcuXJK6EC9+RLyojnjBhQsX3+PFugja03xixMMPP5zafvvtq/1e44MeyzPPPJP361pQWd/y5ctl06ZNJkuWSX/+8MMPs/7N4sWLs95er89l2LBhZipammY0d9ttN1m4cGFRmU2baJZVM5c1s58u8um5+PZ8fHou6ZHNZs2aFfX3OtX0888/N2UOUdORBV2DI1M5R8ELkW5j62p/L7vsMjnkkEPM66vTerX91Sm5o0ePLunxiRel8+l77NNz8e35+PRciBfFIV4QL2zi03Px7fn49Fx8jRfLI2hP84kR+m/NksGGDRua17e2dtmJ3fpyTVPTwOH6FyFNnwfPxU4+PR+fnkv9+sVPudcAkrlmhi10au3tt99e6210mqwuUBiVzBP1gw46SCoqKuTCCy80dedJdZQKQbxwi0/Pxbfn49NzIV5Eg3hhP5++xz49F9+ej0/Pxcd44bKCklPNmzeXBg0ayJIlS6pdrz+3bt0669/o9YXcHgBCobXbF1xwQa232WOPPYq673Qbq+2t7qyRpj9rDXkuWqe+ceNGWbBggey7775SLOIFAJQP8WLLYyZeAED07Wk+MUJvs3Tp0mr3ofFBd/ArpF0uKFWoIySdO3eWadOmVV2nC2zpz7ojSDZ6febtla7gnuv2ABCKFi1amFHu2i7a7hZDd9LQYJDZ/up07DfeeKPW9nfu3LlmFCnbbh6FIF4AQPkQL6ojXgBAPO1pPjFC/9VS6dmzZ1fd5qWXXjKPrQMZeUsVaMKECalGjRqlHn300dQHH3yQGjhwoFn8avHixeb35513Xmro0KFVt3/ttddSDRs2TN11112pefPmmcW7ttpqq9S7776b92OuXbvW/J3+6zqei718ej48F/988cUXZiHC3/72t2ZhRP1/vaxatarqNvvuu2+1RQdvu+020z7/+c9/Tv3zn/9MnXrqqandd9/dLOKoZsyYYRZAnDt3rlns8I9//GOqRYsWZtHEciBelIbnYi+fng/PxT/Ei/A+LzwXe/n0fHgubpgQQXtaV4xQJ5xwQurggw9OvfHGG6lXX301tffee6f69OlT0LEXnJxS9913X2rXXXdNVVRUpA499NDU66+/XvW7o446KnX++edXu/2f/vSn1D777GNuf8ABB6ReeOGFYh4WAIKl7Wq2HTxefvnlqtvoz7o7U9rmzZtTN9xwg9ldSYPUsccem5o/f37V72fPnp3q2rWr2c2psrIytd9++6VuvfXWsgZq4gUAxIt4AQBhu6/M7WldMUL961//MskoHRRp0qRJql+/ftUGRfJRT/+T/zwrAAAAAAAAoHyKX54eAAAAAAAAKBHJKQAAAAAAACSG5BQAAAAAAAASQ3IKAAAAAAAAibEmOTV27Fhp166dVFZWSteuXWXWrFm13v6pp56S9u3bm9t36NBBJk+eLC4+lwcffFCOOOII2WGHHcylR48edT53m9+XtAkTJki9evWkV69e4upz+e677+SSSy6RnXbaSRo1aiT77LOPs58zNWbMGNl3331l6623lrZt28rgwYNl7dq1krRXXnlFTj75ZGnTpo35zDz33HN1/s306dPlkEMOMe/LXnvtJY8++mgsxwo7EC+IF1EjXhAv4AfiBfEiasQL4gXKKGWBCRMmmG0Lx48fn3r//fdTAwYMSG2//fapJUuWZL39a6+9lmrQoEHqjjvuSH3wwQep66+/PrXVVlul3n333ZRrz+Wcc85JjR07NvX222+n5s2bl7rgggvMNr1ffvllyrXnkvb555+ndt5559QRRxyROvXUU1M2KPS5rFu3LtWlS5fUiSeemHr11VfNc5o+fXpq7ty5KRefzxNPPGG2/dR/9bn89a9/Te20006pwYMHp5I2efLk1HXXXZd65plnzNbWzz77bK23/+yzz1LbbLNNasiQIeb7r1ulanswZcqU2I4ZySFeEC+iRrwgXsAPxAviRdSIF8QLlJcVyalDDz00dckll1T9vGnTplSbNm1So0aNynr7s846K3XSSSdVu65r166pCy+8MOXac6lp48aNqcaNG6cee+yxlIvPRY+/e/fuqYceeih1/vnnWxM8Cn0uf/jDH1J77LFHav369SkbFfp89LY/+9nPql2nje9Pf/rTlE3yCR5XX3116oADDqh2Xe/evVM9e/aM+OhgA+LFfxAvokG8IF7AD8SL/yBeRIN4QbxAeSVe1rd+/XqZPXu2mW6aVr9+ffPzzJkzs/6NXp95e9WzZ8+ct7f5udT0/fffy4YNG6RZs2bi4nMZOXKktGzZUvr37y+2KOa5PP/889KtWzcz7bZVq1Zy4IEHyq233iqbNm0SF59P9+7dzd+kp+Z+9tlnZgrxiSeeKK6x9fuP6BEvqiNelB/xgngBPxAvqiNelB/xgniB8msoCVu+fLn5QuoXNJP+/OGHH2b9m8WLF2e9vV7v2nOp6ZprrjG1sTW/HC48l1dffVUefvhhmTt3rtikmOeijetLL70k5557rmlkP/nkE/n1r39tAvuIESPEtedzzjnnmL87/PDDdbakbNy4US666CK59tprxTW5vv8rV66UH374wdS8w0/Ei+qIF+VHvCBewA/Ei+qIF+VHvCBeoPwSnzmF/7jtttvMQn/PPvusWYTOJatWrZLzzjvPLMDYvHlzcd3mzZvNCM0DDzwgnTt3lt69e8t1110n48aNExfpAn86MvP73/9e5syZI88884y88MILctNNNyV9aACKQLywB/ECgM2IF/YgXgCWz5zShqZBgwayZMmSatfrz61bt876N3p9Ibe3+bmk3XXXXSZ4/O1vf5ODDjpIklboc/n0009lwYIFZleEzAZYNWzYUObPny977rmnuPK+6A4aW221lfm7tP32289k1XXaa0VFhSSlmOdzww03mOD+q1/9yvysO9CsWbNGBg4caIKiTtt1Ra7vf5MmTRjV8Bzx4kfEi+gQL4gX8APx4kfEi+gQL4gXKL/EPzH6JdTM8bRp06o1Ovqz1uRmo9dn3l5NnTo15+1tfi7qjjvuMBnmKVOmSJcuXcQGhT4X3Xb33XffNVNu05dTTjlFjjnmGPP/urWoS+/LT3/6UzPVNh0A1UcffWSCSpKBo9jno2sN1AwQ6cD44zqB7rD1+4/oES+IF1EjXhAv4AfiBfEiasQL4gUikLJk20rdhvLRRx81WzcOHDjQbFu5ePFi8/vzzjsvNXTo0GpbvTZs2DB11113me1RR4wYYdVWr4U8l9tuu81s2fn000+nvvnmm6rLqlWrUq49l5ps2k2j0OeycOFCs6vJoEGDUvPnz09NmjQp1bJly9TNN9+ccvH56HdEn8///d//ma1SX3zxxdSee+5pdqZJmn7WdatjvWiTNHr0aPP/X3zxhfm9Pg99PjW3er3qqqvM91+3Smar13AQL4gXUSNeEC/gB+IF8SJqxAviBcrLiuSUuu+++1K77rqraUh1G8vXX3+96ndHHXWUaYgy/elPf0rts88+5va67eMLL7yQcvG57LbbbuYLU/OiX3YX3xdbg0cxz2XGjBlmC2FtpHXb11tuucVsZevi89mwYUPqxhtvNAGjsrIy1bZt29Svf/3r1L///e9U0l5++eWs34H08eu/+nxq/k2nTp3Mc9f35pFHHkno6JEE4gXxImrEC+IF/EC8IF5EjXhBvED51NP/RDEjCwAAAAAAALB+zSkAAAAAAACEi+QUAAAAAAAAEkNyCgAAAAAAAIkhOQUAAAAAAIDEkJwCAAAAAABAYkhOAQAAAAAAIDEkpwAAAAAAAJAYklMAAAAAAABIDMkpAAAAAAAAJIbkFAAAAAAAABJDcgoAAAAAAACSlP8fFaro3zOP+m8AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 1200x600 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 6))\n",
"plot_solution(solver=pinn_feat)"
]
},
{
"cell_type": "markdown",
"id": "e7bc0577",
"metadata": {},
"source": [
"## Solving the problem with learnable extra-features PINNs"
]
},
{
"cell_type": "markdown",
"id": "86c1d7b0",
"metadata": {},
"source": [
"We can still do better!\n",
"\n",
"Another way to exploit the extra features is the addition of learnable parameter inside them.\n",
"In this way, the added parameters are learned during the training phase of the neural network. In this case, we use:\n",
"\n",
"\\begin{equation}\n",
"k(x, \\mathbf{y}) = \\beta \\sin{(\\alpha x)} \\sin{(\\alpha y)},\n",
"\\end{equation}\n",
"\n",
"where $\\alpha$ and $\\beta$ are the abovementioned parameters.\n",
"Their implementation is quite trivial: by using the class `torch.nn.Parameter` we cam define all the learnable parameters we need, and they are managed by `autograd` module!"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ae8716e7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"GPU available: True (mps), used: False\n",
"TPU available: False, using: 0 TPU cores\n",
"HPU available: False, using: 0 HPUs\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3eed1678b6c14cf2a190c248766815c7",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Training: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
]
}
],
"source": [
"class SinSinAB(torch.nn.Module):\n",
" \"\"\" \"\"\"\n",
"\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.alpha = torch.nn.Parameter(torch.tensor([1.0]))\n",
" self.beta = torch.nn.Parameter(torch.tensor([1.0]))\n",
"\n",
" def forward(self, x):\n",
" t = (\n",
" self.beta\n",
" * torch.sin(self.alpha * x.extract([\"x\"]) * torch.pi)\n",
" * torch.sin(self.alpha * x.extract([\"y\"]) * torch.pi)\n",
" )\n",
" return LabelTensor(t, [\"b*sin(a*x)sin(a*y)\"])\n",
"\n",
"\n",
"# make model + solver + trainer\n",
"model_learn = FeedForwardWithExtraFeatures(\n",
" input_dimensions=len(problem.input_variables)\n",
" + 1, # we add one as also we consider the extra feature dimension\n",
" output_dimensions=len(problem.output_variables),\n",
" func=Softplus,\n",
" layers=[10, 10],\n",
" extra_features=SinSinAB(),\n",
")\n",
"\n",
"pinn_learn = PINN(\n",
" problem,\n",
" model_learn,\n",
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
")\n",
"trainer_learn = Trainer(\n",
" solver=pinn_learn, # setting the solver, i.e. PINN\n",
" max_epochs=1000, # setting max epochs in training\n",
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
" enable_model_summary=False, # model summary statistics not printed\n",
" train_size=0.8, # set train size\n",
" val_size=0.0, # set validation size\n",
" test_size=0.2, # set testing size\n",
" shuffle=True, # shuffle the data\n",
")\n",
"# train\n",
"trainer_learn.train()"
]
},
{
"cell_type": "markdown",
"id": "0319fb3b",
"metadata": {},
"source": [
"Umh, the final loss is not appreciabily better than previous model (with static extra features), despite the usage of learnable parameters. This is mainly due to the over-parametrization of the network: there are many parameter to optimize during the training, and the model in unable to understand automatically that only the parameters of the extra feature (and not the weights/bias of the FFN) should be tuned in order to fit our problem. A longer training can be helpful, but in this case the faster way to reach machine precision for solving the Poisson problem is removing all the hidden layers in the `FeedForward`, keeping only the $\\alpha$ and $\\beta$ parameters of the extra feature."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "daa9cf17",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"GPU available: True (mps), used: False\n",
"TPU available: False, using: 0 TPU cores\n",
"HPU available: False, using: 0 HPUs\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dd1dfdff74d44fe39c9a26577360887c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Training: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
]
}
],
"source": [
"# make model + solver + trainer\n",
"model_learn = FeedForwardWithExtraFeatures(\n",
" layers=[],\n",
" func=Softplus,\n",
" output_dimensions=len(problem.output_variables),\n",
" input_dimensions=len(problem.input_variables) + 1,\n",
" extra_features=SinSinAB(),\n",
")\n",
"pinn_learn = PINN(\n",
" problem,\n",
" model_learn,\n",
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
")\n",
"trainer_learn = Trainer(\n",
" solver=pinn_learn, # setting the solver, i.e. PINN\n",
" max_epochs=1000, # setting max epochs in training\n",
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
" enable_model_summary=False, # model summary statistics not printed\n",
" train_size=0.8, # set train size\n",
" val_size=0.0, # set validation size\n",
" test_size=0.2, # set testing size\n",
" shuffle=True, # shuffle the data\n",
")\n",
"# train\n",
"trainer_learn.train()"
]
},
{
"cell_type": "markdown",
"id": "150b3e62",
"metadata": {},
"source": [
"In such a way, the model is able to reach a very high accuracy!\n",
"Of course, this is a toy problem for understanding the usage of extra features: similar precision could be obtained if the extra features are very similar to the true solution. The analyzed Poisson problem shows a forcing term very close to the solution, resulting in a perfect problem to address with such an approach."
]
},
{
"cell_type": "markdown",
"id": "8c64fcb4",
"metadata": {},
"source": [
"We conclude here by showing the test error for the analysed methodologies: the standard PINN, PINN with extra features, and PINN with learnable extra features."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "a04e8a5d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PINN\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1079e27187e3401b8fe32a2eedc2048d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Testing: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" Test metric DataLoader 0\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" test_loss 0.06821467727422714\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
"PINN with extra features\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "162d7ddcaaa04224a497fac59416dba3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Testing: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" Test metric DataLoader 0\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" test_loss 0.0006851177895441651\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
"PINN with learnable extra features\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3223351c32cd439da929c499f80b847f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Testing: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" Test metric DataLoader 0\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" test_loss 5.667239566520266e-09\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
]
}
],
"source": [
"# test error base pinn\n",
"print(\"PINN\")\n",
"trainer_base.test()\n",
"# test error extra features pinn\n",
"print(\"PINN with extra features\")\n",
"trainer_feat.test()\n",
"# test error learnable extra features pinn\n",
"print(\"PINN with learnable extra features\")\n",
"_ = trainer_learn.test()"
]
},
{
"cell_type": "markdown",
"id": "0a4c8895",
"metadata": {},
"source": [
"## What's Next?\n",
"\n",
"Congratulations on completing the two-dimensional Poisson tutorial of **PINA**! Now that you've learned the basics, there are multiple directions you can explore:\n",
"\n",
"1. **Train the Network for Longer**: Continue training the network for a longer duration or experiment with different layer sizes to assess the final accuracy.\n",
"\n",
"2. **Propose New Types of Extrafeatures**: Experiment with new extrafeatures and investigate how they affect the learning process.\n",
"\n",
"3. **Leverage Extrafeature Training for Complex Problems**: Apply extrafeature training techniques to more complex problems to improve model performance.\n",
"\n",
"4. **... and many more!.**: There are endless possibilities! Continue exploring and experimenting with new ideas.\n",
"\n",
"For more resources and tutorials, check out the [PINA Documentation](https://mathlab.github.io/PINA/)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "pina",
"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.9.21"
}
},
"nbformat": 4,
"nbformat_minor": 5
}