{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import os\n", "import json\n", "import pandas as pd\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "nproc = range(1, 17)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def speedup(t_serial, t):\n", " return t_serial/t" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def read_profiling_files(profile_dir_path=\".\", drop_multinode=False, drop_singlenode=False):\n", " profiling_data = pd.DataFrame()\n", "\n", " json_filenames = [file for file in os.listdir(profile_dir_path) if file.endswith(\"_profiling.json\")]\n", "\n", " if(drop_singlenode):\n", " json_filenames = [file for file in json_filenames if \"1_nodes\" not in file]\n", "\n", " if(drop_multinode):\n", " json_filenames = [file for file in json_filenames if \"1_nodes\" in file]\n", "\n", " for json_filename in json_filenames:\n", " with open(os.path.join(profile_dir_path, json_filename)) as json_file:\n", " profiling_data = profiling_data.append(json.load(json_file), ignore_index=True)\n", " profiling_data = profiling_data.sort_values(by=[\"n_processes\"], ignore_index=True)\n", "\n", " profiling_data.n_processes = profiling_data.n_processes.astype(int)\n", " profiling_data = profiling_data.sort_values(by=[\"n_processes\"], ignore_index=True)\n", "\n", " return profiling_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Weak scaling" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " t_init t_total outfile \\\n", "0 5.327343 72.445652 /cluster/work/jobs/5977262/ShallowWaterGPU/mpi... \n", "1 5.766222 70.390925 /cluster/work/jobs/5977264/ShallowWaterGPU/mpi... \n", "2 6.594021 72.797283 /cluster/work/jobs/5977265/ShallowWaterGPU/mpi... \n", "3 13.090770 98.327636 /cluster/work/jobs/5977266/ShallowWaterGPU/mpi... \n", "\n", " t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n", "0 6.785504 34.131567 24.233159 0.0 \n", "1 6.297029 31.896560 24.437577 0.0 \n", "2 6.115570 33.620830 24.389490 0.0 \n", "3 23.062950 35.326106 24.479295 0.0 \n", "\n", " t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n", "0 23.969971 0.039307 \n", "1 23.959106 0.035278 \n", "2 23.961182 0.036865 \n", "3 23.963623 0.038574 \n", "\n", " t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n", "0 0.049072 0.027039 12288.0 12288.0 0.000001 \n", "1 0.200195 0.022766 12288.0 12288.0 0.000001 \n", "2 0.150146 0.025269 12288.0 12288.0 0.000001 \n", "3 0.281494 0.028137 12288.0 12288.0 0.000001 \n", "\n", " n_time_steps slurm_job_id n_cuda_devices n_processes \\\n", "0 200.0 5977262.0 1 1 \n", "1 200.0 5977264.0 2 2 \n", "2 200.0 5977265.0 3 3 \n", "3 200.0 5977266.0 4 4 \n", "\n", " git_hash \\\n", "0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "1 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "2 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "3 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "\n", " git_status \n", "0 M conda_environment.yml\\n M conda_environment... \n", "1 M conda_environment.yml\\n M conda_environment... \n", "2 M conda_environment.yml\\n M conda_environment... \n", "3 M saga_scaling_benchmark.job\\n M saga_strong_... \n", " t_init t_total outfile \\\n", "0 5.409974 74.459357 /cluster/work/jobs/5977267/ShallowWaterGPU/mpi... \n", "1 10.191378 87.734289 /cluster/work/jobs/5977268/ShallowWaterGPU/mpi... \n", "2 10.992114 92.724516 /cluster/work/jobs/5977269/ShallowWaterGPU/mpi... \n", "\n", " t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n", "0 8.215068 31.199623 27.619763 0.0 \n", "1 18.097157 30.747718 26.639607 0.0 \n", "2 18.207139 32.633317 28.926713 0.0 \n", "\n", " t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n", "0 23.962158 0.035278 \n", "1 23.961914 0.035278 \n", "2 23.966187 0.037476 \n", "\n", " t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n", "0 3.625488 0.022888 12288.0 12288.0 0.000001 \n", "1 2.509521 0.022278 12288.0 12288.0 0.000001 \n", "2 4.665771 0.023193 12288.0 12288.0 0.000001 \n", "\n", " n_time_steps slurm_job_id n_cuda_devices n_processes \\\n", "0 200.0 5977267.0 1 2 \n", "1 200.0 5977268.0 1 3 \n", "2 200.0 5977269.0 1 4 \n", "\n", " git_hash \\\n", "0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "1 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "2 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "\n", " git_status \n", "0 M conda_environment.yml\\n M conda_environment... \n", "1 M saga_scaling_benchmark.job\\n M saga_strong_... \n", "2 M saga_scaling_benchmark.job\\n M saga_strong_... \n" ] } ], "source": [ "# DGX-2\n", "#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-09T134809/\")\n", "#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-23T154025/\")\n", "\n", "# HGX\n", "#weak_scaling_profiling_data = read_profiling_files(\"output_hgx/weak_scaling/2022-06-16T162931/\")\n", "##weak_scaling_profiling_data = read_profiling_files(\"output_hgx/weak_scaling/2022-06-16T170630/\")\n", "\n", "# Saga\n", "singlenode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_multinode=True)\n", "multinode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_singlenode=True)\n", "\n", "print(singlenode_weak_scaling_profiling_data)\n", "print(multinode_weak_scaling_profiling_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Strong scaling" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def amdahls_speedup(parallel_share, nproc):\n", " serial_share = 1.0 - parallel_share\n", " return [1.0 / (serial_share + parallel_share / float(n)) for n in nproc]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def gustafsons_speedup(parallel_share, nproc):\n", " serial_share = 1.0 - parallel_share\n", " return [serial_share + parallel_share * float(n) for n in nproc]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " t_init t_total outfile \\\n", "0 9.692163 80.12349 /cluster/work/jobs/5977971/ShallowWaterGPU/mpi... \n", "\n", " t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n", "0 8.455713 35.275914 24.448944 0.0 \n", "\n", " t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n", "0 23.929565 0.03894 \n", "\n", " t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n", "0 0.340088 0.028564 24576.0 6144.0 0.000001 \n", "\n", " n_time_steps slurm_job_id n_cuda_devices n_processes \\\n", "0 200.0 5977971.0 4 4 \n", "\n", " git_hash \\\n", "0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "\n", " git_status \n", "0 M saga_scaling_benchmark.job\\n M saga_strong_... \n", " t_init t_total outfile \\\n", "0 10.973809 93.593265 /cluster/work/jobs/5977972/ShallowWaterGPU/mpi... \n", "1 4.248161 39.835643 /cluster/work/jobs/5977974/ShallowWaterGPU/mpi... \n", "2 11.035480 60.120367 /cluster/work/jobs/5983711/ShallowWaterGPU/mpi... \n", "3 9.521014 44.935236 /cluster/work/jobs/5983714/ShallowWaterGPU/mpi... \n", "\n", " t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n", "0 18.225805 32.501692 29.925707 0.0 \n", "1 4.393575 15.181573 13.800955 0.0 \n", "2 26.829786 10.607348 9.628182 0.0 \n", "3 17.313007 8.706373 7.796057 0.0 \n", "\n", " t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n", "0 23.949829 0.037476 \n", "1 12.015137 0.035522 \n", "2 8.051514 0.038574 \n", "3 6.057861 0.042480 \n", "\n", " t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n", "0 5.814209 0.025513 24576.0 6144.0 0.000001 \n", "1 1.679688 0.023071 24576.0 3072.0 0.000001 \n", "2 1.506348 0.025513 24576.0 2048.0 0.000001 \n", "3 1.665527 0.029907 24576.0 1536.0 0.000001 \n", "\n", " n_time_steps slurm_job_id n_cuda_devices n_processes \\\n", "0 200.0 5977972.0 1 4 \n", "1 200.0 5977974.0 2 8 \n", "2 200.0 5983711.0 3 12 \n", "3 200.0 5983714.0 4 16 \n", "\n", " git_hash \\\n", "0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "1 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "2 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "3 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n", "\n", " git_status \n", "0 M saga_scaling_benchmark.job\\n M saga_strong_... \n", "1 M saga_scaling_benchmark.job\\n M saga_strong_... \n", "2 M saga_scaling_benchmark.job\\n M saga_strong_... \n", "3 M saga_scaling_benchmark.job\\n M saga_strong_... \n" ] } ], "source": [ "# DGX-2\n", "#strong_scaling_profiling_data = read_profiling_files(\"output_dgx-2/strong_scaling/2022-06-09T160712/\")\n", "#strong_scaling_profiling_data = read_profiling_files(\"output_dgx-2/strong_scaling/2022-06-23T172838/\")\n", "\n", "# HGX\n", "#strong_scaling_profiling_data = read_profiling_files(\"output_hgx/strong_scaling/2022-06-16T152945/\")\n", "\n", "# Saga\n", "singlenode_strong_scaling_profiling_data = read_profiling_files(\"output_saga/strong_scaling/2022-06-16T190721/\", drop_multinode=True)\n", "multinode_strong_scaling_profiling_data = read_profiling_files(\"output_saga/strong_scaling/2022-06-16T190721/\", drop_singlenode=True)\n", "\n", "print(singlenode_strong_scaling_profiling_data)\n", "print(multinode_strong_scaling_profiling_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8gAAAF9CAYAAADYykHtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAADCGUlEQVR4nOzdd3hUxdfA8e+k94QSAoReAoReBGmiFOlFQUA6SLGgooKK6AuC/mxIkaKAUkTECtIEEQQEpUNoCb2FEFOAAOll5/1jkyW9QLKbhPN5nn2SnZ259+ym3D07TWmtEUIIIYQQQgghHnZWlg5ACCGEEEIIIYQoDCRBFkIIIYQQQgghkARZCCGEEEIIIYQAJEEWQgghhBBCCCEASZCFEEIIIYQQQggAbCwdQGGjlJJlvYUQQuQ7rbWydAxFlVybhRBCFITMrs3SgyyEEEIIIYQQQiA9yFmS/aGFEELkB6Wk4zi/yLVZCCFEfsju2iw9yEIIIYQQQgghBJIgCyGEEEIIIYQQgCTIQgghhBBCCCEEIAmyEEIIIYQQQggBSIIshBBCCCGEEEIAsoq1EEIIIYq4hIQErl27RmxsrKVDEUKIfOXg4ECFChWwtbW1dCgPDSVbJqSllNIgW0kIIYTIHylbSWitZb+n+5TTtfnSpUu4urpSqlQp2VZLCFFsaK25ceMGd+/epWrVqpYOp1jJ7tps9iHWSqkKSql5Sqm9SqlopZRWSlXJZVsHpdRnSqlgpVRM8jEey6SelVJqslLqslIqVil1TCnVN9+fjBBCCCEsLjY2VpJjIUSxo5SiVKlSMjrGzCwxB7kG0B+4BezOY9tvgDHA/wE9gGDgD6VUo3T1ZgDTgPlAV2Af8LNSqtt9Ry2EEEKIQkuSYyFEcST/28zPEnOQ/9ZaewEopUYDT+amkVKqITAIGKW1XpZctgs4BUwHeiWXlQEmAh9rrWcmN9+hlKoBfAz8no/PRQghhBBCCCFEMWH2HmStteE+m/YCEoAfUx0rEfgB6KyUsk8u7gzYAd+la/8dUF8pJQP4hRBCCCGEEEJkUJS2eaoLXNJaR6crP4UxIa6Rql4ccD6TegC+BRZhMq01K/69DNPcjbfUvh9gLDuz+V7ZoWXGsvWv3Cu7E2wsm1krbftFjxnLrx+9V7bjI2PZjo/ulV0/aixblG6K9sxaxvI7wffK1r9iLDu07F7Zmc3Gsu8HpG0vz0mekzwneU4P23MSoph4/PHHGT9+vKXDSOPy5csopTh06JDFYnjiiSf49ttvLXb+grR8+XJcXFzy1GbatGnUq1evgCLKu/DwcJRS7Ny5M8s6BoOBcePGmdYi2LlzJyNGjKBHjx6mOunvFwb9+vVj1qxZlg6jSNBa88vha0zf4F/g5ypKCXJJjPOW07uZ6vGUrxE641KX6euloZQaq5TKl//OSimW7L6YH4cSQgghCrW8LL6plHpUKbVFKRWhlIpSSp1QSg00c8gWp5TK9jZixIgc2//yyy/mCTYfZZagV6xYkeDgYBo1amSRmDZt2kRgYCCDBw+2yPnvV26T2AEDBnDxYt7ek06cOJFdu3aZ7hfGxDK933//nWXLlrFhwwaCg4Np1aoVc+fO5bvv0g8ofTBZve4//PADjRs3Nt0PCgpi7NixVKhQATs7O7y9vRkzZgzXrl1L027q1Kl88MEH3L59O1/jLG4uh0cx+Ov9TPz5GEv/ucSxwIiCPaHW2mI3YDSggSq5qPsnsDeT8k7Jx2ibfH8JEJxJvZrJ9YbmcB5tfFkezEurDuvKb23Uq/dfeeBjCSGEKLpSXVcses0tqBvwOBCCcY2PP7K6rgPdgXhgOdAN6Ai8AozIxTmyvTb7+/vn9sdRKAQHB5tuS5Ys0UCasoiIiGzbA/rnn3/O83nbtWunX3rppVzXT0pK0omJiXk+T36d3xw6deqkZ8yYYekw8mzq1Km6bt26ZjnX8OHDdffu3c1yrsyEhYVpQO/YsSPLOrNnz9aVKlXK9jj58Tyyet0HDhyop06dqrXW+uLFi7ps2bK6ZcuWetu2bfrKlSv6r7/+0i1bttRly5bVly5dStO2adOmev78+dmet6j9j8sv8YlJesGOc9pnyu+68lsbdaP3/9C/Hg7UBoPhgY+d3bW5KPUg3yTz3t8SqR5P+VpCZVzyLX29AtWoogcAx65FmON0QgghhKX8rbX20lp3A37OrIJSyhVYBizUWo/QWv+utd6mtf5Ca73cnMEWBmXLljXdPDw8MpT98MMP1KhRAzs7O2rUqMGSJUtMbatUqQLAM888g1LKdP/ChQv07t2bsmXL4uzsTJMmTdi4cWOe4koZjvv7779Tr1497OzsCAgIyLQHMX1PWkqduXPn4u3tTYkSJRg5ciTR0dGmx3ft2sWCBQtMPeWXL1/OMMR6586dKKXYvHkzTZs2xdHRkbZt23Lt2jV27dpFw4YNcXFxoUePHty4cSNNTMuWLcPX1xcHBwd8fHyYPXs2BkPWS9+EhYWxbds2evXqlab89u3bjB07ljJlyuDq6kq7du1M8cXGxlKvXj1GjRplqn/9+nVKly7NzJkzTWUrVqygfv362Nvb4+XllWZUQHbHT/1z2LBhAz4+Pjg4OPDEE0+YeoKXL1/O+++/z6lTp0yv5fLly7P9mab/uf3www9Ur14dV1dX+vTpQ3h4eKY/22nTprFixQo2bdpkOldWQ50PHjzIk08+SenSpXFzc6NNmzbs3bs3TR2lFIsXL+aZZ57B2dmZatWqZejlPXjwIE2bNsXBwYHGjRuzf//+TM+XYsSIEbz22mtcvXo1zd9ETj3fWms+/fRTqlevjqOjI/Xr17+vHueEhAQ2b95M7969AXjppZewsrJi27ZtdOjQgUqVKvHEE0+wbds2rKyseOmll9K079WrF6tXr87zeYu7o1dv0XPeHj7dcoa4RANPN/Fm+xuP83STCgW+srclVrG+X6eAp5RSTjrtPGRfjJ9In09Vzx6oTtp5yClzjwt+4Dr3EuSjVyPMcTohhBDCInTuFt98BvAEPi/gcACo8vYmc5wmg8sfd3/gY6xdu5bx48cze/ZsnnzySf744w9efPFFypYtS8+ePTl48CBlypRhyZIl9OjRA2trawAiIyPp2rUrH3zwAY6Ojvz44488/fTTHD9+nNq1a+f6/LGxsXzwwQcsWrQIT09PypUrl+u2u3fvply5cmzbto3AwED69++Pj48PkydPZu7cuZw9e5batWvzv//9DwBPT08CAwMzPdbUqVOZM2cO7u7uDBo0iAEDBuDg4MDixYuxtrbmmWeeYdq0acybNw+AJUuW8H//93/MmzePpk2bcvLkScaMGYOtrW2W86737NmDvb09devWNZVprenevTvu7u5s3LiRkiVLsmLFCtq3b8+ZM2coV64c33//Pc2bN6dr167069ePYcOG0bBhQ9544w0AFi1axKuvvsr//vc/unfvTmRkJH/99Veujw8QFxfH+++/z7Jly3BycuLVV1/lqaeews/PjwEDBnDy5Ek2btxoSlbd3dOt/ZCNy5cv8+OPP7J27VqioqIYOHAgU6ZMYdGiRRnqTpw4kYCAAG7evMnKlSsBKFky09mK3L17l6FDhzJ37lyUUsyfP59u3bpx7tw5Spcubao3ffp0Pv74Yz766CO++eYbRo0aRdu2balcuTJRUVF0796ddu3asWLFCoKCgpgwYUK2z2fu3LlUrlyZpUuXcvDgQdPfRE7effddfvnlFxYsWECtWrXYu3cvY8aMoUSJEnTvnvu/5R07duDu7k7jxo25efMmW7Zs4YMPPsDJySlNPScnJ1588UXee+89bt26RYkSxr675s2b88EHHxATE4Ojo2Ouz1tcRcYlMvOPM6zYexmtoVJJJ/73VH3a1Cydc+N8UpQS5PXA+xgvsisAlFI2wABgq9Y6LrneFowJ8+Dk+imGACe11pfMEWw9b3dsrBRnQ+4SFZeIs31ReqmFEEKIfNUG4wiu+kqp34E6QDDwNfCB1jrJksEVJjNnzmTo0KGmpM7Hx4fDhw/zySef0LNnTzw9PQHw8PCgbNmypnYNGzakYcOGpvtTpkxhw4YN/PLLL7z77ru5Pn9SUpIpycwrNzc3vvzyS2xsbKhTpw7PPPMM27dvZ/Lkybi7u2NnZ4eTk1OauLMyY8YM2rZtC8Dzzz/Pyy+/zOHDh2nSpAkAw4cPTzMPe8aMGXz66af069cPgKpVq/L222+zcOHCLBPkK1euUKZMmTQJ1Y4dO/Dz8yMsLMyUrMyYMYMNGzawcuVK3nzzTRo0aMDHH3/M2LFj2bt3L0ePHuX48eOmXq0ZM2YwYcIEXn/9ddNxU17P3BwfIDExkblz59K6dWsAVq5cSbVq1di+fTsdO3bExcUFGxubXL2W6SUmJrJ8+XJTUj127FiWLVuWaV0XFxccHR2xt7fP8Vzt27dPc3/evHn8+uuvbNmyhSFDhpjKhw4daro/Y8YM5s6dy+7du6lcuTKrVq0iPj6eZcuW4eLiQr169ZgyZQpDhw7N8rzu7u64urpibW2d69cjKiqKWbNmsXXrVtPvWdWqVTlw4AALFizIU4K8bt06U+/xuXPn0FpTp06dTOv6+vqitebcuXM0b94cgPLly5OQkMD169epXr16rs9bHG3zD+G9dScJvh2LtZVizGPVeLVDTRztcvehR36xSNamlOqX/G3Kf9+uSqkwIExrvUspVRm4AEzXWk8H0Fr7KaV+BOYopWyBS8ALQFWMyTDJ9UKVUrOByUqpu8ARjEl0e6C3GZ4eAA621tQu58rJoDucCLrNo9VKmevUQgghRGFTHnACvgdmAIcxzkF+D/AAXsuskVJqLDA2ryfLj55cSwkICEgzfBegTZs2rF+/Ptt2UVFRvP/++2zcuJHg4GASEhKIjY2lQYMGeTq/jY3NfS+Y5evri43NvbeW5cuXz3F4bFZSx+3l5QVA/fr105SFhoYCxqHSgYGBjBs3jhdeeMFUJzExMWUOe6ZiYmJwcHBIU3b48GGio6NNH0SkiI2N5cKFC6b7r776KuvXr2f27Nn89NNPeHt7AxAaGkpQUBAdOnTI9Jy5Pb6VlZUpgQKoXLky5cuXx9/fn44dO2b5nHKjcuXKaXqcy5cvb3otH0RoaCjvvfceO3bsICQkhKSkJGJiYrh69Wqaeql/tjY2Nnh6eprOHxAQQIMGDdIMC2/ZsuUDx5aev78/sbGxdOnSJc1w3YSEBNMQ7dxav359hiHuWQ0BTvl9TP14ygclMTExeTpvcRJ6J5ZpG07x+4n/AGhYwZ2Pnm6Ab3k3Y4UbF8C9ItjYmSUeS3Vrpp+jtDD56y6Mi30owJqMq2yPBD4EPsB4QT0GdNFaH0lXbwoQCbwKlAXOAP211hvyJ/zcaVTRg5NBdzgWGCEJshBCiIeZFeAATNFap+xpslMpVQp4SSk1TWudYRlXrfViYLFSKusspxjK7M11TnPuJk6cyJYtW5g5cyY1a9bEycmJYcOGER8fn6dz29vbZxiiamVllSHRTEhIyNDW1tY2Q8zZzQHOTupjpTz39GUpx075+tVXX9GqVatcn6N06dLcupV2gxSDwYCXlxe7d+/OUN/Nzc30fXh4OAEBAVhbW3P+/L0Zfdkl5Hk5fkHKz59TasOHDyckJITZs2dTpUoV7O3t6dChQ4bfwezOn9Prl19SzrdhwwYqVaqUbXzZOXToEJGRkbRr1w6AmjVropTi1KlT9OnTJ0P9gIAAlFJpeopv3jQuj5T+Q5OHgcGgWX3wKh9vPs3d2ESc7KyZ1LkWw1pWwdoq+X/emc3wy3PQ6FnobpZZOpZJkLXW2f6X11pfxpgkpy+PAV5PvmXXPgljEv3B/Uf54BpW8OA7ruJX0EuRCyGEEIVbympKf6Yr3wo8D9QF/jVrRIVUnTp12LNnT5pe5D179uDr62u6b2trS1JS2lHpe/bsYdiwYfTt2xe41yPp4+PzwDF5enri5+eXpiz9/dyws7PLEHd+8PLywtvbmwsXLjBs2LBct2vcuDFhYWGEh4eb5sg2adKEkJAQrKysqFatWpZtR48eTfXq1Zk/fz7PPvssTz75JE2bNjXFsn37djp16pShXW6PbzAYOHjwoCnhv3r1KtevXzcN3S2o1zIzuT3Xnj17+OKLL0zDk0NCQggODs6hVVq+vr6sWLGCqKgonJ2dAdi3b1/eg87Feezt7bly5UqGoeF5sW7dOrp3724aOVGyZEk6d+7MwoULee2119LMQ46OjmbBggV07do1zTzukydPUr58edNIiYfFuZC7TF5zgkNXjB9Sdahdhul96uHtkW4etnMZMCRATAQkJYJ1waevRWkV6yKncSUPAEmQhRBCPOxOJX9N3z2U8mH4g3dfFROTJk1i5cqVLFiwgHPnzjFv3jxWrVplmpsKxpWst2/fzn///WfqAfXx8WHt2rUcOXKEEydOMGTIEGJjY/Mlpvbt23P06FGWLl3K+fPn+fTTT/nnn3/yfJwqVapw4MABLl++THh4eL70WqaYNm0an376KbNnz+bMmTOcPHmSb7/9lo8++ijLNo0bN6ZMmTLs2bPHVNaxY0dat25N79692bx5M5cuXWLv3r1MnTrV1Ov71VdfsXPnTlauXEnfvn0ZMWIEgwYNMq3YPWXKFObMmcPs2bM5e/Ysfn5+fP7557k+PhiHHk+YMIG9e/fi5+fH8OHDqVu3rml4dZUqVbhy5QpHjhwhPDycuLg4CkqVKlU4efIkZ86cITw8PNPRA2D8Hfzuu+/w9/fn4MGDDBw4EDu7vA2JHTRoEDY2NowaNYpTp07x559/8uGHH+bH00jD1dWViRMnMnHiRNPvtZ+fH1999RWLFy/O9XFSzz9OMX/+fBITE+nYsSN//fUXgYGB7Ny5k06dOqG1Zv78+Wnq7969my5duuTL8yoK4hKTmPXnWbp9sZtDV25R2sWeBYOa8PXwZveS46TEew0qNIWxu6Dv12ZJjqFoLdJV5FQr7YKrgw3Bt2MJuROLl5tDzo2KsTt37hAaGprlP1YhhCiKbG1tKVOmjNmGRxZRv2Gce9wFOJmqvDMQm67sodanTx/mzZvHzJkzmTBhApUrV2bhwoX07NnTVOfzzz/n9ddfp2LFinh7e3P58mVmzZrFc889R9u2bSlRogQTJkzItwS5c+fOTJ06lSlTphAdHc3gwYN58cUXc5wXnd7EiRMZPnw4vr6+xMTEcOlS/q2bOnr0aJydnfnss8+YPHkyjo6O1K1bN8sFugCsra0ZNWoUq1atMg2HVUrx+++/8+677zJmzBhCQ0Px8vKidevWDBs2jDNnzvDGG2/w5ZdfUrVqVQDmzJlDkyZNeO2111i0aBEvvPACdnZ2fP7557z11luULFmSbt265er4Kezt7ZkyZQrDhg3j6tWrPProo6xZs8Y03Lxv376sWbOGDh06EBERwbJly9JsJZWfxowZw86dO2nWrBmRkZHs2LGDxx9/PEO9pUuXMnbsWJo2bUr58uWZNm0aYWFheTqXi4sLGzdu5IUXXqBJkybUrl2bTz75JMNWXPlhxowZeHl5MXPmTF544QXc3Nxo1KhRmg+jsnPp0iXOnj2bIbmtXr06hw4dYvr06QwdOpTQ0FA8PT3p1q0bP/74IxUqVDDVjY2NZe3atfzxxx/5+twKq/0XbzB57QkuhkUB8GzzSrzdpTbuTqmGtV/3g1+fgz5fQsXkefhevhkPVoCUucb6FxUp85zy63UZ8vV+9pwPZ9HQpnSum/eVBouLO3fuEBISgre3N46OjgW+f5kQQpiD1pqYmBiCgoLw8vLKNElO+X+X0/SioizV4psdMA6ZfhEwLb6ZXGcZxkUzp2FcQLMjMAmYobWelsPxs702BwQEZLlqrBDZCQ0NxdfXlwMHDmQ75Nmcli9fzvjx44mMjLR0KCIbs2fP5s8//+T333+/72MsWLCAdevWsXXr1mzrFfX/cbejE/h4SwCrDxi3davu6cxHTzegedVMtgz7YwrsnQ+1e8DAVQUWU3bXZulBLmANK7qz53w4foERD3WCHBoaire3d4Y94YQQoihTSuHk5IS3tzfXr19/mHuRc1p8E2AcEAS8DHgBl4HXtdZzzRCfEJkqU6YMS5cuJTAwsNAkyKJo8Pb2ZvLkyQ90DFtbW9Ne3sWR1ppNJ4KZtt6f8Mg4bK0VLz5egxefqI69TRZbN3WcBi5e0DzPGxjkG0mQC1ijisZNwP2uRlg2EAtLSEiQzc+FEMWWo6PjQz19JDe941rreODd5JsQhUZBDN8VxV///v0f+Bhjx1ouCSxoQREx/N9vJ9l+2riF1yNVSvDR0/WpUcY1bcW7/8HfM6Hzh2BjD9a20PoVC0R8jyTIBaxRRQ8Ajl+LIMmg7y1Z/hCSYdVCiOJK/r8JIfLLiBEjCmw+sRAFLcmgWfHvZWZuPUN0fBKuDjZM7lqHgY9UxCp9HqQ1/DQMAveDrSM8OcMyQacjCXIB83S1x9vDkaCIGC6EReLj5ZpzIyGEEEIIIYQoQk5dv807a05w7JpxW/tu9csyrWddymS1ULFS0O0z2D4dWr1sxkizJ9s8mUFKL/LDPsxa5M7jjz+e7aqblnD58mWUUhw6dMhiMTzxxBN8++23Fjt/QVq+fDkuLi55ajNt2jTq1atXQBHlXXh4OEopdu7cmWUdg8HAuHHjKFWqlKnuiBEj6NGjh6lO+vuFQb9+/Zg1a5alwxBCCCEKpZj4JD7aHECv+f9w7Nptyrk7sGRYMxYObpoxOU6IgQs77t0v1xCG/AouZcwbdDYkQTaDlAT5qOyHXKQopbK95TT8SSnFL7/8Yp5g81FmCXrFihUJDg6mUaNGFolp06ZNBAYGMnjwYIuc/37lNokdMGAAFy9ezNOxJ06cyK5du0z3C2Nimd7vv//OsmXL2LBhA8HBwbRq1Yq5c+fy3Xff5et5snrdf/jhBxo3bmy6HxQUxNixY6lQoQJ2dnZ4e3szZswYrl27lqbd1KlT+eCDD7h9+3a+ximEEEIUdbvPhdF5zt8s2nURg9aMaFWFP19vRydfr4yVE2JhaRdY1Q+u/Gv+YHNJhlibQaNKHgD4SYJcpAQHB5u+37hxI2PGjElTVlgWHTMYDGitsbbOYjXAfGBtbU3ZspZbhX3u3LmMGDGiQJ+jJTk6Oub598nFxSXPvc6Wdv78ecqVK0erVq1MZXZ2dmY7/7p16+jduzdg3L+yVatWVK1alRUrVlCzZk0uXLjAlClTeOSRR9i7dy9VqlQBoH79+lSrVo3vvvuOl156yWzxCiGEEIXVjcg4PtwUwJqjQQDULuvKR0/Xp3GlElk3snWAqm0h5hbYF95pp9KDbAb1yrtjbaU4G3KX6PhES4cjcqls2bKmm4eHR4ayH374gRo1amBnZ0eNGjVYsmSJqW3KG+tnnnkGpZTp/oULF+jduzdly5bF2dmZJk2asHHjxjzFlTIc9/fff6devXrY2dkREBCQaQ9i+p60lDpz587F29ubEiVKMHLkSKKjo02P79q1iwULFph6yi9fvpxhiPXOnTtRSrF582aaNm2Ko6Mjbdu25dq1a+zatYuGDRvi4uJCjx49uHHjRpqYli1bhq+vLw4ODvj4+DB79mwMBkOWzzcsLIxt27ZlWGX09u3bjB07ljJlyuDq6kq7du1M8cXGxlKvXj1GjRplqn/9+nVKly7NzJkzTWUrVqygfv362Nvb4+XllWZUQHbHT/1z2LBhAz4+Pjg4OPDEE0+YeoKXL1/O+++/z6lTp0yv5fLly7P9mab/uf3www9Ur14dV1dX+vTpQ3h4eKY/22nTprFixQo2bdpkOldWQ50PHjzIk08+SenSpXFzc6NNmzbs3bs3TR2lFIsXL+aZZ57B2dnZlBymP07Tpk1xcHCgcePG7N+/P9PzpRgxYgSvvfYaV69eTfM3kVPPt9aaTz/9lOrVq+Po6Ej9+vXvq8c5ISGBzZs3mxLkl156CSsrK7Zt20aHDh2oVKkSTzzxBNu2bcPKyipDItyrVy9Wr16d5/MKIYQQxYnWml8PX6PjrF2sORqEvY0Vb3WpzYaX22SeHGsNMRH37neYBuN2Qdn65go5zyRBNgNHO2tqebmSZNCcDLpj6XBEPli7di3jx49nwoQJnDx5kldffZUXX3yRDRs2AMbkAWDJkiUEBweb7kdGRtK1a1f+/PNPjh07Rt++fXn66ac5ffp0ns4fGxvLBx98wKJFi/D396dy5cq5brt7925OnjzJtm3b+PHHH1m7di1z5xq3IZ07dy4tW7Zk5MiRBAcHExwcTMWKFbM81tSpU5kzZw779+/n1q1bDBgwgOnTp7N48WJ27tzJqVOnmDZtmqn+kiVLeOedd5g+fToBAQF8/vnnfPLJJyxcuDDLc+zZswd7e3vq1q1rKtNa0717d4KCgti4cSNHjx7lscceo3379gQHB+Pg4MD333/P999/z88//4zWmmHDhtGwYUPeeOMNABYtWsS4ceMYOXIkx48f5/fffzedI6fjp4iLi+P9999n2bJl7N27l6SkJJ566im01gwYMIA33niDWrVqmV7LAQMG5PrndPnyZdPPZ+vWrRw9epQpU6ZkWnfixIn079+fjh07ms6Vupc2tbt37zJ06FB2797NgQMHaNSoEd26dUuTfANMnz6d3r17c+zYMQYMGMCoUaO4cuUKAFFRUXTv3p1q1apx6NAhPv74YyZOnJjt85k7dy7/93//R4UKFdL8TeTk3Xff5ZtvvmHBggX4+/szefJkxo0bx6ZNm3LVPsWOHTtwd3encePG3Lx5ky1btvDSSy9l2JvdycmJF198kc2bN3Pr1i1TefPmzTlw4AAxMTF5Oq8QQghRXNyOTmDMt4d54+dj3IpOoHWNUvwx4TFeeLw6ttaZpJVxkfDLSFjR0zj3GMDaBhyz6WUuBGSItZk0quSBf/Ad/AJv0bxqSUuHY3FV3s7bm9v8cvnj7vlynJkzZzJ06FDTXF0fHx8OHz7MJ598Qs+ePfH09ATAw8MjzdDkhg0b0rBhQ9P9KVOmsGHDBn755RfefTf3W4MmJSUxb948mjZtmufY3dzc+PLLL7GxsaFOnTo888wzbN++ncmTJ+Pu7o6dnR1OTk65GlI9Y8YM2rZtC8Dzzz/Pyy+/zOHDh2nSpAkAw4cPTzMPe8aMGXz66af069cPgKpVq/L222+zcOHCLBcmu3LlCmXKlEkzvHrHjh34+fkRFhZmGpo8Y8YMNmzYwMqVK3nzzTdp0KABH3/8MWPHjmXv3r0cPXqU48ePm7bjmTFjBhMmTOD11183HTfl9czN8QESExOZO3curVu3BmDlypVUq1aN7du307FjR1xcXLCxsbmv4emJiYksX74cd3d3wLhX4rJlyzKt6+LigqOjI/b29jmeq3379mnuz5s3j19//ZUtW7YwZMgQU/nQoUNN92fMmMHcuXPZvXs3lStXZtWqVcTHx7Ns2TJcXFyoV68eU6ZMYejQoVme193dHVdX1zwN14+KimLWrFls3brV9HtWtWpVDhw4wIIFC+jePfd/z6mHV587dw6tNXXq1Mm0rq+vL1przp07R/PmzQEoX748CQkJXL9+nerVq+f6vEI8iPHjx3Py5MlsF7/Lq+XLlzN+/HgiIyOzrbdr1y7GjBlDQEAA1tbWGdrl9jjmMnHiROLj4/niiy8sHYoQxdKJa7d5YdVhrt2Kwc3Bhqk96/J0E+/stzk0JMD1oxB1A0L9wTvv71stQRJkM2lU0YPv91+VecjFREBAQJrhuwBt2rRh/fr12baLiori/fffZ+PGjQQHB5OQkEBsbCwNGjTI0/ltbGzue8EsX19fbGzu/emXL18+x+GxWUkdt5eXcTGG+vXrpykLDTVuEB8WFkZgYCDjxo3jhRdeMNVJTExEa53lOWJiYnBwSLsC4uHDh4mOjjZ9EJEiNjaWCxcumO6/+uqrrF+/ntmzZ/PTTz/h7e0NQGhoKEFBQXTo0CHTc+b2+FZWVqYECqBy5cqUL18ef39/OnbsmOVzyo3KlSubkmMw/pxSXssHERoaynvvvceOHTsICQkhKSmJmJgYrl69mqZe6p+tjY0Nnp6epvMHBATQoEGDNMPCW7Zs+cCxpefv709sbCxdunRJcwFOSEgwDdHOrfXr12cY4p7VRT3l9zH14ykflEgPssgvI0aMIDw8PM/TbMxl0qRJTJkyJcu1HwYMGEC3bt3MHFXW3nrrLapXr86ECROoVq2apcMRotjQWrP6QCDT1p8iPslAgwruLBjUhIolnXJu7FgCBq4Ga1soXbPgg80nkiCbSWPZ6imN/OrJtaTM3lxn+ykaxk+4t2zZwsyZM6lZsyZOTk4MGzaM+Pj4PJ3b3t4+w5sWKyurDIlmQkJChra2trYZYs5uDnB2Uh8r5bmnL0s5dsrXr776Ksvhv5kpXbp0mqGuKcfy8vJi9+7dGeq7ubmZvg8PDzf1fpw/f95Unl1CnpfjF6T8/DmlNnz4cEJCQpg9ezZVqlTB3t6eDh06ZPgdzO78Ob1++SXlfBs2bKBSpUrZxpedQ4cOERkZSbt27QCoWbMmSilOnTpFnz59MtQPCAhAKZWmp/jmzZsAGT40EaI4+vfffzl9+jTPPPNMlnXuZ3HBgpCyUKWnpydPPvkkX375JZ999pmlwxKiWIiOT+TdtSdNC3ENebQS7/Xwxd4mi0VTDQbY9YlxAa5WySMDvXzNFG3+kTnIZlLN0wUXexuu344l9E6spcMRD6hOnTrs2bMnTdmePXvw9b33T8DW1pakpKQMdYYNG0bfvn1p0KABFSpUSNMj+SA8PT3TzI8F8PPzy/Nx7OzsMsSdH7y8vPD29ubChQvUqFEjwy0rjRs3JiwsLM0c2SZNmhASEoKVlVWG45Qpc28fvdGjR1O9enV+/PFHpk6dyuHDh9PEsn379kzPmdvjGwyGNHNpr169yvXr101DdwvqtcxMbs+1Z88eXn75Zbp3707dunVxdXXN8HuTE19fX06cOEFUVJSpbN++fXmOOTfnsbe358qVKxl+DnmZd79u3Tq6d+9uGjlRsmRJOnfuzMKFC00L1KWIjo5mwYIFdO3alZIl702HOXnyJOXLlzeNlBAivyUlJTFx4kRKlChBiRIlmDBhQoa/6dwsWvf2229Tq1YtHB0dqVKlCm+++SaxsXl73/H999/TsWPHDHP0U7ufxQUh54UaZ82aRYMGDXB2dsbb25vRo0cTERGR4bzpF6oEWUxPiPx0ISySpxb8y5qjQTjaWjNnQCM+6FM/6+QYIHA/7PoYtk2D29eyrlfISYJsJtZWigYVjMMlZZh10Tdp0iRWrlzJggULOHfuHPPmzWPVqlWmualgXMl6+/bt/Pfff6YeUB8fH9auXcuRI0c4ceIEQ4YMyfMbl6y0b9+eo0ePsnTpUs6fP8+nn37KP//8k+fjVKlShQMHDnD58mXCw8PzpdcyxbRp0/j000+ZPXs2Z86c4eTJk3z77bd89NFHWbZp3LgxZcqUSfOBRMeOHWndujW9e/dm8+bNXLp0ib179zJ16lRTr+9XX33Fzp07WblyJX379mXEiBEMGjTIlBBNmTKFOXPmMHv2bM6ePYufnx+ff/55ro8PxqHHEyZMYO/evfj5+TF8+HDq1q1rGl5dpUoVrly5wpEjRwgPDycuLi7fXsv0qlSpwsmTJzlz5gzh4eGZjh4A4+/gd999h7+/PwcPHmTgwIF53mpp0KBB2NjYMGrUKE6dOsWff/7Jhx9+mB9PIw1XV1cmTpzIxIkTTb/Xfn5+fPXVVyxevDjXx0k9/zjF/PnzSUxMpGPHjvz1118EBgayc+dOOnXqhNaa+fPnp6m/e/duunTpki/PS5jJNHfjLbXvBxjLzmy+V3ZombFs/Sv3yu4EG8tm1krbftFjxvLrR++V7fgo43nuw+eff86SJUtYtGiRadG/VatWpamTm0XrnJ2dWbp0KQEBASxcuJAffvghz3+fu3fvplmzZnl+DjktLpibhRqtrKyYM2cOp06d4vvvv+fAgQO8/PLLac6T1UKVzZs3JygoKN8+eBbiYbXx+HV6zdvDmZC7VPN0Zt341vRp7J1zw8otocNUGPQjuFco+EALiCTIZtQoZZi1JMhFXp8+fZg3bx6zZ8/G19eXuXPnsnDhQnr27Gmq8/nnn7Njxw4qVqxI48aNAeMn42XKlKFt27Z07dqVRx991LT40IPq3LkzU6dOZcqUKTRt2pTLly/z4osv5vk4EydOxM7ODl9fXzw9PTPMTX0Qo0ePZunSpaxcuZKGDRvStm1bFi9eTNWqVbNsY21tzahRo9K8UVRK8fvvv9O+fXvGjBlDrVq16N+/P2fOnKF8+fKcOXOGN954g3nz5pmOPWfOHJRSvPbaawC88MILLFiwgCVLllCvXj26dOnCqVOncnX8FPb29kyZMoVhw4bRokULDAYDa9asMQ0379u3L926daNDhw54enoWaM/GmDFjqFOnDs2aNcPT0zPLD0eWLl1KZGQkTZs2ZeDAgYwaNSrP83ldXFzYuHEj586do0mTJkycOJFPPvkkH55FRjNmzGDatGnMnDmTunXr0qlTJ3799ddsf2dSu3TpEmfPns2Q3FavXp1Dhw5Rt25dhg4dSrVq1Rg0aBB16tTh4MGDaY4fGxvL2rVrGTNmTL4+NyFSmzNnDm+++Sb9+/endu3azJ07N82CdimL1n399dd06dKFqlWrMmjQIMaMGcOCBQtM9d577z1at25NlSpV6NatG++8806e//dcuXKFcuXK5fk5pCwu2KBBA1q2bMnYsWPTjNRJvVBj1apV6dmzp2mhxhQTJkygffv2VKlShXbt2vHpp5/y008/pfmwNmWhytatW+Pj44Orq3E/1ZT/z5cvX85z7EIIiE80MG39KcZ/f5So+CR6NCjH+vFt8PHKZs/iU2vh5sV799u+DjUyX+OlyNBayy3VDdDGlyX//XEyWFd+a6N+dvHeAjl+Yebv72/pEEQRFhISokuVKqUvXLhg6VBMli1bpp2dnS0dhsjBrFmzdNeuXR/oGPPnz9edOnXKsV5W/+dSXVcsfo0rqrecrs1F8RozfPhw3b17d6211hERERrQ27dvT1NnyJAhul27dlprrQ8cOKAB7eTkpJ2dnU03Ozs77ePjY2rz888/69atW2svLy/t7OysHRwctK2trenx3PzvsrOz099//32asvTt0t+fOnVqmji01nrp0qXa1dVVa611aGioBrSjo2Oa+O3t7bWdnZ2pzfbt23XHjh21t7e3dnFx0Y6OjhrQQUFBpvPa2NjoxMTEDHHHx8drQG/YsCHb5ydEUWOO/3FBt6J1nwV7dOW3Nuoa72zSy/+5pA0GQ/aNjn6v9VQ3rRe01Do+psBjzE/ZXZtlkS4zSulBPn7tNgaDxsoq+wWdhBBGZcqUYenSpQQGBsrqpCJPvL29mTx58gMdw9bWlnnz5uVTRELcn9wsWrdv3z4GDhzI1KlTmT17Nh4eHqxfvz7HfcrTy2xxxNzIbnG/3CzUeOXKFbp3786YMWOYPn06pUqV4siRIzz77LNpFhLMbKFKkMX0hLhff58N49UfjnIrOoHy7g4sGNyExpVysVdx7W7gWQeaDgcb+4IP1EwkQTajMm4OlHd34PrtWC6ERVIzu+EKQog0evXqZekQRBHUv3//Bz7G2LFj8yESIbLm7u5OuXLl2Ldvn2mvcq01Bw4cMA11Tr1oXfr9zFP8888/eHt7895775nKrly5kud4GjdujL+//308k6ylXqhx2LBhmdY5dOgQ8fHxzJ4925QA52UbrJMnT2Jra5tmu0EhRNaSDJp5f51j7vZzaA3tfDyZM6ARJZyzWZsk/ByUrA5WVuDgDs/vNm7jVIxIgmxmjSp5cP3EfxwNjJAEWYgibMSIEYwYMcLSYQghiolXX32Vjz76CB8fH+rXr8/ChQsJDg42JcipF63TWvPYY48RGRnJvn37sLKyYuzYsfj4+BAUFMSqVato2bIlf/zxx32tfdC5c2e++eab/H6KTJs2jZdffhkPDw+6detGQkICR44cISgoiMmTJ1OzZk0MBgNz5szh6aefZt++fcyZMyfXx9+9ezdt27bNdvVtIYTRzah4Xv3hKLvPhaMUvN7Jh/FP1Mh+hOuxH2H9y/D4W9D2DWNZMUuOQRbpMjtZqEsIIYQQ6b3xxhuMHDmS0aNHmxb9Gzx4cJo6OS1a17NnTyZNmsSECRNo0KABf/75J9OnT89zLEOGDOHs2bOmhQvzS04LNTZo0IC5c+cya9YsfH19+frrr5k5c2auj7969WpZTE+IXDhy9Rbdv9jN7nPhlHS2Y+WoFrzSoWbO0z8d3CEpzrjSv3F9iGJJ6WL85O6HUsq4GkgBvS77L95gwOJ91C3vxqZX8mf14qIgICDAtDesEEIUR1n9n0tZ1VxrLQtP3Kecrs1yjcl/b7/9NmFhYQXSk1wQNm3axKRJkzh+/Lhpz3Mhiov8+h+ntWb5v5f5cFMAiQZNk0oeLBjchHLujlk3MiSBVao5/8HHoVyDB47F0rK7NksPspnVr+COtZXi9H93iYlPsnQ4QgghhBAZvPPOO1SrVo2kpKLxXiUqKoply5ZJcixEFu7GJjD++6O8v8GfRIPmuTZV+XFcy+yT4yv/woLmEH7+XlkxSI5zIgmymTnZ2eDj5UqSQXPy+m1LhyOEEEIIkYGbmxtTpkzJdLXowqh///60aNHC0mEIUSid+e8uvef/w6YTwbjY2/Dl4Ca818MXW+scUsGDX8ON87B3vnkCLSTkYzYLaFTRg4DgO/hdjeCRKiUtHY4QQgghhBCiGFpz5BrvrD1BbIKB2mVdWTi4CdU8XXLXuOdcKNsAWo4v2CALGelBtoBGFd0B8LsWYdlAhBBCCCGEEMVObEIS76w9wes/HSM2wUDfJhVY+2Lr7JPjW5dh67uQvG859q7QZgJYP1x9qg/Xsy0kGlU0brztdzXCsoEIIYQQxYTW2rToihBCFBf3s3Bw4M1oXlh1mJNBd7CzsWJ6r7oMeKRi9v8jkxJh5VNw8yK4loeWLz5A1EWb9CBbQI0yLjjbWRMUEUPY3ThLhyMe0Pjx43n88cfz9ZjLly/HxSXn4S+7du3Cx8enyCyiUhAmTpzIK6+8YukwhBAWZG1tTUJCgqXDEEKIfJeQkJCnxee2+YfQ/YvdnAy6Q6WSTqx5oRUDm1fK+QNEaxvo9hnU6gaNBj1g1EWbJMgWYG2laFDBA5D9kAu7ESNG0KNHD0uHkaVJkyYVqkVULl++jFKKQ4cOme3Yb731FsuXL+fixYv5fk4hRNHg4eFBSEgIhpRhgUIIUQwYDAZCQkJwd3fPsW5ikoFPtpxm9LeHuBObSCdfLza83IZ63tm0jb0DV/fdu1+jIzy7Ghw9Hjz4IkyGWFtIw4oe7L14g2OBEXTy9bJ0OKII+vfffzl9+jTPPPOMpUOxKE9PT5588km+/PJLPvvsM0uHI4SwgNKlS3Pt2jXOnDlj6VCEECJfOTs7U7p06WzrhN6N5ZXVR9l38SbWVoo3O9di7GPVsu81jr4JSzvDneswejuUqZ3PkRdhWmu5pboB2viyFKzNJ4J15bc26sFL9hX4uQoDf39/S4dwX4YPH667d+9uup+YmKjfeOMN7eHhoT08PPSrr76qn3/+ed2uXTtTHYPBoD/55BNdrVo17eDgoOvVq6dXrlyZ5rhvvfWW9vHx0Q4ODrpy5cp60qRJOiYmxvT4smXLtLOzc7axvfTSS/qpp57KUL5x40bdvHlz7eDgoEuWLKl79OhhOvbNmzf1sGHDtIeHh3ZwcNAdOnTQJ0+ezHDebdu26bp162onJyf9+OOP64sXL5rqXL16Vffq1UuXKFFCOzo66lq1aunVq1drrbVO+ftJuaW8LgcOHNCdOnXSpUqV0q6urrp169b633//TRM3oBctWqT79eunnZycdNWqVdO8blkdW2utV6xYob29vbN9vYQoaFn9n0t1XbH4Na6o3sx1bRZCiKJm34Vw3eyDP3XltzbqZh/8qfddCM9dQ4NB659Haj2/hdbh5ws2yEIou2uzDLG2kMaVPAA4FhiBwZD3yffFwjR34y217wcYy85svld2aJmxbH2qeaZ3go1lM2ulbb/oMWP59aP3ynZ8lPE89+nzzz9nyZIlLFq0iL1795KUlMSqVavS1Hn33Xf55ptvWLBgAf7+/kyePJlx48axadMmUx1nZ2eWLl1KQEAACxcu5IcffuDDDz/MUyy7d++mWbNmacq2bNlC79696dSpE4cPH2bHjh20a9fONOxwxIgR7N+/n3Xr1nHgwAGcnJzo0qULMTExpmPExcXx0UcfsXTpUvbu3UtERATPP/+86fEXX3yR6OhoduzYwalTp5gzZw4eHh4AHDhwwBRHcHAwa9asAeDu3bsMHTqU3bt3c+DAARo1akS3bt0IDw9PE//06dPp3bs3x44dY8CAAYwaNYorV65ke2yA5s2bExQUxIULF/L0GgohhBBCFEVaa77adYFBX+8n7G4cj1YryaZX2tCiWqmsGxmSIO6u8XuloNc8GL0NSlU3T9BFhAyxthAvNwfKujnw351YLoZHUqOMq6VDErkwZ84c3nzzTfr37w/A3Llz+eOPP0yPR0VFMWvWLLZu3Urbtm0BqFq1KgcOHGDBggV0794dgPfee8/UpkqVKrzzzjvMnDmTGTNm5DqWK1euUK5cuTRlM2bMoF+/fnzwwQemsgYNGgBw7tw51q9fz65du3jssccAWLlyJZUqVWLVqlWMHj0agMTERBYsWECtWsYPHyZOnMjIkSMxGAxYWVlx5coV+vbtS8OGDU3PL4WnpycApUqVomzZsqby9u3bp4lz3rx5/Prrr2zZsoUhQ4aYyocOHWq6P2PGDObOncvu3bupXLlylscGKF++PGCcp1y9uvyTF0IIIUTxdTc2gdd+PMa2gBAAXni8Om908sHGOpu+z+ib8KvxvR6DfwYra7BzNkO0RY8kyBbUqKIHW079h1/g7YczQZ52O2PZoB8zljUbabyl5lYu8/bj/s5Y9sRk4+0B3b59m+DgYFq2bGkqs7KyokWLFgQGBgLg7+9PbGwsXbp0STPvIyEhgSpVqpju//LLL8yZM4fz588TGRlJUlJSnleijomJwcHBIU3Z0aNHGTFiRKb1AwICsLKyShO/u7s79evXx9/f31Rmb29vSo7BmHwmJCQQERFByZIlefXVV3n++efZsmULHTp04KmnnqJp06bZxhoaGsp7773Hjh07CAkJISkpiZiYGK5evZqmXkoyD2BjY4OnpyehoaE5vhaOjo4AaXrChRBCCCGKm9iEJJ5bcYgDl27i5mDDrP6N6Jib9YzioyDYD7Q27ncsvcZZkiHWFtQoeZi1X+AtywYi8k3KUOYNGzbg5+dnup06dYqtW7cCsG/fPgYOHEjnzp3ZsGEDR48e5YMPPsjzFiWlS5fm1q3c/+4Yp1tkLnUyn34rgZTHUp7bc889x6VLlxg5ciRnz56lVatWTJs2LdtzDx8+nIMHDzJ79mz+/fdf/Pz8qFChAvHx8Wnq2draZjh3blalvXnzJnCvB1sIIYQQoriJTzTwwneHOXDpJmXdHFg/vk3ukmMAj4owcDWM2yXJcQ4kQbagRhU9ANnqqahwd3enXLly7Nt3bzl8rbVpbiyAr68v9vb2XLlyhRo1aqS5Va5cGYB//vkHb29v3nvvPR555BFq1qxpmmebF40bN07T85tStn379kzr+/r6YjAY2Lt3r6nszp07nDhxAl9f3zydu0KFCowdO5affvqJ6dOns3jxYgDs7OwAMvSG79mzh5dffpnu3btTt25dXF1dCQ4OztM5szo2wMmTJ7G1taV+/fp5OqYQQgghRFGQZNC88fMxdpwJo4STLd+Nbk6V0tkMkU5KgM1vw4lf7pVVagEelQo+2CJOhlhbUH1vd6wUnA6+S2xCEg62hWMvW5G1V199lY8++ggfHx/q16/PwoULCQ4ONs0FdnV1ZeLEiUycOBGtNY899hiRkZHs27cPKysrxo4di4+PD0FBQaxatYqWLVvyxx9/sHr16jzH0rlzZ7755ps0ZVOmTKFnz57UqFGDQYMGobVm69atjBs3jpo1a9K7d2/GjRvH4sWL8fDwYMqUKbi5uTFoUO43hH/11Vfp2rUrPj4+3Llzhy1btpgS7DJlyuDo6Mgff/xBlSpVcHBwwN3dHR8fH7777jtatGhBVFQUb775pinhza2sjg3GBcvatm2Lk5NTno4phBBCCFHYaa15b91JNhy7jou9Dd+OapHz9MzTm2D/l3DMHWo+CQ5u5gm2GJAeZAtytrfBx8uVRIPmZFAm82lFofPGG28wcuRIRo8eTYsWLTAYDAwePDhNnRkzZjBt2jRmzpxJ3bp16dSpE7/++qtpMauePXsyadIkJkyYQIMGDfjzzz+ZPn16nmMZMmQIZ8+e5dSpU6aybt26sXbtWjZv3kzjxo1p164dO3bswMrK+Ke+bNkymjdvTq9evWjevDnR0dFs2bLFNIc3NwwGAy+//DK+vr506tQJLy8vVqxYARiHZ3/xxRd8/fXXlC9fnt69ewOwdOlSIiMjadq0KQMHDmTUqFFp5mTnRlbHBli9ejVjxozJ0/GEEEIIIYqCT7ac4fv9V7G3seLr4c2oXyEXu7P49oZWL8OgnyU5ziOV3bzEh5FSyrjhoplel7d/Pc4PBwN5t3sdRretZpZzWkJAQAB16tSxdBjFzttvv01YWFiGnuSHyaZNm5g0aRLHjx/PMH9aCHPK6v9cyjx+rbXK8GAxoJSqALwFNAMaAo5AVa315WzaLALGAqu01kOyqpeqvlmvzUIIUVgs3HmeT7ecwcZKsXhYU9rXzmbOsd9qY2+xczZbPQkg+2uz9CBbmMxDFg/inXfeoVq1anleAbs4iYqKYtmyZZIcC2E5NYD+wC1gd06VlVKtgMHAnQKOSwghirTv9l3h0y1nUAo+798w++T4ny/gt+fhl5GQiwVORdbMniArpSoqpX5RSt1WSt1RSq1RSuVqtrhSqmpy2wilVJRSaodSqlkm9UorpZYqpcKUUjFKqf1Kqc75/2weXENJkMUDcHNzY8qUKVhbP7zz1/v370+LFi0sHYYQD7O/tdZeWutuwM/ZVVRK2QKLgQ8xJtRCCCEysc4viPfWnQTggz716N3IO/sG9foaF+Bq+CxYSR/ogzDrq6eUcgL+AmoDw4GhQE1gh1Iq252qlVKlgD1APWAcMDD5oR1KqTqp6tknn6ML8CbwNBAIbFRKPZ6PTydf+Hi54mRnzbVbMYRHxlk6HCGEECJPtNZ56aqYBFgDnxdQOEIIUeT9dTqEN346htbwVpfaDG5ROfOKNy7c+97dG8YfgkbPmifIYszcHy+MAaoBfbTWv2mt1wG9gMoYk97svAB4AT201j9qrTcAPYBo4P1U9Z4B6gODtNbLtNabk8sCgE/z9dnkA2srRX1v40T7Y8W8F1nmjgkhiiv5/5YzpVR14F3gRa11fE71hRDiYbTv4g1e+O4IiQbN8+2q88LjWexZvO8rmP8IHPvhXpmNvXmCLObMnSD3AvZprc+nFGitLwH/AL2zbGX0KHAuXdsojPOdeiilbFLViwF2paqnga3AI0qpHMYnmF+jSh5A8R5mbWtrS0xMjKXDEEKIAhETE4Otra2lwyjsvgLWaK13WDoQIYQojE5cu83oFYeISzQwqEUl3upSK+vKNvagk+DmJfMF+JAw96o2dYF1mZSfwtjLm50kILNPnOMwrphZHTiTXC9BZ/w4P2X8cj0gKLcBm0OjCh5A8U6Qy5QpQ1BQEN7e3jg6OppWjhNCiKJMa01MTAxBQUF4eWWzeMpDTik1BHgE4xSrvLQbi3G1ayGEKNbOh95l2NL9RMYl0rNheWb0rpfx/bLBcG9+cdMRUK4heDcxe6zFnbkT5JJkvijHTaBEDm3PAJ2UUqW01jcAlFJWQPNUx06p56aUqqO1DkjVvmW6emlY8iKcugfZYNBYWRW/5NHNzbj/2vXr10lISLBwNEIIkX9sbW3x8vIy/Z8TaSmlXIBZwCdArFLKI/khK8A2+X6U1jrDxUFrvRhYnLLNkxBCFEeBN6MZ8vUBbkUn0L52GWb1b4h1+nzg7FbYNhWGrQOXMqCUJMcFxBL7omR2kctNRvgV8ArwrVLqFYxzj6cAVZMfT1kk5HtgGrBCKfUcEIwx8X0sXb20QVnwIlzO3REvN3tC7sRx6UYU1T1dzB2CWbi5uckbSCGEePiUBjyB/yXfUquIcYuop4DfzBuWEEJYXujdWIZ8s5//7sTSvGpJFg5ugq11ulmwWsM/cyDUHw5+A09MtkisDwtzz0G+ReY9uCXIYbsHrfVFjPsmNgXOA9cx9grPTq4SnFwvAuiL8YJ8HAgDRmFMmk31ChvTfshXIywahxBCCJHP/gOeyOQWAmxL/n6PxaITQggLuR2dwLBvDnDlRjT1vd35ZngzHGwz2bpTKei3FJ78ANq9Zf5AHzLmTpBPYZyHnJ4v4J9TY631r4B3cv0aWuumgAsQqLW+mqreboxzkn2AOslfEzAu3nXkAZ9DgZD9kIUQQhRVSql+Sql+GD/EBuiaXNZOax2rtd6Z/gbEAiHJ98MtFrwQQlhAVFwiI5Yf4PR/d6nu6cyKUc1xdUi12GPoadj12b37rmWh1cuyx7EZmHuI9XpgplKqWnKPMEqpKkBr4O3cHEBrnYRxyyaUUuWBAcBnmdTTwLnkei4Yt5haqbWOfPCnkf8aSYIshBCi6Po53f2FyV93AY+bNxQhhCjc4hKTGLfyMEevRuDt4ch3o1tQ0tkuVYVIWN4Nom9AqepQ72nLBfsQMneCvAQYD6xTSr2LcT7yDCAQWJRSSSlVGbgATNdaT08us8W4j/Eu4A7GnujJGHulP099EqXUR8BhIByoAUzC2INcaAfsN6jggVIQEHyH2ISkzIdXCCGEEIWQ1jrPq0tqrasUQChCCFGoJSYZeGX1UfacD6e0iz3fjW5BOXfHtJXsXaDTdLiwA3w6WybQh5hZ++iT9y1uD5wFVgKrgEtA+3Q9uwqwThefBmpiTKQ3AxOApUBnrXX67Z+8gDkY9z6elvy1tdb6Zr4+oXzkYm+DTxlXEg2aU9fvWDocIYQQQgghRD4yGDRvrznBH6dCcHOwYeVzzala2tn4YNQNCD5+r3LjIdD3a7BztkywDzGzr2KdPFe4bw51LpNuZWutdSLQI5fnGHW/8VlSw4runAm5i19gBE0r57TrlRBCCCGEEKIo0FozY5M/vxy+hqOtNctGNqdOueTdXSKuwrLukBQH4/42zjcG4+Jcwuxklnch0qiiMSmWechCCCGEEEIUH3O3n2PZP5exs7Zi8bCmaTvDXMtDicrgXgF0pjvSCjOyxD7IIgspC3UdkwRZCCGEEEKIYmHpnkvM2XYOKwVfPNuItjU9ITEe0GBjD9Y20P9b43BqG3tLh/vQkx7kQsTHywVHW2uu3ozmRmScpcMRQgghhBBCPICfDwUyfaNxN9tP+jagS71ycPc/WNETNr0OWhsrOpWU5LiQkAS5ELGxtqK+tzsAx65FWDYYIYQQQgghxH3bcjKYt341Lrz1fz18eaZZReMDUWEQfAzO/wVRsg18YSMJciHTqJIHAH5XIywahxBCCCGEEOL+7DkXziur/TBoeLVDTUa1qXrvwbL1YeB3MG4XuHhaLkiRKUmQC5mUech+125bNhAhhBBCCCFEnh2+couxKw8Rn2RgZOsqTGhXAdaNh0u771Wq0RFcylguSJElSZALmdQLdemUOQlCCCGEEEKIQi8g+A4jlx0gOj6Jfk0r8F53X9SRb+HoSlj3IiQlWDpEkQNZxbqQKefugKerPWF347gUHkU1TxdLhySEEEIIIYTIweXwKIZ+c4A7sYl0ruvFx0/Xx8pKwSOjIeQktBgH1raWDlPkQHqQCxml1L1h1rLdkxBCCCGEEIVe8O0YBn+9n/DIONpUL8X82iexSYo1PmhtA73nG+cei0JPEuRCSPZDFkIIIYQQomi4ERnHkK/3ExQRQ+NKHiytsAHbTa/CxtcsHZq4DzLEuhBqLD3IQgghhBBCFHp3YxMYsewgF8KiqF3WleUjmmN3twT4/wq+vSwdnrgPkiAXQvUruKMU+AffITYhCQdba0uHJIQQQgghhEglNiGJ51Yc4kTQbVqUuMu85zrg7mQLTr7wih/YOlg6RHEfZIh1IeTqYEsNTxcSkjT+wXcsHY4QQgghhBAilYjoeJ7/7jAHLt3kHef1/BD3EmVC996rIMlxkSUJciFlWqjraoRF4xBCCCGEEEIYGQyanw4G0v7zXew8E0YJJ1v6NfZCaQOEn7V0eCIfyBDrQqpRJQ9+PnyNY9ciLB2KEEIIIYQQD71T12/z3m8nOXI1AoWBR6uV5sOn6lOyVAdo3Bu8m1o6RJEPJEEupBpW8ABkoS4hhBBCCCEs6XZMArP/PMu3ey9j0DDI+SAT3bZTYvjvKHsXYyVJjosNGWJdSNUu64qDrRVXbkRzMyre0uEIIYQQQgjxUNFas+bINTp8vovl/15GKcXolhWY4bGRkreOo47/aOkQRQGQHuRCysbaivre7hy8fItjgRE8UbuMpUMSQgghhBDioXD6vzv832+nOHD5JgDNKpdgeu96+JZ3g7Dv4dIuaPachaMUBUES5EKsUUUPDl6+hZ8kyEIIIYQQQhS4u7EJzN12jmX/XibJoCnlbMenrRJ5wuUkVuVbGSt5+hhvoliSBLkQa5iykrXMQxZCCCGEEKLAaK3ZcDyYDzb6E3o3DisFw1pWZmJLd9wWPwKJsVC2HlRuZelQRQGTBLkQS9nq6di1CLTWKKUsG5AQQgghhBDFzPnQu/zfulP8e+EGYHwP/kGfetTzdjdWaPs63A0G72YWjFKYiyTIhZi3hyOlXewJj4zj8o1oqpZ2tnRIQgghhBBCFAtRcYl88dc5vtl9iUSDxsPJlre71Ka/jzVWSeFAcoL82CSQjqqHhiTIhZhSikYVPdgWEMKxwAhJkIUQQgghhHhAWmu2nPyP6Rv9Cb4di1LwbPOKvNm5NiUiz8GSPuDoAWP+AntXSY4fMpIgF3KNKrqzLSAEv8AI+jT2tnQ4QgghhBBCFFmXwqP4v3Un2X0uHIB63m7M6F2PxpVKGCvYVAanUuDiCUkJFoxUWIokyIVco4rGP9ajslCXEEIIIYQQ9yUmPomFO8+zaNdF4pMMuDnYMKlLbQY1r4R1UiwYDGBlBfYuMGydMUm2llTpYSQ/9UKuQUV3lIKA63eIS0zC3sba0iEJIYQQQghRZPzpH8L7G05x7VYMAP2aVuDtrrUp7WIPty7Dj0OgVjd44h1jA1cvywUrLE4S5ELOzcGW6p4unA+NJCD4rmllayGEEEIIIUTWrt6I5v0Np9h+OhSA2mVd+aBPPZpVKXmv0s1LEHIK4qOh9QSwc7JMsKLQkAS5CGhYwYPzoZH4Xb0lCbIQQgghhBDZiE1IYtGuiyzceZ64RAMu9ja83smHYS0rY2NtlbZy9SfgmRVQ9TFJjgUgCXKR0KiSB78euYafzEMWQgghhBAiSzvOhDJt/Smu3IgGoE+j8rzTrQ5l3ByMFWLvwO8Toc1rUKaOscy3l4WiFYWRJMhFQOPkXmNJkIUQQgghhMjo2q1opm/wZ6t/CAA1y7gwvXc9WlYvlbbinllw/EcIP2fcxkm2cBLpSIJcBNQq64q9jRWXb0QTER2Ph5OdpUMSQgghhBDC4uISk/h69yXm/XWO2AQDTnbWTOhYk5Gtq2Kbfjg1wGNvQkSgcUEuSY5FJiRBLgJsra2o5+3O4Su38AuM4PFaZSwdkhBCCCGEEBZ16PJN3vr1OBfCogDo3qAc73avQzl3x3uVDEng9z00GgRW1sZ5xv2+sVDEoiiQBLmIaFTRQxJkIYQQQgjx0IuMS+TTLadZue8KWkO10s6837subWt6Zqz824tw/Ae4eRE6TjV/sKLIkQS5iGgk85CFEEIIIcRDbsfpUKasPcH127HYWCnGPV6Nl9vXxMHWOvMGjQfDxR1Q7XGzximKLkmQi4iUBPlYYARaa5TMmRBCCFEIKKUqAG8BzYCGgCNQVWt9OVWdDsBIoCVQHrgObAWmaq1DzR2zEKLouRkVz/QNp/jN7zoA9b3d+aRvA3zLu2WsHBEIHhWN31d9DF7xky2cRK5lMnNdFEYVSjhSytmOW9EJXL0ZbelwhBBCiBQ1gP7ALWB3FnWeB0oBHwBdgI+AXsA+pZSLOYIUQhRNWmvW+QXRcdYufvO7jr2NFZO71mbti60yJscGA2x+G+Y/Av+duFcuybHIA+lBLiKUUjSq6MH206H4BUZQuZSzpUMSQgghAP7WWnsBKKVGA09mUudFrXVYqvu7lFJngV0Yk+ulBR+mEKKouR4Rw7u/neSv08aBJo9WK8nHTzegSuks3gcrBXF3wJAIoQFQtr4ZoxXFhSTIRUhKgnz0agS9G3lbOhwhhBACrbUhF3XCMik+mPxVLmhCiDQMBs2qA1f5ZPNpIuMScXWw4Z1udRj4SMXMpxlqbUyOlYLus6D5GCjf2PyBi2JBEuQipGHKPORrERaNQwghhMgH7ZK/Blg0CiFEoXIhLJLJv57gwOWbADzp68WMPvXwcnPIvMGhZXB6Izz7I1jbgK2DJMfigUiCXISkJMinrt8hPtGAnY1MIRdCCFH0KKVcgTkYk+Pfsqk3FhhrnqiEEJaUkGRg8d8Xmbv9HPGJBkq72DO9d1261iub9eK0MRGw438QFQpnN0OdnmaNWRRPkiAXIe6OtlTzdOZiWBQBwXdMCbMQQghRVCilbIDVGIdWt9ZaJ2ZVV2u9GFislNLmik8IYX4nrt3mzV+PExB8B4B+TSvwbvc6eDjZZd/Q0QP6fwu3LktyLPKNJMhFTKOKHlwMi8IvMEISZCGEEEWKUsoKWAF0BLprrY9bOCQhhAXFxCcxZ9tZvt5ziSSDpkIJRz56uj5ta3pm3ejS3xAZCvX7Ge9Xbmm8CZFPzD5GVylVUSn1i1LqtlLqjlJqjVKqUi7bVk1uG6GUilJK7VBKNcukXiml1Fyl1EWlVIxS6pJSar5SKpu/tqIhZT9kv8AIi8YhhBBC3IevgAHAQK31dksHI4SwnL0XbtB17t8s+vsiBq15rk1Vtr72WPbJcWgAfNsHfnsRQk+bLVbxcDFrD7JSygn4C4gDhgMa456IO5RSDbTWUdm0LQXsAe4C44Bo4PXkts211gHJ9RSwHvAB/g/j/CZfYAbQVCnVSmtdZIdqpSTIxyRBFkIIUYQopT4HRgPDtda/WTgcIYSF3IlN4KPfT7P6wFUAanm58nHf+jSuVCLnxmXqQJOh4FgCStcs4EjFw8rcQ6zHANWAWlrr8wBKqePAOYxJ76xs2r4AeAHtUrX9C7gIvI9xH0WAmkArYFzy3CWAnUopA/AlxsT5TH4+KXOqXdYNOxsrLoZHcTs6AXcnW0uHJIQQ4iGnlEoe60jT5K9dlVJhQJjWepdS6i2MH2ovBc4ppR5N1TxMa33BjOEKISxk66n/eG/dSULuxGFrrRj/RE1eeLx69gvP3rwIts7g6mW832OOcTsnIQqIuRPkXsC+lAQXQGt9SSn1D9Cb7BPkR4Fz6dpGKaV2Az2UUjbJC32kzOa/k659RPLXIr30s52NFfXKu3HkagR+1yJo51PkR40LIYQo+n5Od39h8tddwONA1+T7o5Jvqa0ARhRUYEIIywu7G8e0DafYdDwYgMaVPPikbwN8vFyzb3hlL6weAGV8YfgGsLaV5FgUOHMnyHWBdZmUnwKeyaFtEhCfSXkc4AhUx9gzfAr4G3hPKXUeOI1xiPX/AZtThmIXZQ0rehgT5KuSIAshhLA8rXW271i11o+bKRQhRCGitebXI0HM2OjP7ZgEnOysmdS5FsNaVsHaKheJbslqYOsEjiUhMc6YIAtRwMydIJcEbmVSfhPIaeLBGaCTUqqU1voGmFbDbJ7q2GittVKqG7ASOJiq/SayScKL0l6LpnnI1yIsGocQQgghhBCZCbwZzTtrT7D7XDgAj/l48r+n6lGhhFP2DRNiwNbR+L2rF4zeBq7lwapIDwIVRYglftMyWyArN2MlvsIY77dKqepKqXLAF0DV5McNqeouwTgk+3mgXfLXZsAvyUl1xqC0Xqy1zrAidmHUuKLxswS/wAiK8HpjQgghhBCimEkyaJbuuUTnOX+z+1w4Hk62zOrfkBUjH8k5OQ4NgC9bw+Hl98rcK0hyLMzK3D3It0ju6U2nBJn3LJtorS8qpQYDC4CUechHgNnARCAYQCnVHXgW6JhqC4m/lVIXga1ATzIf5l1kVCzpSElnO25GxRN4M4ZKpXL4ZyOEEEIIIUQBOxtylzd/OW7ajrRHg3JM61WX0i72uTtA8DG4eQEOr4DGQ8HKuuCCFSIL5k6QT2Gch5yeL+CfU2Ot9a9Kqd8wrkQdr7W+oJT6EgjUWl9NrlY/+evBdM0PJH+tQxFPkJVSNKzgzo4zYRwNvCUJshBCCCGEsJj4RAMLd55nwY7zJCRpyro5MKNPPTr5euXtQA0HGr/W6SnJsbCYPI1XUEr9o5QaqpTK5cdAGawHHlVKVUt1zCpA6+THcqS1TtJaByQnx+WBARi3b0rxX/LX5umatkj+GnQ/gRc2jZKHWR8LvG3hSIQQQgghxMMqMi6Rod/sZ862cyQkaQa3qMTW1x/LXXIcdQN+eQ7uXL9X1nAg2DkXXMBC5CCvA/oTMG7HcF0pNUspVTuP7ZcAl4F1SqneSqleGHtzA4FFKZWUUpWVUolKqf9LVWarlJqtlOqjlGqvlHoZOISxV/rzVOdYA1zHOFf5BaXUE0qpF4Bvk8+zNo8xF0pNKxsT5M0ng4mOT7RwNEIIIYQQ4mFzOyaBod/sZ/+lm3i52fPD2Ef58Kn6uDnkcrXprVPg5C+w6Y2CDVSIPMhTgpy8TUMdjEnyMOCUUmqnUmqAUirHvwStdRTQHjiLcZXpVcAloL3WOjJVVQVYp4tPAzUxJtKbgQnAUqCz1tq0/ZPW+g7GBbo2A2+m+roBaJnuPEVWy+qlqFvejeDbsXy184KlwxFCCCGEEA+Rm1HxDFqyj6NXI/D2cOSncS15tFqpvB3kyQ+gTi/oNrNgghTiPqj7XQU5eZh1f4xbI7UCwoFlwGKt9cV8i9DMlFIaKBKrQx+6fJN+X+3FzsaK7a+3o2JJmYsshBCFjVLGjRpy2ivYEpRSNYF3gZaAN8ZpSP8CH2itz2fX1pyK0rVZiIdB6J1YBn+9n3OhkVQt7cyq0S0o7+GYc8PEeDi1Fhr0B1Xo/iWKh0h21+b7XjNdax2ntV4JvArsBjwx9tSeVUr9rJQqe7/HFrnTrEpJ+jQqT3yigQ83BVg6HCGEEEWIUupx4BjQA9gHLEz+2hM4oZRqZ7HghBCFVlBEDP0X7eVcaCQ+Xi78OO7R3CXHWsPqAbB2LBz8uuADFeI+3VeCrJRyVEqNUkodwLhatCfGRLk88ALGHuVV+RalyNLbXevgZGfNllP/sSd5I3YhhBAiFz4HjgKVtdbDtNaTtNbDgCqAH2nX9xBCCK7ciKL/V3u5fCOauuXd+GFsS8q4OuSusVLQaDC4eUP5JgUbqBAPIE9DrJVS9YFxwGDAGeMCWwu11jvS1esJ/Ky1zuVfTOFRFIdxLdhxns/+OEPNMi78/mpbbK1lM3UhhCgsCusQa6VUDDBAa51hFwmlVB9gtdY6F91CBa8oXpuFKG7Oh0Yy+Ot9hNyJo3ElD5aPbI67Yw5LEGkNd4PBrfy9svgoWaVaWFx+DrE+BvQB5mD8xPmZ9MlxsvPA3jweW9yn59pUpXIpJ86FRvLdviuWDkcIIUTRcA2wy+IxO4rJtohCiAfnf/0OAxbtJeROHI9WK8nK51rknBwnxsFvL8JXbSAi8F65JMeikMtrgvwMxsT4fa11cFaVkvcpfuLBQhO55WBrzbvdfQGY9edZbkTGWTgiIYQQRcAnwPtKKe/Uhcn3pwL/s0hUQohCxS8wgmeX7ONGVDyP+XiybERzXOxtcm5oZQOR/0F8NISdLvhAhcgneR1ibQvYJW/XlP4xZyBea52Qj/GZXVEdxqW1Zviyg/x9Noxnm1fko6cbWDokIYQQFOoh1iuBdkAZjItzhQBeGLdKDAF2paqutdbDzR5ksqJ6bRaiqDtw6Sajlh8kMi6RTr5ezB/UGHsb6+wbaX1vherom3DnOpStV/DBCpEH2V2b85ogrwBstdaDMnnsO4wJ8qj7D9XyivJF+HxoJF3m/E2S1mwY34Z63u6WDkkIIR56hThBvpSH6lprXa3AgslBUb42C1FU7TkXzphvDxGTkETPhuWZ1b9h9uvcaA3/zIXQAHjqK9nGSRRq+TkH+QmMC3NlZj3QIY/HE/moRhkXRrSqgtYwdf0peSMhhBAiS1rrqnm4WSw5FkKY31+nQxi14iAxCUk807QCcwY0ynkR2NvXYNencPwHCDxgnkCFKAB5TZDLAKFZPBaGcWiWsKBXOtaktIsdh6/cYp3fdUuHI4QQQgghipDfTwQz9tvDxCcaGNayMp/0bYC1VS56gz0qwtOLYOD3UKlFwQcqRAHJa4IcCtTP4rH6wI0HC0c8KDcHW97sUhuAjzYHEBWXaOGIhBBCFEZKqUo53SwdoxDCvNYcucb474+QaNCMe6wa7/eqi1V2yfGZzXDhr3v36/SE2t0LPlAhClBeE+SNwHtKqTQrQCXvjzwF2JBfgYn7169JBRpWcCfkThwLdpy3dDhCCCEKp8vApRxuQoiHxPf7r/LGz8cwaHi1Q03e7lrbNE8zU5f+htUD4eeRcPc/8wUqRAHL6yJdpTHub1wFOIhxD0VvoDnGC2krrXV4/odpPsVlIZAjV2/x9MJ/sbO2Yutrj1GltOw5J4QQllCIF+kaAaS/2JUCugPVgBla66XmjiszxeXaLERh9c2eS8zY6A/A211r83y76jk3Mhjgx8FQsTm0niCLcokiJd9WsU4+mAfwOtAJ44U0HNgKzNZa337AWC2uOF2E3/jpGL8euUbHOl58PbyZpcMRQoiHUmFNkLOTvAXUFa31u5aOBYrXtVmIwmbBjvN89scZAN7vVZfhrapkXTk0ANwrgr2L8b7BAFZ5HZAqhOXla4Jc3BWni3DonViemLmTqPgklo98hMdrlbF0SEII8dApoglyZ2CZ1rq8pWOB4nVtFqKw0Frz+dazzN9xHqXgk6cb0P+Rilk3OLMFfhkJNTvBMyukx1gUafm5zZMoQsq4OfBKh5oATN/oT3yiwcIRCSGEKCLKAA6WDkIIUTC01szYGMD8HeextlLMGdAo++QYoFR1sLIBG0dISjBPoEJYwP0MsR4OPAtUIuPFU2utczFpofAqbp9Sxyca6DLnby6GR/Fu9zqMbitbWQohhDkV1h5kpdRjmRTbAfWAycA+rXVv80aVueJ2bRbCkgwGzbvrTvL9/qvYWivmPduELvXKZl45IRZsU73dv3kJSlSR3mNR5OXbEGul1HvA+8DJ5Ftc+jpa65H3G2hhUBwvwjtOhzJy+UFc7G34a2I7yrhKp4AQQphLIU6QDWRcpCslxl3AYK31dfNGlbnieG0WwhISkwy8+ctx1hwNwt7Giq+GNuWJrKbgBR2Gn4ZD98/Bp7N5AxWigGV3bbbJ47GeA+ZqrV/Lh7iEmTxRuwzta5fhr9OhfLblDJ8909DSIQkhhLC8JzIpi8W4OJfs2SJEMROfaOC1H/3YdCIYJztrvh7ejFbVS2fd4OJOuB0IB7+WBFk8VPLag3wX6K21/ivHykVUcf2U+lJ4FE/O3kVCkua3l1rTqKKHpUMSQoiHQmHtQS5Kiuu1WQhziU1I4qVVR9h+OhRXexuWj3qEppVLZt/IYIAjy6HRELCxM0ucQphLfi7StQuQ7sciqGppZ0a1qQrAtPWnMBjkTYYQQgghRHEXHZ/I6BWH2H46FA8nW74f82jmyfGd67BmLMQm79pqZQXNRklyLB46eR1iPQFYo5S6AfwO3ExfQWstSyUXUi+3r8maI0H4BUaw5mgQ/ZpWsHRIQgghzEgpdYmM846zpLWWlR2FKMLuxiYwavlBDl6+RWkXe1aNbkGtsq6ZV/7tRbi4A2ydoOccs8YpRGGS1x7ksxhXt1wGhAAJ6W7x+RqdyFcu9jZM7lobgE+2nOZurCzRL4QQD5ld6W42gDdwGdif/NUbsAZ2WiJAIUT+iIiOZ8jX+zl4+RZl3Rz4cdyjWSfHAD1mQZ2e0P5d8wUpRCGU1znI08jhk2et9fsPGJNFFfd5TgaDpu9X/3L0agTjHqvG5G51LB2SEEIUa4V1DrJSaizGkWFPaq2vpSqvCPwBzNZaL7FQeGkU92uzEPktPDKOIV/v5/R/d6lY0pHvRz9KxZJOaSvFR8P5P8G3UOzmJoRZ5ds2Tw+Dh+EifCwwgj4L/8HGSvHHhMeo5uli6ZCEEKLYKsQJ8jngHa31z5k81h/4n9a6hvkjy+hhuDYLkV9C7sQyaMk+LoRFUa20M6vGtKCcu2PaSkkJ8HVHCPaDAaugTg+LxCqEpeTnIl2pD+qilKqslLJ9gNiEBTSs6EH/phVJSNLM2Ohv6XCEEEJYRgWM2zplJg7jUGshRBFy7VY0/Rft5UJYFLXLuvLjuJYZk2MAa1uo9zSUrGa8CSFM8pwgK6V6KKWOALeBi0D95PKvlVKD8jk+UUAmdamFq70NO86E8dfpEEuHI4QQwvz8gUlKKYfUhUopR2BS8uNCiCLixLXb9P9qL1duRFPf253VYx7F09X+XgWt4W6q93ytXoFxu8HL1/zBClGI5SlBVkr1AdYB4cBbQOou6UvA8HyLTBSo0i72vNqxJgDTN/gTl5hk4YiEEEKY2ZtAc+CqUmq5UuoTpdRy4ArwCMYkWQhRyMUmJPHpltP0WfgP12/H0rRyCVaNaUEJ51TbM8XdhR+HwNLOEHPLWKYU2Ms0OyHSy2sP8lRgmdb6SWBOusdOYlzhWhQRw1tVoUYZFy7fiGbZP5ctHY4QQggz0lpvBxoDfwJtgZeTv24FGmqt/7JgeEKIXDh85Rbdv9jNwp0XMGjNc22q8t1zLXBzSDcD0soGIq5A9E0IP2eZYIUoIvK6inUs0FNr/adSyhrj1k7NtNZHlFKPAVu11g7ZH6Vwe9gWAvn7bBjDlh7A2c6avyY+jpdbkf7xCSFEoVNYF+nKL0qpChhHlTUDGgKOQFWt9eV09UoAnwF9kuvsBV7TWp/IxTkeqmuzEDmJiU9i5tYzLP3nElpDdU9nPu3XkKaVS6StqLWxpxjg1hUwJEKp6uYPWIhCJj8X6boDlM7isSpAWB6PJyzsMR9POvl6ERWfxCebT1s6HCGEEGamlLJSStVTSrVTSjnfxyFqAP2BW8DuLM6hgPVAF4w91X0BW2BHcoIthMilvRdu0GXu33yz5xJWSvHi49XZ9ErbtMmxIQm2vQ/bpt0rK1FZkmMhciGvCfKfwGSllEeqMq2UsgfGA5vzKzBhPu9198XOxoo1R4M4fOWWpcMRQghhJkqpl4D/gOPAX0Ct5PLflFKv5PIwf2utvbTW3YAMW0Yl6wW0AYZqrVdrrbckl1lhnAsthMhBZFwi7/52gmeX7OPKjWhql3Xltxdb82aX2jjYWqetHHIS/pkL/86DGxcsE7AQRVReE+QpQFngDPA1oIG3AT+M20VMy8fYhJlUKuXEmLZVAZi2/hQGgwxhE0KI4k4pNQaYC/yGsQc49TCz3Rh7eXOktTbkolov4LrWekeqdreBDUDvXIYsxENr19kwOs/+m+/2XcXGSjGhY03Wj29D/QrumTco1xB6zIKha6XXWIg8ylOCnDyfqAmwEegEJAGPAfuAFlrr6/kdoDCPFx+vQVk3B04E3ebnw4GWDkcIIUTBex34XGs9Flib7rHTJPcm55O6GBfzTO8UUEkpJUvpCpGJ29EJTPr5GMOXHiAoIob63u5seLkNEzr6YGeT7m388Z8g+Ni9+01HQLV2Zo1XiOIgz/sga62vaa2f01pX0Frbaa3Laa1Haq0lqyrCnO1tmNytNgCfbjnD7ZgEC0ckhBCigFUF/sjisSjAIx/PVRLjHOX0biZ/LZHJYyilxiqlDuVjHEIUGX/6h9Bp9i5+PnwNOxsr3upSm7UvtqJOObeMlU+ugTVjjFs5xUWaP1ghipE8J8ii+OrVsDyPVCnBjah4vtguWwAIIUQxF45xgc3M1AKC8vFcCuO0rMzKs6S1Xqy1bpaPcQhR6N2MiufVH44y5ttDhN6No0klD35/pS0vPF4dG+ss3rrX6gYVH4U2r4Hd/ay1J4RIYZNTBaXUUmCG1vpS8vfZ0Vrr5/InNGFuSimm9qxLz/l7WPHvZZ5tXpEaZVwtHZYQQoiCsQH4P6XUTuBKcplWSpUGXsM4Nzm/3MTYi5xeSs+xrBApHnpaa34/8R//t+4kN6LicbC14s3OtRneqgrWVpl8lvTfCfCsDda2YOsAIzeDlfR9CfGgckyQgScwLuIB0J7MPwFOIas7FXH1vN15tnklvt9/lfc3+PPtqOamfcLyQ0KSgVvR8dyKSuBWdDwR0fHULutGldLyaacQQpjZuxiv6yeB/Riv4V8AtYFQYHo+nusU8GQm5b7AVa21jAkVD7XQu7H832+n2HLqPwAerVaST/o2oHKpLN4fHfsR1r0EzcdAl4+MZZIcC5EvckyQtdZVU31fpUCjEYXCxCdrsfHYdXafC+dP/xCerFs203pxiUmmRPdWVDy3ohO4GR1PRFS88Wt0AjejjEmwsTyBu3GJGY7j4WTL9tfbUcrFvqCfmhBCiGRa6xtKqWbABKAzcAHj+4L5wGyt9Z18PN16YKRSqp3WeheAUsoN6Al8n4/nEaJI0Vqz9mgQ72/w53ZMAi7Ja8I8+0glrDLrNU5RorLxqyEJtIZ87MwQ4mGntJZO39SUUhqM/7AeZsv/ucS0Df54ezjSydeLW9HxycnuvaQ3Kj4pz8e1tlKUcLLFw8mOkk52hN6N5fKNaPo3q8Cn/RoWwDMRQgjLShmFo7Uutu9glVL9kr/tADwPvAiEAWFa611KKStgD1ARmIRxSPVkoAHQMKeFPuXaLIqj4NsxvLPmBDvOhAHwmI8nHz1dH28Px8wbJMaDjd29+zcuyBZOQtyn7K7NeUqQlVIjgcpa62mZPDYNuKS1XnG/gRYGchE2Skwy0O2L3ZwNyXrUm42VMia6zraUcLIz3pztKOFkS0lnO9NjKclwCWc7XO1t0nwiejEski5zdhOfZODXF1rStHJmU9SEEKLoKuwJcvKc40eBUsAGrfVNpZQDEJ/LPY5N185M7NJaP55cpyQwE+gDOAB7gde11seyaJvh+A/7tVkUD1prfjgYyP82BXA3LhE3Bxve6+FLv6YVsp7WdulvWPs8DFgJ3k3NG7AQxVB+Jsh+wDda63mZPPYiMEZr3fi+Iy0E5CJ8z6XwKNb7XcfFwYYSTrbJya8x2fVwtsXV3iZf5ifP/OMM83ecx7ecG+vHt856hUYhhCiCCmuCrIyBfQq8DNhhnIP8iNb6iFLqD2CP1nqGJWNMIddmUVwE3ozm7TXH+ef8DQA61vHiw6fq4eXmkH3DTRPh4BJoNBj6LDRDpEIUb/mZIEcCvbTWf2Xy2BPAOq11JpuzFR1yETa/mPgkOs7aRVBEDNN6+jKiddWcGwkhRBFRiBPkd4D3gBnAnxgX6mqWnCCPB4ZqrVtYMsYUcm0WRZ3BoPl272U+2XKGmIQkSjjZ8n7vevRsUC53nQ2J8XBkBTQbBVbWBR+wEMVcdtfmvHbVJQKls3jMM5fBVFRK/aKUuq2UuqOUWqOUqpTLtlWT20YopaKUUjuSFxhJXWeEUkpnc8t8xSlhMY521kzt6QvA51vPEnY3zsIRCSHEQ2E0MF1r/T/gSLrHzgMyuVGIfHAxLJIBi/cybYM/MQlJ9GhQjj9fb0evhuWzTo5vXIB1442JMRjnHjcfI8mxEGaQ1wT5AMbFNzLzPHAwu8ZKKSfgL4xbSAwHhgI1gR1KqWz3+VFKlcK4wEc9YBwwMPmhHUqpOqmqbgJapru1Am4AB7XW/2V3HmEZnXy9aF+7DHfjEvno9wBLhyOEEA8Db2BfFo/FA7L/nhAPIMmgWfz3BbrO3c3By7co7WLPV0OaMn9QE0pnt3OHwQA/DoWjK2HPbPMFLIQAcrcPcmofAtuUUvuBr4EgjBfY0UAToFMO7ccA1YBaWuvzAEqp48A5jEnvrGzavgB4Ae1Stf0LuAi8D/QH0FqHYVw500Qp1Rbj4iNTc/tEhXkppZja05c958NZczSIAY9UpEW1UpYOSwghirMgjB8678jksYbAJfOGI0TxcTbkLpN+Oc6xwAgA+japwHs96uDhZJd9QzDuZ9xrHuydB4++ULCBCiEyyPM2T0qp3sAcoHKq4svABK31+hzabgcctNat05XvAtBat8um7Uaguta6TrryX4BugJvWOuMmu8Y6X2PsrS6vtb6RQ4wyz8mC5mw7y5xt56jl5crGV9pgWwQW7Dr93x0uhkXRzscTZ/u8fuYkhCjuCvEc5E+AURhXld4HJABNgSiMo70Wa62nWyzAVOTaLIqKJIPmy53nmbv9HAlJmnLuDvzvqfo8UbtM9g1jb0PgQajZ0TyBCvGQy+7anOd381rrdcA6pVQtjL2y4Vrrs7lsXhdYl0n5KeCZHNomYRzylV4c4IhxrtSZ9A8qpRyTj70xp+RYWN7z7aqz5kgQZ0LusuLfy4xuW83SIWXrQlgk/b7cS2RcIo621nSpV5anm3jTqnpprK0K1XthIYRIbxrGKUh/A1eSy37GuFfxv8DHlglLiKLpdnQCr/54lJ3J+xo/27wSk7vVxs3BNvuGsXdgSXu4dQVG/g4Vm5shWiFEVu67e05rfUZr/W8ekmOAksCtTMpvAiVyaHsGqJk8FxkApZQVkPJfJKsNdPsAbkC2+zMrpcYqpQ7lEIMoYA621rzfqy4As/88S8idWAtHlLXo+ERe+O4wkXGJeLraE5OQxNqjQQz95gCtPt7O/34P4PR/dywdphBCZEprHQM8DozAmBBvw7iWyFigk9Y6sw+lhRCZOPPfXXot2MPOM2GUcLJlxajmfPR0/ZyTYwAHN6jRETxrg3Ou1rwVQhSgHIdYK6WGAZu01jeSv8+W1vrbbI4VD3yutZ6crvxD4C2tdZY92kqpaoA/sB14BYgGpmBcHMwaeFRrvT+Tdlswzo8un9UQ7HT1ZRhXITD220Ns9Q+hZ8PyzHu28G2trbVmwo9+rPO7TjVPZ9aPb0P43TjWHg1i7dEgrt6MNtWtU86Npxt707tRecrktM+hEKLYKaxDrIsSuTaLwuz3E8FM/PkY0fFJ+JZzY9HQplQs6ZR9o6REiLsDTsn9O0kJxptdDu2EEPnigfZBVkoZMCafB5K/z47WWme5/rxSKgT4TWs9Ll35QuAZrXW2H5sppfoCCzAu1gXGbSn+AiYClbXWV9PVLwcEAvO01q/lEHtKG7kIFwLXbkXTcdYuYhMMrBrdgtY1stpdzDJW7r3Me+tO4WRnzbqXWlPTy9X0mNaaw1duseZoEBuPXedOrPFzGSsFbWp68nRjb56s64WTncxXFuJhUNgTZKVUDYyjsbyBaxh3fDhv2ajSkmuzKIySDJqZW8/w5c4LAPRpVJ6Pnm6Ao10OWzFF34SfR0B8lHFItU02K1oLIQrEgybIlYHrWuuE5O+zpbW+ktVjyatO22mt26Qr35kcS5aLdKWqaw34APFa6wtKqS+B7lrrDHspK6UmAZ8CjbXWfjkdO7mNXIQLiQU7zvPZH2eo7unM5lcfw86mcCzY5RcYwTNf/UtCkmbuwEb0buSdZd24xCT+CghlzdEgdp4JJSHJ+HvlbGdNl3rl6NvEm0erlcJK5isLUWwV1gRZKeUALMS4iGXqd/RJGKclvaS1LhQb08u1WRQ2EdHxvPKDH3+fDcPaSvFOtzqMal0l632NU4u6AYsfh8QYGL4RytQu8HiFEGk9aIK8BnhTa30+9XDr+wxkAjAT8NFaX0wuq4Jxm6e3tdaf5/F45YGTwGda648yefwEYNBaN8zDMeUiXEjEJSbRdc5uLoZH8VaX2rzweHVLh8TNqHh6fLGb67djGdGqCtOS50vntu3G49dZcyQIv+RtHwDKuTvQu5E3TzfxxidVT7QQongoxAnyfIzbL74P/ACEYByh9Szwf8AirfUrlovwHrk2i8Lk9H93GPvtYa7ejKaksx3zBzWmVfU8jnQLOQUOHuCe9YfsQoiC86AJchLQMnmIten7+wzEGTgGxADvAhqYAbgCDbTWkcn1KgMXgOkpW0wopWwx9gbvAu5gXBF7cnK9DukXE1FKNQEOA29orbPbXzl9jHIRLkT+PhvGsKUHcLS1Zvsb7Sjv4WixWJIMmhHLDrD7XDiNK3nw49iW992rfTEs0jRf+dqtGFN5PW83nmpcgV4Ny+PpKkOuhCgOCnGCHA7M0lr/L5PHpgCvaa0LxfwWuTaLwmLj8etM+vk4MQlJ1PN246shTalQIod5w4nx8Mc7ULomtBiXfV0hhFlkd23Ozbv7EKBlyrEwJrX3RWsdBbQHzgIrgVXAJaB9SnKc6jzW6eLTQE1gEbAZmAAsBTpnsdLmcCAx+RyiiHrMx5Nu9csSk5DEjI3+Fo1l7vZz7D4XTklnOxYObvJAQ76rebrwxpO1+HvSE/w0riUDH6mIq4MNJ4PuMGOjP49+tJ2Ryw6w/th1YhOS8vFZCCGEiT2Q1Qfe+wE7M8YiRKGWZNB8tDmA8d8fJSYhiacbe/PL861yTo4BLv8NB5fAtveNw6uFEIVabnqQ52BcNTo3ibHObiXqokA+pS58gm/H0OHzXUTHJ7FiVHPa+Zh/C4Qdp0MZufwgVgpWPlcwi4bFJiSxPSCUNUeusetsGIkG4++gq70NXeuXZfwTNalUSla3FKKoKcQ9yGuBc1rrNzN57FOM06H6mD2wTMi1WVhSRHQ8L68+yu5z4VhbKd7tXocRrXI53zjF7llQtR1UaFpwgQohcu1Bh1groB/gC0wFlgNBWdXXWr93/6FanlyEC6dFuy7w0ebTVC3tzJYJbbG3yWGFyHwUeDOaHvP2cDsmgUmda/HSEzUK/Jw3IuPYcOw6a44GcfzabQAqlHBk0yttcXfMxZ6KQohCoxAnyG0xjubaBPzMvTnI/YFuwBDgekr9lLVDLEGuzcJS/K/fYdx3hwi8GUMpZzsWDG7Co9VKZd9Iazi8zLi3sUeGNWSFEIXAgybIbsBdrbVWSl0C+mitjxVEoIWBXIQLp/hEA92+2M350Eje6OTDyx1qmuW8sQlJPPPVXk4E3aZD7TIsGdbM7CtOnw+NZMKPRzkZdIfuDcox/9nGefvUWghhUYU4QU69dWPqi57KpIzstnEsaHJtFpaw/th13vzlGLEJBup7u/PV0KZ452YtlH1fwZa3oFxDGP0XWBfpwZVCFEv5sUjXo1rrg0qpHcALWuvTBRFoYSAX4cLr3wvhDFqyH3sbK7a93o6KJQt+uPHkNSdYfeAqFUs6snF8W9ydLNN7ezk8iu5f7CYqPomPn67PwObyibQQRUUhTpCH56W+1npFQcWSE7k2C3NKTDLw6R9nWPy3cdBE3yYV+PCpejjY5vIzouibsLwHtH0d6vcrwEiFEPfrQRPkGKCj1vqf5E+bH73fVayLArkIF26vrD7K+mPX6VjHi6+HNyvQc/18KJBJvxzHzsaKNS+0op63e4GeLydrj17jtR+P4WBrxYbxbagpW0IJUSQU1gS5KJFrszCXW1HG+cZ7zodjY6V4r4cvw1pWznnk1n8nwKsepNQzJIGVxQZdCCFy8KCrWJ8D3lFKjUi+300pNSyrW75FLUQm3u1eBxd7G7YFhLA9IKTAzuN//Q7v/nYSgA9617N4cgzwVOMKPN3Em9gEAy+vPiqrWwsh8pVSyl0p1UwpVcHSsQhhCaeu36bn/D3sOR9OaRc7Vo1uwfDcLMa17ytY9BjsXXCvTJJjIYqs3CTIU4A2GLdU0sD/YVyoK7PbsvwOUIjUyrg58FonHwCmbThVIEni7ZgEXlh1mLhEA/2bVaD/IxXz/Rz3a0bvelQt7czp/+7y4aYAS4cjhChilFKdlVIfZ1L+DhCKcXunK0qp75VSMnFSPDTW+QXR98t/uXYrhoYV3Nnwchta5LQYVwp3b+PCXPGROdcVQhR6OQ6xBlBKWQMVMO5Z3A/IcpEurfWFfIvOAmQYV+GXmGSgx7w9nP7vLq90qMnryQlzftBaM3blYf70D8G3nBtrXmyV+zlHZnIy6DZPLfyHhCTNV0Oa0qVeWUuHJITIRmEaYp28tZPWWj+dqqwT8AdwAvgaqAOMA97UWn9ukUDTkWuzKCiJSQY+3nyar/dcAuCZphWY0ScX842TEsA61bokYWfBM//ejwghCtaDDrFGa52ktb4CvA/s01pfSH/DmDzfyse4hciUjbUV03vXA+CrXRe4HB6Vb8de9PdF/vQPwc3Bhq+GNC10yTFAPW933u5aB4C3fj1OUESMhSMSQhQhjTFu65TaSCAW6Ky1nqe1fhFYBAwyd3BCmNPNqHiGLT3A13suYWOlmNG7Lp/2a5Dztf/07zCvCdy8dK9MkmMhio0cE2Sl1E2lVBMArfX7QLBSar1Sqlq6qo8AYQUQoxAZNK9akqebeBOfaGDahlP50quw98INPt1iXKB9Vv9GVCpV8Ktk369RravQvnYZbsckMOGHoyQmGXJuJIQQUAZIP9KrE7BHa/1fqrJNgLzjF8XWyaDb9Jy3h38v3KC0iz2rxz7K0Ja5mG+sNRz9DiKuwhGLLewuhChAuelB9gBSz0OyAnoklwthMZO71sHVwYadZ8LY6v9gC3aF3Inl5dVHMGh46YnqdPT1yqcoC4ZSis/6NaCMqz0HL9/ii7/OWzokIUTRcBdwTrmjlKoJlAL2pat3Byh8Q2iEyAe/HTXONw6KiKFRRQ82vtyGR6qUzF1jpeCpL6H759BhasEGKoSwiFwNsRaiMPJ0tWdS51oATN/gT3R84n0dJyHJwEurjhAeGU/rGqV4vVOt/AyzwJRysWfOwEYoBfP/Ose+izcsHZIQovA7DfROdb83xgU4t6arVxUouK0ChLCAxCQD0zf4M+FHP+ISDQxoVpEfxz1KWXeH7BuGnIItk429xwAO7vDI6HtbOgkhihVJkEWRNrhFZeqWdyMoIoYFO+6vF/Xjzac5dOUWZd0cmDuwMdZWReeC16p6aV56vAYGDRN+8ONWVLylQxJCFG6zgdFKqV+UUgswri1yAvgnXb2nyGZBTiGKmhuRcQz5Zj9L/7mErbXiw6fq8XHf+tjb5DBQIiEWvusL+xbCkW/NE6wQwqIkQRZFmrWVYkYf44Jdi/++yIWwvG2xsOl4MN8kL86xYHATSrvYF0SYBWpCx5o0qeTBf3dimfTLcVnlVQiRJa31b8AEjOuGDMM4tPoZneofR/I+yE8Av1sgRCHy3YlrxvnG+y7exNPVntVjHmVwi8o5zzcGsHWAHnOg4SBo0L/AYxVCWF6O2zwppQxAX+59kmwNnME4LOtUqqqNgZ+01kV6zpJsJVE0vfXLcX48FEibGqVZ+VzzXF30zodG0nv+HqLik5jW05cRrauaIdKCEXgzmm5f7OZubCLv96rL8FZVLB2SECJZYdrmqaiSa7O4X2uOXGPymhPEJRpoXMmDr4Y0xcsthyHVkWFw4xxUbmWeIIUQZpfdtTm3CXL6SiqrMkmQhSXcjIrniZk7uR2TwIJBTejeoFy29aPiEumz4B/OhUbSs2F5vhjYKHefJBdiv58I5sVVR7CzseK3F1vjW97N0iEJIZAEOT/ItVnkVUKSgQ83BbD838sAPNu8EtN6+eY8pPrOdfi6I8TdhbE7oVT1Ao9VCGF+2V2bbTLUzmhkfgckRH4r6WzHm11qMWXtSWZs9KddLU9c7DP/9dZaM3nNCc6FRlKjjAsfP12/yCfHAN3ql+PZ5pVYfeAq41cfYePLbXCyy82fuBBCCFF8hN6JZfzqoxy4dBNba8X7veoxqEWl3DV2LQfeTSEyBGwL73aPQoiCk2MP8sNGPqUuupIMmqcX/sOxa7cZ91g1Jnerk2m9Ff9eZur6UzjbWbNufBtqlHExc6QFJyY+id4L9nA2JJL+zSrwab+Glg5JiIee9CA/OLk2i9zae+EGL68+SnhkHGVc7flySFOaVi6RfaPEOEiKB3tX4/24SLC2Axu7gg9YCGER2V2bZZEuUWykLNilFHyz5xJnQ+5mqHPk6i0+2OQPwCf9GhSr5BjA0c6aec82wd7Gip8OXWP9seuWDkkIIYQocAaD5sudFxj89T7CI+NoWa0UG19pk3NyfOc6LO8Ov44Bg8FYZu8iybEQDzFJkEWx0qCCB4OaVyLRoHnvt5NpehtuRMbx0qojJCRpRrauQo8G5S0YacGpVdaV93r4AvDOmhNcvRFt4YiEEEKIgnM7OoGxKw/zyZbTGDS89ER1Vj7XnDKuOSzGBcbe4/BzEHIS7gYXfLBCiEJPEmRR7EzqXIuSznbsv3TT1IOaZNC8+oMfwbdjaVq5BJO7Zj78urgY3KISXeuVJTIukZd/OEpCksHSIQkhhBD57mTQbXrM3822gBDcHGz4ZngzJnWujY11Lt/ilqwKg382Lsjl7l2gsQohigZJkEWx4+Fkx9tdagPwwaYA7sQmMGfbWfacD6eUsx0LBjXBzqZ4/+orpfj46QZ4ezhyLDCCmVvPWDokIYQQIt9orVl94CpPf/kvgTdjqO/tzqZX2tKhjlf2DeOjYc1Y8F9/r6xic3AuXbABCyGKjOKdJYiHVr+mFWhSyYOwu3GMWXGIeX+dx0rBvGcbU9Y9F0OuigF3J1vmDmyEtZVi0a6L/H02zNIhCSEeckqp1kqprUqpUKXUHaXUEaXUKEvHJYqWmPgk3vj5GJPXnCA+0cDgFpX4+fmWVCyZi1WnT62B4z/C7xMhIabggxVCFDmSIItiySp5wS4rBfsv3QRgYudatKrxcH1C3KxKSSZ0qAnA6z8dI+xunIUjEkI8rJRSDYBtgC0wBugLHAS+UUq9YMnYRNFxMSySpxb+w5ojQTjaWjOrf0M+fKo+DrY57G+cotFgaP0qDP0NbB0LNFYhRNEk2zylI1tJFC/T1p9i+b+X6VinDIuHNsPK6uHbZSXJoBn89T72XbxJ25qlWTGy+UP5OghhKbLNk5FS6n/ARKCk1joyVfk+QGutW2bTVq7Ngt9PBPPmL8eJjEukmqczXw5uSq2yrtk30hoOLIH6/cCppHkCFUIUerLNk3hoTelehyXDmjF/UJOHNim0tlLMGdCYEk627D4XzpLdFy0dkhDi4WQHJADpx7VGIO9HRDYSkgxM3+DPi6uOEBmXSPcG5Vg/vk3OyTHAXzNg8yRYO86YLAshRA7kgiSKNVtrKzr5euV+6FUxVdbdgZnPNATgsz/O4BcYYdmAhBAPo+XJX79QSpVXSnkopcYAHYDZlgtLFGbBt2MYuHgfS/+5hK21YlpPX+Y/2xgXe5vcHaDpCChZDR4ZDerh/KBcCJE3MsQ6HRnGJYqz9zecYtk/l6lU0olNr7TB1cHW0iEJUezJEOt7lFKPAGuBlP10EoAXtNbf5NBOrs0PoT3nwnnlh6PcjIqnnLsDCwY3oUmlEjk3DPEHL99795MSwTqXCbUQ4qEgQ6yFEAC83bU2dcu7cfVmNFPWnpQ3m0IIs1FK1QR+BU4BPYGOwFfAV0qpwVm0GauUOmS+KEVhYDBovth+jqFL93MzKp62NUuz6ZW2uUuOd/wPvmwJJ3+9VybJsRAiDyRBFuIhYm9jzbxnG+NkZ836Y9f5+fA1S4ckhHh4/A9jj3EPrfVGrfV2rfUr8P/t3Xd4VGXax/HvnU7oNRRBujRRpIuIooLYXRt2xIJlLbvrrrq677q6bnFt69oQBVTsDSvYwALSEQWk9w4hQEhC+vP+cSYSQzrJnJnJ73Ndc03mzDln7ieTyT3PeRpvAf81s0O+kzjnnnfO9Ql2oOKfPenZXDNxHo99sRKAO07txMRr+tGodlz5TpDYGCwK0pOrMUoRiWTqYl2EunFJTfDOgs3c+faP1IqN5qNbT6Bjszp+hyQSsdTF2mNmy4GfnXO/KbL9duAJoIVzbnsJxyo31wCLNu3l5kkL2Lovk4aJsTwxshdDOjct+8DCXaidg53Lft3FWkSkCHWxFpFfueC4Vpx3bEsO5ORx6+s/kJmT53dIIhL5tgPHmlnRpsD+QCaQEvyQJBQ453h51noueu57tu7LpFebBnxy2+DyVY5/esvrUp2+23tspsqxiBwWVZBFaiAz48HzenBk40SWbUvlX1OW+x2SiES+p4B2wEdmdq6ZDTOzp4BLgWedc9n+hid+SM/K5bY3FvF/HywlJ88x6vi2vHnDQFo2qFX2wfl5MGcsJK+En96s/mBFpEZQF+si1I1LapIfN+3lgme/JzffMe6qPpzWLcnvkEQijrpYH2RmI4C7gO5AArAGeB4Y65wrsSuLcnNkWrVjPze9upDVO9OoHRfNvy/syVk9W1bsJPu2wJqvoNeVWsZJRMqttNysCnIRSsJS0zz/7Rr+8elyGiTGMuX2wbSoX46r9iJSbqogHz7l5sjzwaIt3PPeYjKy8+icVIdnLu9dvvkwNs2DNdPgpLuqP0gRiVgagywiJbruhPYM6dyUvRk53PraD+Tm5fsdkoiIRKis3Dz+MnkJt7+xiIzsPM47tiWTbxlUvspxRgq8ch58/Q9Y+Vm1xyoiNZNakIvQVWqpiZLTsjjzye/YkZrFTSd14K7Tu/gdkkjEUAvy4VNujgyb92Rwy6sL+XHzPuKio/jrOd24rF+bXz4j5TJ/POxcDsMfgujY6gtWRCKaulhXgJKw1FRz1u7m0nGzyXcw4Zq+nHxUM79DEokIqiAfPuXm8Dd9+U7ueHMR+w7k0KpBLZ694jh6HtGg7AP3bYaM3dDimGqPUURqDnWxFpEy9W/fmD8MOwqA37+5iK17D/gckYiIhLu8fMejn6/gmonz2Hcgh6FdmvHJbSeUr3K8awWMPRFeGwlpO6s9VhERUAVZRAq5aUgHTuzclD0ZOdz6+g/kaDyyiIhU0u60LK4aP4f/TVtNlMEfhx/FC1f1oUFi0aWwS9CwHTTuBM26QFRM9QYrIhKgLtZFqBuX1HS707I4IzAe+cYhHbh7hMYjixwOdbE+fMrN4WfF9v2MnjiPLXsP0KROHE+O7MXxHZuUfWB2ulcZjon3Hh/YA/H1ICq6egMWkRpFXaxFpNwa14nnf5ceR5TBc9+sYfpydWsTEZHym758Jxc8+z1b9h7g2NYN+OS2weWrHO9eAy+cClPvPritVkNVjkUkqFRBFpFD9GvX6OB45Lc0HllERMrmnOPFGeu49qV5pGXlcvYxLXnjhgEk1Uso3wky93mV5HXfeT+LiPgg6BVkM2ttZu+Y2T4zSzWz98ysTTmPbRc4dq+ZpZvZdDPrU8K+rcxsvJltN7MsM1tnZv+s2tKIRC6NRxYRkfLKycvn3slLePDjn8l3cMepnXhy5LEkxFag9bfVcXDZG3D9NEioX33BioiUIqgVZDNLBKYBXYCrgSuBTsB0M6tdxrGNgRlAD2AMMDLw1HQz61pk37bAXKAzcBswDLgfyK2ioohEvKgo4/GLj6F5vQQWbNjDo5+v9DskEREJQfsychg1YS6vzdlIfEwUT17aiztO7Vz2+saZ++DNK2Hj7IPbOgyFhHrVG7CISCmCOkmXmd0OPAYc5ZxbHdjWDlgF/Mk591gpx96HV8ntUujY2sBa4Bvn3MWF9p0KNAIGOedyKhijJgIRKWTe+hRGPj+bvHzHhFF9ObmL1kcWqQhN0nX4lJtD17rkdK6dOI+1yek0qRPPuKt606tNw/Id/O0jMO1BaNoVbvoeojTyT0SCI5Qm6ToHmF1QwQVwzq0DZgLnlnHsAGBVkWPTge+As8wsBsDMOgDDgf9VtHIsIofq27YRfxjWGYDfaTyy1BD7MnJUGRMpw6w1uznv6ZmsTU6nS/O6fPDbQeWvHAMMuh36XAuXvq7KsYiEjGD/N+oOLClm+1KgWxnH5gHZxWzPAmoBHQKPBwXuD5jZF4Hxx3vM7OVAN20RqaAbT+zAkM5N2avxyFJDXPHiHIY++g2rd6b5HYpISHpj7kaufHEO+w7kcGrXZrxz0/G0alCr9IPycmH2c5CT6T2OjoWzHoNG7ao/YBGRcgp2BbkRsKeY7SlAWZccVwCdCldyzSwK6Ffo3AAtA/fjgZXACOAu4Ezgs8AxhzCzG8xsfnkKIVLTREUZjxUaj/zI5yv8Dkmk2mxKyWDxln3sSM3kiIZlfOEXqWHy8h0PffIzd7+3mNx8x/WD2zH2yj7UiY8p++CPb4epd8GUP1V/oCIileRHf5bi+qyVZ1zWc3jxvmxmHcysBfAkUHDZsaBJq6BMXzvnbnHOTXPOPQ/cDPTG6359aFDOPe+cK3ZGbBEJrI98WS+io4yx36xl2vIdfockUi0+W7odgJO7NKvYDLwiES49K5cxr8xn3HfriIky/n3B0dx7Zjeio8o5vL7fGGjQBnpeUr2BiogchmBXkPdwsKW3sIYU37L8C+fcWuByvEruamArMBB4PLDLtsD97sD9F0VO8XngvlfFQhaRAoXHI//+rR81Hlki0pQlXgV5RI/mPkciEjq27D3ABc9+z5fLdtIgMZZXru3PJX3LsUrnrkIrILToCbcuhLaDSt5fRMRnwa4gL8Ubh1xUN+Dnsg52zr0LtArs39E51xuoA2xyzm0s9BpQfEs1HGxpFpFK0HhkiWQ7UzNZsGEPcTFRnHyUZmwXAfhh4x7OfWomy7fvp32T2rx/8yAGdihjWhfn4JM74ZkBsH7Gwe3RsdUbrIjIYQp2BflDYICZtS/YEFizeFDguTI55/Kcc8ucc2vMrCVwCfBsoV1mA9uB04scWvB4XiVjFxEC6yNfcqzGI0tEKuhefWKnptQuz5hKkQj34Y9bueT52SSnZXF8h8a8f/Mg2jWpXfaBZhCXCFHRsG9L9QcqIlJFgr0Ocm3gR+AAcB9eK++DQF2gp3MuLbDfkcAa4AHn3AOBbbHAw8A3QCpeS/Q9gf1Occ5lF3qdq4GJwFjgPaAj8BCwCBjqSim01loUKZ/C6yOPH9WHoV2S/A5J5LBdNm4236/ZzaMXHcMFvY+oknNqHeTDp9wcfM45/vvVKp74chUAl/ZrwwPndic2uoy2lfw8r1IM3qzVySshqayFSkREgitk1kEOrFs8FG926VeAV4F1eJXWwmtpGBBdJD4HdMKr9E4B7sCbqXp44cpx4HVeAq4CTgA+Av4CTALOLq1yLCLl17dtI+4cdhSg8cgSGVLSs5mzLoWYKOPUrrrgIzVXZk4et72xiCe+XEWUwV/O6sY/zu9ReuXYOZg7Dl48DbIzvG3RMaoci0jYCWoLcjjQVWqR8svPd4x+aR5fr9jFcW0a8OaYgWW3LoiEqLfmbeJP7/7EiZ2b8vLofmUfUE5qQT58ys3Bs3N/Jje8vIBFm/ZSJz6G/13ai5O7lGM8fnY6PHcCpKyFC16Eoy+s/mBFRCopZFqQRSSyeOsje+ORF27cyyOfaTyyhK8pS7zFEE7vrtmrpWZati2V856ayaJNe2nVoBbv3DSwfJVjgLjacMkkVY5FJOypgiwih6VR7biD6yN/u5avlml9ZAk/qZk5zFidTJTBsO7qXi01z5c/7+CCZ79n675MjmvTgA9+O4guzeuVftCa6V636gJJ3VU5FpGwpwqyiBy2wuOR//D2j2zReGQJM9OX7yQnz9G3bSOa1In3OxyRoHHOMe7btVz/ynwysvM499iWvHb9gLI/BynrYNIFMOVPsGVhcIIVEQkCVZBFpEqMObE9Jx8VWB/5tYVaH1nCypTF3vJOp/dQ92qpObJz87n73cU89OkynIM/nNaZJy45loTY6LIPbtQOBv8BBt8JLY6p/mBFRIJEk3QVoYlARCovJT2bM5/8jm37MhlzYnvuOaOr3yGJlCkjO5fjHvyCzJx8Zt0zlBb1a1Xp+TVJ1+FTbq56ezOyuXHSAmavTSE+JorHLj6WM3u2KP2g5NUQFQWN2gcnSBGRaqJJukQkKBrVjuN/l2o8soSXb1fuIjMnn2NbN6jyyrFIKFq7K43zn/me2WtTaFo3nrfGDCy7crxpLow7Gd64HLLSSt9XRCSMqYIsIlWqT9tG/HG4xiNL+JiyRN2rpeaYuTqZ856eybrkdLq1qMcHtwzimNYNyj6waReokwSNO1Z7jCIiflIFWUSq3A2DNR5ZwkNWbh7Tlu0EYIQqyBLhXp2zgavGzyU1M5fTuiXx9o0DadmglF4TmamQH/j/nVAPRk+Fi1+G+DrBCVhExAeqIItIlYuKMh69+Fha1PfWR/6P1keWEDVzdTL7s3Lp2qIeRzau7Xc4ItUiL9/xwEc/c+/7S8jLd4wZ0p6xV/SmdnxMyQdtXwJjB8OMxw5uq90ETEPpRSSyqYIsItWi8Hjk579dy5c/azyyhJ6pge7Vaj2WSJWWlcv1L89n/Mx1xEYb/7mwJ/eM6EpUVBkV3dStsGcDLP8Y8nKCE6yISAhQBVlEqo3GI0soy83L54vAhRuNP5ZItHlPBhc88z3Tlu+kQWIsk67tz0V9Wpfv4M7DYORrcM0UiI6t3kBFREKIKsgiUq1uGNyeoV2ase9ADr9/c5Hf4Yj8Ys66FPZk5NC+aW06NdOYSoksP2zcw3lPf8+KHftp37Q2k28eRP/2jUs+IG0XvDYSdq08uK3LGRCrmd1FpGZRBVlEqlVUlPHoRcfQIDGWOetS+GHjHr9DEgF+3b3aNK5SIsjHP21l5POzSU7LYlDHxrx/0yDaNiljjP03/4aVU+DTPwQnSBGREKUKsohUu4a14xjZtw0AE2au9zcYESA/3/HZ0sDyTt3LWP9VJEw453jyq1X89rUfyMrN59J+bZh4TT/qJ5aji/Sp98Oxl8P5z1d7nCIioUwVZBEJiisHHkl0lPHp4m3sSM30Oxyp4RZu3MPO/Vkc0bAWPVrV8zsckcOWlZvH79/6kce+WIkZ3HdmV/5xfg9io0v4qpebBXPHHVzGKb4OnPcM1NMFIxGp2VRBFpGgaNWgFsO7J5Gb75g0e4Pf4UgNN2VJQeuxulcHm5mdYWbfmlmamaWa2XwzG+p3XOFsd1oWl4+bw/s/bCExLprnr+zDdYPbl/63/eaV8Omd8O1/gheoiEgYUAVZRIJm1PHtAHhtzkYyc/J8jkZqKufcwfHHR2v26mAyszHAB8AC4HzgIuBtINHPuMLZqh37Oe+ZmczfsIcW9RN4+8aBnNYtqewD+4+BBkd6s1WLiMgvSlkhXkSkavVt25DuLeuxdGsqH/24tfzLjYhUoSVbUtmy9wDN6sbTq3VDv8OpMcysLfAE8Efn3BOFnvrMj3giwXerdnHzqwvZn5lLzyPq88JVfWhWL6H4nZ2DlLXQuIP3uOMp8Nv5EBMXvIBFRMKAWpBFJGjMjFHHtwVg4vfrcc75G5DUSFOWbANgePfmREWpe3UQjQbygef8DiQSTJq9gVET5rE/M5cRPZrz5g0DS64c52bDe9fDc4Nh57KD21U5FhE5hCrIIhJUZx/Tksa141i6NZV568NryafMnDx1DQ9zv+pe3UPdq4PsBGA5MNLM1phZrpmtNrNb/A4snOTlOx746Gfum7yEvHzHzSd14OnLjqNWXHTJB0UXmsV678bqD1JEJIypgiwiQZUQG81l/b0lnyZ+v87naMovNy+fi8fOos/fv2TGqmS/w5FKWrUzjbXJ6TRMjKVfu0Z+h1PTtAQ6Af8B/gUMA74AnjKz24s7wMxuMLP5wQsxtKVl5XLDy/MZP3MdsdHGfy7syZ9O71JyT4iCGarN4Own4Ybp0Hl48AIWEQlDqiCLSNBdMeBIYqKMz5buYMveA36HUy7v/7CFnzbvIy0rl9ET5zE10E1XwsuUxV7r8WndkogpafkbqS5RQF1gjHNunHNumnPuJmAqcI8VM+Wyc+5551yfYAcairbsPcCFz37PV8t30iAxlknX9i95Hof8fPj2EXjtYsgP9HqJS4SmRwUvYBGRMKVvByISdEn1Ejjj6Bbk5TtemRX6Sz7l5OXz5LRVAPQ+siHZefnc/OpC3pq/yefIQtPO/ZmkZeX6HUaxCsYfj+ihtV59sDtw/0WR7Z8DSYDelBIs2rSXc5+ayfLt+2nfpDaTbx5E//aNSz4gIxlmPwurv4T1M4IXqIhIBFAFWUR8cc2gtgC8PncjB7JDe1zv2/M3synlAB2a1uatMQO5/ZRO5Dv40zs/8cJ3a/0OL6RMX7GT4/85jXOemkFWbmi9r+uT01m+fT9142M4vmMplQupLktL2F7QcpwfrEDCyaeLt3HJ2Fkkp2VxfIfGvH/zINo2qV36QXWawUUT4bI3of2QoMQpIhIpVEEWEV/0atOQY1o3YN+BHCYv2uJ3OCXKys3jqUDr8R2ndiY6yvjdaZ35v7O6AfD3T5bx2OcrNCM3sGBDCjdNWkBuvmPtrnRe/j60egdMXep1rx7atRnxMaVMaCTV5f3AfdFBsMOBzc657UGOJ6Q553h6+mpufnUhWbn5XNqvNS+N7kf9xNjiD/j5Q1jy7sHH7QZrvLGISCWogiwivhkdaEWeMHNdyFYw35y3ia37MunSvC5nHn2wB+joE9rxyEXHEGXw5LTV3P/hUvLzQ7MMwbBi+36umTCPzJx8+rb11hb+37RV7M3I9jmyg6Zo9mq/fQpMB8aa2Y1mNszMnsebrOsv/oYWWrJy8/jD2z/yn89WYAb3ntGVf5x/NLEljZvfPB/euhIm3wJ71gc1VhGRSKMKsoj4ZkSPFjSrG8/KHWnMWrO77AOCLDMnj6emrQa81uOiM8Ve2PsInr2iN3HRUbw0awN/ePtHcvJqXi/RTSkZXDV+DqmZuQzrlsTr1w/ghI5NSM3M5X+B35/ftu49wI+b9pIQG8WQzs38DqdGct5VsPOAN4C/AR8DA4DLnXMT/YsstKSkZ3PlC3N5b+EWasVGM/aK3lx/YnuKmcPsoFa9odeVMPReaHBk8IIVEYlAqiCLiG/iYqK4YoD3ZW78zPX+BlOMSbM3sHN/Ft1b1mN496Ri9xnevTkTrulLYlw07/+whZsmLahRayUnp2Vx1fi57EjNon+7Rjx5aS9ioqO454wumMHLs9azYXe632HyWaB79Umdm5W+XqxUK+dcqnPuFudcknMuzjnX0zn3mt9xhYrVO9M4/5mZzF2fQvN6Cbx940CGdS+hx8P2xZAeWHLODM75Hxx/q/eziIhUmirIIuKrS/u1IS46iq+W72Dj7gy/w/lFRnYuz32zBoDfn9a51NabQR2b8Nr1A2iQGMuXy3YyasJc9mfmBCtU3+zPzGHUhLmsS06nW4t6jLu6DwmxXuWze8v6/KbXEeTkOR6eusLnSAt1rz5a3aslNM1Ylcz5z8xkw+4Mjm5Vnw9+O4gereoXv/OqL+CF0+CdayAvMGO8KsYiIlVCFWQR8VXTuvGcfUxLnIOXZq33O5xfvDxrA8lp2RzbugFDu5TdJffY1g1484aBNKsbz+y1KVz+whxS0kNn/G1Vy8zJ44aXF7BkSypHNk7kpdH9qJfw68mD7hzemfiYKD5ZvI0FG/b4FCns2p/FvPUpxEVHleu9FAm21+Zs5OoJc9mfmcvp3Zvz5pgBJNVLKPmApB4QXxcatAFXc3qsiIgEgyrIIuK7giWf3pq3ifQQWD83LSuXseVsPS7sqOZ1efem42nTKJGfNu/j4rGz2LbvQHWG6ou8fMcdbyxi1trdNK0bzyuj+9O0bvwh+7WoX4vrBrcD4B+fLvNtIrYvft6BczCoY2PqJpQwA7CID/LyHX//+Gf+/P5i8vIdNw7pwDOXH0diXMyhO2ftP/hzvRZw4ww45ymIOfSzJyIilacKsoj4rker+vRt25D9Wbm8u3Cz3+EwYcY69mTk0LdtQwZ3alKhY1s3SuSdGwdyVFJdVu9M48JnZ7Eu2f8xuFXFOcd9kxczdel26ibE8PLofrRpnFji/jcO6UDj2nEs2LCHqUv8WcVnypJtgDcpnEioSM/KZcwr83lhxjpio42HL+zJ3SO6HDIZIACb5sJTfWFRoeHadZPUrVpEpBqogiwiIWHU8V5L48Tv1/u6XNK+AzmM+24tAL+rQOtxYc3qJfDmmAH0atOALXsPcNFzs/h5a2pVh+qLRz5fwetzNxEfE8WLV/ela4t6pe5fNyGWO07rDMC/py4nOze4s3zvy8hh1prdREcZp3UrfqI1kWDbuvcAFz43iy+X7aRBYiyvXNufi/u0LvmAnctg/zZY/DaE6JJ4IiKRQhVkEQkJw7on0aJ+Amt3pfPd6mTf4nhxxjpSM3MZ2L4xx3eoWOtxYQ0S45h0bX9O6NiE5LQsRj4/iwUbUqow0uB7ccY6np6+hugo45nLj6Nfu0blOm5k39a0b1qb9bszeHXOhmqO8te+XLaD3HzHgPaNaFg7LqivLVKcnzbv5bynZ7JsWyrtm9Tm/ZsHMaB949IP6n01XDgeLntLrcYiItVMFWQRCQmx0VFcOdBb8mnCzHW+xLAnPZvxM7zX/sOwzod9vtrxMbw4qg+nd29OamYul78wh29W7jrs8/rh/R828+DHPwPw8AU9OaVr+VtjY6OjuGdEVwCe/GoV+w4Eb4bvgtmrTy9pqRyRIJqyeBsXj53Fzv1ZDGzfmPduPp52TWofuuO+zfD6ZbB/x8FtPS6AaI2hFxGpbqogi0jIuLRvG+Jjovh6xS7W7koL+us//91a0rJyObFzU/q0LV/raFniY6J56rJeXNT7CDJz8rnupXl88tO2Kjl3sExfvpM/vv0TAPed2ZULeh9R4XOc2rUZ/do1Yk9GDs98vbqqQyxWWlYu367ahZm3XrWIX5xzPPv1Gm56dSGZOflc0qc1L43uR4PEEno1TLkLVnwCn98X3EBFREQVZBEJHQ1rx3F+r1YAvPT9+qC+dnJa1i+v+fvTDr/1uLCY6CgevrAn153Qjpw8x62vL+SNuRur9DWqy4INKdz06gJyAzPsXje4faXOY2bce4bXijxh5no276n+Na+nL99Jdm4+vds0pFlpS+aIVLOnpq3m31OXYwZ/PqML/7rgaOJiSvkKduZjcMylMOLfwQtSREQAVZBFJMSMCiz59M6CzaRmBq8r7thv1pCRnccpXZpxbOsGVX5+M+PeM7ty57DO5Du4+73FvywlFapWbN/PNRPm/dLiddfpRx3W+Y5p3YBzj21Jdm4+j3y2ooqiLNnUpYHu1T3Ueiz+GT9jHY9+sZIog/+O7MUNJ3Y4dPK/7HRY+PLBx3WT4PznILFqerKIiEj5qYIsIiGlS/N6DGzfmPTsPN6eH5wln3amZvLyLG/yqN9VcetxYWbGb4d24oFzuwPwzynLeXjqct/WBy7NppQMrho/h9TMXIZ1S+Kh83tUakbvou4cdhRx0VFMXrSVnzbvPfxAS5CZk8f05TsBda8W/7w1bxMPBMbu/+s3PTnnmJaH7pSfDxPPgg9v/XUlWUREfKEKsoiEnIJW5Je+X09eEJZ8eubrNWTl5nN69+b0aFW/2l/vqoFteeKSY73ZoL9ew32Tl/i6tFVRyWlZXDV+LjtSs+jfrhFPXtqLmOiqSRetGyVyTeD9/ceny6rt4sC3K3eRkZ3H0a3q07pRyes0i1SXj37cyl3veWP3/3p2Ny7uW8IyTlFR0O96aNwJWvcPYoQiIlIcVZBFJOSc2jWJIxrWYmNKxi+tgNVl274DvDZnI2Zwx2mdqvW1CjuvVyvGXtGb+JgoXp2zkTveXEROXnDXCC7O/swcRk2Yy7rkdLq1qMe4q/uQEBtdpa9x88kdaZAYy+y1KXy1rHreX3WvFj99tWwHv3tzEc7BncM6c82gdr/eIT8f9hRa8uzYy+DGGdD08IYxiIjI4VMFWURCTnSUcfXAtgBMrObJup6atprsvHzOPLoFXZrXq9bXKurUbkm8NLofdeJj+PDHrdzw8nwOZOcFNYbCMnPyuOHlBSzZksqRjRN5aXQ/6iVU/bIy9WvFcttQ72LEP6csI7eKLwxk5+bz5c/e8jiqIEuwfb86mZteXUhuvmPMkPbccnLHX++QlQZvXAYvnAqphWa0j9VEciIioSDoFWQza21m75jZPjNLNbP3zKxNOY9tFzh2r5mlm9l0M+tTzH7rzcwVczuvygskItXi4r6tqRUbzYzVyazcsb9aXmNTSgZvzd9ElMEdp1bf2OPSDGjfmNeu70/DxFimr9jF1ePnkpyWFfQ48vIdd7yxiFlrd9O0bjyvjO5P07rx1fZ6Vww4kiMbJ7JmVzpvzNtUpeeetXY3qZm5dE6qQ4emdar03CKlWbhxD9e9PJ/s3HyuGNCGu0/vcujY/ZgEyEmHvGzYs96XOEVEpGRBrSCbWSIwDegCXA1cCXQCpptZ7TKObQzMAHoAY4CRgaemm1nXYg75DBhY5PZNFRRDRIKgfq1YLujtLflUXa3I/5u2ipw8x3nHtqJjM/8qUj2PaMDbNw6keb0E5q5Poe9DX3Lu0zN59PMVzFufUuUtrEU557hv8mKmLt1O3YQYXh7djzaNq3fcblxMFHed3gWAJ75cSVpWbpWde+oSr1Xu9B4tquycImVZunUfo8bPJSM7j9/0asUD5xSZ2C4/8DmOjoELJ8ANX8ORA32JVUREShbsFuTrgfbAec65yc65D4BzgCPxKr2luQlIAs5yzr3pnPsIOAvIAP5WzP7JzrnZRW57qq4oIlLdRh3fFoD3Fm5mb0Z2lZ57fXI67y7cQnSUcdspwRt7XJKOzeryzk0DGdK5KbFRUfy4aS//m7aai56bRa8HvmDMK/N5dc4GNqVU/frBj3y+gtfnbiI+Jorxo/rStUVwupqP6NGc49o0IDktu8qWvMrLd3y+NNC9WrNXS5Cs2ZXGVS/OJTUzl+Hdk3j4wp5ERQUqx3m58Plf4MPfQsGkdLWbQKN2JZ9QRER8ExPk1zsHmO2cW12wwTm3zsxmAucCj5Vy7ABgVZFj083sO+AsM4txzlVdE4SI+K5js7oM7tSE71Yl8+a8TYwZ0qHKzv3kV6vIy3dc3OcI2jYptQNL0BzR0Bv3m5Gdy+y1u/l2ZTLfrtrF2l3pfLZ0B58FKn7tmtTmxE5NOLFzUwa0b0zt+Mr/K39xxjqenr7Gm1H78uPo2zZ4664WrA19wbOzGPfdWi7r34YW9Wsd1jnnrU9hd3o2RzZOpGuLulUUqUjJNqVkcMULc9idns2JnZseOuv7nvUwd5zXpXrgLZDU3bdYRUSkbMGuIHcHPihm+1LgojKOzQOKa0LKAmoBHYAVhbafbWYZQDTwA/Av59zkigYsIv4aPagd361K5uVZG7j2hHZVstzQ6p1pTF60hdho49ah/rceF5UYF8PQLkkM7ZIEeF/Av1uVzLcrdzFzTTLrktNZl5zOS7M2EBtt9D6yISd2bsqJnZrSrUW9gy1XZXj/h808GFij9eELenJK16RqK1NJeh/ZiDOObs6ni7fz6OcreeSiYw7rfFOXHJy9uirWbRYpzY7UTC5/YQ7b9mXSr22jwMz0RWZ9b9IRfjMWEpuociwiEgaCXUFuBBTXzTkFaFjGsSuA08yssXNuN4CZRQH9Cp27wEfAPGAdXrfs3wLvm9mVzrlJxZ3czG4AbihvQUQkOIZ0bkq7JrVZl5zOl8t2VMm40ie+XEm+g0v7tA6LNXJbN0rksv5tuKx/G3Lz8vlx816+WelVmH/avJfZa1OYvTaFh6euoEmdOAZ3asrgTk0Y3KlpiRNtTV++kz++7a3Ret+ZXbmg9xHBLNKv/Gl4F774eQfvLtzM6EHt6Naycl288/PdwQqyuldLNUtJz+aKF+awMSWDo1vV54VRfagVF6gcL3oN6h8B7U70Hnc7179ARUSkQswVjIcJxouZZQOPOufuKbL9IeAu51yJFXYzaw/8DHwF3IY39vhe4Ea8VuIBzrk5JRwbDcwGmjvnWpcRowNv0hoRCQ0TZ67j/o9+pl+7Rrw15vAmtVm+PZUR//2O2Kgovv7jSbRscHhdev22NyObGauT+S7QHXvbvsxfPd+tRT2vdblzE3of2ZD4mGjmr0/hihfnkJmTz41DOnD3iC4+RX/Q3z5ayoSZ6xncqQmvXNu/Uuf4YeMezn/me1rUT2DmXUPL3ZJe3Qpasp1zoRFQGAq13JyamcNl42azZEsqnZPq8OYNA2lYO857cvmn8MalXovxb+dBYvCGLYiISPmUlpuD3YK8h1+39BZoSPEty79wzq01s8uBp4GCccgLgceBO4FtpRybZ2ZvA/82sxbOuRL3FZHQc0HvI3jk85XMXZfC0q376N6yfqXP9cQXq3AOLuvfJuwrxwANEuM4q2dLzurZEuccq3em8c3KXXy3KpnZa3fz87ZUft6WynPfrCExLpoB7Rszf30KmTn5XNKnNXedfpTfRQDgtqGdeGfBZr5blcw3K3cxpHPTCp+joPV4ePfmIVM5lsiTkZ3L6AnzflkvfNK1/Q9WjgE6D4fOI6DLGaoci4iEoWDPYr0UbxxyUd3wWodL5Zx7F2gV2L+jc643UAfY5JzbWMbhBd+WQuPys4iUW92EWC7q43UBnjhzfaXPs2TLPqYu3U58TBQ3n1R1E36FCjOjU1JdrhvcnpdG9+PHvw7jlWv7cf3gdhyVVJeM7DymLd9JamYuw7ol8dD5PUJmnG7D2nH89uSOAPzjk2Xk5VfsX7VzjimFxh+LVIes3DzGvLKA+Rv20KJ+ApOu7U+zegmweQFkB2aYj4qGS1+H467yN1gREamUYFeQPwQGBLpLA2BmbYFBgefK5JzLc84tc86tMbOWwCXAs6UdY2YxeJOAbXTOba9s8CLin6sHtsUMPvhxK7vTsip1jse/WAnAVQOP9L7URriE2GgGd2rKvWd247PfncicP5/Cfy7syd0juhw6024IuPr4trRqUIsVO/bzzoJNFTp22bb9bEzJoEmduKDOxC01R25ePre+9gPfrUqmSZ04Jl3X35vD4Ke3Yfww+Oi2g8s4hciFJxERqbhgfzsaB6wHPjCzc83sHLxZrTcBYwt2MrMjzSzXzP6v0LZYM3vczM4zs6FmdiswH69V+tFC+11qZm+Y2VVmdrKZjQSmA72Bu4JRSBGpem2b1Obko5qRnZvP63PL6jByqEWb9vLV8p0kxkVX6XJR4SSpXgIX9WnNjUM6kBAbXfYBQZYQG82fAl2+H/18JRnZ5V+5b+oSb+TMad2aE63u1VLF8vMdf3znJz7/eQf1EmJ4eXR/OjSt4z3ZvAdEx0OdJHD5/gYqIiKHLagVZOdcOjAUWAm8AryKN9P0UOdcWqFdDW/ircLxOaATXkV6CnAHMB4Y7pwrvPzTOqAZ8B/g88D+WcDpzrk3qr5UIhIs1wxqC8ArszeQk1exL6KPBVqPrz6+LU3qFD+zs/jv7J4t6XlEfXbuz2Lct+vKfVxB9+oR6l4tVcw5x18+WML7P2whMS6al0b3o1uTQheYmnWFW+fD8Ie87tUiIhLWgt6/zjm30Tl3gXOunnOurnPuPOfc+iL7rHfOmXPu/kLbcp1zZznnkpxz8c65Ds65+5xzGUWOne2cGxrYL9Y5V985d6pz7rPglFBEqssJHZvQsVkddqRm/VIhKo/561P4duUu6sTHcMPg9mUfIL6JijL+fEZXAMZ+u4ad+zPLOMJb13rVzjTqJcQwoH3j6g5RahDnHP+aspxX52wkPiaKF67uQ6+cH+C/x8Dqrw7uWK+lf0GKiEiVCq0BaCIipTAzRh3fFvCWfiqvRz/3Wo9Hn9Du17PNSkga0L4xp3VLIiM7j8e/WFXm/p8t9S6WnNotibgYpTWpOk9NW83Yb9cSE2U8e8VxHN+hCWycDem74Ed1ShMRiUT6JiEiYeU3x7WiXkIMCzfu5cdNe8vc//s1ycxau5t6CTFce0K76g9QqsTdI7oQHWW8OW8jK3fsL3XfKYHxxyN6tAhGaFJDvDhjHY9+sZIogydGHsvQLkneE0PuhvPHejcREYk4qiCLSFhJjIthZL82AEz8fn2p+zrnfpm5+vrB7alfK7a6w5Mq0qFpHS7r14Z8B/+asrzE/TalZLBkSyqJcdEM7tQkiBFKJHtz3kYe/NhbffLpYXU5a/ndkBWYKiUqCo4Z6d2LiEjE0X93EQk7Vw44kiiDj3/ays7UkseofrcqmXnr99AwMZZr1Hocdm4/tRN14mOYtnwnM1cnF7tPQffqk7s0C8mZuSX8fPTjVu5+bzEAfz2rKyPWPAA/fwDf/MvnyEREJBhUQRaRsNO6USKndUsiJ8/x6pzil3xyzvFooPV4zJAO1ImPCWaIUgWa1InnppO8Jbn+8eky8vPdIfto9mqpSl/+vIPfvbkI5+DOYZ255oT2cN6zcMxlMEQrRYqI1ASqIItIWBp1vNci/OqcDWTl5h3y/PQVO/lx016a1InjqoFHBjs8qSKjB7WjRf0Elm5NZfKiLb96bkdqJgs27CEuJoqTj2rmU4QSKb5fnczNry0kMX8/T/RYwy0nd/SeaNIJzn8W4uv6G6CIiASFKsgiEpYGtG9El+Z1SU7L5pOftv3qOefcL+se3zikA4lxaj0OV7XiovnDsKMAeOSzFWTmHLwY8nmge/WJnZpSWz0E5DAs2LCH616ej+VmMq3+A5y7+v+wVV/4HZaIiPhAFWQRCUtmxjWD2gIwYeZ6nDvY/fazpTtYsiWVpHrxXDFArcfh7vxerejWoh5b92UyvtDyXupeLVVh6dZ9XDNhLhnZeZzZqx2Njh+FNT8amh7ld2giIuIDVZBFJGyde2wrGibGsnjLPhZu3ANAfv7BmatvObmjJm6KANFRxp/P6ArAM9PXsDsti5T0bOasSyEmyji1a5LPEUq4Wr0zjWtemEWtzJ0M757Ewxf2JGrwH+DaL6ChLq6JiNREqiCLSNhKiI3m0sCST+Nnrgfgk8XbWLFjPy3rJ3BJ39Y+RidV6YROTTjpqKakZeXy369W8cXP28nLdwzs0Jj6iVq+KxyZ2VQzc2b2dz9ef1NKBreM+4L/5vyN9+v8myd/04GY6Chv+abYBD9CEhGREKAKsoiEtSsHHkl0lDF1yXY278ngiS+91uPfDu1EfIxajyPJPSO6EmXw2pyNTAhcEBnRo4W/QUmlmNmlwDF+vf6O1Ewuf2EOG/fn0yo+gxbx2cSnbfUrHBERCSGqIItIWGtRvxan92hOXr7jupfms2ZXOq0b1eKiPkf4HZpUsaOa1+XiPq3JzXcs374fMxjWXd2rw42ZNQAeB37vx+unpGdzxbjZbEzJoNMRSTS67h1szDeQ1N2PcEREJMSogiwiYW90YLKu5dv3A3Db0E7ERuvfWyT6/WmdqRUYV963bSOa1In3OSKphIeBpc6514P9wqlpacx58krO3jOBzkl1eOmaftRp3gnqqSeCiIh49A1SRMLecW0acnSr+gC0a1Kb83u18jkiqS7N6iVw+6mdABipMeZhx8xOAK4Cbg72a2dk5/LvF99gWOZn3BDzKa9d3IaGteOCHYaIiIQ4VZBFJOyZGX8cfhQt6ifw17O7eRPtSMS6cUgH5vz5FF0ICTNmFguMBR5xzq0o5zE3mNn8qophQ+2jeTj2RvaN/JAmrdpV1WlFRCSCWOG1QwXMzAHo9yIiIlXBzABwzpnPofjKzO4DRgPdnXMHAtsc8JBz7r4yjq2S3JyZk8eu/Vm0bpR4WOcREZHwVlpujgl6NCIiIlKjmFkb4F7gOiDezAoPHo8PTNy13zmXV51xJMRGq3IsIiKlUgtyEWpBFhGRqqQWZDCzk4DpZezWyzm3qITjlZtFRKTKqAVZRERE/LQIOLmY7dOBScCLwOpgBiQiIlIcVZBFRESkWjnn9gJfF90euIK/wTl3yHMiIiJ+0FSvIiIiIiIiIqgFWURERHxSk8dli4hIaFILsoiIiIiIiAiqIIuIiIiIiIgAqiCLiIiIiIiIAKogi4iIiIiIiACqIIuIiIiIiIgAqiCLiIiIiIiIAFrmqURmWnlCREQklCg3i4hIdVMLsoiIiIiIiAhgzjm/Y5DDYGbznXN9/I7jcKgMoSESygCRUQ6VITREQhnkUDX1fa2J5a6JZYaaWe6aWGaomeUORpnVgiwiIiIiIiKCKsgiIiIiIiIigCrIkeB5vwOoAipDaIiEMkBklENlCA2RUAY5VE19X2tiuWtimaFmlrsmlhlqZrmrvcwagywiIiIiIiKCWpBFREREREREAFWQw46ZXWhm75rZBjM7YGYrzOyfZlbX79gOh5lNNTNnZn/3O5aKMLMzzOxbM0szs1Qzm29mQ/2Oq7zMbJCZfW5mOwPxLzSz0X7HVRIzO8LM/mdms8wsI/A307aY/Rqa2Qtmlmxm6Wb2pZkd7UPIhyhPGczsFDObZGZrAp/zNWb2rJk18ynsQ5T3vShyzNjAfpOCFGapKlIGMxsQ+D+1N/A3tdjMRgY5ZKki4ZpzKiPc81RFhVteq6hIyIOVESm5syIiIc9WRijkZlWQw8+dQB7wZ+B04FngJuALMwvL99PMLgWO8TuOijKzMcAHwALgfOAi4G0g0c+4ysvMegJfArHA9cAFwDzgRTO7yc/YStERuBjYA3xX3A5mZsCHeJ+PW/HKFQtMN7MjghRnacosA3Aj0Bj4O145/gmcA8w2szrBCLIcylOOX5jZ8cDlQGo1x1UR5SqDmZ0JfAtsBy4DzgXGAQlBiFGqWLjmnMoI9zxVUWGa1yoqEvJgZURK7qyISMizleF/bnbO6RZGN6BpMduuAhww1O/4KlGeBoE/7EsDZfi73zGVM+62wAHgDr9jOYwy/APIBuoU2T4bmOV3fCXEHFXo5+sCfzNti+xzbmD7yYW21QdSgCfDpAzFfc5PDOw72u8ylLcchZ6PBZYA9wDrgUl+x1+B96IusBN4wu94dauS9zwsc04lyxr2eaoSZQ67vFaJMoZ9HqzGcod87qzqMhd6PiTzbDW+19Wam8OyxbEmc87tKmbzvMB9q2DGUkUeBpY65173O5AKGg3kA8/5HchhiANy8L5AFbaXEO1d4pzLL8du5wBbnXPTCx23D/gI70uDr8pThnD4nJfzvSjwRyAaeLSawqmUcpbhIqApIRa7VFq45pzKiIQ8VVFhl9cqKhLyYGVESu6siEjIs5URCrk5Iv5ZCEMC98t8jaKCzOwEvNbvm/2OpRJOAJYDIwNjXHLNbLWZ3eJ3YBUwMXD/pJm1NLMGZnY9cArwuH9hHbbueFdRi1oKtAnTblYQvp/zDsB9wM3OuWy/46mEE/BaXY4OjG3KNbNNZvZXM4v2OzgpvzDPOZURCXmqoiYG7iMtr1VUpObBygjL3FkREZBnK6Nac3PM4ccnfjKzVsADwJfOufl+x1NeZhYLjAUecc6t8DueSmgZuP0Hbzz4GryrWU+ZWYxz7r9+BlcezrklZnYS8D4HvzDmADc6597wK64q0Aive1FRKYH7hkBa0KKpAuZNwvcEXoKf7GswFfcc8F7hloww0xJvvOZrwIN4YzlPBf6C1133d75FJuUWATmnMsI+T1VUBOe1ioq4PFgZYZ47KyLc82xlVGtuVgU5jAWuAH4A5ALX+BxORd0F1AIe8juQSorCG/8wyjn3XmDbtMAse/eY2ZMuMEgiVJlZJ+BdvCvKN+J1STsXeM7MMp1zr/oZ32EwvPEqxW0PO2YWA7yO1z1skHMu1+eQys3MrgD6Al38juUwROFN+HGvc+6xwLavzawxcIuZ3R/ouiihLdxzTmWEfZ6qqAjOaxUVUXmwMsI5d1ZEhOTZyqjW3Kwu1mHKzBLwZihsDwx3zm32OaRyM7M2wL14V3niA12gGgSeLngc6l0Xdwfuvyiy/XMgCWgR3HAq5R94V9bPcs597Jz7yjl3G/AW8N9wnRUd7wp5o2K2Nwzc7wliLIcl8B68hHdV9Dzn3E8+h1RugQt4jwH/BjILfc6jgNjA41g/Yyyn0j7rsXhdGSWERUjOqYxIyFMVFal5raIiJg9WRjjnzoqIoDxbGdWam2vKP4qIEvhjfxfoB5zhnFvsc0gV1R7vqs8kvH/SBTfwlrHaA4T6Wn1LS9hecHW2IhMr+OVo4EfnXE6R7XPxlkkIy3UD8d6b4v4xdgM2OufCqVvZc8AlwEjn3Fd+B1NBTfAm0PgHv/6ct+bg8g1n+hZd+RV81ou2xoTTZ72mi4ScUxmRkKcqKlLzWkVFUh6sjHDOnRURKXm2Mqo1N6uCHGYCV8VexZtw4lzn3GyfQ6qMRcDJxdzA+wJzMrDal8jK7/3A/fAi24cDm51z24McT2VsB441s7gi2/sDmRwcqxRuPgRamVnBxByYWT3g7MBzYcHMHsVb3uAa59xkn8OpjO0U/znfgbdO6cnADN+iK7/JgfvTi2wfjvc5KW4iHAktiwj/nFMZkZCnKipS81pFRUQerIwIyJ0VESl5tjImB+6rJTdrDHL4eRpvko2HgHQzG1Douc3h0NXaObcX+Lrodm9dezY45w55LgR9CkwHxppZE2AtcCEwjPAZD/4U8DbwkZk9gzdW6xy89UEfD9WZEM3swsCPvQP3I8xsF7DLOfcNXvKfBUwysz/iXUG9B++q4sPBjrc4ZZXBzO4Cfg+MB1YV+Zzvcs6tCWK4JSrHe/F1McdkAjtC5XNeVhkCk/5MBB4IXKBciNdt7zrgwRrQEhP2IiTnVEYk5KmKCsu8VlGRkAcrI1JyZ0VEQp6tDN9zc3Usrqxb9d3wZiV0Jdzu9zu+wyybA/7udxwViLce3gWLHUA28BNwmd9xVbAMI/D+ue4C9uO1tNwMRPsdWxl/J8Xdvi60TyO8BJkCZABfAcf4HXt5yxB4T0raZ6Lf8VfkvSjmmPXAJL9jr+DfUxzwd2BT4LO+Erjd79h1q5L3PmxyTiXLGPZ5qhJlDru8Vokyhn0erI5yh0vurOr3uphjQirPVle5qzM3W+AFRERERERERGo0jUEWERERERERQRVkEREREREREUAVZBERERERERFAFWQRERERERERQBVkEREREREREUAVZBERERERERFAFWSJQGY2ysycme01s4ZFnosJPHe/D3HdH3jtmGC/dkWYWZSZPWFm28ws38wmh0BMbQO/u+uq6HwtAmUbVGhbEzN7yMwWm1mamWWa2Roze9nMTipy/MRAPAW3XWb2rZmdXmifkwLPnVpCDOvNbFJVlEdEJNQpNx8e5WblZgmekP5nIHKY6gN3AXf7HUiYuRC4HfgDMAvY7W841eI8YBde+TCzHsBngAFPAfOBHOAo4Apgupk1d87tKHSOXcA5gZ+b4/2+PjWz05xzXwWjECIiYUi5uXKUm5WbJUhUQZZI9jlwq5k94Zzb7ncwwWBm8c65rMM8TdfA/RPOufwKvn40YM653MOMobqdB3zonMs3s1jgPSAdGOSc21Vov+nAc2Z2GV5SLizbOTe74IGZTQM24n2BURIWESmecnPlKDcfpNws1UpdrCWS/T1wf29pOxV0rypm+0QzW1/ocUFXohvN7J9mtt3M9pvZJDNLNLOOZvZZoAvQajO7uoSX7Gpm080sI9BV6gEz+9VnMdCl6Fkz22JmWWa23MxuKLJPQXe1E83sbTPbC8wpo6ynm9ksMztgZvvMbLKZHVXo+fXA/YGHeYHzjyrlfC7Q9eluM1sHZANHm1mCmT1uZksCv4/tZvaRmXUpoQwDzOxVM0s1s61m9qSZJZRRliZmNsfMlplZm8C24Wb2faBsaWa2wsz+r8hx9YCTgMmBTRcAnYC7iiTgXzjnXnPOpZQWj3MuFVgJdCxtv1LK09nM3jeznYEuZBsD76suZIpIJFFuPrRMys3KzRJCVEGWSLYNr0vODWZ2ZBWe9x6gJXA18H/AJcBzwPvAJ8D5wE/ABDPrXszxk4Ev8a6Uvgb8JXAe4JckMRM4Ey8hngl8BDxrZrcWc75XgXV43a9K7LJm3hicT4C0QMw3AT2AGWbWKrDb+cDEwM8DA7dPSjpnwKhAjHcG7rcC8UBdvC9CZwZeKwGYbWbNiznHK8Aa4DfAs8AteL/nksrSFu935IATnHMbzaw98CHe7+ISvC5WjwG1ixx+Jt6XhS8Dj08B8oCpZZSzVIFk2RrYW8lTfAy0wvtdDcd7L7PQ/2kRiSzKzYUoN/9CuVlCh3NON90i6oaXFBze1cJGeP8Uxweeiwk8d3+h/e/3PgqHnGcisL7Q47aBY6cV2e+9wPYrCm1rCOQCfy36OsDdRY4fB+wHGgQe/wXIBDoVs18yEFOknI+X8/cyH1hVcHxgWzu87kmPFdr29+J+HyWc0+El3Vpl7BcNJAbK+bti3qu/Fdn/Y2BlMb/764BjAq/5KZBYaJ8LA/vUKyOWN4G3Cz2eAmwrZr+owN9Lwc2K/G1sLvTcEcDYwOvfEdjnpMDjU0uIYz0wKfBzk8C+5/j9+dFNN910q44bys0l/V6Um51ys26hddPVD4lozut68yhwVeHuSodpSpHHywP3nxV63T3ATryrlkW9VeTxG0AdvCvGAKfjdcdaZ97MnjGBK6CfAY2BbkWOf7+sgM2sNnAc8KYrNAbJObcO72rvkLLOUYqpzrkDxbzmxYFuVnvxvpCk45WzuPeh6JXwxUCbYvY7EfgG7wrzOc65jELPLcL7QvGGmV1oZs2KiSkO7/c7ufDm4ovFp4HzFdyuLfJ8q0LPbQIuw2tteLKE85VmN7AW+JeZXW9mnSpxDhGRsKDc7FFu/iUm5WYJKaogS03wOJACPFBF59tT5HF2KduLG6uzo4THBV2pmuElm5wit7cDzzcucvy2skOmIV6yKW7f7XhX8yvrkHOa2dl4V4OX4SWn/kBfvNkli/udFB1DlIXXFayoM/AS+VhXZLIR59xqvO5PUXjdwrYHvgQU/oJxClCLXyf9TUBTM6tV5LVuDcR8DsXbGXi+D97V/gbOuQfdwclTCuKLLuH46IJ9nHMOOA2vJeGfwEozW2tmN5VwrIhIuFNuVm4uoNwsIUUDzCXiOefSzOyfeFer/1PMLpngXcF0zmUX2l402VWVJLwrkoUfA2wJ3O/G+wd/ewnHryjy+JBJTIqxJ7BfcWOMmnN4y0UU9/ojgdXOuVEFG8ybkfJwkj14XdyGAVPMbIRzbuavAnFuOt6yD/HAILwvXp+YWVvnXDLe2LJvnHN7Cx02Da972OkUuuLvnFsViLttCbHkOOfmlxLrzsB9y6JPBFodmlHoC5lzbi1ea4rhdVX7LfCMma13zhVtGRERCWvKzYBys3KzhCS1IEtN8Qxekvt7Mc9tCNwXdKPCzBoAx1dTLBcXeTwSb3KOJYHHU4EuwEbn3Pxibvsr+oLOuXRgAXCRecs9ABCYIOV4vK5RVSmRg1dpC1xJyVdsyysH7/f3OTDVzAYXt5NzLss5Nw14GG8ikHaB5HY2v+7CBfAu3iQk/zazpocZX2Gr8MZC/aaY584C4vCWqvgV51kE/D6wqUfRfUREIoRys3KzcrOEHLUgS43gnMsysweA54t5egqwDxhnZn/F6z70J7zEWB2uN2/piHl43Y6uw5uYZG/g+cfxZnr8zswex7sqXRsvMQ92zp1bydf9C173pY/N7Bm87lB/wyv7o5U8Z0mmAucF4v8Y6A3cRuVnkfyFcy7HzEbizRA6xczOdM59Y2Y34nV/+xSva1YTvNk2t+J9wRkAtAA+KHK+bDP7Dd44skVm9jTee5ONdwX/gsCuFfry45xzZnYP8IqZvYs3K2oqXrevP+NdHf8MwMx6Av/F6/q2Gu/Lyii8LzLTKvK6IiLhQrkZUG5WbpaQowqy1CQTgD/irav3C+fcXjM7Cy/5vYV3ZfEB4FS82Q6r2rnA//CS4j68K+cPFopnn5kdjzepxF1445/24iXjdyv7os65qWZ2JvBXvHJmA18Df3LOba3seUswDm8SlNHAGLykdjblmLSkPJxzuWZ2Gd54pk8D79+PwAi8cULN8MZOzQAud84dMLPzgPnOuc3FnO+nQCL8Pd64rPvwethsCZxjiHPu20rEOcnM9uEtszER7wveBrz3/8HA+CbwxpptDLz+EXhdCxcDZznnFlT0dUVEwohys3KzcrOEFDv4NyAiErnMbDnwinPuIb9jEREREeVmCU2qIIuIiIiIiIigSbpEREREREREAFWQRURERERERABVkEVEREREREQAVZBFREREREREAFWQRURERERERABVkEVEREREREQAVZBFREREREREAFWQRURERERERAD4f+6VOYDeRFqWAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.rcParams['font.size'] = 16\n", "plt.rcParams['legend.fontsize'] = 14\n", "plt.rcParams['axes.linewidth'] = 2\n", "plt.rcParams['lines.linewidth'] = 2\n", "\n", "fig, (ax_weak, ax_strong) = plt.subplots(1, 2, figsize=(16,6))\n", "\n", "t_total_no_init_or_file_io = weak_scaling_profiling_data[\"t_total\"] \\\n", " -weak_scaling_profiling_data[\"t_init\"] \\\n", " -weak_scaling_profiling_data[\"t_nc_write\"] \\\n", " -weak_scaling_profiling_data[\"t_sim_init\"]\n", "\n", "t_total_halo_exchange = weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"] \\\n", " +weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"] \\\n", " +weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]\n", "\n", "#ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", "# speedup(t_total_no_init_or_file_io[0], t_total_no_init_or_file_io), label=\"Total (no init or file I/O)\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_full_step\"][0], weak_scaling_profiling_data[\"t_full_step\"]), label=\"Runtime (except init and file I/O)\")\n", "ax_weak.locator_params(axis=\"x\", nbins=16)\n", "\n", "\"\"\"\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"][0:].to_numpy(dtype=\"int\"), \n", " speedup(t_total_halo_exchange[0], t_total_halo_exchange[0:]), label=\"Halo exchange (D/E/U)\", linestyle=\"dashed\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_total\"][0], weak_scaling_profiling_data[\"t_total\"]), label=\"Total\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"]), label=\"MPI send/recv\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"]), label=\"Download (GPU->CPU)\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]), label=\"Upload (CPU->GPU)\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_nc_write\"][0], weak_scaling_profiling_data[\"t_nc_write\"]), label=\"Write to file\")\n", "\n", "ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(weak_scaling_profiling_data[\"t_init\"][0], weak_scaling_profiling_data[\"t_init\"]), label=\"Init\")\n", "\"\"\"\n", "\n", "ax_weak.plot(nproc, np.ones(len(nproc)), label=\"Ideal runtime (constant)\", linestyle=\"dotted\")\n", "\n", "ax_weak.set_xlabel(\"Number of ranks/GPUs\")\n", "ax_weak.set_ylabel(\"Efficiency\")\n", "ax_weak.legend(loc=\"upper right\", bbox_to_anchor=[1.0, 0.95])\n", "#fig.show()\n", "\n", "##############################################\n", "\n", "#fig, ax = plt.subplots(figsize=(8,6))\n", "\n", "t_total_no_init_or_file_io = strong_scaling_profiling_data[\"t_total\"] \\\n", " -strong_scaling_profiling_data[\"t_init\"] \\\n", " -strong_scaling_profiling_data[\"t_nc_write\"] \\\n", " -strong_scaling_profiling_data[\"t_sim_init\"]\n", "\n", "t_total_halo_exchange = strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"] \\\n", " +strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"] \\\n", " +strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]\n", "\n", "#ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", "# speedup(t_total_no_init_or_file_io[0], t_total_no_init_or_file_io)*4, label=\"Total (no init or file I/O)\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_full_step\"][0], strong_scaling_profiling_data[\"t_full_step\"])*4, label=\"Runtime (except init and file I/O)\")\n", "\n", "\"\"\"\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(t_total_halo_exchange[0], t_total_halo_exchange)*4, label=\"Halo exchange (D/E/U)\", linestyle=\"dashed\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_total\"][0], strong_scaling_profiling_data[\"t_total\"])*4, label=\"Total\")\n", " \n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"]), label=\"MPI send/recv\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"]), label=\"Download (GPU->CPU)\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]), label=\"Upload (CPU->GPU)\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_nc_write\"][0], strong_scaling_profiling_data[\"t_nc_write\"]), label=\"Write to file\")\n", "\n", "ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(strong_scaling_profiling_data[\"t_init\"][0], strong_scaling_profiling_data[\"t_init\"]), label=\"Init\")\n", "\"\"\"\n", "\n", "#ax_strong.plot(nproc, amdahls_speedup(0.9, nproc), label=\"Amdahls 90%\", linestyle=\"dashed\")\n", "#ax_strong.plot(nproc, amdahls_speedup(0.5, nproc), label=\"Amdahls 50%\", linestyle=\"dashed\")\n", "#ax_strong.plot(nproc, amdahls_speedup(0.1, nproc), label=\"Amdahls 10%\", linestyle=\"dashed\")\n", "\n", "#ax_strong.plot(nproc, gustafsons_speedup(0.9, nproc), label=\"Gustafsons 90%\")\n", "#ax_strong.plot(nproc, gustafsons_speedup(0.5, nproc), label=\"Gustafsons 50%\")\n", "#ax_strong.plot(nproc, gustafsons_speedup(0.1, nproc), label=\"Gustafsons 10%\")\n", "\n", "ax_strong.plot(nproc[3:], nproc[3:], label=\"Ideal runtime (linear)\", linestyle=\"dotted\")\n", "\n", "ax_strong.set_xlabel(\"Number of ranks/GPUs\")\n", "ax_strong.set_ylabel(\"Speedup\")\n", "ax_strong.legend(loc=\"upper left\")\n", "fig.show()\n", "\n", "fig.savefig(\"dgx-2-scaling.pdf\", bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/cluster/projects/nn9882k/martinls/.conda/envs/ShallowWaterGPU_HPC/lib/python3.7/site-packages/ipykernel_launcher.py:45: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "###\n", "### Saga\n", "###\n", "\n", "plt.rcParams['font.size'] = 16\n", "plt.rcParams['legend.fontsize'] = 14\n", "plt.rcParams['axes.linewidth'] = 2\n", "plt.rcParams['lines.linewidth'] = 2\n", "\n", "fig, (ax_weak, ax_strong) = plt.subplots(1, 2, figsize=(16,6))\n", "\n", "ax_weak.plot(singlenode_weak_scaling_profiling_data[\"n_processes\"][0:4].to_numpy(dtype=\"int\"), \n", " speedup(singlenode_weak_scaling_profiling_data[\"t_full_step\"][0], singlenode_weak_scaling_profiling_data[\"t_full_step\"][0:4]), \n", " label=\"Single-node runtime (no init or file I/O)\", marker=\"x\")\n", "\n", "ax_weak.plot(multinode_weak_scaling_profiling_data[\"n_processes\"][0:3].to_numpy(dtype=\"int\"), \n", " speedup(singlenode_weak_scaling_profiling_data[\"t_full_step\"][0], multinode_weak_scaling_profiling_data[\"t_full_step\"][0:3]), \n", " label=\"2–4 nodes runtime (no init or file I/O)\", marker=\"o\", color=\"green\")\n", "\n", "ax_weak.locator_params(axis=\"x\", nbins=4)\n", "\n", "ax_weak.plot(nproc[0:4], np.ones(len(nproc[0:4])), label=\"Ideal runtime (constant)\", linestyle=\"dotted\", color=\"orange\")\n", "\n", "ax_weak.set_xlabel(\"Number of ranks/GPUs\")\n", "ax_weak.set_ylabel(\"Efficiency\")\n", "ax_weak.legend(loc=\"upper left\", bbox_to_anchor=[0.0, 0.8])\n", "\n", "##############################################\n", "\n", "#ax_strong.plot(singlenode_strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", "# speedup(singlenode_strong_scaling_profiling_data[\"t_full_step\"][0], singlenode_strong_scaling_profiling_data[\"t_full_step\"])*4, \n", "# label=\"Single-node (no init or file I/O)\", marker=\"x\")\n", "\n", "ax_strong.plot(multinode_strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n", " speedup(multinode_strong_scaling_profiling_data[\"t_full_step\"][0], multinode_strong_scaling_profiling_data[\"t_full_step\"])*4, \n", " label=\"Four nodes runtime (no init or file I/O)\", marker=\"o\")\n", "\n", "ax_strong.locator_params(axis=\"x\", nbins=16)\n", "\n", "ax_strong.plot(nproc[0:], nproc[0:], label=\"Ideal runtime (linear)\", linestyle=\"dotted\")\n", "\n", "ax_strong.set_xlabel(\"Number of ranks/GPUs\")\n", "ax_strong.set_ylabel(\"Speedup\")\n", "ax_strong.legend(loc=\"upper left\")\n", "fig.show()\n", "\n", "fig.savefig(\"saga-scaling.pdf\", bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bar_width = 0.8\n", "\n", "share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])/profiling_data[\"t_total\"]\n", "share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]/profiling_data[\"t_total\"]\n", "share_simulate = profiling_data[\"t_step_mpi\"]/profiling_data[\"t_total\"]\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_init, color='red', edgecolor='white', width=bar_width, label=\"Init\")\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_mpi, bottom=share_init, color='orange', edgecolor='white', width=bar_width, label=\"MPI\")\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_simulate, bottom=share_init+share_mpi , color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n", "\n", "plt.xlabel(\"Number of cores/GPUs\")\n", "plt.ylabel(\"Share of normalized runtime\")\n", "plt.legend(loc=\"upper left\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bar_width = 0.8\n", "\n", "share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])\n", "share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]\n", "share_simulate = profiling_data[\"t_step_mpi\"]\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_init, color='red', edgecolor='white', width=bar_width, label=\"Init\")\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_mpi, bottom=share_init, color='orange', edgecolor='white', width=bar_width, label=\"MPI\")\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_simulate, bottom=share_init+share_mpi , color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n", "\n", "plt.xlabel(\"Number of cores/GPUs\")\n", "plt.ylabel(\"Runtime (s)\")\n", "plt.legend(loc=\"upper right\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bar_width = 0.8\n", "\n", "share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])\n", "share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]\n", "share_simulate = profiling_data[\"t_step\"]\n", "\n", "\n", "plt.bar(profiling_data[\"n_processes\"], \n", " share_simulate, color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n", "\n", "plt.xlabel(\"Number of cores/GPUs\")\n", "plt.ylabel(\"Runtime (s)\")\n", "plt.legend(loc=\"upper right\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. ~~Sjekk opp behandling av randvilkår. Fungerer ikke som det skal. Offset-problematikk. Få periodiske render til å funke med 1 (først hele domenet, så indre og yttre domene) og 2 subdomener.~~\n", "2. Sjekk overføringer east-west. Kan vi droppe? – Ja, men se punkt 1.\n", "3. ~~Sjekk IC-bug? Bare to felter i K-H?!~~\n", "4. ~~Kjør lenger kjøring~~\n", "5. Sjekk på OsloMet-boks!\n", "6. Sjekk reproduserbarhet av løsning\n", "7. Ny profilering og sjekk av parallelkjøring" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.7.12 ('ShallowWaterGPU_HPC')", "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.7.12" }, "vscode": { "interpreter": { "hash": "cb8fa661d82d1ec49918052345889e962ab1d5f5f5cbd9596ba31c436e222a26" } } }, "nbformat": 4, "nbformat_minor": 4 }