Skip to content
Snippets Groups Projects
Example offline analysis.ipynb 61.6 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "59f50187-f73f-471b-b668-9126e6f48501",
   "metadata": {},
   "source": [
    "# Automated virtual spectrometer example offline analysis\n",
    "This is an example notebook showing how to use the `pes_to_spec` infrastructure in this package. The objective here is to calibrate the photo-electron spectrometer data automatically. This is done by using data from one \"training\" run that contains data from both the photo-electron spectrometer (PES), XGM and the grating spectrometer and then using the correlation between them to calibrate the PES data when no grating spectrometer is available.\n",
    "This notebook includes the main analysis to simple get a calibrated PES spectrum using this automated method, as well as further analyses on the output in a second section. The objective of the second sections are only to validate results and may probably be skipped in most cases, if one needs only the PES spectrum.\n",
    "\n",
    "We start by importing some modules. The key module here is called `pes_to_spec`. It can be cloned from its repository using the following command (for example) in Maxwell:\n",
    "\n",
    "`git clone https://git.xfel.eu/machineLearning/pes_to_spec.git`\n",
    "\n",
    "After that the notebook in the directory `pes_to_spec/notebook` can be opened and executed using the kernel `xfel (current)`. The specialized environment mentioned in the `README.md` file of the package may offer a slightly better performance and allow for expert features, but this is not necessary for the standard analysis."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d0003a3-4165-447d-bdb5-758c323a3fbf",
   "metadata": {},
   "source": [
    "## Core automated virtual spectromater usage"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aadd23ab-b894-467c-bb28-c1d25b8e94a2",
   "metadata": {},
   "source": [
    "Here we expand on the usage of the virtual spectrometer. We assume that 2 runs of data have been collected. A first run contains both XGM, PES and grating spectrometer data.\n",
    "\n",
    "A test run may contain only the XGM and PES data. If the test run contains also the grating spectrometer, it can be used also for validation, but in a real use-case this may not be available."
   "execution_count": 2,
   "id": "d44af0b6-9c00-4e70-b49b-d74ed562e92f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "# add the pes_to_spec main directory\n",
    "# (change this depending on where you started the notebook if needed, or comment it out if you have done pip install in pes_to_spec)\n",
    "sys.path.append('..')\n",
    "\n",
    "# you meay need to do pip install matplotlib seaborn extra_data for this notebook, additionally\n",
    "# for this notebook the following packages are needed:\n",
    "# pip install \"numpy>=1.21\" \"scipy>=1.6\" \"scikit-learn>=1.2.0\" torch torchbnn  matplotlib seaborn extra_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "da002d3e-c0da-419b-922b-0ab5c6deece8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.gridspec import GridSpec \n",
    "import seaborn as sns\n",
    "\n",
    "import lmfit\n",
    "import scipy\n",
    "from extra_data import open_run, by_id\n",
    "from itertools import product\n",
    "from pes_to_spec.model import get_model_with_resolution, Model, matching_ids, matching_two_ids\n",
    "from pes_to_spec.config import VSConfig\n",
    "\n",
    "from typing import Any, Dict"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "494a729c-dff4-4501-b828-fba2aaae5a23",
   "metadata": {},
   "source": [
    "### Input data\n",
    "\n",
    "Note that the data in the training run must be large enough, compared to the number of model parameters.\n",
    "\n",
    "Only the grating spectrometer, PES and XGM data is used for training, while only the PES and XGM data is needed for testing.\n",
    "However, more data is collected here to validate the results.\n",
    "\n",
    "Please adjust the proposal number, run number and name of the devices below as needed. Specifically, note that the grating spectrometer name changes depending on where the data has been collected. If unsure, try `run.info()` to check if the it contains `SPECTROMETER_SCS_NAVITAR`, `SPECTROMETER_SQS_NAVITAR` or `SPECTROMETER_SXP_NAVITAR`, etc.\n",
    "\n",
    "Additionally, please check that the list of PES channels includes the channels active during the runs. It may be that data from all channels are written to disk, but not all channels are active (in which case they contain only noise). This would not hurt the procedure, but could lead to erroneous comparison between the results."
  {
   "cell_type": "markdown",
   "id": "09a19717-df4a-4b97-aec7-9006e3340c77",
   "metadata": {},
   "source": [
    "First check the test and train run settings. Are they compatible? If not, this cannot be used"
   ]
  },
   "execution_count": 6,
   "id": "04c7d64d-cb05-4de7-82bd-9d7368144e1c",
   "metadata": {},
   "outputs": [],
   "source": [
    "mean_values_train, _ = VSConfig.load(proposalNumber=900331, runNumbers=[69]).to_dict()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "198d1a19-03b3-4b9d-a736-be37e382eccb",
   "metadata": {},
   "outputs": [],
   "source": [
    "mean_values_test, _ = VSConfig.load(proposalNumber=900331, runNumbers=[70]).to_dict()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1dfc504f-2b7a-4764-bd29-47f4c3d538e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'pressure': 1.2898001386929536e-06,\n",
       " 'gas': 'NEON',\n",
       " 'u115': 1.1454888761509676,\n",
       " 'u105': 2300.0055902671165,\n",
       " 'u211': -104.39928315803095,\n",
       " 'u201': -0.11178184300661087,\n",
       " 'u104': 2299.9981578569123,\n",
       " 'u213': -116.00666335973898,\n",
       " 'u214': -116.00175377627951,\n",
       " 'u208': -104.40358778573192,\n",
       " 'u3': 0.0,\n",
       " 'u113': 2300.0057625901563,\n",
       " 'u111': 2300.0001825791983,\n",
       " 'u212': -115.99998056087796,\n",
       " 'u210': -104.39860634108643,\n",
       " 'u109': 2300.010335759694,\n",
       " 'u202': -0.10682301968336105,\n",
       " 'u207': -75.39458266541837,\n",
       " 'u108': 2300.0107558705367,\n",
       " 'u112': 2300.0073988267936,\n",
       " 'u200': -0.10179182142019272,\n",
       " 'u103': 2299.997899249964,\n",
       " 'u107': 2299.9994651866336,\n",
       " 'u203': -0.10790964215993881,\n",
       " 'u206': -75.40136683869271,\n",
       " 'u215': -115.99884806086645,\n",
       " 'u110': 2300.000035027595,\n",
       " 'u106': 2299.9994651866336,\n",
       " 'u204': -75.4030248505428,\n",
       " 'u114': 2300.0026486100187,\n",
       " 'u102': 2299.9974047268993,\n",
       " 'u209': -104.40387487784402,\n",
       " 'u205': -75.40492121098107}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_values_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6a3b3f88-d4c6-4bba-8807-510c4eb4be51",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'pressure': 1.289217266275955e-06,\n",
       " 'gas': 'NEON',\n",
       " 'u115': 1.1511293109861325,\n",
       " 'u105': 2300.0083986739373,\n",
       " 'u211': -104.4027864348326,\n",
       " 'u201': -0.11178184300661087,\n",
       " 'u104': 2300.0002679750346,\n",
       " 'u213': -115.99890199879935,\n",
       " 'u214': -116.00527901070001,\n",
       " 'u208': -104.3962428168333,\n",
       " 'u3': 0.0,\n",
       " 'u113': 2300.0031018672753,\n",
       " 'u111': 2299.9981553310977,\n",
       " 'u212': -116.00380941556044,\n",
       " 'u210': -104.402747417904,\n",
       " 'u109': 2299.9960031792434,\n",
       " 'u202': -0.10682301968336105,\n",
       " 'u207': -75.39357704417625,\n",
       " 'u108': 2300.007998942286,\n",
       " 'u112': 2300.0047992204586,\n",
       " 'u200': -0.10179182142019272,\n",
       " 'u103': 2300.00078058645,\n",
       " 'u107': 2300.0017183655987,\n",
       " 'u203': -0.10790964215993881,\n",
       " 'u206': -75.40099537785967,\n",
       " 'u215': -116.00220764789384,\n",
       " 'u110': 2299.9972946610314,\n",
       " 'u106': 2300.0017183655987,\n",
       " 'u204': -75.4021661049945,\n",
       " 'u114': 2300.0000518636753,\n",
       " 'u102': 2299.9999249502107,\n",
       " 'u209': -104.40318841406868,\n",
       " 'u205': -75.40451795464193}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_values_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4a301f2a-dedb-46e4-b096-fc9c6cf5b23a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# change these settings\n",
    "run = open_run(proposal=900331, run=69) # train\n",
    "run_test = open_run(proposal=900331, run=70) # inference\n",
    "# change this to SQS if working in SQS\n",
    "grating_name = \"SA3_XTD10_SPECT/MDL/SPECTROMETER_SCS_NAVITAR:output\"\n",
    "pes_name = \"SA3_XTD10_PES/ADC/1:network\"\n",
    "xgm_name = \"SA3_XTD10_XGM/XGM/DOOCS:output\"\n",
    "\n",
    "# PES channels\n",
    "# change this to the channels available\n",
    "# Note: if a channel is not available, often it contains only noise\n",
    "# this causes an error later\n",
    "# check the logs or the dimensions of the pes with data[\"pes\"].shape to be sure which ones are active\n",
    "channels = tuple([f\"channel_{i}_{l}\" for i, l in product([1, 3, 4], [\"A\", \"B\", \"C\", \"D\"])])\n",
    "def get_tids(run, with_grating=True) -> np.ndarray:\n",
    "    \"\"\"Get which train IDs contain all necessary inputs for training.\"\"\"\n",
    "    if grating_name in run.all_sources and with_grating:\n",
    "        spec_tid = run[grating_name, \"data.trainId\"].ndarray()\n",
    "    else:\n",
    "        spec_tid = None\n",
    "    pes_tid = run[pes_name, \"digitizers.trainId\"].ndarray()\n",
    "    xgm_tid = run[xgm_name, \"data.trainId\"].ndarray()\n",
    "\n",
    "    # match tids to be sure we have all inputs:\n",
    "    if spec_tid is None:\n",
    "        tids = matching_two_ids(pes_tid, xgm_tid)\n",
    "    else:\n",
    "        tids = matching_ids(spec_tid, pes_tid, xgm_tid)\n",
    "\n",
    "def get_data(run, tids, with_grating=True) -> Dict[str, Any]:\n",
    "    \"\"\"Get all relevant data.\"\"\"\n",
    "    data = dict()\n",
    "    data[\"intensity\"] = run[xgm_name, \"data.intensitySa3TD\"].select_trains(by_id[tids]).ndarray()[:, 0][:, np.newaxis]\n",
    "    data[\"pes\"] = {ch: run.select_trains(by_id[tids]).get_dask_array(pes_name,\n",
    "                           f\"digitizers.{ch}.raw.samples\")\n",
    "    # this may not be available in testing\n",
    "    if grating_name in run.all_sources and with_grating:\n",
    "        data[\"grating\"] = run[grating_name, \"data.intensityDistribution\"].select_trains(by_id[tids]).ndarray()\n",
    "        data[\"energy\"] = run[grating_name, \"data.photonEnergy\"].select_trains(by_id[tids]).ndarray()\n",
    "    return data\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "210c0550-1abb-43a0-99a5-7c35d2766be0",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# get the matched train IDs\n",
    "tids = get_tids(run)\n",
    "test_tids = get_tids(run_test, with_grating=False)\n",
    "\n",
    "# get the data\n",
    "data = get_data(run, tids)\n",
    "data_test = get_data(run_test, test_tids, with_grating=False)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "017865a1-057f-48c7-8bef-a6e40490de2c",
   "metadata": {},
   "source": [
    "Now the `data` and `data_test` dictionaries contain the necessary information about the training and test runs.\n",
    "The code above also selected only entries with train IDs on which at least SPEC, PES and XGM were present.\n",
    "\n",
    "Note that for training, it is assumed that only one pulse is present. For testing there is no such requirement.\n",
    "\n",
    "First output some general information about the conditions of the measurement device."
  {
   "cell_type": "markdown",
   "id": "d9b62e3a-aff9-4436-905d-ea02c11aecf6",
   "metadata": {},
   "source": [
    "### Using the virtual spectrometer"
  {
   "cell_type": "markdown",
   "id": "5962e483-60da-4c70-bb09-dce5fc9745e0",
   "metadata": {},
   "source": [
    "Now we will actually train the model. We do that by creating a `Model` object (from `pes_to_spec`) and fitting the data. It requires the PES intensity, the grating spec. intensity, the energy axis from grating spec., as well as the energy measured in the XGM (which has better resolution than the integral of the PES).\n",
    "\n",
    "We actually do this twice: in the first time we do it without any preprocessing on the grating spectrometer data. After that step, we record the maximum resolution achievable with the virtual spectrometer and then redo the estimate using the discovered resolution to pre-process the grating spectrometer data, so that this information is taken into account in the uncertainty estimate.\n",
    "\n",
    "The work of calculating the expected resolution and adapting to it is done by the `get_model_with_resolution`"
   "execution_count": 16,
   "id": "70c4e386-61b2-49e7-b759-8c0175ee457a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Checking data quality in high-resolution data.\n",
      "Finding region-of-interest\n",
      "Excluding outliers\n",
      "Selected 6448 of 7165 samples.\n",
      "Fitting PCA on low-resolution data.\n",
      "Using 600 comp. for PES PCA.\n",
      "Fitting PCA on high-resolution data.\n",
      "Using 24 comp. for grating spec. PCA.\n",
      "Fitting outlier detection\n",
      "Fitting model.\n",
      "Calculate PCA unc. on high-resolution data.\n",
      "Calculate transfer function\n",
      "Resolution = 0.77 eV, S/R = 5.69\n",
      "Calculate PCA on channel_1_A\n",
      "Calculate PCA on channel_1_B\n",
      "Calculate PCA on channel_1_C\n",
      "Calculate PCA on channel_1_D\n",
      "Calculate PCA on channel_3_A\n",
      "Calculate PCA on channel_3_B\n",
      "Calculate PCA on channel_3_C\n",
      "Calculate PCA on channel_3_D\n",
      "Calculate PCA on channel_4_A\n",
      "Calculate PCA on channel_4_B\n",
      "Calculate PCA on channel_4_C\n",
      "Calculate PCA on channel_4_D\n",
      "Resolution: 0.77 eV\n"
    "model, resolution = get_model_with_resolution(data['pes'],\n",
    "                                              data['grating'],\n",
    "                                              data['energy'],\n",
    "                                              data['intensity'],\n",
    "                                              channels=channels,\n",
    "                                              )\n",
    "print(f\"Resolution: {resolution:.2f} eV\")"
   "id": "2f6c9d0a-29af-42c9-ba3c-08aae561232b",
    "We can save the resulting model for later usage using the `save` method and then reload it later with the `load` function as shown below. This can be useful if one wants to reuse information at a later stage."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a0adb57b-7496-4781-9511-ac2a8d05658d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# save it for later usage:\n",
    "model.save(\"model.joblib\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "67616041-4239-48f0-a4f7-2caf5d896652",
   "metadata": {},
   "outputs": [],
   "source": [
    "# load a model -- you can skip the fit above if you just start from this line\n",
    "#model = Model.load(\"model.joblib\")"
   "id": "de6cf667-2f50-47c2-983a-a6c0b2d17714",
    "Now we can use this mapping on new data. In this example, we try it in the test dataset mentioned."
   "execution_count": 17,
   "id": "917156f3-9476-48e0-9121-5f75f185045f",
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = model.predict(data_test['pes'], pulse_energy=data_test['intensity'])\n",
    "\n",
    "# add the references in this array in the same array format, so we can plot them later\n",
    "pred[\"energy\"] = model.get_energy_values()\n",
    "# for inference the grating is not available, but if it was ...\n",
    "#pred['grating'] = data_test['grating'][:, np.newaxis, :]\n",
    "# let us show also how the virtual spectrometer looks like smeared by the virtual spectrometer resolution\n",
    "#pred['grating_smooth'] = model.preprocess_high_res(data_test['grating'], resolution=model.resolution)[:, np.newaxis, :]"
   "id": "3edc3d2d-de97-4b37-b714-bb856ec4d586",
    "Let's plot some train-pulse:"
   "execution_count": 18,
   "id": "0d42f1ec-7f05-4af5-b056-75af1c53742d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5, 0, 'Photon energy [eV]'),\n",
       " Text(0, 0.5, 'Intensity'),\n",
       " (0.0, 197.21617969869132)]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtQAAAHgCAYAAACFLvrWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAB9+ElEQVR4nO3dd5hcZ333//c9bXuVVl2yiqvcZFt2bLCNwQEbTOiEEnonISHJQwikAQ+EhxRCTSCmkx+hGogJzYAbYBtbcpWLbPUu7Urbd6ee+/fHOTM7M3um7c7Mzu5+Xtela2fPnHPm6Hg8+ux3v/d9G2stIiIiIiIyM4G5vgARERERkflMgVpEREREZBYUqEVEREREZkGBWkRERERkFhSoRURERERmQYFaRERERGQWQnN9AbOxdOlSu379+rm+DBERERFZ4LZv3z5gre3ze25eB+r169ezbdu2ub4MEREREVngjDH7Cz2nlg8RERERkVlQoBYRERERmQUF6lkKBoNs2bKF8847j5e//OVMTEzM+FxveMMb+N73vgfAW97yFh577LGC+95+++3cddddFb/G+vXrGRgYmPE1ioiIiEguBepZamlp4cEHH2THjh1EIhE+//nP5zyfSqVmdN4vfvGLbN68ueDzMw3UIiIiIlJdCtRVdNVVV7Fr1y5uv/12nvnMZ/LqV7+a888/n1QqxV/91V9x6aWXcsEFF/Cf//mfAFhrede73sXmzZu54YYbOHHiROZc11xzTWbA5c9+9jMuvvhiLrzwQq699lr27dvH5z//eT7xiU+wZcsWfv3rX9Pf389LX/pSLr30Ui699FJ++9vfAnDy5Eme85zncNFFF/H2t78da239b4yIiIjIAjavZ/nItv59P67Jefd97Iay9ksmk/z0pz/l+uuvB+Dee+9lx44dbNiwgRtvvJGuri7uu+8+YrEYT3/603nOc57DAw88wM6dO3nkkUc4fvw4mzdv5k1velPOefv7+3nrW9/KnXfeyYYNGzh16hS9vb284x3voL29nfe85z0AvPrVr+Yv/uIvuPLKKzlw4ADXXXcdjz/+OB/60Ie48sor+Yd/+Ad+/OMfc+ONN1b3BomIiIgscgsmUM+VyclJtmzZArgV6je/+c3cddddXHbZZWzYsAGAW265hYcffjjTHz08PMxTTz3FnXfeyate9SqCwSCrVq3iWc961rTz33PPPVx99dWZc/X29vpexy9/+cucnuuRkRFGR0e58847+f73vw/ADTfcQE9PT9X+7iIiIiKygAJ1uZXkakv3UOdra2vLPLbW8pnPfIbrrrsuZ5+f/OQnGGOKnt9aW3IfAMdxuPvuu2lpaZn2XDnHi4iIiMjMqIe6Dq677jo+97nPkUgkAHjyyScZHx/n6quv5lvf+hapVIqjR49y2223TTv2iiuu4I477mDv3r0AnDp1CoCOjg5GR0cz+z3nOc/hs5/9bOb7dMi/+uqr+cY3vgHAT3/6UwYHB2vydxQRERFZrBSo6+Atb3kLmzdv5uKLL+a8887j7W9/O8lkkhe/+MWcccYZnH/++bzzne/kGc94xrRj+/r6uPHGG3nJS17ChRdeyCte8QoA/uAP/oAf/OAHmUGJn/70p9m2bRsXXHABmzdvzsw28oEPfIA777yTiy++mFtuuYV169bV9e8uIiIistCZ+Tzrw9atW62WHhcRERGRWjPGbLfWbvV7ThVqEREREZFZUKAWEREREZkFBWoRERERkVlQoBYRERERmQUFahERERGRWVCgFhERERGZBQXqWRoaGuJlL3sZZ599Nueccw5333034C6scvnll7Nlyxa2bt3KvffeC8Bvf/tbLrjgAi699FJ27dqVOcd1113HfJ7CUERERGSxWjBLjwPQ/8Hqnq+v9Pne/e53c/311/O9732PeDzOxMQEAO9973v5wAc+wHOf+1x+8pOf8N73vpfbb7+dj3/849x0003s27ePz33uc3z84x/nwx/+MH/zN3+jJcJFpPpSIxDsnOurEBFZ0FShnoWRkRHuvPNO3vzmNwMQiUTo7u4GwBjDyMgIAMPDw6xatQqAcDjM5OQkExMThMNhdu/ezeHDh31XSUxbv349AwMDAGzbto1rrrkGgA9+8IO86U1v4pprrmHjxo18+tOfzhzz9a9/nQsuuIALL7yQ1772tdX+q4vIfJE8CM7YXF+FiMiCtrAq1HW2Z88e+vr6eOMb38hDDz3EJZdcwqc+9Sna2tr45Cc/yXXXXcd73vMeHMfhrrvuAuD9738/b3vb22hpaeG//uu/eM973sOHP/zhGV/DE088wW233cbo6ChnnXUW73znO3nyySf5x3/8R37729+ydOlSTp06Va2/sojMN4n9EOiAQPtcX4mIyIKlCvUsJJNJ7r//ft75znfywAMP0NbWxsc+9jEAPve5z/GJT3yCgwcP8olPfCJTxd6yZQv33HMPt912G3v27GHVqlVYa3nFK17Ba17zGo4fP17RNdxwww00NTWxdOlSli1bxvHjx7n11lt52ctextKlSwHo7e2t7l9cROaPxH5VqEVEakyBehbWrFnDmjVr+L3f+z0AXvayl3H//fcD8LWvfY2XvOQlALz85S/PDEpMs9bykY98hL//+7/nQx/6EB/60Id4zWtek9O2kRYKhXAcB4BoNJrzXFNTU+ZxMBgkmUxirVU/toi4nHEFahGRGlOgnoUVK1awdu1adu7cCcCvfvUrNm/eDMCqVau44447ALj11ls544wzco792te+xg033EBPTw8TExMEAgECgUBmUGO29evXs337dgBuuummktd17bXX8p3vfIeTJ08CqOVDZDGzk26oFhGRmlEP9Sx95jOf4Y/+6I+Ix+Ns3LiRr3zlKwB84Qtf4N3vfjfJZJLm5mZuvPHGzDETExN87Wtf45ZbbgHgL//yL3npS19KJBLhm9/85rTX+MAHPsCb3/xmPvrRj2aq4cWce+65/O3f/i3PeMYzCAaDXHTRRXz1q1/l5ptvZtu2bfzf//t/q/S3F5GG5kTBplShFhGpMTOf5z7eunWr3bZt21xfhojI3LIOGJ9fOKZOwalPQ9PZ0PnK+l+XiMgCYozZbq3d6vecWj5EROa72MP+2x1vzIVaPkREakqBWkRkvos96r/dxtyvCtQiIjWlQC0iMt8lj/mHZutVqO1kfa9HRGSRUaAWEZnv7CQ402cImgrU8fpej4jIIqNALSIyn9mk9yfm85y3zabcgYsiIlITCtQiIvNZsSq0k7UQlKrUIiI1o0AtIjKfOV5/dLEKNShQi4jUkAK1iMh8VqxCnROyE3W5HBGRxUiBWkRkPrNeUPatUKvlQ0SkHhSoRUTms0ygLlGhtqpQi4jUigK1iMi8lg7UPoE5J1An63M5IiKLkAK1iMh8lgnSJQI1qXpcjYjIoqRALSIyn9liFeqsbapQi4jUjAK1iMh8lu6d9g3U2X3VqlCLiNSKArWIyHxWtEKdFaitArWISK0oUIuIzGsFArV18to8FKhFRGpFgVpEZD7LhOb8QJ03jZ4q1CIiNVOzQG2M+bIx5oQxZkfWtm8bYx70/uwzxjzobV9vjJnMeu7ztbouEZEFpVDLx7R5qRWoRURqJVTDc38V+Czw9fQGa+0r0o+NMR8HhrP2322t3VLD6xERWXgygTp/Fo/8gK1ZPkREaqVmgdpae6cxZr3fc8YYA/wh8Kxavb6IyOKQDs55FehpgxRVoRYRqZW56qG+CjhurX0qa9sGY8wDxpg7jDFXzdF1iYjML4Uq1NO+V6AWEamVWrZ8FPMq4JtZ3x8F1llrTxpjLgF+aIw511o7kn+gMeZtwNsA1q1bV5eLFRFpWAUDtSrUIiL1UvcKtTEmBLwE+HZ6m7U2Zq096T3eDuwGzvQ73lp7o7V2q7V2a19fXz0uWUSkcdkCLR+oQi0iUi9z0fLx+8AT1tpD6Q3GmD5jTNB7vBE4A9gzB9cmIjK/qEItIjLnajlt3jeBu4GzjDGHjDFv9p56JbntHgBXAw8bYx4Cvge8w1p7qlbXJiKycKSDdP6gRFWoRUTqpZazfLyqwPY3+Gy7CbipVtciIrJgZSrUKbAWjPGeUIVaRKRetFKiiMh8ltPakVWVVoVaRKRuFKhFROa17BCdFZrVQy0iUjcK1CIi81W6zSNDFWoRkbmgQC0iMl/lV6FzQnN+gFagFhGpFQVqEZF5K1n4e1WoRUTqRoFaRGS+KhqaVaEWEakXBWoRkfmq2MDD/LCtQC0iUjMK1CIi81YFFWq1fIiI1IwCtYjIfFWsCq0KtYhI3ShQi4jMV5XM8mGdml+OiMhipUAtIjJvqUItItIIFKhFROarSmb5UA+1iEjNKFCLiMxXmuVDRKQhKFCLiMxblcxDrR5qEZFaUaAWEZmvilao1fIhIlIvCtQiIvNVsR7qaS0fqlCLiNSKArWIyHxVrELtN22etbW+IhGRRUmBWkSk3qZVj2d6TLEKtV+Lh6rUIiK1oEAtIlJPNgWxhyo/zu+YojN5+AVq9VGLiNSCArWISD2lBiBxpPLjYjshNZq7rZJ5qEGrJYqI1IgCtYhIPaWGwDlV+XHJI24Yz92Y931WYPZt+VCFWkSkFhSoRUTqyRmG1HBlx6RGwRkDZyh3+7TQrAq1iMhcUKAWEaknZxTsRGXHpE64X20074kCLR8FZ/RQhVpEpBYUqEVE6slGwYlWttBK6qT71ckL1AXnmi50blWoRURqQYFaRKSebMz96lRQpU63ekyrUBdYDbFQWNdqiSIiNaFALSJST+lAbSfLPybdc50fqAtOm6cKtYhIPSlQi4jUk5MO1PnV5mLHjBc4Jj84e4G5YCVagVpEpBYUqEVE6irufklXqsuRHsRo43nbC81DrZYPEZF6UqAWEamnTIW6gkCdqVDnB+oC0+apQi0iUlcK1CIi9ZQZlFhmy4e1U/3W+YF62rR5JWb5UIVaRKQmFKhFROoq4X4pt0JtY1NBuVTLhyrUIiJzQoFaRKSe0qF4WrW50P5ZlWybyHuywLR5BYOzKtQiIrWgQC0iUi82kbWCYX44LnRMdqAus0JdsOVDFWoRkVpQoBYRqZfsQDwtDBeQ3Wttk3mhuNJp81ShFhGpBQVqEZF6yQnUM6hQZx9nU1nVbqa2AapQi4jUlwK1iEi9zKRCPW3wYjqI+4VmVahFROaCArWISL3k9ECXW6HO75tOV6h9AnmpCrVm+RARqQkFahGReplRhToveKeP8z0+PW1egeCseahFRGpCgVpEpF6y2zfK7qEuUKEu1vKhCrWISF0pUIuI1EtOOC6zQj2tNaRIhbrkoERVqEVEakGBWkSkXupVodZKiSIidaVALSJSLzOaNi+/h3o2gxJVoRYRqQUFahGReqlGoM60iviF41KDElWhFhGpBQVqEZF6yWn5iBfeL+eYCqbNKzkoURVqEZFaUKAWEamXmQxKrKjlw7pVaPVQi4jUlQK1iEi95FSonTLnoi4wD3XBQO6gWT5EROqrZoHaGPNlY8wJY8yOrG0fNMYcNsY86P15XtZz7zfG7DLG7DTGXFer6xIRmTMFZ+wodkz+PsVaPnBDsyrUIiJ1VcsK9VeB6322f8Jau8X78xMAY8xm4JXAud4x/2GMCdbw2kRE6q8agVoVahGRhlOzQG2tvRM4VebuLwS+Za2NWWv3AruAy2p1bSIicyK75QPKG5hYSQ81AKpQi4jU21z0UL/LGPOw1xLS421bDRzM2ueQt01EZOGYFqDLmTqvgpUSwQvTqlCLiNRTvQP154BNwBbgKPBxb7vx2df6ncAY8zZjzDZjzLb+/v6aXKSISE3kV6idmP9+OccUqFAXa/lQhVpEpK7qGqittcettSlrrQN8gam2jkPA2qxd1wBHCpzjRmvtVmvt1r6+vtpesIhINeUHakq0fFhn+mIspVo+ilWoNQ+1iEhN1DVQG2NWZn37YiA9A8jNwCuNMU3GmA3AGcC99bw2EZGasvHp4bhUhdqvx9qWaPmgWMuHKtQiIrUQqtWJjTHfBK4BlhpjDgEfAK4xxmzBbefYB7wdwFr7qDHmO8BjuL/H/BNr1ewnIguIX3ieVrHOf96vx7pEy0fRafP0sSoiUgs1C9TW2lf5bP5Skf3/EfjHWl2PiMic8gvPJWf5KFahLjSgMVWkeq0KtYhILWilRBGRevAN1DVo+dAsHyIidadALSJSD77heCYtH6UWdtGgRBGRelOgFhGpC59wbKPFD/EN4bNY2EWDEkVEakKBWkSkHqpVoZ5Ny4cq1CIiNaFALSJSD77heAYV6nJaPjQoUUSkrhSoRUTqYUYV6hkOSiw0A4gGJYqI1IQCtYhIPfiFY6dUhbpAy4e1FK5QJ4s8pwq1iEgtKFCLiNSDbzgutfR4oeeTqlCLiDQQBWoRkXrwbd+YwcIu4AbmgoE6UWQ2D1WoRURqQYFaRKQeCi0jbm2Fx+D1XhcK1MX6slWhFhGpBQVqEZF68K1Q2+JV6kLP2XiR54r0ZWseahGRmlCgFhGpi0LV5hkEameicDhO9Re5BgVqEZFaUKAWEamHgsG5WKAuEMKd0cLHJI8VOZ9aPkREakGBWkSkHgqG4yI9zwUr1GOFj3EmS1yHqtQiItWmQC0iUg/F+qELHjODCnVJqlKLiFSbArWISD0UnbGjkALHJA/O4jpUoRYRqTYFahGReqhmhTp5eBYXokAtIlJtCtQiInUxgwp1wRBeZO7qktTyISJSbQrUIiL1UDAcFwvUBUL4rK5DFWoRkWpToBYRqTWbLFxVLlaFLrS8+KyoQi0iUm0K1CIitVa0T7pAhbrYMbOiCrWISLUpUIuI1Fqx1o2CLR81aPcAtXyIiNSAArWISK0VrVBHKz9mVtTyISJSbQrUIiK1NpMKdS0GJIIq1CIiNaBALSJSczMJ1KpQi4jMFwrUIiK11kgVag1KFBGpOgVqEZFaKxaOnfECx9SoQq2WDxGRqlOgFhGptaKBehIcnyp1BRVqx8J3dyxhx/HWMvZWy4eISLWF5voCREQWvhLh2BkG0w0mMrWt2AqKef7tt6v57O9W0RpO8eu3PMyS1mILwqhCLSJSbapQi4jUWqkVDxN7IPZ43jHltXw4Fr72wDIAJhJBbt3TVeJaVKEWEak2BWoRkVor1b4xcTukjucdU16FeudAC6PxqV823n+0vcQRqlCLiFSbArWISK2VCtROFJJH844pL1D/5MleANZ3uwvEPHaiRB+1KtQiIlWnQC0iUnNlDDBMHsv9vsyWjweOtAHw9kvdQL5nsBlrix2hQC0iUm0K1CIitVaqhxq82T4ms44pr0L9eL9bkb56/QgdkSSjsRAnJ4uNN1fLh4hItSlQi4jUWrlzSqdOVXTMcDTIyckwLaEUqzrirO1yQ/jhkaYi16IKtYhItSlQi4jUWrlzSjvDWceUDtR7BpsB2NATxRhY3u6+zvGxcLEXKe9aRESkbArUIiK1Vm6F2hmp6Ji9mUDtVqZXtLvHFA3UqlCLiFSdArWISK2VXaHOCtRlDGTcc8oN1Bt73Rk+Vna4gfrQcJGWDw1KFBGpOq2UKCJSc+VWqMemHhepUJ+aCHHLrm4ePOrO8HHmEncw45lL3a+P9ReZOs+q5UNEpNoUqEVEaq3slo/xrGMKV6j/7Mcb+c2BqRURL17lBvFzl00AUzN/+FOFWkSk2tTyISJSa2W3fGQHav8QPhIL5oTpDT1RVne6+67pjNMRSTIwEebEeKF6iSrUIiLVpkAtIlJrlVaorVNw8OAvdnVnHr/g7JP8+/N3Zb43Bs7xqtSPHm8rcC2qUIuIVJsCtYhIrZVbobYT3tfCAfzH3lLjH/n9fXz6hj1sXjaZ8/z5y91zPHK8UNuHArWISLUpUIuI1JJ1ylspEdzqsY0XXCXxqZPN3Lani1DA4fozBn33uWC5W+V+pGCFWi0fIiLVpkAtIlJL5bZ7pDmTBQP1Hfu6sBj+4KxTLG31D+npgYlPDLQUeAFVqEVEqk2BWkSklioN1HaiYKC+/0g7AFesHS14eHr58aOjEZJ+xWj1UIuIVF3NArUx5svGmBPGmB1Z2/7FGPOEMeZhY8wPjDHd3vb1xphJY8yD3p/P1+q6RETqq8z+6bQiFep0oE5Pk+enKWRZ3h4n6QQ4Nhbx2UOBWkSk2mpZof4qcH3etl8A51lrLwCeBN6f9dxua+0W7887anhdIiL1U6UK9UgsyLGxCM2hVGZlxELWdLrH+6+YqB5qEZFqq1mgttbeCZzK23aLtZnROfcAa2r1+iIiDaFKPdT7Bt1wvL47RsAUP8Uab17qQyM+FWq1fIiIVN1c9lC/Cfhp1vcbjDEPGGPuMMZcNVcXJSJSVQXaNwrvP5m7wIvn0IgbqNM90sWs6SpWoVagFhGptjlZetwY87dAEviGt+kosM5ae9IYcwnwQ2PMudbaEZ9j3wa8DWDdunX1umQRkZlxKgzUzoTv5v7xMADL20v3ZK9odyvUx71jcqhCLSJSdXWvUBtjXg88H/gja60FsNbGrLUnvcfbgd3AmX7HW2tvtNZutdZu7evrq9dli4jMTKUVamcUnOmDDtOBuq+tdKDua0vmHJNLgVpEpNrqGqiNMdcDfw28wFo7kbW9zxgT9B5vBM4A9tTz2kREaqJEoD44HOG2vV1TG5whcKYv2jIw4Ybjpa1lBGpvH99ArQq1iEjV1azlwxjzTeAaYKkx5hDwAdxZPZqAXxhjAO7xZvS4Gvi/xpgkbvnkHdbaU74nFhGZT2zhGTkePNrGi/57MwA/fPVjbFk5DqkB36XKK6lQL/NaPgZUoRYRqYuaBWpr7at8Nn+pwL43ATfV6lpEROZMkQr1Dx9fknn8y93dbqAu0HNdSaBOr6LYPxHGWjA5s4Jo2jwRkWrTSokiIrVUJFA/crw18/jWPV0F94PKAnVL2KEjkiSeCjASC+ZdjyrUIiLVpkAtIlJLRQL1/qHmzOPH+tsYmPD/paG1ZJ4rp4capoL39D5qBWoRkWpToBYRqSXHv4c6mjQMTIQJBRwuWTUKwOMnWn33HY0HSTgB2sIpmkO2rJdd6gXqE/mBWhVqEZGqU6AWEamlAhXqI94qhivaE6zzFmI5OuazsiEwNOlWp3takr7P++lrLTR1ngK1iEi1KVCLiNRSgUB92Fv5cHVnjJUd7qwcR0f9A/WpmQTqQi0fqlCLiFSdArWISC0VqlB74Xl1Z7xkoB6cQaBe1uae89i0qndWoI4+WPb5RESkMAVqEZFasQ5Y/6XED3stH2uyKtRHSlSoeysI1Bt63CC/d7A59wnruH8AYo+VfT4RESlMgVpEpFacMXeKDh+HMi0fUxXqY6N+C7HAYDRdoS5vhg+ATb2TAOw61ezzbNK9ruT+ss8nIiKFKVCLiNSKM+q7OZ4yfP+xpYAbqNd0uoH64HATjk/+zrR8NJdfoT6tO0bQWA4ONxFNmtwnbcoN+06s4EIyIiJSPgVqEZFacUZ8N//Lr9dkHm/qnaSrOcWSlgSTySDHfNo+KhqUGOgAoClkWdcdw7GGfdPaPpJTYd9OlvEXERGRYhSoRURqxRmatmkyEeAL21cA0BxKsbLDbePY0OPOV70nP/wCpybcVpCyeqjDuWEdYPe0to+UArWISBUpUIuI1EpqaNqmG7e5YXpFe5z73vFgZvvGXjdQ7x1smnZMenGWZellx02Rj+5gb+bhJu+cH71zbe4+Ngl2zH3sKFCLiMyWArWISK2kTuZ8u/1wO5+4azUAH752Px1NTua5jV6FeveplmmnyQTqdi9QB5cWfk0zdfy1G4cAd87rr9y/LGun5FSQtv4rOYqISPkUqEVEasUL1LGk4cO3r+VV3z0LgBvOPMWzTx/K2TVdoc5v+XDs1OIsmQp1cHnh1wxMBerL1oyxqsMddPih205j10nv3DY1NZ1fgXmyRUSkfArUIiK1YB1whgH4zo6lfGn7CuIp9yP3fVcfnLZ7ukK9J6/f+chohHgqQF9bnJawV9EOFQnUJrfC/U/P2Zd5/NTJ9HNJcBSoRUSqRYFaRKQWnJHMAio/fnKqr3ljzyRru+LTdl/nTXN3eCRCNDE1zV16QGG6HxqAQGfhPuq8QH3V+hFefcEJYKp1xO2hTrd8KFCLiMyWArWISC14AxJjScP2w+0AvObCE/zr9Xt9d48E3WnuLIZ9Q1NV6nRPdU6gNmEwfgu2kNPykZZuFenPBOqEKtQiIlWkQC0iUgvOIOC2WSScABt7JvnI7+/n4lXjBQ85rdsNzQeHp2b68K1Qm5D7x49pApO7kEt6MONUhXpyKlBrYRcRkVlToBYRqYXUKQCOegu1nNZdOriubPeWIB+bWoI8Hag39mRPbxf2/vgJAcGcLcva3PNmArUzqZYPEZEqUqAWEakFr+Xj5IRbSV7Smih5yMoON/gezVot0b9CHXb/+DFB90+WvjZ3QZgT6aBux7MC9fR+bhERqYwCtYhILXgrEZ6cdEPs0tbSqxyu8FZNPDbmBurhaJD+8QjNoRSrO7OCb9FAXaxC7QX1+C6w1n2sQC0iMmsK1CIiteCtRJgeCLi0nAp1e26Felem3SNKILst2oQKB2qflo/0kuWDkyE3RyePZ12nWj5ERGZLgVpEpBYcN1BPtXyUrlCnWz7SFerd3rzRZyzJX80wjBuc8xjjTqeXN2CxKWTpiCRJWcNILDdsq0ItIjJ7CtQiItVmHXDcEDzV8lGkQh1wp9Vb1RknYCwHh925qNMLsZy+ZDJ3/4ItH16QzuuhBujxqtSnJvOCuAK1iMisKVCLiFSbnaooD4yXMSix6TwAWsMOZy2dJOkEeOh4W6blY1qFulDLRyZITw/UvV6F/NRE/nEK1CIis6VALSJSbXaqonxyosSgRGMgvDbz7dZV7mDG7+zom6pQ9+ZVqAkWr1D7fLT3FqtQpwcoiojIjChQi4hUm9fukXKmAmxvoQq1aYXg1NLk12wYBuCmR5dyaKSJcMDJncPaBL2FW6ZXoTO900VaPganBWoLlO7vFhGRwhSoRUSqzatQn5oMYTH0NCcIFfq0DbRAoDPz7bM2DnPRyrHM95evHSUczKogFwnNUyF7+ostaXED/cn8QA3uUuQiIjJjCtQiItXmTUWXbvcoOsOHaXKr1Mb9ODYGPvHcPfQ0J1jdGeMDzzyQd0Ao72v2uWZQoQYFahGRWfL5ZBURkVnxBiWmp8xb2lYksJomb7q7NrBu//T6nhj3vP0hwJ3yLnf/IhVqU6RC7YX69LzYuderQC0iMhuqUIuIVJvjVqgH0hXqlhIVashMnZfWFLLTwzRQtEKd2TY9bGcWjRmLTHsOFKhFRGZDgVpEpNpsbqAuOgd1JlC3lHfucirUZvpHe3rRmPQqjLnXq0AtIjIbCtQiItWW6aEup+XDC7imwkDtN8sHheehXpEVqKfNkqdALSIyK2UFamNMb+m9REQEmFahLjkoEcA0l3nydBW6yKBEn4/29ohDR1OSeCrgMxe1ArWIyGyUW6H+nTHmu8aY5xljTE2vSERkvsuf5aOlWIXaC7eVtnwUq1D7tHwArCrU9qFALSIyK+UG6jOBG4HXAruMMR81xpxZu8sSEZnHrBtcB8pp+cCbdaPclo/0wMOiFWq/sA0r2gv1UStQi4jMRlmB2rp+Ya19FfAW4PXAvcaYO4wxV9T0CkVE5ptpgxKLtXykK9Rt5Z07M/Bw5hXqY2N5U+dZrZQoIjIbZc1DbYxZArwGt0J9HPhT4GZgC/BdYEONrk9EZP6xMaydGpS4pOgsH164zVotsbgyFnYpVKHucK9DLR8iItVV7sIudwP/BbzIWnsoa/s2Y8znq39ZIiLzmI0xkQgQTQZpDqVoCztFdk5XqDvKO3c5FeoCv3xc1eFWzg8MN+VdrwK1iMhslNtD/XfW2g9nh2ljzMsBrLX/VJMrExGZr2w8Z4aPokO501XlYDfFd8zbv8KlxwFOX+Ku4LjrZH6/tgK1iMhslBuo3+ez7f3VvBARkQXDxqYGJBZr94Cplg8ThkB3GSefeYX6jCWTAOwZbCaZXTRXD7WIyKwUbfkwxjwXeB6w2hjz6aynOgF9AouI5LMJsA4D42UMSARyPoZDqyE1WHz3TJD2q1AXC9vuXNSrO2McHmli/1Azm3qjU9csIiIzVqpCfQTYBkSB7Vl/bgauq+2liYjMQ96UeScn0y0fpSrUWcG49UoItJZ4gWJLjxde2CXt7KVulXrH8azXUaAWEZmVohVqa+1DwEPGmG9Yq98JioiUlLfseNFVEiE3UIdWQORMiD5YZP8iFWpKB+pLV4/yqz3d/O5QBy8855S3VYFaRGQ2SrV8fMda+4fAA8YYm/0U7vTUF9T06kRE5pv0oi6Zlo9SYTXvYzi0Eniw9P6+C7sUb/kAOKvPrVAfzJ7pQ/USEZFZKTVt3ru9r8+v9YWIiCwIXoV6KOp+vPa0VFChBgh0ldi/WGguXaFOL+5yeCRrLmoFahGRWSnaQ22tPeo9HAAOWmv3A03Ahbj91SIiks2rUI/E3MDb1VRpoC41H3UZgxKLBmo38B8djWAzv3dUy4eIyGyUO23enUCzMWY18CvgjcBXix1gjPmyMeaEMWZH1rZeY8wvjDFPeV97sp57vzFmlzFmpzFGAx5FZH7KC9SdTakSB+RVmksF6sxc0wGfeauzniugo8mhoynJZDLIUNR7bVWoRURmpdxAbay1E8BLgM9Ya18MbC5xzFeB6/O2vQ/4lbX2DNxg/j4AY8xm4JXAud4x/2FMkSZAEZFG5QXqYa/lo7O5RKCeVqEuNctH9kdj3rGZj83iH59TbR9eH7Vm+RARmZWyA7Ux5grgj4Afe9tKzRByJ3Aqb/MLga95j78GvChr+7estTFr7V5gF3BZmdcmItI4plWoK5iHGtyAHWjy3zX9fOZxfnAu3UMNU4H6yGi6j1oVahGR2Sg3UL8bd2XEH1hrHzXGbARum8HrLU/3ZXtfl3nbVwMHs/Y75G2bxhjzNmPMNmPMtv7+/hlcgohIDeX3UBerUJug/3LjpkiVOqeiXaBCXaTlA2BVpxeo0wMT1fIhIjIrpWb5ADLV5juzvt8D/FkVr8PnXxSszzastTcCNwJs3brVdx8RkTlj48SShmgySCjg0BJyiuxcoDUj0FpkxcSsY/LbRTLfl9fycTRdoVbLh4jIrJQVqI0xZwLvAdZnH2OtfVaFr3fcGLPSWnvUGLMSOOFtPwSszdpvDZpFRETmIxvPGZDoV4DO8JtLGsC0lHlMfnAus0Kd7qFWy4eISFWUFaiB7wKfB74IlBqyXszNwOuBj3lf/ydr+38bY/4NWAWcAdw7i9cREZkbNs5IzP1oLdruAUUCdZEe6rIq1KVaPtyp845kBiVasKmiC8KIiEhh5QbqpLX2c5Wc2BjzTeAaYKkx5hDwAdwg/R1jzJuBA8DLAby+7O8Aj+GWSv7EWjub4C4iMjdsYuYDEtNMxH875A1KzD++spaPqUGJuG0fCtQiIjNSbqD+kTHmj4EfALH0Rmtt/iweZD33qgJPXVtg/38E/rHM6xERaUw2znC0zDmoCwXYcivUfjOEQMmWjxXtCQyWE+NhEilDOGhR24eIyMyVG6hf7339q6xtFthY3csREZnvEpmWj9KLusyg5aNohbr0SokA4aBlWXuC42MRjo+HWdMZ10wfIiKzUO4sHxtqfSEiIgtCdstHc6llxwtVqIu0fFBkUGKZs3yA2/ZxfCzCkZGIF6g104eIyEyVNQ+1MabVGPN3xpgbve/PMMY8v7aXJiIyD9kEI+W2fMyoQl1gUKIxZc9DDbAyf+o8tXyIiMxYuQu7fAWIA0/zvj8EfKQmVyQiMp/ZBMPpWT5KDUqcSYW6YMtH9uPSH+19rW5FemAi7G5Qy4eIyIyVG6g3WWv/GUgAWGsn8V+MRURkcctq+egoOShxBrN8FBqUWHRJ8un62txA3T+uQC0iMlvlBuq4MaYFb/VCY8wmsmb7EBGRtAQT8TIDdaXT5mW3dcCsKtRLMxXq9HHqoRYRmalyZ/n4IPAzYK0x5hvA04E31uqiRETmLZtkIuEG2uaiy44zg5aPQgu55J+rjJYPVahFRKqm3Fk+bjHGbAcux231eLe1dqCmVyYiMt9YCzZJNOkG2tawA4EmIALOqM8BlVao8wN4oX7qMirUbW6AVg+1iMjslTvLx6+stSettT+21v6vtXbAGPOrWl+ciMj84lZ9J70KdUvIgchZ0HSW/+4VL+xSpEJNhT3U+YMS1fIhIjJjRSvUxphmoBV3+fAepgYidgKranxtIiJzL/4URM4ob1+vyptu+WgJOxBaVX4LR9qMKtThrO3lVKi9QD0exrEQUIVaRGTGSrV8vB34c9zwvJ2pQD0C/HvtLktEpEFM3FFxoE63fLSEHQh0QaDdf/+CFeqw//aiPdTZj0sEahMkEkzRHkkxFg8yFg/SqYVdRERmrGigttZ+CviUMeZPrbWfqdM1iYg0htQwJA+7QbnQFHc50i0fblBuCTlumA60Fti/UIU65IZimzeoMT+A51xTBRXq0ApIHKarOclYPMjQZIhOVahFRGas3EGJnzHGPA1Yn32MtfbrNbouEZG5F3/KHWiYGoLQ0tL7p1s+MhXqlBuoTbP//sV6nU0YbN7spNNCfaFBiSV6qEOrIHGYnuYkh0eaGIoGWaceahGRGSsrUBtj/gvYBDwIpCdWtYACtYgsXIk97ldnFCgnUPsMSgy0AyF3Dmlrc/cvWvWOMH26/2ItH1kVamP8Xy8t0AVAd7P7A8BQNJS5dhERqVy581BvBTZbW+jTWURkAUoecr/a8fL2t0lSDsRTAQyWpkhkKuiaFrATeQcU+Qj266Mu2vKRf64AU/WP/Kfcnu6uZvd5N1Cr5UNEZKbKXSlxB7CilhciItJQUqOQGnEfO2NlHpRkMmtAoskejOjX9lG05cNvpo9iLR/5AbzIx3ugDYDuFjdED0eDqlCLiMxCuRXqpcBjxph7yfodpLX2BTW5KhGRuZY6OvXYKb9CPb3dwxNo9ikYz7ZCnd3mkd8OUiQke9eVbvkYnAwBqlCLiMxUJUuPi4gsHsnjU4/tZHnH2ETelHktU8/5LdYy2wp1TqCuoEJt3EDdU60eauuUnqpPRGQBK3eWjztqfSEiIg0lNTj12MkfHFhIkon0lHlhJ7fNw3emj0or1PmBOjt0+/VQFxBoAhOgq1qBevI30HQBBLtnfg4RkXms1EqJo7izeUx7CrDW2s6aXJWIyFxzhqce22h5x+S3fJQK1EWXCPf5eJ42K0h2hTqvol2oYmyMd1yQbm9Q4nA0BJTZ1uInecydOUSBWkQWqVILu3TU60JERBqKMzL1uNxATSprUGIqL1D7tHxUWqGe1vIR8X8MFJ6L2pvCz4Rye6hnU6FOnXRDNRfO/BwiIvOYmt5ERPykhqYez6RCHXbcgYhpFfdQl9PyUaRCXejjPXOOUGaWj6FocHbT5jlDkBqY+fEiIvOcArWISD5nLLdim79iYSFFWz78AvVsK9SBqXOU2/KRPkdWhXp4Nj3UTtTtMU+dmtnxIiILgAK1iEi+7Oo0lB+o8+ahzgnRAb+Wj2I91GVMmwdZC8fk71/g3GYqUGcv7GJnGqjTQdoZKrwyo4jIAqdALSKSL3tAIoCNlxcW81s+cqrGPtPg+VahizznV9FOh/ayByWmA3WYSNDSFk6RsoaxWIFVFUtxvNlQbMpbol1EZPFRoBYRyZc9IBHcMG3jZRyYZDI9bV6onAp1sZYPv+cqCNQFP95DOV/TbR9DkwE3FFcqu3c6/wcREZFFQoFaRCRf9hzUaeW0fdiplo/WcCo3UFfcQ+1X0fYL1M25XzNKVai9QN0yy7mokyemHquPWkQWKQVqEZF8yWPTt5UVqFNMeC0fzfkV6nIDckalFeq8QF1oBhFTqEIdKrMKnyd10v+xiMgiokAtIpIv1T99W1kDExNEEwUGJfoNMiza8lFmAA80u/tO65kuPcsHkFncZSgaAmZQoc5uj1GFWkQWKQVqEZFsTgycyenby6xQT7V8OMXniTZBb9XCAsoelNicO991RulZPoCs5ceDlVeobQKcianvnaHKjhcRWSAUqEVEsjk+/dNQZoU6OdXyEba5VeP8gFy03cNnf8C3oh1oK7CseYWDEqMzaPlI5Q1CzJ9uUERkkVCgFhHJlj3ILluZgxKnWj7yPl6ntXDMIFD7tnx0QKDd5wSlp80D6GmZRaDOr0jbcbBOZecQEVkAFKhFRLKlfAYkwgxm+chr5zDB4hXrfBUF6h6fExRq+QjmnCt7cZeKZ/mYtgCOBevTLiMissApUIuIZEsc8t9edsuHNw91xG9Vw6wqdamWD7+FYPyq2sE+CPb6vFZlLR/DkzPoofZbyMUZr+wcIiILgAK1iEiaE4PkYf/nygmbWRXq5vyWDyB3po8qVaiD3dB8kc8JyhuUmA7Ug9FQ5dVl6xOeswcpiogsEgrUIiLgtiuM/Hfh1QIr7KFuLVmhLhWoy6xQAwRafY4v9PGebvlwXz9nUGKl1WVnbPo2q0AtIotPqd85iogsbM6EW31OHobE/iL7VTbLR0vYL1CH/R/7MQG33zk74JdsE8lWYlBiuuXDG5Q4HA1VXl32C+DqoRaRRUiBWkQWt+h2mLiVkh+HFQ5KbAn7zRldQYU6vX92QK0oUJc5D3VTelBiEOuMUWRm7On8ArXfHN4iIgucWj5EZHFL7PVmpygxw0WZgxIz0+Y1lQrUfi0dRfYHKqqBlBqU6AX6ppClNZwi6QQYm6xwpUO/HmpVqEVkEVKgFpHFy1pIHCxz3xKB2qZIJCHhBAgaSzjoN6gwOyCXWaHOPA4VX1lxmhLT5mWF80wf9fgoTNwB0YdLn94m/dtgVKEWkUVIgVpEFi9npPy5l0vN8pHT7uFgfJcJr7Tlo4Ke62nKq1BD9tR5ARi/DSZuL336QgMYbbT8SxQRWSAUqEVk8UpV0OJQsuUje5XEVIFp7yoNyBUG8JzXKrVSYlaFuiVrcRdw70upAYp+c1BD5XNZi4gsAArUIrJ4OYPl71uyxzprho+QUyBQN2U9rrSHutIKdYGWj7xp8yB76rysY5LHi5/eGfHfXlavuYjIwqJALSKLV/7S2UUl3J7rgnJbPnwHEM5klo9K9s85trxp8wC60ou7TGZdc+pE8fMXrFArUIvI4qNALSKLlzNc/r7WAkWq1DbJZCIrUPtWqGcxy0dFU+ZB6WnzsivUbsvHcDQ7UA8UP70CtYhIhgK1iCxeFVWoKd4fnB2oa9HyUcNBiT3ZqyWmpU4WP71aPkREMuq+sIsx5izg21mbNgL/AHQDbwX6ve1/Y639SX2vTkQWlUoq1FBiwF1ey0fJWT5q3ENtZjBtXnYPdarEvSk2KNHaCqf4ExGZ3+oeqK21O4EtAMaYIHAY+AHwRuAT1tp/rfc1icgiZJ3CobDgMaUq1G4gbQkV6qHOqlDTOBXqdA/1UHYPdaEKdOb5QoHace9Tzt9VRGRhm+uWj2uB3dba/XN8HSKy2DjDYFOVHVNuy0fBafPqOSixVA91ILNPd4tPy4dNFF+kpdA81KC5qEVk0ZnrQP1K4JtZ37/LGPOwMebLxpgevwOMMW8zxmwzxmzr7+/320VEpLRUBVPmpRVt+UhNtXyECrV8NGc9rrRCXcb+OUoE6qxzpgcl5gRqKFGFLhKatfy4iCwycxaojTER4AXAd71NnwM24baDHAU+7nectfZGa+1Wa+3Wvr6+elyqiCxElfZPQ4kKdSJ3lg/flo9m/8eF5AxirHLLR9Y5fQclQuFA7YwXn0LQUYVaRBaXuaxQPxe431p7HMBae9xam7LWOsAXgMvm8NpEZKGrtH8aSg5KnEiUGJQYaMl6XE6gzt6n2oMSyVSoO9NLj0eDuTm54EweY8VfWy0fIrLIzGWgfhVZ7R7GmJVZz70Y2FH3KxKRxaPIoLuRWJA793WScvKeKNFDHS3Z8hF2t5tAmT3UNa5QeyG9OWRpCaVIOAHGE1nHFaxQl/hhRIFaRBaZOQnUxphW4NnA97M2/7Mx5hFjzMPAM4G/mItrE5FFwvGvsh4aiXDtV87jdTedxefvW5n7ZNmDEgu0fACYlvLaPSC3il2NQYkmmDudXVZftm8fdYF7VDpQq4daRBaXOQnU1toJa+0Sa+1w1rbXWmvPt9ZeYK19gbX26Fxcm4gsEgVC4R/ffDr9427Q/J/He3OfLNXykfSmzSvU8gEQaC0/UJtZBGq/j/f8a8qeOq/Fb+q8QhXqEi0f6qEWkUVmrmf5EBGZGz6h8MR4iIePt2W+f/JkK0OTWZXeUi0f2SslFqpQB9rK65+GymcFyeHXQ50fqKfO2ZPVR52hCrWISFkUqEVkcfKZR/nmJ5YAcO3GIS5b7YbG7Ufap3Yo1fKRzJ6HulCgbgfT5v9cPhOYCt/lVrWzj522rXCgTq+WOFhWy4cGJYqIZFOgFpHFx4mBTU7b/JOdbovHSzYPsNUL1Pce6pjawSaKnHRqlo/Woi0f7W7bR7mMt2+lgbrCCnW339R5hRZvKdnyMZH7ffSR4vuLiMxzCtQisvjYiWmbDg5HeOBoG5GgwzM2DPN7a91AfU92oKa8QYnNRVs+OqdCcjnS4Tt7yr1yVFih7vIGJQ7nrJYY9/3Bo3SgzgriThTGf+L+ECMiskApUIvI4pNfQQW+tH0FFsO1G4dojzhcsmqMoLHsON7GWNz7qCx32rwIubNpZAv0QLCz/GsNeO0h1ahQTwvUU9Py9fgNSgT/8Fxs2XEAm/V88pi7hHliX/FjRETmMQVqEVl8fCrU9xx0K9FvuPg4AO0Rh/NXjJOyhvvSVeqiLR+prJaPAmEaILQCQmvLv9ZApxvO69bykXdc/nzdTqzEfSD3BxbnpPtVgVpEFjAFahFZfJzcWSiGJoM8MdBKJOhw4Yqp6urT1rph8r7D3sDEkkuPp6fNK/LRGuyC8JryrzXQ5c1dXeHHte881MVaPnwGJQKk8pZotyWq0+C2iaQr26kh92v8Mf/2ERGRBUCBWkQWn7xp3R446gbmC1eM0xyaWnt7Y687W8WhEa81osSgxHTLR3Okih+twW53IGPlB07fVKTlo9uvhxrAGcr7vswl21OD3td+7+swJA6Ud6yIyDyjQC0ii0/etG4PHHX7lC9emdsvvKbTrUgfGk4H6sIVautMzfLREirS8lGpQC8EOkrvl8+vQj2t5WOqjcR3lg+YqjCnlRqQmDnuFFgH4runtiX2lnesiMg8o0AtIouPkx+o3QrwlpW57QxrutyZKQ6NeK0RRQJ1PJnAsYZwwCEcKjDDx0wEeyG0egYHljPLx1SgzgxKnNZDPZj3fQUVamcwt6qf2F/esSIi84wCtYgsPlktH46Fh465FeoteRXqFe1xgsZyYjxCLGnccGgtfqJJB4DmcJEp82Yi0Axtz6r8OBPwmWkk77qyVmzsakqvlBjK/Svm91DnD1IsJHUSkgO525JH3aq1iMgCo0AtIotPVsvHnlPNjMRCLG+Ps7Ijt0c6FICVHW5V+nCJKvVE3A2KRRd1qbu8arMJ530/Faibw5bmUIp4KpBpXQGmB+j8gF1IYh8k9uRuswk3aIuILDAK1CKy+GS1fDx6wl045fzl/rNXpAP1sbHigXoy7g7qawk5+E9ZNwfy+6j9Wj6yqtjpgYk5fdQ2kTcNXpmB2hmFyd9N365ALSILkAK1iCw+WRXqnQPuCoTn9E367rqsza1a94+nq7sFAnUiq+WjUSvU0wYlBvJm+ijUR+2FaGsheWJ2l5QaKL2PiMg8o0AtIotPVqB+0gvUZy2dvtgLwLJ2N0CfSAfqQhXqhNt43Bpq4EDtd11Zy6B3t0z1UefITIF3ovhc3OVIT6MnIrKAKFCLyOKTNSjxiQE3UJ61tHiF+kSxlg9rmfQ2t4RTNG7LR3j6PoGsQJ1e3CV/+fH01HnJQ7O/JrV8iMgCpEAtIouLtZlQPBYPcGikiUjQYX13zHf3TKAuWqFOMJlMz0E9jyvUfj3UMLW4SzUWZsmf11pEZAFQoBaRxcXGMlPfpds9NvVGCQf9p8ObHqh9grdNMJle1CXcwIMS/abzy1qFcWrqvLzjUoPuPYvnzdoxE3ZcS5CLyIKjQC0ii0tWID7orYC4oSdaaG+WtbuB+vhYBYF6PlWoswJ1Z3r58VjefsljEHug/EVdirFWVWoRWXAUqEVkcckKxMe9vugV7YUH2q3IDEos1kPdoC0fZVWop5Y17/J6qEemzfIxCmM/qt51pVtIREQWCAVqEVlcsmb4OOpVndNzTfvpbErRFHIYiwcZiwfA8a9QTyTcENpQLR/TpsnzGZQY7Ha/tmylq8X9oWFahRoKrhA5I6nB0vuIiMwjCtQisrhkVajTM3ek+6T9GDNVpXYr2v6DEqPJBmz5KGeWj+By92tkM12t7sqJ03qoqy11qrbnFxGpMwVqEVlcsgJ1erGWdJ90IcszgTqcs8ri1DmTUz3UjbRS4rQe6ojPLp0QOR0iG+lqcWf8mDYPdbVp6jwRWWAUqEVkcckKxOmZO/paSwTqtvTAxEhOy0iGTTCRGZSYaqAKdX7Lh0+gBuh4GcBUhTpW6wq1ArWILCwK1CKyuGS3fJRZoV7hPX9sLJyzKMzUOfNaPhq2Qu3T8gEQcIN0Z4s760nNK9TOINhUbV9DRKSOFKhFZHHxKszj8QATiSDNoRQdkeLhbnlHVg+1X8sHWRXqhprlo8wKtaezxQ3Wo7EgThXHIE5jHVWpRWRBUaAWkcXFq1Bn2j3aEhiT9XzzJRBoyTlkquUjXKDlI8543K0Gt0UadOlxY4ACFWpPKNRCeySFxTBaQdtH+oeJiiSPV36MiEiDUqAWkcXFC8SZAYnZM3wEmqH9BgiflnNIepaPY2MRsBM+50xkAnV7pIEq1DnT5oXI/cnBh2nKWi2x+N9h96lmXvHts1j/8UvZ/OlL+Lffrqrs0pKHK9tfRKSBKVCLyOLiU6HOiJwNJgChtTmHrOjInuUjBjav59omGPeqtK0NNSgxu0JdvN3D3ac5a7XE4hXq/3fHGn53qDPz/WfuWUX/eAV/78Te8vcVEWlwCtQisrh4PdDplQ9zKtSR092v4TU5h6RDd/942O0tzl+C28YZy65Q+61IOCeyrqPQgMRsJpxZLbFYhfqXu7v45Z4eAM7pcyv2FsN3dvSVf2nJ45AaLn9/EZEGpkAtIouLV6H2bflIL3ISzA2GzSFLd3OShBNgcDLkE6gTTMTdj9O2SMpnye85UmmFmhBdTV6FusjiLv+7cwkAb996lJ++7lG+8pInAfiX36zhrT88nZRT5vUl9pW5o4hIY1OgFpHFxaYr1HktHyYAwV73caB1+sDE7MVdUiN5J00w7i093hZOsSAq1H7Lj+OuQH73wQ4AXnKuO1PHM9YPs77bva+/2N3Dtx5xfyDZcbyVbYfbC7+eArWILBCN8qkvIlIfXoX6+KgbMNNBmUBXbkU32APO1JzTy9oS7ByA4+MRNjtDOaeMJxPEU00EjaUpZBuohzo7UJfTQx2mp8UN1IOT/n+HQyMRjo9F6G1JcOYS9/4EDHz2+bv54x9t4sBwM5++ZxV7Bpv50vYVAKzvjnLzax6jsylvesLEbjehlxosKSLS4FShFpHFxQvUx8bcgJletIVgT+5+gdzv04u/nBgLQ2oo57mJmBvK2yIpNxs2YqAuMWWeK8QSL1CfnPD/O+w+5c5VfdbSyZwcfN7yCX746scxWI6PRTJhGmDfUDPfe3Tp9JOlRiCxp4zrEhFpbArUIrJ42Li7qAjZgTpdoe7O3TcvYC9vy57pI3cw3Vg6UIfTzcMNEqipvELd6y3DfmrSP4DvGXRbYTb2Tp+Pu7c1yTsuO5b5/k8vP8KZS9xBiw8dbfN/zfiTpa9LRKTBNcqnvohI7XkzfIzFA4zF3VUSu7xp4qZXqHN7f5d7Ferj45FpgTq7Qg000KDEynuoS1Wo93gV6g09fitGwnuvPMSzNgyxpDXBxt4YLzz7JL//1fP51Z5uoklDcyhvCcZUf+nrEhFpcKpQi8ji4Q1IPDY61e6RaVsIdOXuWyhQj4UhNQg2mXluLOYG6UygbpRaRXaILqtCHaS31f17nSrQQ713sAmATQUCtTFw6ZoxNva6rTWnL4lydt8EY/Eg9x/xGaCYOADOmP/1ZPWwi4g0MgVqEVk80oHaa/fIDEgECHTm7mtyw98yr+XjxFjEDdPx3ZnnxmNuCG2LeC0fjdJDXWnLB9Db6n49NVGg5eNU4ZaPQq5a586KcvMTS6Y/aZNuqM7ZZmHk2zD4SXchHRGRBqdALSKLRyZQu2ExMyARIJgXqAO5Pb9TLR9e0Ize650zwbiXy90p8wAaseWjqaxDlniB+uRkCJvXnTGRCHB0LEI44LCms/yge+2mIQC+/chSdg60TN8hfxny5BGIPe6G6dFvlf06IiJzRYFaRBYPr4f6eP6ARIBAR+6+gdacb9PzVQ+Mh92FSxIH3CXInXHGM6skesuON8o0cJVOmwe0Nrm95fFUILOcelq6f/q07hjBCv71uHztKC87tx+L4f/duWb6DrFHM4NFAUjsn3oc3wvJo+W/mIjIHFCgFpHFw6YDtTcHdYdXoQ60TB+0Z1pygnEkaOltSZCyhpOTITdMJ/blBOrWiNNA7R6Q2/JRXoU6e+q8/LaPvYNuoK6k3SPt/Vcfoj2S4va93TzRn1elTg3ByY9B6pT7fXxH7vPRhyt+PRGRelKgFpHFI6+HemrKvI7p+5qAG6qzLMsMTPSqvYl94IxlKrntDbVKInmDEssM1CaUGZh4Mm9g4p50oC4wILGYJa1JXniOu7LiDx7366WOQ/R+92vyWO5zib0Vv56ISD0pUIvI4pFfoS4WqGFa28cyr+2jP91HnTgEznCmQt2WbvloFJXO8uEds8Sbizp/6rx0y8dMAjXAi71A/T+PL8GxPjvEdsDId3PbPwBSJ8CmfA4QEWkMCtQisng4+RXqdMtHp//+eRXqvvxAnTwKsUcZa9SWj+wQXUHLR2+Blo89s2j5ALhk1RirO2IcG4uw43jr9B1SQxB/avp260yb+1tEpJEoUIvI4mGjJJ2pQJyuOJdboV7qVW4H0kHTxiGxn4lGbfkga4Bk2RXqEH3e3/PE+FSgtjarh3qGFWpj4Or1bjD+9f6uEnvnSfdXi4g0IAVqEVk87CQD42Eca1jamiAc9PoOCgXqUhVqT8MOSjQG8K61gkC9ssNthTkyOnVM/3iYsXiQ7uZkpsd6Jq48zZ2T+rcHCvxWoJDU0IxfU0Sk1ubkk98Ysw8YBVJA0lq71RjTC3wbWA/sA/7QWjs4F9cnIguUM1FgUZc2//3zp85r9Q/Uw1E3UHc1J2msCjVukLbxilo+VnW69+ZoVqDePVh8yfFyPW3dCAbLtsPtTCYCtISd0geBWj5EpKHNZYX6mdbaLdbard737wN+Za09A/iV972ISPXYSf9FXYxPP6/P9kIV6qGoG6K7m1PTp9+ba+nKdAUV6lUd0wN1ZkDiDPun03paUpzdN0k8FeARvz7qQlShFpEG1kgtHy8EvuY9/hrworm7FBFZkJyJzJR3uRXqAsEukDdtXjpQ5w3WG/QCdU9zsrFaPsAN+CbsTgNY5v7plo/DWYF6tv3T2basHAPgwaPtJfbM4qiHWkQa11wFagvcYozZbox5m7dtubX2KID3ddkcXZuILEQ2ATY5fQ5qKByoTW4rSGZQ4nhuaB5OV6hbkg1YoW4qvzoNQJDeliRNIYfRWIixuPvPxGzmoM530YpxAB46VqDVxo8GJYpIA5urQP10a+3FwHOBPzHGXF3ugcaYtxljthljtvX399fuCkVkYXHcEHc8v+XDmMItH3lBu6s5RTjgMBoPMenN7BFPGcbiQYLG0hFJkRkE2ChME5jmCvYPYQzT2j6q1fIBcOFK97/Fg0crCNTOJDgTs35tEZFamJNAba094n09AfwAuAw4boxZCeB9PVHg2ButtVuttVv7+vrqdckiMt95YSwzKNELjG7gLPBRmBe0jZnqox7wFj0Z8gYkdjcn3Uk1Gq5C3TytdaU49++VPdNHPGU4ONyEwXJa9+wD9em9k7SFUxwebeLEeAUtMqmBWb+2iEgt1D1QG2PajDEd6cfAc4AdwM3A673dXg/8T72vTUQWMOsF6lE38K5Mt3yYIlXSwPQe33SgPuEF83S7hzvDB40XqAPNFVeoIStQj0Q4MNREyhpWd8ZpDvktcViZYADOT7d9VNJHrbYPEWlQc1GhXg78xhjzEHAv8GNr7c+AjwHPNsY8BTzb+15EpDqccazNqlBnVkksMtNEoHnaIMN0oD7uzfQxOOkNSGxJB+pGG5Q4s0C9tjMGwP6hZnZ57R6nL5ms2mVtmUkftabOE5EGVfdPfmvtHuBCn+0ngWvrfT0iskg4o4zGg0wkgrSEUnQ2pdztpkQ7RKANUlNBLt17nQ7mmUCdrlA3XA/1zFo+0r3Su0810+Hdq02V9k+bINiU71PnL3cD9aMnKpk6T4FaRBpTI02bJyJSO85oZkDiyo54ZkXukmEzb9GX9Owgx73WkUzLR0s6oDdYoA52F14J0o9Xod7U61aj9ww2sztdoe6toEId7IH25xV8+rzlbgvOjkoCtTNS/r4iInWkQC0ii4MzyrHRvHYPKF2hNrk9vun5qzMV6mhehbrhAvUyCHRVcID799nQ47Z8HBhq4ol+9x6dXkmFOrwWIpuZ+skl17quGB1NSfrHIxwdLfOeKVCLSINSoBaRxcEZ5ajvHNSVVqjTLR9uCJxaJbFBA3WoD8Ibyt/fuLOWtIYd1nTGSDgBHutvw2A5q6+SCvUS994WqI4bA5eudhd4+fX+MgO/ArWINCgFahFZHJyRqTmoOyqoUOfN9LHCm/0iveLi0KQ3bV5mUGIli6jUSbCz/H2zBlU+78ypWTXOXTYx1XdejkCP97VwWL58zSgAO8pdgtyJgo2X3k9EpM4abDi6iEgNWAvOGMfGuoG8CnU5gxKzLM+qUFs71fLR3aiDEis2df1/+fTDtIYdfneog/dedaiy06R/EAn2QOKg7y5nLHUr3hUtQZ4adqvuIiINRIFaRBY+ZxRsKtNDXVHLR9481R2RFK3hFBOJICOx4NQ0fG3plRfneaDOqlA3hyx//rQjMztPejrC0CrgYd9dtqwYozmU4uHjbTze38I55bSUOEOAArWINBa1fIjIwpc6CUz1PVfW8pEbqI2ZCuTHxiIcHnED9erO9EIxCydQz+482YHaX09LiutOHwLguV8/j7/86Qb6x0N89p6VbD9coGqdGqzO9YmIVJEq1CKy8HlLVh+f0aDE6cFudWecPYMt7BxooX88QijgZGb/aMge6opU6QeCdIU6uLTobr+/aYj/eWIJAN9/bCnff8zdPxxw+NYf7uQSb+BihgK1iDQgVahFZOFLHiGWNAxMhAkay9LWmQ9KBNiy0l2U5OYnegF35o9g+tNUFWoINE2dJ9BadFDkDWed4g0XHacp5ORsTzgBPnffiukHOArUItJ4VKEWkYUveZAT3lLhy9qyw68pvSx3oNUNhzaZ2XTpand2il/udmeyWO0t0+2ec74H6ipcf17fOaG1kHrUd9eAgQ8+6wAffNYBfrm7i10nW1jfE+WPf3Q6t+7pZvvh9twqtVZLFJEGpAq1iCxszhgkB6YWdenInuGjqeDCIzny5lK+eNUYAWMz36/t8gK1Mcz/WT6qUaHOC9TB8gYR/v6mYd5x2TGuP2OIt249hmMNn7w7rwfbKTNQJ0/A4Ochvq+8/UVEZkGBWkQWtvgeYGplw5WVTJmXljeXcnvE4dxlE5nvL1wx7j0KlxfQG1k1KtTTAvWSik/xzkuPEjSWuw50MhbP+qfKmSg9F7UzCcNfgeQxiN5b8WuLiFRKgVpEFrbofQCZRV1ylx0v0e6R5hMI33LJMfcpY3nGem8FP9M08+tsFCbg/pnVOfIWagmvrvgU3S0pLlgxTsoavv1IXoU7NVT84Mlfu6EaIP6EW60Gdz5yEZEaUKAWkYXLmYSkuyCJ/7LjFQbqYFfm8QvPOcXHr9/D516wi3XdXstHYAEEaqBk20epv2cgL1AHe90FXsBtn+l8VVmDH9+61f2h5RsP9eVm4WIzfcR3wcRdU99bB0a/A4OfhdHvlXxNEZGZUKAWkYUrsSdTlcws6tIxg5aPdKBuuQKaNmc2v/TckzzHm0fZPd98nzLPU6rto/PVxffJr1ADhDe4X9uvg6azILKp5GU85/RBlrYm2DPYwkPHstpIvGkQfUXvn74tOeD+iT0K47eWfF0RkUopUIvIwuX1TwMc8hZgWdM5g0AdWu72RkfOhdDKwvsthJYPKF49DjRBaF3ODxbT9/EJ1C2XQseLoOk89/vw+pKXEQrAi85xF+X54eNZbTep4/4HOFGI7yx+0slfQ2q05GuLiFRCgVpEFq7kgczDg8Nu2M3MyAGlF3VJC3ZDy9UQ7Cg+Y8ViqFAHl7k/XITXFd7HL1CHVkLzlqzv15R1Kdef4bZ33Lkvay7rQi0fiV1gU8VPaC3E/JdCFxGZKQVqEVmYnIlMa8BoLMCpyTBNIYe+tgoWdcnW9kz3a7oX2E+5gxwbXpEKdXCZ+zXQXXifcu5ruupfwoUrxokEHfYMtjASC7obCw1KjD1e+nUBYg+Vt5+ISJkUqEVkYZq8O9M/nalOd8YIZGe4civU2UzIvwILi6PlI+RV6IPdRY4v476aCASK/HDiCQctZy5xZ+zY2e+d147lLLTjbktC/MnSrwvurB/RR8rbV0SkDArUIrIwJfZmHh7wa/eA6Sv6lStQYCntBROoi7V8uMutE+guPL1e2a00vWXtdnafO+f34/3eDzLWQupk7k6JA2ATlM2bTlFEpBoUqEVk4XHGIXk48+0hL1Cvyw/UhSrNpeStnJixKFo+lrpfTXDagjfudlPB7CmlK9QA5/S5FerH+7POmz/TR2J3ea+ZljwIqZHKjhERKUCBWkQWnsTBnEU8MhXq7vxAPdMK9SJt+TDh3DYNvwqzaSl/YZgyWj4AzvEq1I/1Z933xKGpx9ZC7LHyXjP7mMk7KztGRKQABWoRWXiyZvcA2D801UOdw2++5HIUCuILJlAXaPkI9uYOJPSrMBeq3hc6Xxk2e4H6yYEWUo63MbZjagny2APFF3spJPrg1IqKIiKzoEAtIgtPIjdQ7xtyWzE29ESnNppw+Ssl5ivUez3TinfDKVChzh+IGPAJxDUI1N0tKVa2x5lMBjM/HOGMwvgtbtvG+M/Lf81sNukGcxGRWVKgFpGFxVp3FgdPImU4NNyEwU4tEQ6VBb98hYJzoH3m52wkhSrU+T3TQZ8e6kruQXBJ2e0h0wYmAkxug8FPgRMrcFQZJu9xlycXEZkFBWoRWVhSA1OtAMDB4Qgpa1jVEac5NNVXPatAXWjQ3YIP1Hmzm/gNSqykSm+CU8u6l5Duo35iIK9Np9RCLqWkTkJMU+iJyOwoUIvIwpL3K/x0u8f67HYPmGWF2qf32oQqWyimkRUM1Hn3zG8u6kp/qAitLmu3zEwfJ2pwjyfvrv45RWRRUaAWkYUlsT/n272D6UCdP8NHlSvUgc6yVv6bFwotoZ5/z0ybW2XO31aJ0IqydjvHr+WjWpLHctqEREQqpUAtIvND8ihM/Lb4PtZC8kjOpn2D7iC2DdMq1LNoz/CrUPv1E89bZVaojfFpA6nwvgb7ss5X+J+k9T1RmkIOh0ebGI4GC+43Y7FHq39OEVk0FKhFpLFFH4GJ38DQl2D8FzB6c+F9E/tz+qcha4aP7iq2fPjNtew348V8VbDlw6f6nN/2UekPFuHT3OXMw+ug58+h5TLf3UIBOGtJeoGXGlSpY4/kzF0uIlIJBWoRaVyxx2H0Jhj/pTvFGUD0fhj5nhuunYncQWnjP512ioItH2VO2ebLmOmtDaHlMz9fo/EL1CZYuNUl5/sKA7UJQcsV0PosCHZC2/XQdLbvrmctdds+dp2qwYqUqVPT2oVERMpVZH1ZEZE5ZB13nmE/6YGH0W1uyAt0AQlIHs/ZLZo0HB6JEDCWtfnLjpc5u0RBgTZ3LmSA5i3QdOHsztdI/HqoA23+PeLZATrQWniVxWKaL8567QA0bYHYE9N229jr/pZhdy0CNUDsYYisr825RWRBU6AWkcYUf7L06ndODIhBasj36YPDTVgMazujRILZU+a1QWCWs0UEOoBjbs9w+x9MH5w3n/lVqAu1yGS3eMymjSZb5EwINE2bX3qj1we/p1aBOr7T/UGu3KXTRUQ8+tQQkcZUqDpdgXS7x7QBicGlsz53pnc4snFhhWkoUKHunL4NIJBV6a/WPNwmAOH10zZv8irUewZrFKidcYhPr4yLiJSiQC0ijSdxwO1pnaWdA24VOh3EMqrR7xzo8c61ZvbnajSVBOpQX+l9ZsInUK/rjhE0lkPDTUQTNZqiUIu8iMgMKFCLSOOZvK8qp3nwqFsxvXDFeO4TZS4mUlQwHaircK5GY5qmbytUfQ60Td2LSgckFhOcPj91JGg5rTuKxbB3qFZ91I+7UzSKiFRAgVpEGktsR9WqhI/3uxXq85ZP5D4R3jj7kwd73V7jMhcmmVd8K9RFpqpLV+mrORd3aIXvIMhNtR6YCDB+W+3OLSILkgK1iDSWiTuqcprhaJAjo000hRzWZ89BHVoOwSoMngsucedMXmj90wCEp4dZUyxQr3S/VqM3PS3QMnXeLFOBuobLvCf2uYMTRUTKpEAtIo0j+hAk+6tyqqdOuoHrjN5JgulPOhOG9udX5fyYELQ9uzrnajTGMG21xGIV6sgmLwBXuf0lvGnapk297uIuNa1Q27g744eISJkUqEWkMaSGYfwnVTvdE96AxLP6Jqc2tvwehNdW7TUWtPw+ar9FXdJCy6HjpdWfbs6nNSddod51soaBGmDyHq2cKCJlU6AWkcYwede0eYdnY6fXP51erhoTgZYrq3b+BS+QF6j9lh3PFjm9+tcQXjMtpGdPnefUMu8m9rtzoYuIlEGBWkTm3sRvYPJ3VT3lzgG3ReGsPm9AYmQjBGpc1VxITNa9MoHiPdQ1u4YwBPtyNnU1p1jamiCaDHJk1GfwZDWN/S+kRmv7GiKyIChQi8jcSh6Dyd9U9ZTWwk6vh/rspV6FOrSuqq+x4OUE6lb/ZcfrwafyPZM+6p891c36j1/K+o9fyl//fH153RzOKIx+B2yy7NcRkcVJgVpE5tbo/4ATLb1fBR453spwNERvS4JlbQl3o8+MEVJEdqCu1gqIMxE5Z9qm05dUNtPHUyebecfNZ2S+//aOPt7z8w2Mx8v4JzBxEBJ7y7tWEVm0FKhFZO7En6rJIho/frIXgBeec3KqsBpcUvgAmS6QFVbnMlCHVk+bYaSSgYkpB/7PT6cGN167cQiAmx5dyhu/fyaTiTL+GdSMHyJSggK1iMwNa2GiNgto3HvInWf66vUj7gYThkAV5p5eTLJn9ZjLe2cMNJ2bs+nspW5f/EPHig+UjCYMb/nhGTx8vI2V7XEeedd2vvTip/jqS3bS0ZTk3sMdvO6mM0mWmnI6+gAkDs3mbyEiC1zdA7UxZq0x5jZjzOPGmEeNMe/2tn/QGHPYGPOg9+d59b42Eamjyd9C4kjVTzuRCPDI8VYCxrJ1lTegLNgzdz3A81X2rB5z/cNI88U53168coxI0OGxE60MThZeWOcvf7aR2/Z20xZO8a/X76GjyU3O12wY4Rsv28mytjj3He7gr362ofiMITblDlDUYi8iUsBcVKiTwP+x1p4DXA78iTFms/fcJ6y1W7w/1ZuQVkQah3Vg8m6YuLUmp7//SDtJJ8C5yyYyAYpAd01ea0HLCdSdc3cd4Pa/Zy1r3hy2XLJqDIvh7oP+13bfoXZ+8mQvTSGHH7z6MZ5+Wu5sHResmODTN+whEnT4weNL+eRdq4pfQ/IYxHbM+q8iIgtT3QO1tfaotfZ+7/Eo8DhQ5eW1RKRhRe+DsZ/XrNp36x43eF2+JitABXtq8loLmskK1I1w/yJn53x75WluO89v9vsH6i9uXwHAGy86zplL/Qe9Xr52lC++6CkCxvLpe1Zz14ESlfjovRVetIgsFnPaQ22MWQ9cBKQnoH2XMeZhY8yXjTEN8AkuIlUV3Q7jP6/pS9y6pxuA6888NbWxEQLhfJPd5hHsnrPLyMjro37aOjdQ33VgeqA+NRHitr1dGCxvvPh40dNevX6EP73cbT36yO1riaeKtAYlDkHsiQovXEQWgzkL1MaYduAm4M+ttSPA54BNwBbgKPDxAse9zRizzRizrb+/v16XKyKzlThQ8z7Ux060sG+omZZQigtXjE89EVCgrljQC6rGNEbLTGhtztSH5y8fpyOSZN9QMweHcxd4+c/7VhBPBXjGhmGWtydKnvqtW4+xrivKY/1tfPaeEtMrRu+b0eWLyMI2J4HaGBPGDdPfsNZ+H8Bae9xam7LWOsAXgMv8jrXW3mit3Wqt3drX1+e3i4g0GpuAkW9T3moaM/edHe5nwovOOUko+9Mtq/9WymQi7vLjgU4whQf+1e96cmf7CAXclg3IrVInUoabHlsKwJ9dXt6g1/aIw79e7841/R/3ruSJ/iLzW8d3a0lyEZlmLmb5MMCXgMettf+WtT27LPBiQKM/RBaK2A5wxkvvN0t37HOD88vOPZn7RECBekYCvRDsneurmBI5K+fbp3ttH3fum/rve8uubgYmwmzqneSileW/5y5bM8YLzz5J0glw/dfPo388VHjn8V9AaqSyaxeRBW0uKtRPB14LPCtvirx/NsY8Yox5GHgm8BdzcG0iUm02ARO31/xlbt3Txd7BZjqbkly4cmzqCRPOXaREyhda3lgL4oT6cvrhr900hMHyi93dDEyE2DvYxF/fsgGAV5w3UPFMie+5cmqu6b/MWgxmmmQ/jP2gspOLyIJW5Efw2rDW/gbw+5jTNHkiC1F0G6SGa/oSE4kAb/2hu7T0H192NLfdY66nfJvPwpvAxub6KnKF10NqEIC1XXGu3TjEL/f08Mc3n87x8TBj8SDnLRvn9RcVH4zoZ21XnC+96Ene/MMzuftgB3cd6OBp60b9d47vhYlfQ+tVs/jLiMhCoZUSRaR2UsMwcVdNX8Ja+JMfbSJlDcva4rx167HcHdQ/PXNN50LT+XN9FbnCa3O+fdMlbnC+93AH+4eaWd4e58svfoqm0Mz69a/dNMzrtxwn6QR49XfP5v2/OI1EoZk/Ju9xF30RkUVPgVpEasOJwdB/glOgwlcFR0YiXPjvF3Hb3m5awyk+dcMegvmfaqpQz5wJuAMTG0lwRc63T1s3yieft5tnrB/ijRcf40d/9BjLypjZo5i/veYg124cAuCbDy/jjE9uZSLh88+lMw7jP5vVa4nIwlD3lg8RWSTGfgDOxKxOMTAR4tY93TSHHB7vb2U0FuTMJZOs7Y7xT3eu4YmB1sy+n3vBLq5Y6xPeNQf1whLqc2f8yJox5kXnnOJF55wqclBlIkHL516wiw/euo7/fngZAJ+6exXvv/rQ9J0n73MHvbZeWbXXF5H5R4FaRKovvntWC2CcGAvziu+czd7B5pL7rmiP8/Hr90xbWjpDc1AvLCbszj6SOll631mIBC0fffZ+tqwY5723bOA/71vJucsmeMHZPsF94nZoOqexBnCKSF2p5UNEqsvGZ7waYiJl+MK25Vz2n1tywvRp3VGeuWGISDB3UZi/ufogd7z54cJhGlShXohCK0rvUyUvPXeAV57vLiL2f366gd8dap++k03C8NfAmazbdYlIY1GFWkSqa+Q7kDxR8WH3HOzgI7evZceJtsy2f7luDy8/L7cS+cjxVsbiQS5dPZo7m0ch6qFeeEIrIfZoXV4qGID/9+x9tEVSfGn7Cl77vbP4/qse57zlee1MqRG3n7r9RVQ8X5+IzHuqUItI9Yz9L8R3VXRINGl4/y9O45XfOTsTpq/ZMMS973hgWpgGOH/5BFesLTNMmwAEOiq6HpkHQsvr+nLGwPuuOsSGnijxVIDn/3/nMuk3SDH6EEzWdlYbEWlMCtQiMntODIa+DJPbKjrsZ091c/antvJNb+DXK87r5843P8xXX/IUy9qSs7+uQKcbqmVhmYO++HDQ8tWXTC05/vqbzmRw0mdJ9ok7IHGgjlcmIo1A/9KIyOykRmHkGxWHiO89uoQ/+dHpAESCDp947h4+9px9rOuu4kIijbRstlRPsGdO2ipO645x4wufIhxwuPdwB8/9+nnsON6au5ONw9iP3B8yRWTRUKAWkZmL74WhG8sO09a6Qfol/30O7/nZRlLW8Mrz+7n/jx/gxZtPVj8jKVAvTCboTlU3B55z+hC/eMMOVnfEODYW4T0/28BYPO+fUi1NLrLoaFCiiFTOiXr90o+XtVLcSCzIh29bywNH29l1qgWAcMDhb59xkDdcXPkAxrJpGrOFK9gLqaE5een1PTF+/NpHefoXLuSJgVZe8P9t5tuveIK+7Dal2BMweS+0XDYn1ygi9aUKtYhUJjXsThEW21FWmI6nDFf854V899G+TJi+YPk4P33do7UN06BAvZDN8X/b7pYU3/zDJ9jUO8mewRb+6Ltn8eiJltydxn4Ck3fPzQWKSF0pUItI+RKH3eXEk0dL7mot7Bxo4UXfOIfxhDt46+Xn9nPXWx/i5tc8xulLorW+WncBEFmYGuCHpQtWTPDtVzzBxp5JnjzZyku/eQ4/eTJvwOT4LTCm5clFFjq1fIhIaU4M4o/C2I/LqkofHQ3zqu+czb4hd3GWVR0xPv+CXVywYnZLkVfEGC3qspA1QKAGWNqa5AevfpwP3HoaP3x8CX/8o9N5x6VHee9VhwgY3J8sJ+8BZxTab4BAa8lzisj8o0AtIoWlRiB1Cka/A055YXjnQAuvv+lMjo1FALh87Qj/8fzd9LZWYRq8SgSXuYPXZGEK9s3+HIEmMK0Q7IbksRmvdNjVnOLfnruH1nCK/354GZ+/byUHh5v45+v20hbxVveMPeoO3u18JYRXz/7aRaShKFCLyHROFOKPub+udkq3ZiRShnsPtXPn/i6+vH05CSfAxp5JPn3DnukrytVLZNPcvK7UR6ALTBhsYmbHt10LzZdCwFvi3olC/CmY/A2kTriV5Uoux8BHn72fZW0JPnn3an78ZC/7h5r43At2sbYr7r3GKAx/CVquhLZnzey6RaQhKVCLyBSbcEN0/KmyZlCIJg03P76Ez9+3gj2DUwOyXnzOAB999n5awk4NL7aEalQwpXGlW3oqXeY+tAI6XgKhZbnbA83QfD40nQOpAYg9DATARNzKcpkrgP75045w1Wkj/MVPN7DjRBtXffFCOpuS/Pi1j7rB2jowcSckdkPHy9SWJLJAGFvhT+GNZOvWrXbbtspWZhMRHzYO8d0w8StIDpTc/a4DHXzv0aX8cnc3IzH35/KgsVy+doS3XXqMZ6wfqfUVl9bzDjc8ycI18k2I7azsmK5XQ+TMyo6xSUgNusuKx58CZ6zkIQMTIf745tO593BHZturLzjBWy45xsZeb9GXQAe0/B60XlnZ9YjInDDGbLfWbvV9ToFaZBFzopA8AmM3l6xIn5wI8Q+/Oo1HT7RmBhsCLG+P87otblBoCjXI50mwF3r/bK6vQmpt7OeVTUvXfh20XDG710ydgsnfuT3RJYK1tfCrPV2875YNDEyEM9t/f+Mgf3fNQdZ1x9yBi+FV0Px70HSe+v5FGpgCtchiZr1fM9u4+6vsxH5wht2KW+q4b4/00GSQB4+18bOnevneo0tIOrkzbLZHUrzs3AGeuXGIq08bmYtVoItrucINT7KwTd7nzjxTjkAr9PzZVM/0bNkUJA/ByPfc3ugikg78anc3f/aTTcSSuf8v/c3VB3nr1mPu/0OBFoic7VasG2QWExGZokA9l5xxdxQ5jlt5sEls9DFMqBubOIoJrwVn0J2RwE64H9I24X6YBlpwe/iCQAiMpg2XMlnHWw48AaM3ub+yxhQcwBVPGR4+1sYXtq3gtr1dxFOF32tv33qUd11+hI6mOeyPLsYY6PkLCHbO9ZVIrcV3w/B/lbdv61XuQMRaiO2EyTvcmUJs4f8vEinDr/Z08bE71+b8lgdgQ0+UP7/iMFesG2FZRxAiZ0FoLYQ3QGhpba5bRCqiQF0vyRNugLZxjgzs4r59p/jtXoelbQ7L2qIETIT9Q4YvbV+eOeSKtSOEApZf7+8C4Pzl44zEgvS2JOlqTrGxZ5Lj462kHMP1Z8XparGs621mde8SmkMBrBMjloxDsJdIqItAqMMdRGMTgAPh9e6vJU0ACLvTRMn8Zh33v2fqpLdwiQVnBJKHIbHPnforsQ/sOFjLibEwgYBl32AzAxMhWsIOP32yl1jSEAjAzv4WnhhomVaFTlvfHeXl5w3wjPXDczdjRyXan6flnheL1CCc+lTp/Yxxq9O1HgCYPAHxJyH2ECT7i+768LFW/urnG9g5MH1e6jWdMVZ3xvjrqw5xwYpxQqE2t986cgY0bXYfB9pr9bcQqZwT9X4bOul+DfZiaeHRvb/hrDVnEA4Cpg1sFEyL+2+YaXX/HQstdTOLCbt9UjbqFhTT/9ZZy1RR0susc/RrUQXqWrBJnMQA8cmd3Lt7L794Msj2I800Bx32DDYzFK39BCoBYzFAyua+sc7um+CJ/laetm6EWDLA4/0tnLEkyjM3DrOyw7KkPcypiRBXbmqhOdzEY0eO09HcRspalnWE6WnvYmg8xureHjDN2NRJYqkQzZEuIOX2p9ok1klggu7/II4TIBCMQGglYL3/EYz7oe9E3V+z2tTU/xDV/p8hOVDdKk76Wmd9Hqe83yzYBBAEDJkPjugj7ny1Nub+42wnGB3bx2QsSmtTE99/KMZLzhunPTTE0dEAXU0JHjjSxkQiyM929bD3VDMPHWub9v4o5g/OOsmVp41wWneMS1ePEpxvvxQxYVjyXverLHzWgZP/WHqxofA66H5Tfa4JpkJBYq83v/WQO0uIz1zuB4cjfPruVfxsVw+RgOXUZAj3k31KR1OS1Z1xYskAF64Y59mnD3FWH6xZtpHmpqUQ6AYTcgfhKmjLbNkkxJ+AQDeWALHoMULhPsYnDhAORXjy2DC37hwnlRpiw9I2bn0yxk+e7M45xZrOGMEA7B9yi3irOmIEA5bhaIhzl01w90H3N4gXrxqjq9lwZCQIBDk2FmDrqlEuWBnj6GgTI7EwA+MhYqkUa7oCdESSrO5dwnUX/R5nLu+g3hSoq+x/79/BTx/eycNHDQeHi1d8z102TiRo6WxKMhYP0hJyaA4HgSQbegP0tQzTHA7xP493MDgZ5g/OPsm2w12Eg0mSjmE0FuChY431AdkcStHdnGIwGsrpB1zfHWV1Z5zfHuhkSUuCpW0Jdg60ctmaCV64eZxUKkY43MVkbJgz+iJEU03sOwWbloboao6ysruLI0NJDg2O8bRNfSRsiKODA/S0Blnb286RoThtTREGxgOMR0d44niM5563gs/8OsZPH7d8643L2dAbZHj8FB1NSQLBLjABogmHiBklEFlLIjFMKADJVIpwuBUIEo2PEw53EjR41f0JvnnvIZZ3dnLJ2jjhyApC9igJ24shRSgQxdoQATsEJkwwECKeTNI/coq+jjaam7roHzrBdx+aJJFMccX6EEvbDOOJEN2tTazt7cRJjWJNO7uPHeT+Q5aDI208e+MhoskA7ZEEI/EO/uv+NkIBy9quGP9x76qq/fdrCaWYTLo/LLRHUqzvjvKuy4/wzA3DjTOocKY6/9Ct4MniMfjZ0jPTtF7dGPM+J4+6rVipfvdx8igQcit6npMTIf72l6fx86d6aA45mf9XC+mIJFnRkWB1Z4yUNTxr4xgBkoQjXVywppdwIMXK7m5amlqJpSK0N0fcAE7AqxKmWwsjc1b1kyqxKdyijHVDsZ2AQDtjI48wEk0yMplgeWczv955gKFokLHoJEdGHLYdCrN1TQLHiTMcDWGt5Z6D7ZyabNzCxJuv3MDfP7/+n/UK1FW0bd8pXvb53FHlzaEUp3XHWN0Z55LVCVojli1ru9m8qo+m1tO9qoRxfxUS6IZQX9avN5Jgmt1BYqbZ/VAj5R5jo+5xqUHcX+uPknISjE0McvDUKKu7IBiwQIS790W5e7+hf8z9yRDAEuLHO9tIOoaOiMNZSyc4MNzEvsEmRuNTFfTVnTEm4gFiqQABA2Px+TvKvC2cYjwxdf0Gm6n2LG+PMzAeLlixvXDFGAPjYQ6PFv8hqTWcYsJ7jXDAIZHVKhEKOAVbJ+plaWuCgYkw5y4bZ1NvlDdcdJymkMOJsQgbeqKc1h1bmP9uBnuh508VChabkW9B7Ini+3S/zZ1Jo9HYuLsaaWK326plvV+bJw96s+4kicZh/3AzR0YjfOT2tRwcbqI9kppx2FnVEaOrOcXj/W6rSUckRW9rgtWdlk1LEuzsj7CmO0Eg0MLOE5ZECpa0JlnRkWJFB6RsEBNoY0MvHB1J8cDhFDdsDrG83ZKyTew8EeOefXFeeUkHpy+N8GS/Q2/LOOFAkGgqxPLOdlZ2d3Ng4CDWtBIOdxOLj3Jab5CkE2A87vCbpwY4bWkH56xYQoAxhiaixJOG9tYeHjzQzxWnr2N0YoDejm6amtdy/NSTJFIh1vR2EwwGsdbi0ETABLnnqUfYtGw5nS0RmpqWYJPDmECQRGISaydpal7hLhKUPApYCHQQT0QJBxxSqTGCwTa27T1AT2uEJR1ttISbsM44R0cD9DRP0BRuZ2zyFEu71jIZG2E87hAJGjqagySSCR48eIL7D0a5dH0fLaEYMaeZiegEHS3NbFgSwDGd7Dl+gKVtrQyMjtHe0sqSjl6GxgdZv6SF4aghFLA8cmSSHYcHaQ6HOW9VJxOxcUZjhp7WCAdOjZFMOdy7f5wTYyFOjIWYSJBZrbZWLlszRjIFS9ssB4abWNWZ5IJVIdqbAjxwMM6qjgmW967jgYNDPPv0JMnUJI/1d7CsLcpPdzbTFIyzZXWQw0NR7tzXSV9rgj2Dzfz1M4YYnozz6IlWDg+HGIkFOXd5jONjQeKpIOevbucNV23lonX1n8NdgbqKHjk0zB989jcAXHXaCG+8LMCVZ51JJNyS++s2Mwdr5tik+7o2AVgg6FZCTIv7IW2C3lLS/VgMqeQQ0Xic9tY+sDEsQQwJjg6eIukYhieTHBqc5OK1zYwnQjxxdJRoKsxYdILWSIBYqolEYoxf7+8mErRcsXaUbzzYyRNeT2Ak6GQGt125bpj2phRHRyOMx4O0N6V48Kh7rwyW1Z1xDo1MBdnsoLqkJcHJBv5JOa0p5EwbwV+pjT2TJBzD0dEISSdAwFhaw07mh5znnD6IxXDZ6hEsYSYTDucuG8daw9bVo/S0ZP3q2xj3V8/BrqxZCLLCpt+vyY3x+tzGK14pbs51vgqazprrq5B6G/8lTPym8POBFuh97/z6Qcs6XtEl4AZtZ8SbC3vA/QNYZ4J79p7iwGCAoyOWeMpwYChCd3OC8XiAHzy+OAcy5hdVsjWHUiQdk1P06GpOMlyFFs2gsRW1182ldFHo7KWTbFoSJ5YM0dsaZ0lbgNZQklVdQc5avY6HD42QSiXYur6X4yNjPG3TCqyNEQ51EQgvdRfPSp2A0HL/3uZS7Z3p59Mtls6E95uSUO4+pNxtqVNgmiDQVpP7Ug4F6iqbiI6TmNxFV9fpc/ofds749QWn/4dIncL99WEICLoD5QIdbh+wCbv9hKGV7kCE9IwTNg6BVhLRg6RMB02RJdjkEUYno7S3LScYMDjJAZJOgHAgwO6TKbpa2+jr7CI6sZemcAuHxlcyNPgQbU1h2ltaaQokOTaSpDUC/eMpzl3ZyoMHBnBMO62hOAETYP+QYSKWYjgWJhyIcs6yJIeGDaFghCRdLGkeJ0UL+waGedqGIDtPpFjSCut7gzxxwuG81V1ETJT+0UnamiOsXbqCaGyI48Oj9LR10dm+EkyIRLwfa1NMxBI8dGiEcCDGsvYgJ8YSbOzrIRAI85s9CZ59dhsd4XHAcf8BbbrArVQRgkCne/+CS91+dGfCWyXuqPubDVLu/Q52u/8Am7D7w13qJEROh9So+w+xCbkfgs6QNwNNxP3tSGg1YNxzBZrd/e2E+494Yq9b/U3sd68t/d/MRADrBvCAN7Aq+oB7XHpWGpssa8XFWQt0QO9faCacxSj6iDuTTSFNZ7k/bC1k6WCSGnS/N2Fs8iSJeD/hUDPR2CAnx2IcGEzREraMRcfZfhD6x4OEA0mOjBgCxAgEAjw1EMaxhqOjISYSQSJBh/U9CVZ3JuhsSvI/j3f7XsLS1gTRZICelgQHh6dPTXjB8nEePj7172VfW5z+8dIV1EjQYVlbgqRjal5xrYXOpmRm8atCVrTHiacMLSGHkXiQ0RL7+9nUO8kLNicYi8Fv9zezvMOweXmAvrYYTztjAyu6WokELQHiRFpOB5Le4MDQ3BQA5ykFapHZ8Pspu9oDK2sxULMRODFI7IL4TiDghvL0P/rV1P5cd8U5WXySR2HwPws/3/YcaH1a/a5noUgNuz8op2dewGb9kOy1IZoI7mDqONYGcZwowWCb+1uB5GEgwMFTE6zu7SMQMGDjOMkhxqOjtLdvIBYf5fjgUVqau1nSFiLppAiaIMFwHzgjHD7Vz/KuLsLhdqy19A/3097ShZM8QVNkCWOTwzx+5Binr1zP0ESMZHKUAA4Ww8BYinAwyekrT8dJ9rP/VIJ4YpSetk4ghTFNrOvtYPv+o2w/MMrvbVhKVwvs6R+lJRwBDFvWdnJsJEpbSy9B4oxEY7SEYWl7Mw8dGufslb2kkqP0tHdzcuQgSdvBZMISNA6rukI0R5oIRlYCYUbGDmJNC4lkjKUdbRwdHKGnNcjxkUlOW7bGnY0r0EkyOcHYxAlam7sASziQwiFAMBB0i1HOJBPRAZoiPYAhaCa934yH3N9GSk0pUItIY3Ci3mIyY151fMStlKcG3Qp68qg3Z3YFAh3Q+5cL8wcSKc0m4ORHC7codb8Fwmvqe00isiAVC9Sq84tI/QSaIXBa4eeTx2D8FojvKe98Jghdr1OYXsxM2B1U5tdaZELeVJ4iIrWlhkMRaRyhFdD5Gmg6p7z9W691Z82RxS1Y4D0QWlOd+eRFREpQoBaRxmIC0PkKd6noYpXn5i3QckXdLksaWGiZ//bIGfW9DhFZtBSoRaQxtV0LHX8Iwc7pwTrUB+0vVKuHuIIFpogLra7vdYjIoqUeahFpXE3nQORMb/n1w26frDMILVcrTMuUkM+iLSbQmIu5iMiCpEAtIo3NBMG06tf3UlhouTt1mDOWtW2FN62biEjtqeVDRETmv/C63O8jZ8/NdYjIoqRALSIi819kU973+o2GiNSPArWIiMx/kc3unNTgtn8EV8zt9YjIoqJALSIi81+gBSKnu48jp2vQqojUlQYliojIwtDyNHcmmJbL5/pKRGSRUaAWEZGFIbwWet4+11chIouQWj5ERERERGZBgVpEREREZBYUqEVEREREZkGBWkRERERkFhSoRURERERmoeECtTHmemPMTmPMLmPM++b6ekREREREimmoQG2MCQL/DjwX2Ay8yhizeW6vSkRERESksIYK1MBlwC5r7R5rbRz4FvDCOb4mEREREZGCGi1QrwYOZn1/yNsmIiIiItKQGm2lROOzzebsYMzbgLd5344ZY3bO8LWWAgMzPHYx032rnO7ZzOi+VU73bGZ03yqnezYzum+Va6R7dlqhJxotUB8C1mZ9vwY4kr2DtfZG4MbZvpAxZpu1dutsz7PY6L5VTvdsZnTfKqd7NjO6b5XTPZsZ3bfKzZd71mgtH/cBZxhjNhhjIsArgZvn+JpERERERApqqAq1tTZpjHkX8HMgCHzZWvvoHF+WiIiIiEhBDRWoAay1PwF+UoeXmnXbyCKl+1Y53bOZ0X2rnO7ZzOi+VU73bGZ03yo3L+6ZsdaW3ktERERERHw1Wg+1iIiIiMi8smADtTHm3caYHcaYR40xf+5t22KMuccY86AxZpsx5rKs/d/vLXe+0xhz3Zxd+Byr5L4ZY9YbYya97Q8aYz4/pxc/RwrcswuNMXcbYx4xxvzIGNOZtb/ea1R23xbze80Y82VjzAljzI6sbb3GmF8YY57yvvZkPef7/jLGXOLd113GmE8bY/ymKV0QqnjPbve2pd93y+r9d6mnSu6bMWaJMeY2Y8yYMeazeefRe63ye7Zo3msV3rNnG2O2e++n7caYZ2Ud01jvM2vtgvsDnAfsAFpx+8R/CZwB3AI819vnecDt3uPNwENAE7AB2A0E5/rvMQ/u23pgx1xfd4Pes/uAZ3j7vAn4sN5rs7pvi/a9BlwNXJz99wf+GXif9/h9wD+Ven8B9wJX4M73/9P0/9ML8U8V79ntwNa5/vs06H1rA64E3gF8Nu88eq9Vfs8WzXutwnt2EbDKe3wecLhR32cLtUJ9DnCPtXbCWpsE7gBejLtITLpS2MXUHNcvBL5lrY1Za/cCu3CXQV9sKr1vUvienQXc6e3zC+Cl3mO911yV3rdFy1p7J3Aqb/MLga95j78GvChr+7T3lzFmJdBprb3buv8SfT3rmAWnGvesHtfZaCq5b9bacWvtb4Bo9s56rwEV3rPFpsJ79oC1Np05HgWajTFNjfg+W6iBegdwtffrlVbcqupa4M+BfzHGHAT+FXi/t7+WPHdVet8ANhhjHjDG3GGMuaruVzz3Ct2zHcALvH1eztSCRXqvuSq9b6D3Wrbl1tqjAN7X9K+HC72/VnuP87cvJpXes7SveL+C//s5/5Xy3Ch03wrRe63ye5a2mN9r5dyzlwIPWGtjNOD7bEEGamvt48A/4Va4fob767wk8E7gL6y1a4G/AL7kHVJyyfPFYAb37Siwzlp7EfCXwH+brF7hxaDIPXsT8CfGmO1ABxD3DtF7jRndt0X/XitTofeX3neFFbs3f2StPR+4yvvz2rpd1fyl99rM6L1WhDHmXNx/M96e3uSz25y+zxZkoAaw1n7JWnuxtfZq3F8tPAW8Hvi+t8t3mfq1XsklzxeLSu6b9yvSk97j7bi9h2fW/6rnlt89s9Y+Ya19jrX2EuCbuPcG9F7LqOS+6b02zXHvV57pX7Gf8LYXen8d8h7nb19MKr1nWGsPe19Hgf9mcbaCFLpvhei9Vvk903utyD0zxqwBfgC8zlqb/W9pQ73PFmygTo+QNcasA16C+4/zEeAZ3i7Pwg2L4C5v/kqvL2cD7uCoe+t7xY2hkvtmjOkzxgS9xxtx79ueel/zXPO7Z1nbAsDfAelZKfRe81Ry3/Rem+Zm3B908b7+T9b2ae8v71eoo8aYy71fJb8u65jFoqJ7ZowJGWOWAhhjwsDzcVuSFptC982X3mtAhfdM7zWgwD0zxnQDPwbeb639bXrnhnyfzeWIyFr+AX4NPIb7q+RrvW1XAtu9bb8DLsna/29xq147WcAjkqt533D7mR71tt8P/MFcX38D3bN3A096fz6Gt4iS3mszu2+L+b2G+0PtUSCBW5V5M7AE+BXuD7e/AnpLvb+Arbj/SO8GPpv9nlxof6pxz3BnZNgOPOy99z7FAp+RZwb3bR/ub5fGvP03671W+T1bbO+1Su4ZbmFlHHgw68+yRnyfaaVEEREREZFZWLAtHyIiIiIi9aBALSIiIiIyCwrUIiIiIiKzoEAtIiIiIjILCtQiIiIiIrOgQC0iMgPGmJS3TPAOY8x3jTGtxpj1xpiK5o81xrzBGLOqVtfZCLy/Y78x5osl9ttrjDkrb9snjTHvNcZcZYx5rNL7KyJSDwrUIiIzM2mt3WKtPQ93ifR3zPA8bwAaOlAbY0JVOM23rbVvKbHPt4BXZr1uAHiZd+yvgedV4TpERKpOgVpEZPZ+DZzuPQ4aY75gjHnUGHOLMaYFwBizxRhzjzHmYWPMD4wxPcaYl+EuTvANr9rdYoy51hjzgDHmEWPMl40xTd7x+4wxHzLG3O89d3b+RRhjgsaYfzHG3Oe9ztu97dcYY243xnzPGPOEMeYb3upiGGMuMcbcYYzZboz5edbyv7cbYz5qjLkDeLcx5lLvnHd7r7HD2+/XxpgtWdfwW2PMBcVuVqHrxF3w4ZVZu14N7LPW7q/sP4eISH0pUIuIzIJXvX0u8Ii36Qzg36215wJDuKs8Anwd+Gtr7QXevh+w1n4P2Ab8kbV2C2CBrwKvsNaeD4SAd2a93IC19mLgc8B7fC7nzcCwtfZS4FLgrd5y2gAXAX+OuzLbRuDp3jLHnwFeZq29BPgy8I9Z5+u21j7DWvtx4CvAO6y1VwCprH2+iFtlxxhzJtBkrX24xG3zvU7vOMcYc6G33ytxQ7aISENToBYRmZkWY8yDuIH4APAlb/tea+2D3uPtwHpjTBduOL3D2/413OprvrO8458ssN/3s8/rc/xzgNd51/U73OV8z/Ceu9dae8ha6+Au37vee73zgF94x/wdsCbrfN8GMMZ0Ax3W2ru87f+dtc93ged74fxNuD8QlFLsOr8JvNL7QeWF3vlFRBpaNfriREQWo0mvqpzhdVHEsjalgJYKzmlKPJ8+dwr/z28D/Km19ud513WNz3WFvP0f9arOfsZLXZe1dsIY8wvc8PuHuC0spfhep+ebwC3AHcDD1toTZZxPRGROqUItIlJj1tphYNAYc5W36bW4gRFgFOjwHj+BW9E+3We/cvwceKdXLcYYc6Yxpq3I/juBPmPMFd7+YWPMuT7XPwiMGmMu9za9Mm+XLwKfBu6z1p6azXVaa3cDJ4GPoXYPEZknVKEWEamP1wOfN8a0AnuAN3rbv+ptnwSu8LZ/12t5uA/4fAWv8UXcVo77vUGH/cCLCu1srY17AyM/7bWlhIBPAo/67P5m4AvGmHHgdmA46zzbjTEjuH3W1bjObwL/D/hBmecTEZlTxlo719cgIiINzhjTbq0d8x6/D1hprX239/0q3JB9ttejnX/sG4Ct1tp3zfIa1gP/601VKCLSMNTyISIi5bghvZANcBXwEQBjzOtwBxb+rV+Y9kwCzy21sEsxXrvMj4CBmZ5DRKRWVKEWEREREZkFVahFRERERGZBgVpEREREZBYUqEVEREREZkGBWkRERERkFhSoRURERERmQYFaRERERGQW/n9xvOo9esuQxwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
    "train_idx = 0\n",
    "pulse_idx = 0\n",
    "plt.figure(figsize=(12, 8))\n",
    "plt.plot(pred[\"energy\"], pred[\"expected\"][train_idx, pulse_idx], lw=2, label=\"Predicted\")\n",
    "plt.fill_between(pred[\"energy\"],\n",
    "                 pred[\"expected\"][train_idx, pulse_idx] - pred[\"total_unc\"][train_idx, pulse_idx],\n",
    "                 pred[\"expected\"][train_idx, pulse_idx] + pred[\"total_unc\"][train_idx, pulse_idx],\n",
    "                 facecolor='gold', alpha=0.5, label=\"68% unc.\")\n",
    "plt.legend(frameon=False, borderaxespad=0, loc='upper left')\n",
    "plt.gca().set(\n",
    "            xlabel=\"Photon energy [eV]\",\n",
    "            ylabel=\"Intensity\",\n",
    "            ylim=(0, None))"
   "execution_count": null,
   "id": "32d10835-3849-49a4-9c4c-fff1f84c35d0",
   "source": []
   "display_name": "xfel (current)",
   "name": "xfel-current"
  },
  "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.10.13"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {},
    "version_major": 2,
    "version_minor": 0
   }