{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Overview\n", "\n", "This a notebook that inspects the results of a WarpX simulation.\n", "\n", "# Instruction\n", "\n", "Enter the path of the data you wish to visualize below. Then execute the cells one by one, by selecting them with your mouse and typing `Shift + Enter`" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Import statements\n", "import yt ; yt.funcs.mylog.setLevel(50)\n", "import numpy as np\n", "import scipy.constants as scc\n", "import matplotlib.pyplot as plt\n", "%matplotlib notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read data in the simulation frame" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/mthevenet/anaconda3/lib/python3.7/site-packages/yt/units/yt_array.py:1394: RuntimeWarning: invalid value encountered in true_divide\n", " out=out, **kwargs)\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ds = yt.load( './diags/plotfiles/plt00200' ) # Create a dataset object\n", "sl = yt.SlicePlot(ds, 2, 'Ex', aspect=.2) # Create a sliceplot object\n", "sl.set_xlabel(r'$x (\\mu m)$') # Set labels x\n", "sl.set_ylabel(r'$z (\\mu m)$') # Set labels y\n", "sl.annotate_particles(width=(10.e-6, 'm'), p_size=2, ptype='ions', col='black') # Plot particles species=ions\n", "sl.annotate_particles(width=(10.e-6, 'm'), p_size=2, ptype='electrons', col='black')\n", "sl.annotate_particles(width=(10.e-6, 'm'), p_size=2, ptype='beam', col='black')\n", "sl.annotate_grids() # Show grids\n", "sl.show() # Show the plot\n", "\n", "#############################\n", "### OTHER USEFUL COMMANDS ###\n", "#############################\n", "# # List all fields in the datasert\n", "# ds.field_list\n", "# # Get All Data from the dataset\n", "# # Then get some data. \".v\" converts arrays from units-aware yt arrays to numpy arrays.\n", "# ad = ds.all_data()\n", "# Bx = ad['boxlib', 'Bx'].v\n", "# # Get All Data from the dataset, on a given level and given dimension.\n", "# # Then get some data. \".v\" converts arrays from units-aware yt arrays to numpy arrays.\n", "# # This is similar to the 2 lines above, except that F has the proper shape.\n", "# all_data_level_0 = ds.covering_grid(level=0,left_edge=ds.domain_left_edge, dims=ds.domain_dimensions)\n", "# Bx = all_data_level_0['boxlib', 'Bx'].v.squeeze()\n", "# # particle \n", "# # CAREFUL! For the moment, 2d WarpX simulations use (x, z) spatial coordinate \n", "# # but they are stored as (particle_position_x, particle_position_y) in Yt\n", "# x = ad['beam', 'particle_position_x'].v\n", "# z = ad['beam', 'particle_position_y'].v\n", "# # For 2d simulations, WarpX and Yt use (ux, uz)\n", "# # ux/c should be the nirmalized momentum\n", "# ux = ad['beam', 'particle_momentum_x'].v\n", "# uy = ad['beam', 'particle_momentum_y'].v\n", "# uz = ad['beam', 'particle_momentum_z']\n", "# w = ad['beam', 'particle_weight'].v\n", "# # Set figure size\n", "# sl.figure_size = (9, 7)\n", "# # Save image\n", "# sl.save('./toto.pdf')\n", "# # This returns the domain boundaries\n", "# sl.bounds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read data back-transformed to the lab frame when the simulation runs in the boosted frame (example: 2D run)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# read_raw_data.py is located in warpx/Tools.\n", "import os, glob\n", "import read_raw_data" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# For the moment, the back-transformed diagnostics must be read with \n", "# custom functions like this one.\n", "# It should be OpenPMD-compliant hdf5 files soon, making this part outdated.\n", "def get_particle_field(snapshot, species, field):\n", " fn = snapshot + '/' + species\n", " files = glob.glob(os.path.join(fn, field + '_*'))\n", " files.sort()\n", " all_data = np.array([])\n", " for f in files:\n", " data = np.fromfile(f)\n", " all_data = np.concatenate((all_data, data))\n", " return all_data" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available info: t_snapshot field_names xmin ymin zmin xmax ymax zmax nx ny nz x y z\n", "Available fields: ['Ex', 'Ey', 'Ez', 'By']\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAADNCAYAAACmVDdwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsvXucZMlV3/mNzJtZWV3VPd3qHqmHeSCBBvBIuEfSrCSvwcvLaIQXjY0QFlob4c/w0YIl42WtXUvGBiwQSDaGDyzPAWaR/LEZBsnAYAvJWIBhbYE0EmqkkSwYRq+Wppnunq6equ7KqryVsX/cOPeeezLuzaxHd1d2x68++al740bEjUfmOXEeccJ570lISEhISGhC52o3ICEhISFhfyMxioSEhISEViRGkZCQkJDQisQoEhISEhJakRhFQkJCQkIrEqNISEhISGhFYhQJCQkJu4Rz7n7n3BPOuY/OkPcLnXPvdc79qXPu951zt1yJNu4GiVEkJCQk7B6/DNw9Y94fBd7uvf+rwJuAH7lcjdorJEaRkJCQsEt47/8AeFKnOee+2Dn3bufcB51zf+ic+7Lw6A7gveH694B7rmBTd4TEKBISEhIuD+4D/pH3/gXA64GfCekngZeH678DHHTOHb0K7ZsZ2dVuQEJCQsK1BufcMvA/A7/mnJPkhfD/9cBPOee+HfgD4HNAfqXbuB0kRpGQkJCw9+gAK977O+0D7/3ngW+CkqG83Ht/4Qq3b1tIqqeEhISEPYb3/ingk865VwC4AifC9THnnNDeNwL3X6VmzozEKBISEhJ2CefcrwDvA77UOXfKOXcv8L8B9zrnTgKPUBmtvwr4hHPuz4BnAG++Ck3eFlwKM56QkJCQ0IYkUSQkJCQktCIxioSEhISEVlzXXk/Hjh3zz3zmMwHwvvgAiDebpOn0Tic8t5lRabqQzuNcPb/JarWA0WJN72goZPtgmy11l32yBXS9ofNN2aSeTkfVNR5Pti3UMx4Xj6WOTic8QpX1vqzUuw55XiVlWcgriVnGlu8wHkO3Cx3GVcUJCbvEBz/4wbPe+xt3U8eznfOXWp4/Du/x3s+6w/uK4bpmFM985jN5+P3vZ0xBgPLgyZyFUZE0nT4YQD8bT2aWArqgQPJkWXk9DsKczpobT2pbrMO4+R2RQuOsP9EH22ypO8ugk29OdlrXOxhAlrGZd6LZpJ7BQNU1HE62bTBgnPUZDovHo1GRvLgYxpdQdm2t+J9lsLzMZnaA8+dhY6NIOnYs5D17tsh37BhP5QdYX4eDB+EAl6r3KeG5ZCAJCduA63Y/vds61oHXtjz/53Bst++4HLiuGQVQMgkNTdtitHhMh06WTVLKNiKuuU+4tgQ89i6NvsxWjPprhpVNTqtkFaI8GkGvF8nexCgibV9fL5K3tooVfDS/5bQyboGJDYf1Vw0GVAxGHpZMqmASa2shn7xDGMrhw6yvF3kOHoyMS0LCVYZjPvX91/2vyK6I7cpbCJKmN8MhZFmHLOtXK2eNNuLU8iz2SK/4ow9biGGxcu7UsgpzaG2E1NnCubKsqGs0mmQSeQ79Ka+ZGYY5RZ9Lg9Q4DAbA8Lr/eifsQ8zjt3Ie23zZ0KhGEZVPULtAwSwKNVREspCCuuIIMZ9lsTuRxyY0cZfI4xjtrxVXqqFGBpTnZFm/zNbIT/QAyviY+uSxSHAlE9PcUV4SykrS0lJQAZp3ba3A8nJQfUkjExL2CZJEMafQdN4uTmu2CCiJZF3jE9RQkqAr0C+Z8v4p9B4IKi/GdRVOW8UUTK6QfqZrYkqVWky0UpA6bR/q/enQ0VygpV0ikTQyxcAs8mF1u7hInQEtL5dMvJAmhjXbRLJLJOwHOOaT6M5jmxMSEhLmFkmimGPoxWkpTUQ8djqMGQzqXj9Z1q9PfqhIDOWyMNar2g7jcrW7HXur9t4hqICmrZbleT8z5Yl5Q4UVuG2UydjJsppUIY+0eaMmbek6DMTWEYUx0oj0URq9VZ6hkjhYyctXNkpmCQlXGEmimFPEVE5ZFnmg/lt1TsksrMomEPIJIhyI1HaIlSXw5SsixL+sN6Y2UlSziWnU2hpTcRlm0fC4GC5rw6n9L8ZHM4ksA4aT7Ramu7VVmS0Y1rm7qKZmGdfELBKuBhKjmFNoGiYEqCQgsVV1IHyd8DzLOsqLM3hCBeO3MJQYz5motwktrq72ulEyidVvMjeZJPpZJFOtnn7UpCFpE+VnFZ+MiNfq8RQwIZUoN9z+df9NT9gvSKqnhISEhIRGzKtEMY/Mbc+gw0+Iyqm2+1nromIb0UqpobxlOKTwvmmQBPJcqXyaNrbZQpFb3ZwWB6VGtVGsXbG6JlRe1lah1DdNks5ExeqhqJOmtRFa7BhGUomp6RIS9gs6LZ/9inlkbnsGYRQ1lVOTLkfSi912E3sVJojsoFPWKfr+ugqqU30xZlANacSyT2h1mjhIzZe1vi2uVY1l6wsZbPgTIeZlecs9VMV5XuUXZhG1ryjVU7erqtAcOs/p9SqbkOxvyQbVBslkk0i42kgSxZxCYjfVdljbfRCSJohIAvaxRKDQnk0T1VrlfuOSfDJLTMCJolXcaOxOiQni2pK5dcU/Qztq+QVqwHo9s7M8soGvLK4cDywkLUkeCVcasuFu3iSKPWmbc+5u59wnnHOPOufeEHm+4Jz71fD8j51zz1TP3hjSP+Gce8m0Op1zrwtp3jl3TKU759xPhmd/6px7/vR2KymiiYDNRI0LaLq1vl4xCxDJomFTmWUQU94XdSCaNWODKgsqQj9RX4PaLVaPViOV3mMWkYGoSQq1CuJFhkOijKLXE4luUDZMhngnjGFM56p95P0J1xayls9+xa6/hc65LvDTwEuBO4Bvdc7dYbLdC5z33j8b+HHgraHsHcArgecAdwM/45zrTqnzvwFfB9hIji8Fbg+f1wA/u9u+JSQkJOwlditROOfud8494Zz7aMPzbS+YZ8FeLFdeCDzqvX/Me78JPEB1NqzgHuBt4fodwNc651xIf8B7v+G9/yTwaKivsU7v/Z947z8Vacc9wNt9gT8CDjvnbmpruHO0q0ViK/GoWFBBPxqN6iooWSuWMYp0oRl0SbGmzixNtDRU2woa1Ue23kibJozSsTLmvdG8Wk8X8sf8Cmr15Xkt9pR2GJjVI7dpVX+1oKWKJHFcGxAbxS4kil+mWFQ34bIsmPfiW3Yz8Fl1fyqkRfN473PgAnC0pewsde6kHXV4HydibQQ7amyYtPOKLn00MtWFmzJonX23rizAhkLftl2ioT8z2zhiTMz0P8ZgJpwDVFlN4LrdYrzKDXqRMS52xBdJMqaxjZC62Vqt19TXeSa4MUai0xP2J3bDKLz3fwA82ZJl2wvmWbAXajEXSbNHrzXlaUqPfdMjx7ltux04515DwWm57bbbJkvMaI+I6cfFHhETTAoG0qFjpZMmGA8hCyHMNmz4hNeQbUykTu15JLaCaod6cxMLQtxshogmmgfRMzFiGx3zvAgySIetrUik2ZAnU4c1iU+XDrcew7VEWJuYhYSMSZ5fVxczRI895px7WN3f572/bxuvaFowP76NOiawF4ziFHCrur8F+HxDnlPOuQy4gYIrtpWdVudO2kEY9PsA7rrrLh/dVtxEXA0Bsz9Ga5fWRLwkXlbNZFfPDe/WRbarHppAVsWhmqo2mlKffSTSQeyddhz1cMr1RARbo2/L835zc/IqBHph0J5kIOImq2NtXQ+IMZDENK48ZnCPPeu9v2uXr7CYtsieir34pXwAuN059yznXJ/COP2QyfMQ8Opw/c3A73rvfUh/ZfCKehaFXu39M9Zp8RDwbcGY82Lggvd+V1w0ISEhYa9xmd1jZ1owbxe7bluwObwOeA/wceBB7/0jzrk3OedeFrL9EnDUOfco8H8CbwhlHwEeBD4GvBt4rfd+q6lOAOfcdzvnTlEMwJ86534xvONdwGMUBvFfAP7hTB2wq/mYTr5FfdOk+46t+vMcxlm//j595Kdtj3l3mzTRukFuRtiT6qI2hgYbTa9XP1diQpUUkcpi5ggxRI/pVFKF8jPWzSnz1FRPVT2NUloCQM2uIfcJlxd7YMyehsuyYN6Ttnnv30VBqHXa96nrIfCKhrJvBt48S50h/SeBn4yke9rPLZ8NWiUk9wJF0bSBucnGK+dSW7rfj6lWzElu0QqnoHHfwjbqkvbO8toYYan1146jqtgefoQqIln7GVGGV6+yT4fKOKQDMRY6+SI9q7ZVpACBBnYeky3j8iKmG5q5rHO/AnwVhS3jFPD9QA/Ae/9zFDTzGygWzJeAf7Crxgakn4xGTIqwVF7p920RC62rr6+cs/oRobJqtsxC2Sc0xJ5gJYBaOy10nVm2E4Fjog4LzSQmDOERSamTZeUZGTHHqhqjUOXF4F7yoQaupm1C0wzaCQW0LSMZwPcejkDVdwjv/bdOeb43C2aDxCgSEhISrhDmNdbTPLb58iDm0xpbqeY59kCiWPGZ1OMxFZRILSZgXxu2oZ1qRPTc6pjYEXELtvdlWqxh1h6UZeEwpUKqWF9XkpgdEzq1IZMs5UjFXGRVZnFhTqqn2RCzXyTpYveYR7k2/WTaEFM/RR7Lf723wWhL4tD6KFE/qQL6JNYZPF6nY0omvadhuwRhaj81rIpvMAAK4i5qtdLeIvlC7CbLgGM2n5qLbM1eUqQndcr2ELNFpTHcGeZVophH5nbl0aLQF08k7Y1kj/aMeiTpDOXZnpPvEv4xiz1hph9ulrV6tzQS/IjtRAc6jHkw1crFPMtUx2Qc81zZOvRYZFm5O1tQjkmLl5h+r4yPZEmEbmdInlK7g2v57FfMI3O7PND6DJ0Wy2cQMy7rcxkmiuh3yUMxbkPN+Bpzie126xvkKu1MJ/6znSLa2N3RE4ReXjLxsNl7CVo2dwmTUPVZaSLLqM7OFu4wHAY1Vb9WVQ15PbaT9nwqMs+u0jPVXhHshRrxcqKNMSQpYzp2a8y+WtjnX8uEhISEawczhPDYl7i+GYUEBYztndBLuwkX2SqMROwMBy1ZNNoqYvsLjO4+y/qlAVY3qdttcY2VumPG+Mhy1WZtVT1pqA53zHNZdU4IISJJaF2aerkein42rhKURMFgUNog9Ps6SkrTeymsQVveI265FldKcmhC0/v3o6RhXWl1epIsmrEPp3Iq5rHNewdvQqBoymapXOSXGnOUEsSYRfTHoym1UfNIUrcbZxbRmEq63rZ7tskkrItXUxrUGKn872dUndCdMUxiMAh8QRuxhVvOAqViEpuH9ooSjyjNJHbCHPaCoWyH+Mfe17QeuBpItorZMK/G7Hls897BMgqNJvuESd/amvR+EtiggOUGMluXXY2rFXOWVcZdTStj4TLK1bN+aUO7Y91stadYxmAJtzxX1uYar9UGbGEUy8tVn6k20nXyzfrZ5FbSGkw2x0p90eCAql3TCOyVkCymvWMaA4h97/YD09BI0sUk9rPRugn77GuVkJCQcO0iGbPnEdpGAZPL1IidwobnFlgtDNQ9n6RsR6+QjatqkxduRCtVkzQ0ynfYCkx/2hy6yhVgkzSh7TqxRhLph0gS+iBxk2lx0aidpE4pY9qvV9TWl6k2XupGx3yywkoTrqTdosHTt/a8wQFtoszVVE3FJIkkXSRj9nzCnnAHzYr7QLQ0jdSGbPvjjdHQXFxYzS/X0k2pW6uuut2CiIrWRvLE1EVtzEIzphgBmfghNzEJu7kjywpVUjD26+RSlaTVTublYoroZ+PKLVZTckXZxXU4SgDLvNX4lS6ykWyx4jFcbmYR+95Mez5N5aS/T1eKaSRbRTuSjWIeMW4Jox251t48o1HdPiHp1i4teeo/1klD6nBYP2kuz2Fjo2qGPnlO6HTsx18xrMLWYQn/rld01s4gUPtAtNdRllEQfssodJvyTQaD0Na1tarTWprQDGM4JMsOTLFRFJelQdtIO5rwtkmHUscssIc/yX6XVg+1GTBhj1HpAisUW4ZwNe0ZySuqjnlkpYlRxCitEClF8cd0avRKslotTOwHrfeWxX70wng2NuIrRtsczVzkuf5fL9tyotk06mPzaiZhz9CQZyrURilNrK1NEnxTZydTA6l3qltVVfhkg3ZCp6PFlowir29kjGnQLFOInfw3q3TR9p2Aevv1e3bCWGKC3yxSxNVSTQmuN6aRJIqEhISEhFYkRjGPsKqniNpJq5u0bUBW/7FVqfbs1FLAwkLdAC1ltBqrKa5TltWPq5C8guBp2oiJVWOTLiImYcWkCStR6PLDIR1RRUlekSqsFLK2Fp+DLJsso9qj1VsTUImlenBQHwArOcgcRKqY6X47aLJj2bq1+nJWKcMOr6S1qSlj79wLpJhQcczjSCRGAZO/IKVusszAqss1wbaBAfVpcfqHKjYHIUyWDsd04hKRdmBULpqOWkZiulO9TP/HPGszXscYhe6YHgxdTqueYvXKdZbB4cNVx6y6SjoXmJDslcgyIGeCOuq9FGLgF4Il9h+Bvo8NUdN1bPjsdRMiX7nyWpfX3ZqlzjYmFvte7Ibp7RTXq1dUkijmEbLcjHkIhTShUevrk6t+LWFYwzYUxEeYgmUa8hqrso/ZKrKszlSags0Oh7C0VLiZtqKJWcSojN5NvbZWEf319eK5jiioOyf1r63BykpVDirLvE6DOpPQ0obtZMmk+jMxQTFoi71G7nWXYyHd7X/NwGO2i1mgJYNeb9K7TfdHhDLN/HX03DbEeLitX+fT97otszC8hO3BuZYtd22bgK8i0lcgISEh4UrBuXZuLwuwfYbrm1GMm8Vc6+W0tTUZqkhLEnrRG4OWAmRVqVeSti6rzterytGokhrk3q78olKFFV/aYFVOIk1YNVKWFcYXvSHOqp1WV+tikohIMhBbW1WQJy1J6AnQ9Yf3d2KHU9SW0FXMKeWQVRtn2Zti97JYV2U7ZLNo7mIr8ti1SJ4CGRY7/zEBUP+X53po9abPWaY8SQ+XGc7N5SDPX4v3EpoKGCO2VTlplbkQdauCgriaotcraF9M9ST/dT1WpQV1RjMYFMRlYaHqhiU2vV69TKn7nUXtpBuhmcT583DxYp2LLSxMUlCrrhJGIe/R+hfp4PJyoXrS6iZdjz4jVU/GDLqYGCO3phRZyGkmop83Dd2seyza1ExWY6fnWRAzZlvVVAxaRSYbNDVmtWfI/RzSuP2FTqf9O7u6euXasg1c39Nu3VzUr8BKEjE7rtAwa6Noki4so9ARYLW0YI3cekGdZRXNXF6urzb1e/W7ypDdTQ20ymxNpMXGsLpa/NeMwi6Zt7bqFFcYhHBb6bSGNuRoDyj9f329yCfMRk+C3nnYgKIKz0fOnOTO4ycYDl051r1e3EFBM2vpzjTJoon3NkkUQuiF4UPcK84ygtjXVuoaqBAl+iws24emcbLtj6Un7ALTVE/7FHvCKJxzdwM/AXSBX/Tev8U8XwDeDrwAOAf8Xe/9p8KzNwL3AlvAd3vv39NWp3PuWcADwNOADwF/33u/6Zz7duBfA58Lr/0p7/0vtjZc/+IUZRVvp9GoTo+mMQxNSDSBgUkjppUsrEGxiaZrzyZZUFvjtkgvwkgaqaC83DIJyyhWV+HcuYphaOlAq4wGg6qjGxuTaiorScg7brihaOzKyqR+TvLZ82WXlyclighFk6584sJJvvP3Xs79L3knt/buLJuljdn6Ndb9Wc9Fk1FbD6M0U6B3acdOFIxdLy9XasY2om1VVVKPbr9MkR3GaUygSYq4nNKF9n665jyh9kD1NAO9/Xa2SwunYNcuvc65LvDTwEuBO4Bvdc7dYbLdC5z33j8b+HHgraHsHcArgecAdwM/45zrTqnzrcCPe+9vB86HugW/6r2/M3x2NTAJ1xbueNoJfuFvvpPnHD1xtZuScD1DVE9NnymYkd7CHtPCvVgTvBB41Hv/GIBz7gHgHuBjKs89wA+E63cAP+UKH7F7gAe89xvAJ51zj4b6iNXpnPs48DXAq0Ket4V6f3ZHLbeHNIePLHQ3NibV7aIul2fWwN0mDQjM60rNS8y4beuR/CJFLC9XLrFa0lhdLZ4tL0M/JvLoayvOaJFJVE/6oxujG6L1Huvrk/aMmLFb0iXGk9xriULyS/mFhSK/7DKU90rnFaToxobj2Ut3srlZn0tZVes5hXaHBatuspKE7oY8s9fSbCuIxVRPYo/a2prcWKnVTVtbk+ouKyzaqdZ2i1i5GJIqahfYvUQxC73dc+wFo7gZ+Ky6PwW8qCmP9z53zl0Ajob0PzJlbw7XsTqPAive+zySH+Dlzrm/AfwZ8D3ee10HAM651wCvAbjtwIH6Q6V2ssZr6/zTxDDaCIvVVWdZfbe2/jQRJCkrC5D19eLdy8tFXQcPFnm2tqp2lgcmxTYL2HtRN0nhlZVC7XT2bPHRex+03mttrc4o9AA2vSPPK24mai2xwkOlr7EDKIOuAwjqgTWQ5mgbjy6uFwKxXfKWr8UWA7MyCr1oFNuEVi3J3ErdonpqW2zqNmoVl/DNpu+Uta1ZY3fsKxIzhl8OFdQ1p3IS7N5GMQu9hRlo4XawF1Mc2z1id4005WlKj6nE2vID/BbwK977Defcd1JIG18zkdn7+4D7AO664QYfkyaEkNiFtbbrWhW8pomacUBcIpBrTWvlXi+mpbytZzCoFvGiTx8MKiO35F1bg0PHB0XDY6t7/QLdeN3hlZU4o9ASRWwXYGwQJH1lpejoTTdVDW4SwYUaycCIO66mghFKbQm8VCtzJ4xC5vzixXqzZ3FcsPMTs1FYPibdOHiw3m09pNIuaa8wldhqXtso9DvFUK/D09u2CDOyQ93Ul91KE9d9KI/pEsUx59zD6v6+QLPKGiJlLL2diRZuB3vBKE4Bt6r7W4DPN+Q55ZzLgBuAJ6eUjaWfBQ4757IgVZT5vffnVP5fINhBEhISEvYNprnHwlnv/V0tz6fS28tBC/eCUXwAuD14I32Owjj9KpPnIeDVwPuAbwZ+13vvnXMPAf/eOfdjwBcAtwPvp+CaE3WGMr8X6ngg1PmbAM65m7z3j4f3vQz4+NSWa73AYFCqnUSzsb5e18CIA9CFC3XtjI2ibf/LqwTWLiHSgV6YN3lByepP9mbIYhyKVaeWTKTsZt4pw2zXVEExPYJ0RDqspYmzZ4u9FFJHr1fvhF522ih7WuwS6ebw4bqNQ0QkSbPL1+Xl4l0XLxbLcS1R6B+f6peW9GS69bYQqCSM1dW4O3RMDWVtSLr+mEQhKiE9TCLBDAZ1NZR0Rd4hwyL1atNazEYhz7TJRlRubcLa1lYVU8ziaqqhrinsXvU0ld7uiBZOwa6nNdgcXge8h8Jd637v/SPOuTcBD3vvHwJ+Cfi3wVj9JEXnCPkepDDE5MBrvfdbALE6wyv/KfCAc+6HgD8JdQN8t3PuZaGeJ4Fvn9p4+WUNBoyzfo34a4ZgbbqWWeg8mqjo+FAWVmuzHWah6zh8uK6OWlwsjNsSNknK9rU+I6YH0/oVHZ9JM4mzZ6sBEGhmAXW9mXVxXVlhPBpxKRQ9cOZMoYgYDgvCf+xY3Sgu7ZK2CiXSuhTRrdg+ZRmjUd3FWbq6ulp07cKFepdjqsSmBYDdX9FmoxA7lHV1FcP0wkK1k16rofSULC3VjdV6qDWjGgzq79GeyTINAst8hAFKW5sM4xaJQWwDuzRmz0hvt08Lp2BPptd7/y7gXSbt+9T1EHhFQ9k3A2+epc6Q/hiVZ5ROfyPwxm01XC3xhLAL0bh4saKXsgiOfVZXq7zCKLwfAZsUW0NG4X8do1GX0ahHcdpzl16vN8EstCeMXaALbZYftyzKV1aqLQagvpMxpqAzSEUXL1adE0YhUsWZM3DuHOPRCMv7Oup/RxqtGEU+GrEWRmVI8cUbUzCLbHUVbryxeP+RIxUFte0UiiQbDPQS3yros4ytrbqEIM25cKHo0vnzdbu4NuNo5i8MfzTaCq2WuSX8HwfGUZ/n0ah44XDYYTiU62K+AVZWCuaqeaN8B6T7UH0vtbFa8ub5ZMDIMOQ1RiG81fJgPcTC1GIh15sYRMI2MV31NBUz0Nvt08IpuL7XAeHXNM76rK3UjZzaliuMQtNMTUtXVqDghesUhGSdgkEIQZFfnZy6JhvPusAA6DMa9RmNBqyu9kumYdUImh5q1UKe18OQ62McxPulDMMtlVp3VOGUwijEcC2SRGASw9GIzdCzcfgIhElkQDYakY1GdMKrh8BKKJdTsEdJPzAcsvxZ5ZQhW881xRIqLxSvaSt86ONm3plwRhCcP185c2ltmDD9PK+YSDGvm2Y+NfPfMtca/ZAmzGErzHfRl9FoCdji/PlFoIdz3Zrnmkgtw2G1x1FLAVrykP+a4cQcLDTDjDEKGxVXSxYCe51UUNtAivWUkDAf8N5zpnsSzwniTiQJCZcJ13MIj3mF9x4Ggwkpwu4xGw7rKvqwuGZlBUajIXCRQoq4SLXiFKlCrzgF3fDpUKw2+4hkAQNGowGjkaQDdHCuO6Er1moK+e4tLRUL8vX1akGeZcDacNLooe0VUBRaWSl0M6dPFwNx5kzxWVlhGOwLssbOw0dLFZnqTRZ6mANPhY/k74d6BqEugOXTp6tO6ACAo1HRQVEVahfdBm+BmGszFFX9+epJ/uPSy3nu6J24s3fW5rzYS7EVWidSokgTIllsqVaPqUsUXXUvEkWPSooU6aIT6t8CloA+3ncYDvsMh0JIuqVzhdWuQeXIsLRUrfq12kqkCrnXBnlJ0wZu/Q65tjYYa7gXJDXUjEgSxfzBA5eGndK7qckO0WTT9V7I30WKH/0aFVERIiBKGg1RP/UpiIiQ1sVwr/8XRMX7btB5i9qiS54XxFQ8eaAwYkv8PCEwHcYVpZACULfAy73dM3HuHJw7x+ZwyBC4FD7CLLQKStieEP8+FTl8KoyOjMQwPBtQMI8OhbpqcOZMZVHtdis1k7RdmISOn22RZayvFqqk1dV6N/MceudP8Lwn38Hj57dYPfAAfOpbuHC+w3A4Uq1co2IW0lOZU70AiKkWrYoxpnrqhvpQoyWqyGJ0zp49QuHb0Z1QN0F9l7Zo6rSBvG1vD8QZgaTvR8J/TWzC2wMbxdXAdc8ohsPCTr0gAAAgAElEQVRiAS2eMJpBCL209PP8+S2qNbJlFpvqvyUo2jbRpWISwhSEWVwM/4cqn5QR8tvF+y3W1gblDm3t+mn1zxNLyiwrKIsuIBRVOrq6CmfOMF5dLZmEZhaXqCQLIY0D4EBIl5/DJSgN2WPqjGUYrkUSyYZDsosXK2u9uC2JhCGhyGMBHdX9xkYxr9bRYH0dnrrguLDieOzFL2W88CSsfxoef21oqUiFIiVqqUJsUMI4YFKi0BCJQpiDSA8yl1KHZRSLyOKgsGEcIs+L7454P9lgu9YmAfX79fVqiq1Pg2UQ8lyfBCi+DnNI4/YXkupp/uCpiMjFi5WRU3/kCIYzZzSTWGGSUaxREBetdtLGbL3KtIxCK2Lkv9RTGbwr4lKppbzvMhz22NgoXCL1rnL5kY/p0BEqIRtEZDmp90xo958zZ0rDtjAIzSTWqNbcwigy6iop+WiGQvgvJHJAXRLpA4dWVytVkz78o9uNx4+K7LuwXr6yR0L2T2x85gT9R9/N8Phvw10/A489H04/K8ylZhSxOZVFANQlCq16qqS/imUSysn3YFOV01KH5OmXda2uLgFw4UIVgffIkboaUguNMgbCGOz5KbJOsJq7mCbPnqNhn+u07WhVrstd2kn1lJCw/+HxXDjwYYaHofvInXBpCx77G3D6i6Hc4ZGQcJmQVE/zCW3IFP964xFaHscwqXI6T131JDYKUVk02Sdk9aglCr1Slf899UzsFrJ6lfKVul5WeXqTWbny026xVmkv6ibxD5UOB7uEVqbJtUgUl6hLFNq4vUndjkH4L3V1VLlBqEvUVtlwWKw3g1QxBjpaVNJ+wlqiyLLyGFuZV5EK8xw+s3GSh2//RkbP8tB5Ldz18/DgfcCqmkuRKETtZI3as9ooRCJYpNppMlJzp9WRfSZVVYvqWTHna2tL5XTqWFV6k6dAJAYRIK3twQbmnfW0vpir7Bwukq8e5nCw5q/FewjHpJpJ3wvjEIJTEA+rctoOoxCVg9geRMVkVVRyvRieD0K66Lc1sZlUC0BdrVCDtkVoPZVWNw2HjFdXy30OlkloNZSYfoXgW4zNtdXwE3mHGLc71qlfVFG6Y3qXYtCzCHHUCwAhpOOzJzh+6rc4Nfwf+K/9J/Cxvwmnb6WYP/nIgmCnjALqxmrN3CXPokqTdN3ffngnVDaqLYbDglF0u3WtnGwKFOLf61XPrMcSTH437DO7CW+7SHspGpAkivmDo+4Sqzcla8axuqrdYEV3vUaduDxF3egpHjKakGhJwh6C3I2kYdKkXF+ldWob8Hq96qNXkX2oJ0gcEh2XInRcG6i1rWHTfDQr1AZq2XWNuu9E6utE6s9VXUX3i/53RqPJmBVKohhnfTqBMon5RU5vlZhOW1uwMXSsn7oT//SPQv8CvOjtRU/e853wnHfDI3+VwnqljdkxuUrLTVBnBtrmYOdSz7Mw/b4pL5AlvrDXwvvJ+y3yvFtuwtPeS/Kx/FRLm1D/fogNQntAyXjtFolhGCQbRULCfCA/9mF46T+BzrhYLbzwQWALXvgbwHfBI7Hw/gkJe4Dk9TR/cEyqm6yEUfjhb1GtLkfUV5nr4aNXnNo9VkO7QcKk+kI093Jvy1vVRJ9er1tqXyRmkJYwahKFQHZx6Uh4wbBhpYTcXMdW/7Jwtaol0dJn5jnUDxwZm0+JbrfyfhJ3WX0EXJAmNukzXIMs6xduomv1Ll68WFW5vg4XLwFbGZz9UrjtJHz0K+HkV8OpW+CR51LNp/Zy0tKEDuGhlWhjk67dYLuRdD2f9rtgvakKe0aImVli2n4Hq0baDfZCwrjukVRP8wfnXOltKWp77UFaxdgZUScaYlPQtoXYDmwNvQELJlUQ9mPzyL3U0wMGNSaxtDR5EBIEAqGd4wU6yFGgApohTBDugJh5XmvnhUmIyqlj8mbmPvbJoOjIwYOVMl4YhzFiy9x1u5PbRYQXanWKf/xO+Njfghf/YpF4xx/CF30Q3n1v6Iln0mYEk/M7K+WMzXvHPJv2HYipJZshdiv9PditxqO7vSYkxJBUT3MIRWT0hiwdc65YwTUxAfvDFg+l2A/b7p3Q+yPs/17D/z7Vxrw+g0GXw4crJnHwIOX9RKhyfaMjrwpnDIrqLDji29W//kha3+TTtggh9lqisM8wefSn0+sVHVoqjLclo1haqs59DcxCDNexjWQyp70edLIxq7f9GuNPfTOcej6MO4X6KQMGl+DuXwL+HjzyAuoEXQf3EwlCJIImZlFtjKzkOT33Mq9246Wd704tX6/XLQ3Mml8KEbc0yDIJ2cMoaWLXAqoAklT3u8Uc0sTLiyRRzCF6vQnjnz2MpkCMIWjCrVUR8qMeUN+RPQuj0OE7JL1L4e20GP4PgCWcWyoZw7FjVXTuGKOoRY8V9Y2GcMZut+yVVjtZoi8ts86gHVWmT+HqKj0TWDWTuMYOVN4+VIdqCKMQSEflhJ/BgI21OKMQyJyu3/ZrnH7B36ObfxL+p38DW4FRyBRnW/D1vwbnbobTz1Av1SqkHnXPNMsorCRgPZz0nMqcL1GfZ8mn3WSL74SODquvFxeLPne7leAl3kp20WC1d/I/FhVlp4Q+MYgWzOHgzF+LExJ2iMOffwWbm/DEJ58NL/oRyPKKj+fAH74cLhwO7rKb7ZUlJOwESaKYQwSJQkPEbxHte71uWGlJqDtrlygrox4IUEsZVo3RV9d6HW0lChswcIlCmjjEsWNw9GghTYhUMRhUmhktVZTQm9PkXusegrrnwOoqHdXbsWqFxHKCaoOdQIzcEvNpmXoUWYFVaw2AQ6HeA1B06MYbi//6qD55Jh0M7ReJUM5O0N3NssoO3s86HD/7d7m0OubCZ++CL/ndSgDIgK98B+QLcO6L4PQXqPmwQR7FdgGT4TtEJWXjc6HqEylD5ldLFH11rdMLtZMMR5ZVpxvqg48OHizSBoNqWu1JigL5rsckjTbExngn6DC+/sJ4JBvFHEKpYOTY58XFwoB98GClshgOq1g7BTQBKFRB1aYs8VbSjKRJ9WSDAsbUUloNsUyv1+PYMWofYRgLC4VmxqqfSgjVXFioYlMLdxG9Q7dLZzDgwOoqg+Gw3HktP2e951ivuWVzXk7xpdJqp9LuoOqwjOIAgVn0enD8eMX9Dh+ud0L0a2K5D4zCqgw1YZRjQYVIHnjWSS4c/zg8dQyWz1Y6sE4e5uEQcJTmuF3aG80yCj3fbTYKPb91hlCpm4r0gwd7ZFnR9WPHqv4dPlxMm9bQ6dDjctKhZhB6jSB7J5rsGvJ8JwwkoQHJPXYO0e/XzqvW0KvRjQ0YDLqsrBxiNFqk2mwnzEECx7Udf6o32mmJwhoxuyatKDcYdEubhHw0szh8uOiHHDttbb5lhxYXi1//wYPVylyHIBWj8XBIZzhk+dw58hA9VtsnhClA5RIrkWCtnGQZhZRBjcIBYLnXg2c+E266qejQ8eOTZ2gvLBSdPHiw2GhnVqQ6sofwFLFfCOM80x/z+IFzkG1WjYDCXvHu7wWOAcepZCTN+O1u+yYbhQ4A2VdpTQuBelqv1yuFpqNHq4WMSBQy13leLQygfj6JDN3CQl2qgMlrgZUQkqfTHiOpnhIS5gObS38O3S0YZdBTyrMM+Os/DYMtePDHQqDAhIQ9RFI9zSGyrFyBaX3twkKxGltbqxbcEqr64sUea2tHWFs7wmhk4zpZlVNM9aRXlXVVlHO92srX6paXl+GGG5iQLOQjK05xldV66povpSxDjx6tluCSbo02Z8+SnT7N8pkzMBxGN9uNoaai0t5RNZdXVW0txEevV7Xn1lvhllsqPYuIRYLFxWoJHdROMn+6m1pVo7vY7cJz//IVnDnz/7L69P88+Z1YWoX//GNw+u7QI32infZ2EojKSaue9JzbA4xkQqpDqQaDLr1ezexSUx3ecEMlUeiDiSTMuMw91CUO+e7q6+XlKmSHtVvIOOmxFLuPVlnpsBw2XaftNeb+0CJIqqe5RK9XqsBlb1ds452cY2Cfra722NjoMRweKjd5yd4wqP+gxKCqCZkmXkII7PNut+YJWmqL9EfbJBYWKq2S9rUnp05pxBIqL9YHGWgcP15Q28cfh4sXyUajgrBD0dlwVmweyncIeyCkY9LwGtcyEA4n6iZhEIcPF51YXKzyinJeqCqVRk2utdrpllvsWHs+ffAdbCx8KN6Wg0/Cy17HLUtfjnv8+bXtJtJlvUNZ5tjGNBJiK/YR3TZZjGhiHfsuSLplIFKXVjcJ7dGqJ+H9ci0HD+n3WaIv9Ujbmlxpdb8TtoEkUcwhAqPQh76MRoVNQsfKkzS9P00/t8HYYqEOLKOAOFOwzETyWcKhddB69Sn5hL7WvpM60qo0amGhoKiaUWjF9MZGQW0l9jpUL5TDxIdDstXVOLeb2NBhoPPdcEPFMBYX4xZ5yav6oVfEerF2/Hh1PKi85tTWSd4//md85fh7eC/fW2X26n9/jS98/ie47cLza3MLk6G49VzrYdM7o21XYwsB3Q/NNKBg/Dpd6tRMQdL03gr7PdPPobZnseybnSLdJs0UbL9sWkIDrmcbhXPubuAnKGTpX/Tev8U8XwDeDrwAOAf8Xe/9p8KzNwL3Usju3+29f09bnc65ZwEPAE8DPgT8fe/9Zts7GtHrcfx4fMVod/daRmDToTmmTpux0DIEIQ6W0Fi6qyWNNrqcZUFkj+k0BoNKf6F2Z5cv1R2WYFjaeiqMQg5BsJwwxh0t9NJbuJtQ9ont5QGaUeR1oirjJtoqORRPqrnd/VXWF3+YR8/+WfEtEThpD0CHr37u7dzaa5/XtnmOpcUId9OcxxYTTfk13dGEXa/8bRnbHvveWH9iU3E5mINWMV0T6iaNPZAodkNvd4pdOzE757rATwMvBe4AvtU5d4fJdi9w3nv/bODHgbeGsncArwSeA9wN/IxzrjulzrcCP+69v53i5KB7296RkKDx6Nqf8kuf/md88OJ/ask15omtR69YmxKuI4iNoukztfjO6e1usBfrgRcCj3rvHwNwzj0A3AN8TOW5B/iBcP0O4Keccy6kP+C93wA+6Zx7NNRHrE7n3MeBrwFeFfK8LdT7s03v8N6LUmESWcbx49WtXiE2qRhmPfyl5ZWt901p0C5t2HJyXa7ItF5KrJoxUUhXYjsrYpdWcNvzq5s6Mm0V1bTclv/2HVlxkp0ISbFzDxYXC20WVGP2nO4J1gY/zL983/c0NuXp/Zt5/UtfUVMl7VQX39btWb4L1j01ZuaZZZhnacflPDtCNte1bbK75qSHGHavetoxvW2lhVOwF1+Lm4HPqvtTgA3oX+bx3ufOuQsUO5puBv7IlL05XMfqPAqseO/zSP6md5zVDXHOvQZ4DcCtt97GIZ6KU39HOyfYCZeAKuZS072kEUl3cj/tf3Wtf5Q5/dDMfhkhVhhiqWsP8YKsnWWYFx+AQQaZGHnN1uxak/X9NCIkKhJf+QXVemWJqkrqZ+OiR2YO+hkcWrT6QfjOO76OQ/5f8Pd/77V4Jn87T2x+jrWVd/G8o8+pN3AniM1vrRdt96g5b8kTmfdonkZOUKT1y+2SlwfCCK5p1dI0TFc9HXPOPazu7/Pe36fud0Nvz7JD7MW3wkXS7K+vKU9TemzJ0ZZ/1nYQBv0+gC//8rs8p041GxyaDBNN91IuBq23h7hCuk1k0Pr+mP9szFI6GJSnvm3mnZoXl42aK4KBbo4eDjlLHKoNfRsbRZqOAm69ZKyOvWlYmiTxJpuOmCn62bhyRdOQTgWvrNq8eM/7PvKfokwCwpfvj/8Y+o/XRUvLPWNzbTvaZOG2dhxd1hoVmqQtPXiCJiOFXOu8VnKzjGQ74m7CTPC++C224Kz3/q6W57uhtzvGXgRaOQXcqu5vAT7flMc5lwE3AE+2lG1KPwscDnXYdzW9IyGhhpNrj/Lvzv9+4/N7e18BwC4k9YSEKLxvdpSZUSmxG3q7Y+zF8uADwO3BG+lzFMbpV5k8DwGvBt4HfDPwu95775x7CPj3zrkfA74AuB14PwVHnKgzlPm9UMcDoc7fbHtHW8PznGJJnOfFUlv7wNo07TdrfWOtj2xZuUJseR2TApryaX9X2SQhu+pi/rHWiT40SU59EycmfXS2bqpAJI/HHy/yiXlDnJ5On66GRJocE36apAq9b0CcqY4dK9KPHJn0ju126+dulOMvopFkFmni9OnKWwvw3S7jS4/xqvFz+Rn+uKpYfVMuPPkZXn7pJ/gPn/sK7rx4sHlep7m3xdLaPlYakHsJ5CQDpQdCJsRKF03+sbrN+jsiz5r059pOZNOSlDEzxuPmLUszYsf0djcv3fUMBx3Y64D3ULhr3e+9f8Q59ybgYe/9Q8AvAf82GKufpOgcId+DFIaYHHitD2c9xuoMr/ynwAPOuR8C/iTUTdM72jAaUakm1tYqxrC+Tu3ouzxv2nFX31ixtTV9I4X9b3dZWSoLdeKvj7OTnXV6x53eVCeEgLomZm2t2hZx5gycO9f85RUmce5cUVZ3Z2ur8o4dDkVF0ymPZ9V8SzaYWQgNk+0TR48WoZ4WFoopWFqqlxsMiimSMv2MSUaRZVUnT50q93qQZZzMzvIy9ys8NR7WN1IrPLj0GX7kQ4c5cfKjMMorXZ18afT8ikux/NcDBJPEXeZeNiDqa81Vp+24E0YB9d3rkhZbLAhTkYGH6bY2KR9LtyqrxDRmwk4dI2B39HY32JNZ9d6/C3iXSfs+dT0EXtFQ9s3Am2epM6Q/RuUZpdMb39GEklEUsTnqZ0jrw7OFUUi+8D8fjcpwFvIf9b92QtxoRGc4nDgiNFOfDjQTkMGgoJr6hKLDhwu3nvX1apOaDctdrgT7tW7JYlsW3NJN6+114UJBa8+cKQi09zqiKlTByJ8KaV1GowGjUezEvjhl7oWNjxLBY2Oj6KL8typ42bid5xSWde2RJdAShdihsowTWZcf9V/Kvbc07MwGshF8xcMrXDy9MhGqxB4PO4Zy0Dpq8DqjUTHHwyGd1dWiXqofnISF7AAdmWfhisIEZOFw5EjdMCMDIbvrb7ih2rVXnN1bSZx5Xr+2BF17k9lrGWRN2XS+3VC8GSBeUtcS9kCi2BW93Smua/af5xREf2WlYhRCNYUxiMRx8SKsrJCPRgypojvpjyUqGppB6P/20xkOyYbDGvPICMQkFj5WJJmtrboKAWpSifzeRfgR4/TZs3D+fKV+EhoiwtXZs7C6OqKImCs9fyrc6/OkL6q0AdVpbZpZaEZRxcEajQacOXOIlZUjpY+AhNAWGikQLczhw0UbD4n6yRI5zShOny6fuSzjFac9v77R5cEviRO6jocLwOkwlzFmQWSOoX5UbNNZ4BIPqzw5METq7a+uVnOuGUdT+Fit+rThj0XCkAGVa6uO0szDMhDrNt2UZtVSSbJoxF4wiquBNJsJ1x1+7aYV3nF7w2p4E370t+CO082nYSck7AaXWRC7LLiuGcVoRLFsFguv1stoi+9wyDicyXCJal0dkyxiK0+7ooxJFDbSqs7Xp1h1DoZDspWVYoUZM6Bb10eRKPKcPO/X7L76c+FCIVVcvFhVdf48DIdbTJ678RTFhviVkFaOJoVEMaKQHg5RnXE3oIqmCvXouqKiKqLxfupTT5fjMIDKHgGFFmZtrVhcr60VC+RCPdEwuaur1TxKBcDtm2v0nwPD/mSxL38c/pdHih6KlKilCplfmFRB6XZk6r9ca0lC5lsObpL/5ZyPRgxWVorvyXBYqaPERmKlR/0dELVRr1dJGyIm2oBScrKR1GHrS9LBniJJFHOIzdoRbUovs75eqZ1WVhgHddMlKkahrzWziKmf2hiFZRB9c62PN9oEBqMRB06frgzngiavGfWttOonzTi07X51VRiEEH85mugp4AkKMno+5NGDKPaLbsh7hPrxngJ7+t8SYvMYjQb85V8eKhmE1XCIzUL8CPIc+tZDrHyNCvsLpQW+k29ycARDzbsC/scz4IPH4VmnmbA/tamfYoxCz7mkCW8SppBRHR87pJrzARVDWhaV1MWL1QvEhiWR/ISw6x33ki7BHzc2qu+MREtsYg4xv81pS+ErzFTm0YYh7rHzhuuaUYxGTH6xc+XlMhoxHo1KYiEfLU1YZiEk1dopYoZrzRhiZzhYoqEJ1IEzZ4oLHXRPez7JoRqma+vrkzRgNKqu19agIPLCKISoX1QfYRRPUZ0lLVRXTvkbhtaKhKGlCTlzWs6WFmZWSCIrK4eAemgObTs5fLjO2PqaSYrfrnTYWuhXVzlx+hLf9d/hh77G2Bl84SUr86qZf0yysIZtiNsoNNOQOd2kmuuc+jx31Htq35vRiL5IR4NBJSmJ23Q1gXVbTZYV32kxPNnnlkFMI/Yx5hH7HSVJZALeJ4kiIWHfw+N58MvG/NhXwtg6YbkiwkJsW2tCwl4gSRRziNGI+tF2DbvC7ArSrjCt51OTRGFVT/2QL/Y/C+WlNbG6BqurlQulDtGgbBN69acjj2gsLlZmmsKzbkj93G854W2o/msJQ/KJikkkBjnhbVHVY88U71F5ShX1en+RtbUlVlbqsai63WrRrPdEHtJ7DrSdRjqq9jecfNomr/+qnMyDy8HLAOdFc1/5B/CFp2GD+JxOkygETaonkRLG1NVVep4zkybS5ZjCVsVoVHzEA0psD3q+s6wSuWTgbJiZJoq1HXXTNOyBZDGPKqYmJBvFHCLPqR8fZ3c293o1FYJFEwPR95oYaAIRYwAWkl/erxlTH8jFuD0YVCqHlZXqvEulVtD7xDRPXFioul4Q5U31dqiIu/5IujAV/UyO+JS6htTVTiOqY2OhUkvV3QJGoz5rawWB17RPDNk6bhXLg/oZFlBXyamTeU482ee3Huzy88/Z4udfXI31l34OPnEb3HyhUD/ZeY39j9kqOurefm90mv7kqqz+rogaqtYO2bMhDEPUpDGbgkYT4Re9Y5OLbKyOhB0jqZ7mEN77gsAUW4urj4lMp/c1WBtD7IevoYm9hmUyTZu5OtSJkWVKmewQlw0GoqPXokOWlUxCx6iTc5e3tgovp8JJpktdMtDfan32t4YwD2npQOUXBtKlsksIs5ARsuWLOtfXK0YxGhU83R45OxwCx9VuY1lJa7uNFJKd0Z0+rzq5zgdugg/dVhR9/Cj87/8FvvqROEGXllrJbpZ1rp7/mBG87Xug7y0TaoVmDNMCViZcMSTV01xiXO3sssfWKcbRoRD5xfNIeyGJukhURvoHrFeDct+0ASvGeDRDkvKCUnoJO74RjxjZrdsQvElHBzl4sHIMknTnlvBeG6W1oboT/vcoJIcelRJtK1z3qDbZQcVUuqouC6m7U3su9lfN86xWJM+LaJz95eUyKmdfS4diEV9bgyzj5DPgG1+8waUOXFiAOz8Df3YjvPp98Mr/XpfY2lRMTfcy5zJ3UJ8/O8cQ/17EnkP9O1AMXUMcEoEE35LrhKuKeVU9TV2YJCRcK/Dh7zd/+xDf8/9BfwQfvg02e/DvXgSPHr/aLUy41rEH0WOvCq7zJYavVBM6MuxwWJc0ul36584xCK6yOXGXVa1X1i6OqOf6E9tk1zef2H4LjTHQ0cEI9TfOGHf1wlIW2qKlkegQWQarqwOGwx6FimhM5eEvITnk/zJ1F1rJs0yxNwLq+yVEyuipdN3bRSq1V9FY6VIRK7Jbth+q9q+twWDQKbtdussuLVUSFnCy8wTf/MWn+OEPHuHnT0BPfrQ9eOkH4ctPF72xUqG1Eel5FwN1ORemnPRQ0rQjg722btExSUTsZrVzLOyZFfJfSxuxfSZi9IlFmbV5Y/cJ20ayUcwlfH3Tkd1UIPrdsFFrcOZM1IAJdWIiP3jLKCSf9auPMYimjXjWcwqYjOQHjSoHMWBrjYwOISTBac+e7TIcdhmNtiiIvhialygYxyHqgQGFURwKeY5Q7ZGQHdzCAMbqXuJCLVHt4i5IZeykPU3LtJawtmF5EDJJbKzAKE4Mu7zjL16A5zz/6o/WeO1XrJF5yD28+FTVMzvOej71BybtCdomJUxEqyQ1E5Ad2XbvjN5oCfW5r0WitdGFxRAtH2EC8j/GOPR9bE9EYg57imSjmFcIIdGMwlKnwaDY0TsacWBlpdXtVbvLitEZmj1epjEKu/qcYBIwGb9buIFeLQboowuC2r7cl7e8XI94UUTqXgqrefFUGlF5KMmGuZG6XqZgFsIwZEe3lBEvJ2nzksp/CFjEuUFJ3yp0Swc1/Uycu6RP5SZK4X6HD6sDM7r8WQ/e+OxP8po/P0TPr0EO2RjuOAcHwthuqv8iS9k5nYVRWIkCKubQoTL5y3tlrvVGS2E0pVwoTgtyLdxRhxTXbtLi1maPH7Ru4bAzptDgUr6rOq9hzKuN4jqfRVf3irG7eCVNQiVQ/ICXQwwea3gWw3YsRpDAlompnOzKssngXaqihFDIKlPCVpsf6eJixQOtykmcv5aXq4XnwkLR/fPnJcSGMATxWOpSMAZhGhKOQ5iE7AxfpNjJvR5GQ1RXIlEcCZ+CWejjF2Q3tgRPFYlHFsDi+aTdfZExkXDsId7HSf84b1z+CN+4cgs/9+xP85N/dAT/1FO8/mu2OHUUnne6GnthDHIt82oZhV4cWunRShSyW8QyilqMJyYZxQDoyDkThw9XUq4+uEi+x1rKkMGw551A3X0YqgGNEf59qoKax70VSaJISNjnOLF1jB9ZezFvPPTfeOsnvohv+eRFOHOJzhje8LVbPOsc3H76arcy4VpGslHMJVz9ABgtUWj1k5zqE2ClCr0K1RKF3pyl0SRRaElCGzWbXCYzKFaVIknIiXf6aNQsYxz0/YNBsTrXi0h9ONrGRv0Uu6BxI8+7rK4uUd9YJ9LA0KQtUrc5SL4ORcRZ7SLboZA6DiNSxWDQq0kUWlq44YZ612DSdl9GlBVpYmWl9AN2ec635C/gS1cPc2I8wmnbdT8AACAASURBVB39FHQzvuWJdb70N87znNObbKg5tLGeYtGBZ1E9ZSpdz2mTRCHXB6Suw4erk+vkP9R1hnZn+mBQHWYkOjvZjCKwEQlixuztqJAuk6Qxj5JDE5LqaS7RYTw4QEfEdw29SUmHhVDHmB5YWSkCtVGRzDHxcA8Qt1O0MQqZnJLoaMW8qBLkSFTLJIQzZBkdxvR6nVo3RqM6wYU6UYaCplT8cxDCjmsmIRvntE1HRmOZyh6xRGXI1juy+1SqqqP0ekvceGP9+FOtUj9ypKD9tt16M7FEq+jr4IjqZDi3vs4JvpiTN36ME2vHcL0ejDbBQ/bUkN7FS4zDyYVtQQGbbBQaonrSNiWtOtSqJW2DKm0aN95YnJontpatrfoJhrLAkXnX32Oth1tYKAZGggeWDWywUewT1dK1iKR6mkM45xgO4YA+YlJ7O8n9ujp3QX5EgVD3V1fpr6wUIcBpZhR2051cW4+XDIrTzaw+WVyAhElovbM+9U4YhRCFoHseDPpllI88L4pqYqxdZeW1q6t1O//p00tB4BJmYHdUy4Y5ea4jyorbqxyjqr2dDuHcEY4fLw7tE0agebSWKLTEIc/0/XCoGMXiYsF5pMKFBU72n+Tl2X/lnZt/jTuzY5w88BQv/6IV3vmHN3Hn5w7RGQ4ZrK4yGA6j9iYtJbYxiphEoRcA2lhdMhORDKE4dwSqRQAUAySURh+LKoZtYQ6Li3WJQq5jgxbzcoo9V9+nVq+phEYk1VNCwpzgROcLeOel/5UTG1vABU5cOsg7P/RsTqzkFAHGExIuD5JEMYcQNcVm1qevRXe7XbJ0paFaVcmKNah++qur9C9eBLUpz6qeNCbsFFqVFJMorNuuliiOHauW4rLk1q5BeQ70a4KS1lBAtXrXrvaDQXXWjTiGnT27xGgk0kBtNMueOdetSSZbWwNGIwkWKCflLSJeToNBjxtvLLpw+HDl2avNRdqJSbRJuv3yXzbojbN+cc54lhWraVWhu3iROy9+CVw6DVkPB9x51sFNwyriYHCr7a+uFhFbt7YYj0Y7kihi9gpkzqGYc21b0B5OMlnyvVT7QsprUT/meVVWDiuC+oDZUxCtHk9/ITSaJIY219iECSQbxRyi262Mu/1BVvmg25O/NKOAOrOQzQfihrm1VQQRFOpqT6ITaGYgTEcbpq17q3XdlTq02kn7upqjMnX4J61RqIh5pVHQG35lC4I+72Ztrdo53aTmtkFIh8MeKytPDxv4ngodOMSNN3Y5erTaGyfd0N2WepeWiq4tLlbDpEwxtb0Uea52aAfXUb+wwIc3Pg0L69x5ww047U5adKz6Dugd+mFHX2c4pBPmt8bFgjpwPBpN7m8RY5C9hmpPhMy/XIuaSNRMTYxCq57sQscas5uYwiz7IJrUTJdZ3XQtGbE1kkQxZxC1f6Gb71RShf7BAaU7DUyGrxZGocN+CIOwBEW/2NoZdJhs++O0kfCkTXqZLRRWMwlBlrG+WlzaBaWGdqOXEzZNtPKSYMeGwnoi6R+EDE+edzl79kh5f8stBT2UZmsHHl1e3iGLb6F9ehOeHp48D0ZhRYRPDj/FN/7FD8LY8x+Pvo47Zb7seGpGoQ++0KFStIQne2zsRs2YjUmLbXIGtnTCtLdmrBYGptss14uLVWj5hYVKJLN1asZovwQxQ3aMQcSQJIiZcTklCufc04BfBZ4JfAr4Fu/9+Ui+LeAj4fYz3vuXTat7VzO8jYa9Gvjn4faHvPdvC+kvAH6ZQg/xLuAfe+99U73OOQf8BPANFMrkb/fefyjUtf3OZ9VCfTiEbLlTqCs0s5CMMKmXkR+fbHbSG/fsEZPy47axdaSeJopr/8u1pqrCLGKMIssYZ322tqrqdZdiYyIquV6v+K+PWpajl3XzmxiF5ZOSfuxY4bUqWrPjxwsGoI8G0dAMTOfRQydTMdEZ+Swvc+KGE/zW8k/ApUucuHgQOhfqUppUoucvNqcxxg2Vo4GeazvYehGgV/96YuRaSwySZndmy3vEmK2N1ppRtKmZYv+nLXuTymlHuMyqpzcA7/Xev8U594Zw/08j+da993dup+LdRo+Vht0OvDfc1xCI/vcDLwJeCHy/c+5IePyzwGuA28Pn7in1vlTlfU0oL1j33t8ZPlOZRML1B+cczzv8ZTzv0JdQrDkSEq4sLnP02HuAt4XrtwF/e9c1Bux2CXAP8FXh+m3A7zPJwV4C/I73/kkA59zvAHc7534fOOS9f19IfztFx367pd57gLd77z3wR865w865m7z3j++k8dYAWvrf29mzKyVR3ssK1EoTbd8Aq/vV0oT+2HL6Xksiei+FXOv6l5fJ83oMOanONsmOiVU9iTZDVkTyenHR12YRPSz2nXlemnMmTCxSl7RFlwndKYUm/WmcYCtGSQeXlurShDbINJ0cJ52xEkXTL1zr8uVaN9au+KWMliisxKElCm24lk0vUsb2WyauTaLQ3/UmA/dltktc67jM7rHPEFrovX/cOff0hnwD59zDFH4Zb/He/8a0infLKGZp2M3AZ9X9qZB2c7i26W31NtX1ODN23jn3GgpphOXl2yaMrlnWoSM/rCaCr4mK1WHHVBOW2ci1EAgbsE3KWb2NlNWbpzSj0PUIVR0MSiIviEVkjZ1tY49a1vRO7qUL4qwlzyX8twyP5bXr68VZS9JMvX9C03PLr4VmSgTchYUWjUeMAQvxlMBXYjvQcwqT8b+a5lb/j70/Nvd6/vO8sinY55ZRjEaTO7P1c82UYguRaaqntnbH8iVsGzO4xx4LdExwn/f+Prlxzv0XIHZyyvduoxm3ee8/75z7IuB3nXMf8d7/RVuBqTO/Bw2Lyfi+JX0ndcGMnQ+Dfh/ATTfd5aGiBfL7KKUKyyygoqryX//Y9SY9yW9XrVKHps6zMgmoR4VdWCgIniY0MGEVzogbiKHeBF1c6ISmj/LKjY36vT12HCpGsb5et2loSGQUkRLkPAydV/NgaZs4iMm7pV/C2GqwRFLPrTwfDqu5bGIUei6sXUKgGY8eXBlgsWHYTuqzJSwjkf9Slw7BYSUG2y9dV5ukYMcq9szm07+HhJkxg43irPf+rqaH3vuva3rmnPtL0bA4524Cnmio4/Ph/2NBs/M8oJVRTLVReO+/znv/3MjnN4G/DA2ipWGngFvV/S3A50P6LZF0WuptqqvWeQpV1fOm9S0hISHhSuMy2igeAl4drl8N/KbN4Jw74pxbCNfHgL8OfGxaxbtdDkjD3tLUMOA9wA8rA/bXA2/03j/pnFt1zr0Y+GPg24D/Z0q9DwGvc849QGEcvxC45xHgkvd+Q3X+X01rvD1uuFo5B/WT1u1aRXivV19eN0kUGjFJQqe3rWB1WStR2BWeVuTnOVnWLxfOMcScc2SBqkNgSRO0OkmrnnQoIVncau2cXaxKaHORSGJ7KKSctH15edJFdqra3HqWWZWMHntR8WhpEurusE0qp9g+F5Ei9CAK5DszTaKIqavscytR6LzTJAU9aU3PZk1PaMVl9np6C/Cgc+5e4DPAKwCcc3cB3+m9/w7grwA/75yT0HNv8d5fdkYxtWGBIfwg8IFQ5k1i2Aa+i8o99rfDp7FeChfabwAepXCP/QchfUedbz2XPqbX1s9EEW93Tc/CJCxltkxCMwjxjddU2BI+azTQO7OBTr7JODCLmOrZNqWNpmhtmzRFjkbQxu2trWqLiaiYLM3S21bE1HLkSNx+rLun9040aViiYy+FdPRDPbdNxmq7F0bP76zLwCZ7hQxqjJnECL1xfa71zw7EtEltUz01tT9hV7icjMJ7fw742kj6w8B3hOv/Dnz5duveFaOYpWHh/n7g/oZ8z91GvR54bSR9R53Xh3wJhEb0NSHRPxC7pJ5VdpxG1Ww9smVcKG9sd5v+8UqaDd8R3tMJsWunqZ4F4kRjmal0X+IkiieUEHoh4pYx6D0V9swcYRS9Xj02owQx1O+WaBR6CAS93qShvkZgY8xfu2rpMdP/YxJEbK5nkSh0m5qItn2u57qNUWi7WhOjsLATYZ/FRMGEXWEe+e11PfOdFgvNmLD5Tse90ExjViWjZRD2B2zLiq4mdm4A1KmklSSEUTT4i2p6MG2BaJsae6brlJW+jR4iecUDyjZX16/dY/Ww6HAdVpqQMA9ZVk1mydz0+GjmEGMYMYbQ9N9ebweWITRJGfo6xgignWnYNPtMvz/27oTLghTrKSEhISGhFSl67BxCVE8WMpH9jEl9sRi2rSI9tkRvkias2sjWE5MIrNrJrpZtrKiWb2NsIaufWWjhRo+brsNugGt7h7zHxnXKskqVleeFKkvMQKKukj0Ug0GQJhpekmVQni4UxmgcnPw6etya5kP/b7vWsKLaLIPQdB1T+cQkUl1G96NJqmhrg77XfUjYM6TzKOYQnU67QXuM8n7S25HtTGu9MNR1LlbNEdMJW7VVkworxgSEMivjdZlf/yd6G9U8xGiDJuA2v7b1aGah6abeliBldX4Lu5VFD0G5FaE2bv3JStSLxlm/TrOtKsqWic1n08BtF7Nw6JiaqK3MDHPfmDZrGxN2jSRRzCHERmFtjXViGFahmkFo6cJCqNs0JlFUXpWJSROWqgoBk49lEjHC1vCDb1rsNt1rVX6seVqSkNV+PwMGnXIXtd7UKMxFu9Xqruk6Y+HRS2kiArt/kSyr1VtrtOV8diXdxCT2gpBud5Xflm870susZRIuAzzeR44d2OdI35CEhISEKwZPcTTwfOG6ZhSdTuVhYzFpblAhyJsCGLWpnHR8C13OLsslzUoFesmt05oklXA/btl8v92FZJbVz3Cyi3GREsrVfp7THww4eLDDxkYx1vb4cVFp9bMxYzrlngstYGk1VmlXsmNB3Tu1TeIoy8wyAFbVp94XHYimOmbFdtRFbZJHUjHtY8zfgUzX9bdEVE9N9D7KLKRAE7G3FUaIuCbeHXlRzPXWvkMTR8t86g0t3xGzSU47OayNuWg1nWUUNRWe6kuW9Wunca6v1/P2s8JnsJNlDAb9Gh8WZiGMo2afaIBVO2nVUy3DrKqX2Jeh8YU7xCxt2M3z7eZLuEwYkySKOYSlAZpWx+hD3zKDNvehiK1iTGeSeDdJErpROrKprjPyXnnHVOebhpVyh/EEo6m1N3If27wohfuDjMXFThkcMIrACfoDyIPhWZiDdjgo35FT65S0c2IPRSiUh6ErmWRsHmOdlGdXisDuVvqwz5MNYh/C7grd/7iuv0GdziSd0IjR0TFKqmgzhEaIeYxJ1FbvWb+QMGwj7FmkLWoTzSRizSuL2Qy2o9SZpv4vdTSFMIoliFtrrJ4SgRFmg36tefpUT5iuVqpJHEq6mpA0WtrbyiGvFHZC6G2ZxCT2GTyQjNkJCQkJCY3wJIlizmBPw9SLSHvssX7et9KDPNSruIYVa8y0UV80dsr7flYZhScM5bYSlW6FhTatyjRDrZUmBE17AqMIdgrZuNcozATpqb+8DIMO589X9dYOVoqIS/mwdovebFd7V+tgzNIZWqWZbWGW1f5O8iQpYh8jeT3NHZyb1Bjled17RmK6RTUAMSNGC5MQ/bhWN1n7teYH8cSqvlijYgzCNGMygzXItNSpH+tsraonxSTlYDmxP4xGamOjvGg4JBsckMsyjtQs9Lk0dg+rzLFyhQpx3K5yasLVJMSJCcw5kupp7iAShfz2dIRTOSYA6gFAG5lFk064wViqF8VyLe8uecIwwiQELbprXbdu+4SNwv5vIUIxxy65bvSiMvXJrZZGhAn3JUNofCffpNfrc/FikU+H+7Bo89LS0kbJfNuIbZMx+0ohMYJrHEn1lJCQkJDQiqR6mmvYRaMcvhM7Ba8MFtim79ZL7og0oesTxyZ5b5ZF3DhtAfuuCOzxCBNlmgwQeQ5Zv3bbhKgHUmhP00o/y6qD5GqJSqIQu4Z+fxkIcDjZID3EtTYptVdpu9juqj2t8hP2DEmiuKagD8CZiB1k0cAQmtIsjdberxPqFUtAdwCt0io0L53ph6U31KGbpXdgTyDCFFXyxHXNUF8yinrXJ5hSyDDhyRpxjYUW5puQcMWQbBTXHOwJlROwDCFGBVukDrFLSJaFBZMtdqjOLjDVJV8ZtTtZRpZ1Zn/tlH7qR3aYait9JYlpRlEyKhuIMWYHUS+MNavVppGQcNmRJIq5hXVgago/PrEKhjgFbqKwSq2T55XkkmV1yWUzr44tjW7wm6hzl1OpPZ9a6pIIsLVyLeqwJjfdqDFcdFLhOsuqedjaCp5KDe7AoJi6emmNUVxJo3RCQhTJRpGQkJCQ0Ir5VD0lGVxBVvVQnapmn0NQXcT0J01ShbExiF1C2w60bWJikd5kLG/ph4W8q6w31t4pEOmnUROmG25W9baM2Dg6+WazqEF1RrbUA0zGvKI+lrWXBMTsE0kFlXDlIcbsps/+RPqlGGhmIfcxB6aSWcSYhKWKhkLqx93uFCbR1MgYggG4KctUzYsh9DuKMht5SYx/1AzhEQO13mzR7UZUgUFFJrGtRG1nPZ4m9o7EmEdCwhWDSBRNn53DOfcK59wjzrmxc+6ulnx3O+c+4Zx71Dn3hlnq3hWjcM49zTn3O865Pw//jzTke3XI8+fOuVer9Bc45z4SGvyTzhVb4Jrqdc59mXPufc65Defc6807tt15qNMpS/ebiG6NFjatzGPMI8vYzCsDca9XrZgto4iiTQqIFGo1xM8I+7qtpkWPbriRnqAu0UyUMZMwzvolAxDGXfZF2WpiUXJjHk/JPpGwf3BZJYqPAt8E/EFTBudcF/hp4KXAHcC3OufumFbxbiWKNwDv9d7fDrw33NuGPQ34fuBFwAuB71cM5WeB1wC3h8/dU+p9Evhu4EfNO3bUeXt+rWYMTYKCxrhQnjRniHAhfTszg9CNs9cGHcZTNUp5biQiW6dpjK1Pe2pFuajpyGhUMJipzIKK+FuX4ZrbsHpnm2tsjIEkdVPC1YUYs5s+u6jZ+4977z8xJdsLgUe994957zeBB4B7ptW921/NPcDbwvXbgL8dyfMS4He89096788DvwPc7Zy7CTjkvX+f994Db1flo/V675/w3n+ASRltR51PSEhIuPK4qjaKm4HPqvtTIa0Vu/V6eob3/nEA7/3jzrmnb6NhN4drmz5rvdPe8aKZe6Ewq25/wj/fLm3t/WDAmM7EIr5JktCSRt+upGdwh5W6e736Zrlo0Sa32DwnRGGKIs9VjKbIw8IGUK1FRG1Vmh8aOh9TBwJVED8jUYxGhQovy6h2bWfZZNW7dSFOSNg1xkyxRRxzzj2s7u/z3t8nN865/wIcj5T7Xu/9b87QABdJ89MKTf3ltDVshkZBc8N21OBtvmMyo3OvoVB3cdttt9VoutBKa7jWiKmqajcRnbuutDS40h7iQmMiuqplRJHy0hdhFo0ZZ6hLG/i151P0pVP6ImXLA6B0ZXkOWX+Cf2SZCblu1HiCmnE6K4IB6vFOjCLh6mPqPoqz3vtGQ7T3/ut22YBTwK3q/hbg89MKTf3ltDXMOfeXzrmbwqr/JuCJhoZ9lWnY74f0WxoaPEu99h0zdT5w5/sA7nrBC7xdpFtTgF5oTxhOp0EMEUGaKAmWWb3PXKdtbItkYZmFRaOkMgUT3kczMLBer2IwNWN4S4cn4lRpw4WaqDwv6iykier5hO3IvCt5PCVcPVxVN9gPALc7554FfA54JfCqaYV2a6N4CBAvplcDMdHnPcDXO+eOBCP21wPvCaqlVefci4O307ep8rPUq1F23jnXp+j8QzvtVEJCQsLlwWV1j/07zrlTwF8D/pNz7j0h/Qucc+8C8N7nwOso6PLHgQe9949Mq3u3svhbgAedc/cCnwFeERp2F/Cd3vvv8N4/6Zz7QQpiDvAm7/2T4fq7gF8GFoHfDp+2eo8DDwOHgLFz7v8A7vDeP+Wck853gftn6TzeBy+h+kFCMQejmbwrdSZx0wkK+bZznu2ifCqmSBOxbDGJqfHlZq9BllXhRBo3tsWkibyKAGuSJxFxqd3aMmozo4+aqEfqGAwmPZ6CVJeQcHVx+aLHeu9/Hfj1SPrngW9Q9+8C3rWdunfFKLz354CvjaQ/DHyHur8fuL8h33O3Ue9p6uoq/WzbnQdgOKSTZfSzLO6XH2B15hMEN2K8FhXIRJTVCIG3SY08IEb9WzBTtm1ww5mDJJpkG7a9NIQbCGMShlSqoGKuxiY+YLNrbHufEhKuHFKsp/mDHHEXzuXsDAboiKkxuhk7KzrKRdqYhGJKkjQT2piEqaTNQSrK6KY0pNXhSksUDe2ABvvGDHaNwp4SMRQRkXBCG6whOxpuPCHhiiOdRzF/cMpZKhAgHV475uFkNTU1lZKSImqIMAldp86iMZMUMAWWDs/MIEKa7UtEO9X8MpUsbroTZ3tEuFajI1aLh1aeQ189K3nWDFJXQsKVw3wGBUy/oISEhIQrhqR6mk9olYZSQRFRDen/E66uRp0Eyve/dRk+9VFze2cs3KKhqj9oaWur+qpJ9DKFZoo9FTb5iV2jTBoY8Svki/bB1hfVFyYkXC3Mn+ozMYqY7jt461jiKHS0ZncIBFEH+5ugkQ1qnF3pytULZt24N/FOS1RVw6XOmL1GsjV6cql67BYLZcKpjMyGwMfofbnpUM1XlvVLW0aeT3a4uE1f8YT9hDFJophnGINBBxgM+vHdv2bjlzAJK4EUgffiITBaCXasTag6FWYpWpN+mjADg5BsE8yyIaP2Imt1qGrxHhAmUHpJaWY+qJhKngPLA1hbg+GQLDtQ61eHcX3TY0LCVUMyZickJCQkNCIZs+cTMf166QGV0w8btWpeNCq/3Xthq5T7RjNF23LbFJy22tfdiKrJYoWMuqlNApCmlHXKSXMRvdSYTil45Xnl8RRtV4OfsEgTw2FhZujXxAfoLy8zDG1eW4OnHQ7lh0MGywfKPokUkaSJhKuP5B4737BGYkWQOgiRUvmDK2zTXoih3QwWyRMl4E0bH0yRNrpfK6ILTNFT2ayyR0G7tJbMUnOBlraur9fjO03stNYHT4T6cvrxfkrVNQZV5d3MO4V6ajikf3jMpWHBWPtmOJMKKuHqIXk9zSe05TQmXWiKn2W1IH+WSUR4TO15I2LMwrYNJuwdrXp/GuwgUxpmmQQ0hO3QmSP1TWtbIyxDniG7vG84DAx9OAzzdqCwbUTGPzGLhKuDxCjmEhMhvKFyp2xYtm93V3WrS+osBY0bVVuxmd81oxtsY9aa+1IkLQhG+hjTiXqE8cpghnGX5NGI0k02y9QDVUmWwfKyEsRmdIVNTCLh6sCT3GMTEhISElqQJIr5RmzZbNVSDSt7WZ3qKLS2mtb3autzU7uoAubZprUUqdc/JfPMWeViebkx0wxZKnHAPJTHR45YYSPklzIh7+HDqt7BcilVDNK3O2HfYT6N2a44rvr6hHNuFZh2GPn1gGPA2avdiKuMNAYF0jg0j8EXeu9v3E3Fzrl3h/qbcNZ7f/du3nE5cL0ziofbjh28XpDGIY2BII1DGoMY0kkuCQkJCQmtSIwiISEhIaEV1zujuO9qN2CfII1DGgNBGoc0BhO4rm0UCQkJCQnTcb1LFAkJCQkJUzCXjMI5d7dz7hPOuUedc2+IPF9wzv1qeP7HzrlnqmdvDOmfcM69RKXf75x7wjn30YZ3vt45551zx1TaVznnPuyce8Q591/3tpft2A9j4Jz7v0L/P+yc+6hzbss597S9720c+2QMbnDO/ZZz7mT4HvyDve9pO/bJOBxxzv26c+5PnXPvd849d+972owrOQbOuR9wzn1Offe/YVpdcw/v/Vx9gC7wF8AXURxRcBK4w+T5h8DPhetXAr8aru8I+ReAZ4V6uuHZ3wCeD3w08s5bgfcAnwaOhbTDwMeA28L906+3MTDPvxH43ettDIB/Brw1XN8IPAn0r8Nx+NfA94frLwPee62OAfADwOsj7Wisa94/8yhRvBB41Hv/mPd+E3gAuMfkuQd4W7h+B/C1zjkX0h/w3m947z8JPBrqw3v/BxQ/8hh+HPi/KbZVCl4F/Afv/WdC+Sd23bPZsV/GQONbgV/ZYX92gv0yBh44GOpdDmV3GhJxJ9gv43AH8N5Q9n8Az3TOPWO3nZsRV2MMYmisa94xj4ziZuCz6v5USIvm8d7nwAXg6Ixla3DOvQz4nPf+pHn0JcAR59zvO+c+6Jz7tu12ZBfYL2Mgzw8AdwPvnL0Lu8Z+GYOfAv4K8HngI8A/9t5fyahv+2UcTgLfFPK8EPhC4JbtdGQXuKJjEPC6oGa73zl3ZBvtmEvMI6NwkTS7ym3KM0vZqpKCAH4v8H2RxxnwAuBvAS8B/oVz7kua6tpj7JcxEHwj8N+899tZfe0W+2UMXgJ8GPgC4E7gp5xzh5rqugzYL+PwFoqF04eBfwT8CVdOsrpiYxDws8AXU8z348C/2UY75hLzyChOUehIBbdQrOaieZxzGXADhQg5S1mNL6bQNZ507v9v3/5ZGgbCOI5/Aw6ii07qJm5SQVdfgg7ODiIWcXLRwamL+CYc3HQQFBycxNHRwUE6+I+2i4PgJDiJPA53samEk3RIm+b3gcAlba7N0wtPck8atfz776IomvR9XZnZp5m9AzfAfJfHlFW/xCC2Sr7TTtA/MajipiDNzF6AJm6OPi99EQcz+zCzqpktAOu4ek2z24PKKM8YYGZvZvbt7xyPaE8vZe6rMHpdJMm64K7kG7gBGxeuKn/es01n4erMtyt0FpsaJIpNwDQpxbvE6y3axbtZ3JzsEDAC1IG5MsXAr8cn3GhJx8EhsO/bE8ArKcX+EsRhDF/EB7aA40GNATCVaO/i6hL/9lXkpedfoMuBsQw84Z4qqPltB8CKbw8D57hi0i0wk9i35vd7BJYS209xt5FfuCuDzZTP/T0x/Poe7smnOrBT0hhsxCdKGccBbsrpGlefmPJcQwAAAFhJREFUqANrJY3DIvAMPAAXwPigxgA48b/3PXBJZ+JI7avoi/6ZLSIiQUWsUYiISI6UKEREJEiJQkREgpQoREQkSIlCRESClChERCRIiUJERIKUKEREJOgHfjMksYZVbXAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "species = 'beam'\n", "iteration = 3\n", "field = 'Ex'\n", "\n", "snapshot = './lab_frame_data/' + 'snapshot' + str(iteration).zfill(5)\n", "header = './lab_frame_data/Header'\n", "allrd, info = read_raw_data.read_lab_snapshot(snapshot, header) # Read field data\n", "F = allrd[field]\n", "print( \"Available info: \", *list(info.keys()) )\n", "print(\"Available fields: \", info['field_names'])\n", "nx = info['nx']\n", "nz = info['nz']\n", "x = info['x']\n", "z = info['z']\n", "xbo = get_particle_field(snapshot, species, 'x') # Read particle data\n", "ybo = get_particle_field(snapshot, species, 'y')\n", "zbo = get_particle_field(snapshot, species, 'z')\n", "uzbo = get_particle_field(snapshot, species, 'uz')\n", "\n", "plt.figure(figsize=(6, 3))\n", "extent = np.array([info['zmin'], info['zmax'], info['xmin'], info['xmax']])\n", "plt.imshow(F, aspect='auto', extent=extent, cmap='seismic')\n", "plt.colorbar()\n", "plt.plot(zbo, xbo, 'g.', markersize=1.)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read back-transformed data with hdf5 format (example: 3D run)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import h5py\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f = h5py.File('HDF5_lab_frame_data/snapshot00003', 'r')\n", "print( list(f.keys())\n", "# plt.figure()\n", "# plt.imshow(f['Ey'][:,,:])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" }, "widgets": { "state": { "11d243e9f5074fe1b115949d174d59de": { "views": [ { "cell_index": 6 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 1 }