diff --git a/.gitignore b/.gitignore index c8c6efb..9b5e924 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ docs /notebooks/*files/ *.pyc __pycache__/ - +/site_libs/manuscript-notebook/ +.ipynb_checkpoints/ diff --git a/README.md b/README.md index 4ebd16d..3d86a4a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ This repository contains use case gathering, benchmarking, and prototyping work related to cloud-optimization of ICESat-2 data, with the overall goal of better enabling cloud access patterns for the ICESat-2 community. The audience of this repository includes ICESat-2 data providers and tool and service developers with experience and interest in developing solutions to improve the performance of ICESat-2 data in the cloud. +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nsidc/cloud-optimized-icesat2/main?labpath=notebooks%2F) + ## Level of Support diff --git a/_quarto.yml b/_quarto.yml index d4673a6..3c8a5a7 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -2,9 +2,7 @@ project: type: manuscript render: - paper.qmd - - notebooks/portable-full-comparison.ipynb - - notebooks/h5py.ipynb - - optimize.py + - notebooks/h5py-atl03.ipynb output-dir: docs manuscript: article: paper.qmd diff --git a/notebooks/environment.yml b/environment.yml similarity index 85% rename from notebooks/environment.yml rename to environment.yml index 85dc00a..55a4fb2 100644 --- a/notebooks/environment.yml +++ b/environment.yml @@ -3,14 +3,16 @@ channels: - conda-forge dependencies: - python=3.11 - - jupyterlab>3 + - jupyterlab>4 - fsspec>=2024.05 - s3fs + - numpy<2.0 - matplotlib-base - pandas - xarray - dask - distributed + - dask-labextension - geopandas - h5py>=3.10 - zarr diff --git a/figures/figure-4.png b/figures/figure-4.png new file mode 100644 index 0000000..f9c6a05 Binary files /dev/null and b/figures/figure-4.png differ diff --git a/figures/figure-5.png b/figures/figure-5.png index 860e66d..ee40319 100644 Binary files a/figures/figure-5.png and b/figures/figure-5.png differ diff --git a/notebooks/portable-full-comparison.ipynb b/notebooks/all-access-patterns.ipynb similarity index 66% rename from notebooks/portable-full-comparison.ipynb rename to notebooks/all-access-patterns.ipynb index 2ace505..84e5123 100644 --- a/notebooks/portable-full-comparison.ipynb +++ b/notebooks/all-access-patterns.ipynb @@ -10,12 +10,12 @@ "source": [ "## Testing access time for ICESat-2 ATL03 HDF5 files in the cloud.\n", "\n", - "This notebook requires that we have cloud optimized versions of an HDF5 file:\n" + "This notebook requires that we have cloud optimized versions of an HDF5 file.\n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 1, "id": "3b78fb94-10ae-48cb-8e30-521b2c8b7822", "metadata": { "tags": [] @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 60, "id": "431d900d-0656-4b75-af6b-82f0f171d5f8", "metadata": { "tags": [] @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 61, "id": "9850faac-f534-4bc2-9214-c8dababe0f52", "metadata": { "tags": [] @@ -91,7 +91,7 @@ "outputs": [], "source": [ "test_dict = {\n", - " \"1GB\": {\n", + " \"ATL03-1GB\": {\n", " \"links\": {\n", " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\",\n", " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\",\n", @@ -102,20 +102,7 @@ " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\",\n", " \n", " },\n", - " \"group\": \"/gt1l/heights\",\n", - " \"variable\": \"h_ph\"\n", - " },\n", - " \"7GB\": {\n", - " \"links\": {\n", - " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\",\n", - " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\",\n", - " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\",\n", - " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\",\n", - " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\",\n", - " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\",\n", - " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\",\n", - " },\n", - " \"group\": \"/gt1l/heights\",\n", + " \"group\": \"/gt1l/heights\", # For simplicity we only read one variable\n", " \"variable\": \"h_ph\"\n", " }\n", "}\n", @@ -144,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 62, "id": "efe41d4a-1947-438b-a3c3-7ab954d75e13", "metadata": { "tags": [] @@ -205,13 +192,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 63, "id": "42821313-904d-4b1b-a139-9cc5b05021d1", "metadata": {}, "outputs": [ { "data": { - "image/png": "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R3Xu3DnV8WrWrKnChQvr66+/trbduXNHc+bMUadOne5ZS69evdS4cWO98MILafaZOHGiqlevrj179qhx48Zq166d2rdvr7Zt21rrb9++vTWEStKNGzc0atQoRUdHa8uWLYqLi9Nrr712z1oAAADw5LDrpXfvvPOOGjZsqMDAQF29elXz58/X+vXrtXLlSl27dk1RUVFq0aKF/P39dfLkSb3zzjvKnz+/mjVrZs+ys4zAwEBNnDhRFotFxYsX1759+zRx4kR17drVJnQULlxYkydPVpUqVXTt2jV5eHho+vTpKl68uMaNGyfp30sgf/vtN40aNcq637hx49SmTRvrfT1FixbV5MmTVatWLU2bNk2urq4parp+/bqmTZumWbNmqWHDhpKkL7/8UqtXr9aMGTM0cOBAa99Ro0apVq1akqTBgwercePGunXrVqrjdunSRTNnzrTuv3z5ct24cUMtW7ZM8/WZP3++du/ebTOblZpGjRqpW7dukqThw4dr2rRpqly5sl599VVJUmRkpKpWrarz589bV2C8ffu2pkyZomeeeUbSv6G1ZMmS2rFjh6pUqXLP4wEAACDrs+uM0vnz59WuXTsVL15cderU0c8//6yVK1eqbt26cnBw0L59+9S0aVMVK1ZMHTp0ULFixbRt2zZ5enras+ws49lnn5XFYrE+r1q1qo4cOaLExETt2bNHTZs2VXBwsDw9PRURESFJOnXqlCTp0KFDqly5ss145l/wf/nlF82aNUseHh7WR/369ZWUlKQTJ05o9OjRNttOnTqlY8eO6fbt26pevbp1HCcnJ1WpUkUHDhywGf/ue4aSZwnNlwcm69ixo44ePart27dLkr766iu1bNlSuXPn1qZNm2zqmDt3rk6fPq2+fftqzpw5qQavtOooWLCgJKls2bIp2u6uzdHRUeHh4dbnJUqUUJ48eVKcIwAAAJ5Mdp1RmjFjRprb3NzctGrVqsdYTfZx69Yt1atXT/Xq1dOcOXNUoEABnTp1SvXr11dCQoKkfy9xvDtkJbfdLSkpSd26ddObb76Z4hhBQUHq3r27zYxOQECALl++LEmpjm1uc3Jysn6dvC0pKSnVc/L19VWTJk00c+ZMFS5cWD/88IPWr18vSQoPD7dZRrxgwYJas2aNLly4oKefftranpiYqI0bN2rKlCmKj4+Xg4NDmnWkpzbz+aTV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+vXrtXLlSlksFvXr10+jR49W0aJFVbRoUY0ePVru7u5q06bNI6/ts+5rH/kxkmWFT2g+efKkQkNDtWfPHlWoUOGRHiskJET9+vVTv379Mm3MiIgIVahQQZMmTcq0MdOrY8eOunLlipYuXfrYjw0AAIBHw65B6fz582rXrp3Onj0rb29vlStXTitXrlTdunUlSYMGDdLNmzfVs2dPXb58Wc8884x+/PFHeXp62rNsPKHOnTungQMHavXq1bp69aqKFy+ud955R6+88oq9SwMAAEAWY9egNGPGjHtut1gsioqKUlRU1OMp6AmWkJAgZ2dne5eRpbVr106xsbFatmyZ8ufPr3nz5qlVq1batWuXKlasaO/yAAAAkIVkuXuUkD4RERHq3bu3+vfvr/z586tu3brav3+/GjVqJA8PDxUsWFDt2rXT33//bd0nKSlJH330kcLCwuTi4qKgoCCNGjXKZtzjx4+rdu3acnd3V/ny5bVt2zbrtqioqBSX5U2aNEkhISHW5x07dtTLL7+s8ePHy9/fX/ny5VOvXr10+/btNM9l5syZ8vb2tt6Pdr/zuH79utq3by8PDw/5+/trwoQJ6XrNtm3bpj59+qhKlSoqXLiwhg0bpjx58mj37t2S/r380GKxaOHChXruuefk5uamypUr6/Dhw9q5c6fCw8Pl4eGhBg0a6OLFiynGf++99+Tr6ysvLy9169ZNCQkJ6aoLAAAAWQ9B6QkWHR0tR0dHbdmyRR9++KFq1aqlChUqaNeuXVq5cqXOnz+vli1bWvsPGTJEH330kd59913t379f8+bNS7GC4NChQzVgwADFxMSoWLFiat26te7cuZOhutatW6djx45p3bp1io6O1qxZszRr1qxU+44fP14DBgzQqlWrVLduXZ09e/a+5zFw4ECtW7dOS5Ys0Y8//qj169frl19+uW9dNWrU0IIFC3Tp0iUlJSVp/vz5io+PV0REhE2/ESNGaNiwYdq9e7ccHR3VunVrDRo0SJ988ok2bdqkY8eOafjw4Tb7rFmzRgcOHNC6dev0zTffaMmSJXrvvfcy9LoBAAAg67D78uB4cGFhYRo7dqwkafjw4apUqZJGjx5t3f7VV18pMDBQhw8flr+/vz755BNNmTJFHTp0kCQVKVJENWrUsBlzwIABaty4saR/Z0hKly6to0ePqkSJEumuK2/evJoy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", + "image/png": "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kjFkyJA06y5evGjkyZPHcHd3twv6qX3dHjJvX5/e61qSMWPGjDTrunfvbkiyC5V3kvped+v77K37/9///pdmm/fee8+QZPzwww+2ZePHjzckGX369LnrPlOf/ylTppiuT/0jwv79+zN0DMDDhmF4QA5XtWpVOTs7p1lesmRJ/fLLL3bLChcurFGjRtkta9CggdasWaP69etr27Ztmj59uvr27StJ2rFjh1JSUtSgQQPlypXrjnX89ttvkqSnnnpKLi5p3zqefvppzZ07V7t379a///1vu3V16tRJ0/7PP/9UfHy86tevbzrc5emnn9b777+v3bt337EuSfr1118lSS1atLhrWzNXrlzR4cOHVaJECZUpU8a0FkkZquVO+4iMjFTJkiUVEBCQZn2jRo00cuTIDPf322+/ycnJSQ0bNkyzrnHjxnJ2djatt1SpUvL39093/6m/5/vl7e2t0qVLp1levHhxHT16VDVq1DBdd+PGDZ09e1Y+Pj4Z3tebb76pNWvWqFevXhowYIDdul9++UVWq1ULFiww3TYxMVHnz5+3DVlNfc7MnlcvLy9VrVr1noZMzpo1K917aI0YMSJTv/vM8PX1zdA9odq2bWv3OHVoZ/Xq1VW3bl2NHz9eAwYMyNSQPLPnsHTp0ipZsqSioqIUHR0tb29v2/tYVFSU6TWAf//9t6Sb18w8++yzduvM3lvuJvU1nnpN3q3y58+v6tWra9OmTTp06JCqVq2aqf2l97q+27qTJ0/K19fXtvz48eMaN26c1q1bp+PHjys+Pt5uu1OnTpnuv2bNmmmWlSxZUtLNIbipMvOemfr72bNnj+nv56+//pJ08/dTsWLFu/YHPGwIS0AOl95sYy4uLhmeFMDFxUU9e/bUtm3btGnTJltYSr2QOSNfTGNiYiRJRYsWNV2fOn10artbmW1zP/3dLjPHYSYra7nbPm6/xiFVevu+U3/58+eX1WpNs87FxUUFCxbUuXPn0qy72/7v5xhvdafXbXrrU9clJSVleD9jx47V9OnT9eyzz2rSpElp1l+8eFHJycl3DSNXr15VgQIFsvz39CCkzvpWqFChLO+7evXqql27tn7++Wf98ssvatWqVYa3vdNzeOzYMcXExMjb21sXL16UdPPaxju5evWqaV+ZldXvZbe60+s6o6/5I0eOqHbt2rp8+bKeeuopPfPMM/Ly8pKzs7OioqL01VdfpTthw532cePGDduyzLxnpv5+bp2owozZ7wd4FBCWgMdE4cKFJd28T0sqb29vSen/lfJWqR/C6c24lXpzTLMPa7PZye6nv9tl5jjM3EstTk43JxNNTk423SYmJsaufeq/b59dMFVmZzLz8vLSpUuXlJSUlCYwJScn68KFC/L09Eyz3d32n91TgWel+fPna8iQIapWrZrmzZtnegbWy8tLKSkpunTpUob6zOrf04OQOutbdt1w1ey9IyP++ecflS1bNs3y219rqf9dtmyZnn/++Uztw+y95W5u/f/d7ExIZt/LstrEiRN18eJF07OR3333XZqJGu7Fre+ZlStXvmPb1Odh79696U4UBDzKmDoceExs27ZNkuyGRtWuXVtOTk7avHmzrl27dsftq1WrJunmbFlmASH1C1tGZ0QqW7ascuXKpT179tgND7mX/lK/JK5evTpD+75d3rx5FRAQoFOnTtmG/NytltShgydOnEjTPjIyMs30w3nz5lVgYKBOnTqlw4cPp9kmdTrujKpWrZpSUlK0adOmNOs2bdqkGzdumD53x48fNx2Wlbr/1N+zJFv4uPUv0jnF1q1b1a1bN/n4+OjHH39Unjx5TNvVrVtXly9f1oEDBzLUb+pzZjbULiYmRnv27LnnmrPD+vXr9fPPP8vDwyPNULqskJycbBuaaDas8k7MnsMjR47oxIkT8vPzs31hT/3/d/PmzfdXbAalvsbN/p+Ljo7Wnj175O7urvLlyz+Qem4XGRkp6ebMe7e7lyGgZjLznvmgfz9ATkNYAh4h27ZtU2JiYprlGzdu1MSJEyVJXbp0sS0vVKiQOnTooNOnT+udd96RYRh22129etU2FKVEiRJq1qyZoqKiFB4enma/c+fOVb58+TL8hc3V1VWdO3fW1atX9d5779mtO3z4sCZNmiSr1aquXbveta9WrVrJz89PS5cuNb02JSNnnHr06CHDMDRw4EC7cHDhwgXbfZp69OhhW16uXDl5enpq2bJldsPd4uPj1adPH9N9dO/eXSkpKXrnnXfshlAePXrUdAjZ3eqVpMGDB9sF3WvXrum///2vJOmVV15Js92NGzfS3b+Li4vd66NAgQKSzAOhI0VGRqp169ayWq1avnz5HW862r9/f0nSq6++ahuudqu4uDjb9RuS1Lp1a+XLl09z587Vzp077dqOGDEiy4Yp3i/j/9+U9sUXX5R0815Y9zpE8MqVK6YhMCkpSQMGDNCxY8dUrlw50+th7uSTTz7RsWPHbI9TUlI0cOBApaSkqHv37rblrVu3tt1na8WKFaZ9/fLLL3f9g05GdenSRVarVZMnT7YFk1TDhg1TbGysunTpIjc3tyzZX2alTs2f+keaVKtXr9b06dOzZB8vv/yyPD09NXXqVP38889p1p88edL27+7du8vb21sjR47U9u3b07RNSUnJ9B97gIcJw/CAR8g777yjAwcOqFGjRipRooQk6ffff9e6deskSaNHj9aTTz5pt82nn36q/fv369NPP9W6dev0zDPPyNXVVUePHtXq1av1/fff2+5b8vnnn6tevXoaOHCg1qxZo5o1a9rus+Tk5KRZs2Ypb968Ga73gw8+0ObNm/Xpp59qx44daty4se0+S1euXNGnn35qOhnB7VxdXbVw4UI988wzeumll/T555+rdu3aio+P16FDh7R+/fp0h8ulevvtt7Vy5UotW7ZMVapUUcuWLW33WTp37pwGDRqk+vXr29pbrVYNGDBAI0aMULVq1dS2bVslJydr7dq1Kl68uOkX+P/85z9aunSpFi9erOrVq6t58+aKiYnR/Pnz1aBBg0zdaLhTp05atmyZFixYoIoVK6pNmzayWCxaunSpjh49qpCQEHXu3DnNdsHBwdq+fbtq1KihZ555xrb/6Ohoffjhh3aTT5QtW1Y+Pj6aN2+erFarSpUqJYvFoq5du9pdjP6g9enTRxcuXFCTJk20ZMkSLVmyJE2b1AvRmzZtqg8++ECDBw9WUFCQWrZsKX9/f129elXHjh3Txo0bVb9+fa1atUqSlCdPHn355Zd66aWX9NRTT9ndZ2n//v1q0KCB6dm87PTTTz/Zjic+Pl6nT5/Wzz//rKNHj8rNzU3jxo2z3R/rXly8eFHVqlVT1apVFRwcrGLFiun8+fP66aefdOTIERUsWFDfffedbehpRtWvX19Vq1bVSy+9JC8vL61evVp79+5VjRo1NGjQIFs7q9WqJUuWqHnz5nr22Wf15JNPqmrVqsqVK5dOnDihHTt26MiRIzpz5sxdJ6LJCD8/P4WHhys0NFTVq1e33Wdp48aN+uWXX1SuXLn7vqfa/ejVq5dmzZqlkJAQvfDCC/Lx8dH+/fu1atUqhYSEaP78+fe9j4IFC2ru3Llq3769GjRooJYtW6py5cqKiYnRvn37dPLkSdv98AoUKKBFixapbdu2qlu3rpo2baqKFSvKyclJx48f1y+//KKLFy/q+vXr910XkCM5eDY+AOlInfo3vamkzabFnT59uvHss88avr6+Ru7cuQ1XV1ejZMmSRkhIiLFp06Z093X16lUjLCzMqFy5sm067/Llyxt9+/Y1/vnnH7u2J0+eNN544w2jVKlShtVqNQoUKGC0bt3a2L59e5p+05ta+laXL182Bg0aZAQGBhqurq6Gl5eX8fTTTxurV69O/8lJx7Fjx4w333zT8PPzM6xWq5E/f36jdu3aRlhYmF07s2m9DcMw4uPjjTFjxhgVK1Y03N3djTx58hj16tUzvXeTYRhGSkqKMW7cOKN06dKG1Wo1SpYsaQwcONCIi4tLdx8xMTFG//79jeLFixtubm5G2bJljfHjxxuHDx/O1NThhnHzvjVTpkwxatSoYXh4eBgeHh5G9erVjU8//TTNPbMM4+bU4Q0bNjROnTpldO7c2ShUqJDh5uZmVKtWzZgzZ47pPrZv3240adLE8PT0NCwWiyHJ2LBhg2EYd5463OzYDSP96ZwN4/+mnL51Wm6zqcNT+7jTz+02b95svPjii0axYsUMq9VqFCxY0KhSpYrRv3//NPdTMoyb06/Xq1fP8PDwMLy9vY3nn3/eOHTokGmNd5La/k7/D6Q3Rfjt9z6yWCxGnjx5jFKlShktWrQwPvjgA7v79twq9f0jvd/DrWJiYoy33nrLqFOnjlGkSBHDarUauXPnNoKDg4133nknzXvA3aQe8+HDh43x48cbZcuWNdzc3IzixYsbffv2NWJiYky3++eff4x33nnHqFixouHh4WHkzp3bCAwMNF544QXjm2++sbtlQepzk/paNHOn15phGMbq1auNZs2aGd7e3oarq6sREBBgDBw40O4+SRntK7Ov67sdx88//2w0btzY8Pb2tr0PRUREpDuV/p32f6f34f379xtdu3Y1ihcvblitVqNw4cJGgwYNjC+++CJN26NHjxqhoaFGYGCg4ebmZuTNm9coW7as0aVLl3SnVAceBRbDuG3cDQDgkWSxWNSwYUOGzCBbdevWTV999ZWOHj1qG1IGAA8rrlkCAAAAABOEJQAAAAAwQVgCAAAAABNcswQAAAAAJjizBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYMLF0QU8SJcvX1ZycrKjywAAAADgIC4uLsqXL1/G2mZzLTlKcnKykpKSHF0GAAAAgIcAw/AAAAAAwARhCQAAAABMEJYAAAAAwARhCQAAAABMPFYTPAAAAODBS0hIUEJCgqPLwGPEzc1Nbm5u990PYQkAAADZJi4uThaLRXnz5pXFYnF0OXgMGIah+Ph4xcXFKXfu3PfVF8PwAAAAkG2Sk5OVK1cughIeGIvFoly5cmXJ/VUJSwAAAMg2hCQ4Sla89ghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAADco379+snHxyfNz9GjRx1dmp0TJ07Ix8dH+/fvd3QpDxWmDgcAAADuQ+PGjTVx4kS7ZQUKFMh0P4mJiXJ1dc2qspAFOLMEAAAA3AdXV1cVLlzY7sfZ2Vm//PKLnn32Wfn7+6tatWp6//337aazbt++vYYMGaIRI0aoUqVK6tixo7Zu3SofHx/99NNPeuaZZxQQEKAXX3xRFy5c0Pr169WwYUOVLVtWvXr1Unx8vK2vDRs2qE2bNipfvrwqVqyof//734qKirKtr1u3riSpefPm8vHxUfv27R/Y8/MwIywBAAAAWezMmTPq2rWrqlSporVr12rs2LH67rvv9Mknn9i1W7hwoVxcXLR06VKNGzfOtnzChAkaM2aMli1bptOnT+uNN97Q9OnTNWXKFH399dfatGmTZs6caWt/7do1vfbaa1q+fLnmz58vJycn9ezZUykpKZKk5cuXS5LmzZun3377TdOmTXsAz8LDj2F4AAAAwH343//+p6CgINvjxo0bq3Tp0ipevLjGjBkji8WiwMBAnT17Vu+//7769+8vJ6eb5yz8/Pw0dOhQ27bnzp2TJA0aNEi1atWSJHXs2FFjx47V1q1b5evrK0l69tlntXXrVoWGhtoe32rChAkKDg7WX3/9pXLlytmGBebLl0+FCxfOpmfi0UNYAgAAAO7Dk08+qbFjx9oe58qVS0OGDFGNGjXsboxaq1YtxcXF6cyZM/Lx8ZEkValSxbTPChUq2P5dqFAheXh42IJS6rI9e/bYHkdFRemjjz7S7t27denSJdsZpVOnTqlcuXJZcpyPI8ISAAAAcB9y5colf39/u2WGYdgFpdRlt/Pw8DDt08XF/mu61Wq1e2yxWGyBSJK6deum4sWL68MPP1TRokWVkpKiJk2aKCkpKVPHAntcswQAAABksaCgIO3cudMuIO3cuVN58uRRsWLFsnRfly5d0t9//62+ffvqqaeeUlBQkGJiYuzapIatWwMW7o4zSwAAAJJaz/nD0SWka1lnhlE9bF5++WVNnz5dQ4cOVffu3XX48GFNmDBBr732mu16pazi7e2tfPny6dtvv1XhwoV16tQpu2GBklSwYEG5u7trw4YNKlasmNzc3OTp6ZmldTyKOLMEAAAAZLFixYrpm2++0Z49e9SsWTP997//VceOHdW3b98s35eTk5OmTp2q33//XU2bNtWIESPsJo2Qbg7rGz16tL799ltVr15dPXr0yPI6HkUWw2zw5CPq/PnzjNsEAACmOLOUPWJjYzmDAYdI77VntVpVqFChDPXBmSUAAAAAMEFYAgAAAAAThCUAAAAAMOHw2fAWLFigRYsW2S3z8vLStGnTJN2cj37hwoVat26drl69qqCgIL3yyisqWbKkI8oFAAAA8JhweFiSpJIlS2rYsGG2x7dOp7hs2TItX75cvXr1UrFixbRkyRKFhYUpPDw83Zt4AQAAAMD9yhHD8JycnOTt7W37SZ21wjAMrVixQm3btlWdOnVUqlQphYaGKiEhQVu2bHFw1QAAAAAeZTnizNLZs2f1+uuvy8XFRUFBQerYsaOKFCmic+fOKTo6WlWqVLG1tVqtqlChgv788081a9bMtL+kpCS7KcItFgtnoQAAAABkisPDUlBQkEJDQ1W8eHFFR0dryZIlGjp0qCZOnKjo6GhJN69hupWXl5cuXLiQbp8RERF210H5+/tr3Lhx2VI/AAAAgEeTw8NStWrVbP8uVaqUypQpo7feeksbN25UUFCQpJtnhm51t/votm3bVs8995zt8e3bAwAAAMDdODws3c7d3V2lSpXSmTNnVKtWLUlSdHS08uXLZ2sTGxub5mzTraxWq6xWa7bXCgAAgHtz49XnH9i+nKd9/0D2M2HCBK1atUpr167N8Dbt27dXhQoVNGrUKIfWAXM5YoKHWyUlJenUqVPKly+fChcuLG9vb+3bt8+2Pjk5WQcPHlTZsmUdWCUAAABg74033tD8+fMztc20adM0aNCgbKoI98vhZ5a+/vpr1axZUwULFlRMTIwWL16s+Ph4NWzYUBaLRS1btlRERISKFSumokWLKiIiQm5ubqpfv76jSwcAAABkGIZu3Lih3LlzK3fu3Jna9tbRU8h5HB6WLl26pE8++USxsbHy9PRUUFCQxowZo0KFCkmSWrdurcTERE2fPl1xcXEKDAzUkCFDmN0OAAAA2SYhIUFhYWFatmyZrl69quDgYI0YMUJVq1bV1q1b9eKLL2rOnDkaN26cDh06pDlz5ujXX3+1G/6WnJyskSNHatGiRXJyclKnTp107tw5XblyRTNnzpSUdhhenTp11LlzZ0VFRenHH3+Ul5eX+vbtqy5duthqGzNmjFauXKkzZ86ocOHCatu2rfr3789lKNnA4WGpX79+d1xvsVgUEhKikJCQB1MQAAAAHntjxozRihUrFB4erhIlSmjq1Knq3Lmz3b0+w8LC9N5776lUqVLy9PTUr7/+atfHlClTtGTJEk2cOFFBQUGaPn26Vq9erSeffPKO+/7iiy80cOBAvfXWW1q+fLkGDx6sunXrKjAwUJKUO3duffzxxypatKgOHTqkQYMGKU+ePOrVq1fWPxGPuRx3zRIAAADgSNeuXdPXX3+toUOHqkmTJipTpow++ugjubu7a968ebZ2AwcOVIMGDeTn56f8+fOn6WfWrFl666231KJFCwUGBmrMmDHy9PS86/6bNGmibt26yd/fX6GhocqfP7+2bt1qW9+vXz/VqlVLJUuW1DPPPKPXX39dP/zwQ9YcPOw4/MwSAAAAkJNERUUpKSnJNjOzdHO25apVq+rvv/9WlSpVJEnBwcHp9hEbG6vz58+ratWqtmXOzs4KDg5WSkrKHfdfoUIF278tFosKFSqkixcv2pb9+OOPmj59uqKiohQXF6cbN24oT548mT1MZABnlgAAAIBbpN7T0+xen7cuy5Ur1137yuz9QiXJxcX+fIbFYrEFrF27dqlXr15q3LixvvrqK61evVpvvfWWkpKS7tovMo+wBAAAANzC399frq6u2r59u21ZUlKS9u7dq6CgoAz14enpqUKFCum3336zLbtx44b2799/X7Xt2LFDJUqUUN++fVWlShWVLl1ap06duq8+kT6G4QEAAAC3yJUrl7p27aqwsDB5e3vLx8dHU6dO1fXr19WhQwcdPHgwQ/10795dn376qfz9/RUQEKBZs2YpJiYmzdmmzPD399epU6e0bNkyValSRevWrdPKlSvvuT/cGWEJAAAAD5zztO8dXcIdvfvuuzIMQ3369FFc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mjdvnsLDw9WgQQNJUnh4uGrWrHnXuoYPH66aNWuqefPmd2z3xhtvqFGjRpKknj17qlevXpo/f75q1aolSerYsWOa8Ge1WjVx4kR5eHiobNmyevvttxUWFqZBgwbJySn7zv8QlgAAAAATVapUsf1737592rp1q4KCgtK0O3bsmGJjY5WQkKD69evfsc/U0CLJdvblwoULmQpLZcqUkbOzs+1xkSJFdOjQIbs2X3zxheLj47VixQr5+vpm+DiuX7+uxMREu3CUL18+BQQE2B5PmjRJkydPtj3+6aefdODAAf38889as2bNXeu/9TkoWLBgmmWFChVKMwyvQoUK8vDwsD2uUaOG4uLidPr0aZUoUeKu+7xXhCUAAADAxK1fzg3DULNmzfTuu++maVekSBEdO3YsQ326uPzf1+/USRBSUlIkSU5OTjIMw6692RA9q9WaZtnt29WpU0fr1q3TDz/8oN69e2f4OI4cOXLXY+jatatatWplt90XX3yhY8eO2YUeSXr11VdVp04dLVq0yLbM7Dm4dZn0f8/J3WT3RBKEJQAAAOAuKlWqpBUrVqhkyZJpvthLkr+/v9zd3bVlyxZ16tTpnvaRP39+nT9/XoZh2ELAgQMH7qmvqlWrqnv37urcubOcnZ315ptvZvg4rFardu3aJR8fH0lSdHS0jhw5orp160q6eaYpX758dtv17t07zXE3bdpUI0aMSDNpxb04ePCg4uPjbQF29+7dyp07t4oVK3bffd8JEzwAAAAAd9GtWzdFR0erV69e+u2333Ts2DFt3LhRAwYM0I0bN+Tu7m6b3GDhwoWKiorSrl279N1332V4H08++aQuXryoqVOnKioqSrNnz9aGDRvuueaaNWvq22+/1ccff6wvv/wyQ8eRO3dudejQQWFhYdq8ebP++OMP9e/f/67XBRUuXFjlypWz+5EkHx8flSpV6p6PIVVSUpLefvtt/fXXX1q/fr0mTJig7t27Z+v1ShJnlgAAAOAAffr0cXQJmVK0aFEtXbpU77//vjp37qyEhASVKFFCjRo1sn1h79evn5ydnTV+/Hj9888/Kly4sLp27ZrhfQQFBen999/X5MmTFR4erpYtW+r111/XnDlz7rnuWrVq6euvv1bXrl3l7OysV1555a7HMWzYMMXFxal79+7KkyePXn/9dV25cuWea8gK9evXl7+/v9q1a6fExES1bt1aAwYMyPb9WozbBzg+ws6fP3/HOegBAMDjq/WcPxxdQrqWdS7n6BLuWWxsrDw9PR1dBh5D6b32rFZrmind08MwPAAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwkaOmDo+IiNB3332nli1bqlu3bpJu3mV44cKFWrduna5evaqgoCC98sorKlmypGOLBQAAAPBIyzFnliIjI/W///1Pvr6+dsuXLVum5cuXq0ePHho7dqy8vb0VFham+Ph4B1UKAAAA4HGQI8LS9evXNXnyZL3++uvKnTu3bblhGFqxYoXatm2rOnXqqFSpUgoNDVVCQoK2bNniwIoBAAAAPOpyRFiaPn26qlWrpuDgYLvl586dU3R0tKpUqWJbZrVaVaFCBf3555/p9peUlKRr167ZfjgLBQAAACCzHH7N0s8//6yjR49q7NixadZFR0dLkry8vOyWe3l56cKFC+n2GRERoUWLFtke+/v7a9y4cVlTMAAAAO5b4cjBD2xf5wLTfs980E6cOKG6detq9erVqlSpUrbuq06dOurZs6deffXVLOuzffv2qlChgkaNGpVlfWZUv379FBsbq5kzZz7wfTs0LF24cEGzZ8/WkCFD5Orqmm47i8Vi99gwjDv227ZtWz333HPpbg8AAAAga507d06jR4/W5s2bdfXqVQUEBOitt96y+17+sHFoWDpy5IhiYmL03//+17YsJSVFhw4d0qpVqxQeHi7p5hmmfPny2drExsamOdt0K6vVKqvVmm11AwAA4PGSmJh4xz/uQ+rTp4+uXLmiWbNmKX/+/IqIiNCbb74pPz+/bD+bll0ces1S5cqVNX78eH344Ye2n4CAANWvX18ffvihihQpIm9vb+3bt8+2TXJysg4ePKiyZcs6sHIAAAA8ytq3b68hQ4ZoxIgRqlSpkjp27Ki//vpLXbt2VVBQkKpUqaK33npLly5dsm2TkpKiKVOmqF69evL391etWrX0ySef2PV7/PhxtW/fXgEBAXr66ae1c+dO27oJEyaoWbNmdu2nTZumOnXq2B7369dPPXr00Oeff65q1aqpYsWKevfdd5WUlJTuscyfP1/lypXTpk2bJOmux3Ht2jX16dNHQUFBqlatmj7//PMMPWe7du1S9+7dVa1aNfn6+qpfv37y9PTU77//LunmUEQfHx99//33atu2rQICAtSyZUsdPnxYe/bsUYsWLRQUFKTOnTvr4sWLafqfOHGigoODVbZsWQ0aNEiJiYkZqut+ODQseXh4qFSpUnY/bm5uyps3r0qVKiWLxaKWLVsqIiJC27dv1/HjxzVlyhS5ubmpfv36jiwdAAAAj7iFCxfKxcVFS5cu1eDBg/XCCy+oQoUKWrlypebMmaMLFy7o9ddft7UfO3aspk6dqr59+2rDhg2aMmWKChUqZNfnuHHj9MYbb2jNmjUqXbq0QkNDlZycnKm6tm7dqqioKC1cuFDh4eFasGCBFixYYNr2888/16hRozRnzhw1aNBA//zzz12PY/To0dq6datmzJihuXPn6pdffrE7eZGe2rVr6/vvv9fly5eVkpKiZcuWKTExUU888YRduwkTJqhv375atWqVnJ2dFRoaqrCwMI0aNUoRERGKiorSRx99ZLfNli1b9Pfff2vhwoWaMmWKVq1apYkTJ2bqebsXDp/g4W5at26txMRETZ8+XXFxcQoMDNSQIUPk4eHh6NIAAADwCPPz89PQoUMlSR999JEqV66swYP/b2KKCRMmqFatWjp8+LCKFCmiGTNmKCwsTCEhIbbta9eubdfnG2+8oaefflqS9Pbbb6tx48aKiopSYGBghuvy8vLSmDFj5OzsrMDAQDVt2lRbtmxR586d7dqNHTtWCxcu1KJFi1S+fHlJ0tdff33H4yhatKjmzZun8PBwNWjQQJIUHh6umjVr3rWuzz77TG+++aYqVaokFxcXeXh4aMaMGfLz80vzHDRq1EiS1LNnT/Xq1Uvz589XrVq1JEkdO3ZME/6sVqsmTpwoDw8PlS1bVm+//bbCwsI0aNAgOTll3/mfHBeWRowYYffYYrEoJCTE9qIDAAAAHoRbb1+zb98+bd26VUFBQWnaHTt2TLGxsUpISLjr6KfU0CJJhQsXlnRz0rPMhKUyZcrI2dnZ9rhIkSI6dOiQXZsvvvhC8fHxWrFihXx9fTN8HNevX1diYqJdOMqXL58CAgJsjydNmqTJkyfbHv/000/y8fHRhx9+qJiYGM2bN0/58+fX6tWr9frrr2vJkiV2x33rvwsWLJhmWaFChdIMw6tQoYLdyZIaNWooLi5Op0+fVokSJe7wbN2fHBeWAAAAgJzg1i/nhmGoWbNmevfdd9O0K1KkiI4dO5ahPl1c/u/rd+qMzSkpKZIkJyenNLM+mw3RM5vI7Pbt6tSpo3Xr1umHH35Q7969M3wcR44cuesxdO3aVa1atbLbLioqSrNmzdL69ettcwtUrFhR27Zt0+zZs+1u42P2HNy6TPq/5+RusnvWa8ISAAAAcBeVKlXSihUrVLJkyTRf7KWb9/V0d3fXli1b1KlTp3vaR/78+XX+/HkZhmELAQcOHLinvqpWraru3burc+fOcnZ21ptvvpnh47Bardq1a5d8fHwk3ZyZ+siRI6pbt66km2eabp2pWpLi4+MlKc2QOGdn57ve9icjDh48qPj4eFuA3b17t3Lnzq1ixYrdd9934tAJHgAAAICHQbdu3RQdHa1evXrpt99+07Fjx7Rx40YNGDBAN27ckLu7u0JDQzVmzBgtXLhQUVFR2rVrl7777rsM7+PJJ5/UxYsXNXXqVEVFRWn27NnasGHDPddcs2ZNffvtt/r444/15ZdfZug4cufOrQ4dOigsLEybN2/WH3/8of79+9/1uqDAwED5+fnpnXfe0W+//aaoqCh9/vnn2rRpk5o3b37Px5AqKSlJb7/9tv766y+tX79eEyZMUPfu3bP1eiWJM0sAAABwgHOBYx1dQqYULVpUS5cu1fvvv6/OnTsrISFBJUqUUKNGjWxf2Pv16ydnZ2eNHz9e//zzjwoXLqyuXbtmeB9BQUF6//33NXnyZIWHh6tly5Z6/fXXNWfOnHuuu1atWvr666/VtWtXOTs765VXXrnrcQwbNkxxcXHq3r278uTJo9dff11Xrly5436sVqu++eYbjR07Vt26dVNcXJz8/PwUHh6upk2b3nP9qerXry9/f3+1a9dOiYmJat26tQYMGHDf/d6NxciK82IPifPnz99xDnoAAPD4aj3nD0eXkK5lncs5uoR7FhsbK09PT0eXgcdQeq89q9WaZkr39DAMDwAAAABMEJYAAAAAwARhCQAAAABMEJYAAAAAwARhCQAAANnmMZpLDDlMVrz2CEsAAADINi4uLoqLiyM04YExDENxcXGmN93NLO6zBAAAgGyTO3duJSQk3PU+PUBWcnNzk5ub2333Q1gCAABAtsqqL67Ag8YwPAAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABMuji4AAAAAD69JkyY5ugRTffr0cXQJeARwZgkAAAAATBCWAAAAAMAEw/AAAADwyCkcOdjRJaTrXOBYR5eADOLMEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYcLmXjZKSkvTTTz/pwIEDunLlinr27KlixYppx44dKlWqlIoUKZLVdQIAAADAA5XpsBQbG6uRI0fq5MmT8vb2VnR0tOLj4yVJO3bs0N69e9WzZ88sLxQAAAAAHqRMD8P79ttvde3aNY0dO1ZTp061W1exYkUdPHgwy4oDAAAAAEfJdFjavXu3QkJCVLp0aVksFrt1BQoU0MWLF7OsOAAAAABwlEyHpfj4eBUqVMh0XXJyslJSUu67KAAAAABwtEyHpcKFC+uvv/4yXRcZGanixYvfd1EAAAAA4GiZDkv169fXsmXLtGPHDhmGIUmyWCyKjIzUypUr9dRTT2V5kQAAAADwoGV6NrzWrVvrzz//1Pjx45U7d25J0pgxY3TlyhVVrVpVLVu2zPIiAQAAAOBBy3RYcnFx0eDBg7V161bt3r1bMTExyps3r2rUqKEnn3xSTk7c5xYAAADAw++ebkprsVhUr1491atXL6vrAQAAAIAcgdNAAAAAAGAi02eWUlJStHLlSm3ZskXnz59XUlJSmjZfffVVlhQHAAAAAI6S6bA0Z84c/fjjj/Lz81NwcLBcXO5pJB8AAAAA5GiZTjpbtmxR69at1alTpywpYM2aNVqzZo3Onz8vSSpRooTat2+vatWqSZIMw9DChQu1bt06Xb16VUFBQXrllVdUsmTJLNk/AAAAAJjJ9DVLiYmJCg4OzrIC8ufPr06dOmns2LEaO3asKlWqpA8//FAnTpyQJC1btkzLly9Xjx49NHbsWHl7eyssLEzx8fFZVgMAAAAA3C7TYSk4OFh///13lhVQs2ZNVa9eXcWLF1fx4sXVsWNHubu76++//5ZhGFqxYoXatm2rOnXqqFSpUgoNDVVCQoK2bNmSZTUAAAAAwO0yHZa6d++ubdu2acWKFTp79qyuXr2a5udepaSk6Oeff1ZCQoLKlCmjc+fOKTo6WlWqVLG1sVqtqlChgv788890+0lKStK1a9dsP5yFAgAAAJBZmb5mKVeuXCpevLi++uqrdGe9mz9/fqb6PH78uIYMGaKkpCS5u7vr7bffVokSJWyByMvLy669l5eXLly4kG5/ERERWrRoke2xv7+/xo0bl6maAAAAADzeMh2WvvzyS/3yyy+qVauWfHx8smQ2vOLFi+ujjz5SXFyctm3bpilTpmjkyJG29RaLxa69YRh37K9t27Z67rnn0t0eAAAAAO4m00lnx44d6tixo55//vmsK8LFRUWLFpUkBQQE6PDhw1qxYoVat24tSYqOjla+fPls7WNjY9OcbbqV1WqV1WrNsvoAAAAAPH4yfc2Si4uL/P39s6MWG8MwlJSUpMKFC8vb21v79u2zrUtOTtbBgwdVtmzZbK0BAAAAwOMt02eWateurb1796py5cpZUsDcuXNVrVo1FShQQNevX9fPP/+sAwcOaMiQIbJYLGrZsqUiIiJUrFgxFS1aVBEREXJzc1P9+vWzZP8AAAAAYCbTYalevXr64osvlJycrOrVqytPnjxp2pQuXTrD/cXExOjTTz/V5cuXlStXLvn6+mrIkCG2ezm1bt1aiYmJmj59uuLi4hQYGKghQ4bIw8Mjs6UDAAAAQIZZjLvNlnCbl1566a5tMjsb3oNy/vx5JSUlOboMAACQA7We84ejS0jXss7lHF1CuiZNmuToEkyFtTzj6BLSdS5wrKNLeKxZrVYVKlQoQ20zfWbpzTffzHRBAAAAAPCwyXRYatSoUTaUAQAAAAA5S6ZnwwMAAACAx0GGziwtWrRITZo0Uf78+bVo0aK7tm/fvv19FwYAAAAAjpShsLRw4UJVrVpV+fPn18KFC+/anrAEAAAA4GGXobB06+x2OXWmOwAAAADIShm6Zql3796KiorK5lIAAAAAIOfIUFg6f/68kpOTs7sWAAAAAMgxmA0PAAAAAEwQlgAAAADARIZvSvvDDz/Iy8vrru0sFou6d+9+X0UBAAAAgKNlOCz9+uuvGe6UsAQAAADgYZfhsDRmzBgFBgZmZy0AAAAAkGNwzRIAAAAAmCAsAQAAAIAJwhIAAAAAmMhQWHrzzTdVpEiR7K4FAAAAAHKMDE3w0KhRo2wuAwAAAAByFobhAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAICJDM2Gd6vk5GQtW7ZMW7Zs0YULF5SYmGi33mKxaN68eVlWIAAAAAA4QqbD0ty5c7V8+XJVq1ZNtWrVktVqzY66AAAAAMChMh2WfvnlF7Vv314vvvhidtQDAAAAADlCpq9ZiouLU/ny5bOjFgAAAADIMTIdlsqXL6+oqKhsKAUAAAAAco5Mh6Xu3btrw4YN2rZtm5KTk7OjJgAAAABwuExfszRo0CDduHFDEydOlMVikZubW5o2X331VZYUBwAAAACOkumwVKdOHVksluyoBQAAAAByjEyHpdDQ0OyoAwAAAABylExfswQAAAAAj4NMn1lKdfz4cZ06dUqJiYlp1jVs2PC+igIAAAAAR8t0WEpISNCHH36o/fv3p9uGsAQAAADgYZfpYXiLFy/WuXPnNGLECEnSf/7zHw0dOlR16tRRsWLFNG7cuKyuEQAAAAAeuEyHpR07dqh169YqW7asJKlgwYKqXLmyBgwYIH9/f61ZsybLiwQAAACABy3TYen8+fPy8fGRk9PNTW+9Zumpp57Sjh07sq46AAAAAHCQTIel3LlzKyEhQZLk5eWlM2fO2NYlJyfb1gEAAADAwyzTYalUqVI6ffq0JKlixYqKiIjQH3/8ocjISC1evFi+vr5ZXiQAAAAAPGiZDkuNGzfW9evXJUkdO3ZUQkKChg8friFDhuj8+fP697//neVFAgAAAMCDlumpw5988knbvwsXLqxPPvlE+/fvl8ViUdmyZZUnT54sLRAAAAAAHOGeb0qbyt3dXTVr1syKWgAAAAAgx7insJSUlKSffvpJBw4c0JUrV9SzZ08VK1ZMO3bsUKlSpVSkSJGsrhMAADwCbrz6vKNLSF+jDx1dAYAcJtNhKTY2ViNHjtTJkyfl7e2t6OhoxcfHS7p5D6a9e/eqZ8+eWV4oAAAAADxImZ7g4dtvv9W1a9c0duxYTZ061W5dxYoVdfDgwSwrDgAAAAAcJdNhaffu3QoJCVHp0qVlsVjs1hUoUEAXL17MsuIAAAAAwFEyHZbi4+NVqFAh03XJyclKSUm576IAAAAAwNEyHZYKFy6sv/76y3RdZGSkihcvft9FAQAAAICjZTos1a9fX8uWLdOOHTtkGIYkyWKxKDIyUitXrtRTTz2V5UUCAAAAwIOW6dnwWrdurT///FPjx49X7ty5JUljxozRlStXVLVqVbVs2TLLiwQAAHic/TA/2tElAI+lTIclFxcXDR48WFu3btXu3bsVExOjvHnzqkaNGnryySfl5JTpk1UAAAAAkOPc001pLRaL6tWrp3r16mV1PQAAAACQI3AaCAAAAABMZOjM0siRIzPcocVi0XvvvXfPBQEAAABATpChsHTw4EF5eHioQIEC2V0PAAAAAOQIGQpLhQsX1rlz55QrVy41btxYTz75pNzd3bO7NgAAAABwmAyFpcmTJ+vgwYNav369Zs2apa+++kpPPPGEGjdurLJly2Z3jQAAAADwwGV4NrwKFSqoQoUK6tGjh7Zs2aKffvpJ7733nooXL67GjRurQYMG8vb2zsZSAQAAAODByfTU4bly5dIzzzyjZ555RsePH9fatWv13Xff6a+//tLbb7+dHTUCAAAAwAN3z1OHnzx5Uhs3btSvv/4qwzBUvHjxrKwLAAAAABwqU2eWrl+/ri1btmjDhg2KjIxUkSJF1KJFCzVq1Ej58+fPrhoBAAAA4IHL8NTh69ev17Zt2yRJderUUefOnVWhQoVsLQ4AAAAAHCXDN6X18PDQU089pXr16snDw0OSdOTIEdP2pUuXzroKAQAAAMABMjwMLz4+XuvWrdO6devu2nb+/Pn3VRQAAAAAOFqGwtKbb76Z3XUAAAAAQI6SobDUqFGjbC4DAAAAAHKWe546HAAAAAAeZYQlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADCRoZvSZqeIiAht375dp06dkqurq8qUKaMuXbqoePHitjaGYWjhwoVat26drl69qqCgIL3yyisqWbKkAysHAAAA8Chz+JmlgwcPqnnz5hozZoyGDh2qlJQUhYWF6fr167Y2y5Yt0/Lly9WjRw+NHTtW3t7eCgsLU3x8vAMrBwAAAPAoc3hYGjJkiBo1aqSSJUvKz89PvXr10oULF3TkyBFJN88qrVixQm3btlWdOnVUqlQphYaGKiEhQVu2bHFw9QAAAAAeVQ4PS7e7du2aJClPnjySpHPnzik6OlpVqlSxtbFarapQoYL+/PNP0z6SkpJ07do12w9noAAAAABklsOvWbqVYRj66quvVK5cOZUqVUqSFB0dLUny8vKya+vl5aULFy6Y9hMREaFFixbZHvv7+2vcuHHZUzQAAACAR1KOCkszZszQ8ePHNWrUqDTrLBaL3WPDMNLtp23btnruuefS3RYAAAAA7ibHhKWZM2dq165dGjlypAoUKGBb7u3tLenmGaZ8+fLZlsfGxqY525TKarXKarVma70AAAAAHm0Ov2bJMAzNmDFD27Zt03vvvafChQvbrS9cuLC8vb21b98+27Lk5GQdPHhQZcuWfdDlAgAAAHhMOPzM0owZM7RlyxYNGjRIHh4etmuUcuXKJVdXV1ksFrVs2VIREREqVqyYihYtqoiICLm5ual+/fqOLR4AAADAI8vhYWnNmjWSpBEjRtgt79Wrlxo1aiRJat26tRITEzV9+nTFxcUpMDBQQ4YMkYeHxwOuFkCqSZMmObqEdPXp08fRJQAAgEeAw8PSggUL7trGYrEoJCREISEhD6AiAAAAAMgB1ywBAAAAQE5EWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADDh4ugC8Pi48erzji4hXc7Tvnd0CQAAAMhhOLMEAAAAACYISwAAAABggmF4AB45hSMHO7qEdJ0LHOvoEgAAQAY5PCwdPHhQ33//vY4eParLly/r7bffVu3atW3rDcPQwoULtW7dOl29elVBQUF65ZVXVLJkSQdWDQAAAOBR5/BheAkJCfLz81OPHj1M1y9btkzLly9Xjx49NHbsWHl7eyssLEzx8fEPuFIAAAAAjxOHh6Vq1aqpQ4cOqlOnTpp1hmFoxYoVatu2rerUqaNSpUopNDRUCQkJ2rJliwOqBQAAAPC4cHhYupNz584pOjpaVapUsS2zWq2qUKGC/vzzz3S3S0pK0rVr12w/nIUCAAAAkFkOv2bpTqKjoyVJXl5edsu9vLx04cKFdLeLiIjQokWLbI/9/f01bty4bKkRAAAAwKMpR4elVBaLxe6xYRh3bN+2bVs999xz6W4PAAAAAHeTo8OSt7e3pJtnmPLly2dbHhsbm+Zs062sVqusVmt2lwcAAADgEZajr1kqXLiwvL29tW/fPtuy5ORkHTx4UGXLlnVgZQAAAAAedQ4/s3T9+nWdPXvW9vjcuXOKiopSnjx5VLBgQbVs2VIREREqVqyYihYtqoiICLm5ual+/foOrBoAAADAo87hYenw4cMaOXKk7fHXX38tSWrYsKFCQ0PVunVrJSYmavr06YqLi1NgYKCGDBkiDw8PR5UMAAAA4DHg8LBUsWJFLViwIN31FotFISEhCgkJeYBVAQAAAHjc5ehrlgAAAADAUQhLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJlwcXQCQE7Se84ejSzC1rHM5R5cAAADw2OLMEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAkXRxcAIH0/zI92dAkAAACPLc4sAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmHBxdAEZtXr1an3//feKjo5WiRIl1K1bN5UvX97RZQEAAAB4RD0UZ5a2bt2q2bNnq127dho3bpzKly+v999/XxcuXHB0aQAAAAAeUQ9FWPrxxx/VpEkTNW3a1HZWqWDBglqzZo2jSwMAAADwiMrxw/CSk5N15MgRtWnTxm55cHCw/vzzT9NtkpKSlJSUZHtssVjk4eEhF5ccf7iPNKeAso4uIV1lC+dxdAmmCrq4O7qEdCU4F3d0CenL4+roCtJltVodXQLgUHwW3Bs+D+4BnwVIR2YyQY5PD7GxsUpJSZGXl5fdci8vL0VHR5tuExERoUWLFtke16tXT3379lW+fPmys1TczaQ5jq4gXd86uoCHUh9HF/BQKuToAgBH47PgEcTnQWbxWfDwyPFhKZXFYsnQMklq27atnnvuObtlSUlJpHg81uLj4zVixAiNGDFCHh4eji4HAOAAfBYAmZPjw5Knp6ecnJzSnEWKiYlJc7YpldVqJRgBtzEMQ0ePHpVhGI4uBQDgIHwWAJmT4yd4cHFxUenSpbVv3z675fv27VPZsjl33DMAAACAh1uOP7MkSc8995wmT56s0qVLq0yZMvrf//6nCxcuqFmzZo4uDQAAAMAj6qEIS08++aSuXLmixYsX6/LlyypZsqQGDx6sQoW4PA7IKKvVqvbt2zNEFQAeY3wWAJljMRi0CgAAAABp5PhrlgAAAADAEQhLAAAAAGCCsAQAAAAAJghLQCZduXJFPXv21Llz5yRJBw4cUEhIiOLi4hxc2aNl1apVGjdunKPLAIB08XnwYPB5AEd6KGbDA3KSiIgI1ahRQ4ULF87wNgcOHNDIkSPTLP/444/l4+OTleVli4MHD+r777/X0aNHdfnyZb399tuqXbt2mnZnz57VkiVL9PvvvysmJkZ58+aVj4+PGjdurCeffFLOzs6SpJCQENs2Tk5Oypcvn+rWratOnTrZZmhq2rSplixZoj/++EPlypV7MAcKAJnwOH4ehIaG6vz582mWP/PMM+rZs6ftMZ8HeFQQloBMSExM1IYNGzR48OB72j48PFy5cuWyPfb09Myq0tJITk6Wi0vW/C+ekJAgPz8/NW7cWBMmTDBtExkZqdGjR6tEiRJ65ZVX5OPjo+vXr+vkyZNau3atSpYsKT8/P1v7Xr16qWrVqkpOTtaxY8c0depUubm5qUOHDpJuTm9bv359rVy5kg9HADnO4/p5MHbsWKWkpNgeHz9+XGFhYXriiSdsy/g8wKOEsARkwm+//SYnJyeVKVMmzbojR45ozpw5OnnypPz8/NSrVy8VL17cro2Xl5dy586dbv/r16/Xjz/+qLNnzypPnjyqU6eOXnnlFUnShQsXNHPmTP3+++9ycnJSlSpV1KNHD3l7e0uSFixYoB07dqhFixZasmSJzp8/r3nz5unixYt33C4jqlWrpmrVqqW73jAMTZkyRcWKFdPo0aPl5PR/I3z9/f311FNP6fa7FOTKlctWQ8GCBVWzZk0dPXrUrk3NmjUVFhamxMREubq6ZrheAMhuj+vnwe2hbunSpSpSpIgqVKggic8DPHq4ZgnIhEOHDikgIMB03bx58/Tvf/9bH3zwgZydnfXZZ5+laTNo0CC99tprGjVqlPbv32+3bs2aNZoxY4aefvppjR8/XoMGDVLRokUl3fzw+eijj3T16lWNHDlSQ4cO1T///KPw8HC7Ps6ePatffvlF//nPf/Thhx9KUoa2u19RUVE6deqUWrVqZffBeCuLxZLu9qdPn9aBAwcUFBRkt7x06dK6ceOGIiMjs7ReALhffB7cPGO1efNmNW7c2PYez+cBHjWcWQIy4dy5c8qXL5/pug4dOtj+sta6dWt98MEHtr+A5cuXT6+99ppKly6t5ORkbdq0SaNHj9bw4cNt2yxevFitWrVSy5YtbX0GBgZKkn7//XcdO3ZMn376qQoWLChJeuuttzRgwABFRkba2iUnJ+utt96y/eVv3759Gdrufp05c0aS7P5yGhMTo969e9sed+nSRc2bN7c9/uSTT+Tk5KSUlBQlJSWpevXqatOmjV2/7u7uypUrl86dO2d7ngAgJ+DzQNq+fbvi4uLUqFEj2zI+D/CoISwBmZCUlGS74PR2vr6+tn+nfoDGxsaqYMGCKl68uN0HR5kyZXThwgX98MMPqlChgmJiYnT58mVVqlTJtO+TJ0+qQIECtg84SSpRooRy586tU6dO2T7kChUqZDdEIqPbZZVb/1qYN29effTRR5KkESNGKDk52a7tyy+/rODgYKWkpOjs2bP66quv9Omnn6pfv3527VxdXZWYmJildQLA/eLzQNqwYYOqVq2q/Pnzp1nH5wEeFQzDAzIhb9686U4Jmzqzj/R/HxK3XgR7uzJlyujs2bOSlKHx12bDFgzDsFvu5uZ2T9vdr9ThIadOnbItc3JyUtGiRVW0aFG75yaVt7e3ihYtquLFi6t69eoKCQnR1q1bbc9JqqtXr2brhc8AcC8e98+D8+fPa9++fWratKndcj4P8KghLAGZ4Ofnp5MnT2ZJX0ePHrVd0Orh4aFChQqlGbeeqkSJErpw4YIuXLhgW3by5Eldu3btjlPN3ut2meXv7y8fHx/98MMPd/xCcCepY9tv/avh2bNnlZSUZDdrEgDkBI/758GGDRvk5eWl6tWr2y3n8wCPGsISkAlVq1bVyZMndfXq1Uxtt3z5cm3fvl1nzpzRiRMnNHfuXG3btk3/+te/bG1efPFF/fDDD1qxYoXOnDmjI0eOaOXKlZKkypUry9fXV5MnT9aRI0cUGRmpTz/9VBUqVEj3AuP72e52169fV1RUlKKioiTdHKsfFRVl+9C1WCx68803dfr0aQ0bNkw7d+7UmTNndPLkSa1Zs0axsbFpLvS9du2aoqOjdenSJR08eFCLFi1SsWLF7D60//jjDxUpUsT2l0oAyCke188D6eZZsp9++kkNGzZMc6aIzwM8arhmCciEUqVKqXTp0vrll1/UrFmzDG+XnJysb775RpcuXZKrq6tKliyp//73v3Z/kWvUqJGSkpK0fPlyffPNN/L09FSdOnUk3fzwGThwoGbOnKnhw4fbTfl6JxnZ7ty5c+rdu7eGDx+uihUrmvZz+PBhu5sofv3115Kkhg0bKjQ0VNLNYSQffPCBIiIiNGPGDEVHR8vNzU2+vr56+eWX1bhxY7s+p06daqvR29tb5cuXV8eOHe0+eH/++ec0QzwAICd4XD8PpJuTTFy4cCHN+3oqPg/wKLEYt092D+COdu/erW+++UYTJkxId1rUh8mBAwc0fvx4TZ48WXny5HF0OTbHjx/X6NGj9cknn9jduBEAcgo+Dx4MPg/gSJxZAjKpevXqOnv2rC5dumQ3q9DDas+ePWrbtm2O+mCUpMuXLys0NJQPRgA5Fp8HDwafB3AkziwBAAAAgImH/5wxAAAAAGQDwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmOA+SwCAh0ZISEiG2g0fPlwVK1bMkn2OGDHC7r8AgMcHYQkA8NAICwuze7x48WIdOHBA7733nt3yEiVKPMiyAACPKMISAOChUaZMGbvHnp6eslgsaZYDAJAVCEsAgEfK1atXNW/ePO3YsUOxsbEqUKCA6tWrp/bt28tqtdraJSYmatGiRfr555916dIleXp6qlatWurYsaNy587twCMAAOQUhCUAwCMjMTFRI0eO1NmzZxUSEiJfX18dOnRIS5cuVVRUlAYPHixJMgxDH330kfbv3682bdqofPnyOnbsmBYsWKC///5bYWFhdsEKAPB4IiwBAB4ZGzdu1LFjx9S/f3898cQTkqTg4GC5u7trzpw52rdvn4KDg7V3717t3btXXbp00fPPP29rV6BAAYWHh2vjxo16+umnHXkoAIAcgKnDAQCPjP3798vNzU1169a1W96oUSNJ0u+//25rd+vyVE888YTc3Nxs6wEAjzfCEgDgkXH16lV5e3vLYrHYLffy8pKzs7OuXLlia+fs7CxPT0+7dhaLRd7e3rZ2AIDHG2EJAPDIyJMnj2JiYmQYht3ymJgY3bhxwxaO8uTJoxs3big2NtaunWEYio6OVt68eR9YzQCAnIuwBAB4ZFSuXFnXr1/Xjh077JZv3LhRklSpUiVbO0natGmTXbtt27YpISHBth4A8HhjggcAwCOjQYMGWr16taZMmaJz586pVKlS+uOPPxQREaFq1aopODhY0s3JHKpUqaI5c+YoPj5eZcuW1fHjx7VgwQL5+/urQYMGDj4SAEBOQFgCADwyXF1dNXz4cH333Xf64YcfFBsbq/z586tVq1Z68cUXbe0sFosGDhyohQsX6qefftKSJUvk6empBg0aqGPHjkwbDgCQJFmM2wd2AwAAAAC4ZgkAAAAAzBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATPw/Wyj6tYDIru0AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -253,7 +240,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "ff56958f-8c1d-4fd7-b885-6efb81af8da7", "metadata": { "tags": [] @@ -263,20 +250,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", - "Processing format: original-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", - "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", - "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", - "Processing format: rechunked-8mb-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", - "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", - "Processing format: original-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", - "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", - "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", - "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", - "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", - "Processing format: rechunked-8mb-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\n" + "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n" ] } ], @@ -308,24 +282,21 @@ " )\n", " return ds[variable]\n", "\n", + "\n", "for key, dataset in test_dict.items():\n", " for k, link in dataset[\"links\"].items():\n", + " # log_filename = f\"logs/fsspec-xarray-{key}-{k}-default.log\" \n", + " # # Create a new FileHandler for each iteration\n", + " # file_handler = logging.FileHandler(log_filename)\n", + " # file_handler.setLevel(logging.DEBUG)\n", "\n", - " log_filename = f\"logs/fsspec-xarray-{key}-{k}-default.log\"\n", - "\n", - " \n", - " # Create a new FileHandler for each iteration\n", - " file_handler = logging.FileHandler(log_filename)\n", - " file_handler.setLevel(logging.DEBUG)\n", - "\n", - " # Add the handler to the root logger\n", - " logging.getLogger().addHandler(file_handler)\n", + " # # Add the handler to the root logger\n", + " # logging.getLogger().addHandler(file_handler)\n", " print (f\"Processing format: {k}, link: {link}\")\n", " start = time.time()\n", " if \"kerchunk\" in k or link.endswith(\".json\"):\n", " ds = kerchunk_result(link, dataset[\"group\"], dataset[\"variable\"])\n", " data_mean = ds.mean()\n", - " \n", " elapsed = time.time() - start\n", " kerchunk_benchmarks.append(\n", " {\"tool\": \"kerchunk\",\n", @@ -354,8 +325,8 @@ " \"bytes_requested\": fo.cache.total_requested_bytes,\n", " \"shape\": ds[dataset[\"variable\"]].values.shape,\n", " \"mean\": data_mean})\n", - " logging.getLogger().removeHandler(file_handler)\n", - " file_handler.close()" + " # logging.getLogger().removeHandler(file_handler)\n", + " # file_handler.close()" ] }, { @@ -370,15 +341,24 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 59, "id": "a7aacf16-8276-4a50-b5af-3103056d73f4", "metadata": {}, "outputs": [ { "data": { - "image/png": "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Nl4rKyvUrl0bly9fxpMnTxTW85H19bpWrVphx44diI+PL3Y6Zkk0atRIqczCwgIA4OLionLbyZMnS9XH3bt30bVrVxQUFGD79u2wtLSUbztx4gQA4M6dOyrXwUtMTJT/t0GDBqW+PiUxZMgQrFy5UuW29evXo2/fvqVq71VCCJXl2traha5D9KrXp67Z2dlhypQpMDc3x7fffovZs2fjjz/+KFEssbGxCA8Px8mTJ3H//n3k5eXJt706ZfHZs2dISEiAnZ0d7O3ti2wzLi4OQgi0adNG5ZS/V8mudWJiosprfefOHRQUFODKlStwdXVFz549ER4eju7du6NXr17w8vJCy5YtlZ6y+tlnn2HixIkYMWIE9u3bh44dO6Jly5aoU6dOcadEiar7Slb26ueK7Fh2796N/fv3K+2jqakpv3df1axZs1LHVNRniKxM1WdecX2Vx3tfCIHVq1cjMjISFy9eREZGhsJ6dLIHMryucePGSmU1atQAADx+/BgGBgalug9Pnz6N/Px8ZGVlqby3kpKSALy89z777LMi25Kt91XSaeWXL1/Go0ePYGlpqXKN0Hv37sn7BgBHR0c4OTnh999/R1paGrp3745WrVqhcePGUFdXl+9naGiIjh07Yvfu3WjcuDF69uyJVq1a4dNPP1WaYlwarVu3RvXq1TFv3jzEx8ejS5cuaNmyJZycnEq9hIKq94urq6vS97Ds/XLixAlcvXpVaZ+srCzcv38f9+/ff+MH4ZT2O0VGR0en2Km1JiYmAF5OfyciImVMrBERvUXVq1dHYmIibt26hbp1675RW7KFlQtbq61atWq4detWmdvPyMiQt6OKubm5UmLt9T+mbGxs5Im14uKtXr06Ll++jMzMTIXEWlH9vxrnm1K1lo6GhkaR215NyBQnKysL3bt3R1paGv744w+lP6gfPnwIANixYwd27NhRaDvPnj0DUPrrU5Gys7Px8OFDqKury/8gKy8DBgzA8OHDcfTo0RLV/+OPP9C7d29IpVJ4e3vD1tYWenp68sXzX31wwOPHjwEAn3zySbHtlqau7FqvXbu2yHqya+3m5oYDBw5g3rx5WLdunTyB3aRJEyxatAht2rQB8PKhHcePH8eMGTOwa9cueaKxbt26mDVrFr788stiY5NRdV9Vq1YNampqCu852bHMmTOnxG0DhX8OFCUzMxNqamqo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+lBxxBoVycrKCkePHq3oMIiIiIiIiIiIKp1KM2Jt3rx5kEgk8qc6AoAQAiEhIbC0tISuri48PT3x77//KuyXnZ2NwMBAmJmZQV9fH926dSvyqY9ERERERERERETloVIk1k6fPo2ffvoJzs7OCuULFy7E999/j4iICJw+fRrVq1eHl5cXnjx5Iq8zevRobNmyBevXr8eRI0fw9OlTfPbZZ8jPz3/Xh0FERERERERERB+RCk+sPX36FF999RV+/vlnVKlSRV4uhEB4eDgmT56ML774Ag0aNEBUVBSeP3+O33//HQCQkZGBVatWITQ0FO3bt0ejRo2wZs0a+TpgREREREREREREb0uFJ9ZGjBiBLl26oH379grlKSkpuHPnDjp06CAv09bWhoeHB44dOwYAOHPmDHJzcxXqWFpaokGDBvI6REREREREREREb0OFPrxg/fr1OHv2LE6fPq207c6dOwAAc3NzhXJzc3Ncv35dXkdLS0thpJusjmx/VbKzs5GdnS1/nZmZWeZjICIiIiIiIiKij1OFjVhLS0vDqFGjsGbNGujo6BRaTyKRKLwWQiiVva64OvPmzYORkZH8x8rKqnTBExERERERERHRR6/CEmtnzpxBeno6mjRpAg0NDWhoaODgwYNYunQpNDQ05CPVXh95lp6eLt9WvXp15OTk4NGjR4XWUWXSpEnIyMiQ/6SlpZXz0dG7EBISAhcXl4oOQ6XIyEgYGxtXdBhERERERERE9BZV2FTQdu3a4cKFCwplAwcOhIODA4KDg1GrVi1Ur14d+/btQ6NGjQAAOTk5OHjwIBYsWAAAaNKkCTQ1NbFv3z706tULAHD79m1cvHgRCxcuLLRvbW1taGtrv1H8TlFOb7R/aV0YcKH4SvRG5s2bh++++w6jRo1CeHh4RYdDRERERERERJVchSXWDAwM0KBBA4UyfX19mJqaystHjx6NuXPnwt7eHvb29pg7dy709PTg6+sLADAyMoK/vz/GjRsHU1NTmJiYYPz48XByclJ6GAJRUU6fPo2ffvoJzs7OFR0KEREREREREb0nKvypoEWZMGECRo8ejeHDh8PV1RW3bt3C3r17YWBgIK8TFhaG7t27o1evXnB3d4eenh7++usvqKurV2DklYOnpycCAgIQEBAAY2NjmJqaYsqUKRBCAADWrFkDV1dXGBgYoHr16vD19UV6erpCG9u3b4e9vT10dXXRpk0bREVFQSKR4PHjx/I6x44dQ+vWraGrqwsrKyuMHDkSz549KzK27OxsjBw5EtWqVYOOjg5atmyp8BCL2NhYSCQSREdHw9XVFXp6emjRogUuX76ssr1Dhw5BU1NTaerwuHHj0Lp16yJjefr0Kb766iv8/PPPSg/CAABbW1vMnj0b/fv3h1QqhY2NDbZt24Z79+7Bx8cHUqkUTk5OiIuLU9p369atqFOnDnR0dODl5cVpx0REREREREQfkEqVWIuNjVWYgieRSBASEoLbt28jKysLBw8eVBrlpqOjg2XLluHBgwd4/vw5/vrrLz6M4BVRUVHQ0NDAyZMnsXTpUoSFheF///sfgJdTa2fNmoXz589j69atSElJgZ+fn3zf1NRU9OzZE927d0d8fDyGDBmCyZMnK7R/4cIFeHt744svvsA///yDDRs24MiRIwgICCgyrgkTJmDTpk2IiorC2bNnYWdnB29vbzx8+FCh3uTJkxEaGoq4uDhoaGhg0KBBKttr3bo1atWqhd9++01elpeXhzVr1mDgwIFFxjJixAh06dKlyFGOYWFhcHd3x7lz59ClSxf069cP/fv3x9dffy2Pv3///vKkJQA8f/4cc+bMQVRUFI4ePYrMzEz06dOnyFiIiIiIiIiI6P1RYVNB6d2wsrJCWFgYJBIJ6tatiwsXLiAsLAyDBw9WSFLVqlULS5cuRbNmzfD06VNIpVKsXLkSdevWxaJFiwAAdevWxcWLFzFnzhz5fosWLYKvry9Gjx4NALC3t8fSpUvh4eGBFStWqHzi67Nnz7BixQpERkaiU6dOAICff/4Z+/btw6pVqxAUFCSvO2fOHHh4eAAAJk6ciC5duiArK0tlu/7+/li9erV8/x07duD58+fy9fdUWb9+Pc6ePaswWk6Vzp07Y8iQIQCAadOmYcWKFWjatCm+/PJLAEBwcDDc3Nxw9+5dVK9eHQCQm5uLiIgIfPrppwBeJjkdHR1x6tQpNGvWrMj+iIiIiIiIiKjyq1Qj1qj8NW/eHBKJRP7azc0NSUlJyM/Px7lz5+Dj4wMbGxsYGBjA09MTAHDjxg0AwOXLl9G0aVOF9l5PCJ05cwaRkZGQSqXyH29vbxQUFCAlJQVz585V2Hbjxg0kJycjNzcX7u7u8nY0NTXRrFkzXLp0SaH9V9c8s7CwAACl6aoyfn5+uHr1Kk6cOAEA+OWXX9CrVy/o6+vj8OHDCnGsXbsWaWlpGDVqFNasWaMyUVdYHLInzjo5OSmVvRqbhoYGXF1d5a8dHBxgbGysdIxERERERERE9H7iiLWPVFZWFjp06IAOHTpgzZo1qFq1Km7cuAFvb2/k5OQAAIQQCkk5WdmrCgoKMGTIEIwcOVKpD2trawwdOlRhxJilpSUePXoEACrbfr1MU1NT/rtsW0FBgcpjqlatGrp27YrVq1ejVq1a2LlzJ2JjYwEArq6uiI+Pl9c1NzdHdHQ00tPT0aRJE3l5fn4+Dh06hIiICGRnZ8vX6lMVR0lie/14CisjIiIiIiIiovcPE2sfONnorVdf29vbIzExEffv38f8+fPla9K9vvi+g4MDdu7cqVD2ep3GjRvj33//hZ2dncr+TUxMYGJiolBmZ2cHLS0tHDlyRP6E19zcXMTFxcmnlJbVN998gz59+qBGjRqoXbu2fFScrq6uUozt2rXDhQsXFMoGDhwIBwcHBAcHv/EDMPLy8hAXFycf5Xf58mU8fvwYDg4Ob9QuEREREREREVUOnAr6gUtLS8PYsWNx+fJlrFu3DsuWLcOoUaNgbW0NLS0tLFu2DNeuXcP27dsxa9YshX2HDBmCxMREBAcH48qVK9i4cSMiIyMB/N+oq+DgYBw/fhwjRoxAfHw8kpKSsH37dgQGBhYak76+PoYNG4agoCDs3r0bCQkJGDx4MJ4/fw5/f/83Ol5vb28YGRlh9uzZxT60wMDAAA0aNFD40dfXh6mpqdJDMspCU1MTgYGBOHnyJM6ePYuBAweiefPmXF+NiIiIiIiI6APBxNoHrn///njx4gWaNWuGESNGIDAwEN9++y2qVq2KyMhI/PHHH6hXrx7mz5+PxYsXK+xbs2ZN/Pnnn9i8eTOcnZ2xYsUK+VNBtbW1Abxce+zgwYNISkpCq1at0KhRI0ydOlW+Hlph5s+fjx49eqBfv35o3Lgxrl69ij179qBKlSpvdLxqamrw8/NDfn4++vfv/0ZtvSk9PT0EBwfD19cXbm5u0NXVxfr16ys0JiIiIiIiIiIqPxLx+qJZH6HMzEwYGRkhIyMDhoaGCtuysrKQkpKCmjVrFrvAfWXj6ekJFxcXhIeHl1ubc+bMwcqVK5GWllZubZa3wYMH4+7du9i+fXtFh0Ll6H1+LxIRERERfYycopyKr1RKG+fllWt7jol8uBwpKypP9DqusUZF+uGHH9C0aVOYmpri6NGjWLRoEQICAio6LJUyMjJw+vRprF27Ftu2bavocIiIiIiIiIjoA8fEGhUpKSkJs2fPxsOHD2FtbY1x48Zh0qRJFR2WSj4+Pjh16hSGDBkCLy+vig6HiIiIiIiIiD5wTKx9wGJjY9+4jbCwMISFhb15MO9AeRwvEREREREREVFJ8eEFREREREREREREZcDEGhERERERERERURkwsUZERERERERERFQGTKwRERERERERERGVARNrREREREREREREZcDEGhERERERERERURkwsUbvrZCQELi4uFR0GCpFRkbC2Ni4osMgIiIiIiIiordIo6IDeF9dcnB8p/05Jl56p/19LPLy8hASEoK1a9fizp07sLCwgJ+fH6ZMmQI1NeadiYiIiIiIiKhwTKzRR23BggVYuXIloqKiUL9+fcTFxWHgwIEwMjLCqFGjKjo8IiIiIiIiIqrEOCTnA+bp6YmAgAAEBATA2NgYpqammDJlCoQQAIA1a9bA1dUVBgYGqF69Onx9fZGenq7Qxvbt22Fvbw9dXV20adMGUVFRkEgkePz4sbzOsWPH0Lp1a+jq6sLKygojR47Es2fPiowtOzsbI0eORLVq1aCjo4OWLVvi9OnT8u2xsbGQSCSIjo6Gq6sr9PT00KJFC1y+fFlle4cOHYKmpibu3LmjUD5u3Di0bt260DiOHz8OHx8fdOnSBba2tujZsyc6dOiAuLg4eR1bW1vMnj0b/fv3h1QqhY2NDbZt24Z79+7Bx8cHUqkUTk5OCvvIbN26FXXq1IGOjg68vLyQlpZW5HkhIiIiIiIiovcHE2sfuKioKGhoaODkyZNYunQpwsLC8L///Q8AkJOTg1mzZuH8+fPYunUrUlJS4OfnJ983NTUVPXv2RPfu3REfH48hQ4Zg8uTJCu1fuHAB3t7e+OKLL/DPP/9gw4YNOHLkCAICAoqMa8KECdi0aROioqJw9uxZ2NnZwdvbGw8fPlSoN3nyZISGhiIuLg4aGhoYNGiQyvZat26NWrVq4bfffpOX5eXlYc2aNRg4cGChcbRs2RLR0dG4cuUKAOD8+fM4cuQIOnfurFAvLCwM7u7uOHfuHLp06YJ+/fqhf//++Prrr+Xx9+/fX560BIDnz59jzpw5iIqKwtGjR5GZmYk+ffoUeV6IiIiIiIiI6P3BqaAfOCsrK4SFhUEikaBu3bq4cOECwsLCMHjwYIUkVa1atbB06VI0a9YMT58+hVQqxcqVK1G3bl0sWrQIAFC3bl1cvHgRc+bMke+3aNEi+Pr6YvTo0QAAe3t7LF26FB4eHlixYgV0dHSUYnr27BlWrFiByMhIdOrUCQDw888/Y9++fVi1ahWCgoLkdefMmQMPDw8AwMSJE9GlSxdkZWWpbNff3x+rV6+W779jxw48f/4cvXr1KvT8BAcHIyMjAw4ODlBXV0d+fj7mzJmDvn37KtTr3LkzhgwZAgCYNm0aVqxYgaZNm+LLL7+Ut+Pm5oa7d++ievXqAIDc3FxERETg008/BfAyyeno6IhTp06hWbNmhcZERERERERERO8Hjlj7wDVv3hwSiUT+2s3NDUlJScjPz8e5c+fg4+MDGxsbGBgYwNPTEwBw48YNAMDly5fRtGlThfZeTwidOXMGkZGRkEql8h9vb28UFBQgJSUFc+fOVdh248YNJCcnIzc3F+7u7vJ2NDU10axZM1y6pPiQBmdnZ/nvFhYWAKA0XVXGz88PV69exYkTJwAAv/zyC3r16gV9fX0cPnxYIY61a9cCADZs2IA1a9bg999/x9mzZxEVFYXFixcjKiqq0DjMzc0BAE5OTkplr8amoaEBV1dX+WsHBwcYGxsrHSMRERERERERvZ84Yu0jlZWVhQ4dOqBDhw5Ys2YNqlatihs3bsDb2xs5OTkAACGEQlJOVvaqgoICDBkyBCNHjlTqw9raGkOHDlUYMWZpaYlHjx4BgMq2Xy/T1NSU/y7bVlBQoPKYqlWrhq5du2L16tWoVasWdu7cidjYWACAq6sr4uPj5XVlibCgoCBMnDhRPkXTyckJ169fx7x58zBgwIAi4yhJbK8fT2FlRERERERERPT+YWLtAycbvfXqa3t7eyQmJuL+/fuYP38+rKysAEBp8X0HBwfs3LlToez1Oo0bN8a///4LOzs7lf2bmJjAxMREoczOzg5aWlo4cuQIfH19AbycNhkXFyefUlpW33zzDfr06YMaNWqgdu3a8lFxurq6KmN8/vw51NQUB26qq6sXmrwrjby8PMTFxclH+V2+fBmPHz+Gg4PDG7dNRERERERERBWPU0E/cGlpaRg7diwuX76MdevWYdmyZRg1ahSsra2hpaWFZcuW4dq1a9i+fTtmzZqlsO+QIUOQmJiI4OBgXLlyBRs3bkRkZCSA/xt1FRwcjOPHj2PEiBGIj49HUlIStm/fjsDAwEJj0tfXx7BhwxAUFITdu3cjISEBgwcPxvPnz+Hv7/9Gx+vt7Q0jIyPMnj27yIcWyHTt2hVz5szBjh07kJqaii1btuD777/H559//kZxAC9HtAUGBuLkyZM4e/YsBg4ciObNm3N9NSIiIiIiIqIPBBNrH7j+/fvjxYsXaNasGUaMGIHAwEB8++23qFq1KiIjI/HHH3+gXr16mD9/PhYvXqywb82aNfHnn39i8+bNcHZ2xooVK+RPBdXW1gbwcu2xgwcPIikpCa1atUKjRo0wdepU+XpohZk/fz569OiBfv36oXHjxrh69Sr27NmDKlWqvNHxqqmpwc/PD/n5+ejfv3+x9ZctW4aePXti+PDhcHR0xPjx4zFkyBClJGNZ6OnpITg4GL6+vnBzc4Ouri7Wr1//xu0SERERERERUeUgEa8vmvURyszMhJGRETIyMmBoaKiwLSsrCykpKahZs6bKJ1FWZp6ennBxcUF4eHi5tTlnzhysXLkSaWlp5dZmeRs8eDDu3r2L7du3V3QoVI7e5/ciEREREdHHyCnKqfhKpbRxXl65tueYyIfLkbKi8kSv4xprVKQffvgBTZs2hampKY4ePYpFixYhICCgosNSKSMjA6dPn8batWuxbdu2ig6HiIiIiIiIiD5wTKxRkZKSkjB79mw8fPgQ1tbWGDduHCZNmlTRYank4+ODU6dOYciQIfDy8qrocIiIiIiIiIjoA8fE2gcsNjb2jdsICwtDWFjYmwfzDpTH8RIRERERERERlRQfXkBERERERERERFQGTKwRERERERERERGVARNrREREREREREREZcDEGhERERERERERURkwsUZERERERERERFQGTKwRERERERERERGVARNrVGKpqamQSCSIj49/633Z2toiPDy8XNv09PTE6NGjy7XNkvLz80P37t0rpG8iIiIiIiIiejs0KjqA99XyoQfeaX8jVrZ9p/197IQQ6Ny5M3bv3o0tW7YwKUZERERERERESjhi7SOSk5NT0SG8N8LDwyGRSCo6DCIiIiIiIiKqxJhY+4B5enoiICAAY8eOhZmZGby8vJCQkIDOnTtDKpXC3Nwc/fr1w/379+X7FBQUYMGCBbCzs4O2tjasra0xZ84chXavXbuGNm3aQE9PDw0bNsTx48fl20JCQuDi4qJQPzw8HLa2tvLXsmmRixcvhoWFBUxNTTFixAjk5uYWeiyrV6+GkZER9u3bBwDFHsezZ8/Qv39/SKVSWFhYIDQ0tMTn7fz58/j+++/xyy+/KG2TTYfduHEjWrVqBV1dXTRt2hRXrlzB6dOn4erqCqlUio4dO+LevXtK+8+YMQPVqlWDoaEhhgwZwmQnERERERER0XuMibUPXFRUFDQ0NHD06FHMnz8fHh4ecHFxQVxcHHbv3o27d++iV69e8vqTJk3CggULMHXqVCQkJOD333+Hubm5QpuTJ0/G+PHjER8fjzp16qBv377Iy8srVVwxMTFITk5GTEwMoqKiEBkZicjISJV1Fy9ejPHjx2PPnj3w8vLC7du3iz2OoKAgxMTEYMuWLdi7dy9iY2Nx5syZYuN6/vw5+vbti4iICFSvXr3QetOnT8eUKVNw9uxZaGhooG/fvpgwYQKWLFmCw4cPIzk5GdOmTVPYJzo6GpcuXUJMTAzWrVuHLVu2YMaMGSU7YURERERERERU6XCNtQ+cnZ0dFi5cCACYNm0aGjdujLlz58q3//LLL7CyssKVK1dgYWGBJUuWICIiAgMGDAAA1K5dGy1btlRoc/z48ejSpQuAlyOw6tevj6tXr8LBwaHEcVWpUgURERFQV1eHg4MDunTpgujoaAwePFih3qRJkxAVFYXY2Fg4OTkBAFasWFHkcVhaWmLVqlX49ddf4eXlBeBlgrFGjRrFxjVmzBi0aNECPj4+RdYbP348vL29AQCjRo1C3759ER0dDXd3dwCAv7+/UqJQS0sLv/zyC/T09FC/fn3MnDkTQUFBmDVrFtTUmOMmIiIiIiIiet8wsfaBc3V1lf9+5swZxMTEQCqVKtVLTk7G48ePkZ2djXbt2hXZprOzs/x3CwsLAEB6enqpEmv169eHurq6QjsXLlxQqBMaGopnz54hLi4OtWrVKvFxvHjxAjk5OXBzc5OXm5iYoG7duvLXc+fOVUjMJSQkID4+HgcOHMC5c+eKjf/VcyAb0SdL/MnK0tPTFfZp2LAh9PT05K/d3Nzw9OlTpKWlwcbGptg+iYiIiIiIiKhyYWLtA6evry//vaCgAF27dsWCBQuU6llYWODatWslalNTU1P+u2yB/4KCAgCAmpoahBAK9VWtnfZqG7J2ZG3ItGrVCjt27MDGjRsxceLEEh9HUlJSsccwdOhQhamjlpaW+P7775GcnAxjY2OFuj169ECrVq0QGxurMn7ZOXi97PXjKQwfkkBERETlzSnKqfhKpXRhwIXiKxEREX1kmFj7iDRu3BibNm2Cra0tNDSUL729vT10dXURHR2Nb775pkx9VK1aFXfu3IEQQp4wio+PL1NbzZo1Q2BgILy9vaGuro6goKASHYednR00NTVx4sQJWFtbAwAePXqEK1euwMPDA8DLEWwmJiYK+02cOFHpuJ2cnBAWFoauXbuW6Rhedf78ebx48QK6uroAgBMnTkAqlZZoiioRERERERERVT5c2OkjMmLECDx8+BB9+/bFqVOncO3aNezduxeDBg1Cfn4+dHR0EBwcjAkTJuDXX39FcnIyTpw4gVWrVpW4D09PT9y7dw8LFy5EcnIyli9fjl27dpU5Zjc3N+zatQszZ85EWFhYiY5DKpXC398fQUFBiI6OxsWLF+Hn51fsOmbVq1dHgwYNFH4AwNraGjVr1izzMcjk5OTA398fCQkJ2LVrF6ZPn46AgACur0ZERERERET0nuJf9B8RS0tLHD16FPn5+fD29kaDBg0watQoGBkZyZM7U6dOxbhx4zBt2jQ4Ojqid+/eSmuFFcXR0RE//PADli9fjoYNG+LUqVMYP378G8Xt7u6OHTt2YOrUqVi6dGmJjmPRokVo3bo1unXrhvbt26Nly5Zo0qTJG8Xxptq1awd7e3u0bt0avXr1QteuXRESElKhMRERERERERFR2UnE6wtifYQyMzNhZGSEjIwMGBoaKmzLyspCSkoKatasCR0dnQqKkIj4XiQiIio5rrFG9GGznbij3NtMnd+l3Nt8G59FG+fllWt7jomXyrU9+jAUlSd6HUesERERERERERERlQETa0RERERERERERGXAxBoREREREREREVEZMLFGRERERERERERUBkysERERERERERERlQETa0RERERERERERGXAxBoREREREREREVEZMLFGRERERERERERUBm+cWMvMzMTWrVtx6dKl8oiHiIiIiIiIiIjovVDqxFqvXr0QEREBAHjx4gVcXV3Rq1cvODs7Y9OmTeUeIFUeqampkEgkiI+Pf+t92draIjw8vFzb9PT0xOjRo8u1zZLy8/ND9+7dK6Rv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NZWXf/755/jmm2/KNbjKRDYFjdPQiIiIiIiIiIgIKENi7ciRIzh69Ci0tLQUym1sbHDr1q1yC4yIiIiIiIiIiKgyUyvtDgUFBSqnQ968eRMGBgblEhQREREREREREVFlV+rEmpeXF8LDw+WvJRIJnj59iunTp6Nz587lGRsREREREREREVGlVeqpoGFhYWjTpg3q1auHrKws+Pr6IikpCWZmZli3bt3biJGIiIiIiIiIiKjSKXVizdLSEvHx8Vi/fj3OnDmDgoIC+Pv746uvvoKuru7biJGIiIiIiIiIiKjSKXViDQB0dXUxcOBADBw4sLzjISIiIiIiIiIiei+Ueo21qKgo7NixQ/56woQJMDY2RosWLXD9+vVyDY6IiIiIiIiIiKiyKnVibe7cufIpn8ePH0dERAQWLlwIMzMzjBkzptwDJCIiIiIiIiIiqoxKPRU0LS0NdnZ2AICtW7eiZ8+e+Pbbb+Hu7g5PT8/yjo+IiIiIiIiIiKhSKvWINalUigcPHgAA9u7di/bt2wMAdHR08OLFi/KNjoiIiIiIiIiIqJIq9Yg1Ly8vfPPNN2jUqBGuXLmCLl26AAD+/fdf2Nralnd8RERERERERERElVKpR6wtX74cbm5uuHfvHjZt2gRTU1MAwJkzZ9C3b99yD5CIiIiIiIiIiKgyKvWINWNjY0RERCiVz5gxo1wCIiIiIiIiIiIieh+UesQaERERERERERERMbFGRERERERERERUJkysERERERERERERlQETa0RERERERERERGXAxBoREREREREREVEZlDqxdvfuXfTr1w+WlpbQ0NCAurq6wg8REREREREREdHHQKO0O/j5+eHGjRuYOnUqLCwsIJFI3kZcRERERERERERElVqpE2tHjhzB4cOH4eLi8hbCISIiIiIiIiIiej+UeiqolZUVhBBvIxYiIiIiIiIiIqL3RqkTa+Hh4Zg4cSJSU1PfQjhERERERERERETvh1JPBe3duzeeP3+O2rVrQ09PD5qamgrbHz58WG7BERERERERERERVValTqyFh4e/hTCIiIiIiIiIiIjeL6VOrA0YMOBtxEFERERERERERPReKVFiLTMzE4aGhvLfiyKrR0RERERERERE9CErUWKtSpUquH37NqpVqwZjY2NIJBKlOkIISCQS5Ofnl3uQRERERERERERElU2JEmsHDhyAiYkJACAmJuatBkRERERERERERPQ+KFFizcPDQ+XvREREREREREREHyu1ig6AiIiIiIiIiIjofcTEGhERERERERERURkwsUZERERERERERFQGTKwRERERERERERGVQZkSa3l5edi/fz9+/PFHPHnyBADw33//4enTp+UaHBERERERERERUWVVoqeCvur69evo2LEjbty4gezsbHh5ecHAwAALFy5EVlYWVq5c+TbiJCIiIiIiIiIiqlRKPWJt1KhRcHV1xaNHj6Crqysv//zzzxEdHV2uwREREREREREREVVWpR6xduTIERw9ehRaWloK5TY2Nrh161a5BUZERERERERERFSZlXrEWkFBAfLz85XKb968CQMDg3IJioiIiIiIiIiIqLIrdWLNy8sL4eHh8tcSiQRPnz7F9OnT0blz5/KMjYiIiIiIiIiIqNIq9VTQsLAwtGnTBvXq1UNWVhZ8fX2RlJQEMzMzrFu37m3ESEREREREREREVOmUOrFmaWmJ+Ph4rFu3DmfPnkVBQQH8/f3x1VdfKTzMgIiIiIiIiIiI/l979x6t9Zj3D/yzO+12qXTQiSQKESHENBQ1tXIY8TxTlsNoijETpSennyeHGqMcKxPDMLVLntR4FOMwRjnk9HjQaJGwHEIozSidZKe6fn9Y3U+3drS/du1qv15r3Wv1vb7Xfd2fO/anvd/7ur9fdmZlDtYiIoqKiqJfv37Rr1+/8q4HAAAAAHYImYK1Tz/9NF544YVYvHhxrF+/Pu/coEGDyqUwAAAAANielfnmBcXFxbH33ntH//794+abb47Ro0fnHhvf1GBLjBw5Mo444oioU6dONG7cOHr16hXvvPNO3pyUUgwbNiyaN28eRUVF0aVLl3jzzTfz5pSUlMTAgQOjUaNGUbt27fj5z38en3zySVnfGgAAAABssTIHa1dffXVcffXVsWzZsvjwww9j/vz5uccHH3xQprVmzZoVF1xwQbz00ksxY8aMWLt2bXTv3j1WrVqVm3PjjTfGqFGj4rbbbotXXnklmjZtGj/72c9ixYoVuTmDBw+O6dOnx5QpU+L555+PlStXxkknnRTr1q0r69sDAAAAgC1S5o+CfvXVV3H66adHlSplzuQ28fjjj+cdFxcXR+PGjWP27Nlx7LHHRkopxowZE0OHDo3TTjstIiImTpwYTZo0icmTJ8f5558fy5Yti3HjxsWkSZOiW7duERFx7733RosWLWLmzJnRo0ePH10nAAAAAHxXmdOx/v37x/333781aolly5ZFRESDBg0iImL+/PmxaNGi6N69e25OYWFhdO7cOV588cWIiJg9e3Z88803eXOaN28e7dq1y835rpKSkli+fHneAwAAAADKosw71kaOHBknnXRSPP7443HQQQdF9erV886PGjUqUyEppRgyZEj89Kc/jXbt2kVExKJFiyIiokmTJnlzmzRpEh999FFuTo0aNaJ+/fqbzNnw/NLew/DhwzPVCQAAAAARGYK1ESNGxN///vfYb7/9IiKioKAgd27jP5fVhRdeGK+//no8//zzm5z77roppR98re+bc8UVV8SQIUNyx8uXL48WLVpkqBoAAACAyqrMwdqoUaNi/Pjx0bdv33IrYuDAgfHXv/41nn322dhjjz1y402bNo2Ib3elNWvWLDe+ePHi3C62pk2bxpo1a2Lp0qV5u9YWL14cP/nJT0p9vcLCwigsLCy3+gEAAACofMp8jbXCwsLo1KlTubx4SikuvPDCmDZtWjz11FPRqlWrvPOtWrWKpk2bxowZM3Jja9asiVmzZuVCsw4dOkT16tXz5ixcuDDmzp272WANAAAAAH6sMgdrF110UYwdO7ZcXvyCCy6Ie++9NyZPnhx16tSJRYsWxaJFi2L16tUR8e1HQAcPHhwjRoyI6dOnx9y5c6Nv375Rq1atOOOMMyIiol69etG/f/+4+OKL48knn4zXXnstzjrrrDjooINydwkFAAAAgPJW5o+Cvvzyy/HUU0/FI488EgceeOAmNy+YNm3aFq91xx13REREly5d8saLi4tzHzW97LLLYvXq1TFgwIBYunRpdOzYMZ544omoU6dObv7o0aOjWrVq0bt371i9enV07do1JkyYEFWrVi3r2wMAAACALVLmYG3XXXeN0047rVxePKX0g3MKCgpi2LBhMWzYsM3OqVmzZowdO7bcdtIBAAAAwA8pc7BWXFy8NeoAAAAAgB1Kma+xBgAAAABs4Y61ww47LJ588smoX79+HHrooVFQULDZuf/4xz/KrTgAAACAreX23zxV7mtecOfx5b4m268tCtZOOeWUKCwsjIiIXr16bc16AAAAAGCHsEXB2jXXXBP9+vWLW2+9Na655pqtXRMAAAAAbPe2+BprEydOjNWr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fII1trmRI0fGySefHHvttVdFl7LDmDZtWvTo0SMaNWoUBQUFMWfOnFLnvfbaa9GnT59o1qxZFBYWRsuWLeOkk06Khx9+ODbcp+TDDz+MgoKC3KNGjRrRunXr+P3vfx8b38vksssui+Li4pg/f/62eIuwzelFZbdx79j4cdNNN+XN04ugfFWWfrVw4cI444wzYr/99osqVaps9pcBy5cvj6uuuioOPPDAKCoqioYNG8YRRxwRN954YyxdujQ3r0uXLrkeU6VKlWjSpEn84he/iI8++ig356CDDoojjzwyRo8evbXfHuzQKksf6tu3b6nf6xx44IF58/QhNiZYY5tavXp1jBs3Ls4999yt+jrffPPNVl1/W1u1alV06tQprr/++s3Oeeihh+Koo46KlStXxsSJE2PevHlx//33R69eveLKK6+MZcuW5c2fOXNmLFy4MN59990YPnx4XHfddTF+/Pjc+caNG0f37t3jzjvv3GrvCyqKXpTNwoUL8x7jx4+PgoKC+Ld/+7fcHL0Iyte26lfr1q2L9evXbzK+Zs2arfq6GyspKYnddtsthg4dGu3bty91zpIlS+Koo46K4uLiuOSSS+J///d/44UXXohrrrkm5syZE5MnT86bf95558XChQvj008/jYceeigWLFgQZ511Vt6cX/3qV3HHHXfEunXrttp7gx1ZZepDt956a973OgsWLIgGDRrEL37xi9wcfYhNJNiGHnjggdSoUaO8saeffjpFRFq6dGlKKaWvvvoqnXDCCaljx47piy++SCmlNH78+LT//vunwsLCtN9++6Xbb7899/z58+eniEhTp05NnTt3ToWFhWn8+PEppZTGjRuXDjjggFSjRo3UtGnTdMEFF+SeFxHp7rvvTr169UpFRUWpdevW6aGHHsqdLy4uTvXq1curdfr06WnjL5trrrkmtW/fPt1zzz2pZcuWqW7duqlPnz5p+fLluTmdO3dOF110Ue74b3/7W6pbt26aOHFimf/+NrzX1157LW985cqVqWHDhunUU0/d7HPXr1//vWscf/zxacCAAXljEyZMSC1atChznbC904t+XC/a4JRTTknHH3987lgvgvJXWr8aPnx4atasWfrXv/6VGzv55JPTMccck9atW5dSSumWW25J7dq1S7Vq1Up77LFH+u1vf5tWrFiRm7+htzz88MOpbdu2qWrVqumDDz5ILVu2TNdee20655xzUt26ddMvf/nLlFJKl112WWrTpk0qKipKrVq1SldeeWVas2ZNSunbr+eCgoL0yiuv5NX5hz/8Ie255565r/uy+G7P2uD8889PtWvXTp988kmpz9v4tUpb45577km1atXKGyspKUmFhYXpySefLHOdUBlU1j6U0rffcxUUFKQPP/wwN6YP8V12rLFNPfvss3H44Ydv9vyyZcuie/fusWbNmnjyySejQYMGcffdd8fQoUPjuuuui7feeitGjBgRV111VUycODHvuZdffnkMGjQo3nrrrejRo0fccccdccEFF8Svf/3reOONN+Kvf/1rtG7dOu85w4cPj969e8frr78eJ5xwQpx55pmxZMmSMr2n999/Px588MF45JFH4pFHHolZs2ZtdmfZlClTonfv3nHPPffEL3/5yzK9zvd54okn4osvvojLLrtss3MKCgo2e+7VV1+Nf/zjH9GxY8e88SOPPDIWLFiQt1UZdgZ60Y/vRZ9//nk8+uij0b9//9yYXgTlr7R+NXTo0Nhrr71yu0fuvPPOePbZZ2PSpElRpcq3395XqVIl/vCHP8TcuXNj4sSJ8dRTT23ytfnVV1/FyJEj489//nO8+eab0bhx44iIuOmmm6Jdu3Yxe/bsuOqqqyIiok6dOjFhwoSYN29e3HrrrXH33XfnPra01157Rbdu3aK4uDhv/eLi4tzHqsrD+vXrY+rUqXHWWWfF7rvvXuqc73utJUuWxP33379Jj6lRo0a0b98+nnvuuXKpE3Y2lbkPjRs3Lrp16xYtW7aMCH2IzajoZI/K5ZRTTkn9+vXLG9uwS+Ttt99O7du3T6eddloqKSnJnW/RokWaPHly3nOuvfbadPTRR6eU/m/Xw5gxY/LmNG/ePA0dOnSztUREuvLKK3PHK1euTAUFBelvf/tbSmnLd4nUqlUrb1fIpZdemjp27Jg73vBbittvvz3Vq1cvPfXUU5ut6YdsbofH9ddfnyIiLVmyJDf28ssvp9q1a+ceDz/8cN4aRUVFqXbt2ql69eopItKvf/3rTV5v2bJlKSLSM888k7lm2B7pRT+uF6WU0g033JDq16+fVq9enRvTi6D8ldavUkrp/fffT3Xq1EmXX355qlWrVrr33nu/d52//OUvqWHDhrnj4uLiFBFpzpw5efNatmyZevXq9YN13XjjjalDhw6546lTp6b69eunr7/+OqWU0pw5c1JBQUGaP3/+D65VmtJ2eSxatChFRBo1alTe+GGHHZbrMaeffnreGtWrV0+1a9dOtWrVShGR9t1331JrOvXUU1Pfvn0z1Qo7u8rahz777LNUtWrVNHXq1NyYPkRpqm3DDA9i9erVUbNmzVLPdevWLY444oj4y1/+ElWrVo2IiH/+85+xYMGC6N+/f5x33nm5uWvXro169erlPX/j36IsXrw4Pvvss+jatev31nPwwQfn/ly7du2oU6dOLF68uEzvaa+99oo6derkjps1a7bJGg888EB8/vnn8fzzz8eRRx5ZpvWzOvjgg3M3OWjTpk2sXbs27/zUqVOjbdu28c0338Qbb7wRgwYNivr16+ftcCkqKoqIb3+TBDsTvejH96Lx48fHmWeeudm/xw30IvhxNtev9t5777j55pvj/PPPjz59+sSZZ56Zd/7pp5+OESNGxLx582L58uWxdu3a+Prrr2PVqlVRu3btiPh2h8TG/WeD0nb0/vd//3eMGTMm3nvvvVi5cmWsXbs26tatmzvfq1evuPDCC2P69Olx+umnx/jx4+O4447bKhc6/+5ukOnTp8eaNWvi8ssvj9WrV+edO/PMM2Po0KER8e1O2xEjRkT37t1j9uzZeT2zqKhIj4HNqKx9aMKECbHrrrtGr169NjmnD7ExHwVlm2rUqFHeXVI2duKJJ8Zzzz0X8+bNy41tuHjl3XffHXPmzMk95s6dGy+99FLe8zc054j/+yHsh1SvXj3vuKCgIPeaVapUybszXUTpFyL/vjU2OOSQQ2K33XaL4uLiTdYsD23atImIiHfeeSc3VlhYGK1bt97kI2cbtGjRIlq3bh1t27aN3r17x+DBg+OWW26Jr7/+Ojdnw0fRdtttt3KvGSqSXvTjetFzzz0X77zzziYXMdaLoPx9X7969tlno2rVqvHhhx/mhdYfffRRnHDCCdGuXbt44IEHYvbs2XH77bdHRH7/KCoqKvUjSxv3sYiIl156KU4//fTo2bNnPPLII/Haa6/F0KFD8y4oXqNGjTj77LOjuLg41qxZE5MnT45+/fr9qPf+Xbvttlvsuuuu8fbbb+eN77nnntG6deu8H1A3qFevXq4HderUKcaNGxfvvvtuTJ06NW/ekiVL9BjYjMrYh1JKMX78+Dj77LOjRo0auXF9iNII1timDj300LwfVjd2/fXXxznnnBNdu3bNzWnSpEnsvvvu8cEHH+Sa0YZHq1atNvs6derUib322iuefPLJzLXutttusWLFili1alVubMOui7LaZ5994umnn46HHnooBg4cmLmmzenevXs0aNAgbrjhhsxrVK1aNdauXZv3j9PcuXOjevXqm9xeGnZ0etGP60Xjxo2LDh06bHLXPr0Iyt/m+tXUqVNj2rRp8cwzz8SCBQvi2muvzZ179dVXY+3atXHLLbfEUUcdFfvuu2989tlnmWt44YUXomXLljF06NA4/PDDo02bNqVe8/Dcc8+NmTNnxh//+Mf45ptv4rTTTsv8mqWpUqVK9O7dO+6999749NNPM62xYSfyd3eUzJ07Nw499NAfXSPsjCpjH5o1a1a89957edeSjdCHKJ2PgrJN9ejRI6644opYunRp1K9ff5PzN998c6xbty6OP/74eOaZZ2L//fePYcOGxaBBg6Ju3brRs2fPKCkpiVdffTWWLl0aQ4YM2exrDRs2LH7zm99E48aNo2fPnrFixYp44YUXtviHyY4dO0atWrXiP//zP2PgwIHx8ssvx4QJE7K+9dh3333j6aefji5dukS1atVizJgxW/zcJUuWxMcff5z7x2jDbpCmTZtG06ZNY5dddok///nP0adPnzjxxBNj0KBB0aZNm1i5cmU8/vjjEfF/DXyDL774IhYtWhRr166NN954I2699dY47rjj8rZTP/fcc3HMMcds8a4b2FHoRdl6UUTE8uXL4/77749bbrllk3N6EZS/0vrVJ598Er/97W/jhhtuiJ/+9KcxYcKEOPHEE6Nnz55x1FFHxT777BNr166NsWPHxsknnxwvvPBC3HnnnZlraN26dXz88ccxZcqUOOKII+LRRx+N6dOnbzKvbdu2cdRRR8Xll18e/fr1y/Q1u+EXBytXrox//vOfMWfOnKhRo0YccMABERExYsSIeOaZZ6Jjx47xu9/9Lg4//PCoXbt2vP766/E///M/0a5du7z1vvrqq1i0aFFEfPsRrN///vdRs2bN6N69e27Ohx9+GJ9++ml069atzPVCZVDZ+lDEt79E7Nix4yY9JUIfohQVeoU3KqWjjjoq3XnnnbnjDRcMX7p0aW5s4MCBqVmzZumdd95JKaX0X//1X+mQQw5JNWrUSPXr10/HHntsmjZtWkpp8xf0TymlO++8M+23336pevXqqVmzZmngwIG5cxGRpk+fnje/Xr16qbi4OHc8ffr01Lp161SzZs100kknpbvuumuTC4a3b98+b43Ro0enli1b5o6/e/HdefPmpcaNG6chQ4bkvf/vu6jmhgt7fvdxzTXX5M175ZVX0r//+7+nxo0bp2rVqqWGDRumHj16pClTpuRu+7zh72vDo2rVqmmPPfZI5513Xlq8eHHeevvuu2+67777NlsX7Mj0orL3opRS+tOf/pSKiorSl19+udk5ehGUr4371fr161PXrl1Tjx49cl9PKaX0H//xH2mfffZJK1asSCmlNGrUqNSsWbNUVFSUevToke655568HlfajVFS+vai4aNHj95k/NJLL00NGzZMu+yyS+rTp08aPXp0qc8fN25cioj08ssvl7r2d793+a7Svt/ZuJellNKXX36ZrrjiirT//vunwsLCVFRUlA4++OB01VVXpS+++CI3r3Pnznnr1K9fP3Xu3HmTm7eMGDEi9ejR43vrgsquMvWhL7/8MhUVFaW77rrre+foQ2xQkNJWuOATfI/HHnssLrnkkpg7d27uVsyV2YQJE+K6666LefPmbXKNpIr06KOPxqWXXhqvv/56VKtmcys7H70on14E268dqV9dd911MWXKlHjjjTfyxlevXh0NGjSIxx57LI477rgKqm5TJSUl0aZNm7jvvvuiU6dOFV0ObLf0oa1HH9rx+Q6Vbe6EE06Id999Nz799NNo0aJFRZdT4R5//PEYMWLEdvWDbETEqlWrori42A+y7LT0onx6EWy/doR+tXLlynjrrbdi7NixeddZ2mDWrFlx/PHHb1c/zEZ8e4H1oUOH+mEWfoA+tPXoQzs+O9YAAIAfpW/fvnHfffdFr169YvLkyZtcTxFga9OHqCiCNQAAAADIYPv+cDQAAAAAbKcEawAAAACQgWANAAAAADIQrAEAAABABoI1AAAyGTZsWBxyyCEVXQYAQIURrAEA7KQKCgq+99G3b9+KLhEAYIdWraILAABg61i4cGHuz1OnTo2rr7463nnnndxYUVFRRZQFALDTsGMNAGAn1bRp09yjXr16UVBQkDc2efLk2GeffaJGjRqx3377xaRJk/Ke//HHH8cpp5wSu+yyS9StWzd69+4dn3/+eQW9GwCA7Y9gDQCgEpo+fXpcdNFFcfHFF8fcuXPj/PPPj1/96lfx9NNPR0RESil69eoVS5YsiVmzZsWMGTPi/fffjz59+lRw5QAA2w8fBQUAqIRuvvnm6Nu3bwwYMCAiIoYMGRIvvfRS3HzzzXHcccfFzJkz4/XXX4/58+dHixYtIiJi0qRJceCBB8Yrr7wSRxxxREWWDwCwXbBjDQCgEnrrrbeiU6dOeWOdOnWKt956K3e+RYsWuVAtIuKAAw6IXXfdNTcHAKCyE6wBAFRSBQUFeccppdzYxn/e3BwAgMpOsAYAUAm1bds2nn/++byxF198Mdq2bRsR3+5O+/jjj2PBggW58/PmzYtly5bl5gAAVHausQYAUAldeuml0bt37zjssMOia9eu8fDDD8e0adNi5syZERHRrVu3OPjgg+PMM8+MMWPGxNq1a2PAgAHRuXPnOPzwwyu4egCA7YMdawAAlVCvXr3i1ltvjZtuuikOPPDA+NOf/hTFxcXRpUuXiPj2Y6IPPvhg1K9fP4499tjo1q1b7L333jF16tSKLRwAYDtSkFJKFV0EAAAAAOxo7FgDAAAAgAwEawAAAACQgWANAAAAADIQrAEAAABABoI1AAAAAMhAsAYAAAAAGQjWAAAAACADwRoAAAAAZCBYAwAAAIAMBGsAAAAAkIFgDQAAAAAyEKwBAAAAQAb/HxDxiWfkDdnBAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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nFxdXc3ye70vMvr71TqbPb169/seTc2RI0ckSaVKlXog4wEAAAB3QmIcAAAADvfuu+/K29tb8fHxatmy5R1nyl64cEGtWrXK0B6ZFotF7dq1kyRNnDgx1VmGJ0+e1MSJEyVJHTp0sDlWokQJc4/MH374wa5tcnKyRo0aleb41rHnzZun/fv32x0/e/asJkyYcMfzSE+9evXMZUrTWqJ54sSJ5h6zt59jSiNHjky1fOzYsYqPj5eLi4tatmxpc8zX11eSdPHixUxG/nAYOXKkpk2bJovFou+++84u8Z+aF198UZJ04MCBVPchT+natWs2MyLr1atnfuAires9ZsyYDO0D/DD5+++/1axZM127dk3Ozs56//33s6zvOyWFjhw5os8//1zSrcTm3e4vLkkfffRRqgnRqKgobdiwQdL/3tdW1vth1apVd0yO3+2M34woV66cmUB99913bZZPtlq6dKmZVE7vWeBI1pmtKZflT2nkyJG6cuXKfRm7W7ducnZ21vnz5zVs2LAMt7uXZ0JG1KxZU9Kta5LeagBp6dKlizw9PXXz5k316tUr1XvDKjk52eZ5fqfxrL8jpf8ts32n80utzb1ISkpKN9mbFeNNmDDB3Kc7pf379+v777+XlPaz4W7vi4z+fs1Ivft9j6bG+qyJiIi4574AAACArEBiHAAAAA5XokQJfffdd3Jzc9PevXtVoUIFjR49WocOHTLr3Lx5Uzt27NDQoUNVvHhxc/ZXRgwaNEi5c+dWbGys6tatq+joaPPYhg0bVLduXV28eFF58uTRgAEDbNq6urqaM9rff/99zZ071/xj8f79+9WiRYs0kzeS9PLLL6tQoUK6ceOGnnnmGa1atcpM8v3222+qW7fuPc/c8vT0NBPis2bNUs+ePc2lYuPi4vTpp5+qd+/ekm790b5ixYqp9uPn56dvv/1Wr7/+uvnH/ytXruj99983E7i9evVScHCwTbuyZctKktatW6d9+/bd07k8aPPmzTOTX++//775Wt9J8+bN1aJFC0nSgAED9PLLL9vM1k9ISNDmzZv11ltvKSQkRGfPnjWPeXp6asiQIZKkb7/9Vr179zZnWV6+fFkjR47U+++/r9y5c2fFKd5X169f18aNG9WvXz+VK1dOu3btkpOTk7788ktzdmJW+OCDD9S1a1ctW7bMJvFz+fJlTZs2TdWrV9eF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bm5uqlChgiTJ3d3d3D88pbFjx2ratGmKi4tTtWrVFBkZqdatW6tRo0aSZLMUuZWfn1+6SeaU+42ndPXqVQ0cOFBLliyRt7e3ateurZYtW6p169aqVKmSpFuJ+pTq1q0ri8WiVatWSZJu3LihDRs2qECBAubM8rS4uroqV65c5hfLqAMAAADIjqKjoxUcHKyxY8dq06ZNatWqlcLDw1WmTBn16tVLJ0+etKm/YcMG9e3bV0899ZTCw8MVHh6uhg0bavr06WmOsXTpUjVs2FChoaEqX768+vXrp4sXL6a5h3VCQoImTpyoBg0aKCwsTCVKlFCLFi20fPnyuzrHFStWqHXr1ipZsqRCQ0NVr149ff3117p586ZNvePHjys4OFi9e/fWsWPH9MILL6h06dIKCwtTu3bttHfv3juOZd2G7Msvv0z1+KpVqxQcHKyhQ4fesa8LFy7oypUrKlmypN0+5rVr15bFYtH58+dtyq17nt+4cUOjRo1S5cqVFRoaqmeeeUZr166VdOvf10OGDFHFihVVvHhxNW3aVL///nuacVy8eFH9+vVT+fLlFRoaqsaNG9/1awEAAAAAcDwS47c5cOCAlixZIh8fH924cUOTJk2yOX7o0CFt27ZN5cuX1/jx49WzZ0916NBBbdu2VfXq1dPs904zr9M6/uuvvyomJkbt27fXyJEj1b17d7Vv315t27ZViRIlUm2TL18+lStXTlu3btXly5e1ceNGxcfH33G2OAAAAADkNNu3b1eHDh3k7++v7t27q0KFClqwYIGaN2+uc+fOmfW++OILbd68WRUqVNBzzz2nli1bKjY2Vm+99Zbeeecdu35nz56tF154QceOHVOrVq3Upk0bbdu2TR06dLD7cLN06wPNHTt21IgRIyRJHTp0UMuWLXXixAk999xzmjJlSqbOa9KkSerWrZv+/PNPRUZGqmvXrrp+/bqGDx+unj172qx6ZnXixAk1adJEsbGxateunWrWrKn169erbdu2NtciNc2aNZOvr69mzpyZ6vFZs2aZ53UngYGBypMnj/bt26dTp07ZHIuKipJhGHryySdTbfvyyy9r8eLFql+/viIjI3XgwAF169ZNu3fvVtu2bRUdHa3GjRurYcOG2rlzpzp27KgrV67Y9ZOYmKj27dtry5YtatOmjVq1aqVDhw6pe/fumj9//h3PAQAAAEDaLFevynLliixXrzo6FOQwLKWeQlxcnP773//K2dlZ77zzjmbOnKn169erQoUK5hJtZ86ckSQ9/vjjcnKy/VzBvn37sjym06dPS5I5OzylP//8M812derU0e+//661a9fqt99+k7OzsyIiIrI8PgAAAAD4N1u9erU++ugjm4Tt+PHj9dFHH+mDDz7Q2LFjJUmjRo2y2x4rKSlJXbp00TfffKMePXqYs5svXbqkoUOHytvbW8uWLVNISIgkacCAAercubN27dqlQoUK2fQ1fvx4bdy4UW+88Yb69Oljfnj66tWratu2rUaMGKGGDRsqKCjojud07NgxjRw5Unnz5tXSpUvNuAYMGKCOHTtq6dKlmj9/vlq1amXTbuPGjRo0aJB69epllo0ZM0affPKJ5syZo1dffTXNMT09PdWyZUtNnTpVmzZtUtWqVc1jMTExWrlypR577DGVKlXqjvFbLBa9++67eu2111S3bl2bPcZXrlyphg0bqn///qm2jY2N1cqVK5UrVy5JUs2aNfXKK6+oXbt2euqpp/T555+b25iVKVNG7733nmbNmqUXX3zRpp8zZ84oLCxMixcvlqurqyTpxRdfVIMGDTR48GDVr19f3t7edzwXAAAAAPbyRUTI+fRp3QwK0plt2xwdDnIQZoynMGnSJJ09e1bPPvusChUqpJdffln+/v765ptvzIR4YGCgJPsk+PHjx/Xjjz9meUxpjbd+/Xrt2LEjzXaVK1dW7ty5tXjxYu3bt0+VKlVKc7l2AAAAAMipQkND1b59e5uynj17KiAgQAsWLFBCQoIk2SXFJcnFxUVdunTRzZs3tWHDBrP8l19+0bVr19ShQwczKW6t369fP7t+kpOT9d1336lo0aI2SXFJ8vb2Vu/evZWQkKBly5Zl6Jzmz5+vpKQkvfTSSzZLkbu5uWngwIGSpLlz59q1K1KkiF5++WWbMusHBtJbctyqc+fOkmQ3a3zevHlKTExUp06dMhS/JDVv3lzfffedXFxcNGvWLH322WdaunSpihYtqrZt28rHxyfVdm+99ZaZFJekJk2ayNXV1fywgjUpbh1Dkv74449U++rXr5+ZFJeksLAwtW/fXpcuXdIvv/yS4XMBAAAAADwcmDH+/9auXav169erUqVKql+/viTJx8dHvXr10nvvvaf//ve/GjFihMLCwhQWFqaNGzfq4sWLCg8PV0xMjLZu3arHH39cmzZtytK4atasqYULF2ry5Mnas2ePAgMD9ffff2vXrl164okn9Ntvv6XaztnZWbVq1TKT9SyjDgAAAAD2KleubLe1laenp8qVK6eoqCj99ddfKlmypK5evaoJEybo559/1rFjxxQXF2fTxvphaul/idbUVv567LHHbJKzknT48GFdvHhR+fPn17hx4+zaWPfTPnTokCRpz549donZQoUKqV27dpJk7glerVo1u74qVqwoDw+PVPcNL126tN3KaAUKFJB0axb8nZQqVUoVK1bUkiVL9O6778rX11fSrWXlvby81KxZM7OudSZ+Sj169DA/0D1nzhwNGDBAzz77rLp37658+fLp8OHD+uCDD/Tcc89pxIgRev755+36KFu2rM3Pzs7OCggIUHx8vN1+5fnz55f0v5XaUnJ1dVXFihXtyp944glNnTpVe/futZtxDwAAAAB4uJEY160/YHzzzTfy9/dXz549bY6VK1dOTZo00eLFizVv3jy1b99eAwYM0IwZM7Rz504dOnRIBQoUUJcuXfTYY49leWI8ICBAw4cP14wZM7R7924lJyerWLFiGjx4sM6fP59mYlySIiIi9OOPPypv3rwqV65clsYFAAAAANlB3rx50y2/cuWKEhIS1Lp1a+3evVtly5ZVq1at5O/vLxcXFx0/flzz5s0zZ5ZLt5Y/l279e+52Tk5OypMnj03ZxYsXJUn79+/X/v3704zVmozfu3evXQK9WrVqZmLcume2dQWy1M4ttWRwarOwrUn85OTkNONKqVOnTurbt6/mz5+vbt266bffftOhQ4fUqVMneXl5mfVS+wBA27Zt5efnp0OHDumtt95S3bp1bfZvL1u2rCZNmqSIiAh98MEHat++vU2f6Z1DeueW2p7v/v7+dh8SkP53TVPblxwAAAAA8HAjMa5bnxL/9ttv0zzepUsXdenSxfzZ19fXbnk5q9SWo/v888/T7DtfvnyptkmpaNGievvtt1M99vTTT6fZ7ujRo5Kk2rVrp/oPegAAAADI6WJiYtIt9/Hx0S+//KLdu3erY8eO+vDDD23qLVy4UPPmzbMps+49bZ3pnVJycrJiY2Nt9gq31m/UqJG+/vrrO8bcrl07MwmeGmsS+Ny5c3Z7mVvP7X7tj92sWTO98847mjVrlrp162Yuq96xY0ebev/880+a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AACATDq3dq1O79+vc2vXOjoU5DAkxgEAAAAAOU50dLSCg4M1duxYbd26VR07dlSpUqXMfaQNw9Ds2bPVvHlzPfLIIwoNDVXDhg01e/bsVPszDENz585Vy5YtVapUKYWGhv4fe/cep1VV7w/8MwyDgCAqDiB4AxVFvB21BCUR8H5JLcC8dLJjaVp6vFRYipXHskzNLK9l2jlekQQl0zxC3s0UvIt4BwSRQRREbsPw/P7wxxymAWMYnAeeeb9fL176rL322t+9HdYL+Txr7ey9994ZNmxYpk2bVq//kiVL8qtf/Sp9+vRJ9+7d069fv9x44431+p1xxhnp1q1bpk6dWu/YpZdemm7duuXxxx9f4X298MILOfbYY9OzZ89sv/32OfHEE1c4zsruZ/jw4enWrVvOPPPMLFmyZLWeywcffJBhw4Zll112ydZbb51DDjkk99577yrVsDJPPfVUrr/++gwfPjybbrrpSvste3aTJ0/ONddck379+mXrrbfOvvvum7vuuitJUl1dnV/+8pfp06dPevTokf322y8PPvjgSsdcuHBhLrzwwuyxxx7p0aNHBg0atNJ7BwAAYO1iK3UAAACaraeffjq/+c1vstdee+W4447LtGnTUigUctppp2XUqFHp0aNHjjzyyLRq1SoPP/xwzj777Lz66qs5//zza8coFAo59dRTc/fdd6dLly454ogj0r59+0ydOjVjxozJgAEDagP3ZU499dQ888wzGTBgQMrLyzNmzJice+65qaioyHHHHdfo+3ruuedy9dVXp2/fvjn++OPz4osv5r777ssrr7ySsWPHpnXr1is9d/HixTnjjDNy11135ZRTTsl5551Xe58NeS4LFizIkCFDMnHixOy+++7p27dvpk+fnlNOOSX77LPPat3XggULcsYZZ6Rv37457rjjcvvtt//Lc37yk5/kmWeeyf77758WLVrk7rvvzre//e106NAhN954YyZNmpSBAwdm0aJFGT16dL7+9a/noYceyhZbbFFvrJNPPjkTJ07MYYcdliVLlmTMmDE5++yzU1VVldNOO2217gkAAICmIRgHAACg2Xr44Ydz6aWX5itf+Upt280335xRo0blmGOOyc9//vO0bPnJ/zovXrw4J510Uq699toceeSR2XnnnZMkf/zjH3P33XfXrvpu06ZN7VgLFizIwoUL6113+vTpGTduXNq3b58kOfHEEzNo0KBce+21ayQYHzt2bK666qocccQRtW2nn356/vSnP+Wvf/1rnfblffzxx/nGN76RRx55JMOHD8+3vvWt2mO33HJLg57LVVddlYkTJ+a4447LxRdfXDvO4MGDc+yxx67Wff3sZz/LzJkzc+utt67yOa+++moeeOCBdOzYMUkydOjQHH744Tn11FOz3XbbZezYsWnbtm2SpH///jnllFPy+9//PhdccEG9saZMmZJx48alXbt2ST55pgcddFAuueSSfPGLX8yWW265WvcFAADAZ89W6gAAADRbO+64Y51QPEluuOGGtG3bNhdeeGFt+JskrVq1yrBhw5Iko0ePrm3/4x//mPLy8lx00UV1QvEkadOmTTbaaKN61/3BD35QG4onyTbbbJPPfe5zeeONNzJv3rxG31efPn3qhd/L7vPZZ59d4Tnvv/9+hgwZkscffzyXX355nVA8afhzGTlyZFq1apXvfve7dcbp379/+vXr1+B7euKJJ3LDDTfknHPOWeFq7pU5/fTTa0PxJNltt92y5ZZbZs6cORk2bFhtKJ4khx56aCoqKvLyyy+vdKxloXiSdOrUKSeddFKWLFmSUaNGNfieAACgOdrgv/4rHb773WzwX/9V7FJoZqwYZ5Xsc0D7VFevfKs9AACAddGuu+5a5/OCBQvyyiuvpHPnzrnyyivr9a+urk6SvP7660mS+fPn59VXX81WW22VHj16rPJ1d9ppp3pty96XPWfOnDrh6+rYcccdVzr+3Llz6x2rqqrKkUcemXfffTd/+MMfMmjQoDrHG/pc5s2blylTpqRnz57p1KlTvf577rlnHn300Tptv/vd7+rVNnTo0Gy++eaZP39+zj777Oy+++75+te//mm3Xs+KnkWnTp0yefLk9O7du057eXl5OnbsmHfffXeFY33+859fadtLL73UoLoAAKC5ajN6dMpnzEhNly6ZO3x4scuhGRGMAwAA0GxVVlbW+fzhhx+mUChkxowZueyyy1Z63vz585N8EmIn/xc6r6oNNtigXlt5eXmSZOnSpQ0aa1XHX7bKu6ampt6xmTNn5qOPPkqPHj3qfVkgafhzWRZwL79Se3mbbLJJvbbf//73eeedd+q09e3bN5tvvnl+/vOf57333st///d/p0WLhm1+t/zK/GWWPYuVHVuyZMkq173sZ+ijjz5qUF0AAAA0LcE4AAAAzVZZWVmdz8uC0p133jn33nvvvzx/WQC9shXGjbUsBF5RULuild+rq3fv3hkyZEi++93vZujQoRkxYkSdULuhz2VZ//fff3+Fx2fNmlWv7cknn1zpeC+//HIWLlyY/v37r/D4RRddlIsuuignnnjiCt8NvqbMmjUr3bp1q9NWVVWVZMUhOwAAAGsPwTgAAAD8f+3atcu2226b1157LXPmzEmHDh0+tf/666+fnj175o033sibb77ZoO3UV8Wy68+YMSPdu3evc2xNb9199NFHp6ysLGeffXaGDBmSESNG1K6Qbuhzad++fbbYYou8/fbbmTlzZr3t1D8tBF+RQYMGZauttqrX/tZbb+Xvf/97dt111/Tq1Su77757g8ZtqH/84x856qij6rUlqbctOwAAAGuXhu0/BgAAACXuP/7jP7JgwYJ873vfq90afHlTpkzJ1KlTaz9/7WtfS01NTX74wx9mwYIFdfouXLgwH3zwwWrXsssuuyRJRowYUaf9z3/+c5544onVHndlhg4dmssuuyyvvfZahg4dWmdld0Ofy5e//OUsXrw4l1xySZ1+Dz30UL33i/8rp5xySi655JJ6v4YOHZokOfjgg3PJJZfkiCOOaNC4DXXFFVdk3rx5tZ+rqqpy3XXXpWXLlvUCcwAAANYuVowDAADAcr761a9mwoQJueOOO/L000+nX79+6dKlS6qqqvL666/nmWeeyZVXXpnNN988ySfB+N///veMGTMm/fr1ywEHHJD27dtn2rRpefDBB3PppZfmoIMOWq1aDjzwwGyxxRYZMWJEpk+fnh133DGvvfZaHnvssQwcODDjxo1bk7eeJBkyZEjKyspy5plnZvDgwbnjjjtSWVnZ4Ody6qmn5t57783NN9+cSZMmpU+fPpk+fXrGjBmTQYMGZezYsWu89s/aFltskYEDB+aQQw7JkiVLMmbMmMyaNSvDhg3LlltuWezyAAAA+BSCcQAAAFhOWVlZLr/88gwcODC33HJLxo4dm48//jgdO3ZM9+7dM3z48HzhC1+o0//qq69O//79c8stt2TkyJEpFArp0qVLDj/88Oy0006rXUubNm1y++2358c//nEee+yxTJgwIbvttlvuvPPOPPDAA59JMJ4kgwcPrg3Hl22r3qlTpwY9l7Zt22bkyJG56KKLct999+XFF19Mz549c/XVV2fu3LnrZDB+zTXX5JJLLsno0aMze/bsdO/ePeecc06OOeaYYpcGAADAv1BWKBQKxS6CtV9VVVWqq6uLXQYAALCGzJ07NxtssEGxywBoUuY+AIDi67z77imfMSM1XbrkvfHji10O67iKiopUVlauUl/vGAcAAAAAAACgpNlKHQAAAAAAAGgSCwcNSosPP8zSDTcsdik0M4JxAAAAAAAAoEnMufjiYpdAM2UrdQAAAAAAAABKmmAcAAAAAAAAgJImGAcAAAAAAACgpHnHOAAAAAAAANAkNjn44JTPnJmaTp0y6957i10OzYhgHAAAAAAAAGgS5TNnpnzGjGKXQTNkK3UAAAAAAAAASppgHAAAAAAAAICSJhgHAAAAAAAAoKQJxgEAAAAAAAAoaYJxAAAAAAAAAEqaYBwAAACayODBg9OtW7dil1FHt27dMnjw4Ca95u23355u3brl9ttvb9Lrrq618b8bAAAADdOy2AUAAAAArIoXXnghv/nNb/L888+nqqoqHTt2TO/evXPyySenT58+xS4PAACAtZhgnFVS819npOaNScUuA2CNKP/d3cUuAQDWere/9NVil7BSR/f+n2KXQBHcd999+eY3v5lWrVrl4IMPTteuXTN9+vTce++9uf/++3PZZZfl6KOPLnaZAAAArKUE4wAAAMBa7+c//3kKhULuuuuu7LjjjrXtL7zwQg4++OBcfvnlgnEAAFgHzD3vvJQtWJBCmzbFLoVmxjvGAQAAaHYef/zxdOvWLZdeemmefvrpHHvssenVq1fte6QLhUJuu+22HHHEEdluu+2y9dZb5+CDD85tt922wvEKhUJGjBiRL33pS+nVq1e23nrr7L333hk2bFimTZtWr/+SJUvyq1/9Kn369En37t3Tr1+/3HjjjfX6nXHGGenWrVumTp1a79ill16abt265fHHH1/hfb3wwgs59thj07Nnz2y//fY58cQTVzjOyu5n+PDh6datW84888wsWbJktZ7LBx98kGHDhmWXXXbJ1ltvnUMOOST33nvvKtXwz6ZMmZLOnTvXCcWTZKeddkrnzp0za9asOu3Lnt3kyZNzzTXXpF+/ftl6662z77775q677kqSVFdX55e//GX69OmTHj16ZL/99suDDz640hoWLlyYCy+8MHvssUd69OiRQYMGrfTeAQCAFVtw1FGZf+yxWXDUUcUuhWbGinEAAACaraeffjq/+c1vstdee+W4447LtGnTUigUctppp2XUqFHp0aNHjjzyyLRq1SoPP/xwzj777Lz66qs5//zza8coFAo59dRTc/fdd6dLly454ogj0r59+0ydOjVjxozJgAEDagP3ZU499dQ888wzGTBgQMrLyzNmzJice+65qaioyHHHHdfo+3ruuedy9dVXp2/fvjn++OPz4osv5r777ssrr7ySsWPHpnXr1is9d/HixTnjjDNy11135ZRTTsl5551Xe58NeS4LFizIkCFDMnHixOy+++7p27dvpk+fnlNOOSX77LNPg++pZ8+eeemll/Lyyy9nhx12qG1/8cUX895772W//fZb4Xk/+clP8swzz2T//fdPixYtcvfdd+fb3/52OnTokBtvvDGTJk3KwIEDs2jRoowePTpf//rX89BDD2WLLbaoN9bJJ5+ciRMn5rDDDsuSJUsyZsyYnH322amqqsppp53W4HsCAACg6QjGAQAAaLYefvjhXHrppfnKV75S23bzzTdn1KhROeaYY/Lzn/88LVt+8r/OixcvzkknnZRrr702Rx55ZHbeeeckyR//+Mfcfffdtau+2yy3HeCCBQuycOHCetedPn16xo0bl/bt2ydJTjzxxAwaNCjXXnvtGgnGx44dm6uuuipHHHFEbdvpp5+eP/3pT/nrX/9ap315H3/8cb7xjW/kkUceyfDhw/Otb32r9tgtt9zSoOdy1VVXZeLEiTnuuONy8cUX144zePDgHHvssQ2+px/96Ef52te+liOOOCIHHXRQnXeM77nnnvnFL36xwvNeffXVPPDAA+nYsWOSZOjQoTn88MNz6qmnZrvttsvYsWPTtm3bJEn//v1zyimn5Pe//30uuOCCemNNmTIl48aNS7t27ZJ88kwPOuigXHLJJfniF7+YLbfcssH3BQAAQNOwlToAAADN1o477lgnFE+SG264IW3bts2FF15YG/4mSatWrTJs2LAkyejRo2vb//jHP6a8vDwXXXRRnVA8Sdq0aZONNtqo3nV/8IMf1IbiSbLNNtvkc5/7XN54443Mmzev0ffVp0+feuH3svt89tlnV3jO+++/nyFDhuTxxx/P5ZdfXicUTxr+XEaOHJlWrVrlu9/9bp1x+vfvn379+jX4nvr27Zs777wznTp1yp133pnf/va3ufPOO7PRRhtl6NCh6dy58wrPO/3002tD8STZbbfdsuWWW2bOnDkZNmxYbSieJIceemgqKiry8ssvr3SsZaF4knTq1CknnXRSlixZklGjRjX4ngAAoDkqf/31tJw0KeWvv17sUmhmrBgHAACg2dp1113rfF6wYEFeeeWVdO7cOVdeeWW9/tXV1UmS1///X+DMnz8/r776arbaaqv06NFjla+700471WvbdNNNkyRz5sypE76ujn9+D/fy48+dO7fesaqqqhx55JF5991384c//CGDBg2qc7yhz2XevHmZMmVKevbsmU6dOtXrv+eee+bRRx+t0/a73/2uXm1Dhw7N5ptvniQZN25cTj311Oy333658cYbs9lmm2XatGm54oorctZZZ2XixIn58Y9/vErPolOnTpk8eXJ69+5dp728vDwdO3bMu+++W++cJPn85z+/0raXXnpphecAAAB1bXL00SmfMSM1XbrkvfHji10OzYhgHAAAgGarsrKyzucPP/wwhUIhM2bMyGWXXbbS8+bPn5/kkxA7+b/QeVVtsMEG9drKy8uTJEuXLm3QWKs6/rJV3jU1NfWOzZw5Mx999FF69OhR78sCScOfy7KAe/mV2svbZJNN6rX9/ve/zzvvvFOnrW/fvtl8883zwQcf5Dvf+U66d++eK664Ii1afLIB3jbbbJNf//rXeeutt3L99dfnhBNOyFZbbVVnjOVX5i+z7Fms7NiSJUtWue5lP0MfffTRCs8BAABg7SAYBwAAoNkqKyur83lZULrzzjvn3nvv/ZfnLwugV7bCuLGWBcArCmpXtPJ7dfXu3TtDhgzJd7/73QwdOjQjRoyoE2o39Lks6//++++v8PisWbPqtT355JMrHe+pp57KnDlz0qdPn9pnskxZWVn22muvTJgwIS+++GK9YHxNmjVrVrp161anraqqKsmKQ3YAAADWHt4xDgAAAP9fu3btsu222+a1116rXQ3+adZff/307NkzU6dOzZtvvrnG6+nQoUOSZMaMGfWOremtu48++uhceumlefXVVzNkyJA64XVDn0v79u2zxRZb5O23387MmTPrHf+0EHxFlm3VvrKgffbs2Uk+ed/5Z+kf//jHStv+eVt2AAAA1i6CcQAAAFjOf/zHf2TBggX53ve+V7s1+PKmTJmSqVOn1n7+2te+lpqamvzwhz/MggUL6vRduHBhPvjgg9WuZZdddkmSjBgxok77n//85zzxxBOrPe7KDB06NJdddllee+21DB06tE443tDn8uUvfzmLFy/OJZdcUqffQw89VO/94v/KbrvtlvLy8txzzz15+eWX6xybNGlSRo8enfXWWy977LFHg8ZtqCuuuCLz5s2r/VxVVZXrrrsuLVu2zFFHHfWZXhsAAIDGsZU6AAAALOerX/1qJkyYkDvuuCNPP/10+vXrly5duqSqqiqvv/56nnnmmVx55ZXZfPPNk3wSjP/973/PmDFj0q9fvxxwwAFp3759pk2blgcffDCXXnppDjrooNWq5cADD8wWW2yRESNGZPr06dlxxx3z2muv5bHHHsvAgQMzbty4NXnrSZIhQ4akrKwsZ555ZgYPHpw77rgjlZWVDX4up556au69997cfPPNmTRpUvr06ZPp06dnzJgxGTRoUMaOHbvKNW266ab5zne+k1//+tc59NBDc+CBB2bzzTfPtGnTct9992XRokUZPnx4Nt544zX+PJa3xRZbZODAgTnkkEOyZMmSjBkzJrNmzcqwYcOy5ZZbfqbXBgAAoHEE4wAAALCcsrKyXH755Rk4cGBuueWWjB07Nh9//HE6duyY7t27Z/jw4fnCF75Qp//VV1+d/v3755ZbbsnIkSNTKBTSpUuXHH744dlpp51Wu5Y2bdrk9ttvz49//OM89thjmTBhQnbbbbfceeedeeCBBz6TYDxJBg8eXBuODxkyJCNGjEinTp0a9Fzatm2bkSNH5qKLLsp9992XF198MT179szVV1+duXPnNigYT5Lvf//76dWrV2666aY88sgj+eijj9K+ffv06dMnX//617P//vuv6cdQzzXXXJNLLrkko0ePzuzZs9O9e/ecc845OeaYYz7zawMAANA4ZYVCoVDsIlj7zTj9uFS/ManYZQCsEeW/u7vYJQBA0c2dOzcbbLBBscsAaFLmPgCA4uu8++4pnzEjNV265L3x44tdDuu4ioqKVFZWrlJf7xgHAAAAAAAAoKQJxgEAAAAAAAAoad4xDgAAAAAAADSJqr/8JampScrLi10KzYxgHAAAAAAAAGgSSzt3LnYJNFO2UgcAAAAAAACgpAnGAQAAAAAAAChptlIHAAAAAAAAmkTbm25K2ccfp7D++pl//PHFLodmRDAOAAAAAAAANIn2v/pVymfMSE2XLoJxmpSt1AEAAAAAAAAoaVaMs0rKh1+epdXVxS4DAAAAAAAAoMGsGAcAAAAAAACgpAnGAQAAAAAAAChpgnEAAAAAAAAASppgHAAAAJrI4MGD061bt2KXUUe3bt0yePDgJr3m7bffnm7duuX2229v0uuurjX53+3xxx9Pt27dcumll66R8T4La2ONl156abp165bHH3+82KUAAADrqJbFLgAAAIC1T9dnXyh2CSs1fdedil0CRfLCCy/kN7/5TZ5//vlUVVWlY8eO6d27d04++eT06dOn2OUBAACwFhOMAwAAAGu9++67L9/85jfTqlWrHHzwwenatWumT5+ee++9N/fff38uu+yyHH300cUuEwAAgLWUYBwAAABY6/385z9PoVDIXXfdlR133LG2/YUXXsjBBx+cyy+/XDAOAADrgCU9emTpBhtk6SabFLsUmhnvGAcAAKDZWf4dyk8//XSOPfbY9OrVq/Y90oVCIbfddluOOOKIbLfddtl6661z8MEH57bbblvheIVCISNGjMiXvvSl9OrVK1tvvXX23nvvDBs2LNOmTavXf8mSJfnVr36VPn36pHv37unXr19uvPHGev3OOOOMdOvWLVOnTq13bEXvXF7+vl544YUce+yx6dmzZ7bffvuceOKJKxxnZfczfPjwdOvWLWeeeWaWLFmyWs/lgw8+yLBhw7LLLrtk6623ziGHHJJ77713lWr4Z1OmTEnnzp3rhOJJstNOO6Vz586ZNWtWnfZlz27y5Mm55ppr0q9fv2y99dbZd999c9dddyVJqqur88tf/jJ9+vRJjx49st9+++XBBx9caQ0LFy7MhRdemD322CM9evTIoEGDVnrvDTVnzpwcddRR2XzzzXPTTTfVts+bNy+XXHJJBgwYkK233jq9evXKcccdl3/84x/1xlj2LvRFixbll7/8Zfbee+9sueWWdd4VPmXKlAwbNqz2Z2/nnXfO4MGDV/q+91X5OZo6dWq6deuWM844Y4VjrOg99stqXdXfCyvz8ssvZ7fddsuOO+6YCRMmrPJ5AAAUz/t33JGqv/0t799xR7FLoZmxYhwAAIBm6+mnn85vfvOb7LXXXjnuuOMybdq0FAqFnHbaaRk1alR69OiRI488Mq1atcrDDz+cs88+O6+++mrOP//82jEKhUJOPfXU3H333enSpUuOOOKItG/fPlOnTs2YMWMyYMCA2sB9mVNPPTXPPPNMBgwYkPLy8owZMybnnntuKioqctxxxzX6vp577rlcffXV6du3b44//vi8+OKLue+++/LKK69k7Nixad269UrPXbx4cc4444zcddddOeWUU3LeeefV3mdDnsuCBQsyZMiQTJw4Mbvvvnv69u2b6dOn55RTTsk+++zT4Hvq2bNnXnrppbz88svZYYcdattffPHFvPfee9lvv/1WeN5PfvKTPPPMM9l///3TokWL3H333fn2t7+dDh065MYbb8ykSZMycODALFq0KKNHj87Xv/71PPTQQ9liiy3qjXXyySdn4sSJOeyww7JkyZKMGTMmZ599dqqqqnLaaac1+J6WmTFjRo477ri89dZbufbaa3PIIYck+eSLBV/+8pczadKk7Lnnnunfv38++uij/PWvf82QIUNy7bXX5qCDDqo33je+8Y28/PLL2XfffbPhhhvW3svTTz+dr371q/noo4+y77775ogjjsiHH36Yl156Kddff329FfeN+TlaVY35vfDkk0/mhBNOSLt27TJ69Ohss802ja4HAAAoXYJxAAAAmq2HH344l156ab7yla/Utt18880ZNWpUjjnmmPz85z9Py5af/K/z4sWLc9JJJ+Xaa6/NkUcemZ133jlJ8sc//jF333137UrXNm3a1I61YMGCLFy4sN51p0+fnnHjxqV9+/ZJkhNPPDGDBg3Ktddeu0aC8bFjx+aqq67KEUccUdt2+umn509/+lP++te/1mlf3scff5xvfOMbeeSRRzJ8+PB861vfqj12yy23NOi5XHXVVZk4cWKOO+64XHzxxbXjDB48OMcee2yD7+lHP/pRvva1r+WII47IQQcdVOcd43vuuWd+8YtfrPC8V199NQ888EA6duyYJBk6dGgOP/zwnHrqqdluu+0yduzYtG3bNknSv3//nHLKKfn973+fCy64oN5YU6ZMybhx49KuXbsknzzTgw46KJdcckm++MUvZsstt2zwfb3xxhs59thjM2fOnNx0003Za6+9ao8NHz48kyZNqvf+9HPOOSeHHHJIvv/972ffffetF1C/9957eeCBB7LRRhvVti1atCinnHJK5s2bl//5n//JgAED6pwzffr0erWt7s9RQ6zu74W//vWvOfXUU7PFFlvk5ptvTteuXRtdCwAAUNpspQ4AAECzteOOO9YJxZPkhhtuSNu2bXPhhRfWhr9J0qpVqwwbNixJMnr06Nr2P/7xjykvL89FF11UJxRPkjZt2tQJJ5f5wQ9+UBsEJsk222yTz33uc3njjTcyb968Rt9Xnz596oWWy+7z2WefXeE577//foYMGZLHH388l19+eZ1QPGn4cxk5cmRatWqV7373u3XG6d+/f/r169fge+rbt2/uvPPOdOrUKXfeeWd++9vf5s4778xGG22UoUOHpnPnzis87/TTT68NxZNkt912y5Zbbpk5c+Zk2LBhtaF4khx66KGpqKjIyy+/vNKxloXiSdKpU6ecdNJJWbJkSUaNGtXge3r22Wdz5JFHZtGiRRk5cmSdUHz27Nm1X7j455XclZWVOeWUU/L+++/nkUceqTfud7/73Xo/d/fff3+mT5+eL33pS/VC8SQrDJZX5+eooVbn98Ktt96ab37zm+ndu3fuvPNOoTgAALBKrBgHAACg2dp1113rfF6wYEFeeeWVdO7cOVdeeWW9/tXV1UmS119/PUkyf/78vPrqq9lqq63So0ePVb7uTjvtVK9t0003TfLJu6aXD19Xxz+/h3v58efOnVvvWFVVVY488si8++67+cMf/pBBgwbVOd7Q5zJv3rxMmTIlPXv2TKdOner133PPPfPoo4/Wafvd735Xr7ahQ4dm8803T5KMGzcup556avbbb7/ceOON2WyzzTJt2rRcccUVOeusszJx4sT8+Mc/XqVn0alTp0yePDm9e/eu015eXp6OHTvm3XffrXdOknz+859fadtLL72U5JP/fr///e/r9Tv77LPrfH7yySdz7bXXprKyMjfffHO22mqrOsefffbZ1NTUZNGiRXXeEb7MW2+9leSTFef7779/nWP//HO9bLzkky8mrKqG/hytjob+Xvjd736X+++/PwMHDsx1111X78soAACs/Tb8znfSYvbsLN1443z4298WuxyaEcE4AAAAzVZlZWWdzx9++GEKhUJmzJiRyy67bKXnzZ8/P8knwV3yf0Heqtpggw3qtZWXlydJli5d2qCxVnX8Zau8a2pq6h2bOXNmPvroo/To0WOFoWpDn8uy0HT5ldrL22STTeq1/f73v88777xTp61v377ZfPPN88EHH+Q73/lOunfvniuuuCItWnyyAd4222yTX//613nrrbdy/fXX54QTTqgXMC+/GnmZZc9iZceWLFmyynUv+xn66KOPknxy7yt6Rv8cjL/00kv5+OOPM2DAgNrwf3kffvhhkuSpp57KU089tcJ6kv975iuqaXnL/pt06dJlpWP9s4b+HK2Ohv5e+Mc//pEkGTBggFAcAGAdtd4TT6R8xozUNODPprAmCMYBAABotsrKyup8XhaU7rzzzrn33nv/5fnLQr2VrTBurGUB8IqC2jW1YjdJevfunSFDhuS73/1uhg4dmhEjRtQJtRv6XJb1f//991d4fNasWfXannzyyZWO99RTT2XOnDnp06dP7TNZpqysLHvttVcmTJiQF198sV4wvibNmjUr3bp1q9NWVVWV5P/uefPNN8+0adP+5VgnnHBCZsyYkdtuuy0tW7bMFVdcURsIJ6ldKX3yySfn/PPPb1Cd//xznfzfz+qMGTMaNNaqWPbfZEVh+Zr8OU2SSy65JL/+9a9z/vnnp0WLFjnhhBPW6PgAAEDp8o5xAAAA+P/atWuXbbfdNq+99lrtavBPs/7666dnz56ZOnVq3nzzzTVeT4cOHZKsOMxctnX3mnL00Ufn0ksvzauvvpohQ4bUCa8b+lzat2+fLbbYIm+//XZmzpxZ7/inheArsmyr9pUF7bNnz07yyfvOP0vLViuvqO2ft2X/V1q0aJFLLrkkxx57bEaPHp3TTz+9TrC86667pqysLOPHj29c0cuNlyQPPfTQGhlveZ/2BZEXX3xxjV6rQ4cOue2227LTTjvl3HPPzY033rhGxwcAAEqXYBwAAACW8x//8R9ZsGBBvve9761wm+opU6Zk6tSptZ+/9rWvpaamJj/84Q+zYMGCOn0XLlyYDz74YLVr2WWXXZIkI0aMqNP+5z//OU888cRqj7syQ4cOzWWXXZbXXnstQ4cOrROON/S5fPnLX87ixYtzySWX1On30EMP1Xu/+L+y2267pby8PPfcc09efvnlOscmTZqU0aNHZ7311ssee+zRoHEb6oorrsi8efNqP1dVVeW6665Ly5Ytc9RRRzV4vLKyslx88cU57rjjMnr06HznO9+pDcc7deqUww8/PE8//XSuvvrqFAqFeudPmDCh3s/cyhxwwAHZdNNNc+edd+bBBx+sd7wxux60b98+PXr0yFNPPVX77vPkk3fNX3TRRas97spsuOGGue2227LLLrvk3HPPzR/+8Ic1fg0AAKD02EodAAAAlvPVr341EyZMyB133JGnn346/fr1S5cuXVJVVZXXX389zzzzTK688sra90J/7Wtfy9///veMGTMm/fr1ywEHHJD27dtn2rRpefDBB3PppZfmoIMOWq1aDjzwwGyxxRYZMWJEpk+fnh133DGvvfZaHnvssQwcODDjxo1bk7eeJBkyZEjKyspy5plnZvDgwbnjjjtSWVnZ4Ody6qmn5t57783NN9+cSZMmpU+fPpk+fXrGjBmTQYMGZezYsatc06abbprvfOc7+fWvf51DDz00Bx54YO2W5ffdd18WLVqU4cOHZ+ONN17jz2N5W2yxRQYOHJhDDjkkS5YsyZgxYzJr1qwMGzYsW2655WqNWVZWll/84hdJkptvvjmFQiG//e1v07Jly/zsZz/LG2+8kQsvvDB/+tOfsttuu2WDDTbI9OnT8/zzz+ett97KM888s0rv2l5vvfVyzTXX5Pjjj8/xxx+fAQMGZIcddshHH32Ul156KQsWLMj999+/WveQJCeddFLOOeecfPGLX8xhhx2WpUuX5m9/+1vtlzvWtA4dOuTWW2/Nsccem+HDh6dQKOTEE0/8TK4FAACUBsE4AAAALKesrCyXX355Bg4cmFtuuSVjx47Nxx9/nI4dO6Z79+4ZPnx4vvCFL9Tpf/XVV6d///655ZZbMnLkyBQKhXTp0iWHH354dtppp9WupU2bNrn99tvz4x//OI899lgmTJiQ3XbbLXfeeWceeOCBzyQYT5LBgwfXhuNDhgzJiBEj0qlTpwY9l7Zt22bkyJG56KKLct999+XFF19Mz549c/XVV2fu3LkNCsaT5Pvf/3569eqVm266KY888kg++uijtG/fPn369MnXv/717L///mv6MdRzzTXX5JJLLsno0aMze/bsdO/ePeecc06OOeaYRo27LBxv0aJF/ud//ieFQiFXXnllNtpoo9x111258cYbc/fdd2fUqFFZunRpOnXqlB122CFnnHFGg74MsMcee+S+++7Lb3/72zz44IN55JFH0qFDh2y77bb56le/2qh7+OpXv5olS5bk97//fW699dZ06tQpQ4cOzX/+539+Zu99Xz4cP//881MoFPKNb3zjM7kWAACw7isrrGgvLvgnVVVVte90AwAA1n1z586tfS8wQHNh7gMAKL7Ou++e8hkzUtOlS94bP77Y5bCOq6ioSGVl5Sr19Y5xAAAAAAAAAEqaYBwAAAAAAACAkuYd4wAAAAAAAECT+Pi449Ji7tws9YobmphgHAAAAAAAAGgS8846q9gl0EzZSh0AAAAAAACAkiYYBwAAAAAAAKCkCcYBAAAAAAAAKGmCcQAAAAAAAKBJdN5993Tt1i2dd9+92KXQzAjGAQAAmqlCoVDsEgCajDkPAACaN8E4AABAM9SyZcssXry42GUANJnFixenZcuWxS4DAAAoEsE4AABAM9S6dessXLgwixYtsooSKGmFQiGLFi3KwoUL07p162KXAwAAFImvyQIAADRDLVq0SPv27bNw4cJ89NFHxS4H4DPVsmXLtG/fPi1aWCMCAADNlWAcAACgmWrRokXatm1b7DIAAAAAPnO+JgsAAAAAAABASROMAwAAAAAAAFDSBOMAAAAAAAAAlDTBOAAAAAAAAAAlrWWxCwAAAAAAAACahw9+85uULV6cQqtWxS6FZkYwDgAAAAAAADSJxXvtVewSaKZspQ4AAAAAAABASbNinFVSOem1ZO5Hq9R3+q47fcbVAAAAAAAAAKw6wTgAAAAAAADQJFo9/njtO8Ztq05TEowDAAAAAAAATWKj005L+YwZqenSJe+NH1/scmhGvGMcAAAAAAAAgJImGAcAAAAAAACgpAnGAQAAAAAAAChpgnEAAAAAAAAASppgHAAAAAAAAICSJhgHAAAAAAAAoKQJxgEAAAAAAAAoaYJxAAAAAAAAAEqaYBwAAAAAAACAktay2AUAAAAAAAAAzcN748cXuwSaKSvGAQAAAAAAAChpgnEAAAAAAAAASppgHAAAAAAAAICS5h3jAAAAAAAAQJNod9llaTF3bpZusEHmnXVWscuhGRGMAwAAAAAAAE1i/ZtvTvmMGanp0kUwTpOylToAAAAAAAAAJU0wDgAAAAAAAEBJE4wDAAAAAAAAUNIE4wAAAAAAAACUNME4AAAAAAAAACWtZbELYN1Qtd22qa6uLnYZAAAAAAAAAA1mxTgAAAAAAAAAJU0wDgAAAAAAAEBJs5U6AAAAAAAA0CQW9e2bFrNnZ+nGGxe7FJqZskKhUCh2Eaz9qqqqvGMcAAAAAAAAWGtUVFSksrJylfraSh0AAAAAAACAkiYYBwAAAAAAAKCkCcYBAAAAAAAAKGkti10AAAAAAAAA0Dx0HDIkLWbNytJNNsn7d9xR7HJoRgTjAAAAAAAAQJNo+eabKZ8xIzVz5xa7FJoZW6kDAAAAAAAAUNIE4wAAAAAAAACUNME4AAAAAAAAACVNMA4AAAAAAABASROMAwAAAAAAAFDSBOMAAAAAAAAAlDTBOAAAAAAAAAAlTTAOAAAAAAAAQElrWewCAAAAAAAAgObhozPPTNnHH6ew/vrFLoVmpqxQKBSKXQRrv6qqqlRXVxe7DAAAAAAAAIAkSUVFRSorK1epr63UAQAAAAAAAChpjQ7GP/744zVRBwAAAAAAAAB8Jhr9jvGTTjopn/vc57Lvvvtml112SVlZ2ZqoCwAAAAAAACgxLd57L6mpScrLs7Rz52KXQzPS6GB86dKleeKJJ/LEE09kww03zD777JP+/ftns802WxP1AQAAAAAAACWi8pBDUj5jRmq6dMl748cXuxyakbJCoVBozABz5szJww8/nIceeihTp06tbd9mm23Sv3//7L333ll//fUbXSjFVVVVlerq6mKXAQAAAAAAwDqs8+67C8ZZYyoqKlJZWblKfRsdjC/v7bffzoMPPpjHHnssc+fOTZK0bNkyn/vc59K/f//suuuutlpfRwnGAQAAAAAAaCzBOGtS0YLxZZYuXZoJEybkwQcfzDPPPJMlS5Ykia3W12GCcQAAAAAAABpLMM6aVPRgfHnz5s3Lfffdlz/96U9ZunRpbfs222yTAw88MP369UuLFi0+yxJYAwTjAAAAAAAANJZgnDWpIcF4y8+qiKVLl+bZZ5/Ngw8+mPHjx9eG4ltssUU++uijvP7663n99dczZsyYDBs2LJtssslnVQoAAAAAAAAAzdgaD8anTJmSBx98MI8++mjmzJmTJFl//fUzaNCgDBgwIN27d0+hUMgzzzyTO+64I2+++WZuvPHGfPe7313TpQAAAAAAAADAmgnG586dm0cffTQPPfRQ3n777SRJWVlZdt555wwYMCCf//zn07Ll/12qrKwsu+22W3bcccd8+9vfzksvvbQmygAAAAAAAACAehodjF988cV59tlnU1NTkyTp1KlT+vfvnwEDBqRjx46fem6rVq3StWvXvPLKK40tAwAAAAAAAABWqNHB+Pjx49OqVav07ds3AwYMyI477tig81fnHAAAAAAAAABYVWWFQqHQmAH+93//N/369UubNm3WVE2shaqqqlJdXV3sMgAAAAAAAFiHlb/+espqalIoL0/NNtsUuxzWcRUVFamsrFylvo1eMf7aa6/lzTffzIknnljnPeIAAAAAAAAAyxOGUyyNTrIfeeSRbL755kJxAAAAAAAAANZKLRo7wMYbb7wm6gAAAAAAAACAz0Sjg/HddtstU6dOzQcffLAm6gEAAAAAAABKVJtRo9L2llvSZtSoYpdCM1NWKBQKjRlg7ty5+cEPfpCOHTvmrLPOyoYbbriGSmNtUlVVlerq6mKXAQAAAAAAwDqs8+67p3zGjNR06ZL3xo8vdjms4yoqKlJZWblKfRv9YvD7778/u+22Wx544IF85zvfyU477ZRu3bqldevWKz1n8ODBjb0sAAAAAAAAAKySRgfjd9xxR+2/L126NBMmTMiECRM+9RzBOAAAAAAAAABNpdHBuJAbAAAAAAAAgLVZo4PxIUOGrIk6AAAAAAAAAOAz0aLYBQAAAAAAAADAZ0kwDgAAAAAAAEBJa/RW6st79dVXM3ny5MybNy81NTUr7ee95AAAAAAAAAA0lTUSjL/88su55ppr8t57761Sf8E4AAAAAAAAAE2l0cH4O++8k4suuihLlizJF77whbz88st5//33c9RRR+X999/P5MmTM3ny5LRq1Sr7779/2rRpsybqBgAAAAAAANYxNZ061fknNJVGB+OjR4/O4sWL861vfSsDBgzI+eefn/fffz9f+cpXavs899xzueaaa/Lcc8/lpz/9aWMvCQAAAAAAAKyDZt17b7FLoJlq0dgBXnrppbRt2zb9+/dfaZ9ddtklZ599dt55552MHDmyweMPHTo0I0aMaGypn4m1sb4RI0Zk6NCheemll4pdCgAAAAAAAEDRNToYnzt3bjp16pQWLT4Zqry8PEmyePHiOv222WabdO3aNU8++WRjLwkAAAAAAAAAq6zRwXjbtm2zdOnS2s/rr79+kqSqqqpe35YtW2b27NmNvSQAAAAAAAAArLJGB+ObbLJJPvjgg9rPW2yxRZJk/PjxdfrNnDkz06dPT9u2bRt7SQAAAAAAAGAd1OH7389GJ52UDt//frFLoZlp2dgBevfunTFjxmTmzJnp1KlT+vXrlzvvvDO33npr5s+fn549e+bDDz/MXXfdlSVLluTf/u3f1kTd+fjjj/OLX/wikyZNyje/+c3st99+WbBgQcaMGZO///3vee+991JRUZFtt902X/7yl7P99tvXOf/HP/5xXn755dx8882588478+ijj2bWrFk56qijMnTo0CSfhPmjR4/Oc889lw8++CBt27bNZpttln333Tf77rtvvZrefPPN3HrrrZk0aVLKysqy44475mtf+1o6depU22fmzJn5zne+k/79++fb3/52vTGGDh2aHXbYIT/+8Y/r1Xrrrbdm1KhR+dvf/pYPPvgglZWVOeSQQ3LggQeu0jObPHlyfvazn2XJkiU555xzsu22267SeQAAAAAAALAmtB47NuUzZqSmS5fMKXYxNCuNDsb33HPP/OMf/8grr7ySTp06pWvXrjn66KNz2223ZdSoUXX6durUKccee2xjL5nZs2fnpz/9aWbMmJGzzjore+65Z+bNm5cf/ehHmTp1anr16pVddtkl8+fPz9NPP52f/OQnOfPMM/P5z3++3liXXHJJJk+enF122SXt2rVL586dkySvvvpqfvazn2XBggXZZZddsvfee2fevHl5++2385e//KVeMP7mm29mzJgx2WGHHbLffvvl7bffzlNPPZUpU6bk0ksvTatWrRp937/+9a/z2muv5d/+7d/SokWLPPHEE7n++utTXl6e/fbb71PPnThxYn7xi1+kTZs2ueCCC9KtW7dG1wMAAAAAAACwLmh0ML7tttvmiiuuqNN21FFHZfvtt88jjzySqqqqtGrVKttvv33222+/tGnTplHXmz59en76059m3rx5+eEPf5jevXsnSf7whz9k6tSpOeWUUzJgwIDa/h9++GF+8IMf5Lrrrsuuu+5aL6D+4IMPcskll6Rdu3a1bdXV1fnVr36VBQsW5Ac/+EF23XXXOue8//779eqaMGFCzjjjjOy11161bb/97W/z8MMP56mnnsree+/dqPtedt1LL720djv6Qw45JGeffXb+/Oc/f2ow/tRTT+Xyyy9P586dc+6556Zjx46NrgUAAAAAAABgXdHoYHxlevXqlV69eq3RMV9//fVcdNFFadGiRX7yk59kq622SpLMnTs3jz/+eHbaaac6oXiSbLjhhvniF7+YG264IS+88EJ23333OseHDh1aJxRPkqeffjrvv/9+9tlnn3qheJIVBsu9evWqE4onyYABA/Lwww/njTfeWCPB+DHHHFPnHe1du3bNdtttl5dffjkLFixY4ZcOxo0bl+uuuy7bbLNNzjnnnHr3+s+qq6tTXV1d+7msrKzRX2YAAAAAAAAAKKZGB+M/+clP0qpVq3zve99Ly5afWc6eV155JX/+85/ToUOHnHvuuenSpUvtsTfeeCNLly7N4sWLM2LEiHrnzpgxI0kybdq0esH4NttsU6//66+/niTZZZddVrm+7t2712tbFqB//PHHqzzOp+nRo0e9to033rj2Gv8cYN9zzz15+umn82//9m8566yzst566/3La4waNSojR46s/dy9e/f84he/aGTlAAAAAAAAAMXT6CT71Vdfzeabb/6ZhuJJ8tZbb2XhwoXZdddd06lTpzrH5s2blySZNGlSJk2atNIxFi1aVK+tQ4cO9dqWBdnLQudVsfxK7mVatGiRJFm6dOkqj9PQa5SXl6/0GhMnTkyS7LrrrqsUiiefbIN/2GGH1X4uKytbnVIBAAAAAAAA1hqNTrM32WSTOltvf1YOOuigzJ49O3/729/ym9/8Jqeddlpt8LxspfRhhx2Wf//3f2/QuCsKftdff/0kyezZsxtZdX3Laq6pqal3bP78+Wv0Wqecckr+9Kc/5cYbb0yLFi1y4IEH/stzKioqUlFRsUbrAAAAAAAAACimFo0dYM8998y0adMyffr0NVHPSpWVleVb3/pWBg4cmMceeyy/+c1valdJb7PNNikrK8trr722Rq61bHv15557bo2Mt7xlq74/+OCDesfeeuutNXqt9ddfP8OHD0/37t1z/fXX57777luj4wMAAAAAAACsCxodjH/5y1/OVlttlV/+8pd5++2310BJK1dWVpaTTz45gwYNymOPPZYrrrgiS5cuzYYbbpi+fftm0qRJufvuu1MoFOqd+9prr61wK/UV2WOPPdKxY8c88sgjefbZZ+sdb8xK8rZt22bTTTfNK6+8Uvvu8yRZsGBBbrnlltUed2XatWuX4cOHZ+utt84f/vCH3HvvvWv8GgAAAAAAAABrs0ZvpX799denS5cuefLJJzNs2LBsvvnm6dat20rfaV1WVpZTTjllta9XVlaWk046KWVlZXnggQdSKBRy+umn5xvf+EamT5+em266KQ8//HB69uyZtm3bZtasWXnrrbfy7rvv5rrrrluld21XVFTkzDPPzE9/+tNcdNFF2XXXXbPllltm/vz5mTx5chYtWpSLL754te/hsMMOy+9+97uce+656du3b5YuXZpnn302PXr0WO0xP83666+f8847LxdeeGFuuOGGFAqFHHLIIZ/J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AAAAAAAAWAtZMb4Gde/evV5bx44dkyQff/xxbduysHyZbt265YQTTsh6662XUaNG5Z577slXv/rVemMtWxG+vO233z5J8vbbb9e2bbDBBvn85z+fxx57LNOnT0/Xrl2TJOPGjUtZWVkGDhy40ns46qijcthhh9V+LisrW2lfAAAAAAAAgHWBFeNrUNu2beu1LVuZvXTp0n95/rLAetKkSSs83qFDhxW2lZWVZf78+XXa99tvvySpXTU+a9asPP/889lpp53SqVOnldZQUVGRtm3b1v6yjToAAAAAAABryqBHH82hY8dm0KOPFrsUmhnB+Fqkffv2SZJFixat8PicOXNW2FYoFOqF8r17907Xrl3z0EMPZcmSJRk3blwKhUIGDRq05gsHAAAAAACAVfD5557LF55+Op9/7rlil0IzIxhfi7z++utJksrKyhUenzhxYr22V155JUmy1VZb1Ts2aNCgzJkzJ08//XQefPDBtG/fPp/73OfWXMEAAAAAAAAA6wDBeBP78MMPM2PGjHrts2fPzg033JAk6dev3wrPvffeezN79uzazwsXLszIkSOTJPvss0+9/vvuu28qKipyww03ZNasWenfv39atvRaeQAAAAAAAKB5kZI2sWnTpuWCCy7I9ttvn65du6Zdu3apqqrK+PHjs2jRovTv3z99+/Zd4blbb711vve972WvvfZKRUVFnnzyyVRVVWXQoEHZYYcd6vVv37599txzzzz6/9/RYBt1AAAAAAAAoDkSjDexzp07Z8CAAXnjjTfy97//PQsXLkzbtm2z3XbbZeDAgdlrr71Weu4JJ5yQJ554IuPGjcv777+fjh075rjjjsvhhx++0nP69++fRx99NNtvv326dev2WdwSAAAAAAAAwFpNML4G9O7dOyNGjFjhsU6dOtU5tskmm+Rb3/rWal2nRYsWOeqoo3LUUUet8jlvv/12EqvFAQAAAAAAgObLO8ZL2OLFi/PXv/417dq1W+n27AAAAAAAAAClzorxEvTKK6/k5ZdfznPPPZdZs2bl2GOPTatWrYpdFgAAAAAAAEBRCMZL0PPPP5+RI0emffv2OfTQQz/1HeSrqlvHw7JezcI1UB0AAAAAAADNVXn5jUnmpbx8/XTv/O/FLme1HH70hsUugdVQVigUCsUugrXfn25+M7NmCsYBAAAAAABYfQNv+n5af/xB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xS6FZsZW6gAAAAAAAACUNME4AAAAAAAAACVNMA4AAAAAAABASROMAwAAAAAAAFDSBOMAAAAAAAAAlDTBOAAAAAAAAAAlTTAOAAAAAAAAQElrWewCWDe0bOlHBQAAAAAAgEbaaadk002TTTZJRUVFsathHdeQDLOsUCgUPsNaWMdVV1eblAAAAAAAAIB1mq3U+VTV1dX59a9/nQULFhS7FGAdtGDBggwbNswcAqwWcwjQWOYRoDHMIUBjmEOAxjCHwGdDMM6/9Nhjj8XGAsDqKBQKeeutt8whwGoxhwCNZR4BGsMcAjSGOQRoDHMIfDYE4wAAAAAAAACUNME4AAAAAAAAACVNMM6nqqioyODBg1NRUVHsUoB1kDkEaAxzCNBY5hGgMcwhQGOYQ4DGMIfAZ6Os4AUFAAAAAAAAAJQwK8YBAAAAAAAAKGmCcQAAAAAAAABKmmAcAAAAAAAAgJLWstgFsHZ6/fXXc8cdd+TVV1/NkiVLstlmm+XQQw9Nv379il0a0IRmz56dJ554Is8880ymTZuWDz/8MO3atct2222XI444Ittuu229c+bPn5877rgjTz75ZD788MNsuOGG2XPPPTNkyJC0bdt2hdd59NFHc8899+Sdd95Jy5Yt07NnzwwdOjRbb731Z32LQBO76667cvPNNydJLrzwwvTs2bNeH/MI8M/+8Y9/5K9//WveeuutLFq0KBtuuGG23XbbHH/88dlkk01q+5k/gOUVCoX84x//yH333Zdp06Zl/vz56dixY3r37p0jjjginTt3rtPfHALN08MPP5xXXnklb775ZqZMmZIlS5bk1FNPzb777rvC/k0xV7z77ru59dZb89JLL2XhwoXZdNNNs99+++WAAw5IixbWusHaZFXnkCVLluTpp5/O+PHj8/rrr2fWrFkpKyvLZpttlv79+2f//fdf6e9vcwisOWWFQqFQ7CJYu7z00kv56U9/mpYtW2avvfZK27Zt849//CMzZ87MV77ylXzpS18qdolAE7n55ptz1113pXPnztlhhx3SoUOHvPvuu3nqqadSKBTyn//5n9lrr71q+y9cuDDnn39+3n777ey8887p3r17Jk+enGeffTZbbbVVLrjggrRu3brONe68887cdttt2WSTTdKnT58sXLgwjz32WKqrq3Puueemd+/eTX3bwGfknXfeybBhw9KiRYssWrRohcG4eQRYXqFQyO9+97s88MAD6dy5c3bZZZe0adMmH3zwQV5++eWcfvrp2X777ZOYP4D6/vu//zt//vOfs9FGG2WPPfZImzZtMnny5Dz//PNp3bp1/uu//itbbLFFEnMINGff/va3U1VVlfbt26d169apqqpaaTDeFHPFO++8k/POOy+LFi1K3759s/HGG+fZZ5/NlClTMmjQoJx88smf5eMAGmhV55Bp06blzDPPTJs2bdK7d+907do18+fPz/jx4/PBBx9k9913z/e///2UlZXVOc8cAmuWYJw6ampqcsYZZ2T27Nm58MIL07179yTJggULct5552X69Om57LLLsummmxa5UqApPPnkk9lggw3Sq1evOu0TJ07MBRdckDZt2uTaa69NRUVFkmTEiBEZOXJkvvjFL+b444+v7b+sffDgwRk6dGht+7vvvpuzzjornTp1ykUXXVT7zeqpU6fmhz/8YTbccMNcfvnlKS8vb4K7BT5LS5cuzbnnnpuysrJsuummeeSRR1YYjJtHgOX95S9/yY033pgDDzwwX//61+utbqipqan9/W3+AJb34Ycf5uSTT84mm2ySX/7yl3VWcd5zzz354x//mH333TennnpqEnMINGfPP/98Nt1001RWVmb06NG55ZZbVhqMN8Vc8aMf/SgTJ07MOeeck9122y3JJytNL7roorzwwgs5//zzs+OOO35GTwNoqFWdQ2bPnp2nn346/fv3z3rrrVfbvnDhwvzkJz/JG2+8kTPPPDN9+/atPWYOgTXPngnU8eKLL+a9997L3nvvXRuKJ0mbNm3y5S9/OTU1Nfnb3/5WxAqBprTnnnvWC8WTpFevXtlxxx0zb968TJkyJcknK7rGjh2b1q1bZ/DgwXX6H3nkkVl//fUzbty4LP99rL/97W+pqanJl770pTp/UbX55ptnn332yXvvvZcXX3zxM7o7oCmNHj06kydPzimnnLLSbbvMI8DyFi9enJEjR6Zz58454YQTVjh3LPsLIPMH8M9mzpyZQqGQ7bbbrt7Wxsv+knju3LlJzCHQ3O28886prKz8l/2aYq6YPn16Jk6cmN69e9fOVUnSsmXLfOUrX0mSjB07drXvFVjzVnUO2XjjjXPAAQfUCcWTpHXr1jn00EOTJC+//HKdY+YQWPME49Tx0ksvJUl22WWXesd23nnnJJ+sFAVY9hfRy/757rvv5oMPPsh2221Xb9uwVq1apVevXpk9e3ZmzJhR277sD3srmnOWtf3zHwiBdc+UKVMycuTIfOlLX8rmm2++0n7mEWB5zz//fObNm5fPfe5zWbp0aZ588smMHj06999/f515IDF/APVtuummadmyZSZNmpQFCxbUOfbMM88kSe1qKXMIsCqaYq74tP7bbLNN1l9/fXMLlKCWLVsmSb2dZswhsOa1LHYBrF2W/cFtRVult2vXLu3bt8+7777b1GUBa5lZs2blhRdeyIYbblj7Tr5Pmz+Wb3/33Xfr/Hvr1q2z4YYbfmp/YN1VU1OTq666Kt26dcuRRx75qX3NI8Dy3njjjSRJixYt8r3vfS/Tp0+vPVZWVpZDDz00//7v/57E/AHU1759+3zlK1/JTTfdlDPPPDN77LFHWrdunalTp+b555/Pfvvtl4MOOiiJOQRYNU0xVyz79y5dutTrX1ZWli5duuSNN97IokWL6q06BdZdy3bpXbY4cRlzCKx5gnHqmD9/fpLU22ZsmbZt2+b9999vypKAtcySJUvym9/8JtXV1Tn++ONrtzX9V/NHmzZt6vRb9u8dOnT41P7/vLoDWLeMGjUqkydPzk9/+tPab0CvjHkEWN6cOXOSJH/+85/TvXv3/OxnP8tmm22Wt956K9ddd13+/Oc/p0uXLjnggAPMH8AKffGLX8zGG2+c6667Lvfff39t+3bbbZcvfOELtX82MYcAq6Ip5oqGXEOoBaXhgQceyDPPPJMdd9yxzvbniTkEPgu2UgdglS1dujRXX311Jk6cmEGDBmWfffYpdknAWuztt9/On/70pxx++OHp0aNHscsB1jHL3s/ZsmXLfO9738s222yT1q1bp1evXjnrrLNSVlaWMWPGFLlKYG32pz/9KVdeeWWOPPLIXH311fnv//7vXHDBBampqclPfvKTPPnkk8UuEQBoxiZMmJDrr78+lZWVOe2004pdDjQLgnHqWPZNouW/2bi8+fPnr/TbRkBpKxQKufbaa/PII4/kC1/4Qr75zW/WOf6v5o9l315cfg5p27btv+y/7JuMwLrnyiuvTJcuXTJkyJBV6m8eAZa37Pf61ltvnY033rjOsc033zydO3fOe++9l48//tj8AdTz4osv5vbbb89BBx2UL33pS+nYsWNat26d7bffPuecc05atWqVP/7xj0n8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", + "text/plain": [ + "
" ] }, "metadata": {}, @@ -386,24 +366,34 @@ } ], "source": [ - "df = pd.DataFrame.from_dict(kerchunk_benchmarks + regular_xarray_benchmarks)\n", + "df = pd.DataFrame.from_dict(kerchunk_benchmarks + regular_xarray_benchmarks + regular_h5py_benchmarks)\n", "\n", - "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "plt.figure(figsize=(20, 5)) \n", + "plt.style.use('ggplot')\n", + "# plt.style.use('grayscale')\n", "\n", - "# Plotting\n", - "pivot_df.plot(kind='bar', figsize=(15, 5))\n", + "pivot_df = df.pivot_table(index=['tool',], columns=['format', ], values='time', aggfunc='mean')\n", + "baseline_original = pivot_df['original'].max()\n", + "kerchunk_original = pivot_df['original-kerchunk'].max()\n", "\n", - "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", - "plt.suptitle('Cloud-optimized HDF5 access performance (less is better)', fontsize=14)\n", + "# Plotting\n", + "pivot_df.plot(kind='barh', figsize=(20, 8), fontsize=14, width=0.8)\n", "\n", - "plt.xlabel('Tool')\n", - "plt.ylabel('Time in seconds')\n", - "# plt.xticks(rotation=90)\n", - "plt.legend(title='Format')\n", - "# plt.grid(True)\n", + "plt.suptitle('Cloud-optimized HDF5 performance (less is better)', fontsize=18)\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=14)\n", + "plt.xlabel('Mean Time (S)')\n", + "plt.ylabel('Library', fontsize=16)\n", "plt.xticks(rotation=0)\n", - "# plt.grid(True)\n", - "# plt.grid(axis='y', which='major', linestyle='-')\n", + "plt.legend(title='Format', fontsize=14)\n", + "plt.grid(False)\n", + "\n", + "\n", + "plt.axvline(x=baseline_original, color='red', linestyle='--', linewidth=2, label=f\"Baseline: {baseline_original:.2f}\")\n", + "\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"stats.png\", transparent=True, dpi=150)\n", + "\n", "plt.show()" ] }, @@ -420,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 57, "id": "98c29558-de50-44af-87e9-074092fcd0ac", "metadata": { "tags": [] @@ -430,24 +420,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", - "Unable to synchronously open file (file signature not found)\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", - "Unable to synchronously open file (file signature not found)\n", "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", - "Unable to synchronously open file (file signature not found)\n", "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\n", - "Unable to synchronously open file (file signature not found)\n" + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n" ] } ], @@ -460,17 +437,8 @@ " if \"kerchunk\" in k or link.endswith(\".json\"):\n", " continue \n", " print (f\"Processing: {link}\")\n", - " log_filename = f\"logs/fsspec-h5py-{key}-{k}_default.log\"\n", - " \n", - " # Create a new FileHandler for each iteration\n", - " file_handler = logging.FileHandler(log_filename)\n", - " file_handler.setLevel(logging.DEBUG)\n", - "\n", - " # Add the handler to the root logger\n", - " logging.getLogger().addHandler(file_handler)\n", - " # this is mostly IO so no perf_counter is needed\n", " start = time.time()\n", - " fo = fs.open(link, mode=\"rb\")\n", + " fo = fs.open(link, cache_type=None, mode=\"rb\")\n", " with h5py.File(fo) as f:\n", " path = f\"{dataset['group']}/{dataset['variable']}\"\n", " data = f[path][:]\n", @@ -486,10 +454,6 @@ " \"shape\": data.shape,\n", " \"bytes_requested\": fo.cache.total_requested_bytes,\n", " \"mean\": data_mean})\n", - "\n", - " logging.getLogger().removeHandler(file_handler) \n", - " file_handler.close()\n", - " \n", " except Exception as e:\n", " print(e)" ] @@ -507,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 56, "id": "d8fa6dca-f408-4298-beca-f2839d4c3b67", "metadata": { "tags": [] @@ -515,7 +479,7 @@ "outputs": [ { "data": { - "image/png": "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Kfn4+ChPnjyqWLGiunfvrgsXLtj7xcXF6Y033lD58uXl6+srf39/lS1bVh07dszQ75W0PmcOHjyojh072n++efPmVdWqVfX6669neHul63+oGD9+vIKDg+Xt7a1SpUpp4sSJaR4OvH79erVo0UJ58+aVl5eXSpUqpWHDhjl83owcOVINGjSQJI0aNcrh9/PRo0cz9NkiSUeOHNHLL7+soKAgeXl5qVChQoqIiNAff/yRqq6U5Y8fP66IiAgVLFhQ2bJlc/jsaN26tSRp3rx5mXqOgPSwxwn3lcjISCUlJalr164qUKBAun29vLwsx3v33Xf12muvKU+ePGrXrp1y5Mihb7/9Vn379tWGDRvsJxvfqtWrV6tp06bKli2b2rRpo8KFC2v16tWqXbu2cufOnenxvvrqK73wwgvy9PRUmzZtlD9/fv34448aNWqUVq5cqTVr1qTa7r///lu1a9dWoUKF9Morr+j48eNavHixGjRooB9++MH+4fXaa68pMjJSu3btUp8+fZQrVy5Jzg/3cmbq1Klau3atWrVqpSeeeEJfffWV+vTpo+zZs2vXrl364osv9NRTT+mJJ57QokWL1L59exUvXlx16tRJd9y09pB88cUX2rNnj7Jnz25vi46Otn+YNm7cWE8//bROnTqlr776Sj/88INWr17tcP5DVv987oRs2bJp6NChWr16tRYvXqyBAwfe1ngbNmzQ1q1b5ebmprJly+rJJ5/M0HslIxITE7V8+XI1a9bMvhcmMjJSycnJeuWVV9J9zw4fPlyfffaZ5s6dq9GjR2d4nc8//7x+/fVXPf/887p27Zo+//xzde7cWSdPntSQIUMc+v7nP//R+PHjVaRIET377LPy8/PT+vXrNWDAAP3888/64osvUo3/xRdfaOXKlXrqqafUvXt3Xbx40f56nDp1qqTr7x3p/94rxhi1adNGS5YsUenSpdWjRw9dvnxZn3/+uZ566im9++676t27d4bWdaN+/frp559/VosWLeTm5qZFixapXbt2yp07t95//3399ttvatasma5evarPPvtMLVu21L59+1S8eHH7GB9++KG+/fZb1atXT82aNdOVK1e0du1aDRkyRNu2bdNXX32Vqq5r166pcePGOnfunP71r3/pypUrWrRokVq3bq0VK1aocePG9r5Xr15VeHi41q9fr1KlSqljx47y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x6Yav06dOipevLj++9//OlwXxBij//znP5kOJ61atZK/v7/mzZun33//3WG8IUOG6Nq1a06vI5WUlKShQ4c6/HVw3bp1Wr58uYKDg+17BKT/Ox485ZCpe8EXX3yhkSNHKjQ0NM3zU6Tr54c8/vjjWrhwoRYvXpzq8eTkZPuXVinrfz53wunTp/Xvf/9bq1evVvny5fXqq6/e0jgXL17Ur7/+mqr977//VufOnSXdXiiLiYnRzp07HS56m6J06dLq06ePzp49qxYtWig2Ntbh8eTkZI0ZM0affvqpSpYsqf79+2dq3ePGjXOYtvvkyZN655135O7urnbt2tnbU6b/7tSpk9OLY584cUJ79+7N1LrTkrKXJOV9meL48eP22l588cUsWVdmFC1aVJJSXafo999/1/jx4297fHd3d3Xt2lVxcXHq06dPqvdQXFycLl26JCnz79f0pOyJcBZUnSlYsKBat26tTZs2aeLEiU73nPz888/2vbC//fab02sJpew99PHxkXT9OkR79uyx7JdZ27ZtS3fPambGnTZtmsPn3aVLl+zT/7dv397e3r17d7m7u6tXr15O/4h0/vx5hz8YWn12pPd4q1atFBQUpHfeeUfr169P9fi1a9ecXlvLyrVr17Rz506FhIRwqB6yDOc44b4zduxYXb16VVOmTFGZMmX0xBNPqEKFCvLw8NCRI0f0448/6uzZs07DzI1KliypCRMm6PXXX1elSpXUunVr5ciRQ//973+1b98+tWrVSv/+97/t/T09PdWzZ0+99dZbqlq1qlq1aqWLFy/q22+/Vf369e1/zU2RLVs2zZ49W82aNdOTTz5pv07Q//73P8XGxqpSpUpOv8ymxc/PTx9++KHatm2rxx9/XG3atFG+fPm0evVqbd++XTVq1Eh1fol0/RCPtWvXqmbNmnriiSf0119/adGiRfLw8NCHH35oPwRRkp544glNmjRJXbt21fPPP68cOXIoKCjI4Qvo3dahQwcZY1S5cmWnX+7CwsLsJ9wvXLhQDRo00AsvvKCpU6eqWrVq8vb21rFjx7R582adPn3aPpFCVv98btekSZPk6+ur5ORkXbhwQXv27NH69esVHx+v2rVra9GiRbf84X/27FlVrlxZISEhqlixov38ve+//15nz55Vo0aN1Ldv31uuPeUwPWfBSZLefvttxcXFae7cuSpVqpSaN2+ukiVL6sKFC1q5cqUOHjyoUqVKafny5U4PYUtPiRIlVKFCBT377LP26zidOnVK48aNc7juS5MmTTR8+HCNGTNGwcHBatKkiYoWLaqzZ8/q0KFD2rBhg8aOHaty5crd8vOQ4qWXXtKSJUv0zTffqFKlSnrqqafs13E6e/asJk+enOqaNHdDjRo1VKNGDX3++eeKjY1VzZo1dezYMS1btkzNmzdP84K2mTF69Ght2bJFn3zyibZs2aKmTZvKy8tLhw8f1ooVK/TTTz/Z92xk5v2anoYNGypnzpz68ccf1a9fvwzVOWPGDO3fv18DBw7UJ598otDQUPn7+ysmJkY7duzQwYMHFRsbq+zZs+vHH3/U66+/rtq1a6ts2bIKCAjQ4cOHtWzZMvn4+Khnz56Srk8I9Mwzz6h69eqqUKGCChYsqOPHj+vrr7+Wm5tbpi9Wm2LBggWaMWOGwsLCFBwcLD8/P+3Zs0fLly9X3rx5M7WXtnr16qpcubLatGkjLy8vLVmyREePHlWXLl1Ur149e78KFSpoxowZevXVV1WmTBk1a9bM/p49fPiw1q1bp4iICPtkOGXLllXhwoXtv6eKFCkim82mV199Vf7+/ul+tnh5eenLL79U06ZNVb9+fTVs2NA+IcixY8e0YcMGBQQEZHoyipTfnzdPjAPcliybnw+4y7Zt22Y6depkgoODjY+Pj/Hy8jLFihUzbdu2TXVdkPSmuf7mm29M/fr1Tc6cOY2Xl5epWLGimTx5ssP1clIkJiaaN954wwQGBhpPT09TunRp8+6775rDhw87vVaIMcasX7/e1KtXz/j4+Jg8efKY559/3vzxxx/26ZQza/369aZp06YmV65c9hqGDx/ucA2XFPr/15L5448/zPPPP29y585tfHx8TL169VJdryXF22+/bUqVKmU8PDzsy6dIbzpyZ89telPQOtt+Z2Mpk9N7nzt3zgwbNsxUqFDB+Pj4GF9fX1OqVCnTrl07s2TJklR1ZMXPJ70pulMsXLgw3enIU27u7u4md+7cpnLlyqZTp05mxYoVDtfaulHRokWNl5eXZX1xcXGmR48eplq1aiZv3rzG3d3d+Pv7mzp16phZs2alex2UjGzrk08+6XRa7putWrXKPP/886Zw4cLGw8PD5MqVy4SGhprJkyc7XI8rI1KetytXrpj+/fubRx55xHh6eppHH33UfPTRR+nW0KJFC5MvXz7j4eFhChYsaEJDQ82YMWMcpipPmSJ83rx5aY6V1nTkxhhz7do1M2nSJFOxYkXj5eVlcubMaerXr2+++eabVH2t1pXZ91F69Z06dcp06tTJFC5c2Hh7e5uKFSua999/P83fYeltY1rrvnr1qpk0aZKpUqWK/T1Yvnx58/rrr5u///7boW9m369p6dq1q3F3d3eYrt+YtK/jZIwxV65cMW+//bapVq2ayZEjh/Hx8THFixc3Tz/9tPn444/tnwF79uwxffr0MY899pgJCAgwXl5epkSJEiYiIsLs2bPHPl5MTIwZPHiwqVmzpsmfP7/x9PQ0QUFB5rnnnsvQFPvGOJ/We8uWLaZr166mQoUKJleuXMbHx8eUKlXK9O7dO0PXPDPm/15Dhw4dMm+++aYpUaKE8fT0NCVLljQTJkxI83fA1q1bzQsvvGB/z+bNm9dUrVrVDB482Ozdu9eh75YtW+yfpSm/z258zab32WKMMX/++afp06ePKVWqlPHy8jJ+fn6mXLly5uWXXzarV6926Ots+ZtFREQYT09Ph2ufAbfLZkwWnd0H4J5js9lUv359p+dFAVkhLi5O+fLl06uvvqp33333rq03LCxM69aty7IT1HF/27t3rypWrKhx48Zp0KBBri4HLnb+/HkFBQXpueee09y5c11dDh4gnOMEALhly5cv17Vr11LNpgfcTeXKlVOnTp00efLkDE1hjgfblClTlJSUpDFjxri6FDxgOMcJAHDL2rZte0dm+wMya8yYMSpcuLCOHj2qRx991NXlwIVy586tjz/+OEPXFAMyg0P1gAcYh+rhQcWhegCAu43gBAAAAAAWOMcJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnADgIWWM0SuvvKI8efLIZrMpKioqw8sWK1ZMU6dOzdJ61q5dK5vNpvPnz2fpuAAAZAWCEwDcBTExMercubMKFy4sT09PFS1aVH369NHZs2czNc7Ro0czHXLSsmLF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njyZHgsA7oSH+lC99ERHR2vhwoX64osvVLduXZUsWVL9+/dXnTp1NG/ePElSeHi4lixZotWrVys5OVkHDhywX9Pixi8+AB5u06dPV3x8vMLDw7V+/XrFxMRoxYoVatSokR555BGNGzfO3veJJ57Q9OnT9csvv2j79u3q1q2bw56B/Pnzy8fHRytWrNDJkycVFxfndJ3du3dXTEyMevXqpX379umbb77RiBEj1K9fP2XLlvFf/cWKFdOlS5e0evVqnTlzxiHEpefFF19U3rx51apVK23YsEFHjhzRunXr1KdPH8tDBUePHq3Vq1frt99+U0REhPLmzWvfW/f6669r9erVGjNmjA4cOKD58+dr+vTp6t+/vyTpzz//1KuvvqoJEyaoTp06ioyM1Pjx41MFl7QkJibq+++/t09DLl3fO/LBBx/om2++0SuvvKJff/1VR48e1Zw5cxQREaHnnntOrVu3TnfcmJgY9evXT/v379fChQv13nvvqU+fPpKu74nx9PTUe++9p8OHD2vZsmWWQSxFcHCwlixZoqioKO3atUvt2rXL1OyBaRk0aJA2b96sHj16KCoqSgcPHtSyZcvUq1cve59ixYpp/fr1On78uM6cOZPh5ZyZMmWKFi1apH379unAgQP64osvVLBgwQf+GmIA7jMuO7vqHqObTsj+/PPPjSSTI0cOh5u7u7tp3bq1Meb6ydADBw403t7exs3NzeTOnduMHDnSSDI///yzi7YEwL3o6NGjJiIiwhQsWNB4eHiYwMBA06tXL3PmzBmHfsePHzeNGzc2OXLkMKVKlTLLly93mBzCGGM+/PBDExgYaLJly2bq16+f5jrXrl1rqlevbjw9PU3BggXNoEGDzLVr1+yPZ2RyCGOM6datmwkICDCS7LPyOZsYoHLlyvbHjbk+CUH79u1N3rx5jZeXlylRooTp0qWLiYuLc7qelAkQvv32W/Poo48aT09PU716dRMVFeXQ78svvzTly5c3Hh4eJigoyEycONEYc/13csOGDU14eLjDJAN9+/Y1JUuWtE+0cLMbJ4f48ccfTZEiRZz2W79+vWnSpInx9/c3np6epnz58mbSpEkmMTExrafOGHN9coju3bubbt26GT8/P5M7d24zePBghxo/++wzU6xYMePl5WVCQ0PNsmXLHCYBSXlubp6g4siRI6ZBgwbGx8fHBAYGmunTp5v69eubPn362Ps4+1nd/JnnbNKRrVu3mkaNGhlfX1+TI0cOU6lSJTNu3Dj745s3bzaVKlUyXl5e5savE1bLOatn9uzZpkqVKiZHjhzGz8/PNGzY0Pzyyy/pPq8AcLfZjLnLV+27R9lsNi1dutT+V83FixfrxRdf1O+//24//COFr6+vChYsaL+flJSkEydOKF++fFq9erWaNWumkydPKn/+/HdzEwAAt6l3795KTEzUjBkzsmzMsLAwValSxX5EAgDg/sQ5Tml47LHHlJSUpFOnTqlu3brp9nVzc7OfM7Bw4UKFhoYSmgDgPlShQgWHWf0AAEjxUAenS5cu6dChQ/b7R44cUVRUlPLkyaPSpUvrxRdfVPv27TV58mQ99thjOnPmjP73v/+pYsWKatasmc6cOaMvv/xSYWFhunr1qubNm6cvvvhC69atc+FWAQBu1SuvvOLqEgAA96iH+lC9tWvXqkGDBqnaO3TooMjISF27dk1jx47Vxx9/rOPHjysgIEChoaEaNWqUKlasqDNnzqhFixbavXu3jDEKDQ3VuHHj9Pjjj7tgawAAAADcKQ91cAIAAACAjGA6cgAAAACwQHACAAAAAAsP3eQQycnJ+uuvv5QzZ07ZbDZXlwMAAADARYwxunjxogoXLmx5gfiHLjj99ddfCgwMdHUZAAAAAO4RMTExKlKkSLp9HrrglDNnTknXnxw/Pz8XVwMAAADAVS5cuKDAwEB7RkjPQxecUg7P8/PzIzgBAAAAyNApPEwOAQAAAAAWCE4AAAAAYIHgBAAAAAAWHrpznAAAAOA6xhglJiYqKSnJ1aXgIeHh4SE3N7fbHofgBAAAgLsiISFBsbGxunLliqtLwUPEZrOpSJEi8vX1va1xCE4AAAC445KTk3XkyBG5ubmpcOHC8vT0zNBMZsDtMMbo9OnT+vPPP1WqVKnb2vNEcAIAAMAdl5CQoOTkZAUGBip79uyuLgcPkXz58uno0aO6du3abQUnJocAAADAXZMtG18/cXdl1Z5NXrkAAAAAYIHgBAAAAAAWCE4AAAAAYIHgBAAAAGSRiIgI2Wy2VLdDhw65ujQHR48elc1mU1RUlKtLuW8wqx4AAACQhZo0aaJ58+Y5tOXLly/T4yQkJMjT0zOrysJtYo8TAAAAkIW8vLxUsGBBh5ubm5vWrVunGjVqyMvLS4UKFdLgwYOVmJhoXy4sLEw9e/ZUv379lDdvXjVq1Ehr166VzWbTDz/8oMcee0w+Pj564okndOrUKX3//fcqV66c/Pz81LZtW4cLC69YsUJ16tRRrly5FBAQoKeeekrR0dH2x4sXLy5Jeuyxx2Sz2RQWFnbXnp/7FcEJAAAAuMOOHz+uZs2aqXr16tq1a5dmzpypOXPmaOzYsQ795s+fL3d3d23cuFEffPCBvX3kyJGaPn26Nm3apJiYGLVu3VpTp07VZ599pu+++06rVq3Se++9Z+9/+fJl9evXT9u2bdPq1auVLVs2PfPMM0pOTpYkbd26VZL0448/KjY2VkuWLLkLz8L9jUP1AAAAgCz03//+V76+vvb7TZs2VenSpRUYGKjp06fLZrOpbNmy+uuvvzRo0CC98cYb9utbBQcH6+2337Yve+LECUnS2LFjVbt2bUlS586dNWTIEEVHR6tEiRKSpOeee05r1qzRoEGDJEnPPvusQ01z5sxR/vz5tWfPHlWoUMF+6GBAQIAKFix4h56JBwt7nAAAAIAs1KBBA0VFRdlv06ZN0969exUaGupwMdbatWvr0qVL+vPPP+1tISEhTsesVKmS/f8FChRQ9uzZ7aEppe3UqVP2+9HR0WrXrp1KlCghPz8/+6F5x44dy7LtfNiwxwkAAADIQjly5FBwcLBDmzHGITSltElyaM+RI4fTMT08POz/t9lsDvdT2lIOw5OkFi1aKDAwUB9++KEKFy6s5ORkVahQQQkJCbe2UWCPEwAAAHCnlS9fXps2bbKHJUnatGmTcubMqUceeSRL13X27Fnt3btXw4YNU8OGDVWuXDn9/fffDn1SZutLSkrK0nU/yNjjBAAA4MxIf1dX4NzIOFdXgFvQvXt3TZ06Vb169VLPnj21f/9+jRgxQv369bOf35RVcufOrYCAAM2ePVuFChXSsWPHNHjwYIc++fPnl4+Pj1asWKEiRYrI29tb/v736Gv+HsEeJwAAAOAOe+SRR7R8+XJt3bpVlStXVrdu3dS5c2cNGzYsy9eVLVs2LVq0SDt27FCFChXUt29fTZw40aGPu7u7pk2bpg8++ECFCxdWq1atsryOB43N3Li/8CFw4cIF+fv7Ky4uTn5+fq4uBwAA3KvY45Slrl69qiNHjqh48eLy9vZ2dTl4iKT32stMNmCPEwAAAABYIDgBAAAAgAWCEwAAAABYIDgBAAAAgAWCEwAAAABYIDgBAAAAgAWCEwAAAABYIDgBAAAAgAWXBqf169erRYsWKly4sGw2m77++mvLZdatW6dq1arJ29tbJUqU0KxZs+58oQAAAEAmjRw5UlWqVMnUMmFhYXrttddcXgdSc3flyi9fvqzKlSurY8eOevbZZy37HzlyRM2aNVOXLl306aefauPGjerevbvy5cuXoeUBAABw7yk2+Lu7ur6jbzW/K+vp37+/evXqlalllixZIg8PjztUEW6HS4NT06ZN1bRp0wz3nzVrloKCgjR16lRJUrly5bR9+3ZNmjSJ4AQAAIB7gjFGSUlJ8vX1la+vb6aWzZMnzx2qCrfrvjrHafPmzWrcuLFDW3h4uLZv365r1645XSY+Pl4XLlxwuAEAAACZER8fr969eyt//vzy9vZWnTp1tG3bNknS2rVrZbPZ9MMPPygkJEReXl7asGFDqkPkEhMT1bt3b+XKlUsBAQEaNGiQOnTooKefftre5+ZD9YoVK6Y333xTnTp1Us6cORUUFKTZs2c71DZo0CCVLl1a2bNnV4kSJTR8+PA0vxvj1t1XwenEiRMqUKCAQ1uBAgWUmJioM2fOOF1m/Pjx8vf3t98CAwPvRqkAAAB4gAwcOFBfffWV5s+fr19++UXBwcEKDw/XuXPnHPqMHz9ee/fuVaVKlVKNMWHCBC1YsEDz5s3Txo0bdeHChQyd4z958mSFhIRo586d6t69u1599VXt27fP/njOnDkVGRmpPXv26N1339WHH36oKVOmZMl24//cV8FJkmw2m8N9Y4zT9hRDhgxRXFyc/RYTE3PHawQAAMCD4/Lly5o5c6YmTpyopk2bqnz58vrwww/l4+OjOXPm2PuNHj1ajRo1UsmSJRUQEJBqnPfee09DhgzRM888o7Jly2r69OnKlSuX5fqbNWum7t27Kzg4WIMGDVLevHm1du1a++PDhg1TrVq1VKxYMbVo0UKvv/66Pv/886zYdNzApec4ZVbBggV14sQJh7ZTp07J3d3d6YtTkry8vOTl5XU3ygMAAMADKDo6WteuXVPt2rXtbR4eHqpRo4b27t2r6tWrS5JCQkLSHCMuLk4nT55UjRo17G1ubm6qVq2akpOT013/jXuvbDabChYsqFOnTtnbvvzyS02dOlWHDh3SpUuXlJiYKD8/v0xvJ9J3X+1xCg0N1apVqxzaVq5cqZCQEGYfAQAAwB2R1hFOxhiHthw5cliOldbRU+m5+XuuzWazh60tW7bohRdeUNOmTfXf//5XO3fu1NChQ5WQkGA5LjLHpcHp0qVLioqKUlRUlKTr041HRUXp2LFjkq4fZte+fXt7/27duumPP/5Qv379tHfvXs2dO1dz5sxR//79XVE+AAAAHgLBwcHy9PTUTz/9ZG+7du2atm/frnLlymVoDH9/fxUoUEBbt261tyUlJWnnzp23VdvGjRtVtGhRDR06VCEhISpVqpT++OOP2xoTzrn0UL3t27erQYMG9vv9+vWTJHXo0EGRkZGKjY21hyhJKl68uJYvX66+ffvq/fffV+HChTVt2jSmIgcAAMAdkyNHDr366qsaMGCA8uTJo6CgIL399tu6cuWKOnfurF27dmVonF69emn8+PEKDg5W2bJl9d577+nvv/9O81z9jAgODtaxY8e0aNEiVa9eXd99952WLl16y+MhbS4NTmFhYenunoyMjEzVVr9+ff3yyy93sCoAAADA0VtvvaXk5GS99NJLunjxokJCQvTDDz8od+7cGR5j0KBBOnHihNq3by83Nze98sorCg8Pl5ub2y3X1apVK/Xt21c9e/ZUfHy8mjdvruHDh2vkyJG3PCacs5mMHFj5ALlw4YL8/f0VFxfHSXMAACBtI/1dXYFzI+NcXcEtuXr1qo4cOaLixYvL29vb1eXcE5KTk1WuXDm1bt1aY8aMcXU5D6z0XnuZyQb31ax6AAAAwP3qjz/+0MqVK1W/fn3Fx8dr+vTpOnLkiNq1a+fq0pAB99WsegAAAMD9Klu2bIqMjFT16tVVu3Zt7d69Wz/++GOGJ5iAa7HHCQAAALgLAgMDtXHjRleXgVvEHicAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAADgITZy5EhVqVLF1WU4FRkZqVy5crm6DElcxwkAAACuNtL/Lq8v7u6u7yEzfvx4/ec//1GfPn00depUV5eTZdjjBAAAACBLbNu2TbNnz1alSpVcXUqWIzgBAAAA6QgLC1PPnj3Vs2dP5cqVSwEBARo2bJiMMZKkTz/9VCEhIcqZM6cKFiyodu3a6dSpUw5jLFu2TKVKlZKPj48aNGig+fPny2az6fz58/Y+mzZtUr169eTj46PAwED17t1bly9fTre2+Ph49e7dW/nz55e3t7fq1Kmjbdu22R9fu3atbDabVq9erZCQEGXPnl21atXS/v37nY63fv16eXh46MSJEw7tr7/+uurVq5duLZcuXdKLL76oDz/8ULlz5071eLFixTR27Fi1b99evr6+Klq0qL755hudPn1arVq1kq+vrypWrKjt27enWvbrr79W6dKl5e3trUaNGikmJibdWu4EghMAAABgYf78+XJ3d9fPP/+sadOmacqUKfroo48kSQkJCRozZox27dqlr7/+WkeOHFFERIR92aNHj+q5557T008/raioKHXt2lVDhw51GH/37t0KDw/Xv/71L/36669avHixfvrpJ/Xs2TPdugYOHKivvvpK8+fP1y+//KLg4GCFh4fr3LlzDv2GDh2qyZMna/v27XJ3d1enTp2cjlevXj2VKFFCn3zyib0tMTFRn376qTp27JhuLT169FDz5s315JNPptlnypQpql27tnbu3KnmzZvrpZdeUvv27fXvf//bXn/79u3toVSSrly5onHjxmn+/PnauHGjLly4oBdeeCHdWu4EznECAAAALAQGBmrKlCmy2WwqU6aMdu/erSlTpqhLly4OIaREiRKaNm2aatSooUuXLsnX11ezZs1SmTJlNHHiRElSmTJl9Ntvv2ncuHH25SZOnKh27drptddekySVKlVK06ZNU/369TVz5kx5e3unquny5cuaOXOmIiMj1bRpU0nShx9+qFWrVmnOnDkaMGCAve+4ceNUv359SdLgwYPVvHlzXb161em4nTt31rx58+zLf/fdd7py5Ypat26d5vOzaNEi/fLLLw57u5xp1qyZunbtKkl64403NHPmTFWvXl3PP/+8JGnQoEEKDQ3VyZMnVbBgQUnStWvXNH36dD3++OOSrofYcuXKaevWrapRo0a668tKBCcAAID7SMX5FV1dQpp2d9jt6hLumJo1a8pms9nvh4aGavLkyUpKStKvv/6qkSNHKioqSufOnVNycrIk6dixYypfvrz279+v6tWrO4x38xf+HTt26NChQ1qwYIG9zRij5ORkHTlyREuXLtWbb75pf2zPnj06f/68rl27ptq1a9vbPTw8VKNGDe3du9dh/BvPOSpUqJAk6dSpUwoKCkq1rRERERo2bJi2bNmimjVrau7cuWrdurVy5MihDRs22EOaJH3wwQeqV6+e+vTpo5UrVzoNYmnVUaBAAUlSxYoVU7WdOnXKHpzc3d0VEhJi71O2bFnlypVLe/fuJTgBAAAA94OrV6+qcePGaty4sT799FPly5dPx44dU3h4uBISEiRdD0A3hq6UthslJyera9eu6t27d6p1BAUFqVu3bg57fAoXLqy///5bkpyOfXObh4eH/f8pj6UEvJvlz59fLVq00Lx581SiRAktX75ca9eulSSFhIQoKirK3rdAgQJavXq1Tp06pWrVqtnbk5KStH79ek2fPl3x8fFyc3NLs46M1Hbz9qTVdicRnAAAAAALW7ZsSXW/VKlS2rdvn86cOaO33npLgYGBkpRqcoOyZctq+fLlDm0396latap+//13BQcHO11/njx5lCdPHoe24OBgeXp66qefflK7du0kXT+sbfv27fZD/m7Vyy+/rBdeeEFFihRRyZIl7Xu1fHx8UtXYsGFD7d7tuLexY8eOKlu2rAYNGmQPTbcqMTFR27dvt+9d2r9/v86fP6+yZcve1riZxeQQAAAAgIWYmBj169dP+/fv18KFC/Xee++pT58+CgoKkqenp9577z0dPnxYy5Yt05gxYxyW7dq1q/bt26dBgwbpwIED+vzzzxUZGSnp//aaDBo0SJs3b1aPHj0UFRWlgwcPatmyZerVq1eaNeXIkUOvvvqqBgwYoBUrVmjPnj3q0qWLrly5os6dO9/W9oaHh8vf319jx461nBQiZ86cqlChgsMtR44cCggIUIUKFW6rDun6HqlevXrp559/1i+//KKOHTuqZs2ad/UwPYngBAAAAFhq3769/vnnH9WoUUM9evRQr1699MorryhfvnyKjIzUF198ofLly+utt97SpEmTHJYtXry4vvzySy1ZskSVKlXSzJkz7bPqeXl5Sbp+7s+6det08OBB1a1bV4899piGDx9uPx8pLW+99ZaeffZZvfTSS6pataoOHTqkH374wel04JmRLVs2RUREKCkpSe3bt7+tsW5X9uzZNWjQILVr106hoaHy8fHRokWL7nodNnPzAZYPuAsXLsjf319xcXHy8/NzdTkAAOBeNdLf1RU4VbF46pP57xXpTQ5x9epVHTlyRMWLF7ecQOBeExYWpipVqmjq1KlZNua4ceM0a9Ysl1yPKKO6dOmikydPatmyZa4u5bak99rLTDbgHCcAAADgDpsxY4aqV6+u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ly+fTpw4IWOMPRDc6nWfatSooV69eik8PFxubm4aMGBAhrYjODhYHh4e2rJli4KCgiRJf//9tw4cOKD69etLur4HKk+ePA7LDR48ONV2V6xYUVOmTFGLFi1uaRtutGvXLv3zzz/2gLplyxb5+vpm6BDC28EeJwAAACATevTooXPnzqlt27baunWrDh8+rJUrV6pTp05KSkqSt7e3Bg0apIEDB+rjjz9WdHS0tmzZojlz5mR4HWFhYTp9+rTefvttRUdH6/3339f3339/yzWHhobq+++/1+jRozVlypQMbYevr686d+6sAQMGaPXq1frtt98UERFheR5RwYIFVaFCBYebJAUFBal48eK3vA0pEhIS1LlzZ+3Zs0fff/+9RowYoZ49e97R85skghMAAACQKYULF9bGjRuVlJSk8PBwVahQQX369JG/v7/9y/vw4cP1+uuv64033lC5cuXUpk2bVOfqpKdcuXKaMWOG3n//fVWuXFlbt25V//79b6vu2rVr67vvvtPw4cM1bdq0DG3HxIkTVa9ePbVs2VJPPvmk6tSpo2rVqt1WHberYcOGKlWqlOrVq6fWrVurRYsWGjly5B1fr81k5ODFB8iFCxfk7++vuLg4+fn5ubocAABwrxrp7+oKnKpYPMjVJaRpd4fdaT529epVHTlyRMWLF5e3t/ddrAoPu/Ree5nJBuxxAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAADgLjp69KhsNpuioqLu+LqKFSumqVOnZumYYWFheu2117J0zIyKiIjQ008/7ZJ1u7tkrTeYMWOGJk6cqNjYWD366KOaOnWq6tatm2b/BQsW6O2339bBgwfl7++vJk2aaNKkSQoICLiLVQMAACCrvN/tf3d1fT1mPXFX1/cwOnHihAYMGKBVq1bp4sWLKlOmjP7zn//oueeec3Vpt8yle5wWL16s1157TUOHDtXOnTtVt25dNW3aVMeOHXPa/6efflL79u3VuXNn/f777/riiy+0bds2vfzyy3e5cgAAADysEhISXF3CPe+ll17S/v37tWzZMu3evVv/+te/1KZNG+3cudPVpd0ylwand955R507d9bLL7+scuXKaerUqQoMDNTMmTOd9t+yZYuKFSum3r17q3jx4qpTp466du2q7du33+XKAQAA8LAICwtTz5491a9fP+XNm1eNGjXSnj171KxZM/n6+qpAgQJ66aWXdObMGfsyycnJmjBhgoKDg+Xl5aWgoCCNGzfOYdzDhw+rQYMGyp49uypXrqzNmzfbHxs5cqSqVKni0H/q1KkqVqyY/X7KYWuTJk1SoUKFFBAQoB49eujatWtpbsu8efPk7++vVatWSZLldly+fFnt27eXr6+vChUqpMmTJ2foOdu8ebN69eqlGjVqqESJEho2bJhy5cqlX375RdL/Ha74+eefq27duvLx8VH16tV14MABbdu2TSEhIfL19VWTJk10+vTpVOOPGjVK+fPnl5+fn7p27XpXwqzLglNCQoJ27Nihxo0bO7Q3btxYmzZtcrpMrVq19Oeff2r58uUyxujkyZP68ssv1bx58zTXEx8frwsXLjjcAAAAgMyYP3++3N3dtXHjRr311luqX7++qlSpou3bt2vFihU6efKkWrdube8/ZMgQTZgwQcOHD9eePXv02WefqUCBAg5jDh06VP3791dUVJRKly6ttm3bKjExMVN1rVmzRtHR0VqzZo3mz5+vyMhIRUZGOu07adIk9e/fXz/88IMaNWqk2NhYy+0YMGCA1qxZo6VLl2rlypVau3atduzYYVlXnTp1tHjxYp07d07JyclatGiR4uPjFRYW5tBvxIgRGjZsmH755Re5u7urbdu2GjhwoN59911t2LBB0dHReuONNxyWWb16tfbu3as1a9Zo4cKFWrp0qUaNGpWp5+1WuOwcpzNnzigpKSnVC6hAgQI6ceKE02Vq1aqlBQsWqE2bNrp69aoSExPVsmVLvffee2muZ/z48XfliQQAAMCDKzg4WG+//bYk6Y033lDVqlX15ptv2h+fO3euAgMDdeDAARUqVEjvvvuupk+frg4dOkiSSpYsqTp16jiM2b9/f/sOgFGjRunRRx/VoUOHVLZs2QzXlTt3bk2fPl1ubm4qW7asmjdvrtWrV6tLly4O/YYMGaL58+dr7dq1qlixoiRp5syZ6W5H4cKFNWfOHH388cdq1KiRpOsBskiRIpZ1LV68WG3atFFAQIDc3d2VPXt2LV26VCVLlkz1HISHh0uS+vTpo7Zt22r16tWqXbu2JKlz586pgqCnp6fmzp2r7Nmz69FHH9Xo0aM1YMAAjRkzRtmy3bn9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", + "image/png": "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1u7dux86dc6MsmXLJmvLmzevJKlMmTI277v/+1jMOH/+vBo3bqzExEQtXbpU+fLls9y3detWSdI///xj87q0gwcPWv5bsmTJND8/ZnTp0kVTp061ed+cOXPUpk2bNI13PyOF7yvJlCmTqWW+k6YgJQkMDNTAgQOVO3dude7cWcOHD7c5bS0tli5dqtq1a8vLyytd2ycdY1qmytp6/pLa7n//bt26VVmyZNGMGTNsjuPu7m55jdyvUqVKpmtJsmvXLrm7u9vcNun9a+vfloftK6X32PHjx5O9x5ycnJQrVy6dOXPGqj0uLk6TJ0/WnDlzdPDgQd24ccPqtXX27Nlk+8iWLZvV1L8k+fPn12+//Wa5ffDgQcXExOiFF1546LTXtL5fU3P58mU5OTlZ/buXmt9//113797V7du3be77yJEjln03atRINWvWVJ48eTRq1Cjt3r1br7zyimrUqKFSpUpZvVaDg4NVqlQpzZ49W6dOnVKzZs30n//8R+XKlZOTk5Op2mxp1KiR/vvf/6p79+765Zdf9NJLL6lGjRoqUqRImsdKy/tFklauXKnVq1cn28bFxcXm+yU9kvZ18OBBm8/HP//8o8TERB0+fFgVKlSwtPv7+z90gaHs2bNLki5dupQhtQKEJzxz8uTJo4MHD+rMmTMqWrToI42VdJFvStdh2PrgkRbXrl2zjGNL7ty5k4WnBxe58PPzs4Snh9WbJ08eHTp0SDExMVYfIlLb//11PipbK6QlLYGd0n0JCQmmx799+7aaNWumU6dOaf78+SpXrpzV/VeuXJEk/fzzzzYvyk9y8+ZNSWl/fuzpzp07unLlipycnCwfBjLKG2+8oW7duunXX399pHF2796tkydP6v3337dqT3rPnjp16qHv2dOnT1u2McvW82frtX3lyhUlJCSkupBM0mvD1lhpERMTk+K1LUnHZut997B9pec99uAiEKGhoVq2bJmKFCliuW7SxcVF0dHR+vzzz3Xnzp1k46QUhp2dna0WGoiOjpakZIuC2JLW92tq3N3ddffuXcXHx5ta+TBp37/++muqr/ukfXt5eem3337TJ598omXLlmn58uWS7oXH/v37q1u3bpLuPR5r167V4MGDtWjRIstiDjlz5lTPnj01YMCAdIUof39//fbbbxoyZIhWrFhh+SNH0aJFNWzYML322mumx7L1fsmV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W716dd24cUOnT5/OkH2EhIRY/t/BwUF58uSxTDXbuXOnjh49qqxZs8rDw0MeHh7Knj27bt++rWPHjqU6btWqVS3/nz17dhUtWlR//fWX5biqV69u1b969eo6cuSIZeGGwoULa8yYMQoPD1fjxo3Vrl27NB1XTEyMNmzYoCZNmli1Gylc12QYxkOfvypVqlj1qVq1qlXNu3btUtOmTeXn56esWbNapmP+/fffVuNUqFDB6vbNmzf1wQcfqHjx4sqWLZs8PDx08ODBZNvd/1zlzp1bklSqVKlkbfc/fxEREZbnzsPDQw0aNFBiYqJOnDiR4nGa3e7B4wgLC9Pu3btVtGhR9erVS5GRkSnuAwDs5bm/Mrhs2bIqW7ZsivcnJCRozpw52rRpk27duqUCBQqoXbt2KlGihCRp48aNqlixol588UVJ9375NG3aVEuWLFGDBg0y/MMQgGdPYGCgHBwcdODAATVr1izZ/QcPHpS3t7dy5swp6V4IefBDenx8fJr3a+sDfUYHNRcXF6vbDg4OluuKEhMTVb58ec2aNSvZdj4+PmneV1LNqR3X/TZu3CgnJydFRUUpISEhTYthrFixQsHBwfLz85MkFSlSRNK94FatWrVk/Q8ePKjixYubHv9BN2/e1IsvvqgXX3xR33//vXx8fPT333+rQYMGyRZTyJIli9Xt999/X6tWrdKYMWMUGBgod3d3hYaGJtvu/ucq6fGz1Xb/89elSxf16tUrWb0FCxZM8VjMbvfgcZQrV04nTpzQihUrtHr1arVs2VIvvPCCFixYkOK+AOBJe+7D08N88cUXunjxot599115e3tr+/btGjlypMaMGaO8efMqPj5emTJlstrG1dVVly9f1sWLF5UrVy47VQ7gaZEjRw7Vr19fX3zxhfr06SN3d3fLff/8849mzZql119/3fLh1cfHR+fOnbP0OXLkiG7dumW57erqKkkPXR67ePHiWrhwoVXY2LJli7JmzSpfX1/T9bu6uqZrKe5y5cpp7ty5ypUrlzw9PdO07datWy0ftK9evarDhw+rWLFiku4d1+bNm636b9myRUWKFJGTk5Mkae7cuVq0aJHWr1+vVq1aadiwYRoyZIjp/S9ZssTqrNOLL76o7Nmza+zYscnC09KlS3XkyBENGzbsocf04O2goCA5OTnp4MGDunTpkj799FMVKFBAkpIt3pCSTZs2KSwsTM2bN5ck3bhxw9SiHA9Trlw57d+/X4GBgSn2sfXaMLNdSjw9PdWqVSu1atVKoaGheumll3TlyhVlz549zWMBwOPw3E/bS80///yjX3/9VX369FFwcLDy5MmjJk2aqFixYlq3bp0kqUyZMtq+fbv+/PNPJSYm6uzZs1q+fLkk8SWPACwmT56sO3fuqEGDBtq4caNOnTqllStXqn79+vL19dWIESMsfevWravJkyfrjz/+0I4dO9S1a1erMwS5cuWSu7u7Vq5cqfPnz+vatWs299mtWzedOnVKPXv21MGDB7VkyRJ98skn6tu3rxwdzf/zX6hQId24cUNr1qzRpUuXrIJcatq1a6ecOXOqadOm2rRpk06cOKENGzaod+/eD502OHToUK1Zs0b79u1TWFiYcubMaTlr995772nNmjUaNmyYDh8+rG+++UaTJ09Wv379JEmnT5/WO++8o/DwcNWoUUMREREaNWpUsvCSkoSEBK1YscKyRLl07yzJV199pSVLlqhz587au3evoqKiNGPGDIWFhSk0NFQtW7ZMddxTp06pb9++OnTokH744QdNmjRJvXv3lnTvjIyrq6smTZqk48ePa+nSpQ8NY0kCAwO1aNEi7d69W3v27FHbtm3TtKpgSj788EP99ttv6t69u3bv3q0jR45o6dKl6tmzp6VPoUKFtHHjRp05c0aXLl0yvZ0t48eP15w5c3Tw4EEdPnxY8+fPV548ef713zEG4NlCeErFiRMnZBiGevfurQ4dOlh+Dhw4oPPnz0uS6tWrpwYNGujTTz9V27ZtNWDAAMtfJdPy4QTAv1tQUJB27NihgIAAtWrVSgEBAercubPq1Kmj3377zeov62PHjlWBAgVUs2ZNtW3bVv369VPmzJkt9zs7O2vixIn66quvlC9fPqsP+ffz9fXV8uXLtX37dpUuXVpdu3bVm2++qYEDB6ap9mrVqqlr165q1aqVfHx89Nlnn5naLnPmzNq4caMKFiyoFi1aKDg4WJ06dVJsbOxDz0R9+umn6t27t8qXL69z585p6dKlljNu5cqV07x58zRnzhyVLFlSH3/8sYYOHaqwsDAZhqGwsDBVqlRJPXr0kCTVr19fPXr0UPv27XXjxo2H1r1hwwZ5eHiofPnyVu2hoaFat26dTp06pZo1a6po0aIaN26cBgwYoDlz5jx0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o6KidOnSJUnS7NmzNXnyZEv/F198UZcuXdI333yj06dPa+3atVq7dq0aN25sj/IBAADwHPD395erq6vVd5LGx8drz549CgoKMjWGp6enfHx8tGvXLkvb3bt3tW/fvkeq7ffff1f+/PnVu3dvlS5dWoULF9aZM2ceaUzYZvdTNceOHdOQIUMst7/99ltJUq1atdS9e3ddvXrVEqQkKVeuXOrfv78lVXt7e6tjx44sUw4AAIDHJnPmzOrQoYOGDx+ubNmyydfXV1988YVu376t1q1b68CBA6bG6dixoyZPnix/f38FBARo5syZunbt2iNdk+/v768zZ85oyZIlKl26tNasWaMVK1akezykzO7hqUSJEpo3b16K93fv3j1ZW/HixRUeHv44ywIAAACsfPTRRzIMQ7169dLNmzcVEhKiWbNmKVu2bKbH6N69uy5evKjevXvLyclJ7dq1U61ateTk5JTuuho0aKC3335bAwYMUFxcnOrVq6d3331X48aNS/eYsM3BMDPJ8l/q4sWLzAUFkGZNZx20dwnPnCXtitm7BABPiZiYGHl6etq7jKdGYmKiatWqpcaNG+uDDz6wdzn/aim99lxcXOTj42NqDLufeQIAAACeF6dPn9aGDRtUpUoVxcXFaebMmTp16pSaN29u79JgAuEJAAAAeEIcHBw0b948DRs2TIZhqGjRopozZ47pRSdgX4QnAAAA4Anx9fXVkiVL7F0G0snuS5UDAAAAwLOA8AQAAAAAJhCeAAAAAMAEwhMAAAAAmEB4AgAAAAATCE8AAAAAYALhCQAAAHjOjR07VvXr17d3GTbNnTtXwcHB9i5DEt/zBAAAgKdA01kHn+j+lrQr9kT397yZNGmSPv30U7355psaOnSovcvJMJx5AgAAAJBhdu/erVmzZj01Z4syEuEJAAAAeIjQ0FANGDBAAwYMUHBwsEqUKKHw8HAZhiFJWrhwoRo2bKgiRYqoTJky6t69uy5dumQ1RmRkpKpXr66AgACFhoZq3rx58vX11bVr1yx9fv/9d7Vo0UIBAQGqUKGCBg0apFu3bqVa2507dzRo0CCFhISocOHCatasmXbv3m25f8uWLfL19dWmTZvUsGFDBQQEqEmTJjp69KjN8bZu3So/Pz9duHDBqn3IkCFq0aJFqrXcvHlTPXr00GeffaZs2bIlu79y5cqaMGGCevXq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", "text/plain": [ "
" ] @@ -1031,7 +995,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/notebooks/benchmarks.csv b/notebooks/benchmarks.csv new file mode 100644 index 0000000..e4c48ed --- /dev/null +++ b/notebooks/benchmarks.csv @@ -0,0 +1,44 @@ +,tool,dataset,cloud-aware,format,file,time,shape,bytes_requested,mean +0,h5py,7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,25.779539585113525,"(46484912,)",289026695.0,1035.1631 +1,h5py,7GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,68.79631090164185,"(46484912,)",1036723526.0,1035.1631 +2,h5py,7GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,62.35629677772522,"(46484912,)",947145210.0,1035.1631 +3,h5py,7GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,27.586012840270996,"(46484912,)",286737116.0,1035.1631 +4,h5py,7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,27.63655662536621,"(46484912,)",269539164.0,1035.1631 +5,kerchunk,1GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json,3.2203612327575684,"(9720204,)",," Size: 4B +array(386.06738, dtype=float32)" +6,kerchunk,1GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json,4.984490156173706,"(9720204,)",," Size: 4B +array(386.06738, dtype=float32)" +7,kerchunk,7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json,14.271384954452515,"(46484912,)",," Size: 4B +array(1035.1631, dtype=float32)" +8,kerchunk,7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json,8.327512979507446,"(46484912,)",," Size: 4B +array(1035.1631, dtype=float32)" +9,xarray,1GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5,216.67426800727844,"(9720204,)",3125613354.0," Size: 4B +array(386.06738, dtype=float32)" +10,xarray,1GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5,224.73643493652344,"(9720204,)",3671050532.0," Size: 4B +array(386.06738, dtype=float32)" +11,xarray,1GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5,227.53268146514893,"(9720204,)",3671050532.0," Size: 4B +array(386.06738, dtype=float32)" +12,xarray,1GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5,15.311556816101074,"(9720204,)",162702540.0," Size: 4B +array(386.06738, dtype=float32)" +13,xarray,1GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5,13.107250928878784,"(9720204,)",136218854.0," Size: 4B +array(386.06738, dtype=float32)" +14,xarray,7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,281.35928440093994,"(46484912,)",3350528419.0," Size: 4B +array(1035.1631, dtype=float32)" +15,xarray,7GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,435.6504566669464,"(46484912,)",5526810548.0," Size: 4B +array(1035.1631, dtype=float32)" +16,xarray,7GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,359.13231015205383,"(46484912,)",5337618697.0," Size: 4B +array(1035.1631, dtype=float32)" +17,xarray,7GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,156.73291158676147,"(46484912,)",2064608594.0," Size: 4B +array(1035.1631, dtype=float32)" +18,xarray,7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,41.19576835632324,"(46484912,)",432504529.0," Size: 4B +array(1035.1631, dtype=float32)" +19,h5coro,1GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5,10.852986097335815,"(9720204,)",,386.06738 +20,h5coro,1GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5,8.163445472717285,"(9720204,)",,386.06738 +21,h5coro,1GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5,6.128530740737915,"(9720204,)",,386.06738 +22,h5coro,1GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5,19.339251279830933,"(9720204,)",,386.06738 +23,h5coro,1GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5,10.59383749961853,"(9720204,)",,386.06738 +24,h5coro,7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,24.180256843566895,"(46484912,)",,1035.1631 +25,h5coro,7GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,51.16006398200989,"(46484912,)",,1035.1631 +26,h5coro,7GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,23.30572533607483,"(46484912,)",,1035.1631 +27,h5coro,7GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,34.204936504364014,"(46484912,)",,1035.1631 +28,h5coro,7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,33.829309940338135,"(46484912,)",,1035.1631 diff --git a/notebooks/byte_ranges.pkl.gz b/notebooks/byte_ranges.pkl.gz new file mode 100644 index 0000000..9991478 Binary files /dev/null and b/notebooks/byte_ranges.pkl.gz differ diff --git a/notebooks/h5logger.py b/notebooks/h5logger.py new file mode 100644 index 0000000..a3e5757 --- /dev/null +++ b/notebooks/h5logger.py @@ -0,0 +1,140 @@ +import re +import numpy as np +import pandas as pd +import logging +import s3fs +import fsspec +import time +import h5py +from datetime import datetime +from uuid import uuid4 + + +def parse_fsspec_log(log_path): + """ + This method only parses fsspec logs that have a FileSize: attached to them. + """ + head_line = re.compile('\s*(read: 0 - \d+)') + fsize_line = re.compile('FileSize: (\d+)') + # range_line = re.compile('\s* read: (?P[0-9]+) - (?P[0-9]+)') + range_line = re.compile('\s* read: (?P[0-9]+) - (?P[0-9]+)(?:\s*,\s*.*?:\s*(?P[0-9]+)\s*hits,\s*(?P[0-9]+)\s*misses)?') + + + + ranges = list() + with open(log_path) as logtxt: + for line in logtxt: + if head_line.match(line): + break + else: + raise RuntimeError('HEAD line not found in the log file') + + for line in logtxt: + match = fsize_line.match(line) + if match: + fsize = int(match.group(1)) + break + else: + raise RuntimeError('FILESIZE line not found in the log file') + + logtxt.seek(0) + for line in logtxt: + match = range_line.match(line) + if match: + start=int(match.group(1)) + end=int(match.group(2)) + hits=match.group(3) + missed=match.group(4) + rsize=end-start+1 + + ranges.append({"start": start, "end": end, "size": rsize, "hits": hits, "missed": missed}) + + df = pd.DataFrame(ranges, columns=['start', 'end', 'size', 'hits', 'missed']) + return df + +def read_file(info): + h5py_fsspec_benchmarks = {} + ranges = None + file_size = None + block_size = None + iteration, dataset, variables, flavor, url, optimized_read, driver, default_io_params, optimized_io_params = info + if url.endswith(".json"): + return {} + io_params = default_io_params + if optimized_read: + if "rechunked" in url or "page" in url: + optimized = "yes" + print(f"Reading: {url} with optimized I/O parameters") + io_params = optimized_io_params + block_size = io_params["fsspec_params"]["block_size"] + else: + # we cannot read the original file with optimized parameters + optimized = "no" + print(f"Reading: {url} with default parameters") + else: + optimized = "no" + print(f"Reading: {url} with default parameters") + cache_type = io_params["fsspec_params"]["cache_type"] + + # this is mostly IO so no perf_counter is needed + start = time.time() + if driver == "fsspec": + fs = s3fs.S3FileSystem(anon=True) + logger = logging.getLogger('fsspec') + logger.setLevel(logging.DEBUG) + file_info = fs.info(url) + file_size = file_info['size'] + file_name = url.split("/")[-1] + current_time = datetime.now() + formatted_time = current_time.strftime(f"%Y-%m-%d_%H-%M-%S-{uuid4()}") + log_filename = f"logs/fsspec-{file_name}-{driver}-{optimized}-{formatted_time}.log" + # Create a new FileHandler for each iteration + file_handler = logging.FileHandler(log_filename) + file_handler.setLevel(logging.DEBUG) + # Add the handler to the root logger + logging.getLogger().addHandler(file_handler) + with fs.open(url, mode="rb", **io_params["fsspec_params"]) as fo: + with h5py.File(fo, **io_params["h5py_params"]) as f: + for variable in variables: + data = f[variable][:] + data_mean = data.mean() + req_bytes = fo.cache.total_requested_bytes + logger.debug(f"FileSize: {file_size}") + logging.getLogger().removeHandler(file_handler) + file_handler.close() + ranges = parse_fsspec_log(log_filename) + else: + cloud_params = { + "mode": "r", + "driver": "ros3", + "aws_region": "us-west-2".encode("utf-8") + } + with h5py.File(url, **io_params["h5py_params"], **cloud_params) as f: + for variable in variables: + data = f[variable][:] + data_mean = data.mean() + req_bytes = None # not available + elapsed = time.time() - start + return { + "benchmark": { + "iteration": iteration, + "library": "h5py", + "driver": driver, + "dataset": dataset, + "optimized-read": optimized, + "format": flavor, + "file": url, + "time": elapsed, + "shape": data.shape, + "bytes_requested": req_bytes, + "mean": data_mean}, + "ranges": { + "file": url, + "optimized-read": optimized, + "cache_type": cache_type, + "block_size": block_size, + "time": time, + "bytes_requested": req_bytes, + "file_size": file_size, + "ranges": ranges} + } diff --git a/notebooks/h5py-atl03-benchmarks.csv b/notebooks/h5py-atl03-benchmarks.csv new file mode 100644 index 0000000..5b8b471 --- /dev/null +++ b/notebooks/h5py-atl03-benchmarks.csv @@ -0,0 +1,21 @@ +,iteration,library,driver,dataset,optimized-read,format,file,time,shape,bytes_requested,mean +0,0,h5py,ros3,ATL03-7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,2007.8612365722656,"(46484912,)",,-66.14486441580091 +1,0,h5py,ros3,ATL03-7GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,2142.443084716797,"(46484912,)",,-66.14486441580091 +2,0,h5py,ros3,ATL03-7GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,2124.307473897934,"(46484912,)",,-66.14486441580091 +3,0,h5py,ros3,ATL03-7GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,288.2669167518616,"(46484912,)",,-66.14486441580091 +4,0,h5py,ros3,ATL03-7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,274.670058965683,"(46484912,)",,-66.14486441580091 +5,0,h5py,fsspec,ATL03-7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,2062.315348148346,"(46484912,)",0.0,-66.14486441580091 +6,0,h5py,fsspec,ATL03-7GB,no,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,2226.6228652000427,"(46484912,)",0.0,-66.14486441580091 +7,0,h5py,fsspec,ATL03-7GB,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,2231.902267932892,"(46484912,)",0.0,-66.14486441580091 +8,0,h5py,fsspec,ATL03-7GB,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,325.2194719314575,"(46484912,)",0.0,-66.14486441580091 +9,0,h5py,fsspec,ATL03-7GB,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,362.87884545326233,"(46484912,)",0.0,-66.14486441580091 +10,0,h5py,ros3,ATL03-7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,1997.6913211345673,"(46484912,)",,-66.14486441580091 +11,0,h5py,ros3,ATL03-7GB,yes,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,87.55571722984314,"(46484912,)",,-66.14486441580091 +12,0,h5py,ros3,ATL03-7GB,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,95.51402950286865,"(46484912,)",,-66.14486441580091 +13,0,h5py,ros3,ATL03-7GB,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,81.75408124923706,"(46484912,)",,-66.14486441580091 +14,0,h5py,ros3,ATL03-7GB,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,75.82156276702881,"(46484912,)",,-66.14486441580091 +15,0,h5py,fsspec,ATL03-7GB,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,2091.811399459839,"(46484912,)",0.0,-66.14486441580091 +16,0,h5py,fsspec,ATL03-7GB,yes,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,159.82449340820312,"(46484912,)",771751936.0,-66.14486441580091 +17,0,h5py,fsspec,ATL03-7GB,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,113.62834787368774,"(46484912,)",754974720.0,-66.14486441580091 +18,0,h5py,fsspec,ATL03-7GB,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,171.39278054237366,"(46484912,)",654311424.0,-66.14486441580091 +19,0,h5py,fsspec,ATL03-7GB,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,169.21530079841614,"(46484912,)",645922816.0,-66.14486441580091 diff --git a/notebooks/h5py-atl03.ipynb b/notebooks/h5py-atl03.ipynb new file mode 100644 index 0000000..ffce00d --- /dev/null +++ b/notebooks/h5py-atl03.ipynb @@ -0,0 +1,387 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "12725ef5-255d-4b78-b4db-c27717db0d25", + "metadata": {}, + "source": [ + "# Testing access times to cloud optimized HDF5 files with the fsspec and ROS3 drivers.\n", + "\n", + "This notebook tests both I/O drivers on cloud optimized HDF5 files from the ICESat-2 mission. \n", + "\n", + "> Note: The ROS3 driver is only available in the Conda distribution of h5py" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3ac69e2f-87bc-4253-acab-54e2b0fa0348", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "h5py v3.11.0\n", + "fsspec v2024.9.0\n" + ] + } + ], + "source": [ + "import fsspec\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import h5py\n", + "\n", + "from dask.distributed import Client, LocalCluster\n", + "import dask.bag as db\n", + "from dask.diagnostics import ProgressBar\n", + "\n", + "from h5logger import parse_fsspec_log, read_file\n", + "\n", + "\n", + "for library in (h5py, fsspec):\n", + " print(f'{library.__name__} v{library.__version__}')" + ] + }, + { + "cell_type": "markdown", + "id": "94d6203f-2af2-4c64-9b4f-2354c480bd4c", + "metadata": {}, + "source": [ + "The folowing dictionary is generic enough that we can use it for different datasets, we only require file URLS and the variables we want to read from them using h5py. \n", + "The tests take for granted that the original file has no cloud optimizations and can not be read using cloud optimized patterns, the next check is to verify if the keywords \"paged\" or \"rechunked\" are present in the file name, it's presumed to be cloud optimized. \n", + "\n", + "This notebook uses dask to speed up the testing, we issue requests to each file at the same time, first looping using default parameters, this is to learn what happens when we access the different flavors without knowing that some are cloud optimized. Then we use optimized I/O parameters, we do the same for both fsspec and the HDF5 native driver ROS3. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "87720bcc-7764-4c01-87cb-81d3eb1aa1b2", + "metadata": {}, + "outputs": [], + "source": [ + "test_dict = {\n", + " \"ATL03-7GB\": {\n", + " \"files\": {\n", + " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\",\n", + " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\",\n", + " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\",\n", + " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\",\n", + " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\",\n", + " },\n", + " \"variables\": [\"/gt1l/heights/h_ph\", \"/gt1l/heights/lat_ph\", \"/gt1l/heights/lon_ph\"]\n", + " },\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "410ddda8-8182-4cf5-a825-09f8ba7021c6", + "metadata": {}, + "outputs": [], + "source": [ + "# If there is a dask_client cluster let's not create new ones.\n", + "if \"dask_client\" not in locals():\n", + " cluster = LocalCluster(threads_per_worker=1)\n", + " dask_client = Client(cluster)\n", + " dask_client" + ] + }, + { + "cell_type": "markdown", + "id": "823228b5-6700-4abb-8c28-4f8e69d76431", + "metadata": {}, + "source": [ + "The importance of caching and over-reads with remote files\n", + "\n", + "* **simple**: Caches entire files on disk.\n", + "* **blockcache**: Caches file data in chunks (blocks) on memory.\n", + "* **bytes**: Caches entire files in memory.\n", + "* **none**: Does not use caching on any request" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3c5225bb-361b-4146-ad01-eff90b762d9f", + "metadata": {}, + "outputs": [], + "source": [ + "num_runs = 1\n", + "benchmarks = []\n", + "ranges = []\n", + "\n", + "#the real default is readahead with 5MB of block sizes, we disabled to test real times without caching anything\n", + "default_io_params = {\n", + " \"fsspec_params\": {\n", + " \"skip_instance_cache\": True,\n", + " \"cache_type\": \"none\"\n", + " # \"cache_type\": \"first\", # could be first, or cachiing the entier file with simple, \n", + " # \"block_size\": 4*1024*1024\n", + " },\n", + " \"h5py_params\": {}\n", + "}\n", + "\n", + "# we can fine-tune these\n", + "optimized_io_params ={\n", + " \"fsspec_params\": {\n", + " \"cache_type\": \"blockcache\", # could be first, or cachiing the entier file with simple, \n", + " \"block_size\": 8*1024*1024\n", + " },\n", + " \"h5py_params\" : {\n", + " \"page_buf_size\": 16*1024*1024,\n", + " \"rdcc_nbytes\": 4*1024*1024\n", + " }\n", + "}\n", + "\n", + "for optimized_read in [False, True]:\n", + " for driver in [\"ros3\", \"fsspec\"]:\n", + " for run in range(num_runs): # Running N times\n", + " for dataset_name, dataset_item in test_dict.items():\n", + " # Inner loop (parallelized)\n", + " urls = dataset_item[\"files\"].items() \n", + " benchmark_list = [(run, dataset_name, dataset_item[\"variables\"], flavor, url, optimized_read, driver, default_io_params, optimized_io_params) for flavor, url in urls]\n", + " bag = db.from_sequence(benchmark_list, npartitions=len(benchmark_list))\n", + " result = bag.map(read_file)\n", + " with ProgressBar():\n", + " results = result.compute()\n", + " for result in results:\n", + " if len(result[\"benchmark\"]):\n", + " benchmarks.append(result[\"benchmark\"])\n", + " # For now we can only log I/O with fsspec\n", + " if result[\"benchmark\"][\"driver\"] == \"fsspec\":\n", + " ranges.append(result[\"ranges\"])\n", + " \n", + "df = pd.DataFrame.from_dict(benchmarks)" + ] + }, + { + "cell_type": "markdown", + "id": "c9c48844-8ba6-456f-b6a7-05ad782ea07c", + "metadata": {}, + "source": [ + "Now that we have collected the information we need we are going to plot how the drivers and the parameters performed.\n", + "The \"baseline\" is what HDF5 and fsspec do when they don't use cloud optimized parameters on a non-optimized file. Here is when we see the worst performance due te many small serial request to cloud storage. Presumably, the best case would be when we use optimized I/O that aligns to the scheme used for a cloud optimized file. E.G. if a file was optimized using paged aggregation and page sizes of 4MB, the best performance should be when we tell the I/O driver that we should read 4MB at the time. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "96f782cf-c2da-4523-ac19-6cef6b865579", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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o3///sbJkycNw7iRQD5y5IhhGNbPDEdHR2PixInGlStXDMMwjNOnTxutWrUyJBmenp7G2LFjjcKFCxvTpk2znMfff/9thISEWJ6L6enpNufRrVs34/PPPzeOHDli+YJBcnKy8euvvxp169a1XOusmK+nj4+PUapUKWPZsmWW63nw4EGjXr16luttjjsz85eGJBnPPPOMcejQIcux6OhoY9myZVk+S+/kmXA7X3zxhSHJKFOmzC3r3SpZ/sknn1hel/fff9/yOZGWlmbs3LnTaN68uSHJKF26tBEfH29pd+3aNct907t3b8t9YBg37u+dO3car7/+uvHjjz9ajRccHGxIMp544glj7969lvKkpCRj7969xvjx422eEbdzq2T5448/brkvtm7davmsTU5ONv7++29j8uTJxqRJk/I8nre3t1GrVi3j999/Nwzjxpeefv75Z6vP+Ky+kHYn90VOvyR0u+dCfsbi4eFheHh4GLNmzTISExMNwzCM2NhY4+LFizZtzEn1N95445ZxAQAAAPZEshwAAAB29dZbb1n+yJtfya6bDRo0yJI4yWpG3qlTpywz5AYPHpzjfjPL7g/VH374oSHdmCVqTr5ldu7cOauZcHlJlicmJhpFixY1JBk9evTIss5nn31mGWPHjh1Wx8yJL0lGnz59smxvfp2cnJxsXqf8TJa7uroahw8ftjn+zTffWGL09/c3YmNjbeqMGTPGkGRUqFDB5lhekuXmGbNOTk5GRESE1bFVq1YZkoyAgACbL1iYnTp1yrJ6wZ49eyzlSUlJltcru+s9cuRIy/neSbLcwcHhljPn/f39re6//EiWnzlzxtLfzV9cyJws9/X1zTamNWvWZBuHdGOG6s0zRr28vIwlS5bk+loZhvX7vFKlSpYEUGYRERGWOgsXLrQ6Zk5kVq9ePctkmWEYxs6dOw2TyWS4uLgY0dHRVsfM97+jo2OWs3ozu11SrFq1aoYko1GjRjbJcMMwjBUrVlj6+OGHH6yOZX59wsLCso0h8zNj4sSJNsfj4uKsVu6YO3euTZ0jR45Yjme1qsetxMfHW2bTZtXWfD0LFSpkHDhwwOb4hQsXLDNeb47t0KFDlhUeRowYkeOY7uSZkBN9+vQxJBlt27a9Zb3skuUxMTGGm5ubYTKZjF9//TXLtqmpqUadOnUMScYnn3xiKf/9998N6cbs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GIZhTJkyxWrMIkWKGC4uLpbfa9asaZw5c8amXXbvk5tlfmZkJyf3b3bPhMuXLxtVqlSxen9kvo4DBw68Zf85uZ63ap+WlmYMHjzY6rX08PAw3NzcrO63m93JMyEnOnToYEgyRo0alW2d2537pEmTrJ7rLi4uRrFixSz3vPln7ty5ljaZ37eSjEKFChnFihWzOqeSJUsaBw4csLTJ/J4yPz+KFStm9Znk5eV1y+dFVrJ7zmcul2Q4OjoaRYsWtbrvXVxcjB9++CHP44WHhxuenp5Z3g9FihQxduzYkWUfd3Jf/P3330bhwoUt7wN/f3/L5+upU6cs9b777jura12qVCkjKCjIaNiwYb7FcqvP8KxMnz7dkGTUrl07R/UBAAAAe2FmOQAAAO4bDRs21MGDB/X999+rV69eCg4OVuHChRUfH6+iRYuqUaNGGj16tA4cOKD58+db7Qt6O02aNNHBgwf12muvqWrVqsrIyJBhGKpataqGDx+uAwcO6D//+U+WbUuXLq3ff/9dzz33nGVWtYeHh/r27avdu3ffdsZUSEiIoqKiLO3T0tLk7e2tfv36affu3apbt27OL9ItTJkyRevWrVOnTp3k7++vhIQEeXp6qlmzZpo5c6YiIiLk6el5yz4+/PBDyyzCjIwMubi4qHbt2po6dap++uknFS5c2KaNj4+PNm3apO7du6tUqVKKi4vTiRMndOLEiVzt+Wtv0dHRt/y5eVl0Nzc3ff/991q/fr369Omj8uXLKyMjQwkJCfLz81Pz5s01adIkHT582GY2voODg+bMmaM5c+aoXr16cnV1VVpamh555BFNmzZN8+fPv5enniOpqamWaxEbGytHR0cFBQWpRYsWGjFihDZv3qx9+/Zl+z66E126dNHYsWPVsmVLlStXTiaTSVevXpWPj48aNWqkd955R4cOHbKZ8Z0XHTp00JYtW9SpUycVLlxYhmGoXLlyeu211/THH3+oXLlyWbbz9fXVr7/+quXLl6tz584qU6aMkpOTlZSUpFKlSql169b64osvdPz48TuO8XaGDRumnTt3qnfv3ipTpowSExPl6uqqevXqacqUKdq+fbtKlix51+PIqyJFimjLli0aOnSoypYtK0dHRzk5Oalp06b6/vvv73jrittxdHTUF198oc2bN6tXr14KDAxUamqqXFxcVL16dT377LNZbstx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DRts+spqiXVPT88sx92wYYMWLVqkVatWaf/+/XrooYc0atQom1hyq2nTpnJ2dta6detszik+Pl5NmzaVg8ON2+Hq1avasmWLatasaZUol25ct/bt2+vq1avau3ev1bGsztPV1VVOTrbfyTBff/PrkZWlS5eqf//+lp/x48fn5FQBAAAAAAAAAAAA4LYK3Mxy84zuWy3BLknBwcE2ZceOHZMkVatWzeaYr6+v/P39dfbsWSUlJcnV1VX16tXTjz/+qI8++kj169dXrVq1VKVKFfn6+mY7rjkhfPXqVR05ckRz587VG2+8oTfffNMqQZ9bXl5eqlu3riIjI62WPl+3bp1MJpOaN29uqfvPP/8oIyNDKSkpWrhwoU1f5v3Tz5w5ozp16qhatWoqUqSIli1bpuPHj+uRRx5RlSpVFBgYKJPJlGU85uR/djPsJaljx45WM+qz6wsAAAAAAAAAAAAAcqvAJcvNs59TUlJuWc/b29umLCkpSVL2s9KLFClilSyvVKmSxo0bp6VLlyoyMtIy67x8+fLq3bu3atSoke34Xl5eeuSRRxQYGKhXXnlF06dP13vvvZeDM8xeixYtFBkZqXXr1ql3796KjY1VVFSUatasKT8/P0u9hIQESdKhQ4d06NChbPtLTk6WJLm5uWnixIlauHChdu3apT179kiSihUrptDQULVq1cqmrfn6FypUKNv+nZ2ds1zCHQAAAAAAAAAAAADuVIFLlnt5eUn6v4RwdrKaxWzeL/vKlStZtomLi7OqJ92YhV6tWjWlpKTo8OHD2rVrl37++Wd98MEHmjx5sgICAm4Zh6+vr0qVKqV//vlHycnJt0wu30716tVVsmRJbdy4Ud27d9e6detkGIYef/zxLM+zbdu26tu3b4769vPz00svvaSMjAydPHlSf/75p9asWaNvvvlG7u7uatSokVV98/U3vx4AAAAAAAAAAAAA/k9oaKi2bNmiCxcu2DuUfFenTh1J0q5du+waR4Hbs7xMmTIymUyWpcRzo1y5cpKkv/76y+bYpUuXdP78efn7+1sly81cXFxUvXp19e3bVx07dlRKSorNnt/ZuXz5siRZ9hS/E48//rji4uK0c+dObdiwQZ6ennr00Uet6gQHB8tkMunw4cO57t/BwUFly5ZVhw4d9Morr0iSdu7caVPv7NmzkqTAwMA8nAUAAAAAAAAAAACAO7V582b16NFDtWvXVmBgoB599FENGjRI+/bts3do90SBm1nu7u6uoKAg/fPPPzIMI1f7YIeEhMjNzU3r169Xq1atVKZMGUmSYRiaP3++0tPT1aRJE0v9AwcOKCgoSG5ublb9mGegm5eEj4+P15UrVyz9mRmGoR9++EFxcXGqWbOmzZLkXbt2laQs9xXPTtOmTRUeHq5Zs2bp8uXLatu2rZycrG+DIkWKqH79+tqyZYtWrFihdu3a2Vynw4cPKzAwUIUKFdLJkyfl6uqq4sWL3/I8b27v6OioSpUq5Th2AAAAAAAAAACAB8mSuTH2DiFbYb2L374S/tX+97//adSoUfL29labNm1UrFgx/fPPP1qxYoVWrlyp+fPnW+U+H0QFLlkuSY8++qh++OEH/fPPPwoODs5xOzc3Nw0cOFBTp07VqFGj1KBBA3l5eWnfvn2Wvtq3b2+pv3LlSu3du1fVq1eXn5+fXFxcdOzYMe3du1cBAQGqW7euJOnixYsaMWKEgoODVbp0aRUpUkRXr17VwYMHdfbsWRUpUkTPPvusVSyGYUjK/WxzT09PPfbYY9q8ebMk2SzBbvbcc8/p7Nmzmjt3rjZt2qRKlSrJzc1NsbGxOnbsmM6dO6cZM2aoUKFC2rt3r+bMmaMqVaqoZMmS8vT0VHR0tHbu3CkXFxc9+eSTVn1fv35dhw8fVq1atVS4cOFcxQ8AAAAAAAAAAADgzqSmpur999+Xp6enNmzYoFKlSlmOrV69Wv3799fUqVMf+GR5gVuGXbqRIHZwcNCmTZty3bZ+/foaN26cqlWrpu3bt+vHH39UYmKiOnXqpLFjx1rNon7iiSf02GOP6fz589q4caN++eUXXb58WWFhYXr33Xcty7X7+voqNDRUDg4O2rNnj1auXKktW7aoUKFCCgsL08cff6ySJUtaxXHy5ElJUoMGDXJ9DuabukqVKlY3fmYeHh6aOHGievfuLScnJ/3222/66aefdOTIEZUuXVovvfSSPD09JUkPPfSQWrdurevXr1uuydGjR9WwYUN98MEHKl++vFXf27ZtU0pKilq0aJHr2AEAAAAAAAAAAPDvEBkZKT8/P02aNElbt25Vhw4dVLZsWVWqVEmDBg2ybNtrtnnzZr3yyiuqX7++ypYtq7Jly6ply5aaM2dOtmOsWrVKLVu2VGBgoKpVq6ZXX31VV65cUZ06dSz7YmeWkpKir776So8//rjKli2rcuXKqV27dvrpp5/ydI6//PKLOnbsqAoVKigwMFDNmjXT9OnTlZ6eblXv5MmT8vPz08svv6zjx4/rmWeeUcWKFVW2bFl16tQpR8uef//99/Lz89MXX3yR5fFff/1Vfn5+Gj169G37unTpkuLj41W1alWbfGGLFi1kMpkUGxtrVR4aGio/Pz8lJyfr3Xff1cMPP6zAwEC1aNFCGzdulCQlJCRo1KhRqlWrlsqUKaPWrVvrjz/+yDaOK1eu6NVXX1W1atUUGBioVq1a5fm1yIsCObO8aNGiql+/viIjI9WzZ0+r2c3jx4+/bfuqVauqatWqt61Xu3Zt1a5d+7b1PDw81LNnz9vWy+zAgQMymUzq2LFjrtpJ0vHjxyVlP6vczMXFRe3bt7eaLZ+V0qVLq3///jkef/369SpRokSWDygAAAAAAAAAAAqypNBQmeLiZHh72zsUIN/s2rVLn332mVq0aKHnn39eUVFRWrJkiX7//Xf9/PPP8vPzkyR9/vnnOnbsmOrUqaOnnnpKcXFxWr9+vYYPH64jR47onXfesep3/vz5Gjp0qLy9vdWlSxd5eXlp7dq16tKli1JTU222OE5OTlb37t0VGRmpmjVrqmfPnkpNTdWvv/6qvn376v3337dZ7flWZsyYobfeeks+Pj4KCwuTm5ubfvnlF40ZM0bbtm3TzJkzbbY6PnXqlFq3bq1KlSqpR48eOn78uH766SeFhYVp8+bNlmuRlQ4dOmjMmDGaN2+eXnrpJZvjc+fOlST16tXrtrH7+fmpWLFiOnDggM6dO6cSJUpYjq1du1aGYahRo0ZZtn3++ed14MABtWrVStevX9fixYvVu3dv/fjjjxo+fLiSk5PVrl07Xbx4UcuWLVO3bt20c+dOy0Rcs5SUFHXu3FnXr19Xt27ddPXqVS1dulT9+vXTl19+qc6dO9/2PO5UgUyWS1KPHj20fft2/fzzz+rQoYO9w8m1AwcOqE6dOjb7nN9OSkqKfv75Z3l4eKh+/fp3Kbrs7du3TwcOHNDw4cNzvYS82dK0WB1KS8jnyO5vy3tVsXcIAAAAAAAAAIB74OqYMfYOAch369ev1yeffGKVxJ08ebImTZqk9957T59++qkkadKkSQoKCrJqm5aWph49eujrr7/WgAEDVLp0aUlSXFycRo8eLQ8PD0VERKhs2bKSpNGjR6t79+76888/bfJoH3/8sSIjI/X6669r+PDhlkR2QkKCwsLCNG7cOLVp00YBAQG3Pafjx49r/Pjx8vX1VUREhGV29ujRo9W1a1f9+OOPWrRokbp06WLVbsuWLXrrrbc0ZMgQS9kHH3ygKVOmKDw83Kr8Zm5uburcubNmzpyprVu3WuX6YmJiFBERoTp16qhatWq3jd9kMum9997T4MGD1bRpUz311FMqVqyYjh49ql9++UVPPfWU3nzzzSzbXrp0SRs2bJC7u7skqWnTphowYIA6deqkJk2aaNq0aXJyupGGrl69uiZMmKB58+Zp0KBBVv1ER0erUqVKWrNmjeWLDYMGDVKLFi305ptv6sknn5SHh8dtz+VOFMhl2KUb35YYPHiwChUqZO9Q8mTYsGEaMWJEjusfPHhQS5Ys0bvvvqvY2Fi1b9/easn4eyUxMVF9+vSx7NcOAAAAAAAAAACAB1twcLDNKsuDBw+Wr6+vli5dqpSUFEmySZRLkpOTk/r166f09HRt3rzZUr5mzRpdu3ZNvXr1siTKzfVHjhxp009GRoZmz56tcuXKWSXKpRurQL/22mtKSUnRjz/+mKNzWrx4sdLS0vTCCy9YLWPu4uKit956S5IUHh5u0y4wMNBmVrj52uzZs+e24/bt21fS/80iN1uwYIFSU1PVu3fvHMUvSR07dtT3338vR0dHzZs3T5999plWrVqlcuXKqXv37jYzwc1GjRplSZRLUrt27eTs7Ky4uDiNHz/ekiiXpLCwMEnS/v37s+zrjTfesFoBoGLFiurRo4fi4uK0Zs2aHJ9LXhXYmeVS3vb7/reKiorSokWL5OnpqTZt2qhdu3Z2iYMkOQAAAAAAAAAAQMFSt25dm+XIXV1dVatWLa1bt07//POPqlatqoSEBH355Zdas2aNjh8/rsTERKs20dHRln+bk69Z5Z4eeeQRq4StJB05ckRXrlxRQECAPvroI5s2Fy9elCQdPnxYkrR3716bZG1gYKC6d+9uOS5JDRs2tOkrJCRErq6uWSaIq1evbrP6csmSJSVJV69etal/s2rVqikkJESrVq3S+++/Ly8vL0k39jN3d3e3WlF70qRJNu0HDhwo7/+/zcP333+v119/XU8//bSeffZZ+fv768iRI3r33XfVt29fvfvuu3r++edt+qhZs6bV746OjvL19VViYqJl5r+Zv7+/JOncuXM2/Tg7OyskJMSmvF69epo5c6b27dtnMzM/vxXoZHlB0rVrV3Xt2tXeYQAAAAAAAAAAAKCA8fX1zbK8ePHikm4kiVNSUhQaGqqoqCjVrFlTXbp0UdGiReXo6KhTp05pwYIFSk5OtrRNSLixZW+xYsVs+nVwcFDRokWtyi5fvizpxmrMBw8ezDZWc4J+//79mjx5stWxBg0aWJLl8fHxVueQ1TlnlSA2J7czMyf209PTs40rs759+2rIkCFatGiRnnnmGW3btk2HDx9Wnz59rJYtvzl+Serevbu8vb115MgRDR8+XC1bttSECRMsx2vWrKnZs2erYcOGevfdd9WjRw+bpdCzmnHu5OR0y3NLS0uzOebj45Plts3ma2q+xncTyXIAAAAAAAAAAID7RPHGjeUYHa10f3/FbNpk73CAfBEbG5tleUxMjKQbCeSffvpJUVFR6t27t6ZMmWJVb+nSpVqwYIFVmTmBa54RnllGRoYuXbqkEiVKWMrMCd62bdtq5syZt425e/fulsR4Vsz9xcTE2OyNLt045+yWMb9THTp00JgxYzRv3jw988wzmjdvniTZLMF+4cKFbPvYsGGDUlNT1ahRI5tjhQsX1qOPPqolS5boyJEjql27dr7Gb3b58mVlZGTYJMzN98Xdun6ZFdg9ywEAAAAAAAAAAO43DteuySEhQQ7Xrtk7FCDfbN++XYZhWJUlJSUpKipKrq6uqlChgo4fPy5JatWqlU37bdu22ZRVr17d0vfNdu/ebTOTuVKlSvL09NSff/6p1NTUvJ6KhXkp8sjIyCzHT0pKUo0aNe54nKy4urqqc+fO2rt3r7Zs2aKVK1eqWrVqevjhh3Pch3mf+Oy+yGAud3FxufOAs5GamqqdO3falJtf77t1/TIjWQ4AAAAAAAAAAADgrjly5Ijmz59vVfbll18qNjZWHTt2lIuLi2Wv699//92q3pYtWzR37lybPlu3bi13d3fNmzdPJ06csJSnpaXpgw8+sKnv5OSk/v3769SpUxo/fnyWCfMDBw5YZjXfTlhYmJycnDRt2jSdP3/eUp6amqqJEydKkrp165ajvvKib9++kqRBgwYpMTFRffr0yVV7817v3333nc6ePWt17LffflNkZKSKFy+uypUr50/A2fjwww+tXovDhw/r+++/l5eXl1q3bn1Xx5ZYhh0AAAAAAAAAAADAXdS0aVO98cYbioiIUMWKFRUVFaX169erVKlSGjVqlCTpiSeeUGBgoL744gsdPHhQVapU0ZEjRxQREaHWrVtr1apVVn16e3vrnXfe0WuvvaYWLVqoQ4cO8vLy0tq1a+Xi4qKAgACZTCarNiNGjFBUVJS+/vprRUREqEGDBipWrJjOnTunAwcOaP/+/Vq9enW2+5BnVq5cOY0ZM0bjxo1T06ZN1b59e7m5uSkiIkKHDx/Wk08+qS5duuTfRbxJ1apV9eijj2rHjh0qXLiwOnfunKv2ISEh6ty5sxYtWqRGjRrpqaeekp+fn44cOaJffvlFkvTee+/J0dHxboQvSfL391dcXJyaN2+uFi1a6OrVq1q6dKmuX7+ujz/+2Gav9LuBZDkAAAAAAAAAAACAuyYkJETDhg3T+++/r6+//lrOzs7q2LGjxo4dKz8/P0k39iBfvHix3n77bW3btk1btmxR5cqV9dVXX6l48eI2yXJJ6tOnj4oUKaJPP/1UCxYskKenp5588kmNGTNGjzzyiMqWLWtVv1ChQgoPD9e8efO0cOFCrVy5UikpKSpevLgqVaqkfv36qWrVqjk+rxdeeEHlypXTtGnTtGjRIqWmpqp8+fJ6++239fzzz9sk6/Nbt27dtGPHDrVt21be3t65bv/FF1+oXr16WrBggVavXq2kpCT5+PioVatWevHFF/XYY4/dhaj/j4uLi3744QdNmDBBCxYsUHx8vKpWrapXX31VTz755F0d28xk3LxBAHCf6/3tdh26kGDvMO6p5b2q2DsEAAAAAAAAAMA94F+njhzPn1d6QICid+2ydzjIIWdn5yxnIx89elSenp52iOj+EBkZqY4dO2r48OEaMWLEPRv36NGjqlevnjp06KCvv/76no17r40YMUKzZ8/W8uXLVb9+fXuHc1+Jj49X+fLlb1uPPcsBAAAAAAAAAAAA/OtcuXJFycnJVmVJSUkaO3asJN2TPa/tJTY2VgsXLlSlSpVIlN8BlmEHAAAAAAAAAAAA8K+zZcsWDRs2TE2bNlWpUqV06dIlbd68WSdPntR//vMfhYaG2jvEfBcREaGoqCitXLlSiYmJGj58uL1D+lcjWQ4AAAAAAAAAAADgX6dKlSpq0qSJtm/frosXL0qSypUrp5EjR+rFF1+Ug8ODt8j2ihUrtGDBAgUEBGj06NEP5BcC7iX2LMe/DnuWAwAAAAAAAAAeVOxZ/u/EnuXA/SWne5YzsxwAAAAAAAAAAOA+ceWDD2S6fl1G4cL2DgUAHngkywEAAAAAAAAAAO4TyS1b2jsEACgwHryF+gEAAAAAAAAAAAAAuA1mluNf55Onyik1NdXeYQAAAAAAAAAAAAD4FyNZDgAAAAAAAAAAcJ9wjoqSUlIkFxel1qpl73AA4IFGshwAAAAAAAAAAOA+UfTpp+V4/rzSAwIUvWuXvcMBgAcae5YDAAAAAAAAAAAAAAockuUAAAAAAAAAAAAAgAKHZDkAAAAAAAAAAAAAoMAhWQ4AAAAAAAAAAADggREaGio/Pz97h2HFz89PoaGh93TM8PBw+fn5KTw8/J6Om1f2eN1IlgMAAAAAAAAAAAAAbOzcuVMBAQHy8/PTZ599Zu9w8p2TvQMAAAAAAAAAAAAACqKPP/7Y3iFk67XXXrN3CLCzpKQkDRkyRIULF1ZiYqK9w7krmFkOAAAAAAAAAAAAALDy3nvvKTo6WkOGDLF3KHcNyXIAAAAAAAAAAAAA+S4yMlJ+fn6aNGmSduzYoa5duyo4ONiyL7VhGJo/f77atGmj8uXLKygoSC1bttT8+fOz7M8wDIWHh6t9+/YKDg5WUFCQHnvsMQ0fPlynT5+2qZ+WlqaPP/5YISEhKl26tOrVq6eZM2fa1Hv55Zfl5+enkydP2hybNGmS/Pz8FBkZmeV5RUVFqWvXripXrpwqVKigfv36ZdlPduczatQo+fn5aciQIUpLS8vTdbl8+bKGDx+uatWqKSgoSE888YR+/PHHHMWQnd9//11ff/21xo8fr5IlS2Zbz3ztjh8/ri+//FL16tVTYGCgGjVqpKVLl0qSUlNT9cEHHygkJERlypRRkyZNtG7dumz7vH79ut5++23Vrl3bUj+7c79TLMMOAAAAAAAAAAAA4K7ZsWOHpk6dqoYNG6pPnz46c+aMDMPQCy+8oCVLlqhChQoKCwuTi4uLNm7cqKFDh+rQoUN6++23LX0YhqGBAwdq2bJlKlGihDp27ChPT0+dOnVKy5cvV/PmzVW6dGmrcQcOHKjdu3erefPmcnR01IoVKzRy5Eg5OzurT58+d3xef/75p/773/+qQYMG6tu3r/bt26c1a9bowIED2rRpkwoXLpxt25SUFL388staunSpBg8erHHjxlnOMzfXJTExUaGhoTpw4IBCQkLUoEEDnTlzRgMGDFDTpk3zdF6JiYkaMmSI5fUKDw+/bZuxY8dq9+7datWqlRwcHLRs2TINGjRI3t7emjVrlg4cOKDHH39cycnJWrJkifr27avIyEgFBQXZ9PXcc8/pr7/+Urt27ZSWlqbly5dr6NChiomJ0SuvvJKnc8oOyXIAAAAAAAAAAID7xIWNGyXDkEwme4cC5JuNGzfq008/Vc+ePS1l3333nZYsWaJevXrpo48+kpPTjbRlSkqKnn32WX311VcKCwvTQw89JEmaNWuWli1bpv/85z+aO3euXF1dLX0lJSXp+vXrNuOePXtWmzZtkqenpyRpwIABaty4sb766qt8SZZHRERoxowZCg0NtZQNHjxYP/zwg9asWaOOHTtm2S4hIUFPP/20Nm3apPHjx+vFF1+0HJs7d26urssXX3yhAwcOqE+fPvr4448t/XTt2lXdunXL03lNnDhR0dHRWrhwYY7b/P3339qwYYN8fX0lSd27d1fr1q01cOBAValSRRs3bpS7u7skqVmzZnr++ec1Y8YMvfvuuzZ9nThxQps2bZKHh4ckaejQoWrRooU+/PBDdejQQWXLls3TeWWFZdgBAAAAAAAAAADuE4aHhwxPTxn/P0kEPAhq1qxplSiXpG+++UZubm56//33LQlhSXJxcdGbb74pSVqyZImlfNasWXJ0dNRHH31klSiXJFdXV/n4+NiMO3r0aEuiXJKCg4NVt25dHTlyRAkJCXd8XvXr17dKlEuynOeePXuybBMbG6uwsDBFRkbq888/t0qUS7m/LgsXLpSLi4tGjBhh1U+zZs30n//8J9fntGXLFn3zzTcaPXp0lrO+szN06FBLolyS6tSpo6CgIMXFxWnUqFGWRLkktW3bVs7Oztq/f3+2fXlkegb6+/tr0KBBSktLszr3/MDMcgAAAAAAAAAAAAB3zcMPP2z1e2Jiog4cOKCAgAB99tlnNvXNe3cfOXJEknTt2jUdOnRI5cqVU/ny5XM8bq1atWzKSpQoIUmKi4uzSsjmxa36v3r1qs2xmJgYtWvXTufOndOcOXPUokULq+O5vS4JCQk6efKkKleuLH9/f5v69erV02+//WZVNn36dMXFxVmVde/eXYGBgbp27ZpeeeUVhYSE6Nlnn73VqduoWbOmTZm/v79OnDihGjVqWJU7OjrK19dX586dy7KvevXqZVu2b9++XMV1OyTLAQAAAAAAAAAAANw1xYsXt/o9Li5OhmHo3Llzmjx5crbtEhMTJf1f4tmciM4pLy8vmzLzbO309PRc9ZWVzLPWc9J/dHS04uPjVaFCBdWuXdvmeF6vS+YZ3ZndfN0lacaMGTp16pRVWcOGDRUYGKj3339f0dHR+v777+XgkLsFym91LbI7Zk7+3yyr8zGfS1ZfQrgTJMsBAAAAAAAAAADuE+7Tp8shIUEZHh66NnCgvcMB8oXJZLL63Zw8feihhxQREXHb9ub62c1EvlPmxHBWydv4+Ph8G6dGjRrq1q2bhg0bpk6dOmnx4sVWieG8XpfY2Ngsj8fExNiU7dq1K9v+9u3bp+vXr6tBgwZZHp84caImTpyoAQMGaOLEibeNL69iY2NVqlQpqzLzuWT1BYg7QbIcAAAAAAAAAADgPuExY4Ycz59XekAAyXI8sDw8PFSpUiUdPnxYcXFx8vb2vm39ypUr68iRIzp69GiulmLPCfP458+ft+l77969+TpWjx49ZDKZNHToUIWFhWnx4sWWWdO5vS6enp4KDAzUsWPHFB0dbbMU+7Zt23IVW4sWLVSuXDmb8qNHj2rr1q16+OGHVa1aNYWEhOSq39zatm2bOnXqZFMmyWZJ9zuVu/nzAAAAAAAAAAAAAHCHnnvuOSUmJurVV1/VtWvXbI6fOHFCJ0+etPz+9NNPKz09XSNGjFBSUpJV3evXr+vy5ct5jsW8JHp4eLhV+cqVK7Vly5Y895ud7t27a+rUqfr777/VqVMnqxngub0uXbp0UUpKiiZNmmRVb/369Tb7ld/OSy+9pE8++cTmp0ePHpKkNm3a6JNPPlFoaGiu+s2tTz/9VAkJCZbfL1y4oGnTpsnJyUlhYWH5OhYzywEAAAAAAAAAAADcU/369dOuXbu0YMECbd++XY0bN1ZAQIBiYmJ0+PBh7d69W9OmTVNgYKCkG8nyrVu3avny5apXr55atWolT09PnTlzRuvXr9cnn3yip556Kk+xtG7dWoGBgQoPD9eZM2dUs2ZNHT58WJs3b1aLFi3066+/5uepS5K6desmk8mkIUOGqGPHjlqyZIn8/PxyfV1eeuklrV69Wt99950OHjyo+vXr68yZM1qxYoVatmyZo+Xc7zdBQUFq3Lix2rRpo7S0NC1fvlyxsbEaNWqUypYtm69jkSwHAAAAAAAAAAAAcE+ZTCZ9/vnnatGihb777jtFRETo2rVr8vX1Vfny5TV+/Hg1btzYqv6MGTPUtGlTzZ07VwsXLpQkBQQEqH379nrooYfyHIurq6sWL16sMWPGaPPmzdq1a5fq1Kmj5cuX65dffrkryXJJ6tq1qyVhbl6S3d/fP1fXxd3dXcuWLdPEiRO1Zs0a7d27V5UrV9aMGTMUHx//r0yWf/311/rwww+1dOlSXbx4UeXLl9fo0aPVq1evfB/LZBiGke+9AndRTEyMUlNT7R0GAAAAAAAAAAD5zr9OHcue5dG7dtk7HOSQs7OzZd/pzI4ePSpPT087RAQUbPHx8Tna2549ywEAAAAAAAAAAAAABQ7JcgAAAAAAAAAAAABAgUOyHAAAAAAAAAAAAABQ4JAsBwAAAAAAAAAAAAAUOE72DgAAAAAAAAAAAAA3pNasqfSSJZVRrJi9QwGABx7JcgAAAAAAAAAAgPvEpdmz7R0CABQYLMMOAAAAAAAAAAAAAChwSJYDAAAAAAAAAAAAAAockuUAAAAAAAAAAAAAgAKHPcsBAAAAAAAAAADuE0X795fDxYvKKFaM/csB4C4jWQ4AAAAAAAAAAHCfcN67V47nzys9IMDeoQDAA49l2AEAAAAAAAAAAAAABQ7JcgAAAAAAAAAAAABAgUOyHAAAAAAAAAAAAMADIzQ0VH5+fvYOw4qfn59CQ0Pv6Zjh4eHy8/NTeHj4PR03r+zxurFnOQAAAAAAAAAAAGAHPgeG2zuEbF2uOtneIcBOoqKiNHXqVP3555+6cOGCfH19VaNGDb3wwguqX7++vcPLV8wsBwAAAAAAAAAAAABo9erVeuKJJ/Trr78qJCREzz//vOrWrauNGzeqQ4cO/5pZ6jnFzHIAAAAAAAAAAAAAgN577z0ZhqFVq1apZs2alvKoqCi1bNlSkydPVvfu3e0YYf5iZjkAAAAAAAAAAACAfBcZGSk/Pz9NmjRJO3bsUNeuXRUcHGzZl9owDM2fP19t2rRR+fLlFRQUpJYtW2r+/PlZ9mcYhsLDw9W+fXsFBwcrKChIjz32mIYPH67Tp0/b1E9LS9PHH3+skJAQlS5dWvXq1dPMmTNt6r388svy8/PTyZMnbY5NmjRJfn5+ioyMzPK8oqKi1LVrV5UrV04VKlRQv379suwnu/MZNWqU/Pz8NGTIEKWlpeXpuly+fFnDhw9XtWrVFBQUpCeeeEI//vhjjmK42YkTJxQQEGCVKJekWrVqyd/fX7GxsVbl5mt3/Phxffnll6pXr54CAwPVqFEjLV26VJKUmpqqDz74QCEhISpTpoyaNGmidevWZRvD9evX9fbbb6t27dqW+tmd+51iZjkAAAAAAAAAAACAu2bHjh2aOnWqGjZsqD59+ujMmTMyDEMvvPCClixZogoVKigsLEwuLi7auHGjhg4dqkOHDuntt9+29GEYhgYOHKhly5apRIkS6tixozw9PXXq1CktX75czZs3V+nSpa3GHThwoHbv3q3mzZvL0dFRK1as0MiRI+Xs7Kw+ffrc8Xn9+eef+u9//6sGDRqob9++2rdvn9asWaMDBw5o06ZNKly4cLZtU1JS9PLLL2vp0qUaPHiwxo0bZznP3FyXxMREhYaG6sCBAwoJCVGDBg105swZDRgwQE2bNs31OVWuXFn79u3T/v37Vb16dUv53r17FR0drSeeeCLLdmPHjtXu3bvVqlUrOTg4aNmyZRo0aJC8vb01a9YsHThwQI8//riSk5O1ZMkS9e3bV5GRkQoKCrLp67nnntNff/2ldu3aKS0tTcuXL9fQoUMVExOjV155JdfndCskywEAAAAAAAAAAO4TCQMGyCEhQRkeHvYOBcg3Gzdu1KeffqqePXtayr777jstWbJEvXr10kcffSQnpxtpy5SUFD377LP66quvFBYWpoceekiSNGvWLC1btkz/+c9/NHfuXLm6ulr6SkpK0vXr123GPXv2rDZt2iRPT09J0oABA9S4cWN99dVX+ZIsj4iI0IwZMxQaGmopGzx4sH744QetWbNGHTt2zLJdQkKCnn76aW3atEnjx4/Xiy++aDk2d+7cXF2XL774QgcOHFCfPn308ccfW/rp2rWrunXrlutzeuedd9SrVy+1adNGTz31lEqWLKmzZ89q9erVqlevniZPnpxlu7///lsbNmyQr6+vJKl79+5q3bq1Bg4cqCpVqmjjxo1yd3eXJDVr1kzPP/+8ZsyYoXfffdemrxMnTmjTpk3y+P/PwaFDh6pFixb68MMP1aFDB5UtWzbX55UdlmEHAAAAAAAAAAC4T1wbOFDxr72mawMH2jsUIN/UrFnTKlEuSd98843c3Nz0/vvvWxLCkuTi4qI333xTkrRkyRJL+axZs+To6KiPPvrIKlEuSa6urvLx8bEZd/To0ZZEuSQFBwerbt26OnLkiBISEu74vOrXr2+VKJdkOc89e/Zk2SY2NlZhYWGKjIzU559/bpUol3J/XRYuXCgXFxeNGDHCqp9mzZrpP//5T67PqUGDBlqxYoX8/Py0aNEiffbZZ1q0aJF8fHzUo0cP+fv7Z9lu6NChlkS5JNWpU0dBQUGKi4vTqFGjLIlySWrbtq2cnZ21f//+bPvyyPSFIX9/fw0aNEhpaWlW554fmFkOAAAAAAAAAAAA4K55+OGHrX5PTEzUgQMHFBAQoM8++8ymvnnv7iNHjkiSrl27pkOHDqlcuXIqX758jsetVauWTVmJEiUkSXFxcVYJ2by4Vf9Xr161ORYTE6N27drp3LlzmjNnjlq0aGF1PLfXJSEhQSdPnlTlypWzTGLXq1dPv/32m1XZ9OnTFRcXZ1XWvXt3BQYGSpLWrl2rAQMGqGXLlpo7d67KlCmj06dP69NPP9WQIUO0f/9+TZgwwWasm/c4l24kuU+cOKEaNWpYlTs6OsrX11fnzp2zaWOOO7uyffv2Zdkmr0iWAwAAAAAAAAAAALhrihcvbvV7XFycDMPQuXPnsl3WW7qRPJb+L/FsTkTnlJeXl02ZebZ2enp6rvrKSuZZ6znpPzo6WvHx8apQoYJq165tczyv1yXzjO7Mbr7ukjRjxgydOnXKqqxhw4YKDAzU5cuXNWjQIJUvX17//e9/5eBwY5HyihUr6osvvtDRo0f19ddf65lnnlG5cuWs+rjVtcjumDn5f7Oszsd8Lll9CeFOkCwHAAAAAAAAAAC4T5gSEiTDkEwmGexbjgeEyWSy+t2cPH3ooYcUERFx2/bm+tnNRL5T5qRwVsnb+Pj4fBunRo0a6tatm4YNG6ZOnTpp8eLFVonhvF6X2NjYLI/HxMTYlO3atSvb/rZv3664uDjVr1/fck3MTCaTGjVqpF27dmnfvn02yfL8FBsbq1KlSlmVmc8lqy9A3An2LAcAAAAAAAAAALhP+DVpohJVqsivSRN7hwLcNR4eHqpUqZIOHz5ssyR4dvUrV66skydP6ujRo/kej7e3tyTp/PnzNsf27t2br2P16NFDn376qQ4dOqSwsDCrhHZur4unp6cCAwN17NgxRUdH2xzftm1brmJLSUmRJF28eDHL4+ZyFxeXXPWbW1nFbS67eUn3O0WyHAAAAAAAAAAAAMA99dxzzykxMVGvvvqqrl27ZnP8xIkTOnnypOX3p59+Wunp6RoxYoSSkpKs6l6/fl2XL1/OcyzmJdHDw8OtyleuXKktW7bkud/sdO/eXVOnTtXff/+tTp06WSXMc3tdunTpopSUFE2aNMmq3vr16232K7+dkJAQOTo6atWqVdq/f7/VsYMHD2rJkiUqVKiQQkJCctVvbn366adKSEiw/H7hwgVNmzZNTk5OCgsLy9exWIYdAAAAAAAAAAAAwD3Vr18/7dq1SwsWLND27dvVuHFjBQQEKCYmRocPH9bu3bs1bdo0BQYGSrqRLN+6dauWL1+uevXqqVWrVvL09NSZM2e0fv16ffLJJ3rqqafyFEvr1q0VGBio8PBwnTlzRjVr1tThw4e1efNmtWjRQr/++mt+nrokqVu3bjKZTBoyZIg6duyoJUuWyM/PL9fX5aWXXtLq1av13Xff6eDBg6pfv77OnDmjFStWqGXLljlazt2sRIkSeuWVVzRlyhS1atVKrVu3VpkyZXTmzBmtXr1aycnJGjdunIoVK5bv1yOzoKAgNW7cWG3atFFaWpqWL1+u2NhYjRo1SmXLls3XsUiWAwAAAAAAAAAAALinTCaTPv/8c7Vo0ULfffedIiIidO3aNfn6+qp8+fIaP368GjdubFV/xowZatq0qebOnauFCxdKkgICAtS+fXs99NBDeY7F1dVVixcv1pgxY7R582bt2rVLderU0fLly/XLL7/clWS5JHXt2tWSMA8LC9PixYvl7++fq+vi7u6uZcuWaeLEiVqzZo327t2rypUra8aMGYqPj89VslySRo4cqWrVqunbb7/Vxo0bFR8fLy8vL9WvX1/PPfecnnjiify+DDa+/vprffjhh1q6dKkuXryo8uXLa/To0erVq1e+j2UyDMPI916BuygmJkapqan2DgMAAAAAAAAAgHznX6eOHM+fV3pAgKJ37bJ3OMghZ2dnFS9e3Kb86NGj8vT0tENEQMEWHx+v8uXL37Yee5YDAAAAAAAAAAAAAAockuUAAAAAAAAAAAAAgAKHZDkAAAAAAAAAAAAAoMAhWQ4AAAAAAAAAAAAAKHBIlgMAAAAAAAAAAAAAChwnewcAAAAAAAAAAACAGy7NmiWlpEguLvYOBQAeeCTLAQAAAAAAAAAA7hOptWrZOwQAKDBYhh0AAAAAAAAAAAAAUOCQLAcAAAAAAAAAAADuApPJJMMw7B0GUKAYhiGTyZSjuizDDgAAAAAAAAAAcJ8oFBEh0/XrMgoXVnLLlvYOB3fI09NTSUlJKly4sL1DAQqM5ORkeXp65qguyXIAAAAAAAAAAID7RJGRI+V4/rzSAwIUTbL8X8/Hx0dXr16VJBUqVCjHs10B5J5hGEpOTlZqaqpKliyZozYkywEAAAAAAAAAAIC7wNHRUUFBQbp8+bLi4+NZkh24i0wmkzw9PVWyZEk5OjrmqA3JcgAAAAAAAAAAAOAucXR0lK+vr3x9fe0dCoCbONg7AAAAAAAAAAAAAAAA7jWS5QAAAAAAAAAAAACAAodkOQAAAAAAAAAAAACgwCFZDgAAAAAAAAAAAAAocEiWAwAAAAAAAAAAAAAKHJLlAAAAAAAAAAAAAIACx8neAQAAAAAAAAAAAOCGDHd3mTw8lOHubu9QAOCBR7IcAAAAAAAAAADgPhGzaZO9QwCAAoNl2AEAAAAAAAAAAAAABQ7JcgAAAAAAAAAAAABAgUOyHAAAAAAAAAAAAABQ4LBnOQAAAAAAAAAAwH3Ca8IEmeLiZHh76+qYMfYOBwAeaCbDMAx7BwHkRkxMjFJTU+0dBgAAAAAAAAAA+c6/Th05nj+v9IAARe/aZe9wkEPOzs4qXry4vcMAkEssww4AAAAAAAAAAAAAKHBIlgMAAAAAAAAAAAAAChyS5QAAAAAAAAAAAACAAodkOQAAAAAAAAAAAACgwCFZDgAAAAAAAAAAAAAocEiWAwAAAAAAAAAAAAAKHJLlAAAAAAAAAAAAAIACh2Q5AAAAAAAAAAAAAKDAcbJ3AAAAAAAAAAAAALjh+uOPy+HKFWUUKWLvUADggWcyDMOwdxBAbsTExCg1NdXeYQAAAAAAAAAAAEiSnJ2dVbx4cXuHASCXWIYdAAAAAAAAAAAAAFDgkCwHAAAAAAAAAAAAABQ4JMsBAAAAAAAAAAAAAAWOk70DAAAAAAAAAAAAwA2+rVvL8cIFpfv5KXbNGnuHAwAPNJLlAAAAAAAAAAAA9wnHCxfkeP68vcMAgAKBZdgBAAAAAAAAAAAAAAUOyXIAAAAAAAAAAAAAQIFDshwAAAAAAAAAAAAAUOCQLAcAAAAAAAAAAAAAFDgkywEAAAAAAAAAAAAABQ7JcgAAAAAAAAAAAABAgUOyHAAAAAAAAAAAAABQ4JAsBwAAAAAAAAAAAAAUOE72DgAAAAAAAAAAAAA3XH3rLZmSkmS4uto7FAB44JkMwzDsHQSQGzExMUpNTbV3GAAAAAAAAAAAAJIkZ2dnFS9e3N5hAMglZpbjX8fn1OdSwgl7hwHY1YXg9+0dAgAAAAAAAAAAwL8ae5YDAAAAAAAAAAAAAAocZpYDAAAAAAAA/4+9e4/Tsi7wxv+ZI0c5znAKlRQVwVMiKpDgKU1FzUQ06yl7auvZtYP17HYutXW37bD9KsutfbZs2zJTUlPLdFcEhDyihgKioogow/kgJxmY+/eHr5l1dsBmhoEb536/Xy9fMd/7e13X5765vLudz319LwDYR1Q891zKduxIoaIiO4YPL3YcgE5NWQ4AAAAAALCPqLn44lTU1WXHoEFZPmdOseMAdGqWYQcAAAAAAACg5CjLAQAAAAAAACg5ynIAAAAAAAAASo6yHAAAAAAAAICSoywHAAAAAAAAoOQoywEAAAAAAAAoOcpyAAAAAAAAAEqOshwAAAAAAACAkqMsBwAAAAAAAKDkVBY7AAAAAAAAAK9b+Yc/JDt2JBUVxY4C0OkpywEAAAAAAPYRDQMHFjsCQMmwDDsAAAAAAAAAJUdZDgAAAAAAAEDJsQw7bznXzarJK69sK3YMKLIf/MUZn/rUp/ZCDgAAAACgI3X/5S9TtmlTCj16ZPMHPlDsOACdmrIcAAAAAABgH7Hf//f/paKuLjsGDVKWA+xhlmEHAAAAAAAAoOQoywEAAAAAAAAoOcpyAAAAAAAAAEqOshwAAAAAAACAkqMsBwAAAAAAAKDkKMsBAAAAAAAAKDnKcgAAAAAAAABKjrIcAAAAAAAAgJJTWewAAAAAAAAAvG77QQeloVevNNTUFDsKQKenLAcAAAAAANhHrL755mJHACgZlmEHAAAAAAAAoOQoywEAAAAAAAAoOcpyAAAAAAAAAEqOe5YDAAAAAADsI/p84hMpX7MmDf36Zd0Pf1jsOACdmrIcAAAAAABgH9HlgQdSUVeXHYMGFTsKQKenLOct5239J6XLjq3FjgH7vDt+s67YEQAAAACANnr/lkJ6JtmypVD03/Gde3Gfoh4fYE9zz3IAAAAAAAAASo6y/E00NDTk7/7u7/KNb3yj2FE6hR07duSTn/xkvvvd7xY7CgAAAAAAAFDiLMP+JqZPn54XX3wxH//4x4sdJUnyX//1X3n00Ufz0ksvZcOGDSkvL8+AAQNy3HHH5ZxzzknPnj2LHfFNVVRU5L3vfW/+5V/+JQsXLsxhhx1W7EgAAAAAAABAiXJl+S40NDRk6tSpGTlyZIYPH17sOEmS+++/PytXrszhhx+eM888M6ecckqqq6vz29/+Np/73Oeybt26Ykf8iyZMmJDevXvnpptuKnYUAAAAAAAAoIS5snwXHnvssaxatSqTJ08udpQmX/7yl1NdXd1i/MYbb8wtt9ySO+64I//rf/2vIiRrvYqKiowfPz533XVXli1blsGDBxc7EgAAAAAAAFCClOW7MH369JSVleWEE05o8dhVV12V+fPn51e/+lVuueWWzJo1K6tWrcoFF1yQKVOmJEkWLlyYW265Jc8880y2bduW2trajBs3Lueff366dOnSbH/PP/98br311jz33HNZv359evTokQEDBmTMmDF5z3ve0zRvZ0V5kowdOza33HJL6urqdus5z5s3L1dffXUmT56c4447Lr/+9a+zcOHClJWV5YgjjsiHPvShDBgwoMV2bXmujXn/8Ic/ZPr06Xnf+963W5kBAAAAAAAA2kNZvhOFQiHz58/PkCFD0qNHj13O+853vpMXX3wxRx99dHr27JmBAwcmSR588MF8//vfT2VlZcaOHZvevXvnySefzNSpUzN37txceeWVqaqqSpIsXrw4X/3qV1NeXp7jjjsutbW12bRpU5YuXZp77723WVm+K4899liSZP/999/9J5/Xy/s77rgjI0eOzOmnn57FixfnkUceyZIlS/LP//zPzUr7tjzXRgcddFAqKyvz1FNPdUheAAAAAAAAgLZSlu/Eyy+/nI0bN+aYY45503lr167Nd77znfTs2bNpbMuWLfnJT36S8vLyXHPNNTnwwAOTvF7AX3vttZk1a1Zuv/32XHjhhUmSmTNnpr6+Pp/73Ody3HHHNdv/q6++utPjTp8+PStWrMjWrVvzwgsvZN68eXn729+eSZMm7caz/m+PPfZYrrjiiowbN65p7Ic//GFmzpyZRx55JOPHj2/Xc21UVVWV/fffP88//3zq6+tblOmN6uvrU19f3/RzWVlZunXr1iHPEQAAAAAA9kVPnzg51Vtfzbau+xU7CkCnpyzfidWrVydJ+vTp86bzpkyZ0qwoT5JHHnkkmzZtyhlnnNFUHievF72XXnppHnjggUyfPr1FgbyzJdb322/n/0c4ffr0zJ8/v+nno48+Op/4xCdaZGmvww8/vFlRniSnnHJKZs6cmUWLFjWV5e19rknSu3fv7NixI+vXr09NTc1Oc9x6662ZOnVq089vf/vb881vfrMjniIAAAAAAOyT5pz5N8WOAFAylOU70XhF95stwZ4kw4cPbzH2wgsvJElGjhzZ4rGampoMHDgwr7zySrZs2ZJu3brlxBNPzO9///t8+9vfztixY3PUUUdlxIgRuyyQk9fvmZ4kGzZsyHPPPZdf/vKX+fznP58vfvGLzUrr9nr729/eYqx///5Jkk2bNjWNtfW5vlFjsf/qq6/u8rlecMEFza6WLysra+MzAQAAAAAAANi58mIH2Bc1XuW9bdu2N53Xu3fvFmNbtmxJsuur0hvHG+cdeuihufLKKzNixIjMnj07P/jBD/I3f/M3+cIXvvAX7+ndq1evHHvssfnSl76UV199NT/5yU/edH5rde/evcVYefnrp0pDQ0PTWFuf6xs1vrZdunTZZY6qqqp079696R9LsAMAAAAAAAAdxZXlO9GrV68kycaNG9903s6udG4sdNetW7fTbdavX99sXvL6ldkjR47Mtm3b8uyzz2bOnDm5++6780//9E/5zne+k0GDBr1pjpqamrztbW/LokWL8tprr71pAd2R2vNcGzW+to2vNQAAAAAAAMDe5Mryndh///1TVlaWurq6Nm/buIT5G+8p3mjNmjWpq6vLwIEDd1ogV1dXZ9SoUfngBz+YCy64INu2bcuTTz7ZquOuXbs2yX9fAb437M5zfeWVV9K3b98Ou886AAAAAAB0Bu+/+tR8/LOj8v6rTy12FIBOb7evLC8UCnnxxRezYsWKbN26NYVCYZdzJ06cuLuH2yt69OiRAw88MIsWLUqhUGjTvbKPO+64dO/ePffdd1/OPPPM7L///klef51uuOGG7Nixo9nrsGDBghx44IEtlj5vvCq7cUn4V199NevWrWvaX6NCoZCbb74569evz5FHHpmqqqpmj0+ZMiVJctNNN7X6ObRWW59ro1WrVmXdunUZP358h2cCAAAAAAAAaI3dKstnzZqVX/3qV1mzZk2r5r9VyvIkGTNmTG6++eYsWrQow4cPb/V23bt3z8c//vF8//vf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XLgwX//615MkGzduzO23354777wzNTU1ufzyyzssNAAAAAAAQGdUvnx5smNHUlGRhoEDix0HoFNrd1k+Z86cVFdX5+KLL97p4z179syll16at73tbbnuuusyfPjwnHnmme0OCgAAAAAA0NnVnn12KurqsmPQoCyfM6fYcQA6tfL2brhq1arU1tame/fuSV6/J3mSbN++vdm8iRMnpm/fvpk2bdpuxAQAAAAAAACAjtPusryioiJdunRp+rlbt25JknXr1rWY27dv39TV1bX3UAAAAAAAAADQodpdlvfv3z9r165t+nnw4MFJkqeffrrZvK1bt2bZsmXtPQwAAAAAAAAAdLh2l+UHH3xw1q9fn02bNiVJRo8enST5j//4j8ydOzdbt27N8uXLc+2112bLli059NBDOyYxAAAAAAAAAOymyvZuOGbMmMyYMSNz5szJhAkTcsQRR+S4447Lo48+mn/4h39ofpDKylxyySW7HRYAAAAAAAAAOkJZoVAotGfDhoaGrFu3Ll27dk337t2TJNu3b89tt92WWbNmZeXKlamurs5hhx2WKVOm5KCDDurQ4JSulStXpr6+vtgxAAAAAACgww0cPToVdXXZMWhQls+ZU+w4tFJVVVVqa2uLHQNoo3aX5VAsynIAAAAAADorZflbk7Ic3pravAz7n/70p8yePTt1dXVJkoEDB2bcuHF55zvf2eHhAAAAAAAAAGBPaFNZ/sMf/jD3339/s7GlS5dmzpw5eeSRR/KZz3ymQ8MBAAAAAAAAwJ7Q6rJ81qxZTUX56NGjM3LkyBQKhSxYsCBz5szJgw8+mBkzZmTixIl7LCwAAAAAAEBntuo3v0nZjh0pVFQUOwpAp9fqsnz69OlJkg996EM5++yzm8bPPffc/P73v88vfvELZTkAAAAAAMBu2DF8eLEjAJSM8tZOXLx4cXr27NmsKG90zjnnpGfPnnnxxRc7NBwAAAAAAAAA7AmtLss3btyYQYMG7fLxQYMGZfPmzR0SCgAAAAAAAAD2pFYvw14oFFJZuevpFRUVaWho6JBQAAAAAAAApajbrbembMuWFLp1y5YLLih2HIBOrdVlOQAAAAAAAHtWr2uuSUVdXXYMGqQsB9jD2lSWL1myJFdfffVOH3vppZeSZJePl5WV5Wtf+1ob4wEAAAAAAABAx2tTWb558+bMnz//Tef8pccB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dlnTP1dddVVrnioAAAAAAADAX7TPX1n+6quvJkmLJdj/ktGjR+eGG27IT3/608ydOzfHHHNMRowY0eIq5pEjR6ZPnz657bbbsnjx4hx77LEZMWJEDjjggJSVle10341Xjr9R4/Loixcvbhp79tlnkyRPPPFE5s6d22KbioqKvPzyy00/L1q0KEly9NFHt+m5tkavXr1y/PHHZ/bs2c2WPp82bVrKyspy6qmnNsvR0NCQbdu25aabbmqxr7q6uiSvX/U/evTodr2GjV8eaPz73ZkLLrggkyZNavp5V/sCAAAAAAAAaKt9vixvvFp527ZtbdpuwIABueaaa3LzzTfniSeeyIMPPpgkGTJkSC6++OKMHTs2SdK9e/dcc801uemmmzJnzpw8/vjjSZL+/fvnPe95T84888wW++7du/dOx8rKyrJ58+amsY0bNyZJbrnlllZl3rRpU8rKytp9Ff1fcvrpp2f27NmZNm1aPvCBD2TVqlWZO3dujjzyyGZXsjfmXrhwYRYuXLjL/b322mtJ2vcaNv59dunSZZf7r6qq2ukS7gAAAAAAAAC7a58vyxuXTG8scNviwAMPzN/+7d9m+/btef755/PEE0/krrvuyve+97307du36WrwAQMG5BOf+EQaGhqyZMmS/PnPf85dd92Vn/70p+nRo0fe+c53Ntvv+vXrW1yhvn79+hQKhXTv3r1prPH+2v/+7//eqntt9+jRI4VCIevWrdutJdd3ZdSoURkyZEhmzJiRSy65JNOmTUuhUMhpp53WbF5j1kmTJuWDH/xgq/bd1tew8e9zZ0viAwAAAAAAAOxp+/w9y/fff/+UlZU1Lf3dHpWVlTn00EMzZcqUfPjDH06hUMhjjz3WYl55eXmGDRuW888/P5/+9KeTJI8++miLeQsWLGgx9vTTTydJhg0b1jR2yCGHJPnv5dj/koMPPjhJ8uc//7lV89vjtNNOy/r16/Poo49m+vTp2W+//TJmzJhmc4YPH56ysrJW536j1r6Gr7zySpLkgAMOaMezAAAAAAAAANg9+3xZ3qNHjxx44IFZtGhRCoVCq7d77rnnsn79+hbj69atS/Lfy7svWbIkK1eubDGvcdvGeW901113Zc2aNU0/b926NVOnTk2STJgwoWn8jDPOSEVFRX72s59l1apVLfazadOmvPDCC83ml5eX58Ybb2yRqVAo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kbnqqquKE7RE7dixI1dccUXe/va357Of/Wyx4wAAAAAAAAAlrFOV5dOnT8+LL76Yj3/8483GN2/enG9+85vZvn17JkyYkJ49e2bAgAFFSlm6Kioq8t73vjf/8i//koULF+awww4rdiQAAAAAAACgRHWae5Y3NDRk6tSpGTlyZIYPH97sseeeey4bNmzIe97znvzv//2/M2XKlJx88snFCVriJkyYkN69e+emm24qdhQAAAAAAACghHWasvyxxx7LqlWrMmHChBaPrV27NknSp0+fvZyK/6mioiLjx4/PU089lWXLlhU7DgAAAAAAAFCiOs0y7NOnT09ZWVlOOOGEZuNTpkxp+vN1112X6667Lkly5ZVXZtSoUVm2bFluvfXWzJs3L+vWrUvXrl1TU1OTUaNG5YMf/GDTtmvXrs1tt92Wxx9/PKtXr051dXX69euXww8/PJdeemm6d++eJPnRj36UGTNm5Ac/+EEeeOCBTJs2LWvWrEn//v1z+umnZ9KkSSkvb/kdhfnz5+f222/Ps88+my1btqSmpibjxo3LBRdckC5durSYv2DBgtx555155plnsmnTpvTu3TsHH3xwJk2alBEjRrTrNZw3b16uvvrqTJ48Occdd1x+/etfZ+HChSkrK8sRRxyRD33oQztdvn7hwoW55ZZb8swzz2Tbtm2pra3NuHHjcv755+80+9ixY/OHP/wh06dPz/ve9752ZQUAAAAAAADYHZ2iLC8UCpk/f36GDBmSHj16NHts8uTJWbx4cR599NEcd9xxGTZsWJKktrY2a9asyZe+9KVs3bo1xx57bIYMGZKtW7emrq4ud911V1NZ/tprr+WrX/1qVq5cmaOOOirHH398tm/fnuXLl2f69Ok577zzmsryRj//+c/z7LPPZuzYsamurs5DDz2UX/7yl6mrq8vHPvaxZnPvueee/PSnP02PHj0yevTo9OrVK4sWLcott9ySefPm5corr0xl5X//Vf3xj3/M9ddfn+rq6owZMyY1NTVZs2ZNFi5cmAcffLDdZXmj559/PnfccUdGjhyZ008/PYsXL84jjzySJUuW5J//+Z9TXV3dNPfBBx/M97///VRWVmbs2LHp3bt3nnzyyUydOjVz587NlVdemaqqqmb7P+igg1JZWZmnnnpqt3ICAAAAAEBnc+df/zTlDTvSUF5R7CgAnV6nKMtf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h+kMnMe81TmHAegIynIAAAAAAAAASo6yHAAAAAAAAICSoyznLaOqqiqTJ09OVVVVsaNAuziH6Qycx7zVOYfpDJzHdAbOY97qnMN0Bs5j3uqcwwB0hLKCG3oAAAAAAAAAUGJcWQ4AAAAAAABAyVGWAwAAAAAAAFBylOUAAAAAAAAAlJzKYgeAv+S5557LzTffnGeeeSbbt2/P0KFDc8455+Sd73xnsaNRYtasWZMHHnggjz/+eF5++eWsW7cuPXv2zGGHHZbzzz8/hxxySLP5N910U6ZOnbrTfVVVVeVXv/rVTh+bNWtWfv/732fp0qWprKzMoYcemilTpuTggw/u8OdEabr88suzcuXKnT52+umn52Mf+1izsc2bN+fmm2/OQw89lHXr1qVPnz454YQTctFFF6V79+473Y/zmD1l+vTpue666950zhFHHJGvfe1rSbwXU1wzZ87M008/neeffz5LlizJ9u3b8zd/8zc5+eSTdzp/b7zfLlu2LL/+9a8zb968bN26NYMHD87pp5+eM844I+XlvktNS609j7dv355HH300c+bMyXPPPZdVq1alrKwsQ4cOzcSJE/Oud72rxTm2YsWKfOITn9jlsT/96U9n/PjxLcadx7RVW96P99ZnB+cxbdGWc3jKlCl/cX/XXXddampqkngvZu9o6+/UEp+NAdh7lOXs0+bNm5d/+Id/SGVlZcaNG5fu3bvn4Ycfzg9+8IOsWLEi733ve4sdkRJy11135Xe/+10GDhyYo446Kr17986yZcvyyCOP5JFHHsmnP/3pjBs3rsV2EydOTG1tbbOxioqKnR7jlltuyY033piampq8613vytatWzN79ux89atfzZe//OWMGjVqjzw3Sk/37t1z9tlntxj/n/8BuXXr1lx11VVZvHhxjjrqqIwfPz4vvvhifv/732fevHn5+te/nq5duzbbxnnMnjRs2LBMnjx5p4899NBDeemll3L00Ue3eMx7McXwm9/8JitXrsx+++2Xvn377vKLSsneeb9dunRpvvKVr+S1117L2LFj069fvzzxxBP52c9+lhdffDEf//jH98jrwFtba8/j5cuX57vf/W66deuWUaNGZfTo0dm8eXPmzJmTn/70p3niiSfyuc99LmVlZS22PfDAAzNmzJgW4/vvv3+LMecx7dGW9+NGe/Kzg/OYtmrLObyrz8p1dXWZNWtW3va2tzUV5W/kvZg9qa2/U/PZGIC9SVnOPmvHjh358Y9/nLKyslx99dV5+9vfniS56KKL8pWvfCU333xzxo4dm8GDBxc5KaVi+PDhufrqq3P44Yc3G1+wYEG+/vWv59/+7d8yZsyYVFVVNXv85JNPblWxsmzZstx8880ZPHhwvvGNbzR9S/ass87Kl770pfz4xz/O9773vV3+ggbaokePHq264uD222/P4sWLc9555+UDH/hA03jjFTe33357s/04j9nThg0blmHDhrUY3759e+6+++5UVFRk4sSJLR73XkwxfPzjH8/gwYNTW1ub2267LTfccMMu5+6N99v/9//+XzZv3pwvfOELOfbYY5Mkl1xySb7xjW/k3nvvzfjx43PEEUd09MvAW1xrz+Nu3brlox/9aCZOnJguXbo0jW/dujVXX3115syZkwcffDBjx45tse2wYcNa9bkkcR7TPm15P260Jz87OI9pq7acw7t6P/3Zz36WJDnttNN2+rj3Yvaktv5OzWdjAPYma4mwz3rqqaeyfPnyjB8/vqkoT17/JcyFF16YHTt25L777itiQkrNCSec0OJDfZIcfvjhOeKII7Jx48YsWbKk3fu/7777smPHjrz3ve9ttpzU/vvvnwkTJmT58uV56qmn2r1/aKtCoZB77703Xbt2bXF1wnve85706NEj06ZNS6FQaBp3HlMsDz/8cF599dUce+yx6dOnT7v34xymIx111FEtrkrcmb3xfvvKK69kwYIFGTVqVNMvA5OksrIyl1xySZLk3nvvbfdzpfNq7Xncr1+/nHHGGc2K8iTp2rVrzjnnnCTJ/PnzdyuL85j2au153B7ej9kbdvcc3rZtW+6///5UVlZmwoQJu5XFOUx7tOV3aj4bA7C3KcvZZ82bNy9JdrqU6lFHHZXk9W8fwr6g8ZupO7vScMGCBfnd736XO+64I4899ljq6+t3uo/GXx7u7JxvHNvdXzBCo/r6+kyfPj233HJL7rnnnixevLjFnGXLlmXt2rU57LDDWixvVl1dncMPPzxr1qxJXV1d07jzmGKZNm1akl1fKeO9mH3Z3ni/fbP5w4cPT48ePZzb7DGVla8varerVTnWrl2be+65J7feemumT5+e1atX73Se85i9aU99dnAeUwwPP/xwNm3alOOOOy69evXa6RzvxRTL//ydms/GAOxtlmFnn9X4gWdny6z37Nkz++23X5YtW7a3Y0ELq1atypNPPpk+ffrkgAMOaPH4TTfd1Oznvn375vLLL2/60kejZcuWpWvXrju9IrLx3wPnPB1l3bp1ue6665qNHXPMMfnEJz7R9MuTN3sffuP4smXLmv3ZeczetnLlyjz55JPp169fjjnmmJ3O8V7MvmxvvN82/nnQoEEt5peVlWXQoEFZtGhRXnvttRZXBsPualwR7H++5zaaO3du5s6d2/RzRUVFzjrrrHzgAx9Iefl/f8ffeczetKc+OziPKYbGL5aeeuqpu5zjvZhi2Nnv1Hw2BmBvU5azz9q8eXOSNFs65426d+++y2+5wt6yffv2XHvttamvr2/xH5DDhg3L5ZdfnpEjR6Z3795Zs2ZNZs+enVtvvTXf/OY38w//8A/N7ru7efPm9O7de6fH6datW5Jky5Yte/T5UBpOOeWUjBw5MkOHDk1VVVWWLl2aqVOn5vHHH8+3vvWt/P3f/33Kysr+4vtw43nZOK/xz85j9rb77rsvhUIhJ598crP34cR7MW8Ne+P9ti3H8AtBOtJ//dd/5fHHH88RRxzRbJnTJOnSpUsmT56c448/PgMHDkx9fX2eeeaZ/OpXv8qdd96ZysrKXHrppU3zncfsDXv6s4PzmL1txYoVmTdvXmpqanb6pSXvxRTLrn6n5rMxAHubZdgB2qmhoSH/8i//kgULFuS0005rcd+v448/PhMnTkxtbW2qq6szaNCgXHjhhbnssstSX1+fW265pUjJKXWTJ0/OyJEj06tXr3Tr1i2HHHJIPv/5z2fEiBF55pln8vjjjxc7IrRaQ0NDpk+fnrKysp1eKeO9GKB4Hnvssfz0pz9NbW1tPvnJT7Z4vHfv3pkyZUqGDRuWbt26pVevXjnuuONy5ZVXZr/99sudd96ZjRs3FiE5pcxnBzqbxns77+yLpYn3YorjL/1ODQD2JmU5+6zGb/a98VuCb7R58+ZdfvsP9rRCoZCf/OQnuf/++3PSSSflr/7qr1q97cknn5yKioosXLiw2Xj37t13eb43fvu18Zut0NHKy8tz8sknJ0mefvrpJH/5fbjxvHzje7HzmL1t7ty5WbVqVY444ogMGDCg1dt5L2Zfsjfeb1t7DOc3HeWJJ57IP//zP6dPnz752te+lr59+7Z62z59+uQd73hHtm/fnkWLFjWNO48ppo767OA8Zm9qaGjIjBkzdvnF0jfjvZg95S/9Ts1nYwD2NmU5+6zGe8bs7L6gGzduzKuvvrrLe9fAntT47df77rsv48ePz+WXX77Tb2fvSmVlZbp27ZrXXnut2fjgwYOzdevWrFu3rsU2jf8eOOfZkxrvVb5t27Ykb/4+/MbxN56XzmP2ttbcf3FnvBezL9kb77eNf268B+QbFQqF1NXVpW/fvunatWv7ngS8wRNPPJFvf/vb2W+//XLllVdm4MCBbd7HfvvtlyTN3qedxxRTR312cB6zNz3xxBNZvXp1jjrqqNTU1LR5e+/FdLTW/E7NZ2MA9jZlOfuskSNHJkn+/Oc/t3hs7ty5SZLDDz98r2aChoaG/PjHP8706dMzbty4fPKTn2xTUZ68/iF906ZNqa2tbTb+Zud841jjHNgTnn322SRpOjcHDx6cvn37ZuHChdm6dWuzudu2bcuCBQvSt2/fpv+QTZzH7F2vvvpqHn300fTs2TPHH398m7b1Xsy+ZG+8377Z/Oeeey6bNm1ybtMhGovynj175sorr2x23rbFc889lyTNVg1xHlNMHfXZwXnM3tT4xdLTTjutXdt7L6YjtfZ3aj4bA7C3KcvZZx155JEZOHBgZs+encWLFzeNb9myJb/97W9TUVHRtGQw7A1v/FB/4oknvmlRvmXLlrz44ostxjdu3Jgf//jHSZLx48c3e6xxWb9bbrml2TJQL730UmbOnJmBAwfmiCOO6MBnRClaunRpNm3a1GL86aefzp133pmqqqqccMIJSZKysrKcdtpp2bp1a6ZOndps/m233ZZNmzbltNNOS1lZWdO485i9aebMmdm+fXtOOumkVFVVtXjcezFvFXvj/XbIkCE5/PDDM2/evDz22GNN49u3b8+NN96YpP2/SIdGjUV5jx49cuWVV/7FlTiee+65bN++vcX4nXfemYULF2bo0KE58MADm8adx+xpe+Ozg/OYvWXDhg2ZM2dO9ttvvxx33HG7nOe9mL2hLb9T89kYgL2trFAoFIodAnblqaeeyj/8wz+kqqoq48ePT7du3fLwww9nxYoVueSSS/Le97632BEpITfddFOmTp2arl275uyzz97ph/rjjz8+w4YNy4oVK/KJT3wiBx98cPbff//07t07a9asyRNPPJFXX301Rx11VL7whS+ksrKy2fa33HJLbrzxxtTU1OTEE0/M1q1bM3v27Gzbti1f/vKXFTTstptuuim333570/2dKysr89JLL2Xu3LkpKyvLX/3VXzX7D8KtW7fma1/7WhYvXpyjjjoqBx10UF588cU8/vjjGTZsWL7+9a+3WJbMecze8n//7//NSy+9lO985zs54IADWjzuvZhiu/fee/P0008nSZYsWZIXXnghhx12WNNVMGPGjGlaFWFvvN8uXbo0X/nKV7Jt27aMHTs2ffv2zZ///Oe8+OKLOfXUU/N//s//2QuvCm81rT2PX3755Xzuc59LfX19xo0blyFDhrTY14ABA5p94fmqq67Kyy+/nJEjR6Z///7Ztm1bnn322bzwwgvp0aNHvvrVr+aggw5qtg/nMe3R2vN4b312cB7TVm35TNHojjvuyH/8x39k0qRJ+eAHP7jLfXsvZm9oy+/UEp+NAdi7lOXs85577rncdNNNeeaZZ7J9+/bsv//+Ofvss3PSSScVOxol5kc/+lFmzJjxpnP+5m/+JieffHI2b96cX//613n22WezcuXKbN68OV26dMkBBxyQk046Kaeddtouv0F7//335w9/+ENeeumlVFZW5tBDD82UKVMyfPjwPfG0KDHz58/P3XffnRdeeCHr16/Ptm3b0qdPnxx22GGZNGnSTs+zzZs35+abb86DDz6YdevWpU+fPjnxxBNz0UUXpXv37js9jvOYPe25557Ll770pQwfPjz/+I//uNM53osptr/02WHy5MmZMmVK08974/32lVdeyY033ph58+Zl69atGTRoUE4//fSceeaZbb61DKWhtefxvHnzcvXVV7/pvkaOHJmrrrqq6ed77703Dz30UF566aVs2LAhyeu3gznmmGNy7rnnpn///jvdj/OYtmrtebw3Pzs4j2mLtn6mSJLPfOYzefnll/Pd7343Q4cO3eW23ovZG9ryO7VGPhsDsLcoywEAAAAAAAAoOb4eBQAAAAAAAEDJUZYDAAAAAAAAUHKU5QAAAAAAAACUHGU5AAAAAAAAACVHWQ4AAAAAAABAyVGWAwAAAAAAAFBylOUAAAAAAAAAlBxlOQAAAAAAAAAlR1kOAAAAAAAAQMmpLHYAAAAA9h3Tp0/PddddlyS58sorM2rUqGaPFwqFfOpTn8ry5cszcuTIXHXVVUVI+ebe+BzeTG1tbX70ox9lypQpmTx5cqZMmbIX0rXeddddl7Vr1+bLX/5y09iqVaty22235cknn8yqVatSXV2dfv365ZBDDsnkyZNTU1OTJLnxxhvz+OOP5xvf+EbKy31PHgAAAHZGWQ4AAEAL3bp1y7Rp01qU5fPnz8/y5cvTrVu3IiX7y4499thcc801zca+8pWv5MQTT8ykSZOaxqqqqpIk11xzTfr3779XM/4lL7zwQmbMmJF//Md/bBpbvXp1Pv/5z6dHjx6ZNGlShgwZks2bN2fp0qV54IEHsmLFiqay/Lzzzsvdd9+dGTNm5JRTTinW0wAAAIB9mrIcAACAFsaOHZtZs2blIx/5SLp37940Pm3atBx66KHZsmVLEdO9uV69eqVXr14txnv37p1DDz20xfjOxorttttuy/Dhw3PwwQc3jd1777159dVX841vfCMDBgxoGj/++OPz3ve+Nw0NDU1j3bt3z0knnZTbbrstJ598csrKyvZqfgAAAHgrUJYDAADQwjvf+c7MmjUrs2fPzrve9a4kyebNm/PQQw/lwx/+cP7whz+02Gb79u353e9+l/vvvz8rVqxIt27dMnr06HzgAx9oVl7/6U9/yrRp07JkyZJs2rQpAwYMyHHHHZcLL7wwXbt2bZr3ox/9KA8++GC+/e1v5/rrr8/8+fPTs2fPjB07Nu973/uargzfXf9zGfbGZdy/9rWvZdasWXn44YezY8eOjBkzJh/96EezdevW/OxnP8vcuXNTXV2dd77znbn00ktTWfnf/4nd2tdiZ9atW5eHH344l112WbPxV199NWVlZbvc/n8utz5hwoT88Y9/zLx583LEEUe045UBAACAzk1ZDgAAQAvdunXLiSeemPvuu6+pLJ81a1bKysoybty4FmV5Q0NDvvWtb2XBggU5//zzc+ihh2bVqlW56aabctVVV+Wf/umfUl1dnSRZtmxZ3vGOd+Tss89O165d8/LLL+d3v/tdnnvuuVx55ZXN9rtjx45885vfzKmnnppJkyZlwYIF+e1vf5vu3btn8uTJe/Q1+PGPf5zjjz8+V1xxRV544YX8+te/zo4dO/LKK6/k/2/vXkKi7OI4jv/GycdQp4slooONSDloZOVUMhalEF0hiOgeLttEEQTFtBBbualFtIp2takWdqMyMox0bDF00cZE4wlEJBImqVERzeZdRPO+48yY1nR5ne9nN+f2nPPf/jhnysvLtXHjRr169Uq3bt1SVlZW+In36dQilvb2do2Pj0c9gV9UVKQHDx7o3Llz2r59u4qKiiJu/U9UWFio2bNn6/nz54TlAAAAAADEQFgOAAAAAIipqqpKZ86cUW9vr/Lz89XU1CS32x3z/8qfPn2qly9f6sSJEyovLw+3OxwOeTwePX78WJs2bZIk7dq1K9wfCoXkdDplt9tVW1urnp4eORyOcP/nz5+1Z88eud1uSdKyZctkmqZaWlp+eVheVlam6upqSVJpaam6u7vl9XpVXV0dDsZLS0vV1tam5ubmcNt0ahFLd3e3DMOQ3W6PaF+3bp06Ozv16NEjtbW1yWKxKC8vTytWrNDWrVsjnmaXvt40dzgc6urqSkg9AAAAAACYaQjLAQAAAAAxlZSUKCcnR01NTaqsrJRpmuHweKJnz54pIyNDLpdL4+Pj4faCggLNmzdPHR0d4YD4/fv3unr1qvx+vz59+qRQKBQe39fXFxGWWywWuVyuiG85HA75/f5EHjWmid+12+3y+XwqKyuLam9vbw//nk4tYvnw4YPmzJkT9T/jFotFhw8f1s6dO/XixQuZpqnOzk7dvXtXjY2N8ng8KikpiZgzd+5cmaY57bMDAAAAAJAMCMsBAAAAADFZLBZVVVXp/v37Gh0dVW5uroqLi2OO/fjxo4aGhnTgwIGY/cFgUJI0MjKimpoaGYahffv2KTc3V2lpaQoEAjp79qxGR0cj5hmGEfVk+axZszQ2NpaAE04uMzMz6rvx2v+776nWIp6xsbFJ/489Ozs7ImxvbW3V+fPndeXKFdXV1UWMTU1NjaopAAAAAAD4irAcAAAAABBXZWWlrl27pocPH2r//v1xx9lsNtlsNp0+fTpm/7en2/1+vwYGBlRbWxtxC3poaCixG/+DplqLyea/fft2yt+rqKjQzZs31dvbG9U3ODgom8025bUAAAAAAEgmhOUAAAAAgLiysrK0Y8cO9fX1acOGDXHHuVwutba26suXL1qyZMl31/12S/ubxsbGn97r32K6tZgoLy9PXq9Xw8PDSk9PD7cPDAxo/vz5UeNHRkYUCARi9vX39ys/P3/aewAAAAAAIBkQlgMAAAAAJnXw4MHvjlm7dq1aWlpUV1enbdu2afHixbJarQoEAuro6NDq1au1Zs0aOZ1OZWRk6NKlS9q9e7esVquam5vV09PzG07ye0y1FvEsXbpU169f15s3b7R8+fJwe319vbq6ulRRUaGCggIZhqH+/n41NDQoGAzq0KFDEesEg0G9e/dOW7Zs+WVnBQAAAADg/4ywHAAAAADw01JSUnTy5Endu3dPT5480Y0bN2S1WrVgwQIVFxdr0aJFkr4+Me7xeHT58mVduHBBaWlpWrVqlY4fP65Tp0794VMkxlRrEY/T6VR2drZ8Pl9EWL5+/XpJktfr1e3btzU8PKzMzEwVFhbK4/Fo5cqVEev4fD5ZrVa53e7EHxIAAAAAgBnAEgqFQn96EwAAAAAA4F937txRfX29Ll68KMMwfmiNmpoaLVy4UMeOHUvw7gAAAAAAmBlS/vQGAAAAAABApM2bNys9PV0NDQ0/NP/169cyTVN79+5N8M4AAAAAAJg5CMsBAAAAAPjLGIaho0ePKjU19YfmDw4O6siRI8rJyUnwzgAAAAAAmDl4hh0AAAAAAAAAAAAAkHS4WQ4AAAAAAAAAAAAASDqE5QAAAAAAAAAAAACApENYDgAAAAAAAAAAAABIOoTlAAAAAAAAAAAAAICkQ1gOAAAAAAAAAAAAAEg6hOUAAAAAAAAAAAAAgKRDWA4AAAAAAAAAAAAASDqE5QAAAAAAAAAAAACApENYDgAAAAAAAAAAAABIOv8AW+Sok1fVhpYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6)) \n", + "plt.style.use('ggplot')\n", + "\n", + "x_max = max(df[\"time\"])\n", + "pivot_df = df.pivot_table(index=['driver', 'optimized-read'], columns=['format', ], values='time', aggfunc='mean')\n", + "baseline_original = pivot_df['original'].max()\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='barh', figsize=(20, 8), fontsize=14, width=0.5)\n", + "\n", + "plt.xlim(0, x_max)\n", + "\n", + "plt.suptitle('Cloud-optimized HDF5 performance (less is better)', fontsize=18)\n", + "# plt.title(\"Default I/O parameters (ATL03_20181120182818_08110112_006_02.h5: 7GB)\", fontsize=14)\n", + "plt.xlabel('Mean Time (S)')\n", + "plt.ylabel('Access Pattern', fontsize=16)\n", + "plt.xticks(rotation=0)\n", + "plt.legend(title='Format', fontsize=14, loc='upper right', bbox_to_anchor=(1.15, 1.015))\n", + "plt.grid(False)\n", + "\n", + "plt.axvline(x=baseline_original, color='red', linestyle='--', linewidth=2, label=f\"Baseline: {baseline_original:.2f}\")\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"h5py-default.png\", transparent=True, dpi=150)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c39fb04d-f35d-43e6-a506-26b5d7edc0c5", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv(\"h5py-atl03-benchmarks.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "4b3fbc1c-25de-49a8-b58d-5f845cb7f53b", + "metadata": {}, + "source": [ + "The following cell is experimental, it plots the access pattern signature and the reads on a remote HDF5 file, optimized or not, we can only record the info using fsspec for now as ROS3 logging requires to compile h5py from scratch using custom flags. " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2fb9f951-6a83-4e09-b3e0-0c00f67eea73", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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mrXViEhE39/uCAAAAAAAAOxWREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAoGRLly6NCy64ICZMmBBNTU3xxBNP9NpnypQpcc011/TYNnv27Bg5cmQsXLgwIiIuv/zyaGpq6v7nwx/+cJx77rnxq1/9qt9rXLNmTXz1q1+NY489NvbZZ59ea3nXY489Fscff3yMHDkyjj/++Hj88cd7fH/55ZfHX/3VX/XY9uijj8aoUaPi1ltvjYiIm266KT74wQ9GQ0NDNDQ0xP777x+f/exn42c/+1m/z6M/REEAAAAAAABKtn79+hg7dmzMmDFjm8fMnDkzrr/++pg9e3acfvrp3dv/4i/+IpYtWxbLli2LefPmRWVlZVxwwQX9XmNHR0fsueeeMW3atBg7duwW93n22WfjK1/5SkyePDmefPLJmDx5clxyySXxX//1X1s97ty5c+Oyyy6LGTNmxKWXXtq9ffTo0bF8+fJYvnx5/OhHP4pRo0bFueeeG2+99Va/z6VUVWWbGQAAAAAAgN3eCSecECeccMI27VssFuPqq6+Ohx56KO6///742Mc+1uP7AQMGRENDQ0RENDQ0xFe/+tX43Oc+F6+++mrsueeeJa9x3333jeuuuy4iIubNm7fFfWbPnh2TJk2Kyy67LCIiLrvssli6dGnMnj27+y7A97r11ltj5syZ8Q//8A/x6U9/usd3lZWV0djYGBERjY2N8bd/+7dx//33x69//esYP358yefRH+4UBAAAAAAAYIfbvHlzTJs2LR599NFYsGBBryD4h9ra2uLhhx+O/fbbL4YOHbrD1/eLX/wiJk2a1GPbcccdF88++2yvfb/1rW/FrFmz4nvf+16vIPiHNm7cGA888ED82Z/9WRxwwAHbdc194U5BAAAAAAAAdri5c+dGRMSTTz651Tj2r//6r3HggQdGxDuPJW1sbIzvf//7UVGx4+9zW7t2bdTX1/fYVl9fH2vXru2x7amnnopFixbFvHnz4phjjtnisV544YXYb7/9IiKivb096urq4q677orBgwfvkLVvC1EQAAAAAABgFzX82U9FZUfLTp9384CGWHf449v1mEcccUT88pe/jBtuuCFuu+22qKrqnakmTpwY119/fUREvPHGG/H9738/zjvvvHjsscdin3326bX/ww8/HNOnT+/+fN9998WRRx5Z8hoLhUKPz8Visde2MWPGxGuvvRYzZ86MQw89NOrq6nodZ//994977703It654/GRRx6JCy+8MBYuXBiHHnpoyevrD1EQAAAAAABgF1XZ0RKVHa+UexnbxcEHHxzXXHNNnHXWWXHJJZfEbbfdFtXV1T322WOPPWLkyJHdnz/ykY/EwQcfHHPmzOkR/971iU98osc7+vbaa6+S11dfXx8tLT0D7Lp162L48OE9tu21115x1113xdSpU+Pcc8+NOXPm9AqD1dXVMWrUqO7P48aNi8cffzzuuOOOuO2220peY3+IggAAAAAAALuozQMaUs17yCGHxIMPPhhnnXVWfPnLX4477rijVxh8r0KhEBUVFbFhw4Ytfl9XV7fFO/VKcdhhh8XTTz8dF198cfe2xYsXx+GHH95r36ampliwYEFMnTo1zj777Jg7d+4ffTRoZWXlVs9jZxAFAQAAAAAAdlHb+xGeO0JbW1usWrWq+/Pq1atjxYoVMXTo0Ghqauq1/9ixY2P+/PlxxhlnxMUXXxx33HFHDBgwICIiOjo6uu/We/PNN+Puu++Otra2OPHEE/u9zhUrVnSv97XXXosVK1bEgAED4qCDDoqIiAsvvDAmT54c//iP/xgnnXRSLFq0KJ5++ulYuHDhFo/3wQ9+sFcYHDJkSEREbN68OdasWdM93yOPPBIrV66Mr33ta/0+j1KJggAAAAAAAJTsueeei6lTp3Z/vvbaayMiYurUqTFr1qwtjhk9enTMnz8/zjzzzLjooovirrvuioiIp556qvtxoHV1dXHAAQfEHXfcERMnTuz3Ok866aTu3z///POxcOHC2GeffeKZZ56JiHfeeXjrrbfGjTfeGN/5znfiQx/6UNx2220xYcKErR5z7733joceeqhHGIyIWLlyZYwbNy4i3nkk6oc+9KG48cYb48wzz+z3eZRKFAQAAAAAAKBkEydOjJdeeul991mwYEGvbQcddFAsW7as+/OsWbO2GhG3hz+2xoiIz3zmM/GZz3xmq99vaX2NjY2xePHi7s9XXHFFfP3rX4+qql0rw1WUewEAAAAAAADAjiUKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAlW7p0aVxwwQUxYcKEaGpqiieeeKLXPsViMW666aaYMGFC7L///jFlypRYuXJlj32OPPLIuOuuu3qMufbaa+Oggw6Kn/70pxERMWXKlGhqaoqmpqbYZ5994qMf/WhcfPHF8dvf/rbf57Fy5cq46KKL4sgjj4ympqYea3mv733ve3HUUUfFqFGj4pOf/GQ888wzvc515syZMW7cuBgxYkScdtpp8cILL/TY57DDDos77rijx5hrrrkmRo4cGU8//XRERJx22mnR0NAQDQ0N0djYGGPHjo0LL7ww/vd//7ek8xMFAQAAAAAAKNn69etj7NixMWPGjK3uc+utt8add94ZM2bMiMceeyzq6+vj7LPPjtbW1i3uv3nz5rjiiitiwYIF8eCDD8YxxxzT/d25554by5Yti1/84hfxT//0T/Hyyy/HZZdd1u/zaG9vjxEjRsSVV14ZDQ0NW9znBz/4Qfzd3/1dTJs2LRYtWhQf+9jH4rzzzouXXnqp17lef/31sWjRomhoaIipU6e+77lefvnlMX/+/Hj44Yfj2GOP7f7u/PPPj+XLl8fzzz8f99xzT7z88stx6aWXlnR+oiAAAAAAAAAlO+GEE2L69Olx8sknb/H7YrEYs2fPjmnTpsXJJ58cBx98cMyaNSva29tj4cKFvfbfuHFjfPnLX47FixfHww8/HIceemiP72tqarrvnjvssMPiC1/4Qixfvrzf53HooYfG1VdfHaeeemoMGDBgi/vcddddcdZZZ8U555wTBx54YFx33XXxwQ9+MO65555e5/qZz3wmxowZE7fccku0t7fHQw89tMVzvfDCC+MnP/lJ/OAHP4jx48f3+L62tjYaGxujsbExDj/88PjiF79Y8rmKggAAAAAAAOwwq1evjpaWljjuuOO6tw0cODCOOuqoePbZZ3vs29bWFp///Odj5cqV8YMf/CAOPPDA9z3266+/Ho8++mivmLYjdHR0xPPPP9/jPCIijjvuuO7z2Nq5Tpw4MX7+85/3GNfW1hbnnHNOrFy5Mh599NE46KCD3nf+119/PX74wx/GhAkTSlp/VUmjAAAAAAAA2OEWfmphtLe07/R5axtq4/THT98ux2ppaYmIiOHDh/fYXl9f3+tdgM3NzTFo0KD493//9177v+uee+6J+++/P4rFYrS3t8eoUaNi7ty522Wt7+e1116LzZs391rX8OHDu8/x3V/r6+t77FNfX9/rXYB///d/H3V1dfH000/32v9dd999d9x3330R8c5jWvfff/+YN29eSet3pyAAAAAAAMAuqr2lPdpeadvp/+yIEFkoFHp8LhaLvbZNmjQp2tvb47vf/e5Wj3P66afHv/zLv8STTz4ZjzzySOy3337v+37C7373u3HggQd2//Pe9//tqPPYln2OP/74WL9+fTQ3N291rsmTJ8ePf/zj+PGPfxw//OEPY+TIkXHGGWds9VzfjzsFAQAAAAAAdlG1DbW7/bwNDQ0REbF27dpobGzs3r5u3bped90dc8wxceGFF8YXv/jF6OrqihkzZvQ63uDBg2PkyJERETFy5Mi46aabYvz48fHP//zPcc455/Ta//zzz4/Pfvaz3Z/fu4a+GDZsWFRWVsbatWt7bH/11Ve77/R791xbWlqiqampx7n+4d2Axx57bHzpS1+KCy64IDZv3hzXX399rzmHDBkSo0aNioiIUaNGxc033xzjxo2LRx55JM4777w+rV8UBAAAAAAA2EVtr0d4ltOIESOioaEhFi9eHIccckhEvPN+vqVLl8aVV17Za/9JkybF97///fjCF74QXV1d8c1vfrPXXXbvVVlZGRERGzZs2OL3Q4cOjaFDh/b7PAYMGBAf+chHYvHixfGpT32qe/vixYvjpJNOioie5/ruew47OjriZz/7WVx99dW9jnn88cfHfffdF+eff350dXXFt7/97X6d6/sRBQEAAAAAAChZW1tbrFq1qvvz6tWrY8WKFTF06NBoamqKQqEQX/rSl+KWW26JkSNHxsiRI+OWW26J2traOP30LUfPY445Ju6555644IILolgsxre+9a3uWLZhw4bud/etXbs2mpubo6amJiZNmtSv8+jo6Ij/+Z//iYiIzs7OeOWVV2LFihUxaNCg7jsTL7roovjrv/7r+OhHPxqHHXZY3HffffHSSy/F+eefHxHR41wPOOCAGDVqVDQ3N0dtbW1Mnjx5i/Mee+yxMWfOnDj33HOjWCzGDTfc0H2u7e3tsWbNmu5zvfnmm6OmpiaOP/74Pp+fKAgAAAAAAEDJnnvuuZg6dWr352uvvTYiIqZOnRqzZs2KiIhLL700NmzYEFdeeWW8+eabMX78+Jg7d27U1dVt9bgTJ06Me++9Nz7/+c9330UXETFnzpyYM2dORER84AMfiDFjxsQ999wTBxxwQL/OY82aNd13/EVE3H777XH77bfHn//5n8eCBQsiIuLUU0+N119/PW6++eZoaWmJ0aNHx7333hv77LNP97h3z3X69Onx5ptvxoQJE+LBBx9833M9+uij4/77749zzjknurq64jvf+U5ERNx7771x7733dp/r2LFjY+7cuSWda6FYLBb7PGo7eevii2PInXfG7373u+jrMgqFQuy9994ljf2jx37rrRiwdGl0HHVUFIcM2a7HZve0I683APLzswW7C9dq/xTeeitqHnssqpYti8LAgdF6ySXR9Z73RwB/mipXroznzrg5/mvdPrExBpR7ObuYd/+35q0dPE9dRFTEoBGD4pz/OH8HzwUA/fPWW2/FEP8+lkKhUIiqqvLcm/f22293v4fwvSrKsBYAAAAAAABgJxIFAQAAAAAAIDlREAAAAAAAAJITBQEAAAAAACA5URAAAAAAAACSEwUBAAAAAAAgOVEQAAAAAAAAkhMFAQAAAAAAIDlREAAAAAAAAJITBQEAAAAAACA5URAAAAAAAICyWbp0aVxwwQUxYcKEaGpqiieeeKLXPsViMW666aaYMGFC7L///jFlypRYuXJlj302btwYV111VRxyyCFxwAEHxBe+8IV4+eWXe+zzh8fv7OyMr3zlKzF+/Pj41a9+FRERRx55ZDQ1NUVTU1Psu+++MWHChLjiiivijTfe2P4nvxOJggAAAAAAAJTslVdeiU2bNpU8fv369TF27NiYMWPGVve59dZb484774wZM2bEY489FvX19XH22WdHa2tr9z7f+MY34vHHH49bb701HnnkkWhra4sLLrggNm/evMVjtre3xxe/+MV47rnnYuHChTF27Nju777+9a/HsmXL4j//8z/jlltuiaVLl8bVV19d8jnuCkRBAAAAAAAASjZ37tw4/PDD49prr43//u//7vP4E044IaZPnx4nn3zyFr8vFosxe/bsmDZtWpx88slx8MEHx6xZs6K9vT0WLlwYERFvvfVWPPDAA3HNNdfEpEmT4pBDDolbbrklXnjhhXj66ad7HfPNN9+Ms88+O1555ZVYuHBh7Lfffj2+r6uri4aGhth7773j6KOPjilTpsSKFSv6fG67ElEQAAAAAACAkl166aVx3XXXxa9//ev45Cc/GSeddFLMnj07Xn311e1y/NWrV0dLS0scd9xx3dsGDhwYRx11VDz77LMREfH8889HZ2dnj3322muvGD16dPc+72ppaYnJkydHV1dXLFiwIBobG993/t/97nfxb//2bzF+/Pjtcj7lUlXuBQAAAAAAALBln/rU8Ghpqdzp8zY0bI7HH1+3TfvW1NTEKaecEqecckqsW7cuFi5cGPPnz48ZM2bECSecEFOnTo0TTzwxqqpKy1ItLS0RETF8+PAe2+vr6+O3v/1tRESsXbs2BgwYEB/4wAd67fPu+Hd94xvfiBEjRsS8efOitrZ2i3N+61vfihtvvDG6urpiw4YNMX78+PjGN75R0vp3FaIgAAAAAADALqqlpTJeeWXnR8FSDR8+PC666KK46KKL4sc//nH8zd/8TSxatCgWLVoUhxxySL+OXSgUenwuFou9tv2hLe3zl3/5l/HEE0/EvffeGxdffPEWx11yySVxxhlnRLFYjJdffjm+/e1vx+c///l4+OGHo7Jy9/nv471EQQAAAAAAgF1UQ8Pm3Wre1tbWeOyxx2LBggXxzDPPxFFHHRVXXXVVHHTQQf1YS0NEvHM34Hsf9blu3bruuwfr6+ujo6Mj3njjjR53C65bty4OP/zwHsebPHlyfOITn4grrrgiurq64pJLLuk157Bhw2LkyJERETFq1Ki49tpr45RTToklS5bEpEmTSj6XchIFAQAAAAAAdlHb+gjPctq8eXP85Cc/iYceeiieeOKJ2HvvvWPKlCkxa9asaGpq6vfxR4wYEQ0NDbF48eLuuw07Ojpi6dKlceWVV0ZExEc+8pGorq6OxYsXxymnnBIREWvWrImVK1fGVVdd1euYU6dOjcrKyrj88sujq6srLr300vddw7t3B27YsKHf51MuoiAAAAAAAAAl++53vxt33nlnfPazn40HHnggjjjiiD6Nb2tri1WrVnV/Xr16daxYsSKGDh0aTU1NUSgU4ktf+lLccsstMXLkyBg5cmTccsstUVtbG6effnpERAwZMiTOOuusuO6662Lo0KExdOjQuO666+Lggw+OY489dovzfu5zn4uKioqYNm1adHV1xde+9rXu71pbW6OlpaX78aHf/OY3Y9iwYb3uOtydiIIAAAAAAACUbMqUKfGV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AAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACQnCgIAAAAAAEByoiAAAAAAAAAkJwoCAAAAAABAcqIgAAAAAAAAJCcKAgAAAAAAQHKiIAAAAAAAACRXVdbZhx4csbk+qqpKX0Z/xsbAiEHDBsWAgQOiurq69+dtGbOF7RH//+/3OnSviM7Sl8j2seeBe279v9M+6Nf1BgAAsJ1U1NVFYdSoqKqri4rt8O86AADA9rUr9oRCsVgs7uxJN2zYEDU1NTt7WgAAAAAAANhpOjs7t8tNS9tDWR4f2tbWFs3NzdHS0hLTp0+P9vb2Ph+jvb295LHQV643AAAAAABgW7W3t0dzc3N0du46j5Ms2zsFlyxZEh0dHbFq1aoo5WbFYrFY8ljoK9cbAAAAAACwrYrFYixZsqTcy+ihbFEQAAAAAAAA2DlEQQAAAAAAAEiuLFGwtrY2xowZE4MHD44pU6aU9ILF6urqksdCX7neAAAAAACAbbUrdoVC0UvSAAAAAAAAIDWPDwUAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIrqqck29++pyo/L//b6z9zI9KGl9fXx9r167dzqva/n70owHR3FxX7mXwHmec0RYXXrixT2N2l+sNAIAyaW2N6uXLo3PcuIg6P/8DAAD8KauqqoqhQ4eWexk9lDUKxlsvRKx5PjZt2hTFYrFPQwuFQkRESWN3tpaWyli2rNyr4L3+/M83R2dn5zbvvztdbwAAlEdh48aoeO212LRxYxQHDiz3cgAAAKAHjw8FAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4UBAAAAAAAgOREQQAAAAAAAEhOFAQAAAAAAIDkREEAAAAAAABIThQEAAAAAACA5ERBAAAAAAAASE4U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ThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAA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AKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAAAAAAAIoTBQEAAAAAAKA4URAAAAAAAACKEwUBAAAAAACgOFEQAAAAAAAAihMFAQAAAAAAoDhREAAA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FAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiREEAAAAAAAAoThQEAAAAAACA4kRBAAAAAAAAKE4UBAAAAAAA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FFy0aFE2bdqUJUuWZMuWLfP6gsXe3t55z4W5st8AAAAAAIBjdSp2hVbjS9IAAAAAAACgNLcPBQAAAAAAgOJEQQAAAAAAAChOFAQAAAAAAIDiTmoUvO6663LnnXce9fe/+7u/m7/+678+eScEAAAAAAAA3wNaTdM0xzr461//ej772c9meHg4u3fvzrnnnpvdu3dn9+7duf766zM4OJg77rgjO3bsyPj4eFqtVnp6ejI9PZ3rr78+f/EXf5F9+/blrLPOyi233JKmafKZz3wmn/vc5zI+Pp4k6evry6c+9akkyfbt2/Onf/qns85hYGAgGzduzIMPPjjz2qJFi7J+/fr83M/9XC688MLceuutue+++3LllVfmAx/4wKz5f/mXf5l//ud/zmWXXZbrrrsuSWbGHzY4OJjzzjsv73nPe7J+/fo5fqScql68f6+//vp8//d//yvOm56ezl133ZWhoaE8+eSTabfbWb16dS6++OJcddVVOeOMM5LYRwAAAAAAUMEr9YTDfeuee+7J6OhoXve61+V973tfXvva185aZ3h4OP/0T/+UHTt2ZHR0NKeffnrOPvvsXHnllbn44ovTarUyMjKSD33oQzNzenp6snLlyrz97W/Pz/zMz6TVap2w9zWnKwUnJiZyzjnn5L3vfW+SZPXq1TOPD/9+cnIyBw8eTJK84Q1vyHnnnZckmZycTJJ0Op3s2bMnDz/8cO64447ceeedueiii9LT0zOzxtjY2KzjtlqtnHXWWfn1X//1DAwM5MEHH8yaNWty22235bbbbssf/MEfZO3atbn55ptz4MCBJMmKFSty//33zxz38DkMDQ1l5cqVR7y3zZs3z6z3O7/zO+np6cnNN988l4+HU9yL9++xmJqayu///u/n9ttvz2WXXZYbbrghH//4x3Pttddm3759+fznPz9rvH0EAAAAAACvbq/UEw73rfe+97256aabcvrpp+fGG2+c1bf+/d//PR/5yEcyPj6e6667Lp/85Cfza7/2a3nrW9+aT3/60zM967Df/u3fzm233ZY//uM/zjvf+c784z/+Y+69994T+r46cxl80UUX5aKLLpp5fumll84qo5s3b86f/dmfZcuWLfm7v/u7/NiP/VguuuiiXHvttdmxY0eSQ4Hv0ksvzT333JMHHnggU1NT6Xa76Xa76XQ6mZ6ezsc//vE89thjM0HvDW94Q7rdbt761rdmw4YN+aVf+qWMj4/n9NNPT5Kcfvrpeec735nt27fnySefTJJs2LAhIyMjeeCBB/IjP/IjSZIvf/nLWbFiRVavXn3kB9HpzFrvmmuuyUc/+tHs3bs3S5cuncvHxCnqxfv3WNx5553ZuXNnbr755mzYsGHm9bVr12bz5s158YW29hEAAAAAALy6vVxPaJomd911V376p386l1xySZJDX5/3/ve/P1/84hfzoz/6oxkfH8+f//mf5y1veUuuv/76WfPPP//8vOMd7ziiLyxZsmSmL6xatSr33ntvHn300VxxxRUn7H2d0O8UHBkZybPPPps3v/nNM6/19vYmSf7nf/5n5rUrrrgiX/jCF3LgwIF84AMfyP79+7No0aIsXrw4SbJnz5587GMfy7Jly5Icun1jkhw8eDBf/epXZx4fNjU1le3bt2fx4sU588wzZ15/+9vfnu3bt888v/fee3P55Ze/4vsYHx/PF77whaxduzaDg4Nz/RgoZGhoKG9605tmBcEXernLdu0jAAAAAACo5Wgt7MILL8w3vvGNJMlDDz2Uffv25ad+6qeOus7L9YVHHnkkw8PDed3rXnfiTjxzvFLwlTz77LNJMhPzXuiFl0Hef//9M1HvjW98Y/7mb/4mS5Ysmfl9f39/zjjjjJn1duzYkVarlXe9613pdDpZunRp9u7dm5//+Z9Pcui2oP39/fnVX/3VDAwMzKzztre9LX//93+fkZGRtFqt7Ny5M7/yK7+Sr33ta0ec34MPPjiz3sTERJYvX56tW7em3T6h3ZRXmSeffDIXXnjhrNc+8YlP5KGHHkqSrF+/PjfeeOPM7+wjAAAAAACo62gtbNmyZfn2t7+dJDN3tXzhhWy7du3KDTfcMPP8wx/+cC6++OKZ57/1W7+VVquV6enpdLvdXHnllbnssstO6Lmf0Ch42MvVzenp6fzLv/xL3va2t2X79u355je/menp6SxatCjj4+NptVr5zne+ky996UsZGBjIvn37kiTnnntuPvjBD+arX/1q/vZv/zZ9fX35xCc+kSQZGxvL/fffn09+8pP56Ec/OnOspUuX5qKLLsp9992Xpmnylre85ai3cHz961+f97///UmS0dHR3H333bnpppvysY99LKtWrTpRHw2vQi/ez7/wC7+QiYmJ3HXXXTO3xT3MPgIAAAAAgPpe3A5efDvQF1u/fv1M1/rlX/7ldLvdWb//8Ic/nNe85jWZnp7O448/nr/6q7/K4sWLc+21156wcz6hly8dvtfp4Ur6Qoev4Gu32zl48GD6+vqSJLfffnvWr18/a+yePXty991355xzzpl57bTTTsv69evzkz/5kzPfPbh27dqsXbs2GzZsyLXXXpszzjgjd95556y1rrjiimzfvj333Xffy946tK+vb2a9888/P7/4i7+Y8fHx3HPPPfP4JKhi3bp1s259myTLly8/6i1B7SMAAAAAAKjraC1s7969M1cPrlu3LsnzVwwmh24xergfvJSVK1dm7dq1ec1rXpMf+qEfytVXX53Pfe5zmZycPGHnfkKj4OrVq3P66afP3Foxef77AM8666xDB2y385GPfCT33Xdfenp6Mjw8PPN9bU3TpGmarFixIo8//ng2b96c5FBoOVxcd+/enenp6Ze8GrHdbh/x4WzevDnT09OZnp6eWe9YvdR6fG/54R/+4Tz00EMZHh6e9xr2EQAAAAAA1HC0Fvb1r389F1xwQZLkzW9+cwYHB3PHHXfM+zjtdjvdbnems50Ic7p96Pj4eL71rW/NPN+5c+fMyYyMjOThhx/O5s2b8w//8A9Jki9/+cv57Gc/m+RQ4ex2u2maJt/3fd+X3/zN38wNN9yQ3t7e7N27N5OTk9m7d2+S5E1velPe8Y535N/+7d+SJN1uN3v37s1//Md/5FOf+lSSZNGiRTMV9vDtQ5944olcc801+a//+q+Zc2y327nllltmHh/N9PT0zHqjo6P5/Oc/n/Hx8Vn3c+XV7cX7d2RkJI899lgGBwezcuXKl5xz9dVX58EHH8zv/d7v5Wd/9mezcePGDA4O5sknn8xXvvKVI/aUfQQAAAAAAK9ur9QTfuInfiK333571q1bl7Vr1+b2229PX19fLr300iRJf39/PvjBD+aWW27JTTfdlB//8R/PunXrMj4+nq985StJjmxW+/bty7PPPptut5vHH388d911V17/+tfP3InzRGg1r3ST0xf42te+NutLEOd1wFYrn/70p2fWu/HGG2e+OLG3tzetViuXXXZZvvjFL6bb7R5xhVVfX1/Wr1+fhx9+eNZra9asyVVXXZWrrroqt956a/bv35/f+I3feMlz+MM//MMsXrw41113XZLk1ltvzX333Tfz+0WLFuXMM8/MNddckx/4gR84rvfLqeNo+/eyyy6b2QsvZWpqKnfeeWeGhoby1FNPpWmarF69Ops3b87VV189ExTtIwAAAAAAePV7pZ7QNE0+85nP5F//9V+zf//+nH/++Xnf+96Xs88+e9b4Rx55JHfccUd27NiR0dHRDAwM5Nxzz83ll1+eH/zBH0yr1crIyEg+9KEPzcxpt9tZvnx5Nm/enHe9611ZunTpCXtfc4qCAAAAAAAAwKvPCf1OQQAAAAAAAODUIwoCAAAAAABAcaIgAAAAAAAAFCcKAgAAAAAAQHGiIAAAAAAAABQnCgIAAAAAAEBxoiAAAAAAAAAUJwoCAAAAAABAcaIgAAAAAAAAFCcKAgAAAAAAQHGiIAAAAAAAABQnCgIAAAAAAEBx/x8uVo5Rvb2oEQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.lines import Line2D\n", + "import matplotlib.patches as patches\n", + "import numpy as np\n", + "\n", + "fig, axs = plt.subplots(ncols=1, nrows=len(ranges), figsize=(18, 18), sharex=True)\n", + "\n", + "for index, range_stats in enumerate(ranges):\n", + " rdf = range_stats[\"ranges\"]\n", + " file_size = range_stats[\"file_size\"]\n", + "\n", + " bins = [0, 1 * 1024, 10 * 1024, 100 * 1024, np.inf]\n", + " colors = ['red', 'orange', 'purple', 'blue']\n", + " labels = ['< 1KB', '1KB - 10KB', '10KB - 100KB', '> 100KB']\n", + " rdf['color'] = pd.cut(rdf['size'], bins=bins, labels=colors)\n", + " rdf['label'] = pd.cut(rdf['size'], bins=bins, labels=labels)\n", + "\n", + " for i, row in rdf.iterrows():\n", + " rect = patches.Rectangle((row['start'], 0), row['end']-row['start'], 1, \n", + " linewidth=1, edgecolor=row['color'], facecolor=row['color'], alpha=0.3)\n", + " axs[index].add_patch(rect)\n", + "\n", + " axs[index].set_xlim(0, 1.1e9)\n", + " axs[index].set_ylim(0, 1)\n", + " axs[index].set_yticklabels(\"\")\n", + " axs[index].set_yticks([])\n", + " xticks = [\n", + " 1024*1024,\n", + " 10*1024*1024,\n", + " 100*1024*1024,\n", + " 1024*1024*1024,\n", + " 10*1024*1024*1024,\n", + " ]\n", + " xtick_labels = [\n", + " '1 MB',\n", + " '10 MB',\n", + " '100 MB',\n", + " '1 GB',\n", + " '10GB'\n", + " ]\n", + " axs[index].set_xticks(xticks)\n", + " axs[index].set_xticklabels(xtick_labels)\n", + "\n", + "# The last axis will retain the x-ticks\n", + "axs[-1].tick_params(axis='x', which='both', bottom=True, labelbottom=True)\n", + "\n", + "# Create custom legend handles\n", + "legend_elements = [Line2D([0], [0], color=color, lw=2, label=label) for color, label in zip(colors, labels)]\n", + "# plt.legend(handles=legend_elements, title=\"Request Size\", loc='upper right')\n", + "\n", + "handles, labels = axs[0].get_legend_handles_labels()\n", + "fig.legend(handles=legend_elements, loc='upper right')\n", + "\n", + "# plt.suptitle(f'ATL06 Read Pattern. File Size: {round(file_size/1e6,2)} MB, Total Requests:{len(rdf)}, Requests <10kb: {len(rdf[rdf[\"size\"]<10000])}', fontsize=18)\n", + "plt.tight_layout()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1441c37f-60f6-42da-8c4f-a3399331d5e8", + "metadata": {}, + "outputs": [], + "source": [ + "# import holoviews as hv\n", + "# from holoviews.operation.datashader import rasterize\n", + "# import datashader as ds\n", + "# hv.extension(\"bokeh\")\n", + "\n", + "# xticks = [\n", + "# (1024*1024, '1MB'),\n", + "# (10*1024*1024, '10MB'),\n", + "# (100*1024*1024, '100MB'),\n", + "# (1024*1024*1024, '1GB'),\n", + "# (1024*1024*1024*10, '10GB')\n", + "# ]\n", + "\n", + "# # Function to create Rectangles\n", + "# def get_rectangles(ranges):\n", + "# rectangles = hv.Rectangles([]) # Start with an empty set of rectangles\n", + "# for i, row in ranges[0][\"ranges\"].iterrows():\n", + "# rect = (row['start'], 0, row['end'], 1) # Define rectangle bounds\n", + "# rectangles = rectangles * hv.Rectangles([rect]).opts(\n", + "# color=row['color'], \n", + "# line_color=row['color'], \n", + "# line_width=1\n", + "# )\n", + "# return rectangles\n", + "\n", + "# # Create an overlay of all rectangles\n", + "# rectangles = get_rectangles(ranges)\n", + "\n", + "# # Rasterize the plot using Datashader\n", + "# rasterized_rectangles = rasterize(rectangles, width=1200, height=300)\n", + "\n", + "# # Customize the plot with xticks and limits\n", + "# rasterized_rectangles.opts(\n", + "# xlabel='File Offset', ylabel='', xticks=xticks, \n", + "# xlim=(0, file_size), ylim=(0, 1), \n", + "# show_legend=True, legend_position='top_right'\n", + "# )\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/h5py-atl06.ipynb b/notebooks/h5py-atl06.ipynb new file mode 100644 index 0000000..d17fdc8 --- /dev/null +++ b/notebooks/h5py-atl06.ipynb @@ -0,0 +1,312 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "12725ef5-255d-4b78-b4db-c27717db0d25", + "metadata": {}, + "source": [ + "# Testing ROS3 and fsspec with h5py on cloud optimized HDF5 files \n", + "\n", + "This notebook tests both I/O drivers on cloud optimized HDF5 files from the ICESat-2 mission. \n", + "\n", + "> Note: The ROS3 driver is only available in the Conda distribution of h5py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3ac69e2f-87bc-4253-acab-54e2b0fa0348", + "metadata": {}, + "outputs": [], + "source": [ + "import fsspec\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import h5py\n", + "\n", + "from dask.distributed import Client, LocalCluster\n", + "import dask.bag as db\n", + "from dask.diagnostics import ProgressBar\n", + "\n", + "from h5logger import parse_fsspec_log, read_file\n", + "\n", + "\n", + "for library in (h5py, fsspec):\n", + " print(f'{library.__name__} v{library.__version__}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87720bcc-7764-4c01-87cb-81d3eb1aa1b2", + "metadata": {}, + "outputs": [], + "source": [ + "test_dict = {\n", + " \"ATL06\": {\n", + " \"files\": {\n", + " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5\",\n", + " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5\",\n", + " \"rechunked-2mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5\",\n", + " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5\",\n", + " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5\",\n", + " },\n", + " \"variables\": [\"/gt1l/land_ice_segments/h_li\", \"/gt1l/land_ice_segments/latitude\", \"/gt1l/land_ice_segments/longitude\"]\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "410ddda8-8182-4cf5-a825-09f8ba7021c6", + "metadata": {}, + "outputs": [], + "source": [ + "if \"dask_client\" not in locals():\n", + " cluster = LocalCluster(threads_per_worker=1)\n", + " dask_client = Client(cluster)\n", + " dask_client" + ] + }, + { + "cell_type": "markdown", + "id": "823228b5-6700-4abb-8c28-4f8e69d76431", + "metadata": {}, + "source": [ + "The importance of caching and over-reads with remote files\n", + "\n", + "* **simple**: Caches entire files on disk.\n", + "* **blockcache**: Caches file data in chunks (blocks) on disk.\n", + "* **bytes**: Caches entire files in memory.\n", + "* **none**: Does not use caching on any request" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c5225bb-361b-4146-ad01-eff90b762d9f", + "metadata": {}, + "outputs": [], + "source": [ + "num_runs = 1\n", + "benchmarks = []\n", + "ranges = []\n", + "\n", + "#the real default is readahead with 5MB of block sizes, we disabled to test real times without caching anything\n", + "default_io_params = {\n", + " \"fsspec_params\": {\n", + " \"skip_instance_cache\": True,\n", + " \"cache_type\": \"none\"\n", + " # \"cache_type\": \"first\", # could be first, or cachiing the entier file with simple, \n", + " # \"block_size\": 4*1024*1024\n", + " },\n", + " \"h5py_params\": {}\n", + "}\n", + "\n", + "# we can fine-tune these\n", + "optimized_io_params ={\n", + " \"fsspec_params\": {\n", + " \"cache_type\": \"blockcache\", # could be first, or cachiing the entier file with simple, \n", + " \"block_size\": 8*1024*1024\n", + " },\n", + " \"h5py_params\" : {\n", + " \"page_buf_size\": 16*1024*1024,\n", + " \"rdcc_nbytes\": 4*1024*1024\n", + " }\n", + "}\n", + "\n", + "for optimized_read in [False, True]:\n", + " for driver in [\"ros3\", \"fsspec\"]:\n", + " for run in range(num_runs): # Running N times\n", + " for dataset_name, dataset_item in test_dict.items():\n", + " # Inner loop (parallelized)\n", + " urls = dataset_item[\"files\"].items() \n", + " benchmark_list = [(run, dataset_name, dataset_item[\"variables\"], flavor, url, optimized_read, driver, default_io_params, optimized_io_params) for flavor, url in urls]\n", + " bag = db.from_sequence(benchmark_list, npartitions=len(benchmark_list))\n", + " result = bag.map(read_file)\n", + " with ProgressBar():\n", + " results = result.compute()\n", + " for result in results:\n", + " if len(result[\"benchmark\"]):\n", + " benchmarks.append(result[\"benchmark\"])\n", + " # For now we can only log I/O with fsspec\n", + " if result[\"benchmark\"][\"driver\"] == \"fsspec\":\n", + " ranges.append(result[\"ranges\"])\n", + " \n", + "df = pd.DataFrame.from_dict(benchmarks)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c672ed19-0733-4ebd-8863-61b110b855fb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96f782cf-c2da-4523-ac19-6cef6b865579", + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure(figsize=(10, 6)) \n", + "plt.style.use('ggplot')\n", + "\n", + "x_max = max(df[\"time\"])\n", + "pivot_df = df.pivot_table(index=['driver', 'optimized-read'], columns=['format', ], values='time', aggfunc='mean')\n", + "baseline_original = pivot_df['original'].max()\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='barh', figsize=(20, 8), fontsize=14, width=0.5)\n", + "\n", + "plt.xlim(0, x_max)\n", + "\n", + "plt.suptitle('Cloud-optimized HDF5 performance (less is better)', fontsize=18)\n", + "# plt.title(\"Default I/O parameters (ATL03_20181120182818_08110112_006_02.h5: 7GB)\", fontsize=14)\n", + "plt.xlabel('Mean Time (S)')\n", + "plt.ylabel('Access Pattern', fontsize=16)\n", + "plt.xticks(rotation=0)\n", + "plt.legend(title='Format', fontsize=14, loc='upper right', bbox_to_anchor=(1.15, 1.015))\n", + "plt.grid(False)\n", + "\n", + "plt.axvline(x=baseline_original, color='red', linestyle='--', linewidth=2, label=f\"Baseline: {baseline_original:.2f}\")\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"stats-default.png\", transparent=True, dpi=150)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c39fb04d-f35d-43e6-a506-26b5d7edc0c5", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv(\"h5py-benchmarks.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "345d2b51-10d0-4db9-9810-38a6b13b19d8", + "metadata": {}, + "outputs": [], + "source": [ + "ranges[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fb9f951-6a83-4e09-b3e0-0c00f67eea73", + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib.lines import Line2D\n", + "import matplotlib.patches as patches\n", + "import numpy as np\n", + "\n", + "fig, axs = plt.subplots(ncols=1, nrows=len(ranges), figsize=(18, 18), sharex=True)\n", + "\n", + "for index, range_stats in enumerate(ranges):\n", + " rdf = range_stats[\"ranges\"]\n", + " file_size = range_stats[\"file_size\"]\n", + "\n", + " bins = [0, 1 * 1024, 10 * 1024, 100 * 1024, np.inf]\n", + " colors = ['red', 'orange', 'purple', 'blue']\n", + " labels = ['< 1KB', '1KB - 10KB', '10KB - 100KB', '> 100KB']\n", + " rdf['color'] = pd.cut(rdf['size'], bins=bins, labels=colors)\n", + " rdf['label'] = pd.cut(rdf['size'], bins=bins, labels=labels)\n", + "\n", + " for i, row in rdf.iterrows():\n", + " rect = patches.Rectangle((row['start'], 0), row['end']-row['start'], 1, \n", + " linewidth=1, edgecolor=row['color'], facecolor=row['color'], alpha=0.3)\n", + " axs[index].add_patch(rect)\n", + "\n", + " axs[index].set_xlim(0, 1.1e8)\n", + " axs[index].set_ylim(0, 1) \n", + " axs[index].set_yticklabels(\"\")\n", + " axs[index].set_yticks([])\n", + "\n", + "\n", + "# The last axis will retain the x-ticks\n", + "axs[-1].tick_params(axis='x', which='both', bottom=True, labelbottom=True)\n", + "\n", + "# Create custom legend handles\n", + "legend_elements = [Line2D([0], [0], color=color, lw=2, label=label) for color, label in zip(colors, labels)]\n", + "# plt.legend(handles=legend_elements, title=\"Request Size\", loc='upper right')\n", + "\n", + "handles, labels = axs[0].get_legend_handles_labels()\n", + "fig.legend(handles=legend_elements, loc='upper right')\n", + "\n", + "plt.suptitle(f'ATL06 Read Pattern. File Size: {round(file_size/1e6,2)} MB, Total Requests:{len(rdf)}, Requests <10kb: {len(rdf[rdf[\"size\"]<10000])}', fontsize=18)\n", + "plt.tight_layout()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1441c37f-60f6-42da-8c4f-a3399331d5e8", + "metadata": {}, + "outputs": [], + "source": [ + "# import holoviews as hv\n", + "# hv.extension(\"bokeh\")\n", + "\n", + "# xticks = [\n", + "# (1024, '1KB'),\n", + "# (1024*1024, '1MB'),\n", + "# (10*1024*1024, '10MB'),\n", + "# (100*1024*1024, '100MB'),\n", + "# (1024*1024*1024, '1GB')\n", + "# ]\n", + "\n", + "# rectangles = hv.Overlay()\n", + "\n", + "# for index, row in rdf.iterrows():\n", + "# # Create a rectangle for each row\n", + "# rect = hv.Rectangles((row['start'], 0, row['end'], 1), label=row['label']).opts(\n", + "# color=row['color'],\n", + "# line_color=row['color'],\n", + "# line_width=1,\n", + "# alpha=0.7 # Optional: Set transparency for better visibility\n", + "# )\n", + "# rectangles *= rect # Overlay the rectangle on top of the previous ones\n", + "\n", + "# # Customize and display the plot\n", + "# rectangles.opts(\n", + "# width=1200, height=300, xlim=(0, file_size), ylim=(0, 1),\n", + "# xlabel='File Offset', ylabel='', xticks=xticks, show_legend=True, legend_position='top_right'\n", + "# )" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/h5py-benchmarks.csv b/notebooks/h5py-benchmarks.csv new file mode 100644 index 0000000..a534636 --- /dev/null +++ b/notebooks/h5py-benchmarks.csv @@ -0,0 +1,61 @@ +,iteration,library,driver,dataset,optimized-read,format,file,time,shape,bytes_requested,mean +0,0,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,8.009551525115967,"(120035,)",,-12.659630361199927 +1,0,h5py,ros3,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,3.4555869102478027,"(120035,)",,-12.659630361199927 +2,0,h5py,ros3,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,6.641781330108643,"(120035,)",,-12.659630361199927 +3,0,h5py,ros3,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,10.559669017791748,"(120035,)",,-12.659630361199927 +4,0,h5py,ros3,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,11.996437788009644,"(120035,)",,-12.659630361199927 +5,1,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,6.271223068237305,"(120035,)",,-12.659630361199927 +6,1,h5py,ros3,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,4.8463568687438965,"(120035,)",,-12.659630361199927 +7,1,h5py,ros3,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,8.921051025390625,"(120035,)",,-12.659630361199927 +8,1,h5py,ros3,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,5.880865573883057,"(120035,)",,-12.659630361199927 +9,1,h5py,ros3,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.2046899795532227,"(120035,)",,-12.659630361199927 +10,2,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,6.800616264343262,"(120035,)",,-12.659630361199927 +11,2,h5py,ros3,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,4.855101585388184,"(120035,)",,-12.659630361199927 +12,2,h5py,ros3,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,4.025922060012817,"(120035,)",,-12.659630361199927 +13,2,h5py,ros3,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,5.30383563041687,"(120035,)",,-12.659630361199927 +14,2,h5py,ros3,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.963735580444336,"(120035,)",,-12.659630361199927 +15,0,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,9.075090408325195,"(120035,)",0.0,-12.659630361199927 +16,0,h5py,fsspec,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,11.841322183609009,"(120035,)",0.0,-12.659630361199927 +17,0,h5py,fsspec,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,5.047335863113403,"(120035,)",0.0,-12.659630361199927 +18,0,h5py,fsspec,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,5.137251138687134,"(120035,)",0.0,-12.659630361199927 +19,0,h5py,fsspec,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,5.244110345840454,"(120035,)",0.0,-12.659630361199927 +20,1,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,8.759339094161987,"(120035,)",0.0,-12.659630361199927 +21,1,h5py,fsspec,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,11.117734670639038,"(120035,)",0.0,-12.659630361199927 +22,1,h5py,fsspec,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,5.022376298904419,"(120035,)",0.0,-12.659630361199927 +23,1,h5py,fsspec,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,4.962268829345703,"(120035,)",0.0,-12.659630361199927 +24,1,h5py,fsspec,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,5.486270189285278,"(120035,)",0.0,-12.659630361199927 +25,2,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,9.126240730285645,"(120035,)",0.0,-12.659630361199927 +26,2,h5py,fsspec,ATL06,no,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,10.805852890014648,"(120035,)",0.0,-12.659630361199927 +27,2,h5py,fsspec,ATL06,no,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,5.048081636428833,"(120035,)",0.0,-12.659630361199927 +28,2,h5py,fsspec,ATL06,no,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,4.96171498298645,"(120035,)",0.0,-12.659630361199927 +29,2,h5py,fsspec,ATL06,no,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,4.986459255218506,"(120035,)",0.0,-12.659630361199927 +30,0,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,10.310771942138672,"(120035,)",,-12.659630361199927 +31,0,h5py,ros3,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,6.174020051956177,"(120035,)",,-12.659630361199927 +32,0,h5py,ros3,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,6.522758960723877,"(120035,)",,-12.659630361199927 +33,0,h5py,ros3,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,4.112564325332642,"(120035,)",,-12.659630361199927 +34,0,h5py,ros3,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,4.797414779663086,"(120035,)",,-12.659630361199927 +35,1,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,10.215899229049683,"(120035,)",,-12.659630361199927 +36,1,h5py,ros3,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,2.9037656784057617,"(120035,)",,-12.659630361199927 +37,1,h5py,ros3,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,5.924455881118774,"(120035,)",,-12.659630361199927 +38,1,h5py,ros3,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,6.5820512771606445,"(120035,)",,-12.659630361199927 +39,1,h5py,ros3,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,8.97324538230896,"(120035,)",,-12.659630361199927 +40,2,h5py,ros3,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,6.3302013874053955,"(120035,)",,-12.659630361199927 +41,2,h5py,ros3,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,5.722134113311768,"(120035,)",,-12.659630361199927 +42,2,h5py,ros3,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,6.119923830032349,"(120035,)",,-12.659630361199927 +43,2,h5py,ros3,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,10.62471055984497,"(120035,)",,-12.659630361199927 +44,2,h5py,ros3,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.990654468536377,"(120035,)",,-12.659630361199927 +45,0,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,9.118420839309692,"(120035,)",0.0,-12.659630361199927 +46,0,h5py,fsspec,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,4.45331072807312,"(120035,)",16777216.0,-12.659630361199927 +47,0,h5py,fsspec,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,4.095282077789307,"(120035,)",16777216.0,-12.659630361199927 +48,0,h5py,fsspec,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.2909836769104004,"(120035,)",8388608.0,-12.659630361199927 +49,0,h5py,fsspec,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.6027727127075195,"(120035,)",8388608.0,-12.659630361199927 +50,1,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,8.456340074539185,"(120035,)",0.0,-12.659630361199927 +51,1,h5py,fsspec,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,8.179700374603271,"(120035,)",16777216.0,-12.659630361199927 +52,1,h5py,fsspec,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,3.8282923698425293,"(120035,)",16777216.0,-12.659630361199927 +53,1,h5py,fsspec,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,6.5400710105896,"(120035,)",8388608.0,-12.659630361199927 +54,1,h5py,fsspec,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,3.28332781791687,"(120035,)",8388608.0,-12.659630361199927 +55,2,h5py,fsspec,ATL06,no,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01.h5,8.094577550888062,"(120035,)",0.0,-12.659630361199927 +56,2,h5py,fsspec,ATL06,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_page_8mb.h5,10.045564651489258,"(120035,)",16777216.0,-12.659630361199927 +57,2,h5py,fsspec,ATL06,yes,rechunked-2mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-2mb-repacked.h5,4.747626543045044,"(120035,)",16777216.0,-12.659630361199927 +58,2,h5py,fsspec,ATL06,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,2.4647138118743896,"(120035,)",8388608.0,-12.659630361199927 +59,2,h5py,fsspec,ATL06,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl06/ATL06_20200811143458_07210811_006_01_rechunked-4mb-repacked.h5,6.894026041030884,"(120035,)",8388608.0,-12.659630361199927 diff --git a/notebooks/h5py-default.png b/notebooks/h5py-default.png new file mode 100644 index 0000000..2bba631 Binary files /dev/null and b/notebooks/h5py-default.png differ diff --git a/notebooks/h5py-original.csv b/notebooks/h5py-original.csv new file mode 100644 index 0000000..25e6353 --- /dev/null +++ b/notebooks/h5py-original.csv @@ -0,0 +1,11 @@ +,tool,dataset,cloud-aware,format,file,time,shape,bytes_requested,mean +0,h5py-ros3,7GB,yes,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,609.4096472263336,"(46484912,)",,1035.1631 +1,h5py-ros3,7GB,yes,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,638.2754406929016,"(46484912,)",,1035.1631 +2,h5py-ros3,7GB,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,653.3336625099182,"(46484912,)",,1035.1631 +3,h5py-ros3,7GB,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,81.40565180778503,"(46484912,)",,1035.1631 +4,h5py-ros3,7GB,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,76.86670875549316,"(46484912,)",,1035.1631 +5,h5py-fsspec,7GB,yes,original,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5,618.8997149467468,"(46484912,)",0.0,1035.1631 +6,h5py-fsspec,7GB,yes,page-only-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5,652.322696685791,"(46484912,)",0.0,1035.1631 +7,h5py-fsspec,7GB,yes,page-only-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5,663.9397876262665,"(46484912,)",0.0,1035.1631 +8,h5py-fsspec,7GB,yes,rechunked-4mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5,70.95594787597656,"(46484912,)",0.0,1035.1631 +9,h5py-fsspec,7GB,yes,rechunked-8mb,s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5,70.55050539970398,"(46484912,)",0.0,1035.1631 diff --git a/notebooks/h5py.ipynb b/notebooks/h5py.ipynb deleted file mode 100644 index aaaf877..0000000 --- a/notebooks/h5py.ipynb +++ /dev/null @@ -1,308 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "12725ef5-255d-4b78-b4db-c27717db0d25", - "metadata": {}, - "source": [ - "# Testing ROS3 and fsspec with h5py on cloud optimized HDF5 files \n", - "\n", - "This notebook tests both I/O drivers on cloud optimized HDF5 files from the ICESat-2 mission. \n", - "\n", - "> Note: The ROS3 driver is only available in the Conda distribution of h5py" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "3ac69e2f-87bc-4253-acab-54e2b0fa0348", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "xarray v2024.6.0\n", - "h5py v3.11.0\n", - "fsspec v2024.6.0\n", - "h5coro v0.0.6\n", - "zarr v2.18.2\n" - ] - } - ], - "source": [ - "import xarray as xr\n", - "import h5py\n", - "import fsspec\n", - "import s3fs\n", - "import logging\n", - "import re\n", - "import time\n", - "import numpy as np\n", - "import zarr\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "from h5coro import h5coro, s3driver, filedriver\n", - "driver = s3driver.S3Driver\n", - "\n", - "logger = logging.getLogger('fsspec')\n", - "logger.setLevel(logging.DEBUG)\n", - "\n", - "for library in (xr, h5py, fsspec, h5coro, zarr):\n", - " print(f'{library.__name__} v{library.__version__}')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "87720bcc-7764-4c01-87cb-81d3eb1aa1b2", - "metadata": {}, - "outputs": [], - "source": [ - "test_dict = {\n", - " \"1GB\": {\n", - " \"links\": {\n", - " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\",\n", - " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\",\n", - " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\",\n", - " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\",\n", - " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\",\n", - " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\",\n", - " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\",\n", - " \n", - " },\n", - " \"group\": \"/gt1l/heights\",\n", - " \"variable\": \"h_ph\"\n", - " },\n", - " \"7GB\": {\n", - " \"links\": {\n", - " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\",\n", - " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\",\n", - " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\",\n", - " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\",\n", - " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\",\n", - " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\",\n", - " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\",\n", - " },\n", - " \"group\": \"/gt1l/heights\",\n", - " \"variable\": \"h_ph\"\n", - " }\n", - "}\n", - "\n", - "fs = s3fs.S3FileSystem(anon=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "54990389-9e89-476f-928a-af4844caa595", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n" - ] - } - ], - "source": [ - "h5py_fsspec_benchmarks = []\n", - "\n", - "\n", - "for key, dataset in test_dict.items():\n", - " for k, link in dataset[\"links\"].items():\n", - " try:\n", - " if \"kerchunk\" in k or link.endswith(\".json\"):\n", - " continue \n", - " print (f\"Processing: {link}\")\n", - " log_filename = f\"logs/fsspec-h5py-{key}-{k}_default.log\"\n", - " \n", - " # Create a new FileHandler for each iteration\n", - " file_handler = logging.FileHandler(log_filename)\n", - " file_handler.setLevel(logging.DEBUG)\n", - "\n", - " # Add the handler to the root logger\n", - " logging.getLogger().addHandler(file_handler)\n", - " # this is mostly IO so no perf_counter is needed\n", - " io_params = {\n", - " \"fsspec_params\": {},\n", - " \"h5py_params\": {}\n", - " }\n", - " \n", - " if \"rechunked\" in link or \"page\" in link:\n", - " io_params ={\n", - " \"fsspec_params\": {\n", - " \"cache_type\": \"blockcache\",\n", - " \"block_size\": 8*1024*1024\n", - " },\n", - " \"h5py_params\" : {\n", - " \"page_buf_size\": 32*1024*1024,\n", - " \"rdcc_nbytes\": 4*1024*1024\n", - " }\n", - " }\n", - " \n", - " start = time.time()\n", - " fo = fs.open(link, mode=\"rb\", **io_params[\"fsspec_params\"])\n", - " with h5py.File(fo, **io_params[\"h5py_params\"]) as f:\n", - " path = f\"{dataset['group']}/{dataset['variable']}\"\n", - " data = f[path][:]\n", - " data_mean = data.mean()\n", - " elapsed = time.time() - start\n", - " h5py_fsspec_benchmarks.append(\n", - " {\"tool\": \"h5py-fsspec\",\n", - " \"dataset\": key,\n", - " \"cloud-aware\": \"yes\",\n", - " \"format\": k,\n", - " \"file\": link,\n", - " \"time\": elapsed,\n", - " \"shape\": data.shape,\n", - " \"bytes_requested\": fo.cache.total_requested_bytes,\n", - " \"mean\": data_mean})\n", - "\n", - " logging.getLogger().removeHandler(file_handler) \n", - " file_handler.close()\n", - " \n", - " except Exception as e:\n", - " print(e)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "4efd9495-5a7f-4502-a9d4-20c7494f16db", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", - "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n" - ] - } - ], - "source": [ - "h5py_ros3_benchmarks = []\n", - "\n", - "for key, dataset in test_dict.items():\n", - " for k, link in dataset[\"links\"].items():\n", - " try:\n", - " if \"kerchunk\" in k or link.endswith(\".json\"):\n", - " continue\n", - " print (f\"Processing: {link}\")\n", - "\n", - " h5py_params = {\n", - " \"mode\": \"r\",\n", - " \"driver\": \"ros3\",\n", - " \"aws_region\": \"us-west-2\".encode(\"utf-8\"),\n", - " }\n", - "\n", - " \n", - " if \"rechunked\" in link or \"page\" in link:\n", - " h5py_params[\"page_buf_size\"] = 32*1024*1024\n", - " h5py_params[\"rdcc_nbytes\"] = 4*1024*1024\n", - " \n", - " start = time.time()\n", - " with h5py.File(link, **h5py_params) as f:\n", - " path = f\"{dataset['group']}/{dataset['variable']}\"\n", - " data = f[path][:]\n", - " data_mean = data.mean()\n", - " elapsed = time.time() - start\n", - " h5py_ros3_benchmarks.append(\n", - " {\"tool\": \"h5py-ros3\",\n", - " \"dataset\": key,\n", - " \"cloud-aware\": \"yes\",\n", - " \"format\": k,\n", - " \"file\": link,\n", - " \"time\": elapsed,\n", - " \"shape\": data.shape,\n", - " \"bytes_requested\": None, # metrics not easily available in ROS3\n", - " \"mean\": data_mean})\n", - "\n", - " \n", - " except Exception as e:\n", - " print(e)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "96f782cf-c2da-4523-ac19-6cef6b865579", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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gYGBcnJykqenp4KCgtStWzclJiaa+yUkJGj48OGqVKmSXF1d5eHhoQoVKuiNN97I1s+VzH7PHDx4UG+88Yb5/S1atKiqV6+ufv36ZXt9pdtfco0dO1YBAQFydHRUYGCgPv7440xPYfn111/VsmVLFS1aVA4ODgoMDNSwYcMsft9ERkbqueeekyR98MEHFj+fjx49mq3fLZJ05MgRvfnmmypZsqQcHBxUokQJRURE6NixY+nqSpv/5MmTioiIkI+PjwoVKmTxu6NNmzaSpDlz5uToNQLw4LCnG3hIxcTEKCUlRV27dpW3t3eWfR0cHO453uTJk9WnTx95enqqQ4cOcnFx0Q8//KD33ntPa9euNV+YJ7fi4uLUtGlTFSpUSG3btpWvr6/i4uJUr149FSlSJMfjffvtt2rXrp3s7e3Vtm1bFS9eXD///LM++OADrVixQqtWrUq33hcvXlS9evVUokQJvf322zp58qS+/PJLPffcc1q+fLn5D58+ffooJiZGv/32m3r37q3ChQtLyvgQ5YxMmjRJq1evVnh4uJ5//nl9++236t27t5ydnfXbb7/p66+/VosWLfT8889rwYIF6tixo/z9/VW/fv0sx81sz+zXX3+tvXv3ytnZ2dx26NAh8x9iTZo0UevWrRUfH69vv/1Wy5cvV1xcnMX5nnn9/lhDoUKFNHToUMXFxenLL7/UwIED72u8tWvXasuWLbKxsVGFChXUqFGjbG0r2XHr1i399NNPatasmXnvb0xMjFJTU/X2229nuc2+//77mjdvnmbPnq2RI0dme5mvvvqqfv/9d7366qu6efOmvvrqK3Xp0kVnz57VkCFDLPr++9//1tixY/Xkk0/q5Zdflru7u3799VcNGDBAmzdv1tdff51u/K+//lorVqxQixYt1K1bN12+fNn8eZw0aZKk29uO9H/bimEYatu2rb777juVK1dO3bt319WrV/XVV1+pRYsWmjx5snr16pWtZd2pb9++2rx5s1q2bCkbGxstWLBAHTp0UJEiRfSf//xHe/bsUbNmzXTjxg3NmzdPrVq10v79++Xv728eY+bMmfrhhx/UoEEDNWvWTNeuXdPq1as1ZMgQbd26Vd9++226um7evKkmTZrowoULeumll3Tt2jUtWLBAbdq00bJly9SkSRNz3xs3bigsLEy//vqrAgMD9cYbb8jBwUEHDx7UjBkz1LFjR/O2ldPtNTNpp70888wz9+yb5sKFC2rQoIH++OMPPfvsswoLC1NCQoK+//57Pffcc/r666/VunVrSdK1a9dUr149HT16VE2aNNGLL76o5ORkHT58WDExMRo4cKDc3d1lGIbCwsK0efNm1atXTy+88IIKFSqko0ePauHCherUqVOG1zq4l1OnTqlWrVq6evWqmjdvrrZt2+rKlSs6ePCgpk6dqgkTJmR7rD59+mjTpk1q06aNHB0d9d1332ngwIH666+/9N///tei74wZM9StWzcVKVJELVu2VLFixbR161aNGTNGq1at0qpVq2Rvb6/Q0FAdPXpUsbGxCgkJsfh5Xbhw4Wz9btm8ebPCwsJ09epVtWzZUgEBATp69Ki++OILLV26VBs3blSZMmUs6jt//rzq1KkjT09PtW3bVsnJyRZHyfj6+qpkyZJatWpV9l9sAA+WAeChFBoaakgyfv755xzNN2LECEOSsWrVKnPboUOHDFtbW6N48eLG8ePHze1JSUlGSEiIIcmYO3euuX3VqlWGJGPEiBHpxj9y5IghyejUqZO5LSUlxShTpoxhMpmMtWvXmttTU1ONDh06GJKMnPy4SUxMNAoXLmw4ODgYv/32W4bjjRo1ymKetGW8/vrrRmpqqrl99erVhslkMgICAoyUlBRze6dOnQxJxpEjRzKsoVSpUkapUqUs2tJeW09PT+PQoUPm9uPHjxv29vaGh4eHUa5cOSM+Pt48bfPmzYYko1WrVhmOdef7lJHFixcbhQoVMoKDg41r166Z2+vWrWvY2toaK1assOh/4MABw83NzQgKCjK35eX7k/bZqFGjhjFixIgMHy+//HKGn5+0z9rp06czHf/GjRuGnZ2dUahQIePmzZvm9lKlShk2NjYZLm/+/PkWY6S9tnc/SpQoke71ys66du3aNd20n3/+2ZBksey0bXblypX3HNvX19eQZLE9ZibtdatUqZKRmJhobj99+rRRokQJw9bW1uLzuGLFCkOS0bRpU+Pq1avm9tTUVOOdd94xJBnffPONuX3OnDmGJMNkMmVae0bbg2EYxmeffWZIMkJCQoykpCRz+4kTJ4zixYsbdnZ2xuHDh7O9rLTtMjAw0GI72rRpkyHJKFy4sFG/fn3jypUr5mlffvmlIcno1auXxVhHjx41bt26ZdGWmppqdO7c2ZBkrFu3Lt06SjLCw8Mt1iXtvQ4LC7PoP2DAAPPPnLuXc+nSJePy5cvm5znZXrPy6quvGpKMgwcPppuW0c9mwzDM2/js2bMt2s+cOWP4+fkZxYoVM65fv24Yxu2fN5KM9957L934iYmJ5tfl999/NyQZL774Yrp+N27csFj3zGT0e2bKlCmGJGPy5Mnp+p87d+6eYxrG/32GvL29jZMnT5rbL1++bAQFBRmSjF9//dXc/scffxi2trZGtWrVjPPnz1uMNXbsWEOSMX78+Czrzmj5Gf1uSU5ONkqXLm24ubkZu3btspi2du1aw8bGxmjRooVFe9rPrzfeeCPd5+xOL774oiHJYnsD8PAgdAMPqQoVKhiSjP379+dovozC3MiRIw1JxkcffZSu/8aNGw1JRsOGDc1tOQ3da9asMSQZLVu2TNf/6NGjho2NTY5Cd9of8u+++266acePHzdsbW2NsmXLWrRLMmxsbDIMMc2bNzckWQTO+wndkZGR6fo///zzhiQjNjY23bQyZcpkOlZWofu3334zXF1djSeeeMLij8cdO3YYkowuXbpkOF/fvn0NScbu3bsNw8jb9yfts5GdR25Ct2EYhre3tyHJOHv2rLktLRBl9AgPD7eYf+HChUZsbKxx9OhR4/r168bBgweNUaNGGU5OToajo2O6P3bvta4Zhe6ePXsadnZ2xqVLl8xtOdlma9eubUgyNm/efM++aa/bF198kW7axx9/nO5LqFatWmUa6C9dumSYTCbj5ZdfNrelBeGMAlSazEJ32uc+o/VICyx31navZaVtlzExMemmlSlTxpBkrFmzxqL91q1bhp2dnRESEpJp/Xfavn17httx2mcso9BSqlQpw9PT02KZ7u7uhoeHh3HhwoUsl5fT7TUrderUMSRZfPmSJqOfzefOnTNsbGwsfr7fKS3k/vDDD4Zh/F/o/ve//51lHWmhu0OHDvesOTNZhe5PP/001+OmfYbGjBmTbtrXX3+d7r3o1atXut8PaVJSUoxixYoZNWrUyLLujJaf0e+W7777LsMvjdO89NJLRqFChYyEhARzmyTD3t7+nl86pH2hducXCgAeHhxeDjwGdu7cKUkZHrr8zDPPyMnJSbt27cr1+L/99psk6dlnn003rVSpUvLz87O4fcrRo0cVExNj0S/t0Lx71evn56eyZcvqwIEDunz5stzc3NIt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JFncd7t8+fJydXXV4sWLLfaonD17VqNHj043fv369eXv768ff/zR4r6vhmHo3//+d46DbXh4uDw8PDRnzhz98ccfFuMNGTJEN2/ezPA+4SkpKRo6dKjFXok1a9bop59+UkBAgHlPpPR/57+lHeb7MPj6668VGRmpOnXqZHo+rnT7fNjatWtr/vz5+vLLL9NNT01NNQceKe/fH2s4d+6c/vWvfykuLk6VKlXSu+++m6txLl++rN9//z1d+8WLF9WlSxdJ9xfoT5w4oZ07dyo8PDzdtHLlyql37946f/68WrZsqdOnT1tMT01N1ahRo/T555+rbNmy6t+/f46WPWbMGItba509e1YTJ06Ura2tOnToYG5Pu0VX586ddf78+XTjnDlzRvv27cvRsjOTtnc2bbtMc/LkSXNtr732Wp4sKydKlSolSenuQ/3HH39o7Nix9z2+ra2tunbtqoSEBPXu3TvdNpSQkKArV65Iyvn2mpW0PaAZfcmRER8fH7Vp00YbNmzQxx9/nOEe282bN5uP/tizZ0+G94pOO2rByclJ0u37TO/du/ee/XJq69atWR7RkZNxp0yZYvH77sqVK+Zb9HXs2NHc3q1bN9na2qpnz54ZfgF56dIliy+b7/W7I6vp4eHhKlmypCZOnKhff/013fSbN29meO/0e7l586Z27typ4OBgDi8HHlKc0w08xEaPHq0bN24oOjpa5cuX1/PPP6/KlSvLzs5OR44c0c8//6zz589nGITvVLZsWX300Ufq16+fqlSpojZt2sjFxUU//vij9u/fr/DwcP3rX/8y97e3t1ePHj304Ycfqnr16goPD9fly5f1ww8/KCQkxLwXKU2hQoX06aefqlmzZmrUqJH5PtC//PKLTp8+rSpVqmQYhDLj7u6umTNnqn379qpdu7batm2rYsWKKS4uTtu2bVOtWrXSnU8r3T4scfXq1XrmmWf0/PPP69SpU1qwYIHs7Ow0c+ZM82HzkvT8889r/Pjx6tq1q1599VW5uLioZMmSFuHlQevUqZMMw9DTTz+dYTAIDQ01X5xq/vz5eu6559SuXTtNmjRJNWrUkKOjo44fP66NGzfq3Llz5ouO5fX7c7/Gjx8vV1dXpaamKjExUXv37tWvv/6qpKQk1atXTwsWLMj1H47nz5/X008/reDgYAUFBZmvV7B06VKdP39ejRs31nvvvZfr2tMOLc8odEvSuHHjlJCQoNmzZyswMFDNmzdX2bJllZiYqBUrVujgwYMKDAzUTz/9lOFh11kpU6aMKleurJdfftl8n+74+HiNGTPG4r6+L7zwgt5//32NGjVKAQEBeuGFF1SqVCmdP39ef/31l9auXavRo0erYsWKuX4d0rz++uv67rvv9P3336tKlSpq0aKF+T7d58+f14QJE9Ldc/hBqFWrlmrVqqWvvvpKp0+f1jPPPKPjx49r8eLFat68ub755pv7XsbIkSO1adMmzZ07V5s2bVLTpk3l4OCgw4cPa9myZVq3bp15j2pOttesNGzYUG5ubvr555/Vt2/fbNX5ySef6MCBAxo4cKDmzp2rOnXqyMPDQydOnND27dt18OBBnT59Ws7Ozvr555/Vr18/1atXTxUqVJCXl5cOHz6sxYsXy8nJST169JB0++KZL774omrWrKnKlSvLx8dHJ0+e1KJFi2RjY2M+xzunvvjiC33yyScKDQ1VQECA3N3dtXfvXv30008qWrRojo4OqVmzpp5++mm1bdtWDg4O+u6773T06FG99dZbatCggblf5cqV9cknn+jdd99V+fLl1axZM/M2e/jwYa1Zs0YRERHmC0dWqFBBvr6+5p9TTz75pEwmk9599115eHhk+bvFwcFB33zzjZo2baqQkBA1bNjQfPG848ePa+3atfLy8srxhdvSfn7efRFJAA+RPLsOOgCr2bp1q9G5c2cjICDAcHJyMhwcHIzSpUsb7du3T3ff16xuRfX9998bISEhhpubm+Hg4GAEBQUZEyZMsLgfcppbt24Zw4cPN/z8/Ax7e3ujXLlyxuTJk43Dhw9neC9YwzCMX3/91WjQoIHh5ORkeHp6Gq+++qpx7Ngx8y2PcurXX381mjZtahQuXNhcw/vvv29xj940+v/3Cj527Jjx6quvGkWKFDGcnJyMBg0apLsfb5px48YZgYGBhp2dnXn+NFndMiyj1zar28RktP4ZjaUc3oLrwoULxrBhw4zKlSsbTk5OhqurqxEYGGh06NDB+O6779LVkRfvT1a30Uozf/78LG8ZlvawtbU1ihQpYjz99NNG586djWXLllncS/1OpUqVMhwcHO5ZX0JCgtG9e3ejRo0aRtGiRQ1bW1vDw8PDqF+/vjFjxows73ObnXVt1KhRhrfOutvKlSuNV1991fD19TXs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jo7W//73P0lScnKyRo0apd9++02LFi3SkSNHFBERYZ736NGjeuWVV9S6dWvt2rVLXbt21dChQy3G3717t8LCwvTSSy/p999/15dffql169apR48eWdY1cOBAffvtt4qNjdWOHTsUEBCgsLAwXbhwwaLf0KFDNWHCBG3btk22trbq3LlzhuM1aNBAZcqU0dy5c81tt27d0ueff6433ngjy1q6d++u5s2bq1GjRpn2iY6OVr169bRz5041b95cr7/+ujp27Kh//etf5vo7duyoO297f+3aNY0ZM0axsbFav369EhMT1a5duyxrAQAAAFCwcCG1As7Pz0/R0dEymUwqX768du/erejoaL311lsWAbZMmTKaMmWKatWqpStXrsjV1VUzZsxQ+fLl9fHHH0uSypcvrz179mjMmDHm+T7++GN16NDBfB50YGCgpkyZopCQEE2fPl2Ojo7parp69aqmT5+umJgYNW3aVJI0c+ZMrVy5UrNmzdKAAQPMfceMGaOQkBBJ0uDBg9W8eXPduHEjw3G7dOmiOXPmmOdfsmSJrl27pjZt2mT6+ixYsEA7duyw2MuekWbNmqlr166SpOHDh2v69OmqWbOmXn31VUnSoEGDVKdOHZ09e1Y+Pj6SpJs3b2ratGmqXbu2pNtfgFSsWFFbtmxRrVq1slweAAAAgIKBPd0F3DPPPCOTyWR+XqdOHR08eFApKSnauXOnwsPDVapUKbm5uSk0NFSSdPz4cUnSgQMHVLNmTYvx7g6L27dvV0xMjFxdXc2PsLAwpaam6siRI4qKirKYdvz4cR06dEg3b95UvXr1zOPY2dmpVq1a2rdvn8X4d55jXaJECUlKdwh8moiICP3111/atGmTJGn27Nlq06aNXFxctHbtWos6vvjiC504cUK9e/fW559/nmGIz6wOb29vSVJQUFC6tjtrs7W1VXBwsPl5hQoVVLhw4XTrCAAAAKDgYk/3Y+rGjRtq0qSJmjRpos8//1zFihXT8ePHFRYWpuTkZEmSYRgWgT2t7U6pqanq2rWrevXqlW4ZJUuW1DvvvGOxp9nX11cXL16UpAzHvrvNzs7O/P+0aampqRmuU/HixdWyZUvNmTNHZcqU0U8//aTVq1dLkoKDgy1uLebt7a24uDjFx8erRo0a5vaUlBT9+uuvmjZtmpKSkmRjY5NpHdmp7e71yawNAAAAQMFE6C7g0vb63vk8MDBQ+/fv1z///KMPP/xQfn5+kpTuQmAVKlTQTz/9ZNF2d5/q1avrjz/+UEBAQIbL9/T0lKenp0VbQECA7O3ttW7dOnXo0EHS7UOxt23bdt+363rzzTfVrl07Pfnkkypbtqx5b7qTk1O6Ghs2bKjdu3dbtL3xxhuqUKGCBg0aZA7cuXXr1i1t27bNfHTAgQMHdOnSJVWoUOG+xgUAAADw6ODw8gLuxIkT6tu3rw4cOKD58+dr6tSp6t27t0qWLCl7e3tNnTpVhw8f1uLFizVq1CiLebt27ar9+/dr0KBB+vPPP/XVV18pJiZG0v/trR00aJA2btyo7t27a9euXTp48KAWL16snj17ZlqTi4uL3n33XQ0YMEDLli3T3r179dZbb+natWvq0qXLfa1vWFiYPDw8NHr06HteQM3NzU2VK1e2eLi4uMjLy0uVK1e+rzqk23vCe/bsqc2bN2vHjh1644039Mwzz3A+NwAAAPAYYU93bkUm5HcF2dKxY0ddv35dtWrVko2NjXr27Km3335bJpNJMTEx+ve//60pU6aoevXqGj9+vFq1amWe19/fX99884369eunyZMnq06dOho6dKjeffddOTg4SLp9rvOaNWs0dOhQPfvsszIMQ2XLllXbtm2zrOvDDz9UamqqXn/9dV2+fFnBwcFavnx5hrfsyolChQopIiJCUVFR6tix432Ndb+cnZ01aNAgdejQQX///bfq16+v2bNn52tNAAAAAB4sk3H3SbqPocTERHl4eCghIUHu7u4W027cuKEjR47I39//nhfbetiEhoaqatWqmjRpUp6NOWbMGM2YMeOhvt/0W2+9pbNnz2rx4sX5Xcp9eZQ/ewAAAPej9OAlVhn36IfNrTIuHk9Z5cg7sacbWfrkk09Us2ZNeXl5af369fr444/veQ/u/JKQkKCtW7fqiy++0Pfff5/f5QAAAAAAoRtZO3jwoEaPHq0LFy6oZMmS6tevn4YMGZLfZWUoPDxcW7ZsUdeuXdW4ceP8LgcAAAAACN0FWdrtsu5HdHS0oqOj77+YByAv1hcAAAAA8hJXLwcAAAAAwEoI3QAAAAAAWAmhGwAAAAAAKyF0AwAAAABgJYRuAAAAAACshNANAAAAAICVcMuwXAqKDXqgy9vdafcDXd6jIDIyUosWLdKuXbvyu5R0YmJi1KdPH126dCm/SwEAAACQj9jTjcfarVu3NGzYMPn7+8vJyUllypTRyJEjlZqamt+lAQAAACgA2NONx9pHH32kGTNmKDY2Vk899ZS2bdumN954Qx4eHurdu3d+lwcAAADgEcee7gIsNDRUPXr0UI8ePVS4cGF5eXlp2LBhMgxDkvT5558rODhYbm5u8vHxUYcOHRQfH28xxuLFixUYGCgnJyc999xzio2NlclksjhsesOGDWrQoIGcnJzk5+enXr166erVq1nWlpSUpF69eql48eJydHRU/fr1tXXrVvP01atXy2QyKS4uTsHBwXJ2dlbdunV14MCBDMf79ddfZWdnpzNnzli09+vXTw0aNMi0jo0bNyo8PFzNmzdX6dKl9corr6hJkybatm2buU/p0qU1evRodezYUa6uripVqpS+//57nTt3TuHh4XJ1dVVQUJDFPGkWLVqkcuXKydHRUY0bN9aJEyeyfF0AAAAAFCyE7gIuNjZWtra22rx5s6ZMmaLo6Gj973//kyQlJydr1KhR+u2337Ro0SIdOXJEERER5nmPHj2qV155Ra1bt9auXbvUtWtXDR061GL83bt3KywsTC+99JJ+//13ffnll1q3bp169OiRZV0DBw7Ut99+q9jYWO3YsUMBAQEKCwvThQsXLPoNHTpUEyZM0LZt22Rra6vOnTtnOF6DBg1UpkwZzZ0719x269Ytff7553rjjTcyraN+/fqKi4vTn3/+KUn67bfftG7dOjVr1syiX3R0tOrVq6edO3eqefPmev3119WxY0f961//MtffsWNH8xcaknTt2jWNGTNGsbGxWr9+vRITE9WuXbssXxcAAAAABQuHlxdwfn5+io6OlslkUvny5bV7925FR0frrbfesgiwZcqU0ZQpU1SrVi1duXJFrq6umjFjhsqXL6+PP/5YklS+fHnt2bNHY8aMMc/38ccfq0OHDurTp48kKTAwUFOmTFFISIimT58uR0fHdDVdvXpV06dPV0xMjJo2bSpJmjlzplauXKlZs2ZpwIAB5r5jxoxRSEiIJGnw4MFq3ry5bty4keG4Xbp00Zw5c8zzL1myRNeuXVObNm0yfX0GDRqkhIQEVahQQTY2NkpJSdGYMWPUvn17i37NmjVT165dJUnDhw/X9OnTVbNmTb366qvmcerUqaOzZ8/Kx8dHknTz5k1NmzZNtWvXlnT7C5CKFStqy5YtqlWrVqY1AQAAACg42NNdwD3zzDMymUzm53Xq1NHBgweVkpKinTt3Kjw8XKVKlZKbm5tCQ0MlScePH5ckHThwQDVr1rQY7+6wuH37dsXExMjV1dX8CAsLU2pqqo4cOaKoqCiLacePH9ehQ4d08+ZN1atXzzyOnZ2datWqpX379lmMX6VKFfP/S5QoIUnpDoFPExERob/++kubNm2SJM2ePVtt2rSRi4uL1q5da1HHF198IUn68ssv9fnnn2vevHnasWOHYmNjNX78eMXGxmZah7e3tyQpKCgoXdudtdna2io4ONj8vEKFCipcuHC6dQQAAABQcLGn+zF148YNNWnSRE2aNNHnn3+uYsWK6fjx4woLC1NycrIkyTAMi8Ce1nan1NRUde3aVb169Uq3jJIlS+qdd96x2NPs6+urixcvSlKGY9/dZmdnZ/5/2rTMrixevHhxtWzZUnPmzFGZMmX0008/afXq1ZKk4OBgi1uLpYXkAQMGaPDgwebDvoOCgnTs2DGNHTtWnTp1yrKO7NR29/pk1gYAAACgYCJ0F3Bpe33vfB4YGKj9+/frn3/+0Ycffig/Pz9JSnchsAoVKuinn36yaLu7T/Xq1fXHH38oICAgw+V7enrK09PToi0gIED29vZat26dOnToIOn2odjbtm0zH6aeW2+++abatWunJ598UmXLljXvTXdycsqwxmvXrqlQIcsDPmxsbPLklmG3bt3Stm3bzEcHHDhwQJcuXVKFChXue2wAAAAAjwYOLy/gTpw4ob59++rAgQOaP3++pk6dqt69e6tkyZKyt7fX1KlTdfjwYS1evFijRo2ymLdr167av3+/Bg0apD///FNfffWVYmJiJP3f3tpBgwZp48aN6t69u3bt2qWDBw9q8eLF6tmzZ6Y1ubi46N1339WAAQO0bNky7d27V2+99ZauXbumLl263Nf6hoWFycPDQ6NHj87yAmppWrZsqTFjxmjJkiU6evSoFi5cqIkTJ+rFF1+8rzqk23vCe/bsqc2bN2vHjh1644039Mwzz3A+NwAAAPAYYU93Lu3utDu/S8iWjh076vr166pVq5ZsbGzUs2dPvf322zKZTIqJidG///1vTZkyRdWrV9f48ePVqlUr87z+/v765ptv1K9fP02ePFl16tTR0KFD9e6778rBwUHS7XOd16xZo6FDh+rZZ5+VYRgqW7as2rZtm2VdH374oVJTU/X666/r8uXLCg4O1vLly1WkSJH7Wt9ChQopIiJCUVFR6tix4z37T506Ve+//766deum+Ph4+fr6qmvXrho+fPh91SFJzs7OGjRokDp06KC///5b9evX1+zZs+97XAAAAACPDpNx90m6j6HExER5eHgoISFB7u7uFtNu3LihI0eOyN/fP8MrZj/MQkNDVbVqVU2aNCnPxhwzZoxmzJjxUN9v+q233tLZs2e1ePHi/C7lvjzKnz0AAID7UXrwEquMe/TD5lYZF4+nrHLkndjTjSx98sknqlmzpry8vLR+/Xp9/PHH97wHd35JSEjQ1q1b9cUXX+j777/P73IAAAAAgNCNrB08eFCjR4/WhQsXVLJkSfXr109DhgzJ77IyFB4eri1btqhr165q3LhxfpcDAAAAAITugiztdln3Izo6WtHR0fdfzAOQF+sLAAAAAHmJq5cDAAAAAGAlhG4AAAAAAKyE0A0AAAAAgJUQugEAAAAAsBJCNwAAAAAAVkLoBgAAAADASrhlWC7tq1DxgS6v4v59D3R5GTl69Kj8/f21c+dOVa1a1arLKl26tPr06aM+ffrk2ZihoaGqWrWqJk2alGdjZldERIQuXbqkRYsWPfBlAwAAAMg/7OkGMmAYhpo2bSqTyURQBgAAAJBrhO7HSHJycn6X8MiYNGmSTCZTfpcBAAAA4BFH6C7AQkND1aNHD/Xt21dFixZV48aNtXfvXjVr1kyurq7y9vbW66+/rn/++cc8T2pqqj766CMFBATIwcFBJUuW1JgxYyzGPXz4sJ577jk5Ozvr6aef1saNG83TIiMj0x16PmnSJJUuXdr8PCIiQq1bt9b48eNVokQJeXl5qXv37rp582am6zJnzhx5eHho5cqVknTP9bh69ao6duwoV1dXlShRQhMmTMj26/bbb79p4sSJmj17drppR48elclk0ldffaVnn31WTk5Oqlmzpv78809t3bpVwcHBcnV11QsvvKBz586lm/+DDz5Q8eLF5e7urq5du/JFCAAAAFDAEboLuNjYWNna2mr9+vX68MMPFRISoqpVq2rbtm1atmyZzp49qzZt2pj7DxkyRB999JHef/997d27V/PmzZO3t7fFmEOHDlX//v21a9culStXTu3bt9etW7dyVNeqVat06NAhrVq1SrGxsYqJ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q1+/fmrWrJkOHz5sca50Vtzc3FS5cmWLh4uLi7y8vFS5cmXzPbujoqK0cOFC7dmzRxEREXJ2dlaHDh0kSR4eHurSpYv69eunuLg47dy5U//6178UFBSU7sJsAAAAAAA8aDm+ZZh0+8rilSpVkiR9++23atGihaKiorRjxw41a9Ysz4obOHCgrl+/rm7duunixYuqXbu2VqxYITc3N3Of6Oho2draqk2bNrp+/boaNmyomJgY2djY5FkdAAAAAADkhskwDCOnM3l6emrdunWqVKmS6tevr44dO+rtt9/W0aNHValSJV27ds0atVpNYmKiPDw8lJCQIHd39/wuBwAAAHislR68xCrjHv2wuVXGxeMpuzkyV3u669evr759+6pevXrasmWLvvzyS0nSn3/+qSeffDJ3FQMAAAAAUMDk6pzuadOmydbWVt98842mT5+uJ554QtLt24q98MILeVogAAAAAACPqlzt6S5ZsqR+/PHHdO3R0dH3XRAAAAAAAAVFtkN32tXKs4PzogEAAAAAyEHoLly4sEwmU7b6pqSk5LogAAAAAAAKimyH7lWrVpn/f/ToUQ0ePFgRERGqU6eOJGnjxo2KjY3V2LFj875KAAAAAAAeQdkO3SEhIeb/jxw5UhMnTlT79u3Nba1atVJQUJA+/fRTderUKW+rBAAAAADgEZSrq5dv3LhRwcHB6dqDg4O1ZcuW+y4KAAAAAICCIFeh28/PTzNmzEjX/t///ld+fn73XRQAAAAAAAVBrm4ZFh0drZdfflnLly/XM888I0natGmTDh06pG+//TZPCwQAAAAA4FGVqz3dzZo108GDB9WqVStduHBB58+fV3h4uP788081a9Ysr2sEAAAAAOCRlKs93ZL05JNPKioqKi9rAQAAAACgQMl16L506ZK2bNmi+Ph4paamWkzr2LHjfRcGAAAAAMCjLleh+4cfftBrr72mq1evys3NTSaTyTzNZDIRugEAAAAAUC7P6e7Xr586d+6sy5cv69KlS7p48aL5ceHChbyuEQAAAACAR1KuQvfJkyfVq1cvOTs753U9AAAAAAAUGLkK3WFhYdq2bVte1wIAAAAAQIGSq3O6mzdvrgEDBmjv3r0KCgqSnZ2dxfRWrVrlSXEAAAAAADzKchW633rrLUnSyJEj000zmUxKSUm5v6oAAAAAACgAchW6775FGAAA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q7+PKUl79+5VYmKiR1uHDh00e/ZsXb58ucRMF4iOjtb27dt16tQpLVu2TMnJydq4caNiY2NLvT9L49o1IwYNGqTevXtry5Yt+vnPf+6xOGH16tX1xRdfSLqSqbVr12rYsGGqVauWHnjgAXe/oKAg5efn6+LFi+4Monwik85k8siRI1q9erXee++9QveRSWexkFoFUrt2bZ08ebLI+65+01oQqpJWE2zbtq32799fqsctGK9FixZq3ry53nzzTX3xxRfauXOnBg4cKEnq3bu3tm/f7r5de1AqUBDid999V/Xq1dOECRPUvHlznTp1Sn5+flqzZo0+/vhjxcbGau7cuYqOji7VCsEul8v9fFetWuUxlz179uj999+XpJtyQChYzOPqxSYCAwMVFRWlqKioIreJiIhQVFSUYmJi1K9fPz311FOaNWuWLly44O6TnZ0tSapTp46Ds0dpkceS53iz85iamqqMjIxCi/KQR0jlN6/VqlXzGM/MCr1xLuqNclGZLlCwKn/r1q31wgsvqHnz5pozZ06pnk9pNWnSRAcOHNClS5fcbTVq1FBUVJRuu+22Qv0rVarkzmRcXJxGjx6tLl26aPr06R79srOzVbVq1Vv+zX1FQCZPufuUZSZTUlJUq1Yt9e7d26OdTDqPorsCadGihfbs2VMmY6Wnp7s/PSzw5Zdf6vz58+6/N2/erODgYNWvX9/dNmTIEKWkpGjhwoXq3r27IiIiJF05qBSEMyoqqsTwVa5cWd27d9cf//hH7dixQ4cOHdK6deskXTkYdujQQZMnT1Z6eroCAgL0wQcflGqOsbGxCgwMVGZmpsdcoqKi3POMi4tTamqqx0GnrMXHx6tmzZqFDkw3ws/PT3l5eR4rY+7atUv+/v5q1qxZWUwT3xN59K08LliwQK1atVLz5s092skjpIqT19jYWH322WcebWlpaWratKn8/PwklZzpopiZLl68WPodUAqPPPKIcnJy9PLLL3/nMfz8/Dz2qXQldy1btvy+04MPIJNln0kzU0pKih577LFCV5CRSedxeXkFkpCQoHHjxunkyZMel3hez+zZs9WgQQM1a9ZMubm5+stf/qJly5Zp2bJlHv1yc3M1ePBgPfvss/rqq680ceJEPfnkk6pU6X+f3fTv319jx47Vn//8Z7355ps3/BxWrlyp//znP7rnnnsUFhamjz76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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df = pd.DataFrame.from_dict(h5py_ros3_benchmarks + h5py_fsspec_benchmarks)\n", - "\n", - "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", - "\n", - "# Plotting\n", - "pivot_df.plot(kind='bar', figsize=(10, 6))\n", - "\n", - "plt.suptitle('Cloud-optimized HDF5 I/O performance (less is better)', fontsize=14)\n", - "plt.title(\"Informed I/O parameters\", fontsize=10)\n", - "plt.xlabel('Tool')\n", - "plt.ylabel('Time (seconds)')\n", - "plt.xticks(rotation=0)\n", - "plt.legend(title='Format')\n", - "plt.tight_layout()\n", - "ax = plt.gca()\n", - "plt.grid(False)\n", - "# ax.yaxis.grid(True)\n", - "\n", - "plt.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/logs/.placeholder b/notebooks/logs/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/notebooks/optimize.py b/notebooks/optimize-atl03.py similarity index 100% rename from notebooks/optimize.py rename to notebooks/optimize-atl03.py diff --git a/notebooks/optimize-atl06.py b/notebooks/optimize-atl06.py new file mode 100755 index 0000000..2add637 --- /dev/null +++ b/notebooks/optimize-atl06.py @@ -0,0 +1,573 @@ +#!/usr/bin/env pythonw +"""Creates a cloud-optimized version of an ICESat-2 HDF5 file.""" + +# Copyright (c) 2024, University of Washington +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the University of Washington nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF WASHINGTON AND CONTRIBUTORS +# “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF WASHINGTON OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +import sys +import argparse +import traceback +import h5py +from h5py import h5p, h5f +import numpy as np +import time + +__version_ = "1.0.1" + + +# ----------------------------------------------------------------------------- +def h5_s2b(s: str) -> bytes: + """Converts a Python3 string to ASCII (bytes) for low-level calls. + + Args: + s: Python string + + Returns: + `s` as bytes + """ + try: + b = s.encode("ascii", "ignore") + except (UnicodeEncodeError, AttributeError): + b = s + return b + + +# ------------------------------------------------------------------------------ +def init(): + """Parses arguments""" + + parser = argparse.ArgumentParser( + description="""Re-writes ICESat-2 HDF5 files using cloud optimization techniques.""" + ) + + parser.add_argument("infile", help="Input HDF5 file.") + + parser.add_argument("outfile", help="Output HDF5 file.") + + parser.add_argument( + "-min_chunk", + "--min_chunk", + required=False, + type=int, + default=500, + help="""Do not resize any dataset with chunksize < this size (num elements).""", + ) + + parser.add_argument( + "-seg_chunk", + "--seg_chunk", + required=False, + type=int, + default=100000, + help="""New chunksize for segment (non_photon) datasets (num elements).""", + ) + + parser.add_argument( + "-ph_chunk", + "--ph_chunk", + required=False, + type=int, + default=1000000, + help="""New chunksize for any photon datasets (num elements).""", + ) + + parser.add_argument( + "-gzip", + "--gzip", + required=False, + type=int, + default=-1, + help="""New gzip level (if dataset is compressed; 0=disable, -1=do not change)""", + ) + + parser.add_argument( + "-fs_space_page", + "--fs_space_page", + dest="fs_space_page", + action="store_true", + required=False, + default=False, + help="Use H5F_FSPACE_STRATEGY_PAGE.", + ) + + parser.add_argument( + "-fs_page_size", + "--fs_page_size", + required=False, + type=int, + default=0.0, + help="""Filespace page size (bytes), 0=do not change (requires -fs_space_page).""", + ) + + parser.add_argument( + "-cache_slots", + "--cache_slots", + required=False, + type=int, + default=0, + help="""Number of cache slots, 0=do not change. (requires -fs_space_page)""", + ) + + parser.add_argument( + "-chunk_cache", + "--chunk_cache", + required=False, + type=int, + default=0.0, + help="""Size of the chunk cache (bytes), 0=do not change. (requires -fs_space_page)""", + ) + + parser.add_argument( + "-user_blocksize", + "--user_blocksize", + required=False, + type=int, + default=0.0, + help="""User block size (bytes), 0=do not change.""", + ) + + parser.add_argument( + "-meta_blocksize", + "--meta_blocksize", + required=False, + type=int, + default=0.0, + help="""Metadata block size (bytes), 0=do not change.""", + ) + + return parser.parse_args() + + +# ------------------------------------------------------------------------------ +def full_path(obj): + """Returns the full pathname of an object""" + + if obj.parent is not None and obj.name != "/": + return os.path.join(full_path(obj.parent), obj.name) + else: + return "" + + +# ------------------------------------------------------------------------------ +def print_stats_hdr(): + """Prints the stats header""" + + print( + " {0:40s} {1:7s} {2:10s} {3:10s} {4:7s} {5:10s} {6:10s}".format( + "name", + "src_zip", + "src_size", + "src_chunks", + "dst_zip", + "dst_nbytes", + "dst_chunks", + ) + ) + print( + " {0:40s} {1:7s} {2:10s} {3:10s} {4:7s} {5:10s} {6:10s}".format( + "----", + "-------", + "----------", + "----------", + "-------", + "----------", + "----------", + ) + ) + + +# ------------------------------------------------------------------------------ +def print_stats(stats: dict): + """Prints stats""" + + print( + " {0:40s} {1:7d} {2:10d} {3:10d} {4:7d} {5:10d} {6:10d}".format( + stats["name"], + stats["src_gzip"], + stats["src_size"], + stats["src_chunks"], + stats["dst_gzip"], + stats["dst_nbytes"], + stats["dst_chunks"], + ) + ) + + +# ------------------------------------------------------------------------------ +def copy_attributes(src, dest): + """Copies attributes from an input object to an output object""" + + if isinstance(src, h5py.Dataset): + for name, value in src.attrs.items(): + # Avoid attributes that belong to dimension scales and the datasets + # they are attached to + if name in ("CLASS", "NAME", "DIMENSION_LIST", "REFERENCE_LIST"): + continue + dest.attrs.create(name, data=value, dtype=value.dtype) + else: + for key in src.attrs.keys(): + dest.attrs.create(key, data=src.attrs[key], dtype=src.attrs[key].dtype) + + +# ------------------------------------------------------------------------------ +def copy_dataset(args, src, dst, name, photons=False): + """Copies a dataset from an input group to an output group""" + + stats = { + "name": name, + "src_gzip": 0, + "src_size": 0, + "src_nbytes": 0, + "src_chunks": 0, + "dst_gzip": 0, + "dst_nbytes": 0, + "dst_chunks": 0, + } + + src_dset = src[name] + chunks = src_dset.chunks + maxshape = src_dset.maxshape + compress = src_dset.compression + compress_opts = src_dset.compression_opts + + if src_dset.compression_opts is None: + stats["src_gzip"] = -1 + else: + stats["src_gzip"] = src_dset.compression_opts + + stats["src_size"] = src_dset.size + stats["src_nbytes"] = src_dset.size + + if src_dset.chunks is None: + stats["src_chunks"] = -1 + else: + stats["src_chunks"] = src_dset.chunks[0] + + # Optionally modify compression (for compressed datasets) + if compress == "gzip": + if args.gzip == 0: + compress = None + compress_opts = None + elif args.gzip > 0: + compress_opts = args.gzip + + # Optionally modify chunking (for select chunked datasets) + # + # This simplistic approach is probably not optimal for 2D or 3D + # datasets, but it's a start. + # + # The 'variable' dimensions for ICESat-2 data are the left-most. + # Do not change any chunksize less than args and do not change + # any chunksize that is equal to maxshape. + if maxshape[0] is None and chunks[0] is not None: + if chunks[0] > args.min_chunk: + chunks = list(chunks) + if photons: + chunks[0] = args.ph_chunk + else: + chunks[0] = args.seg_chunk + chunks = tuple(chunks) + + dst_dset = dst.create_dataset( + name, + shape=src_dset.shape, + dtype=src_dset.dtype, + maxshape=src_dset.maxshape, + chunks=chunks, + compression=compress, + compression_opts=compress_opts, + shuffle=src_dset.shuffle, + fillvalue=src_dset.fillvalue, + track_order=True, + ) + dst_dset.write_direct(np.array(src_dset)) + if src_dset.is_scale: + dst_dset.make_scale(h5py.h5ds.get_scale_name(src_dset.id)) + + copy_attributes(src_dset, dst_dset) + + if dst_dset.compression_opts is None: + stats["dst_gzip"] = -1 + else: + stats["dst_gzip"] = dst_dset.compression_opts + + stats["dst_size"] = dst_dset.size + stats["dst_nbytes"] = dst_dset.size + + if dst_dset.chunks is None: + stats["dst_chunks"] = -1 + else: + stats["dst_chunks"] = dst_dset.chunks[0] + + print_stats(stats) + + return stats + + +# ------------------------------------------------------------------------------ +def copy_group(args, src, dst, name): + """Copies a group from an input file to an output file + + Could do something with stats here. ie: + min/max within each group, etc. Not sure its worth it now. + """ + + src_grp = src[name] + if name != "/": + dst_grp = dst.create_group(name, track_order=True) + else: + dst_grp = dst + + # Copy group attributes + copy_attributes(src_grp, dst_grp) + + path = full_path(src_grp) + print(f"\nGroup: {path}\n") + print_stats_hdr() + + # This hack will only work for ATL03 + if name == "land_ice_segments": + photons = True + else: + photons = False + + # Copy child datasets + for item in src_grp.keys(): + if isinstance(src_grp[item], h5py.Dataset): + if item == "control": + continue + copy_dataset(args, src_grp, dst_grp, item, photons=photons) + + # Copy child groups + for item in src_grp.keys(): + if isinstance(src_grp[item], h5py.Group): + copy_group(args, src_grp, dst_grp, item) + + +# ------------------------------------------------------------------------------ +def optimize_file(args): + """Copies an ICESat-2 HDF5 file to a new cloud-optimized file. + + Uses the low-level h5py APID to open/query the input file and to create + the output file. I started using existing code that was written with an + old h5py and then realized (too late) new h5py supports all these things. + + So, then switches to the high-level APID to actually copy the data. + """ + + strategies = [ + "H5F_FSPACE_STRATEGY_FSM_AGGR", + "H5F_FSPACE_STRATEGY_PAGE", + "H5F_FSPACE_STRATEGY_AGGR", + "H5F_FSPACE_STRATEGY_NONE", + ] + + if not os.path.isfile(args.infile): + print(f"{args.infile} : file does not exist.") + sys.exit(3) + + # Open the input file + try: + in_fid = h5f.open(h5_s2b(args.infile), h5f.ACC_RDONLY) + except Exception as e: + print(f"Error opening input file - {e}") + sys.exit(3) + + # Get info from the file creation plist + try: + fcpl = in_fid.get_create_plist() + fs_strategy = fcpl.get_file_space_strategy() + fspace_page_size = fcpl.get_file_space_page_size() + user_blocksize = fcpl.get_userblock() + except Exception as e: + print(f"Error reading the file creation plist - {e}") + in_fid.close() + sys.exit(3) + + # Get info from the file access plist + try: + fapl = in_fid.get_access_plist() + cache_info = fapl.get_cache() + meta_blocksize = fapl.get_meta_block_size() + except Exception as e: + print(f"Error reading the file access plist - {e}") + in_fid.close() + sys.exit(3) + + cache_slots = cache_info[1] + chunk_cache = cache_info[2] + + strategy_str = strategies[fs_strategy[0]] + print("--") + print(f"Original fs_strategy = {strategy_str}") + print(f"Original fspace_page_size = {fspace_page_size}") + print(f"Original cache_slots = {cache_slots}") + print(f"Original chunk_cache = {chunk_cache}") + print(f"Original userblock_size = {user_blocksize}") + print(f"Original meta_blocksize = {meta_blocksize}") + print("--") + + # Apply any optional argument values + if args.fs_space_page: + fs_strategy = list(fs_strategy) + cache_info = list(cache_info) + fs_strategy[0] = 1 + if args.fs_page_size > 0.0: + fspace_page_size = args.fs_page_size + if args.chunk_cache > 0.0: + cache_info[2] = args.chunk_cache + if args.cache_slots > 0.0: + cache_info[1] = args.cache_slots + fs_strategy = tuple(fs_strategy) + cache_info = tuple(cache_info) + + if args.user_blocksize > 0.0: + user_blocksize = args.user_blocksize + if args.meta_blocksize > 0.0: + meta_blocksize = args.meta_blocksize + + # Create a new file create property list + try: + fcpl = h5p.create(h5p.FILE_CREATE) + fcpl.set_link_creation_order(h5p.CRT_ORDER_TRACKED | h5p.CRT_ORDER_INDEXED) + fcpl.set_attr_creation_order(h5p.CRT_ORDER_TRACKED | h5p.CRT_ORDER_INDEXED) + fcpl.set_file_space_strategy(fs_strategy[0], fs_strategy[1], fs_strategy[2]) + fcpl.set_file_space_page_size(fspace_page_size) + fcpl.set_userblock(user_blocksize) + except Exception as e: + print(f"Error creating the file creation plist - {e}") + in_fid.close() + sys.exit(3) + + # Create a new file access property list + try: + fapl = h5p.create(h5p.FILE_ACCESS) + fapl.set_cache(cache_info[0], cache_info[1], cache_info[2], cache_info[3]) + fapl.set_meta_block_size(meta_blocksize) + except Exception as e: + print(f"Error creating the file access plist - {e}") + in_fid.close() + sys.exit(3) + + # Create the output file + try: + out_fid = h5f.create(h5_s2b(args.outfile), h5f.ACC_TRUNC, fcpl=fcpl, fapl=fapl) + except Exception as e: + print(f"Error creating the output file - {e}") + sys.exit(3) + + # Get info from the file creation plist + try: + fcpl = out_fid.get_create_plist() + fs_strategy = fcpl.get_file_space_strategy() + fspace_page_size = fcpl.get_file_space_page_size() + user_blocksize = fcpl.get_userblock() + except Exception as e: + print(f"Error reading the file creation plist - {e}") + in_fid.close() + out_fid.close() + sys.exit(3) + + # Get info from the file access plist + try: + fapl = out_fid.get_access_plist() + cache_info = fapl.get_cache() + meta_blocksize = fapl.get_meta_block_size() + except Exception as e: + print(f"Error reading the file access plist - {e}") + in_fid.close() + out_fid.close() + sys.exit(3) + + cache_slots = cache_info[1] + chunk_cache = cache_info[2] + + strategy_str = strategies[fs_strategy[0]] + print("--") + print(f"Revised fs_strategy = {strategy_str}") + print(f"Revised fspace_page_size = {fspace_page_size}") + print(f"Revised cache_slots = {cache_slots}") + print(f"Revised chunk_cache = {chunk_cache}") + print(f"Revised userblock_size = {user_blocksize}") + print(f"Revised meta_blocksize = {meta_blocksize}") + print("--") + + # Close the files so we can reopen them in the high-level APID + in_fid.close() + out_fid.close() + + # Read from input file and write to output file + try: + beg_time = time.time() + + with h5py.File(args.infile, "r") as src, h5py.File(args.outfile, "r+") as dst: + copy_group(args, src, dst, "/") + + # Attach dimension scales in the output file exactly how it is in + # the input file + def attach(name, obj): + if isinstance(obj, h5py.Dataset): + for idx, dim in enumerate(obj.dims, start=0): + for scale in dim.values(): + print(f"Dimscale {scale.name} attached to {obj.name} at dim #{idx}") + dst[obj.name].dims[idx].attach_scale(dst[scale.name]) + + src.visititems(attach) + + end_time = time.time() + + except Exception as e: + print(f"Error reading/writing data - {e}") + print(traceback.format_exc()) + in_fid.close() + out_fid.close() + sys.exit(3) + + # Print file sizes/change + src_stats = os.stat(args.infile) + dst_stats = os.stat(args.outfile) + src_mb = src_stats.st_size / (1024 * 1024) + dst_mb = dst_stats.st_size / (1024 * 1024) + schange = (dst_mb / src_mb) * 100.0 + print("--") + print("Total read/write time=", end_time - beg_time) + print(f"File Sizes (MiB): input={src_mb}, output={dst_mb}, change={schange}%") + print("--") + + +# ------------------------------------------------------------------------------ +def run(): + args = init() + optimize_file(args) + + +# ------------------------------------------------------------------------------- +if __name__ == "__main__": + run() diff --git a/notebooks/ros3.png b/notebooks/ros3.png deleted file mode 100644 index 9a5653f..0000000 Binary files a/notebooks/ros3.png and /dev/null differ diff --git a/notebooks/stats-default.png b/notebooks/stats-default.png new file mode 100644 index 0000000..8f91bde Binary files /dev/null and b/notebooks/stats-default.png differ diff --git a/notebooks/stats.png b/notebooks/stats.png deleted file mode 100644 index 3ecc72c..0000000 Binary files a/notebooks/stats.png and /dev/null differ diff --git a/paper.qmd b/paper.qmd index 571b039..1ee2e74 100644 --- a/paper.qmd +++ b/paper.qmd @@ -118,13 +118,13 @@ shows how reads (Rn) are done in order to access file metadata, In the first rea #### **Background and data selection** -As a result of community feedback and “hack weeks” organized by NSIDC and UW eScience Institute in 2023[@h5cloud2023], NSIDC started the Cloud Optimized Format Investigation (COFI) project to improve access to HDF5 from the ICESat-2 mission. A spaceborne lidar that retrieves surface topography of the Earth’s ice sheets, land and oceans [@NEUMANN2019111325]. Because of its complexity, large size and importance for cryospheric studies we targeted the ATL03 dataset. ATL03 core data are geolocated photon heights from the ICESat-2 ATLAS instrument. Each file contains 1003 geophysical variables in 6 data groups. Although our research was focused on this dataset, most of our findings are applicable to any dataset stored in HDF5 and NetCDF4. +As a result of community feedback and “hack weeks” organized by NSIDC and UW eScience Institute in 2023[@h5cloud2023], NSIDC started the Cloud Optimized Format Investigation (COFI) project to improve access to HDF5 from the ICESat-2 mission, a spaceborne lidar that retrieves surface topography of the Earth’s ice sheets, land and oceans [@NEUMANN2019111325]. Because of its complexity, large size and importance for cryospheric studies we targeted the ATL03 data product. The most relevant variable in ATL03 are geolocated photon heights from the ICESat-2 ATLAS instrument. Each ATL03 file contains 1003 geophysical variables in 6 data groups. Although our research was focused on this dataset, most of our findings are applicable to any dataset stored in HDF5 and NetCDF4. ## Methodology -We tested access times to original and different configurations of cloud-optimized HDF5 ATL03 files [list files tested] stored in AWS S3 buckets in region us-west-2, the region hosting NASA’s Earthdata Cloud archives. Files were accessed using Python tools commonly used by Earth scientists: h5py and Xarray[@Hoyer2017-su]. h5py is a Python wrapper around the HDF5 C API. xarray^[`h5py` is a dependency of Xarray] is a widely used Python package for working with n-dimensional data. We also tested access times using h5coro, a python package optimized for reading HDF5 files from S3 buckets and kerchunk, a tool that creates an efficient lookup table for file chunks to allow performant partial reads of files. +We tested access times to original and different configurations of cloud-optimized HDF5 [ATL03 files](https://its-live-data.s3.amazonaws.com/index.html#test-space/cloud-experiments/h5cloud/) stored in AWS S3 buckets in region us-west-2, the region hosting NASA’s Earthdata Cloud archives. Files were accessed using Python tools commonly used by Earth scientists: h5py and Xarray[@Hoyer2017-su]. h5py is a Python wrapper around the HDF5 C API. xarray^[`h5py` is a dependency of Xarray] is a widely used Python package for working with n-dimensional data. We also tested access times using h5coro, a python package optimized for reading HDF5 files from S3 buckets and kerchunk, a tool that creates an efficient lookup table for file chunks to allow performant partial reads of files. -The test files were originally cloud optimized by “repacking” them, using a relatively new feature in the HDF5 C API called “paged aggregation”. Page aggregation does 2 things: it collects file-level metadata from datasets and stores it on dedicated metadata blocks in the file; and it forces the library to write both data and metadata using these fixed-size pages. Aggregation allows client libraries to read file metadata with only a few requests and uses the page size used in the aggregation as the minimal request size, overriding the 1 request per chunk behavior. +The test files were originally cloud optimized by “repacking” them, using a relatively new feature in the HDF5 C API called “paged aggregation”. Page aggregation does 2 things: fisrt, it collects file-level metadata from datasets and stores it on dedicated metadata blocks at the front of the file; second, it forces the library to write both data and metadata using these fixed-size pages. Aggregation allows client libraries to read file metadata with only a few requests using the page size as a fixed request size, overriding the 1 request per chunk behavior. ::: {#fig-2 fig-env="figure*"} @@ -158,7 +158,7 @@ for an HTTP request, especially when we have to read them sequentially. Because | page-only-8mb | paged-aggregated file with 4mb per pag8 | ~1% | 1.5km | (10000,) | 8MB | 35kb | | rechunked-4mb | page-aggregated and bigger chunk sizes | ~1% | 10km | (100000,) | 4MB | 400kb | | rechunked-8mb | page-aggregated and bigger chunk sizes | ~1% | 10km | (100000,) | 8MB | 400kb | -| rechunked-8mb-kerchunk | kerchunk sidecar of the last paged-aggregated file | N/A | 10km | (10000,) | 8MB | 400kb | +| rechunked-8mb-kerchunk | kerchunk sidecar of the last paged-aggregated file | N/A | 10km | (100000,) | 8MB | 400kb | This table represents the different configurations we used for our tests in 2 file sizes. It's worth noticing that we encountered a few outlier cases where compression and chunk sizes led page aggregation to an increase in file size of approximately 10% which was above the desired value for NSIDC (5% max) We tested these files using the most common libraries to handle HDF5 and 2 different I/O drivers that support remote access to AWS S3, fsspec and the native S3. The results of our testing is explained in the next section and the code @@ -167,14 +167,30 @@ to reproduce the results is in the attached notebooks. ## Results +::: {#fig-4 fig-env="figure*"} + +![](figures/figure-4.png) + +shows that using paged aggregation alone is not a complete solution. This behavior us caused by over-reads of data now distributed in pages and the internals of HDF5 not knowing how to optimize +the requests. This means that if we cloud optimize alone and use the same code, in some cases we'll make access to these files even slower. A very important thing to notice here is that rechunking the file, in this case using 10X bigger chunks results in a predictable 10X improvement in access times without any cloud optimization involved. +Having less chunks generates less metadata and bigger requests, in general is it recommended that chunk sizes should range between 1MB and 10MB[Add citation, S3 and HDF5] and if we have anough memory and bandwith even +bigger (Pangeo recommends up to 100MB chunks)[Add citation.] + +::: + + + ::: {#fig-5 fig-env="figure*"} ![](figures/figure-5.png) -Benchmarks show that cloud optimizing ATL03 files improved access times at least an order of magnitude when used with aligned I/O patterns, this is telling the library about the cloud optimization and page size. +shows that performance once the I/O configuration is aligned with the chunking in the file, access times perform on par with cloud optimized access patterns like Kerchunk/Zarr. +These numbers are from in-region execution. Out of region is considerable slower for the non cloud optimized case. ::: + + ## Recommendations We have split our recommendations for the ATL03 product into 3 main categories, creating the files, accessing the files, and future tool development. @@ -204,11 +220,11 @@ will be filled but that is not the case and we will end up with unused space [Se ### Recommended access patterns -Placeholder +In progress ### Recommended tooling development -Placeholder +In progress ### Mission implementation