From 881c3e212f7bf80adcc9b518ccad52eca79e5a93 Mon Sep 17 00:00:00 2001 From: yinkanglong Date: Thu, 6 May 2021 21:11:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BA=94=E6=9C=88=E4=BB=BD=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=BC=80=E5=A7=8B=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tensorflow/TensorFlow2.0/11 联邦学习.ipynb | 555 ++++++++++++++++-- .../TensorFlow2.0/12 联邦学习-文本生成.ipynb | 0 .../2021-05-06 20-44-37屏幕截图.png | Bin 0 -> 92043 bytes 工作日志/2021年3月18日-今日计划.md | 2 +- 工作日志/2021年3月19日-四月份计划.md | 4 +- 工作日志/2021年3月20日-今日计划.md | 2 +- 工作日志/2021年3月21日-今日计划.md | 2 +- 工作日志/2021年3月22日-今日计划.md | 2 +- 工作日志/2021年3月23日-今日计划.md | 2 +- 工作日志/2021年3月25日-今日计划.md | 4 +- 工作日志/2021年3月26日-开组会.md | 2 +- 工作日志/2021年3月29日-今日计划.md | 2 +- 工作日志/2021年3月31日-今日计划.md | 2 +- 工作日志/2021年4月21日-今日计划.md | 8 +- 工作日志/2021年4月27日-今日计划.md | 6 +- 工作日志/2021年4月2日-今日计划.md | 4 +- ...7日-五月份计划.md => 2021年5月1日-五月份计划.md} | 5 +- 17 files changed, 545 insertions(+), 57 deletions(-) create mode 100644 Tensorflow/TensorFlow2.0/12 联邦学习-文本生成.ipynb create mode 100644 Tensorflow/TensorFlow2.0/2021-05-06 20-44-37屏幕截图.png rename 工作日志/{2021年4月17日-五月份计划.md => 2021年5月1日-五月份计划.md} (76%) diff --git a/Tensorflow/TensorFlow2.0/11 联邦学习.ipynb b/Tensorflow/TensorFlow2.0/11 联邦学习.ipynb index 3040fc5f..69f42296 100644 --- a/Tensorflow/TensorFlow2.0/11 联邦学习.ipynb +++ b/Tensorflow/TensorFlow2.0/11 联邦学习.ipynb @@ -10,12 +10,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.6.9" }, "orig_nbformat": 2, "kernelspec": { - "name": "python388jvsc74a57bd0238245627cfcfafd0885ed67ad6caa77217e3abcf58754ab647d5e61878a8b28", - "display_name": "Python 3.8.8 64-bit ('tensorflow': conda)" + "name": "python369jvsc74a57bd04b23302ac1afbd304ec4e8c0fc43b716576fbc7dc9e2bf77d7de3e404cbbffbc", + "display_name": "Python 3.6.9 64-bit ('tensorflow')" } }, "nbformat": 4, @@ -26,7 +26,16 @@ "# 开始\n", "\n", "> tensorflow的学习成本有点高。而且。现在好像更多的人pytorch在做训练。改成pytorch吧。改天回来复习这一块,试一试能不能用上。\n", - "> 我发现我这种菜鸡,无论是什么框架都搞不出来。这几天,先把这个搞定。然后按着计划复习。" + "> 我发现我这种菜鸡,无论是什么框架都搞不出来。这几天,先把这个搞定。然后按着计划复习。\n", + "\n", + "## 实现过程\n", + "\n", + "1. 通过tff.simulation.datasets加载tff.simulation.ClientData类型的数据集。\n", + "2. 并使用tf.data.dataset处理数据集。\n", + "3.1. 通过tf.keras.models和tff.learning.Model构造联邦学习模型。\n", + "3.2. 通过tff.learning.build_federated_averaging_process实现联邦聚合算法。通过tf.keras实现前向传播算法。\n", + "3.3. 通过tf.kerase.loss实现损失计算方法\n", + "3.4. 通过tf.kerase.optimizers.SGD实现优化算法" ], "cell_type": "markdown", "metadata": {} @@ -36,6 +45,18 @@ "execution_count": 1, "metadata": {}, "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "WARNING:tensorflow:From /home/ykl/.virtualenvs/tensorflow/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/compiler/tensorflow_computation_transformations.py:59: extract_sub_graph (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use `tf.compat.v1.graph_util.extract_sub_graph`\n", + "WARNING:tensorflow:From /home/ykl/.virtualenvs/tensorflow/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/compiler/tensorflow_computation_transformations.py:59: extract_sub_graph (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use `tf.compat.v1.graph_util.extract_sub_graph`\n" + ] + }, { "output_type": "execute_result", "data": { @@ -63,11 +84,29 @@ "tff.federated_computation(lambda: 'Hello, World!')()" ] }, + { + "source": [ + "## 1 加载数据\n", + "\n", + "× 通过tff.simulation.datasets加载实验数据。返回多个tff.simulation.ClientData实例。" + ], + "cell_type": "markdown", + "metadata": {} + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tff-datasets-public/fed_emnist_digitsonly.tar.bz2\n", + "97402880/97398400 [==============================] - 10s 0us/step\n" + ] + } + ], "source": [ "# 1 加载数据\n", "emnist_train, emnist_test = tff.simulation.datasets.emnist.load_data()" @@ -75,16 +114,14 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "3383\n", - "OrderedDict([('label', TensorSpec(shape=(), dtype=tf.int32, name=None)), ('pixels', TensorSpec(shape=(28, 28), dtype=tf.float32, name=None))])\n", - "5\n" + "3383\nOrderedDict([('label', TensorSpec(shape=(), dtype=tf.int32, name=None)), ('pixels', TensorSpec(shape=(28, 28), dtype=tf.float32, name=None))])\nodict_keys(['label', 'pixels'])\n5\ntf.Tensor(\n[[1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 0.99607843\n 0.99215686 0.99607843 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 0.9882353 0.9882353 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 0.99215686 1. 1. 1. 1.\n 0.8117647 0.91764706 1. 0.99607843 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 0.9882353 1. 1. 0.7176471 0.3137255 0.14117648\n 0.02352941 0.47058824 1. 0.9882353 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 0.9882353\n 1. 0.7647059 0.16078432 0.11372549 0.33333334 0.5803922\n 0.88235295 0.98039216 0.99607843 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 0.99607843 1. 1.\n 0.6901961 0.2627451 0.64705884 0.9764706 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 0.99607843 0.98039216 0.99607843 0.38039216\n 0.29803923 1. 1. 1. 0.9843137 0.9882353\n 0.99215686 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 0.18431373\n 0.25882354 0.92941177 0.98039216 0.99215686 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 0.99607843 0.99607843 0.9137255 0.5019608 0.92156863 1.\n 0.08627451 0.3882353 1. 0.9843137 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 0.9882353 1. 0.42745098 0.01176471 0.5529412 0.56078434\n 0.05882353 0.7294118 0.99607843 0.9882353 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 0.99607843 1. 0.92156863 0.48235294 0.23529412 0.23529412\n 0.6901961 1. 0.99607843 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 0.99607843 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 0.99607843 0.9843137 0.9882353 0.9882353\n 0.9882353 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]\n [1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. 1. 1.\n 1. 1. 1. 1. ]], shape=(28, 28), dtype=float32)\n" ] } ], @@ -99,29 +136,30 @@ "\n", "example_element = next(iter(example_dataset))\n", "\n", - "print(example_element['label'].numpy())" + "print(example_element.keys())\n", + "print(example_element['label'].numpy())\n", + "print(example_element['pixels'])" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { - "output_type": "error", - "ename": "ImportError", - "evalue": "DLL load failed while importing ft2font: 找不到指定的模块。", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexample_element\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'pixels'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'gray'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maspect\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'equal'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0m_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mD:\\anaconda\\envs\\tensorflow\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 172\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 173\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 174\u001b[1;33m \u001b[0m_check_versions\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 175\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 176\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mD:\\anaconda\\envs\\tensorflow\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36m_check_versions\u001b[1;34m()\u001b[0m\n\u001b[0;32m 157\u001b[0m \u001b[1;31m# Quickfix to ensure Microsoft Visual C++ redistributable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 158\u001b[0m \u001b[1;31m# DLLs are loaded before importing kiwisolver\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 159\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mft2font\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 160\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 161\u001b[0m for modname, minver in [\n", - "\u001b[1;31mImportError\u001b[0m: DLL load failed while importing ft2font: 找不到指定的模块。" - ] + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:39:48.714997\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } } ], "source": [ + "# 1 查看数据几中的数据。\n", "from matplotlib import pyplot as plt\n", "plt.imshow(example_element['pixels'].numpy(), cmap='gray', aspect='equal')\n", "plt.grid(False)\n", @@ -130,27 +168,474 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [ { - "output_type": "error", - "ename": "ImportError", - "evalue": "DLL load failed while importing ft2font: 找不到指定的模块。", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32mD:\\anaconda\\envs\\tensorflow\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 172\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 173\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 174\u001b[1;33m \u001b[0m_check_versions\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 175\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 176\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mD:\\anaconda\\envs\\tensorflow\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36m_check_versions\u001b[1;34m()\u001b[0m\n\u001b[0;32m 157\u001b[0m \u001b[1;31m# Quickfix to ensure Microsoft Visual C++ redistributable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 158\u001b[0m \u001b[1;31m# DLLs are loaded before importing kiwisolver\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 159\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mft2font\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 160\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 161\u001b[0m for modname, minver in [\n", - "\u001b[1;31mImportError\u001b[0m: DLL load failed while importing ft2font: 找不到指定的模块。" + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:49:43.314200\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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jOMaXQN96ThYPka99Pd5DXRGvOM+FVjZkvT444+js7MTjz/+OPbt24c777wTdXV1sNvt67E9l3Fcw6tn5WeVybcnAchk5SNjuOKy3oviPFG+ZWydxqai9bl6ViT+wd7sRgdmVnOPeMKuPJ6MY+4RO57CwkJs2LABTqeTJYE55k/1raRcYn+pUqlQWlqKdDoNi8XCyrgcJMZKo9HA7Xbjfe97HzZu3IjKykqYTCbpaxjT3HBpnOT/zhgqmzgJdjqdqK2txZ133onGxkZ4vV4YjUbGLwfJ+062xdwhzhOVWFmckcoOMQsnZucutY6DdLaMFWtS2XEpVuisq1w/RpwxXHFZcby0ouPNBukZbpOMI9tivliTKivxOuiCggIUFhYCWLd3I+PIsU2+eMdxTKVSEAQBfX19UKlUaGhokCZbrJZbV3wv5ofLquwQ25w8tyD2p9nsUzO2jQWAEvbH8cO7gp1Q7lvzGMpLBdcBY7hiTcqugaytcjCOjGG+WJM+VUx46HS69b6SlHHk2CZfXPZcIxwOA4B0vso6zz8YR7bFfLFmcczSOGf9kx0KwA/vCsYx961pDMUMLJMd645tMfet2Wpylso9GcMVbIu5jzHMD2seRyY71h3bYn7IyzjyqHCidyHuJyfKHiXuaaV3LsuVOkTvepe2QbZFIhJxxEVERER0GTi5IiIiUh5WdhARERG9Q0x0EGUX2yARvRVWdhARERERERFRXmGyg4iIiIiIiIjyCpMdRERERERERJRXmOwgIiIiIiIiorzCZAcRERERERER5RUmO4iIiIiIiIgorzDZQURERERERER5hckOIiIiIiIiIsorTHYQERERERERUV5RpdPpbD8DEREREREREdGaYWUHEREREREREeUVJjuIiIiIiIiIKK8w2UFEREREREREeYXJDiIiIiIiIiLKK0x2EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFeY7CAiIiIiIiKivKJ9m99Pr8tTZI4q2w+gEIxj7mMM8wPjmPsYw/zAOOY+xjA/MI65jzHMD3kZR1Z2EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFeY7CAiIiIiIiKivMJkBxERERERERHlFSY7iIiIiIiIiCivMNlBRERERERERHlFEcmOdDrXr/Ulyi/pdFr6i4iIiIiIKNdos/kfFydSKpUqm49BRJdgmyQiIiIiolyW1WQHsJLwSKVSUKlU0l9ElH2CIAAANBpNlp+EiIiIiIjoL5PVZIdKpUI0GsXs7CwsFgsMBgPMZjPUakXsriHKa+l0+k2Ti2ICcnJyEgDg9XqZhCQiIqKcIlaQi9tyubBK9O6TlWRHKpVCIpHA0NAQ/H4/hoaG0NraiurqammiFY/HodVqodVmvfiEKO+J7S6ZTKK/vx8TExMQBAEFBQUoKyvjwIAoQy49F4dtjYjo8sgTG/KFHfavRNkjH++sZ1tcl0zCpX+4RCKBhYUFPPjgg+jr60N7ezs+97nPwefzIZVKIZVKYX5+HhaLBXa7fT0ekehdR97RpNNpxONxLC4u4re//S2eeOIJbN26Fa2trdi+fbs0YGDVVW5IpVLSPzNmypVKpVYdBCxfdeSgPPew3eWuPxU7xjV3yA9XV6vVq/pS9qm5i20wt4ltUh5HjUazbm0y48kO+SCus7MTJ0+ehEqlQjweR39/P7RaLW677TY0NzfDYrEAAOLxOObm5gCAyY4c9FbbI0g5YrEYIpEIdDodNBoNDAYDxsbG8Nhjj+HcuXOIRqPYt28fWltbpTM7GNPcoVareZNODnizpAbbWe4S2106ncby8jIEQUA6nYbBYIBer8/249GfIJ8Qi0lIkUajYX+aI+RxFGM5MzODSCSChYUFFBQUwGq1wu12Q6fTsb/NEUxw5K632j6WV5Ud8ixrf38/nnnmGRQUFEClUmFiYgK1tbXYt28fqqurYTQakUwmkUwmEQwGYbVaM/14tEbErUdqtRpqtZrbjxQuEolgdnYWNpsNBoMBWq0WU1NTeP755zEzMwOVSoW2tja0trZyVSQHiRVyqVSKAzoFE1c65KsdWq2WlR05SBznCIKAZDKJQCAAQRAgCAKcTieTHQomxk1sj4lEQvp3jUYjLQqo1Woe2K1w8j5VEATE43GMj49jYWEBY2NjKCkpgcfjgclkgsVigU6ny/Yj09uQJxpZYZx75OfmiBcfAJD61PWQ0Rmp+KGcm5vD008/jePHj+Ps2bP4yEc+grKyMvT19cFqtWL79u0wmUwrD6TVwmg0wuVywWw2Z/Lx6DLJB3enTp3Cd77zHRw4cABXXHGFlLyS37RD2SN2NoIgIBwO4+GHH8YPfvAD/O3f/i3a2towPT2NEydO4MKFC/joRz+K/fv3o6qqiitaOUJeQbe0tISxsTEcPXoU/f39uPfee1FWVpblJyQ5QRAQCoVw8eJF9PX14eLFi9BoNLBarbjlllvg8XhQWlqa7cekv8DCwgKmpqbw4osvYmBgAH19fUgmk9BoNLjnnnuwf/9+WK1WLgQojJiYOnz4MIaHh9HX14f+/n4EAgFotVpYLBYUFRVh165d2LhxI9ra2rgQp1DRaBTDw8MYHBxEZ2cn2tvbMTk5iampKcRiMSQSCeh0OpjNZnz+859HS0sLduzYwW26CicIAkZGRpBIJJBIJFBWVgaXy5Xtx6K3IY5L1Wo1JiYmMDc3h9deew3JZBIGgwG7du1CS0vLurwTM/ZfECfCi4uLmJiYQHt7O6anp1FQULDqD6bValFQUIB0Oo1kMil9mK1WKwwGQ6Yejy6T+CFOpVKYnp7G0NAQLly4gG3btq3K3FH2ySfC0WgUPT096Ovrw9DQEKLRKARBwIULFzA2Nga3242qqiq0tLTAaDRKP4PJKuUTSwWXlpbQ2dmJgYEBjI2NIR6PZ/vRSEbsM2dnZ3HhwgWMjIxgeHgYAGA0GlFaWorKykpYLBYYjUZWBChcPB7HzMwMRkdH0dfXh9OnT2N8fBypVAqhUAhzc3OYmppCKBSSFnC41VMZxHGqOEmenJxEIBDAwsICFhcXYTabpaqrgYEBqNVqmM1mFBYWwufz/dHhl5QdqVQKExMTCAQC6OzsxODgILq6utDb2wu/349kMglBEBCNRhEKhZBKpbC0tIREIpHtR6c/QRy7RqNRnD9/HgDgdrvhdrtX/T7bnzLJKx27u7sxNDSEM2fOIJVKwWazob6+XloQyHRfuubJDrGETNy7evjwYbS3t+P+++/H3r178clPfhKjo6Nob28HAKnEOhwOIxqNYnJyElqtFg0NDSwXVCh5jKPRKB555BGcO3dOOlS2srISWq121T4tyh75//+JiQl87Wtfw9LSEurq6lBTUwO73Y4f/vCHKCwsxF//9V/jyiuvhNfrlcpA2Q6VTxyQp9Np9Pb24tvf/jZ8Ph+8Xq+UXObAILvE/lAQBDz00EO4ePEiXn31VRQVFaGiogKBQAATExP43e9+h23btuErX/kKGhsb4fP5pAQy26IyyA9AnJmZwQ9+8AOcPHkShw8fhtlsRnFxMf73//7f6Ovrw7e+9S3MzMxgaGgIDocDer2ebVEhxDMdwuEwOjo6UFJSggMHDmDfvn0AgJKSEoRCIekg/WeffRY+nw+tra34h3/4By7IZZlYOZxMJvHzn/8c58+fx9GjR6X3YXV1Ndra2nDNNdcgGo2it7cXr7/+Ovr7++Hz+aSElTjRImWQb3uIx+OYnp7GF77wBfh8PvyX//JfpKpH9qPKJD90fXFxEVNTU/jmN7+Jw4cPQ6vVwmazwev1orW1FRs2bIDL5cp4dcea//RLJ7cejwdlZWXw+XxIJBI4ffo0RkZGsLi4iGAwiO7ubjz88MMIBAJYWlrC8vIyiouLUVtbK52kTMqUTCYRCoVw+vRphMNhHDhwADU1NTAYDCwLVAj5VqOzZ8+io6MDw8PDqKiowO7duzE1NQW/3w+n04nq6mps3rwZdrsd4XAYRqORkyuFE+Mr3nLV29uL3t5eLC0toaqqCnv27IHVauWgQEHUajUaGxtht9tRXl6OgoICuFwuvPHGGxgcHIRarYZer4fdbpeqOhg3ZVOpVCgtLcXu3bvR1NSE8vJy1NbWYnZ2FuFwGMlkku9CBRLP5HA6nbj++utht9tRXFwsJRcLCgoQDAaRSqXQ1dWFeDyO5eVlRKPRVT+D7TM7xPmGWq1GdXU1DAYDKioqoNVqYTAYUFhYiIKCAtTX12NoaAjHjx9HUVERHA4HysrKYLfb+W5UIHlMxC2BarUaDocDdXV1UtwYM2WSx29sbAyHDx+G3++H2WzGLbfcIl1QIv/aTMtIKkV8qatUKpSXlyMWi6G1tRUzMzN48cUXMT4+juXlZTidTkQiEczPz2N6ehoLCwuw2WzYtGkT7rjjDumgNlIelUqFWCyGxcVFHDlyBFVVVfjMZz6DhoYG6PX6VQfuUfaIiY5YLIYXX3wRZ86cweDgIDZv3oyDBw/ixRdfxPDwMMrLy7FhwwZs374di4uLCAQCKC4uZvvLAalUChqNBolEAseOHcP58+exvLyMjRs34uDBg1yxUgixLWk0GlxxxRUAAIfDIa0uz87OYm5uDjabDXa7HUVFRTCZTBzUKZB8UUetVsNgMKClpQW7du3CTTfdhKqqKgDAxYsXEQqFmOxQILFf1Gq1KCoqwoc//OE3/f1AIACVSoXXXntNqnYUBEGKP/vX7JG3we3btyOZTKK4uBgmk+mPzlVJJBKYmJhATU0NKisrUVFRAafTKY1V2ccqh1g5rlKp0NHRgbNnz8JsNsPr9aKtrW1VZR0pl0qlQn9/Px555BEEAgGUlJTgc5/7HAYHB3Hfffflz20sarVaOvX4S1/6krSP7oknnsD8/Dw+8YlPwOVywWKxSB1OYWEhHA4HgsEg0uk0bDZbJh+R/kLyA0cfffRRnDt3Dl6vFxs2bMCmTZukWHL7SnbJDwZaWlqC3+/HkSNH0NnZCZPJhNOnT+Pv//7vMTo6inA4DIfDgVAohIWFBVRXV8Pr9eKqq66C3W5nPBVKHuP5+XmMj4/jwQcfhNPpxFe+8hXs2LFj1dczfsqQTqdhtVoRiURw9uxZtLe345VXXsHQ0BAEQcAXvvAFNDU1obCwULopgLFTLpfLhY985COIx+OIx+O4cOECjh8/jlgsho6ODhQXF6OsrAxlZWXQarWrJsqUPZfGQNzOsri4iGeeeQYDAwNYXl5GIBBAf38/LBaLlECuqamRtmBzwpV9arUaPp9PuuZZrVZLE+ZgMIgf/ehHGB8fh8fjwTXXXIM9e/bA4XBwbKNQYqIjnU7j5ZdfxpEjR3D99ddj69atq274JGUSt+uGw2HMzs5idHQUt99+O1pbW2G32yEIAgKBANRqNQoKClYVSGRKxo9ANRqNMBqNcLvdMJlMCIVCKC0tlU5idTqdUtmuXq+XVpMXFhaQTCYz/Xj0DogrGxcvXsTp06dRVlaGiooKeDyeVWX1pAyCICCRSCAej0vl1qFQCEeOHEE6nYZWq4XD4cDS0hLOnTsnldDLz4EAOOFSGvmZOHNzcxgZGcHg4CCsViv27NmDoqIiDggURr6tLBKJoK+vDxcuXMCpU6dgMBjg8Xiwa9cu+Hy+VQcEkzKJ/WdRURFCoZB07srY2BgCgQCmp6dhNpthsVhgtVp5jbeCpFKpPxqrJJNJLC8vo7u7G2fPnsXMzAzC4TD8fj+uvPJK1NfXY+vWrfD5fOsyQKc/n7ySQzxXLhQKwe/349ixY0gmk/D5fKitrUVTU5N0tTCTVcqjVquRSCQQi8UwNDSE4eFh1NfXo7KyMtuPRm9DfvPj/Pw8wuEw0uk0WltbpYpW8WBgjUYDvV6/Lgc9ZzzZIU6Y1Go1enp68Jvf/AZbtmxBdXU1tm3bBovFAmB1ia+4j5JXtCmHPI7T09Po7+/HkSNH0N/fj6997WuoqqrixEpB5J2Gw+GAzWbDj370I0QiESwtLeGBBx7A9773Pdx2221obm5GS0sLdDod0uk0GhoaUF5eLlVV8dwO5fvNb36DY8eOobm5GVu3bkVNTQ3PzVEY8WWeSqXw+uuv4+LFi/jZz36GXbt24b777kNNTQ0cDgcKCgqkm5P0ej3bn4KlUimMjY3hu9/9LoLBIEKhkHRw96uvvgq1Wg232w21Wg21Wg2tVst4KsTi4iKWlpZgMBig0+ngcDig0+mkrdQajQYPPPAAysrKcO+990rXJFosFsZQgeSJZLG9Pf744zhz5gwmJyexfft2fP3rX5du2OF7UXnk84ze3l4cP34ck5OTMJlMuPbaa+Hz+aTfJ+URE8gajQbz8/N44IEHsLi4iJtuugltbW3wer14+umnMTY2hubmZng8Hmg0mnU5gD2j2QRx8ptMJqVSenHfTn19PYxG41uey6HT6fiBVqB0Oi1dmWi1WlFTU4PS0lI4HA7evqJQYklgcXExlpaWMDU1JQ3CW1pasGXLFlRUVECj0SCVSqGwsBAWi4XtT8HkV7KFw2GMjo5iamoK733ve9HU1CS9NJiAVJZYLIZIJIJTp06ht7cXRqMRZrMZRqNRuu7S7/dDo9HAZDKhurpaOnmelEE+qbpw4QKGhoawsLAAi8WCsrIyjI2NIRwOw2azQa/Xo6ioCNPT0zh69CiKiopgtVpRUlICg8HA2zzWmbxKcWpqCqOjo1KC0W63Q6fTwWQyoby8HMvLy1Lyo7a2FsXFxbDb7Vn+E9DbUalU0jmAfX19mJ6expYtW7Bp0yY4nU4ArFbNBYFAAD09PQBWDgq2Wq0wGo2sHFc4+bx/dnYW0WgUgiBgZGQEy8vLOH36NBKJBDZu3ChdIbwe8cxYskN+gIy4d3VkZAThcBiNjY248sorpckVsPrAL5VKxaoOBRJj2tPTg9///vfYtGkTqqqqUFxcDIvFwheIQolxMxqNmJubw0svvYT5+Xls2rQJBw4cwK5du7L9iPQXkK9++P1+9PX1obu7G9PT0/jwhz+M8vJytkUFkSecxGvYfvnLX2Jubg4f+MAHUFhYiJmZGbS3t2NkZASvv/467HY7Nm3ahLvvvhvFxcUA/vimM1p/Yl+aTCYRiURw//33Y2xsDE6nE9u2bcNtt92G733vewgEAti5cycMBgPsdjtOnjyJ5557Dhs2bEBFRQXe+973oqioCMXFxWyr60h+RsPZs2dx6NAh1NXVoaKiAvX19VICauvWrSgsLMRPfvITeDwetLS0wOl0SiuQPKtDmcS5Q3d3N5566imcOXMG6XQaP/zhD1FUVLTq69jelEf+rpyYmMAbb7whHW8g3g4onnnE+ClbMpnEzMwMIpEIEokEHn30UQDACy+8gG3btuHv//7vUVZWtm7Jq3XZxjI/P4/HH38cgiDgpptuQnl5OYxGo7TizH2syiZ+GOPxOEZHR9Hb24uuri5cd9110vYHUib5y2N2dhZDQ0M4fPgw6urq8KEPfUjqbC4dcLMt5oapqSkcO3YMVqsVDQ0NsNvt0uoHr+5WBnE7EQCYzWa4XC7s2rUL/f39aG9vR09PD06cOAGdTgeNRoNrrrkGxcXFaGtrQ1VVFdRqNSt0FEB+IPDRo0fR3t6Oc+fOIZFIoKamBl1dXfjnf/5nRCIR1NfXY/fu3TCbzTAYDJiYmMDc3BwCgQBsNhtsNptU1SH/fFBmyW9QqaqqwrZt23DkyBGcP39eut5SpVJhcXER0WgUzc3N2LhxIwoLC2E0GjnJUihxjBoMBnHy5ElcvHgR09PTuPHGG1FeXg6Px7PqDCTGUJnkcXE6nWhsbITL5ZLa36VfQ8oiJoHFy0Xe85734MKFCzhx4gTm5+eh1WrxwQ9+EK2trfB6vTCbzau+N5MykuyQv7gTiQQCgQCOHj2KjRs34oYbbkBRURF0Oh1PQs4B8gqdZDKJ6elpTE1NYXp6Gk6nE5WVlVLJPGOpPGLs0uk0/H4/xsbGcPHiRTQ3N2Pfvn1wu93SYV4AOEHOAfL+NRAIoK+vDwUFBSgrK4PVauXVzwokTmgNBgMcDgfa2tqg0Wjw5JNPSvvHN23ahNLSUukAxM2bN8Pj8UjfT9klTwh3dXXh+eefx/DwsHT46MDAAM6dO4drr70WdXV1uP7666VDE2dmZjA3N4ejR49Cp9PBYrFAr9dLP5vxXR/y/8+lpaVIJpN45JFHMDo6igsXLkhjmFAoBIPBgIMHD6KhoUHapnvpz6Dskx+IGAqF0N7ejomJCUQiEVxxxRXYunWr1Na4BULZ5LGx2+2oqalBXV0diouLpYMsOc9QNjE2FosFO3bswNLSkpTs0Ov1uO6661BbWyvNPeTfk9HnepsVhXe03CAmMVKplHSI5aOPPorrr78ed999N0wm03qdycEWseIdLxtduh1pdHQUp0+fxuHDh3HHHXegpaUFDodDmlBn6EPLOL6DGIpJDDFRdd9992FgYACzs7O46aabcM8990Cj0fxRhVWGMIYrLnsJV/6CmJycxODgIJaXl6HVanHllVdKAzu2xYy57P7U7/cjFAphcnISWq0WOp1OSlSZzWbodDqYzWZotdpMvCcZwxV/URzl77cXXngBx44dw8mTJwEAmzdvRmlpKXw+H+rr6+FyueByuaQkVyqVkq7iU6lU0nV7lxlbxvEdtsV0Oi3d9nDhwgXMzc1heHgYWq0WRqMRXq8XdrtdSiA7HI41fmwJY7jiHcdRvOby1KlTmJmZQW9vL2pqarBp0ybp/DFRBsc4jOMajG3kIpEIgsGgdLajxWLhGHV9rEkc0+k0YrEYlpaWpNtVVSoVysrKoNfrpUq5DHjTH5rRMzuSySTGx8cxNzeHqqoqeL1e6W5rlm3mBvmHUa1Ww2azoby8HFu3bkVRUZGUbb30a0lZUqkUJiYmMD8/j5qaGumAPPmZOZQb5LGy2WyoqKiQXiQajYaxVDAxqVhYWAi3243CwkIp2cGqKmWTx6awsBD19fWIx+NIpVLwer2orKxEQ0MDiouLYTabV20PFGPM64SVQaVSQa/XQ6fTSSvHYnLRaDSivLwcBQUF6zHBojUgJhU1Gg1KSkpQXl6O6upq6fc538g9ZrN51TYHyi0qlQpGoxFGoxGFhYV/9Pvr3SbXvLJD/HmxWAzhcBj/+I//iFQqhc985jMoLCyEx+NZz1IyvqVWrNmnShzApVKp9ZxYMY6XUWUlXoX4yU9+EqFQCJ/97GdRXV2N+vr6VfvQM4wxXLHmPby8D1+H9sg4rnF1jki+CJDhAxAZwxXvOI5irC49YF1+voo8fuJ7U/57a9BWGcfLrLKSEyuSgX+P5zqUWTOGKy67Tw2FQkin0zCZTGtRNfWXYhzXeGwj9q/ruHWFMVyx5vNFcXeA3Hr3qWta2SF/MYRCIczPz6OiogJarRYej0da7WCmPHeJseMKcm6QD958Ph8ikQjMZvOq/eKU29gOc8+bxUw+wWJMlU1Mavy5Azj5r3PPuTJc2tbksbw0XqR8BoNBqu5gzHIfbzzKD5cmq7I1vsnYNpZgMIjp6Wk0NTXBarXC7XbzVPk8Ic/U8aWibPKBXENDA6LRKEwmE7RaLWOXJ97s+m7KPdwOmDvkVRryMc2feieyfSqPmPCQxxPAep1jRWtIvBVQjCVjl/sYw9z2Vos62ZCRA0qBlcNlotEoBEGARqOB0+nMxh+SLWVFRkrn1zGejONlxjCdTmN0dBSCIMDpdEp76dYRY7gi17O9jCNjmC/WtFyX45usYFvMD4xj7mMM80NexjFjyQ6F4Id3BeOY+xjD/MA45j7GMD8wjrmPMcwPjGPuYwzzQ17GMeMboi4tDySi7EilUtKWByIiIiIionyWsTM7iEhZuP+RiIiIiIjeLTKe7OAEi0gZ2BaJiIiIiOjdgvf6EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFeY7CAiIiIiIiKivMJkBxERERERERHlFSY7iIiIiIiIiCivMNlBRERERERERHmFyQ4iIiIiIiIiyitMdhARERERERFRXlGl0+lsPwMRERERERER0ZphZQcRERERERER5RUmO4iIiIiIiIgorzDZQURERERERER5hckOIiIiIiIiIsorTHYQERERERERUV5hsoOIiIiIiIiI8gqTHURERERERESUV5jsICIiIiIiIqK8wmQHEREREREREeUV7dv8fnpdniJzVNl+AIVgHHMfY5gfGMfcxxjmB8Yx9zGG+YFxzH2MYX7IyziysoOIiIiIiIiI8gqTHURERERERESUV5jsICIiIiIiIqK8wmQHEREREREREeUVJjuIiIiIiIiIKK8w2UFEREREREREeYXJDiIiIiIiIiLKK0x2EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFe02X4AIiK6POl0GgCgUqmy/CS0VlKplBRXjUaT5achendIp9NIpVIAALVaLf2aSKVSsZ/NEel0+o9iJ/4a+1Si9SVvi8D6jleZ7CB6F8tm50NrRxzEUX5heyRaf2K7e7N+lW0yN8njxhgSrb+3GqdemlzOyH/7bQbIGR09i3/ADGbK2aOtWNM4yrPl8hXlDH5QGcc1jKEYvzeLIbDS4WSgPTKGK3I9I8E4ZiCG4rsQyOwL//9jDFdktC2uQ7UV47jG70Vg3SfCjOEKvhdzX8ZjKFZdcYyaUevWFsV5SCwWg0qlgtFoXIsf+6ZxXNdkRzKZRDweRyAQQCKRgNVqhUajgUajgVarhUajgU6nW8sPMT+8KzLy4V3HFQ/G8TJjmE6nV8XnT7V7Jh4zKiNtcX5+HolEAm63GxqNhm0xszIywZL/cygUwtjYGKamprC4uIg9e/bAbrdDp9OtxX+WMVzBwXnuW9MYLiwsYGZmBl1dXZibm8P8/DysVivKy8sRDocRj8fh8/ngdruxYcMGqNXqP3q3/oUYwxUZaYtjY2OYn5/HhQsXsLS0hPn5eVRWVqK0tBRbt26FzWZbq+Qy47hOk+TLbG9/CmO4IiNxTKVSSCaTCAQC0hbd8fFxzM3NYW5uDna7HTfffLPUp15Gu3zTOK7rNhZBEBCLxTA/P49oNApBEKDT6aDT6aDX66HT6aDVallipnDyigB5x8O4KdOlFRziP8v3JsurOuT/TsoktjtBEJBKpTA3N4fl5WXY7fZMTawoA+RtUoxlKpXC/Pw8enp60NXVhampKbS0tMBqta5VsoMyLJ1OI5lMQhAEJJNJGAwGxk7BxHjNz8+jv78fr732GoaGhjA0NAS3241NmzZhYWEB4XAYV1xxBaqrq9Ha2vpHYyBSBrHdjY2NYWRkBH/4wx8wOzuL0dFRbN26Fc3Nzaivr4fZbOYZLDkklUpBEARoNJr1qICkNZBOpyEIAqLRKGKxGKanp5FMJpFKpdDR0YGBgQFMT0+jrKwMN954o5TsWOt+dV2THXq9HhqNBnV1dQiHwzh8+DAEQYDFYoFKpYJWq8XOnTths9mQSqXYCSlMKpVCJBJBNBpFJBLB9PQ0lpeXYbFY4HQ6UVNTk+1HpDchb0OxWAyjo6OYn5/H3NwcRkdHEQ6H4XQ64XQ6UVlZCZ/Ph8LCwiw+Mf0p8gTV2bNncejQIRw6dAixWAw//elPUVRUBIPBkOWnpD+HWq1GMBjE/Pw8Xn75ZQwMDKCnpwd+vx9DQ0MAAIPBgA9/+MMoLS3lxErB5FUc4XAYv/rVrzA3N4eFhQXcfvvtuOqqq3iQsMKIMZudncUTTzyBzs5OXLhwAU1NTaivr4fRaMTU1BR+9atfwWazweFw4CMf+Qiampq4yKNAqVQKiUQCr7zyCh555BFMTEwgFouhqqoKNTU1aGpqwvDwMJ5//nns3bsXRqMRbrcbQEYrBugdEmOSSqWwsLCAwcFBvPTSS7j22muxdetWLuwolJisUKvV6O/vx7lz5/DMM89geHgYFosFWq0WOp0Og4ODmJubk/pUeQJrreO6rskOMaEh/o/o7OyESqWCz+eDyWSCwWBYtXeZlEG+ihwIBOD3+zE1NYWpqSlEIhFotVppgmw0GrmCpTCxWAzxeBwLCwsIBoPo6+tbFcdoNIpgMCiV7SYSCahUKjgcDmi1PMNYidLpNKLRKMbHx9He3o7FxcVV+x05qVK2dDqNeDyO6elpTE9PY2RkBOfPn8fIyAiGhoakZIfYr+p0Oun2AA7KlU3sV8+dOyctBgiCkO3HokuIfWQymUQwGMTp06cRCARgNptRVlYGl8uFiYkJRKNRzM3NwePxSO3R4XBIP4dtMfvkk+JwOIzx8XGcO3cOdrsddrsdVVVVUKvViMVisFgsiMViqybKPNxbmcS4JBIJ9Pf3o7+/H4ODg9i2bduqimW2QWVKpVKYmZnB6dOnMTo6ioWFBbhcLgiCgJmZGczNzWFxcRGFhYUoKSmRvi8T8Vy3mYx88D0/P4/BwUF8//vfh8fjwUc/+lHU19ejuLiYE2WFkZcTRSIRnDlzBseOHcNLL72EeDyOeDyO/v5+7NixA0ajEfX19fD5fOtyui69NXl7m5iYwOjoKH73u99hZGQE/f390Gq10qqG2WxGMBjE1NQUjh07hltvvRVXX301Dh48CLfbDUEQMn0ALf0ZxJiq1WpEo1EMDAzgyJEj+L//9//i7/7u73D11VejqKgIer2eAwCFEvtTQRAwNjaG73//+zh9+jSOHj0Kr9eLgoICFBUVIZ1OY2hoCDfeeCNuvfVW1NTUwGg0Mq4KJVaiajQaPPXUUzh58iQee+wxbNmyBX/913+N8vJyTqgURGxH6XQaS0tLGBwcxK9//Wvceeed+MY3voGioiKEQiH87ne/w+zsLKxWK+68807ceeedqKioYOWcgsjHqNFoFD09Pejs7ERnZyd+/OMf44YbboDVakVXVxf+7d/+DVdccQV8Ph/q6+tht9ul72W/qizyg/QDgQC+/e1vIxwOw263I5FIQKPRcFFHocR4xGIxnDx5Et/97ndx++2346abbsLHPvYxdHd343vf+x5isRisVit2796N5ubmjFbLrWuyQ/wDTE5OYmhoCOl0Gi6XC9u2bUNRURGcTqeU7GDnowzyzLder0dVVRUAwOl0or29HaOjo6smziaTadX3UXbI21sikUA0GpUqNTZv3gyDwQCj0Qir1QqtVotgMCitRAIrpfO8zlR5xLiGw2GcOHFCOnCturoalZWVq848YhtUHnl/qlar4XA4sHHjRpSWlqK8vBxarRZvvPEG9Ho99uzZg82bN6Ourg56vV76fsZVOeSD7ZmZGYyOjuLChQsYHx/H+9//frS0tKC0tFR6L4pfS9knxs5gMMDpdKK1tRWCIODw4cPweDyIx+OYmJiATqfDDTfcgObmZhQWFkoVVgBjqURarVa68ODIkSMIBAIwGAwYHR3FiRMnUFZWhrKyMuj1eul8AFIW+cLO5OSkVPHocrlw9dVXw+v1cnyqYGKSSqPRwOFwoKamBrFYDGNjY9J5SIODg2hqakJNTY20SCfK+WQHsPKHGBoaQnd3N3Q6HXw+H2644YY/+nq+RJRD7FSMRiM2bNiADRs2IJ1O43vf+x5SqRSGh4fhdrvh9XphsVik76HsEifG4i1I5eXlsNlsuPHGG6VtYwAQj8fR0dGBRCIBQRBgNBrhcDhWHVbKeGaf/LrgYDCIl156CcvLy9i4cSPq6upWrR4zXsollluL779NmzbB5/OhtLQUkUgEL7zwAmw2G/bv349du3ahqalJOr2c1VXKIh+Uj46O4qWXXsLJkycRCoXwla98BT6fT6rUAdgulUIc06TTaZjNZhQXF+Oqq67CzMwMHnzwQRQXF0vVVa2trbjjjjvQ1tYGp9MpHSQsT3pQ9on9o9FohMlkgslkwhNPPIGnn34aarUaS0tLGB8fx3XXXQev1wuj0cj2qFBipZxarcbIyAg6OjrQ39+PwsJCHDx4EHa7HQD7U6US33cajQYlJSXYsmUL5ufn0dHRgampKUxPT6OzsxMf/OAHcc8998DpdEpHXGTKuiU75BOm3t5enD17FiaTSZock7KJk+alpSWcOnUKL730Ejo6OhCJRPC5z30OTU1NsNlsPONBIeSTovLycrjdbmmfqtVqlc5gefHFF9HV1YWnnnoKOp0O/+k//SccOHAAO3bskL6OLxRlEOMgCALC4TAGBgbQ1NSEq666CpOTk3jsscdw8uRJVFdX44477oDRaGR7VCi9Xg+Px4P3vOc90Ov1MBgM+PWvf42Ojg6Ul5ejtbUVH/jAB+DxeHhYt0KJyWTx0OdXXnkFv/zlL6HX62E2m/HTn/4UjY2NuPHGG6XKVSY9lENeZeV2u/GJT3wChw4dwqOPPoqTJ08imUzijjvuwObNm7F3714UFBRk8hpheofkfaPBYEBlZSUOHjyIpqYmLC8vIxgM4sknn0Q4HEZVVRXq6urgcDikhBdjqTxiTNPpNJ599lkcO3YMu3fvxs6dO6WJMd+LyiVPdjidTtTX1+Pxxx+XbreqqanBN77xDezZs0e6QTDTbXFdkx0ApINJJicnYbfbUVBQsGpvFrPlyiOeWB6NRjE6Ooquri5pMGC327Fz505UVFRIZwXwBaIsNpsNNpsNwEosxW0t4XAY3d3dOH/+PHp6elBXV4crr7wSDQ0N0soWY6kcYhzE25AWFhagVqtRVlaGgYEBTE1N4dChQ1haWsLBgwelq7xJecQVyIqKCsRiMUQiEfT09ODcuXO44oorUF9fj7q6ulWnmpNyyOOSTCYxOzuLkZERdHZ2oqGhAUajUTobaXx8XLqxjJRFnCwZjUZUV1fj7NmzSCQS8Pv9SKfT2LBhA1pbW1FWVsbqqhyg0Whgs9lQV1eHkpISLCwsYHp6Gn/4wx+g0+lQUlIi3VYmxpPjG+VRqVTSOLWvrw+9vb143/veJ51dxbaofOLZZMBKuxQvQdDr9bBarbjmmmvg9Xqh1+vXpS2ua7IjGo0iFAqhq6sL/f39+Nu//Vts2rRJqhiIRqPSyfOUffLTjicnJ3Hx4kV8+ctfRmFhIRoaGvDhD38Yzc3NsNlsUpJKvEtZ/muUXfLVxHA4jI6ODrzxxht47rnnYLPZ4Ha78cADD6C4uHjV3jn5+R1czcoucRUjnU6jq6sLHR0dCAQC6O3txaFDh/Dyyy9jZGQE0WgUJSUlWFpagk6ng8Fg4GqyAskHAcePH8cjjzyC+fl5NDU14W/+5m+kg4HVajX7UQWSbymLx+MYHh6WJshjY2NYXl7G+973Pmi1WjzzzDPQ6/Xw+XxsiwoiT1gFg0G88sorOHHiBMbGxlBZWYni4mJs3rwZFRUVq677JmUTBAF6vR5utxuRSASCIKCrqwstLS34whe+gOLiYgCMpRLJLzbo6urCq6++iuHhYen69crKSh4oq2Dyio5YLIbJyUm89tpr+PnPf47Z2Vk4nU7s378fO3fulA4kTSaT0Gg0GY9nxpMd8pd7LBbD4uIi4vE4NBoNqqurUVJSgmQyKf3F64SUQ35i+dDQEHp6ejA2NgatVgtBEDA+Pv5H3yOeBVFbW7vqUDbKHjHDOjQ0hKmpKbz++usYGhpCPB6H3W6Hx+NBNBrFzMwMpqenpUFgIpGA2WxGS0sL9Ho9qwSySN4fRqNRLC8vIxqNYnZ2Fl1dXQgGg1CpVHC73XA6nTAajZwkK5T85oDx8XH09PRgYGAAjY2N0pYzi8UiJbhIeeRbIKLRKAYHB6WDEGtra1FaWiodlCi2R1KmQCCA0dFRvPHGG4hGo9i9ezcEQYDZbIYgCEgmkzwMMUfIx6yCIODixYvo6upCWVkZqqqqUFRUBJPJxFgqlHielXiY5cmTJ+F2u1FeXo7i4mJYrVYmO3JAMplEIBDA4cOHMTExAY/HA6PRCLVaDZ1OB41GI53RsV7jnIzPXsRMnUajwdLSEkZGRpBOp2G327Ft2zYUFhYiGo0imUxKXytiwiN75FsYBEHAoUOH0N7ejrm5OdjtdiwsLOCXv/wl4vH4qhhv3rwZjY2NKC4uXnVVIuOYHWJnEovF8Oijj+L06dN49NFHUVtbi+3bt6OtrQ1utxuHDx+G3+/H8PDwqoNKq6qq8MUvfhE2m42HzypAOp1GPB5HNBrF0tISgsEgBgcHUV5ejvLyctTW1mLTpk3SoYjiHnNShktXkx955BGcOXMGHR0d+MxnPoNrr70WOp1O+hq2NWUS45JKpRAIBPDyyy9jamoKTqcTt912G5qamtDd3Q2Hw4Fdu3ahpKRk1fdRdskH2H19fWhvb8f3v/993HXXXfjGN76BQ4cOYWpqCvPz89LZVQA4SVYw+WHBsVgM4XAYv/71r3Hq1Cl88pOfxMaNG+F2u5FKpXjArMLIF8XT6TQWFxdx5swZ/Pa3v8WXv/xlXH311SgtLZW2PLAfVbbl5WX09/fjH/7hH9DQ0ICbb74ZgUAAy8vLCIVCCIVC675Nfl2XamdmZnD69Gm4XC4UFBTAarVK+6/EAZ64eswPc3bJExRqtRqbN2+G2WxGOByWYuX1eqUrTG02G7xeLyorK1FaWgqr1fpHP4fWj/zlsby8jEAggM7OTgwMDECr1SIUCqGnpwdarRZutxsGgwFWqxUNDQ3weDxwOBxwOp1wu92w2Ww8uTzL5Dfj+Hw++P1+uN1uaftfPB6HWq3G3r170djYKH0tB+fKIY/F7OwsBgcHceTIEZSUlODee+9FXV0ddDqd1GeyvSmfPE6JRAJLS0s4dOgQenp6pG2B9fX1cDgc3MKiIGLfGIvF8OSTT2J4eBi33normpqasLCwgPPnz2N8fBy7du1CaWnpqu8j5REnTeLZcseOHcNzzz0HQRCwefNm7NmzBz6fj4daKpiYgFpcXMSzzz6L0dFRVFRUoKGhAXV1ddIhllwEUCaxbaVSKZw5cwZdXV1wuVxoamrCNddcg5///Ofo7+/HNddcA5/Pt+4J5HVNdgQCAfT09MDhcMDhcMBoNEqZOoPBwA+wwogTLLVajbq6OpjNZgQCASwsLCAQCKC0tBROpxMFBQUoKipCa2srPB4PCgoKsvzkJBePxxEKhTA7O4uFhQXYbDak02nMzc1hdHQU4XAYjY2N0kGm9fX10lWYBoNh1f3XlB3yk+OLiopQWloqVW9Eo1Go1WqYTCbpGlP595EyyFcx5ufnMTExgb6+PjQ2NuLgwYMoLi6GRqNhgioHyBMXYmmuWAV54cIFjI6O4sCBAzCZTNJZHTxQTxnkW6UTiQSOHTuGubk53HXXXSguLpYqHCcnJ1FYWAi3281ElYLJ+0tBELC4uIhz587hd7/7HbZv346GhgZs2rQJNpuNyQ6FkscwHA6jvb0dCwsLUsWq1+tlG1QwsYpYHL/09fVhcHAQBQUFKC0tRX19vXT1s9frRUlJybrHUfU2A6vLHnXJP6DPPfcc/u3f/g3XXXcd6urqsGPHDukGjwwNAtgqVlx2HKPRqLRyJQiCdAiUVquV9l8ZjUbodLpMxJJxvIwYCoKARCKBsbExhMNhLCwsQKVSQaPRwOVywWQySfvpNBqNlOCQrzKvAcZwxTuOo9iXplIpLCws4NVXX0VPTw86OjrwwQ9+EM3NzSgrK4PBYIBWq83Uy4RxfIcxTKVSEAQBsVgMv/3tbxEMBlFZWYna2lq0trZKh3Stw4SYMVxxWe9FMXkVCoVw7tw5jI+PY3h4GBMTEwCAu+++G0VFRfB6vdL3rHGbZBzfQQzFflS8wvuee+6RFuHEcczVV1+N+vp63HLLLTCbzZmstmIMV1z2ezGZTKKvrw///b//dwiCAJ1Oh0996lPYtGkTCgsLpf6V78WMWZP+NBgM4ujRo1CpVNDpdNiwYQM8Hs96JDsYwxXvqE8VBAEajQaCIOCBBx7AhQsX8OCDD8JqtaKwsBBNTU2orKzEXXfdBYfDsapfXWNv+gMzXtkh/4MUFBSgsrISlZWV8Hq90p45ZuqUz2g0SttVKLdoNBpoNBrU1dVJKx/ASsWOxWLh7Uc5Qqzu0Gg0sFqtaGlpkQ4E3rBhA2pqatiXKpg8NgaDAQ6HA62trXC73auu7abcIMbTaDSirq4ODocDbrcbRUVFEAQBlZWV0nZO+ddTdsmr5DQaDaqqqqQkpE6nk66hbWxslA56vvQ8OVIOMZ7pdBrJZBLhcBiFhYWoq6tDdXW1dG2w+LWkTGJs9Ho9ysvLodfrYTKZVm2JJ+US46NSqeBwOOByuaTYLS0toaKiQqr+l98SuG7Pl+nKDjlxZSvDGVY5to4Va1Kh86cG4xlekWQc17gtisT7reXkbXMN2yhjuGJN4iiv8kilUlIlB1c/1sVlrUKKh8wCKwO7DLS1t8MYrlizPlW+NUKcWK3D7VWM4zuMofzWjrGxMYRCIfj9fhQVFcHn80Gv10tnA2S4XTKGKy67LcbjcSwsLOC1115DdXU1Nm7cCI1GI531wDhm3Jr3pwDfi1nwjvtU0fz8PMbHx/HAAw/A5XKhvLwcu3fvRllZ2XqcSZadyg45tVrNPas56u0+mMy65iax03mzlwtjqlzyw4MvPbCLcVMu+eoV8O/nIrGiI7ddWi1AynbpKqTZbIbVaoXVaoXJZFr1NZQbNBoNLBYLGhsb4Xa7V1WsMpa5hfHKPfKYmc1mFBUV4aqrroLFYoHT6YTdbpfO9MhGfNe1siML2GJWMI65jzHMD2u6+iGv5FinFwjjmIEVrHV++TOGK9a8LcrHU+twawDjmKH34jq2S8ZwBcc3uS8jY5t1XCBnDFfkZZ/KZMe7A+OY+xjD/MA45j7GMD/k5aDuXWbNDtEXMfGYFWvWFrN04wrjyPdivlizrdaXVoxnc0FuXbexEBEREeUrlmATEdG7XRYqj98Skx1ERERE9K6T7UE4rS2eC0iUfUo7v4q9AhERERERERHlFSY7iIiIiIiIiCivMNlBRERERERERHmFyQ4iIiIiIiIiyitMdhARERERERFRXmGyg4iIiIiIiIjyCpMdRERERERERJRXmOwgIiIiIiIiorzCZAcRERERERER5RUmO4iIiIiIiIgorzDZQURERERERER5RZVOp7P9DEREREREREREa4aVHURERERERESUV5jsICIiIiIiIqK8wmQHEREREREREeUVJjuIiIiIiIiIKK8w2UFEREREREREeYXJDiIiIiIiIiLKK0x2EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFe0b/P76XV5isxRZfsBFIJxzH2MYX5gHHMfY5gfGMfcxxjmB8Yx9zGG+SEv48jKDiIiIiIiIiLKK0x2EBEREREREVFeYbKDiIiIiIiIiPIKkx1ERERERERElFeY7CAiIiIiIiKivMJkBxERERERERHlFSY7iIiIiIiIiCivMNlBRERERERERHmFyQ4iIiIioreRTqeRTqez/RhERHklk/0qkx1EREREREREtK7EREemEh7ajPzUP5OYIU+n01CpVNJfRERE7zbyFz3fhUTZIbZDsQ3K/53tMnewP81vqVQKAKQ5pFrN9ftclen2mdVkB/Dvf0B2RLnr0oEBERH95VQqFUvkiRRIbJuhUAgAYLFYmPzIEYxRfhLbJNthbhMEAYIgYHl5GQaDAUajcc3/G1lJg11azaFWq/lhzVHpdBqpVAqpVAqCIHCgnoO4B5lIOfguzH3sU3PbpW1QXuExOjqK0dFRJBIJaWWZlIeT4Pwgn2OIf4nE+aM4hyRlksfwzcTjcSwtLWFoaAhzc3MZeYasVHaoVCoIgoCFhQUEg0FMTEygsLAQdrsdHo8HWm3WC07oz3Rp6Rg7nNzAstz8JA7wKDdcGq90Oo3FxUVotVpYrdYsPhm9E5xg5TZxUP7iiy9icHAQs7Oz0Ol0sNvtqK+vR1FREX7/+99DrVbjjjvugMfjgdvtlr6Xcc8++dhmbGwM4XAYJpMJFouFscoRqVRq1dEG8opHlUqFWCyGeDyOhYUFLC8vIxgMwuPxwOv1QqvVcjuLwrxZW0un00gmk4jFYnj44YcRDAZRVlYGlUoFn8+35jsGspJVSCaTiMfjmJqawszMDC5evIiqqiqUlZXBYrHAbDYzU5cjxA+s+MHUaDSMXY7g9qP8xIFcbhHjlUgkkEgkMDc3B6PRCJPJxL40x7xZn8r2qHxi3BKJBGKxGI4ePYrjx49jaGgIBoMBpaWl2Lt3LxobG/Hyyy9Dp9PhmmuugdFohNvtZhWPgsjb2+TkJGZnZ1FYWAi32y3Fim1SueRVcfIkh7yyY2lpCeFwGCMjI1hcXMTU1BQaGhpQWFgIjUaTzcentyBWdcjjE4vFsLS0hJdeegmLi4vYv38/ysrKAKz9/GTdkh3yw0gffvhhnD9/Hq+88gqSySRMJhOWl5cBAJ/+9KfR0NCAXbt2Qa1WI51OM0unMGIcI5EIgsEgfv/73yMUCiEej2Pv3r3YtGkTHA4HK3QUTMyWh0IhJBIJpNNp6PV6ribnOA7gcsOlg7lkMolf/OIXOH36NM6fP4/Gxkbcc889qKurQ2lpKSsGcoRarZb6VK1WC61WC5PJlO3Hoj9BfgvAsWPH8NRTT+HkyZMIhUK46667EIvF0N/fj/7+fgwODmJ8fBwlJSUoKCjIyN5yeufk84xUKoXf/OY3OHv2LL74xS/CZrNl+/Hoz6BSqVZNiOfm5rC4uIiOjg6Mjo6ivb0dMzMz8Pv9CAQCSCaTSCQS+NCHPoTq6mpoNBqYTCYu5mWR/P+9mEA+deoUgsEgrr76apjNZmi1Wpw7dw5nz57F1NQUXC4X3v/+98PhcGRk3r+us1GxA5qdncX4+DiSyST0ej1cLhc6OzsxOTkJv9+PSCSyno9FfwF51tXv92NiYgJnz57F4uIi4vE4KisrUV1dDZvNBq1Wywy6wohtMBgMYmFhAVNTU1J7c7lcaGhogNFoZKIqByWTSUxNTQEAzGYzLBYLDAZDlp+K3orYFufn5zE1NYWzZ8/i7NmzGBkZgU6nQ09PD1wuF4qLi1cdxEbKJA7quru7sbCwAI1GI/WpOp2OfaqCiW1xbm4OHR0dSKVScLlcaG5uRjQahSAIGBkZwdTUFIxGIxwOBywWC/R6fbYfnf4/+QQrGAxifn4e09PTWFhYgMFggF6vZwWOwomJi2AwiGg0ikgkgrGxMQQCAfT29mJmZgaTk5OIRCJIJpOYmZlBLBaDwWBAPB7ngoACBQIBjI+Po7OzE6FQCFdccYWUJJ6enkZPTw8MBgOcTieKioqg0+kyMtZZ97dvKpVCOp2G3W7HP/7jP8LlcsHtduPrX/86HnjgAZhMJlitVn5gFUoQBOlAoFdffRUnTpzAQw89JJ1QXl5ejoqKCng8HhgMBmZXFUYsATx06BB+//vf44033sDk5CSMRiP27NmDr371q6isrERxcbFUdsbKKuUSB+lqtRrhcBg//OEPodPp0Nraiq1bt6Kuro5xVBD5YDuVSiEcDuPpp5/G/fffj66uLkQiEWzevFlalbTZbKiqqpK2tJCyyOM5NzeHoaEhfO1rX8ORI0eQTCaxb98+fOtb30JZWRlcLpf09YylMsirOhKJhJR0vPPOO7FlyxbccMMNUKvVuOaaa/CNb3wDx48fx/vf/360tbWhsrISWq1W6n8pu+Rt6/z583j88ceRSqWwadMmbN68GU6nc9VZEKQs6XQafr8f09PTOHToELq6unD69GmMjIxgeXkZXq8XZWVlUjwrKyvxzW9+E7Ozs6ipqcG2bdvg9XpXjYkoO+QHOh89ehQ///nPMTo6CovFgg9+8IOw2WxIp9Po6OjASy+9hIMHD6KlpUXazZGJrWbrluwQOxiNRoO2tjZ4vV44nU4EAgG88cYbmJ+fR2lpqXR2Bzsk5RFLiyKRCEKhEDo7O9Hd3Y36+noEg0GMj49Dp9Nxn7nCyAd0fr8fTz31FLq6ujA3NycNwicnJyEIAubm5lBcXJzlJ6a/hEqlkk6z7uzsRFFREfbt2ydlz9kWlUV8iQcCATz77LM4c+YMlpeXsXPnTjgcDjQ0NGBxcREXL15EMBjE5OQkysvLYTQamTxWGPkEa3Z2FqdPn8bs7CwSiQQsFgtisRjOnj0LvV7Psx0USKVSSclgrVaLsrIybN++HePj41heXkZ9fT0ikQjOnj2LhYUF1NbWYteuXWhuboZGo+FV0Qoh9qmxWAzj4+Po6urC+fPnsWfPHtTV1UnnADLZoTxi7NLpNIaHhzE6OoqhoSFEo1F4vV7U1tbCaDSipqYGTqcTPp8PTqcTRqMRgiDAYDBgz549qKmpWTXJpvUn/n9fXl7G/Pw8jh8/josXLyKdTuOqq66Cz+eDzWaDIAiYnp7G4uIiotEoKioqUFVVtapt5nRlh1gRsHfvXiSTSYyMjOD8+fP4wQ9+AJvNhrq6OjQ1NaGqqkr6HnZKyiAf1IXDYQwPD+PMmTPo6OjA+9//fszPzyMUCsFoNPKAIAWRJzpSqRSmpqbwk5/8BIlEAhqNBtu2bUNBQQGee+456HQ6zM7OSufn8IWhbPL4RKNRBAIBnD9/Hhs2bEBlZSUKCgoAsA9VolQqhZmZGfzyl7+UquJuvvlmbN68GUVFRejs7MTw8DACgQAGBgZQXFwsJTsYT+WQt8Hx8XEcPnwYgUAAOp0OJSUlAICjR4+ivLwcjY2N2XpMehsqlQo6nQ61tbW48cYb8bOf/Qyvvvoq6uvrMTExgQcffBB1dXXYsmUL9u/fj8rKSqkdcgU5u8RVYLVajeXlZZw9exbt7e1ob2/H3/zN3+DAgQOrVorZfyqL/ADSnp4e9PX1oa+vDx6PB62trdi1axcqKirQ0NAgbQWcnJzExMQEIpEI9Ho9brzxRhQWFnIxIIvkcVxaWsLg4CB+/OMfQ6vVwm6344Mf/CDa2tpgNBoRCAQwPDwMv9+PWCyGuro61NfXS3PHTMQv48kO+Yevu7sb7e3t6O7uxszMDPr7+xEKhZBKpXDgwAFcf/31XFVWsFQqhUgkgtdeew2//e1v0dbWhptuugl79uzBwMAA4vE40uk0Ll68iKamJlitVnY+WSbPmp89exYXL16UDpL9wAc+AKfTieXlZXR3d6OgoACCIDDJkSPkq1THjx/HhQsXoNFoYLfbUVRUBIPBwHJOBRHjlUql8Oyzz6Kvrw9msxm7du3Cvn37UF1dDbvdDr1ej/HxcYTDYYyNjcFoNGLr1q0AeIOS0oh9aywWg9/vx+DgIG699VYUFxdjYWEBgUAAPT09CAQC2X5UegtiW0qlUigvL8f+/ftx6NAhzM7O4mc/+xmKi4tx++23Y+fOnWhubkZRURFUKhX7VQVRqVRIJpOYnJzE/fffj4qKCnz961+HzWbD6dOn8etf/xrRaBRGoxHXXHMN2traUFpaKp3jwf40e8R2pNFosG/fPuzYsQM333wz9Ho9TCYTnE4nTCYTVCoVBEGAIAh48cUXcejQIWzZsgUVFRUoKSlZtRjAeK4/cawpHvR87tw5nD9/Hna7HWVlZfjOd74Di8UCu92OUCiE0dFR+P1+OJ1O2O32jF+OsK63sQQCAfT19eHMmTMYHx/H6Ogo1Go1LBYLfD4f2traYDabpa/nB1YZxFgkk0nMz89jdHQUnZ2duOGGG7Bjxw5s3LgRGo0GJSUlUKlUWFxchCAI2X5swup2ND4+jqmpKZhMJlRXV+Pqq68GsHLQrNVqhcFgYJvLEfKKnXQ6jYGBAXR1daGgoAAul0tKNIol2qQcqVQKXV1dGBkZkQ6wvOqqq6DVaqX2p9frEY1Gsby8jHA4zP5UgcS+NZVKIRaLIRwOIxAIoKmpCS0tLTh37px0Lksikcj249JbEBNW6XQaJpMJGo1GOjeus7MTarUa9fX12LBhAzZs2MDFAAWRxyISiWB+fh5dXV2ora3F3r17MTc3h+HhYZw4cQLRaBQGgwFlZWUoLS2F2+2WDkMEmEDONpVKBZ/P95a/n0qlEI/HEQwG0d/fj/Pnz+NDH/oQmpqaYLFYpIk247j+Lu0Tg8EgFhcXpX8XBAF9fX1IJpMoKCjA0tISBgYGUFFRgYqKCpjN5owdTCrKeLJDfJGkUikYDAZ4PB7s3r0bqVQKVVVVuHDhAn784x9jbGwMQ0NDqK+v57VBCiIeKKvRaDA/P49f//rXiMfjuPXWW7Fnzx40NTVBp9MhmUwiFAqhrKwMXq8XOp0OAJhlzSJ5ByQIAs6dO4fZ2Vnccccd2LJly6qvE0+0LigokE6YZ9yU6dItZYFAAE899RROnz6Nv/u7v0NLS8uqW5NIGcSVqeXlZRw9ehTxeBxf/vKX4fV6VyU6ACAej2NxcREejwebNm2SFgHYnyqDfHySTCYxPj4uleRWVVWhpaUFL7zwAqLRKFpaWuByubL8xPRWxISwRqNBX18fTpw4gb6+PgSDQVitVlgsFgD/nliWfz1llzg5Elf7+/v70dbWhg0bNqC6uhr/83/+Txw9ehT33nsvUqkUhoeHMTc3h5deegkVFRWwWq1SPNmvKof8kEqxr9VqtRgZGcHvf/97dHR0QK1W4/rrr1+1PZDVVtkhr3TTaDTYv38/duzYgd27d2Nqagqjo6NwuVzSpRXnz5/H+fPnsX//ftxxxx0oKyuTflamEh4ZTXbIH1qlUsHhcKC2tlba7mC1WjE4OIhoNIpEIsFVSIUTKzu0Wq10Z/ny8jK6urrQ39+PZDIJh8OB8vJyXsmmEPIJr3ji/Pz8PGZnZzExMQG/34+ZmRkkk0mYzWaUlpZKgzu+/JVJnuyYnJzEmTNnkE6nUVJSgtraWpSWljJZrEBiFYAgCFCpVNDr9SgpKYHdbodKpUI0GkU0GkV/fz/Gx8dRXV2Nqqoq+Hw+KXlMyqTVaqHVaqHRaNDZ2SldQWsymbBx40Y4nc5sPyK9BfGA59nZWXR3d+PkyZPSGTk9PT3QaDTw+/2IRqPZflR6E+l0GslkEr29vZiamsLGjRthsVgwMDAAAPB4PGhsbEQ4HMbExAQMBgOMRiMnxjlCXDBfXFzE+Pg4Tp8+DbPZjO3bt8Ptdq9aHKfskR8Oa7PZoNVq0djYCJfLBZfLBbvdjnQ6jRMnTgAANm3ahIaGBvh8vlXzxZyr7JBXBIirUVVVVdLho/F4HO3t7RAEAeFwGMBK6S4H58olJjvMZjMsFgsCgQDS6TT+z//5PwgEAkgmk6iqqsIVV1wBrVYrHRpF2adSqWA2m5FKpfDqq69KsXvttdcwNjaGRCIBj8eDbdu2SbETv4+U6+TJk7jvvvvQ0tKC7du3Y+vWrbDZbNL+ScZPWQRBQCKRgNPplG5/EF/0CwsLmJycxHe/+12YzWa8973vxa5du1ZV6rA/VQb51geNRgOHwwGbzQaDwYCf/vSnSCaTGBoawtVXX43/+l//K7xeb7YfmS4hb1ORSARHjhzBCy+8gIcffhhf//rX0dLSgn/6p39CMpnExYsXsXPnTvanCiLfXr28vIxXX30VyWQS3/72tzEwMIDf/e538Pl8aGxsxL59+zA0NIQjR47A4/GgsrISBoMBAKvllEgeD7VajUQigYGBAZw6dQqPPfYYvvzlL+Puu++Wts6TcqhUKphMJphMpj+qaJydncX3vvc9WK1W3Hvvvdi1axd8Pp+UL8jk+CZjyY5oNIpQKIRnn30WoVAIxcXFSCQSiEajWFxclPbsCIKAu+++Gzt37kRJSYk00WIHpAyXZuv27duH7u5unDhxAtPT07BarUgkEqitrcWOHTvQ3Nz8RyXZlB3y0jK1Wo2tW7eioKAAMzMzCAaDOHXqFDQajRS7iooKaLVaTpIVTh6b5uZmfOxjH0NNTY10KCkAxlChNBoNNBqN1AZ/+9vfQqVSIZFIYHp6GpFIBDU1NfB6vdi1axdKSkqYeFQoMR7iGQ87d+7Ef/7P/xk9PT1YXFzELbfcgubmZpSVla3ahkTKEo/HMTU1hYcffhgmkwmf/OQnsW3bNthsNszOzsLj8WDfvn1SqTVjmH3yPjEYDGJmZgaBQAB6vR4ejwdzc3PQaDQIhUIIBAL413/9VywtLWFxcRFutxutra1SST3nGsolJiQjkQiefPJJDA4OYsuWLaiurobH45GuE+YigPKIW/7Esehrr72Gvr4+GAwGVFRUYNeuXSgtLZUObs+0jCU74vE4QqEQXnzxRczMzKCurg7Ly8tYWlrC1NQUQqEQ/H4/mpubcdddd0n7WjmwUx4xFmazGVu3bsX09DSGh4cxPj4Oo9EoTZRvvPFGxk1hxBe5eMiaTqfDsWPHEI/HMTo6iqqqKpSVleHAgQMZPw2Z1oa8jVVWVuLAgQPwer28/SgHqNVqaLVahEIhTExM4A9/+INU7eH3+6HVavGRj3wE9fX1rOjIEWq1GiaTCc3NzfD5fNJNHtu2bUNRURHcbrf0tWyXyiDfYh2Px+H3+/Hqq69i3759uOGGG1BeXo5EIoGlpSWUlJRgy5YtKCoqyvJT05tZXl5GIBCQKsR1Oh00Go00SQ4Gg3jppZekvtfpdKKqqmrVFntSJvltV+K4VUwg8/ZAZROTHWJfe+bMGZw/fx4WiwVerxcbNmxYl4oOUUaSHWIVgF6vx7Zt29DX14fOzk7pD93S0oLi4mJceeWVKCoqQlVVFVc+FEoeD6PRiPr6ehQVFeGWW25BIpGASqWCy+WCxWJh7BRI/kIvLi6Gw+HAV7/6VekFodfrodPpYDKZsvmY9A4VFBTAbDZL98+zDSqX+FI3mUy4++670dPTg+PHj8PpdKK0tBQf/ehHUVVVhfLychiNRgiCALVazURHjjAajdDr9di/fz+SySRMJhPPWskBgUAACwsLCAaDOH/+PB566CH8/Oc/RzweR0tLi1SxKlYCsD0qi8PhAACUlJRgYGAAt912m3STldfrhdvtxtatW1FRUYEdO3bA7XbzcNkcIK8qB1bOXrFarbjmmmtQWVm56mtIWcTzN7VaLcbHx9Hf34+Ojg7Mzs7iS1/6EkpLS6Wzy9arP81YZYdGo4HBYJAyqKFQCMDK5KqxsRFlZWXYsGED7Ha7dNglKZs4UDcajSgqKkIikUA6neaVpTlCp9NBp9OxgiOPiNsiKDeoVCpotVo0NDTAYDBgdnYWTqcTXq8X9fX1qKqqkg4I5oHduUVMTPEw0twijlVLS0thNBoxPz+PaDQKtVqNjRs3oq6ublXVHGWffCJsMBhgs9nQ0NAAANIh+g6HAxUVFdLB3eXl5aiurs7mY9NfSKzs0Ol0qKurQ0FBAaqqqlbNGTn3UC6VSoVYLIb5+XmYTCYUFxejqqpKekeu5xYy1dt04Jfdu4tlRoIgrPwHZWX1YkYng/vm2ApWrNlb+s3K5MU9Vxn80DKOaxRD+dV5cuswYWYMV6z5iHmd96wyjmsQw1QqJf0F/HsSRLyxBcjoNXqM4Yo1b4vy/lV8J/K9mFGXFUPxJo/p6Wk88sgjmJycxPj4OHbv3o3q6mrs3r0bRqNROmg/AxjDFe8ojuLcIZ1OY2ZmBqFQCJOTk9BoNNDpdKiqqoLdbpfODchge2QcM9CfyomV5PJYrjHGcMVlx1E+T+zu7sapU6fg8/ngcrnQ2NgInU6XyXHrm8Yxo1fPAv8+YHuzyZT8w8rsXO64NFaMXe7gYVz5h/HMPSqV6o+qcriHPPeJg3EefJgbxHZYUFCAbdu2YXFxEQsLC6ipqYHH44HRaFx1Oxkpi7zPLCgokLaSiXG1Wq3SFk/KbdyqmzvkMXI6nWhsbITb7YbZbJbGPOsdx4xXdly6iiz/763DjQFsFSty/U3NODKG+YJxzH1r+l4U34nreIMOY7iCbTH3MYb5ISNxFA9ABFbfTpcBjGOG2+KlFXMZwBiuyMs+NePJjjf9oet3YwA/vCvy8sP7LsMY5gfGMfetaQyzcIMOY7iCbTH3rVkML12YW6fKHMZwxZpvtRYxgbxu2J/mh4xs7xRlq0/NSn0Xy5CIiIj4PiRSgksH5PLraSk3ZCnRQUQKx81sRERERPSuxVutch+TG0TKo4R2yQvDiYiIiIiIiCivMNlBRERERERERHmFyQ4iIiIiIiIiyitMdhARERERERFRXmGyg4iIiIiIiIjyCpMdRERERERERJRXmOwgIiIiIiIiorzCZAcRERERERER5RUmO4iIiIiIiIgorzDZQURERERERER5hckOIiIiIiIiIsorqnQ6ne1nICIiIiIiIiJaM6zsICIiIiIiIqK8wmQHEREREREREeUVJjuIiIiIiIiIKK8w2UFEREREREREeYXJDiIiIiIiIiLKK0x2EBEREREREVFe+X8dPehyX8ibIQAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "# 1 探索数据集中的异构性。\n", + "# 从某一个用户的数据集中取出40条数据,验证数据内容。\n", + "figure = plt.figure(figsize=(20, 4))\n", + "j = 0\n", + "\n", + "for example in example_dataset.take(40):\n", + " plt.subplot(4, 10, j+1)\n", + " plt.imshow(example['pixels'].numpy(), cmap='gray', aspect='equal')\n", + " plt.axis('off')\n", + " j += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:50:57.939518\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "# 1 探索数据集中的异构行\n", + "# 每个客户端上数字标签的示例数量,可能不同。取决于用户的行为(不平衡的)\n", + "# Number of examples per layer for a sample of clients\n", + "f = plt.figure(figsize=(12, 7))\n", + "f.suptitle('Label Counts for a Sample of Clients')\n", + "for i in range(6):\n", + " client_dataset = emnist_train.create_tf_dataset_for_client(\n", + " emnist_train.client_ids[i])\n", + " plot_data = collections.defaultdict(list)\n", + " for example in client_dataset:\n", + " # Append counts individually per label to make plots\n", + " # more colorful instead of one color per plot.\n", + " label = example['label'].numpy()\n", + " plot_data[label].append(label)\n", + " plt.subplot(2, 3, i+1)\n", + " plt.title('Client {}'.format(i))\n", + " for j in range(10):\n", + " plt.hist(\n", + " plot_data[j],\n", + " density=False,\n", + " bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:58:14.870869\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:58:15.078079\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:58:15.286576\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:58:15.498459\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2021-05-06T19:58:15.708897\n image/svg+xml\n \n \n Matplotlib v3.3.4, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "# 1 查看数据的异构行。\n", + "# 用来显示每个用户的平局图像\n", + "# Each client has different mean images, meaning each client will be nudging\n", + "# the model in their own directions locally.\n", + "\n", + "for i in range(5):\n", + " client_dataset = emnist_train.create_tf_dataset_for_client(\n", + " emnist_train.client_ids[i])\n", + " plot_data = collections.defaultdict(list)\n", + " for example in client_dataset:\n", + " plot_data[example['label'].numpy()].append(example['pixels'].numpy())\n", + " f = plt.figure(i, figsize=(12, 5))\n", + " f.suptitle(\"Client #{}'s Mean Image Per Label\".format(i))\n", + " for j in range(10):\n", + " mean_img = np.mean(plot_data[j], 0)\n", + " plt.subplot(2, 5, j+1)\n", + " plt.imshow(mean_img.reshape((28, 28)))\n", + " plt.axis('off')" + ] + }, + { + "source": [ + "# 2 数据处理\n", + "\n", + "主要使用tf.dataset方法,将原始数据转换为list,方便输入和训练。" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# 2 对数据进行预处理\n", + "# 将数据分成多个不同的批次(某一个客户端的数据)\n", + "\n", + "NUM_CLIENTS = 10\n", + "NUM_EPOCHS = 5\n", + "BATCH_SIZE = 20\n", + "SHUFFLE_BUFFER = 100\n", + "PREFETCH_BUFFER = 10\n", + "\n", + "def preprocess(dataset):\n", + "\n", + " def batch_format_fn(element):\n", + " \"\"\"Flatten a batch `pixels` and return the features as an `OrderedDict`.\"\"\"\n", + " return collections.OrderedDict(\n", + " x=tf.reshape(element['pixels'], [-1, 784]),\n", + " y=tf.reshape(element['label'], [-1, 1]))\n", + "\n", + " return dataset.repeat(NUM_EPOCHS).shuffle(SHUFFLE_BUFFER).batch(BATCH_SIZE).map(batch_format_fn).prefetch(PREFETCH_BUFFER)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "OrderedDict([('x',\n", + " array([[1., 1., 1., ..., 1., 1., 1.],\n", + " [1., 1., 1., ..., 1., 1., 1.],\n", + " [1., 1., 1., ..., 1., 1., 1.],\n", + " ...,\n", + " [1., 1., 1., ..., 1., 1., 1.],\n", + " [1., 1., 1., ..., 1., 1., 1.],\n", + " [1., 1., 1., ..., 1., 1., 1.]], dtype=float32)),\n", + " ('y',\n", + " array([[7],\n", + " [2],\n", + " [8],\n", + " [6],\n", + " [6],\n", + " [3],\n", + " [1],\n", + " [7],\n", + " [1],\n", + " [8],\n", + " [3],\n", + " [7],\n", + " [4],\n", + " [3],\n", + " [6],\n", + " [3],\n", + " [0],\n", + " [3],\n", + " [1],\n", + " [5]], dtype=int32))])" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "# 2 检验数据处理的结果\n", + "preprocessed_example_dataset = preprocess(example_dataset)\n", + "\n", + "sample_batch = tf.nest.map_structure(lambda x: x.numpy(),\n", + " next(iter(preprocessed_example_dataset)))\n", + "\n", + "sample_batch" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# 2 通过simulation dataset构建训练数据的列表.\n", + "def make_federated_data(client_data, client_ids):\n", + " return [\n", + " preprocess(client_data.create_tf_dataset_for_client(x))\n", + " for x in client_ids\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of client datasets: 10\nFirst dataset: \n" ] } ], "source": [ - "import matplotlib.pyplot as plt" + "# 2 实现客户端的选择\n", + "sample_clients = emnist_train.client_ids[0:NUM_CLIENTS]\n", + "\n", + "federated_train_data = make_federated_data(emnist_train, sample_clients)\n", + "\n", + "print('Number of client datasets: {l}'.format(l=len(federated_train_data)))\n", + "print('First dataset: {d}'.format(d=federated_train_data[0]))" ] }, + { + "source": [ + "# 3 模型训练\n", + "1. 构建了keras模型,转换为tff模型。\n", + "2. 进行正向传播,实现联邦聚合算法。\n", + "3. 定义损失函数。\n", + "4. 定义优化方法。\n", + "5. 进行反向传播。" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# 3.1 使用keras创建模型\n", + "def create_keras_model():\n", + " return tf.keras.models.Sequential([\n", + " tf.keras.layers.InputLayer(input_shape=(784,)),\n", + " tf.keras.layers.Dense(10, kernel_initializer='zeros'),\n", + " tf.keras.layers.Softmax(),\n", + " ])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# 3.1 通过keras模型转换为tff模型\n", + "def model_fn():\n", + " # We _must_ create a new model here, and _not_ capture it from an external\n", + " # scope. TFF will call this within different graph contexts.\n", + " keras_model = create_keras_model()\n", + " return tff.learning.from_keras_model(\n", + " keras_model,\n", + " input_spec=preprocessed_example_dataset.element_spec,\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n", + " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# 3.2-3.3-3.4定义前像传播过程、定义损失计算方法、定义优化方法\n", + "iterative_process = tff.learning.build_federated_averaging_process(\n", + " model_fn,\n", + " client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),\n", + " server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "( -> ,non_trainable=<>>,optimizer_state=,delta_aggregate_state=,weight_sum_process=<>>,model_broadcast_state=<>>@SERVER)\n" + ] + } + ], + "source": [ + "# 3 查看联邦计算过程\n", + "print(str(iterative_process.initialize.type_signature))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# 3 服务器初始化状态\n", + "\n", + "state = iterative_process.initialize()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "round 1, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.119135804), ('loss', 3.0766096)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n" + ] + } + ], + "source": [ + "# 3 客户端进行单轮训练\n", + "state, metrics = iterative_process.next(state, federated_train_data)\n", + "print('round 1, metrics={}'.format(metrics))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "round 2, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.35864198), ('loss', 1.9986831)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 3, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.38539094), ('loss', 1.8443733)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 4, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.43024692), ('loss', 1.7397194)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 5, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.3962963), ('loss', 1.8008647)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 6, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.44547325), ('loss', 1.675535)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 7, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.48209876), ('loss', 1.6074551)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 8, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.4973251), ('loss', 1.5451111)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 9, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.5067901), ('loss', 1.5109721)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 10, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.5388889), ('loss', 1.4563706)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 11, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.5617284), ('loss', 1.3862591)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 12, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.58312756), ('loss', 1.3402764)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 13, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.58312756), ('loss', 1.3353041)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 14, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.6238683), ('loss', 1.253434)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 15, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.63580245), ('loss', 1.2053648)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 16, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.6393004), ('loss', 1.207883)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 17, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.6674897), ('loss', 1.1293923)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 18, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.6895062), ('loss', 1.0926687)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 19, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.677572), ('loss', 1.0902609)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 20, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.70308644), ('loss', 1.0715235)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 21, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.6995885), ('loss', 1.0483558)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 22, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.7074074), ('loss', 1.0288506)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 23, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.7308642), ('loss', 0.99303496)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 24, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.73209876), ('loss', 0.98611385)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 25, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.75226337), ('loss', 0.930803)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 26, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.7547325), ('loss', 0.91434574)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 27, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.74053496), ('loss', 0.93025583)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 28, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.75781894), ('loss', 0.9082405)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n", + "round 29, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.7660494), ('loss', 0.87998044)])), ('stat', OrderedDict([('num_examples', 4860)]))])\n" + ] + } + ], + "source": [ + "# 3 客户端进行多伦训练\n", + "NUM_ROUNDS = 30\n", + "for round_num in range(2, NUM_ROUNDS):\n", + " state, metrics = iterative_process.next(state, federated_train_data)\n", + " print('round {:2d}, metrics={}'.format(round_num, metrics))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# 4 使用tensorboard进行可视化,并对过程进行评估\n", + "logdir = \"/tmp/logs/scalars/training/\"\n", + "summary_writer = tf.summary.create_file_writer(logdir)\n", + "state = iterative_process.initialize()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "# 4 绘制相关的标量,包括accurate和loss\n", + "with summary_writer.as_default():\n", + " for round_num in range(1, NUM_ROUNDS):\n", + " state, metrics = iterative_process.next(state, federated_train_data)\n", + " for name, value in metrics['train'].items():\n", + " tf.summary.scalar(name, value, step=round_num)" + ] + }, + { + "source": [ + "!ls {logdir}\n", + "\n", + "%tensorboard --logdir {logdir} --port=0\n", + "\n", + "![tensorboard过程](2021-05-06 20-44-37屏幕截图.png)" + ], + "cell_type": "markdown", + "metadata": {} + }, { "cell_type": "code", "execution_count": null, diff --git a/Tensorflow/TensorFlow2.0/12 联邦学习-文本生成.ipynb b/Tensorflow/TensorFlow2.0/12 联邦学习-文本生成.ipynb new file mode 100644 index 00000000..e69de29b diff --git a/Tensorflow/TensorFlow2.0/2021-05-06 20-44-37屏幕截图.png b/Tensorflow/TensorFlow2.0/2021-05-06 20-44-37屏幕截图.png new file mode 100644 index 0000000000000000000000000000000000000000..be512265256d40df32887bb93c24318db9802f76 GIT binary patch literal 92043 zcmd43byQa0_caP4-KaDY3Q8kLON*eiq#)hhA>F8es3_eiCEd~?-O^nW(%o^_^Nr8_ zz4wmsjyuNv<6izS9?sckpS{ljNZck$($rLoRn=%oLu!CjFC)jY^{x19St3fjcpvwY@N1I z>V=VzXpo*i6;p9b*qCu!kkMEIs%BPp340TYSGqYI zdnYUl@(#BrwUbYh6$r#JXaoQC$HQJh+e>UDL0=OeoC*uWe}4$yQ5qOVZfNby`{&AE zR8MbU{&QPl%uS+yuGN2pdH=uT5i}VPN&j-JOC81V<8 zBQ_r@Wu*W6e5JJ4(M;ctk^{XQaBK!{6;^*X+hoARHm*L8e3g!!jlwWrejH7$D zPV^A)He5N~j`f?)oyM_`{`lWlPJ7CqboKe2T}Vmw=Z9sizvS-y_g+}6|K0n?UMc;1 zKKj~+=zg{sZoIxsxI@LEA+)C)_w&`S0}1W~|FbhA^VDdm*XTCf?}gRq*|QXV2)-o+ z=TS>6R87u4qkT&F&qhsorxr*=N)7d8o9bO#@s%hW)B1MG?^xo>-BtAq*3oUK8!z0v zw_f&YifTeCC8%D%SX%cA*(%;V@#yxD0mexM@~qzDSv{nKk|H}EVuR79`7$+|6bBC! z%z4|iGHT<2oUAbyTx>jj8kco!WP{ zvy5%MLnF(IXa9Q7DQhe=!gB9#{un{@E4bEUB3h`o#M>kWrNjpH)(t|`})vvXbDM~gGBr-8_ss9k&SYo?Gk#p)$Qts&D+O^A@`+pZF|#YK&GXwr z#0jMOcdqnL#R5;8_qYgN7__UA^5|N7m}D9^Q!Dsnd8nU+w8!qg>nU7*e!% z`aU@J54XNr9KG_3q|lo*s&skI>fykiFpVjb%;A%3A(zqJe}d>}oQUrZpHD0p2?An*c}{F!W*NQ4?92$)60 z*~gl-Sur+agOFAolY%Q*Pb2>RtSB?D`0Qymj8BP0LdqVQKXn5P4bl;FD|LT^| zJ;>;gm{=6?^PxC!m3e0tRUT2bIm}*_&#AFco>iZCP{YoNPEwlRCy}l*r-{nOkYam< ze8k4qH_k}W7iTta!bZ2hYKqs8tUM6xi7`GpKvIwG%VR)p#uOD2HOr_OIQ2e zy(Xd5%$q^6Q5`_5DJcH#(jCMwZzhL++gi$o=ZwAY)er-1U?D?K2bIuO zuE{=nQ7x$XMUp)BR7AZ){K0qXh7XqwcS@D}HPINwQ4dR1z49cDIf>iNEIsKSyuuyY zN*%uf+E&SBQ<@E(tYFOBHH0?Qej^4Pnr1iMLut+AO>CBJg9aRts9e~6$DDIUXJw!H z6ZfNe?S!l?KdBTfCC$BivOAzPS?4bnxDc#P8q8xA|1OCnVOacLKR0faLRHx&bL%GV z{XZr@e9%zq1070+sb{8B=A!Rr#S=9<%2eZ3Unwr?XyODn9F5q{PUkl-n$=$8z7w3E zW7@IC&`y^4u@PFgGi#A3Z#dvygOz#QtXnb^^G)X(Jzuq7Juaiy9F;vIss@{X{EKS# zdB5}9xE$|%7wS^V;AJXbVXvF30uzM_sov^i6;F*zhqhsUoK+?$9>iaN3K=^bVx861 zu)h+NDh(E*J-vDMx7K3(>ps0r{;*Au4&O(`2j61KoDaNYWJ$j3Jgm~Z<8#MNx<1hR zkAj_(VnLd29@7hlzW-Y2VPt#9DG9RS3*`o9i_hce#miVofAFVZ2RubQx zHJXTzj@K&Z!K4l34tjzyxsucEw=kyWKex5o@u0tEJq10uX#n>$!j(L9S%=E&NZIc3 z3)ac{+twSN2j^{Bp;OA|LwhDDsYv`Ws@(TIoAo{9zdmVeLB zFQdG{8WO`YsD+~>_Ew9w(!-lTf1=@He_82P(>1Q}o5aZHMTHmj78>p4v8(SUhu>I< zU5V-qfbyM|NTL-7ML+z2ROLJhIDp z5J;7?C3fC66g?$q;{Fo5%IW2$E?-`2FS0JfsE^srYjIzpL?JG zl_IOOwJBewuiAsBLMB=rPF~s-R`t#js^ta98tg)WI8E)~W&9Hq=estH<_MQStokH$(nkpqT8j1VjR1oDC65>Vg`N8AlPG0N69P_C206)9g?D6s1X}vmb;MI0o=7Z+OuNJQgcFm}U zqQ56OXdY&vmHPSeFgbe;x?0pS%yT$##^q_x6gdufl8c^DtRm;lN3Y0*=nmPudMKGu zdXPzT=(G3k!uTtt{sHAi?N*BiP&aok)#=h2*$+9OfL_D2_%te-5tv#~M!)7g$YU5yB@ti3_Vy z$-VAYkyX-lpH(hg=sSAE6y%@&n8u=f&GaljkYK^&Y$bQ?bo()Jtxj|r6%(4=S(>g) zfFXqnQmUBip;x4rwzHAjiP*x2v`I4m=_PwQG@;G3&N{8AQ4}o^oJ)5B%2}hT{K)F6 z9iGZ0Gq)D0FT`U0+XSw^7?`bSpl+Sjd<%0v%r4}HwbFquY` zMvbBuWur}vv(C`JT9Rmt>LvzkCW|e&-;u`HK&h^0KP8P`OtH9Umw&_j&V~Tp;{qwK zNd)sdrBDGS08flmL5GTCG}rck|;}`vkTtg z9qKO$q$-?qF0*P6u~?Nnq1f5yE3=xEJ*bJpbhkU6yes=qK(CUHZ0BxV2=&=tl-1-z zU(E1+Qz5@3XR4n1GIAgFkIKdevpV9*{TP>_GdXGWqU}31Z9*w?Cy@%(O%INLG>IW; zC#mX&<*Vv7`1D(C_D5KYUw^xIk%@Y?_k3+xxDvhe&Dfv*xIC(}B$KYoG4^|xDRKAI^~auUo_%$^~G*KsKFUk8$O@e*78 zJ)EWGRfH&G)rU`<+xv(f@$Ef0>syo+CMaX@8b<9Ls0q!U+cK_u!`>(S*p>RQd6;>v zX?sUN74!HnYQIC4yF$W5X0WY_(dgjZh5h5}k<+dV37T{A`*)PhI$9`$a}U|GE9YhN21<|Hyv>%)fnkf zDs!!<8fweW)PLN2>~kYOGe;AZzQ|SeT9-??e(vl})}Od*55*ZF(I$bfwRZeExV8_& zX=C(#;)8E~3G&e~HGcm0x- zs0BYZ0=_7pA_p}cHseg99ao-iGE27fNbh95GdcOJDIoUUFQAHVw&JEHuJT`->Z|ry zlRi4`4dgk48qI=zuDL|st=>jSuW>)}3?!!E%f4*j)H$=(8!69qA4{np zY(B`Eeu;`Ke)pvz*8VD^=}>&X>?i3wC3d%KvrkKBaf}39?AMj7AvwtveLV{Gb)@({ z7uc6SzngvaQi%XPb#mhUb>EJa`#R=4I(zqdT(Hijuyhag51nsb`s_J}#rZ#YGg6~H zrdL*b&eF+j^0(2nOjArV(w%)?4U4T_ac*em78B)XX4Bwi>EEZ%{&VxNIy?R(f#qOq z*i5b|Rp$X;X=`!$7h`IjHv`tQdfb6aFFqI1e7%~KF%#19M}%IRre=B6;y*@F z*PQ*Z?N@zzcs4H!$jz$ieR|W_y$VFnnX)aGcw7`q$W(BjijXNA2%+RHDram?9#ADr z8NUI(;k8_!1P zEgU)~$?|EbdYlybDkV%TuD1PZX%9=Q7+ec*pI6hmJ#-ri`f{=mF~1t?nme>GT0|t_ z*Fsc6NE}vwS;DoU_ zf^lC9`uSRQMctZ&xx_fnF%eb!on0x8W$T{j=MDz%IXvj;u9Ns;T>(&$7X`x0H2w|b!~ z=g$~AUMXC;!p9%={t8=J4d}4#oQs(D`*`zQmvz+TTlhbf3&^ z8dvkbRjopkFVB29Dm!F^6jf+}C zV0w5ul$WN+G5-OR?mo5BE6f>OmiVIq%5AjMb0#^p;Ir9s#iPu;^t1XoXWKocvBU7H zZD|qw=nvv9k4C9bwL7{j4znz)rg|}7=QRJUF-X@rY~WJ7ys%4+lN0kAx*gH7o0D05 zkF)!BB5{i##Sc#UD&ge%+;4rMfmEj@+`bb>YBvcBIgn78&Yhpmc%<)y;k}u(sB8R= zn_K^v$%dwJyz3-A)kKu=D`i*R>`#UCV{fXsBPq)X{J0~DQRl;!Qm3>RRQ5-T>lwN% zRbDd(9&s6|f|bNxQwfF?^P@Lxbv#H8Xs=ZVsfC{0$p~DczBLq`|8voO2nn6{@cbkG zKpeh!Ux(Uxz0(ct5=qPJ7-MVBgQj?o53aXN6~21E*?RkeQKS;S`lxFhAo+FmN|-crRAgH8fUnvw%{^3dbdm9*<4A~SN$>tmV{(KVm4 z^P%or_FA-?H>{FF>pW;DnAZn1al{H5{BHJ);9a_t-)~79#uRhS$z{{*YxS@28NhX# zE=~))${P+p9hb19z03A1UH7@Tr7-CQ`49iMDV%OECT1bH zkZ8~5HLe6H&$X1XAZh7&w0mx)sJJNp@QlPhlTNCns0hUmoA+J;w&QZgLS5+$VM*WD zz(;V~Uw=I1`<_C&{XDJTnM&BqYd^@R5)!1cQV8__)swm;f zdz)=d$uef%%nQdx(~Ra;TTr==N!SlGd*oIGUD&QFjb7hKM$6f`+hEK7M`}1hNHxe% zhV*5#%z9A$;5dI48U6=b@#Mp&S9>+S1n&89J#@V2tVWe$CFDzo?3k8h&=#TH=TD2 z1>XnLgXG8EnT*Tf$9D0Vvl`WSc`pZx^aE^6G*D73HvfF!)-Ly9{5IwPsOQeW7HWl! zMU~e4hJ2O?LEMvNdF)4EmWu-h%&AKJo^*C{Na?*JqktxB zQU+DX#arpC_Q7GJ2AA0EQDhw5k=ib9@N$p^*JBJWA6Y5aVL}zf z{l+z&b>f@SELaVJ^`EGpa*(iecUko35j131`UTd^sLKuZQyi%%lM}0qD||nXmek8y zJC&1BGj|CY&GA83Z(1EUQ@zpu11*~tSMDr_ae{JME`apdx!ZO&eCmRf^M>em4_yI2 zZ&tZG99UJerDi&1G^L$&Yb%53!&bM^f*C)hSV>;@QmINj_6!)_l?&#IVKi~gtonSj z`r0?Dx&N7*x`fsfOYst9rt=0xDTBe|{!{bPM~=fkk1a98sPxxmr4`g_XFDQ(vFwh_g*j&WSd*m?fP@Fk^Jo$J!V(-dpA>%eqBppwbAdt)yHmQ zHn*njjt}?!g?73zVM${l73-T{EwdSEu>}dg-@p{}ntM94 zlc<@hSdvI?Kq!cxmf2W_rJ4I?U7_Fmw&uAK(~ic3T%N6+_k2rJ5Snda2Lc8~Rrtl6WRBDlCh#7yE|tdZwO8n0)qz^oGR-=aegFF_5e{GBjoS5nGq5JBpJ1;Gt9MZx z@+2F0qYvJj4aT-NV+~1lw)s&kV6dE8aLMA6Sf)&~_&F!J-}?)>O#RxuJJLv{t@Ak* zvl}f#Nf)7vil{d{YAmW|f(sfSjO}^d{u259{gKcPqZ4WR`v7_BcO#pU7+W7kzEOWm z5Yydfw7QxP?j5#{1fkcBT*~C!Gy99e{B)cbjbx!88z1}aHMS5JN}fLZpady8GK8gNTbbh_$kBj6160IR>pwh=M@e)s>Ci zfHPZS;4%5iweU)I+B)flVit#?gMSqpbI*+QLG34#4_-GeH{B(pO--A8G~;GR-;wT5 zzI|`IF4ez|jX_nA;lT3b*ZgGba>c$)O8KLW=9jPj79L6*7VypTGJA=9&vUeiz+#AT zoY&j!TR+gvh`3XsBl*<<3*@=krc~o%iGFK(3;Hd{YJop;B(VY7`bY$c*I+Wvu<=v#W9#YPz zgoh2I?+Zcp*G7dev=JVVYR`Pmicz+XP_q?E$+I6b-S(ey8lKJ%#o!tCyGKa%RpMM* z|FBu5j(b0%_F*AfNU?h$!kQTjoyb~b-k{ATe93$sc*DEf56bhq+ugdW$mL0N<^PHwxV+0>Q8<% zp7PZy8Tuy?#tVq3Y#*_=jkc{a@|eE$1OTOgE%SNgC*)1 zTn4i@T-UL<4@)CNv3(@Uwg>Zh>#bWzE46ywYS?oTiOPAM9MT;0_GM)cPUVPCNDfnw z9e#cBoDEw$WL8Jimg}XYPtH(Kg6u*4aSl#^5b84Cbcyugo(nm4SzJIk)!C_`MODY9 zW2aE-tG*sp$L=IyBtdT_31%G5!TGjNt5j{`k#?#W9Ebkz)vRNpbo=G{f|8TP@IA=< zn;TlR;>~DyzA{#+_6FOrhU^)w)eCfneM-50o()W-zwV6QM|o-l@TYGyF}2A zO@7;@Yn_htb#>YYLlZZN*xc*A5#va<r>+p`QJ60}RDOq!L4#Q3Hh zrcOHLU0bL*xbwElqh=r)YZa$s&|TG=C+0^?<^Q1SA{{J6>S-}L-`nFPoZ~?=#^Nx# z|3A9xTEx;EJNVF;w1|_~K6`^Ml$PNp`ZO`@%v=_{lm?qmumyY^7)A(YHEWj@!0gq?N_fbuvy)Q%`oi8?gzllo`{gM*jE7 ziMQ{2gl&XkxvMm)$rjLzMppg3rra%gC8p^AIVbV((_)gOks2=TJwAUcS077WsV`#X z)gok#gz#abeIFfsGDUA>7Vw{w4^MgilGulO23Yo>eIn=dqf~%fo@=xpInW*1ufsP` z{_lq$nBXHm+e_q?JQ0m*MljwZQ*r}(f>Lfq^YT?+-baj&Z|rze|z>njseY_ zZo2$uir`P<>7l2X$CXX~bH`gj-|#YuePq))NFoMB+|Pj|E*e z^d?HpSu{&Ae6KH7M2I){D`veH=Nbb{s3|y&FmNe&jMj#-oz_RfmwVzP6BB!Wy}R{y zvVz@uvb>gGVFQndgrqGPm%?qY<3Zl^7mus5hXuDD$nTtQ*WV%}6dTS_&6}oFYIuK# z`E7Xk(pPnzRGnJ)U#+d2wlhzjg_9d^WEgI6& z(gp?w0?lmgPnCF8YNiw$%6xXHP2}h2=jP!-QhoWSBhq{*i_q)r zfN`;eY5L-HpWo-|$zp4G_1|;0A5&AWqgb_`nVDrx`OY*>O;2Ou;QSgNAD@u>X*reC z=L@rX^k&Zpk4oTab1<&$T3rx?v}KV6&HT=M^HWL5PhY;M zoBd_`(>>!HwY*M06!g`ZTEWf93f`@ASWMYOf#H*L!R?yn20s+@;ha0Mv9Y<@)lmWH z_zs6_sx`H>e@F5t8XFs15Bn1Mn}2_odH&)>n!{43)AmdvEXeOn1!~PQ3)F_)#kN-! zHdG{RuN%h4V~JTc`+qu`T3K~RH;mW&h+JJ=jZIEcMBh1n!pX_0QDlHB^??$Z<7kAu zeAqb=W=eGHmV}E753F`ub8|qg$MGH<%tPid|9yX=%+ho(t}l)o+qdnmN4FJ4WMt&4 z5)<6r-QCqH`EYV>41D}dm;%zq)XzwInW+A1S6d#NDd|K3XSb92kkF0HZ=>w2tl{i+ zC;kwckIedMkmQq|bl{6zh$ahrna$P-?JxJ-gEZCE)y1Ra6LohN5EB!_A>}|KA&I6C za7C<$PHmh-2;Qf!UxDIK*Sa4z_4W0QUFB(26dShT{r>%X=iuO*a;E%a^WVQts$j06 zD@h)`ZaTfNWNX7e_?_2oe`Qil({BzwSR3wg>rNDOEw&oxq@$zL_~}5u(wCh1;w#g^ z=47;h^O}a!YsVMv_zd*)kE|yi!zEc-75Vn@?`}Q#U1q5+;Ih%)n<)6I)}7ny{Ky!B z;&q*8ti^E7K)sKT#ZZ>Mm52E{(znda5{IQ1AMOghkeA1U#XtBv*mlBexmBxNVKeRE zgSJ}LTjjj|_QMATLBV)5T=JO9Nz1W9TA#~9l8%lJdXr~}^mWDhfkuQQ7KnL^;fv)t z;!nYNF%0|j@87>8-;NL0(`y&!xNT7LHICcznW!idmuc^P4vvo>s03gBgcF@nEU%jC zyv`BPcK7aG$hF-;1(Ds0{XXUFm-M1{lpS4MOy(N=77H}L-6+j0e8E(`V?#3ojJLloMwr8p31~nk~ zV5eFylSO=zembuF&V9vI<+?5Z@+FbwNG>h7{$qMQu!v@(`P!eBf|8|RVMMM@?(y^U z!&dv|=CY_2==4DRkqLY9A;t4p8^GF@T2Ds#`XWJaju#ta=jZ1yc?%&PEbJwq`a{il ztWbY!VxsuXzKKa+Qcoy*-P=U%t5G#sSsWpcBbKAq+;5|O!^2{6pPzw$7_NS%liu)bs`lO6ZeOz%CB2GbfAD z{GLMnW~eR3n-gWPEA9LMf2YRQlj7sM{86!2$BOPjjfZV{1dy%sX6cTVl~t$b)LspG z&rk150gs~%{hhhSKY#udS`0Ip^u)FND5$f*3H(wn4{17>sqo;zgAmwW14F~+)^Li` z`4DQiqj6KYnP}8mL6{c%v1tPU(^#ebJ$QWc>}+yi;7yl}G5x8T6c}x6Y|L)q7v{eX z$W}5>ad8tB7Z=CyJ0eP1f{+KXt*!0Z(Pr0Jks-YQ%@lyTn)9vd3VPHDqVuCo!(VR+ zS#;|X02;LNs93ei|Mc+A8m;!HR$Pv)^d=&zaV(eV%x^|y8TSv{b?0mk6q1Zu!^jY; zFy9=)1r@0AqjSZ`fX*qd$1|R@em*<03&X%IXS|=MNeSA)<1U+%wC_@B4V5m5`i1MaY;UJwWyQtEkD!aV<9&BvU;yzt2%OQ7X&f1ef?y8# z^5r&U&UlqGGt4C&iiGc)a}V72=uy!xN1ZrYiD1R_XSfLo2}pMK_WD2&?$gsNm6*sa zy5D;i_V6g9`}1gl^ZLlfcuB}oSM*@b8^_)xp)O?wA>%zwwLHyXK9f3_=AY%|Js<*+ zU%muJL@501O$-S^Z;PPLgk5@UJux&^j*3nEF(Dx=G!)z3-u~qDlq@9WCK}r3uU{n{ z9E!&&&LGPc7Z#e*BZMtB2#@#n7BZ8)7gh(-8GLLdf^iyWXQ>q>{JpPEO@T-~1>l6Z zEUrVB*=s<-C*=}C;Dhk_2A6?>fo!qo3(W@%3<%gr^0|7Gqmpf4bq%9+0;~BuU0q=> z5;QBgbc$p4`x_?YbQ%pA>Qy&zc>&uD`$C8qgbSP#Cg0A`9E0VxXv)*pSiZ-EB zdp5u<$wa)Lz!u$m^ym|#as~kfMHla^ry(%B+tn_c3q@^r4X3M|RSI;bCwhJ|zj1fx zbU!eQysfSOv#^kZ?%qA9huZJ_0;vRDNJlG%pjf`|-s^{uIXm9g%`b0lX+iE!5ko01 zDM7w71_k5~fOM;m^hRu z^A#GbF1;?)Lxwt(;j%g51dMLXkUS&B(b184Ph)?#tcfFi9dMU9*E#>m`+bxc+m0XD0>1V`HY40v{hAuqgy00;p`O*HDgX z=-8OXNWQiVP&O#pk4(63AA4$*Sr~s-qb4PN`{M^QdVKihXJ?Jy0&wBU*%^5N1`?qDP=Rjp$%$L!<(Gq*M-MlJRH|L9e-91< zSNzoB(t;|Qn2=yZE{&*S;U07!KLW#DXbF7-R5h#?4a$4v&!3M>x=EozY8rgvp~czQ z*l;@-kjk456C44S{4Ola2+|`kC@2<}fs)@L(0nk143OdHf@9Pa%k2k3LR7wpv~4%! zT{O{y;sD(DH=rI=V6pEnzRLQ?{r&s*yNS_ImQujmw-~@j+99cmii%QUpo7(c=COEP zMM!dANxz7L1E=0(kv<^cp-)_Zb1m{$e$vNTHZnEka$J^$i9u$dLy3I-(; zNK~D-u&^-T$SrDWTbFhz{iCBJfGYBkzqegCKKD{(B^`!S@FMC`6r1)7h+sJjqrl+c zg}J!~K%KEt^IK5LN-ak}Ko-}xuV=0cK)7+8d%HS2vksn@v9tvh*Q0ke0TVb8&@7gJ z_Uu{F${ftkSlHWqo3`1b;debUXqv^@6kyZ#nbi+&U?RYBeBA!*z&vt^RkKuYxjVL1 zhu*jT`YQfGvgc>*Y8OPU)A2qvc0bxM_w@Yx`}@UCGk(I8H$*_YfaSQ&`Jp4Z?KGmB zkLFXc*I#g^EPwXCJRBXbv`@FM`2z%cb?PS^LF{{2AU@ip8r&uv+o&^AulabUl z9VBRBQIS4GpXB?@>D4bDKz%kQ%0j&_&jtYL7x(D_VMunVB&Y#h}pHB zeoZTZj*c$s74;?K<@Xl==&^|}2jQzS;|aht`-&+v0Pa!Liu9Px5XrOQlAv) z!$+TRK7AgscW~gOn0qcK$2vM|g@{*2<^)FN1Q@G>_%_7rD2MLIIa|6pxnbJ}<2*_fD^k1||tbSDYLHwK{Zcd^&^!{W?%pIa}sK%RHGoo`l<2{=96 zU+G)PJ8C(BvcYj$o#vuPW2eqp>gS&Z<-(yKXLj{k0B z*bAwu0K}5o=i*Va&lNvF3BzKqLIPjoVuXl1P^?%%S2j@SMu7LSagQ;5ZNGH_fHm&?x~0&crF0Lp+b@`G zE0j<& zu?~Sc0T2Z0Lgah-IIzu76844pd8I$6)s>ZsAV*$nYx8@a6n3}-O|Gu3b$(@5myP;* z5Eq9ndmHbDR@3KEcBqQLx|Iubgo1I%nr3P}o=Zz}jQ0Uok@JoS4@Yen9jzEMjCR>V zkoD`UV-Z7EOrWW-A_LBeC8m8hb~Y)B{jtxf#=U@7{qb zyG1~txBG^9-Co86pZrD+>MRNw8JUU5B39BmP#Ct?m5P6!M3;W3uNQ$rJ-@fq#js8- z=+d30_u`cZ%9AHg?3|ss@%%U*vK8vZph^H=sic^?MTY5X|N0!tGnt?Z3%uEKYRKJ% z?93$2qu+jUvojnQ^RcE$`W>I?f3>v@etUka?(#?r4gao{taX7_1smc)0Gw%H6*z5- zeFD0SU;)4p5!@Z2F(J5cDEU5uW?fibHu;TWUg&-4{`vFg7;ej`qBetzlU;_djUl)c zt?i%gg}1b}exT~=j^*M9LJWvdUljL~_Hg90HCC0=Um|9;+&N%qIo)dm`fcqS+UOPri<-@n^$j6E`(Lsm&G z?udL~XlturXUCykjx5YF6Fz`aSAgFj z@F@P3*n5Bkgtu=Sc`C@paQK0GafElK*gDK_XON5g1*5*Iw4+@g$-4*qTU}ipQA(b; zaRAs-3VX(YE(J@h5nkEW9m`7}v@QrcLJA5Q;D*_+N*EwayW@Ey^0liM*4MknOH5zY zdkf(UpU?mcF`hV1l?WLFgT&k08~iS1VCRO!N@{Av@w~PSyu72NLl!eN{7Onn-ErJq ze9NAo1R2h8F)-$!4j3gSfrse zBS0DfKY{tc+swlRK@mm)*u)8$z@;Z!)!PWjv7RWU6%tB>-CEq<*3C%uFcz{g-xebw zA<0oMkcYw!cmPTTAe*?vFAy*@7QzU@1Ht&Pb8ujCnEE^dV6PABg8+M*=_-9o%Px4C z!m={fJug%FH^L}e_1E42Q=wq3fr$e93TskFC&BVLGBO+)VUaA@*!97WxR-MoL%O7^#zgJP@5m>6jr8#dry9Bj-}Bj8xwiOoxqi|6sJVm#X4PX`uuaX6}5 zYCaeY24IQP-gy`a7qHu}xsu)3UkZIaspCW768m-Mvl0~N3^nb=^>sSa^*aSW)a zm`r!Tzz}%^{CJXBb`>l|pNm~|Y+{xG{(ekdv7f|O)vF2cgb!!rT)0R;ml@W`+g;dFp&<)6O}6bGjI z(D36A06-%nBd}cLATNMPr$3KmNDy%D{8N+h{X3!o@K`S0ezA23q}f<51%Sh|50o8X zi))mc5ke_m1Yg7iZZpo8Q~JH`3iXV~YD^T!WEdIN{QNw)uV2B6C&l(UJ2{zKUT)p4 zzwU*KgNcR3rY#A=C=h3K3O6oK*5OzY^YiMp}>Jez+D?TPvhhZiPq!xMHxx zRAF%gIq3A{WCxf-iTj}i&}Vf@Dk}4-%11)(2M?7W^%vhA{d_!!g8!revJo^6M060a z781<&e&jZl1}#_!$^z-r3!G9;SW8B$4bpxfT?%0)0z*N*vq~!9lqH!=1(F(U?j?xO zR-7iNaUd>R;5xY@Dr)M8$jCuCDsOtk&+HBg5lTzT%P)g?Xw?ZtSR7#A^`}WC=mY?h;{s}f@DCUilEOfdMm|t5nJl*^7HQK;1zii- zxqmciyAOUO1^Whk!?H$ty3R`wIPDXJ`2-x1WmFc)^%iV@XaFW)yWYEVV9#8Pp6VyA zio8e#wMTIsoIw6y*Hpjhyc27jpri+`Z3yYj&;`6F^!65uXUQ@&3L+JR%`c`uy66@% zc>#=saY<`Hhlm)_s)&g(+qh)gdIQsmKA|irE=Hu$bhRrl+xc!AwcNzY>Z*pp@b!XD zCeOI=eke?my;^|Tq+BMlMdy!QXD%)-WRH|5?0XnDg)~6NA$Bj)czNyMvF%LF(01nU z5qKNs-J0lw8OA`B-tdM2jM7=hVZ4_6?gQUIP*8wEFi|Mx6_ zfD=dcHK4fzLUk532ZbtI&(y?%x^kTLI@UKdRQ@)-Z1Y5BG9v{d6l&x9us3X3pmsp? zbQ#6YyGo#50Vzgwx*+Z3VWp6q@kR=Cb-xLVztY$vhsmUvlczrm=bW)4-e@WP!#{&{ zi$PWoxcSCpMFcEwZzY0ou0V_GU}HQI8f;*boCZVbTIAdCNTiKHw7U#B=3Rzm3(J91 z311#4UtR1g0Ah{Rdhi0}{xv&0Yjjpu?BM8_4oCwA_;T=MCEy?w?naPzeBKv)z+@S~ zzZ>i0r`?hS-3XT5R}W2D#FElgf$|2bk`4`?nzOYZxzI&gY>U_ja_6C7|2ATy53-H-kvul1**fHnFDk;W_`U|K=TQ5+~nDC_SL=rthv zMNrZDzRN`OLC+0ncUgx3>=ZpG=V#y&0H!txR81c-^~R3D0uD#5eleLrqoAMwlo%nI zp|}F$-3L!I1}DG`)CQsr63HM(M@#DmZN^9T3r`^*jAh4x79ct88#mn6^D1I^tjWO^ zMMBt@z#|df8K|HZcst;cEM+fGYrpAnq(1pNyRBklV}nC2oB#$A7!}PBLl{_CRg4n4 z@UP(fbzVwY3~cP?zP^Y%%xXJO=p4Xw17LrZvEVH})x)M+*WDC^4LZLaS0RKEa8Bj^ z@vnX~m`UCFmLS3gh}QM)0ICOiCJlnpLCX`;vI}@|AGq;h&`W|nse107 zlbQJdI$3la9Q`p(0ByHCJw0D+ysIcFF$ATCAf;Q=)d+G3OB+61g3KVFV8&vlQD&iv zAj&2t8AamG(C;FBY({_(h+vd~vrso=jpYH$;V)Dq7 zFx{5mXx!ParF-}=tNW0Y1;M;P7j!~8+L(!em;^BsBJ6cG^({)3B??cQkhk@7DpM4m zX|@?O+`-sI^lA%Tlws-L#=lsft*E|Q-~Ob=e*(QK*{k~LNo+`uf1TZE;>5>Qm(1LL z_dm{ZRPyHvlr}<}5jw6EoezOz{(OTAKeY7kd!D|_jr#;m#BBK|DGs%1_GSrsK~=$1P~B>x%V zfA@Hf2n@Y_##$`99v6FD~gLh>AT_DpW^@$(~WJ=hcERbYJC zlNal{*9#E*`rvFY2`o?lnfmF7FdE@x!raPA+ZRUV7%o#hfVx`Nwutxd7djp!8$lOM zB}e6N#&$h45Kc}`rko{ony!;;1tWgsOk9gx351Y6RZ<#AXyCW!3F+o!wB^q{>RF9j z4m3-R;$IHje{I39s`=r~W`@Zt9P=O^STSF@IkTdm)Iiun4&Murn? zHOX^fN~MTFqUB_7PfJ7N3tu;UP*fEWO=kyNJZQ&m%k@fah0m{NDMJ5 z40U){x?41nkAL>Y6k=N=}o z$yDIXxf(_Om6d!+o_o(h|33XhCyDeH{BS@@XtCdl?05=Z9T~sFeV7W;&6_vp=H^79 z%X)siZ3-G0wm2B!ApmJXoH+m>BLzPc44$q>eWj(35#|yUi+3MBWPmKMxjdSDY%@jb z8zFr5*0%lAVyg_ zm%#Hl9R5f{Rk>j#D+xtl0jjtmv{b*aX~%(R_zilHvH*@eU;#xCp7q?9i@IP^%`y7x z2t&fgv;o^FX_1kWTLMfp0>|QYy*CxOLI_(Sj@LG6vCn$GDF`~$B9qRbO^l*y5XOm+ z2am|b4r1m*d0NrHg#bRkK3Vcw>b!#}MJVr3Bx4iF`Zsp3Iaqcn7MH$eTVQB8q{TT0mVOIYDYq4{>l5EOM@W+)9 znTC%q24PfNj<5g|L>$2Y#oGCM1)vro3RzxPegr_^F!+TL#je{6hma&KESTWfO=C|_ zIOsgX$K;@A@h;DgR}hxx(Ggkn5n`>tPDWHx=w27YS(MfY>ORnG+1k}Svp&~C@H``M zS@>r-Fl-Gt5nynDUQ!e#? z2Q&A9fFRl+?@8EurKr80>gmxyAFucTVJ|^_D!VNgj7Rk%meW`Rj)Z_uf~b{qb9yGd z39*^UZ4e@)(8B{tV|co^gm5S!{y=9%x|*-2@M;0aO+6oLwN{#lX*>Xg3R9*3Cp5 zKD2SMESg(pkL>vJy%4q>v8ysB{|95=9nSS1zAL37QKDoclIhH>)fwTeShctbIx^Km+SiG%jdmbujjd+`@Wy&U07f! zYADGj#!9c7(UM%i%mfdJFN_5EY+X8<=_eFk6@(A$5TO_1N}p>b;z?u(Er2d0D-Cy( zsBoxbY=8YcPDNx@BI<%ZFw2gJ*<;NGBIP_b?$w{4mU%!<4#FAf8iC{tk5O>0&#*j8 z1--JCX!)=}pww!dm>)<=!R=cK*>R<~)#G45GQfb<3=HqPvSnpujU?Gp)6*-*d#AM< zQVjZFi)cqxlNxwET-ufwq8T5Ame(H$DoG2ZlD6v&>@oY<)m02O1plbw3=T7gEhO|Z z6Dw;ufNV8Z-7{EgLfyhd3`}vJLi)Mi#XSvyi{PaR!1L=G9CR*o1l!j2wn6`i%k0G7 z($zNs+-$%S##|o|*fLkUHml2C9_SOY!rQ|v5u)d*QN?W)5bz5R50~pzKwR0Wo$QNL zNrigKto#lSKz7H_kW1NR$HcY<_k}?NhrkeSt6f~p^Y)YFD_AyAf;U}IkB3F9RsQd9X9@8Lrsp#$xSdC2DtDI$ zR7IK$ z;zJ?O)!#q6H&~dms=t8&VcQ!TLK{JMn1=`QI(%C?bgQ5=Q$0edKYK>iV~J%g2*42; zwchOunc|Vvx>g$2mJ)2YArkX7Z56a*D~ff}avZe9Ex|3C4tHu5I-5}?UZtc3qFaVk z3JYzJS&-Ii;g^~PH$U_9NwDK&^&Y@Shxfe?oV?sK*T}b8pq%4SxPBib!Lg?YSrDG# z74Z9-y&KX3uyhEjo(F{Z%xt|L07GP&VWFp7uccIEe_OuN`}gljt`xuUaSR-QD4b6hCG_4d%G+JdMWFZaP z5BNrs`myT>UJE_WKU+~&w#uu}aB~{tW~Ce)r|(R6)>qUh2SLa@(|*aO_C%~U|E$Bi zAQIe&Zw&#HgjFO6LSP1QE4h{B)*?rv`00miec|K%W#v9+2n3t(K{rGxlKpX??Z8!oW>SHD_B;HD8SnWI-f#bU+Ta3W zInh25+QpowEKql-K}GfmjGH+9O7A=hl_*8mhbVQ&Nm`d{1GjC1fFl?41ce$->H^F} zE=vp3kQK&z!VD%r18iVndC;W@_CMJmp9FVXhzuYB%j@F55kNRzIi=G!v65CQ=7f-2l6 zImWFhP7*Xic!?Q`6#gv^ZDJ6M<$E4%$_(ItB(F z4!R-BT)^ri01eg?KT`C;v^fr+rjgcsCr5PXFoKt~;|o~Q>WAnp_6Er85xP_4K1(m(q1b9R^T7-$4NMyEPTtT~h)>A*+yb}NjKugS~eJ_!9uww&LQbsx5 z8%C~jB32&)2E%m9_NQU`ov;AFI_+yz;@=`>4Ml-ucI2U-u-t)%Fhznm`AScw>9gv{ z{$4FruK4D~pT6WvqtGE|dh!;-aEwIC*?fVr(mBhbo3v5^_YhVtoPP%=2$(dT_byHu zC2RM0Pg&`2CG0I=F)XB@NfU5DsTxg6avAwHJJ|;*yQsC5%h}nPh#{kkOvgMno^|L@p?tpgGJ2zo<@}J9Fm8a_$F@*3(i#t#`w4Yi-ljOU2c}KXXny zMQ?IXdh}=uAf_6qZ|rbJ+&dsszRDdmAwJ&12~v~`DKD-_aM(oDXgJBY$ji^iOihoC zW%cdv-g)v_0gAd&a|5!Cv60mu99cuV`|`IpLTo!IM+9gwxZ!dMz8A_D^WmL*|Nc`W z=K0^%h~INcQ1<-y#i4LGoLCe_i;^obrd|ONsw|gvPQf178H7 zO1?LdIE0 zEjJX8U{$y-3G@ILc?2EHPElC8kX@I3&v6i`m7kZv zBP!yk#u8`Z;?i_{F$?P0S}GF=0KE zDh%kz37b(D*q#cHhV`}@@{1_jZKCl(CjazAo$*i(`0ZW0b`k#*PEs>U`bMGQ>keH% z9Hsop$Twc)x0k*m(x15@yp4noZ)NBnFlBy$owjlcYs?O0D;1)r3V6roV3Y`YMA4%6 z?rKFn^o^(3hpV``xlvUDFIFyBAU?45A!mC|s+ONT7V!7>Tp9ei3`w!Ex1*yF*ZBcr zJE8rMYIpCx^u-WJf{M_Y#Mz8IVr*un4y@DvDbDNP>a1=#qgsB|POPx9a&TYbgRKg0 zaWlNJd5*ukYEEJ~!o5%v0Zh;`81~{mBdx$XMg&;U+=N^vG+C|UoDf79M<=H`geaon zq3|Qk22gfo7VAhe#`^3wm``p&{{u;;{oCn|B(gf)ZR{Xo+E`qiv&P~e=2udQ0+3VD zvq}0AQkjj-zruu9Qu01hw-)TmaDuCN)3Fe{H_AT1%T!oEVV59$!|mF`WEF8;a1vO@ ze4m&4qN=AaGw)Wlz%3AMu~4pbm99k{JpIUQ<^ub5YPoo*DGPZ-^n-nyVwtn?0bO<0mNYX#uqp zf!weLb~Ko;7ZVdB6ow@J5c`S146GI5VL;!6n@IFcmn2Tl^hJ@z`W#_^kioA{UW-dMHZ|9orzYcm*~ z@DHGb4&Uxqdp9w4c6E_x9}^Sf0-JFlhs<4IhY5g}-scOZO_|n-mm6L|_8f=Q+llPn zB}TT7_A9*#_oX=l!g!-TyE3!~EeXgSrC4yJwnR`pkJ~`S0mcz~0^JKAi0KC#7z!p< z|Cclr`E%xtY5X|dE_jCaK$+pB!as~*E|=l5!*3F&0pvv#wHkQLxM@^`E+;H9sbmcc zsjrPRN0cSa+ekzl&d~h3?z-bnJX%9b1R|L1u*Pt4#ZY2uJ(ew>f%rN3#Z3ZP8yny? z3emT|RAZ&=*2i)kZ9&~&`KvU7s|yNHM132I3nASKYHpmYerj>2ak@6qD{T_=xX;2K$VNd^T|_C2dZ8+VRQzW>w;@=G>n~U@Wp7 z$9WMd94s=mAq{98I@AT;tMLc1#ls6o0s(4)M+kcIv)%XhmOi@$>D{Ei4YeXfj|)!G zXH(m+!3-|kCPyjBF(aD~U;*$2QSh=kq=lTp8Jbf7P@vnY&J9bT9zZ=;23?g^%t-Zp z4{7B>`TX1^U_0gfPJCznsqFdWiE#$I(Y=bBjTYO4g@=QNza2#Pn)pW5+^@LIvS6jf za`Ym7fOdsO3r?k_dAnCmiHV747o;njk&ozCE>|@a$f z5TVbwP5s3Xj5*YdSAJl;SLQdE&k{)YFmPY! z2gD-Xa=rlpPk<`Z=3 zgAFNN9UbQfCI7|_E?Js)cRsy3Cx_DorO$^jPW&U-F!eBc$-iy;2=RcJ?F1E@Ef(iz zk@^XRMKnq*==8(U9)axBxG*v7Rb>?w8QabksGo|^09CGI)&cBb1ZzMPRv(d<(9_a# z?bUl2*wmhckV*%eHs`%IvA`Y*6*`X(B;_g6drr{tb)*=D2 zfde)QqbDhttf>?OB?OLD1)!o}tl~!w0lT`R^5PAgJ0z=h;3YL7E&s%(5AELu&hJA* z!=B2|dkA$3CpgaZW9T5x>IgWJ8-d#`5EXjne($KFU#Sw~@9=jmj5UuexZK#q2LT`z zHWJh&8dymY5a5sm=jYm%YP9BF5}vBi@X^s&MfePQz9&M1AnAedY}kmRNN5~$)v-#k zFhDPkE-eNF258|~!G1@*7bO^RG~&S|B3Qb>2uuh{uyFDXcJ}C?Lp?&g9@vX*)fcG6 z{Wn3bHUg+=}8?7 zHdGx$gi-{gIw;PhhYYt#Lqp>cA_0^F(p7^;>{DoH2!d)_zQ<%{tb?#occ<}4Fa4fX zqPJS~dh!>OYIIzkbpCU;t$|(kjdM+|)xx&3-KQS$@$r3vx(Cy#3i7mNbj>+X$JJ>b zUAT0ouG@PE%0#l2suCJSi`oGYwBeHGOd@%|nC^(}?}Czw-MNjVchs$QSf9je2b(i> z0hXpCe3{|m7wE95s2<_Mau@#$!ne1sd}fwQ+J*`d3bvG$CPKZ9kame7A8H4IBiQ}z zu(*Zp-bEHbetv$>v{7rW6NPq%A$M;n8!ajHu*{KP{=7dI2~)EhYTu@*@u?|-L8gU$ znkqPU8%afqMH~jQ4grurQX>4;0ZqzsxiX3c;)^yK;!|&G0+l>I8e*E_+NYV+k2RPsynlcARQGiKp4UnXQHP5+?!d>hC|`t4lGUh8T6 z=LMLZKo0tTLL=(|@GZiy5m+Fi17msXZ2X*yr|c>dJAYrsa$Ba6r*Ob(nTq5yiieLf zQWC$@eK^s2Wb^iU-}LzaFXTt!Nt~W0<`*au;t&YVCfc8d0S5KhN87ln!yuZeWZeF6 zZ`g2e&`m%<04mTXcn-00l~Eu7Igv&GZTq4}xAx&3zWY}^sq?M7_yOHK@S2$EIw(`Z z44o7xL1Yl&(Lrkhw#SyT-@P++8rXMU3#lsMaD>sIWHOpZ55UiiV>E8es_GsX@CS@R z3t8=y`Sfs1J&B8?nGyL!1@-Hdp?kBzTNBG%H!^2#+(375eIcl0smS!IC*o|k!>dgR z0CA$A0*%5=Y-|so`q~VF&SZ)&07|1V1j?32u^dWF(4nL3yDzDpIl~6a!5fRl`ZNUq zF0lN)Y;tyQimLZ}!uM#_4^oeIFFd}%3RA39pbYaYYd{g5ZJraJOhE0CyO(+WmAkqc z>&R^mDXOTc*;Q7z`dC5ik2@G2*u$cT)a4S831^l<@2KMQGjDg2ZCoFJfb3haliLo5 z7ochqas~O~1+^TQ*bt#}s3j*16h$4#>1!yOE)SuvvjgraG)j;@J#Lq=Wze~(wkRsL z)|Y|Y1VWgAO*#!Q0|JG6QxvEtnXc%Z0gup<$PL}_W35u{N( zRIuz)VU*Xfx^0n>iNHEcb)L3ToM~T9T#D$_rov-0LOq27%8!`fY`fG@J6T1hz&`|# zPYi0HX`245Ip*6kU)IxW^tWneR?KEu-_GMQZ;S*%)+#*v<*Xr}P(ZqzJ!uWm1x_!?i4>Y%uIvk7rJc3_O7iR`=f38JDGz z@3sIl3fn(;NzftiqG{tOpjH`@4YU*@7g;rD75>Bd*f+$|c3R)5q<#s-FX^nrvl*{H zByvIbq!^4JAc;s@8E|T8mTgyBRRtP`5)sUy0)_)RJ^+h#_6KOh8e%R$R2%6!#U!A2 z<%Nzv!Lk}1r?w)B(vThxP-^smZI6LrVSe|+rl)!h7Y*s?1Z?~;B-b3stKBw2%5%v#!XAbwqi`GwPzup%IDH68PQFEbON)U*;A zsw4L#0u?x-Q4CZudHztdko0k0)URQ_BjE%08vRdnIHN8oU!>0nrZOtDZosmd_F-u{ zf9VJc2-JEj!OF^R*NiH#kg|h21*cL7>6IJ?%k#oScZCb6ZnCJ5Dqs(D7d>CJf=%+` zUTC){ZesagLG1t@0?jd7s4q%6-}UR+1=a<-zsX!OU;`_ptJtxJm0ns__AVL{AswGT ze;!otx3q_Dy>e{umJhU?0*joT3ik6OPJ6Tv=UEd1dCICwr1hus0Uwzv^Qljo5ZS^Q$E`k+7%zORjXpDRW z{FRfqbkaWkP|ETnhyg0Nl#EeX5Z^w?mfocbMI(Hc*&s95r9Dcw|AN_W{muUaLHc-j z8J~lNto*|BcZJRXp4#d8yq;UKr>5)pvhv?LNabW<`d3Et)t>wtz7fFXwZJ<4{hB!J zz2e_5S4jMS{j$J)ut#OkDJ`RKk-c2LRsH|^5g|TBs71`t5Q9D04cudbO&%(h-dGhS zV|Vde@@Bxpt>`t!MsH3%LOG)}a&B~a2$|xB1;mhD1aj>CNxML z0)4oQbRm=a73c|(x(<9DF(I_NPM=c*h|)u(_Y&4rC-*9T?`Pi?>ji!h{{mK#&U+V` zxVShH=7`v(pLcy3X)?tn7vlm+2R_)CM<}vb>2EdtcemJ(Nxb!ut%;iuFxd#dPBa;W z>=TKaoK&|MxitYEPz~^H->wB8ibIGWI|04#tsHYyW)2|O92#ur^u%6## zDcdlF`hXU@YW%S?IoE`7wHcZ!K3hzbdl9(5&B$~bh7I&9fWMfB{NAZ2GNd?UmMW=kL%KSeZwQnc(& zOiT?r+RZ;bT80N^3?LKgN`N>*GWi)oAumd5H@&~RFp@&?M&kn!I)!^{qAQ8x9y%>V z3PYfA7%I6@PmF=8pdPDJ=U&gnRYS;B5S*kBLD&|FcRw)x6$MR%8yNq{hRI+2LsU$0 zXdqRl5}HbWue3;=K^0}hsEYu)ibS78fvAvTV>=Ko#jjQ(K!PW;Ty z&L(I8WJ18bdmBKF2VO}10KDP1Z28J|fL5=SYcKwI^ZY_SN+zv07wh!8M!u&mhc*rJ z!Uun0jkz_*DDcwL0Xbutld&$iC0(ec9zz2rgrj%_dIyOA1ZOvaPP5kO%M|=F@rXiA z$DqNSoE=Uh0VRsdpZ-K(Tq@vnfwLJy3MID#1G^!UrRQd(rx&9&1zUTvXpIP=!I5f< z(AHjplOq}n5(`l<9mkDGWCfPPkeAx9NoKNK1y)lQ#3;I(h+c-?cGBook1G4nS)^)2 zvaG}`Xt_P0XF?m$_KVI1tu&JZsKM1yLC?bELCiMLUVAZf21fPU$R0$_a+@Dl|2H7y zrJ_1HREVcCLZZNZ=(5Cc3mOTH4}a?_#JyV(-m!!j_9B$%;5G)mHorJG8p=v^ zG{lx{t|vGZ2|?RGAQCXB{0@j6UJr zxpQEd+25_lJJH^ldq>n^L=R+!#<64T5O^QsL6F%`0FgiVV!@Yu#s|P97n`_9bX%Z5 zl+M2t|N8_ZXOQ$TSErfPauF2=aRFs~FC_7&xGNT|xs9REdm>PKpxdIfRiClo@8yK} z#2y)STf1^OTm%5w7aF-(Sv63XQsGXQG&F>vRwGgpbP_aJGhnt4lH^)&0d;8?4q+?_ zo;MZo%!BX3*e5lBaYrC9Jn#^HH>+W+=T4MoD-B^n$o*A+2>!<9HuE#K8+YkxKnWw& zJTw7Z#(hu^z|zF(1v!SEQ}#Y$9ENTc0iB_7$_Sh?1^E%LIM_>K3_uZ52KP|~LN^-T zdR+5c|7DYJY5l${Fqs44s0_xk4+uL4amT4(Y9#tcy*0KM$<)MufCM839gu-ru?meW zP5{=k2)>Q*@Kce=A^_XSxT!WB%A^ejrfN{Pot#bJ*J^>vJOTwa5tlc=5ByT3iwQ;T zUK|M%7s`L6Codyzh>v()4meh=yLleQi}vY z4(TO;ZLRWi{(o2uk z`~(y_5hBpenh&BGVY0DtGu8I(i9(-QP=%6ef*6C4VgNuSvSYMB4m$Qmm|@ouZ60w3 z(TR4=nl3~(vZ0Zv1{zY1A^}d$-KA7)zP`0)(`g{m|H$4F@MDoOd_BrlNDx25}Bw13JXL zg6EW#lXI3+P*RdvL_`E}H#vv}B_)(PQg6wA17V1AuOiIe7BwjuHYLjTGO0iEFbw$8 z`+$CuYXqP`0A-MoL`lZ{+qV;AC>kd&*(U?*7Zn#{cV)8|-j6uE4Rsgf4yDbv)hcBfcqeQCiS&?Ew^ox$pH3-5<#^*46f|M9AsbMM2 zPUJjz`0(K2!-wC0IC$_NFH{=?qmr^RXo#UAspz$y9BzAzB#$ojS*A*y2<8a6_&uFQ zl)RGP2r~j~A!Hf@5R`64n2;{hy^5p&lo)YZGS)d&P9*E%-z3pVU+B9=IRszY4h-eWg@W?m>GTRHn@Whvq z-riev7rO!L_%MvDt%gN>V+gXNB5CP|d37FrUKqW$%OIHN-=0Hy<**W1V z_JQblh~lI#0>5nj&*6SwzafBK2b3W72mGDW&(jBE(an6jxW*Sx~a+ z7VK!u3T=S*>M3gIY_3VoVGNv#2h0p@$mALY|I&f)Wd%)5a);(#&MKl9*ZmQ|B3KF| zfN%-|TcpTj6i_$$;#v`@v^aiT0`vg6Nx0$};LI5u#t9q!Urt0;jQQ@OTJ$6VWf76* zNGC6%V%>AC?Qqyx55D>PVX70V-ZxiOH8n+I<23!J?uIx&{vQzk|1x;|z4-2kjc1wH z3zXNN;89rnO5gKmlFh=-l3g)gCwkhmcV+yw$8hZGa~&rmYs~3 z{@!%&T9<51LrOt!51+x>?fnKREp{)v08JW6<(-n>MKfPh(Kc>_$Pf zWVRXglsTD}inG0pyl_!GLMSyEJL92sD%S0Uur_4-_a*OayH=8&uu)KH60&$jrVcik zb{PO)#qGc6ck<-P&;~e3&t|rL%yu~v71ew|So^NzbZ0!vctQ6-%+sUbSWit`mPnW= zY35t=4$LVBt7ce*yDO{Rae_59HM3VH-Jxz^93bJX zGj*n>zAa5}MrS$>_nw(a+*nr-!Ha#5RrjG}vOxnLASO`uwEykf)tR{%umqoRS#@>w z-=MX7H;b8BpG(Cd)J<+DP;PfC!dQ6lZ?r)PYi&K+H0qdmt$ao@_k_E2)&{p3>denR zHgnh4|B79`-@o-#jM|g+piB?m-(h=tt_Ox20+hkBnA#_ULgI2BN_ENJcj)hc!PzTb z8!^8KS!(ivY7tHoNv9@rJ*~rh%SSK#HhQop`L!Y2n5N56f)54(#EPVnlMW253L}vf zLwQbsElDzF5jb%Z^A$dZiCEhULAXsKJFPh=23+rn)e*y-aR)B{lv)>cu0wfs6({xS zB8%vUWHHKjlZsOySzbQQ=+qcDT}+R7%z)@9r?f-Sw+KQTl&cULB&6u$#Z~(QR8sGL zGG;ybGIIQ;56xB{9~ySb7Mt)Q&)8dcJ!5%PO55bQi&G*RN4;1+cld}{L`G5$bDwe; z2yA0J9*i&C9vpLD9;d}E8rjiwYAiO`A~KfpTURN+HKf;E&`48%Lc*W+rL0QqwD=FV zCc32FA5u!Bf^d39Dx(R}9s07ySCuWUs_iSx6j-6Ta+Uh`Oism!D6t+2f%D-Y**^00 z92|u&cZ45aw;>|+<#h#CX&R2`j&knTCe-nKO_E2*2MWxSqdMt0-e2)#eWx*xjF|D+ zo`++-Zvy)n6B&xsjkm~DWH^yjuMuZTj8}ACsE~k2RwC4qsaxo^zQ6O-&W1%yhJ<&P zhKMo{sK;yMM&%1EdaNR}k4oA>nV!^Xzt^nEshVfp*wy}XuZy0% z>!0^QDb~X5CQ)mia54)nt83WuXQ$(-s_*)7J6BZS^xoRhOgm%4yh4*Yj5nkDG>JuY z{I@k6RU5fm1G@&^OV?WZO*V&0zZwZx2uZPw*1quzfHxH_(xhJjv=j(A6BrP)r}81X z!*zwanhf*-K%S&Zf8d<@yNP>;{$ptgGa3owQdI z$6PJ!-B41Y0xOe_TnH{)HlN*YGQG!n^!9_jxrXHsMX|`QBq&_ah{I#U0LT>U+bIh z{bA+cCc?meOTHkG?me+J!J}L`hyo565N4jk8SjzK2{(_7rC82faxf*g-n+A8>GYV) z>!o$K*}m0&OVP_tL#adWQ5m+C(86+Z3a{lSt4f5s1cle~7N=*hh|s8*nlZCH<{kTE z#8CQdEQ)|3z@fdD`Q(*{7_CbkBYBm#;Vz{rcP0O=Ez@UYVH9s3f5r+pdxG>) z{tIb--wo(WTxXe2P;cMYKcU_C013dlFC0|1mzT=>66A-JXtPon*=e?+zr)1u0k=%g zX#&Se(vFkh_b(*T(FU)}QHdOVkwQni8FF2^r35Q|_~8VLCQK-WzDh6+kvKr&k~#tn zC}Y#p?(6#fS%4IEGlnEQx8JTvbuA5?o;6&&y7T0YqgQ{~L(!=2t{6pUOVrCz;;PBj zJah(>tgEZzUxSM$5JB1B%}Sqh#3S2T@T~pdluE&hT&BhS9TMT?EQ8A`eqr z?sc_I<=7*UK^~s$=~aS#2KNgcZ7+jZFg*lVJvj&#n!Az8=QM00LS28Rb~Ao{YK)F- z*VOEy1W4i9WiUZDD!NKWRzv8$Fc^uaf)W>+-0R%uO0It-F>OVgC(h##=1~24<3#T~ z{gNY5P*vTatorK%Iu>!ow<7w@Uf1m}+x_}!3m4Fxm-#6v)_?OJ)DNgD%>#OHVEAM5 zfn_X*(fUoxkDnIjTBAE4X7lmPFX_JHp53wE+OKvyyl|VQ&E2hF{G(U_Chi0n_?ZQ@ zhhnDkBOvP%5fx57?J{vzdQiY!Ls5C{cA4OWVTvrz3}J$~#u0fNt75XpK@i#aNnN-I z0UG3^w1o#_EtoKU;qSz}Oj$C96vj<7RO)aF?%e4Qb2aH)qm&tUqoNMaPJFvfPraJ4 z;VM6Dj`?rYJiCkjoX=rgg9L5WJkvHX4JsN;LFdRw%u8#O3Rr!*ikp9pj{_EW-ss*r zU1}jEVf<(A*T`qD`loj9Wkj@-cbq>TCLAmOu-X))ie`!bxBUM66n|zf-u;Cpp5>K> z?|QU!yl%|YEX3)r@x6VEW^2a)e^WQ5xb;?!;|jSWJz#w{@z^uzmm`shyP2p0doJ}= zCeAW?5xN^*f7xqQ;RB>uCQ!{dDAx4U%QGwx1t2PRmMcB`&kGKfVR`nIW$M{?y{MBz8+d7k(XWG?5*6;q~FKMx=jVR}mW8WF{?%N=oh z1@zf~KLysmI#2}e__OL~6K97y_O`EJpx9%wI$u@Ov6 zmziDUX%`z4|H{JM2esI_c+Bl(jb41830gSJ!hSifB$6~8fYm1r_e69@l?zwN-KPuS z-P#c!LmMFFCxU1DHPRA^-Z@zC_n}6x40%_+#5yeQPpxKLdXJ;?iq5mT8iqfCHy+-W ztfrudD^J(c28Z9b8byZCc(ru{4tKA9cwtr4slrX5hYSr3gDfNWn7Oju0#S?d@;r1t zM&8{axpp>HtbR7b;;IJKj;?~vK7mF>^|Uqvcht6#Sg#?)7Bc25Cda}v`!@K1C3oO+ zBjYN~{i1R#g(p+Ro)3E+a2v)CzA3#sqDr@;f%n)O>G0~!G~Q8MH_S$<7D~NpyVxQq z@W1h*YSGr6FE!PV7_4(T>Ex(ytb}bQQVoj?mCAe$6A%Xy{UH@ z6)B!}fn&tv+kO0Gnvk@#k;b9IUA<>&Tsfk*81kNcu}myPbn=L_ZF^y_07;QFK?L0e z^F9&lI>4}UE8m9;htHS$-CIK+MQtBj^)u6idVVH$)x#I$!kC39sOtp>#{t3Ki1CHr z8XB5a*|ASH<_CIpp!=>7F&Wk?gcEz#{xAG75coZ@A zReZ)$&_#T6jPvG8^0Vy|6fq_8IM2RrsjHL1!GTpJo3`#U6?);gmCb)+ZC-xf@?80K zJ5Tw%6 z4ka1y-@m_uP&piUc+CWfU*Sd@uTte8KGSZZ`v7b##`Z&GHeGkOD#U~2pi>xs50@sP zr!GWxs4@43@1R$ctI}sF7|~oh_2tI)hZ~kEPBzzY_N6MlkJD>DRn@Y}>vD+m$4dBG zKq1j%u(k7#B~w_WkTUuX9WOEzB{P00#p(s|2>5zRF21qK=A~FRYr@)IB6s3{;^(*y zR8J7>(H>ekpaY%@BGqvUk5%&F1BUha1qTOzO$DyNML$KMr(O0AW91>QgWYHy&;k3V zU4}TAO%aPnyv|xPNGRE7OeKg(sP#6u`t^)2eb1SkdG>K~v@5o8d&J>uTX@b(SnTrk z)meuZ(zHC!$idIR@MsXMdUCnit34s>Z>I<$ZA#GWrkr&g?JRPh*U z;){qdnTqHOR(Z^`j#}b?&im1ZLAMYz27k2g)R1myp0@8Zrt{hI{nqn1Ho99L=9}6o zqmK;hrtfIZy8p&KFR(wdR;)Vv+jpreGvB{-zx82=*Ks!1^#7`qip_BSp4(@Hozt`4 zhUqGN^lKHCu1d`3^^Xmz8-7|hcD=nWvLpKR7Ov3}%GQY&p)|3ad%MTrjn0-&mzZg; zU;4Bz%XSxsLul%QZY2YcGHV(Gtd7Rh;K6`R4HJ)VghAJ@g?eY@nv zy-07mz#yJ>{_`cr_ORF2bpQJcq5-XM%zi^(UL)~-$~o=@{lfvC*5X%-Ps-55Q&_0J zFKJWEAK~0Zy_BbvW8@trf6=dRx{H~?>y4${j+uvX*Vnv}oJyYFr?yege$)Ke&aRn- z{G!;A!8{kT{o_wlt|7-Xz1XAhnCO=sJ3bhF>bx;f-EJv-)`jTQCn^PP zdnoQSje5k1kmdTkA?)ftUoG?;$(=2gbG_4|UlU4@}$1IJ=aT{j*OsUnZ*Sl%A#xF;_&_w*t_AeGUH1?!#n4oJvZHHi5t?k&Y zW~{!N@`*|P21UGA3MOY4qTK%c3hLUrJt#3Z_li&7pM{rjAD2a4`yt@^p!I#R32(>) zYaxf%jaxWwJ)9UZ+iudcx#Xs2T>EqH>^;h^r`mdiNc_$@f`=&6e$KH&226zmhsfN( z^(-- zCn*ykOst6i&@u3D8#Vj#^X{(Nm%4cjIW3w8Dtz6_Ex3)vH!m=*WMMz6eoN)p zS%&usoUyT?%Npjn)Hvv0D&7)up|&e2eP69h9^my4KiX)0eTRhQW46UO^*W6#v<#n% z2`KBDA6cPEInW>6?>w&l<$`^z=waYaZUFb;6d(Zw3AZ$%#K& zOOowrZmvAPQj(4I;R_e|HwN(c>l7N^dH3#Jd>7Tsg4>xhXMEM394MQ(p7$mrgNbg~ zDDf`W#Y>lXnfyLslKR!;(o!`#I=Z{0tVoj}Nt+6nHaF@V&hBm}teNy+o z#X$GFK`ef%<<-^v5)yW0+i!Y>N3sX54AjI7ts>5t(D2`KXJX!mCBIDCoc7b)Qz<)Q z##d!ZS|q>i==t+Jnu&J7#&0g0o0AFs-z_rYjd$aYn1DZQOj zki~l!lGn)3J-2;1#&B7T%}c9K>p2O)EB3uZMx9G0W^3$>aoIS$lj=fjU2jGu&F5bY zD?OOLo(HZ}Z`bMiSxm<3u#rBoQBXl4&)O(k@6LneU(asY=&iF_+|I#q;E$F_+3#_K z*RK{m-}H@oC5_$)>B6;zRX(_@tn8e8l9?$=bNj9^L4NO>Q#uv?s=S;H;X(l=chhwC zel*(uy$6lFm3fR(bq*T6ef#!&s?G@}97~~}75k_K&_tENF+krPgtzwkAXQne z%8yqkBO~2PjDr=b-N#oW9Q z(D6K{J<*{koYplqokYH?kFlXR#%kmTPvZLvr{Z*_f&Sa#GP5e_=XE02339*!J~@~af*ok#m9 z&7IK%)bK6{3f6wl=Hc?XwNr!dozl{;LmgkZ*$qToHpaYTpKsMaN+G%E$;Q!GsuZCL zpef?H_^R#q>}Qdib{WIZQm+ZfkFEKhmF8eau~_V-WIXn8VYSKq_h?;&b(Af0+^SQ} ziq4 ziGcr*<##B*?@)1hG;Ez@#;u_PV#^FaGPajyi@sicCU5N5xv^j+^XFbz6B_=MB}T#O)pJB@zA#RqB)jH81bn6PO&X%35JF zGWi`lemvyr(8GspL)YZuj_u%2by4KDv{blgm9+*d`=&CFi=x4V({9Nk4;S$~E?>2{ zj9VHtTb>9QALX!V(yLbtVU^z1riXTFIw$-4 z(^d6$U-~odn7dUwjWVR*v#qMIAQvwp0Uyg91BtXdDp2ec~kBEPj)Pd+`Q8RYK)O*TfskaWD*B zbN*-~6J2xvLt4`?=lF?`u&piL{M$DjGTxn_vqJr{L|v{Y*QO0jK1bu6e(takQS!`5 zz1!@dU+{L8eLnG=X3>Leb*HyW&05DbE-vXleSGK6i`bkJqXUi3l_ug(g|v63h;c9^ z3W+3sJ|M|yx4wrABfUW`3*0>U>!6;G zH?>>W?&aHkdxWITJ0^6ILQ%<$8jXMFPL zSjIbt3DO+f7)*%~|tO@79v~m&r4mz(5_l1=iICjvy${Bg55Oh{ow*pqKpt7z5+w$%U3JP|i!>PGP zaS+U!5&Q=^Z@K4MuUGT(3YbY1KjJB!xG5PXwzaU0`fbm#bQYIt1%oNk0h_Gh1JdUc z>H<0@r`zA_zU~$_&Y(Evuhx%x-)y}b7FGsMrlP7jJ+H{2jGP4uu!F`h3Wuxm7UER} z^<53WdUgl+{*t>#TMw6oA*(z`+GK&LgsFh!SCvznCBGR3-Mq$G8M4yMfHps3RWYN~ zwQG*QZ5=O4S?IP6hGD1krinC)tf3uuW0jPYMBWz?1zicFd>BQvkr|Jn__sZ8(r#r67(ysK1f_-9s%ty%tR<9_>PCpKZ zW?Man7W-VdM2LAEeEn6wS@dbeV8BJLdMYNAp3!$-u*VF2>6vz~?D0}|a|??h9k=l> zT1Us>f*MEj@rKna$UA;!i3wevtMA#9pw5SvUtxklo_fO{7-Hu!aX>9@_hl0BzY*|(KWiTfTCeW0z>YvC6>X#Qw66; zgIJKlln$o%lcA@<#`#k}F6-HUJ=N?w-EvY}oAjZ=(pqD%II#)8lQr>C(24TG3b-)Q zO)7|CP)ab##XWxPi4jV#${OCmONbU8<$e2>5idXNO(TvYX_dQ*2Y*jsG$*F~6rpje zh^+Uf;Sr`j(s26xxt|Z$b>B#02*(YxONlv81u+r+(C8$8zK zpT2zgvcA$P)4}C&K3-WsUhc)cIJSy|K|R>m0QU)GCWA*;kX#VP8N;_}BO6Vn^HLjG zjS6N#9;?hqID4oxF}sNLY5)Fdb{v}>7LF|R11>{v^G-6F278>mxy%kPX_-)3np7ek z45XhAeaoYg-{8y;*tzrZvuD0-^SygipVV>n@bE?>q;k3ar0tcTk!v2Ihw`318PqoU zz3ZHrT!ntA$+i%Qb%$w<&3rUiF9~khx*=^9D~-kt+w>Qc>Bnu+OMYTS?F<5&0;??VxSXSIV$ zD)MF1=;t3lJ~n6DWw(2-VSQ_P>C#c-9KBaTeNAEVLx=H_7jn;GM=2Tn%@j~lUR&Gt zn~|CfBVyfsi5akZ1$k2=dAHZe)2Fp`bXFJ8ZjUM;Z{&lnP=$|mU>k%Lu@6K2jZkQD zxc;gmyP1=QWqqT9eoAmxaIAk*^fJ6MN=m9pfBf{bU-!3G|Gd#|No}xUCU2dE*N}_G zsBBVFfPm7Y`&ZTSe+wnt7QAg#RO`OVd~;rG4)RdBzDbJCk2?_&jpNUq=4M7}mS4+p z^%?xrH7*^Z!T8Y3Qo?=FWny9?3n!_?HJ1YunYyd1!gPxRrtN#hoPik??}Ur8tC1n! zdd|adIfF9~@iDFN+J_3_MnO$tpC+0Xl@|JsM!`LTsCx@tb`LRs!6Nw8f$qIw4<1yM zghe&j4*mX9URBQ^FvoGP;^#fli>swSZ(;Mk#r7=a=J!`-7WmWN=D6G668hQdt64sx#R3YkixMzDXkaS>&M=nC)n>TMnA#f6n6+Y~y zr>snVs*dQQm-+ogOQt{mo;1Gk?lwh|s9*+E_^7UW&8jtbdv>Qk_vo)#)Sa4TFJHd= zU?j%I#&&nH^~jMU--oAmxla$7Cu{I2%X1x-)wZ*f*mlo6IN)_t*%jI7mW_uTwrd+3 zZ)Na#GP%KY`!-%3mm{C*>3`dQh~CAtS(mRWl(Y1bxp|zJ5_i*4tF43Ht6qPz;Gg=m z_Rai^X{UmDXV$soTeoh-v$vOajR&EOQhOp0z(VJJ(aK8mKr%+--!GY%brA^o+T0x2 zHaaSK+4iUt1?QFBtuT??z56)ih^vIgjBeacN9*nFP5QcgxZT1br-f+nIS!?k$+9tB z%dDabG^ioQDLi>H%cj?~>+{yc&kb_$O}%9{-LIFvc{ulOUa2Z?UC8OQ$8{G0 zuu*N7pz0R5%|gF&`eQEO^G72{w!acwAK#&}X|Zo0Y1I~Qk}*!zA<>WQ4Ch}z&^*yO zJ?GT_G|Um-vRwH?X_e%SMR)zzlJ&>s`s+A(TOi_OF+2bfnB9l=1UXojJJpr`tjGM! zsa;A>=eqA5mF^0Zcqgw2N`OK3=N2-87eJqk`b9`_DceoF&oGYJJGH>cUPJ7$__)+Y z3nDC6?#f9nYvAWS=Q_4%uyyj@Eqh_YIjGqGdv1Z5g=M(&UTep?+a3+eE!~UM zkFlNtf_!*ktH1^Cn;^Inlkbo*K6pt}-K0QQ>a)7(M_<>ZhL49!tZkM_-YINc6)qNS z{iTR!Cbq5c7E5Vp$mzD_#SRK{mtpopqTB^$gY;Xt&CkSlQgNm?FvtzPjyI<9+V}C} zN7-vy2h}cL7DRP|nL)DsI>N%jl2TGvKJ8n@&so_u-aa`idoALi8oYoX>1aXxoFNUX z2LuEKjbWcY$CdxnGyO(heB)!^^7rk%kt0Q;lXhjCOJBv_&tK7XPvn1Yn#v|8!_455 zEdN?(3#-SUol!^Lh8Hy*Vb7FnAIRx=J-Rt(ue`0?eYelt5u|DEm!GStxfkdGXV*Hx zg=o)T{OOI~J9s46=Y`uXr9zb?zwNz#D|NZ5TmZ|f+~xX?t3%zWKu1WpuTkMnpQrcknAMyo+1hyxrT6UmM~hogmPd9e*slv7 zp2;1Jrq9o11hrlrHuh<4`}5%(dBS>M4%42L2 zRMbN2w#Vi0GYo6WGP+$$9Di54w7=qP?UY*(m?N zD^}LoZn^D7#7#M~uvE{&EiZjI{AW+Qe;9Ar{`!@HrqRd|)r9DM-SKMz&+%N}!WGP( zdScAYmqHLGBb=w{SXx@HQcX@sKR@!H7r;h3Douwx&*uhfXb~Z$1W$8iIbWJva3cc; zQN=Xd)ecimedo@dvYbA}=Mi79_YRc3N=hm=O-Jnwj2Ei>>WmcKnIg{ezmW5TmEjIEKU@NKnLiKy?%_}SKzP`4!0OI8N zix)*E;)Mso?&?a0E{k2{oGV-Mco2Jhcb9lkHcd{IK#0aM1B2MR)7l`fkCnns+<`#fNt_rUlUY62u2rXZ_iYKE`sojQf|WC*w0filgbN6Y?;;W8Wy|HbgMGcW&( z;X)pdAM+AY*B0dhI#CPyuWsWM>s7qn7XqS<3rjM1?$tE+t_|81=B)(-`0)EJisX9Uk-amdE1S1bF z_syI5A+;t-jANCu(5X+wjidEeX5O?3cQ+xy=a2=q(A2T~DGiO1MDw}jxGL4D4H4O; zQ$Zo3C#`SvuKXT-G(3Hx{hd;Q%xM)NI_t&Fy)7&3S#sQ7QUc5I^!?b>C)q?<()<|90q9=Q0XtPa|mZ-`7I*;-9vBl17u5YKXfi3Z%eSI}{MjS4!B9e`bG9R`5 zgHJkZaz2mQ78qtN?voxq@mlA6-Q?IO3*!U|E2u<>DAo8qI+nn%-SkxHG-vWkhi+1}*W?bc#+bhme} zqaBtle>To%<>vXWIEW^aQ`?1Z$#r+GJmW)l=OteJb+?Df@aT#YPai$3!j?-%qQerwcS|n_i#aa8&8{c7&G9)@#eXy=h#- zpALm3OO>;)&~<9REdFQPn?Hdey`IT>ujL#Tubat!Rj)Q|r#W5NBvNQLTHxO5{gk`t z%jfp{YYKZt(kscMUTAYWuJQWJ%lRQQr7oOCALd#D_>y;Mxc&JYJMl?{(Y8`JlS=gJ z&tveFmRM%CeB&=gZysrHl2h0iTqdwX)QZV%uBnZQ!3W?Fz5k(yc4glLgp7LeBF~zx zU#yIy7`=Um<+&13c46oPO=eRy%5*t}rT@j+n?Q5jzTKl=B^qQXm05-~n=_QDl0>CZ zB$2r?m#Iueq|8br)T7csGS73qhzMmK5|T_I^K|yD=lP#^t#j6T*IDa)*ZZ#ZdrDuQ z;l8i?y7slNy>(5lRSU%eIhNyLLeC4naWIqsc>FCre||S*!-fsS@4MBel$!!>1^M{^~Ib0BTeCzJ!$tUKkm7=D$fMRwt&DI+tI==pE|w{nad3KQmYsd5<*>R zd3Q^$UbD5*bG_S2|CGFJ9z3xotHDj`oVZMz>^3q=nv$B@Ier61BPO4ak{o=E6~tKA&_e1WzF znN=au(?}=#9i3;j2K9!2{#d*#;Quryhbv*SCHG51yv|_|BDZYW!W|Hf=VEhKHLzXW zNR=hoRIm6hOWUI2{M?wxNI$3BYyR7Rgp*6cB2P#bO|AFc!n8++uQ9E^p_jp(w~dl6 z$JixwaGQSRnT*NRQ={`yB_zi5QL!R`P#a<1_`>y?Ly$;hG|3m%kFfDJGWM2Qh8frP@o-HJb7qjdcpy*THM(I{pHIt+RZ z1{Z@f*Vs1|tS(G^RI}%El}{OWQIE|{)!xroT*$s`{>Qo{eo}n6hTd9+OSj6e#30hY z<-TQ0wSDvYeG#&$TboUFwrehyG;g`TfsXZ70((fq!J-BO))lt&ws5fRzN zy$%f+6DG!^PkMxc6k#-X zn7d?V{Dm*4gX*Jem@V%=UW%ZHHHFm@QWcYz#}n~M1!zZYBI?g0$TkL#=dtUZJ-Y$* zea3}%&kY|wdQ=AlqOR#!NFh%%t^oBMpb`AV!-p&gJLf|d$F7WLyP+xFAYXk^Rg_Kvid;XBBZES5H8sDm)ca~~ZZ^Ao`N$FygU&gM&F6-I zL?G+;#Hp!=8CAPs~bYS$a$*M`-1Cq z&yf-^41nrgL&a|=7pf{qKqA-te8bQK8cpU>DEmYS^HW=!9dbpgI~0TR^jn5hzL+E< z;yO4EO$_&;9L3~nL(Lyab_7kVe$0CYUXR1Z{AQn>%{n^a*)k|3A`%b>Vuc|vxRWq@ z4gLpo15;?BZQrg2h6{ulJkSf=yRiU*JN9oij?wF_cZ}G)QNU8l(1+EgaVRI01q3`im=t7Q%jmbxozv8O z`8=Z)r8__>dhY8dY7-IaNn$J?@;|b+ex-Sb0Mw9?^Zy*aUD`z$pj_7~#X#CXj~|p! zKIWBJU^Dx2U7@!w`R2`=Z9CO1cTZyQZ`=0md;$V7h8b;^C^EG2oTqt8o*;Vaxr}f4 z`t>WuBZwGx?4rD-+tYCBB|W^1*XqCkh{M zQB~s)dWz$1saX)c(b8&`XB8ztZnR7xze*J2Q$PtH1O1N%n!oO6vjB}gX5igNUiYC? zYU|6?oBO_r^jl6Jmwll=hgkC){Cx>%=C)N?Kt&p_hf%gWklQsY-6a69a$$UWdsa)w zVL^6q!6hN$)OlBcI+FZW7}BTHbK?n%1;b-wAr->ViI~>NJTy_}aAT`rr7_i#p-}2+ zO`}?EIOAn@YINJ~o9~eWMWn)O2BsMldKohDwon zNn>?R+-ykFi?z`9QERI80^wp{y4GvhtmCBVT%#DX`5mRJ4ce58 z@u0J78=d=SO%>fl2sE*oZ*tDIfpWL2qSmwHtZu4go-yd`_fq_46|6zDP{5<27 zD64Q5Ml?c52P9h@1YXHS>Oomuj7v=ohX^Eno?}%|o72k^^bfD|ah> z&5NVi%(}VLg6^8EGCxX~-8^NLbmuf1B6+zki@LrMqwG)vUZP?HKH@GtmojDrPmM*! z!*0AU=P09JC?`-+x;-V;&|S7Wx6F4IK3P^)B^|m?S>W4i@6eYP@|%);wb$-Db-}>* zw6Ld?V&~aKz9dJMcOU(Jx9jC@81WlRP zzVtn+=Y&E|ik6i%Yo0LkvR?W4m*4H%pDsz-N?LJp>qYn}c8LiPR^ZTAYpU_@>1_A} zJ)3E9U0qBqNHi_@uzqIT7U%?kk+7E%pqpWNnpDSx9X#PjzZmBOzi_~{9!~5lCU)X$PQY1M_ya(h| z9XM^MM@3am=bluWGGaONu+T7_O-D7#MwVgMuLgBsI6;y94F`%KO9b)-nis&0XC)rG zV&G%{kt3^OpV+Fo#ge6TO)6U~D`+L%s?jQ|B=2D!@MEC^XtL}ww^6ow@Vrk5}`ck@s zTUX0^V`JkFT{dy`-EJ=El(63~x!sf#qRV_^8&5zoJhVZVsFelR3xt_j!E9h4TL{=?l04m_ z8j9RflIY#_;nf#r+e3ENx2jkh;;C|wQV|cRQCRD)@}lQ z<6y;c4`Pd>9N3LsjK^GieP(8E;J22PlpHBlJ0ynr;ph9vX8Ch_FyhtuT^qrfR8!cH z4vvn1wp7Hi#EH$CI|z&A6iS4Ehr8fFl%%zh zg{hOp%?bK7V_`d`#r{P0b}A+mPrfYf?xQB%mH)iZA#!$6}f{^V{;9#g$%LUuh}Rz0Ht8^CY6Tp!VN** zui^`g`aA0*=`|#&(+x^Z99o&Qnyx0hBBti_eoyC@Evq#2zg^?Kzx)!ll2D+VcK`bo zCFWwGd#4^heN7Y6;1S=nX19}m>a9;TFZc{M2{1}gwa+P?WsjR_4SRhebJb*)$fdSN zRHv%zF;7KJmih8nNxB2_4zgT=k@#^ti(`Q785Ps$x%p4FYq z%0)t}Onx+?KURi0^7}@ZS6(F5F*&@+CA`4k|M0U_Fr;Zh-35&gN5~V+& z)jUTX^OrO{?9C_8Ior$8YjI&!|G9$4BG3L|t=}z8SMcmG=e|Q+QtVvv11-SXl6VPt z$mn>`ixqnDd)lJ9#%E*}re0^Xu~WbbH%#tJI1%J(D8(s3n-;x=+0T5Zu<~XODgR== zyQQ01i&=jgj-)E-zOc!&Xi2&|(ZeE8%HEa2>k+##Z;le`!mvjtUw7H1k32zf(*3Iek)+c;-~_*k1qKi@f35;qzfZcLxH$n)s#+@&p{>TgNwac{9&F zjyoRKjbWddS2yx~H)=sdsSnFk!7IP%Xk`0aWB{dDV2g_3Z2W=4*ym8Y52HOjMrgvk9)Fj^4FidEl0nsd$P= z$nQOz>TKfIo@IPsi`8ANBVCXb;NvpRlJ;Zo)SIepqFNRzF;trnzoG+P_mD9qxsk_a zBt1X9m{(a7A|!6!Se5RB;%@Ld7X#fY@8Sm!A8whSzk2m5*o{l|-r2KfJ8d)n)_Y)x zqw2&-_gpZ+OcGG^X!MZg*|V3>b|GBIH}Bq2JFWFog%U>PiHdG`__3WMEOURh5_l68_VO~l5YN>^Qw%za~s@$Bq=iTQF*CWoIKD{0%qN-r=W&2>69xJFh>*og3sM^Gwiz47NX0(-CJ?b5CEUT&#l9!(ro({*vjj3suwM?*o zk9{_VevTaBD;%^BiH!7fI^42h$O~Y_QonnfpPwJV{MC1U-^ktW(}N6(cG-3xv;K|m;bOKJ*iz9I=W#t{wvja zw9hSLtg2&Rv~|#`vZcBCJ-P~+mnLWDWw`vodcSG8k`VZcSQSdPf03bE$RJe35EEm3f7KkIXO`o zS@MK_rz`EEOJq(tRLCIosJ}(4sp*6kZE4gME~|@cu7(<%&*$p@kxDh}aGtOjnBW%h z@)wEM)@L+xb+2)N9a+b7#MiC3q^wo#C#QY zG8}r|5dJCfA$_>4idbO-L(Mj!giSZMF|aenJi0Bv_DP4fzl3v~*zx(G8Za%-H>NbR zMKm0kRxzBL-EDizJhtLzf~cjquY7GI_cGr$frSOd_oMp`-3{vc_FZrP&{Ku^lQ>`9 z$<;(wM&5Lb?E=N^jXzwl|ETG~nc(L75cXEtz@W7ju4ZeLbav9Ftrfk;D1`x__xt>G zxhhQzx86P3MVx8$v7Rz=9NzP)saE!p-%b!t(QDnj zdpZwshd+C%t$-HmCGlGo$ISJ`ShClQ(z|5O9(@0)k%pgjYQov{e6I!Hr;RZg;9jrx zE=n~0-1u4bA7_E(oasfsM4lN4#G%}X9Qjg2JxgVPYGRN=O2>wE=u{Cp-XmRmcBDTP z!ZvESc+(H2Q<*XQ>p87*_6x2fmNnc7E<>5USS*C=7HI(Wo3}>B#)S4I+>wyoi!+m2 zHXD93q?%sD1d?_It_aDm2@*dF{_u{WzwFB{JDvb~kdJ|#XJ*Q7`9vHqyD3J=oL$+u z2MlX01n3g)j+jcW9(gqqTfQuDv*cHg2E$#^VUGWdG(Y+=QDKa?HgME7{-4QHL=+qP zmE5IJ6#E8PAAqEvd*YU}U}yn_9+v3^*UI4g2OnaM32mftyN`JKNs7r@eo?C~3&*Hp zZ8>@9E3vRL3hXsonHcB%zQvFKpt=C6Qw}+M)9#GCvWrL`L*|nLMPa|>f8co5W!&M0%_IK|j;yu++OLhT`DS>@O6JaX@FQ(Oz7B zy&7Z7$W=AQCCSa164&$;nx`2V2xtdz&A1DFz?ZD7tjwS*UAba_dy6y?0O0T!qV*m3 z1291R-Jr8NUbg`cqKu{@+|pN-&H0#h{RU8ew~4HHyCF_0#@%{Odp`0t$sZ>w4iq`e z3X*RD#gxV!ig8Jh+WuHk!LGQ_GWdun00UWe1lN%U?NrL&!g4XOiO+%AsJEC&n8xjX z;(YhJ(0%xQf0FPlC@RsOnDRcUr&oQKMSw!eJWP4UzIk&GY%@*@I<$C94Z04xrB_iE zfFe~oJn2w*Y6*$oWOBdeG@rz#&$a5vN8M(P18Cie_&0$@K-j_hp`c!Xb`?8_EXVy% ze$q=bXUCu5kh;#0-f|2j9)8zwwL1B>>Ckf8m-7?RmUyd7O;)CY;M!bT^0B&JYKS@o zb3I-5+532)_Q_5P!$%DP>=IrCvjPW*hPVTR%~?C*jLrjCv17u~OVYGR8KVc%@6f*e z`jOkAwWeo;5QFMQ;H8yc+`wz!c!|qCtY*vf?KQ%UeUp7dvbYd@g62QD>R=!AY2bv7 z^mkF<1>=igMSYE~`Mmc_4nRetmJB%%R*R&hAotrBFYctJNda*R@dp>}D46>u$u9&G z5TE^xEz5sTJEOQYklL!4n*+AMUvg>iy%1GFGY|~QZ|>v?=o*{G_zyrAwBv)dz)dr5 zU}N-N1-cet*_*0fJpUgT00bK}_c3PCr*%uoU2B($j*d=kB5>brm}=PTk9AZ<2<^3p z!R!eNrhAvD#qjp)y$X2Kpec`usX(ZkU5~>|8Cs9WVc~2X^+slD`gn9$yGQIM$}uN_nu0NUbT3$J{5Z|vV)EP& zgCao@5$gXP=F`*D+cRH-$Zdd5&i3urXn;zXeSZ3&^1-Xuub)AKqwgQ(T^nQGy%XLt z9FLp98&NY@v5W?jCTa%L^RBlG_0iT+3zj8_XUG4fE72^m zgO>iH?JvZHJ$Coc(y%G{V*XmgrR_-mR5d_*b{`EkO?c==5iqU=Hu|xwq?H{^IUT0Z zH9H@&z$D#3tj_)BF zq57#>Y&M^*NmF!SgH!6wq0CL&JI)tI=I6ey9^E05VANS8-S|H5LFO3GPe(Z}#xZZj zN+fsd%+^?cpA5i^g4^eQdArs0MQ zJZ^LB$M^O*GVWk+?;H8`iz9E!c{`JwH4{ZcetfIKqVx8{yz+^9V>6bnXmgi7jB4LH z?S4`jy|Dl48iyN056>-7p;IX{-MtSxRh*uZI4*B-qjV(Pbiuvk{$krO-T}(Ki9Uu^ z?tBODg~`tnrd@qc=CK#XXDXi zFP|M285(|&^(w&%#Ks)|E}G?ZCv;9DV7m0@PAYr{8XpuH`L*LUpmpPQpcDvGZYc$V zPk-+qlYE9o-egsKueNsh1?O@n?tq)Q3gXG)vx0bJ%eG-fNx!YPuGsBxt$+66Qce^=gcUI z-Ce!yW7&os;marMpIjdLxIeRYqSx?owD``70N!g4q$J}d_rO!mI9Q1 z{x;CfSDdoR`{u5GTI7B2ynUBYgKV!$d&0GX8Qy5~ohM+okgjUb)QFX)YXbfMdy<5Tasb5stA2jr{`kbe-xspyDnU*f29&G?iwKZ zGP~q#p0oCqhIcedHUC6;dTDOm@vBiF0Lt;*Cllw-Y4h_Nq}Ih6YKgk7;tiM!h(8Ef zqwmCr)GvG`L?l$DwzkN;8Myaon+l|+j4SAtF>i8UOxUH%ZQeOE&Ne84xe&6K0KyaByC-1o>uO= z#o>NMP5JiOtB2`>L&oYC5#565kL*UlJWA}kMy7i^LN z6p_xkTms=<&VRHj@)e}G%vv)h+zxyjH)ytnG;`EVj9RU2yZ$N`Z(OF~u8WpU%OU!|J_6Q&8~Z19(r8 zR_#+kUn1*foqqa0dXz}V|?wey>zZw*MvDLipta0m{N$vmhs}0^5 zkGy$8a4f`!HK$%S3E$`TI=+iJsPs$bwO+`izqcb3!FahZKu$RQ&xgS}4u|1po)ZoK z`5a`@s}b(z(&y^~!l7LHyxsoSCk6jh^E9+z{(j4MMdkIZi=mSe^j)7`q>d0&cmc! ze?h%@oJDmtQjNdKfrQ6aFFD~ir>qEEi%7qT48W(t6Iimkoo6~Z` z#wf??c&4FP0I+xO&W*joPm~#U-)lPXbwxv%jm&gZMU~8xqxcWs@TJK%ryvg>hzhskmlgD)ow{}JLtmSUyWy%89TCi z$Zj@g$aUQ^HGcA2@9z0R1bt{e?)2Ebl()$3x`KNiWn$SFWtNhY5&e#d+zJ2Fjga&X zt7ty(t=?*ySLK{nPHV9KjgVynnSmyA!sI7x70Du*rq^z0Z>#4cU#+STi&Y^P8h4rf zx9EAM#w)&_MaPBK1@C4`d3Y%N_OJORZZL6OSew{-ie>6x$+4K(NSPr2SrgbgtsKl$`wv7 z0iV{7KYVE2F?r@sEHNP}N1Xh?Zh?sLKd>B1WBlupp{$%#w%*4R^2R5jyGfawpT`^^ zG0r*l-y#AKeV)L zVM3LYn@fme5Z>QKfd_^u#$e!03VWy{kdlJH?dwne|6YTjVnxWcn-B{={VH(W!wcp} zo*>+e!E*!BIVGq-4C6RuZ3R)O_Fxe3IR>Z5SOTc{-YjW<@3zcPL?cxdg*%swwL7r} zAcioyu%)zzmNm0G?tKi?h#0LvYwSXX^({zyKVG**?F8iJp?qU)W8y2`hT8MDu@#${w_7Pi`l$4&n6|OcI((*-Ndhq&{4e!3*!{mS)J987+xT~d zvn19+1q}j7A1o@e9X^Gz@>T!c(_~NNsQ<5l_Wy?n?h(HnheiZg>IRAb=c-OwP7dR{ z%a+G}xJB+lbs=;-3ghO+I!inLM7j_Q2`l&rx@FeMyVM(z%x1K}XuhC)t__;kNWWo9 zX5S*U^lE~ojf7UiD(e=6q-{E)GUfVRa>&mswLVrZo7;XNLlioQ-I&8kxA^O~>2%Pf zr~si}eOuO67t-YQO_#{*piJUqyJxyD? z4J(srzX?Cz?%ivlZLZ_}*JgC`C$z2#7Po9lBAb38EpGQ(ON)OO@wA3X109TLTF$e! zV3>i$>8SBBen_e`?ZqS*KAB9HFJGp*%Doz2*Iq`v^A>Z^NNq#!S0OGU!`xZz7!3=eH*m5>_yk@$)E-EcJ?mjy-hnDG=<61jWrAnuy+<&OA~O!~=YFL(h2k#x)S+ zLrn5UeSALM(l0i)_uy-F9xHNA;1lfDb6wG@PMZ@#?AXxI75+Xv%v6AN3v-Qb@H!!J zyShwO5Ho0CtK1|%!4Gj1pY8eBbB2((S)~cp1+v9)t8_(8> zo{AN&jhPi=X|G$`qtHM8{^N%VLI-hx#a8|YTO6@;NxmOu)cE4P@EX%cgoSy^J;>V= z2O!7_PW`FV*nU1`8x#nEVX{-qThi7-9C5vd+E z($W+duub8WY5`lCogD5(2DwY?y*mQqGV8wDEkCNGt6__h{M7~KbC}S(9~-+BMk`y9 zAmUg;hh^2um7)gs?%yXPQ}{i$-DNCrSvZO(bp*d0mLuSF-UaGIz6?GRC{3#EkHYq~ z2i3e-RR`YtHkj*?kPLq!)@>);fsT9|7&!Xuz?~tjO$9i=!Z0NVSBzc~bLi;4!zKO9 z8CIBO2#JXW!Dykgzds^AwK%fsGXD5qpCctIs~|wt&6_t<5Y8Z;dK6v?SkiEV5Eh9+`(j_-ffM6Ry@ufXrPu> zRWZWzapQs=vz zB=#B5UA};j{B9&#!R4`KTh_^Jdkgr}lwv~u6~H+>v=3POI0o4T8bmPhjPnLo31(m4 zY`}7nm9IhvL8` zT(_>Cob76Zk%2-ql=Qc@9CQ|fSSr!f#J*I)ntP?4ECeZCSp`R_ ztMv>}e1fzes{GA@f}YS`CALU-7Dv?7zT=-?fJ`ntgdxC5kIerV++1KUAwIDlx_hu1 zAi@st>XyTVF^=#=w?$XVulo4=C?t`t8Gyl^V$m{@CMEzd1ctFnDp#3c(*PBVGQh}v z$Wn;+3#@nu&7Le-Tz{+PLj9P7w8NV<2x+&GNOTSlYkXh{KSokPG zN077U+TPguS7+aDJp1NMA>{mteaNOwn1bNL)+Ig_Y3ADZShpX5v;%%yjE(Qo8OLus zY`#}znUUZ+Vi*p|b{W^XjG9Wt&70kEr`9+JTBwK1`e-IKVO3CKkoX%;jGPrX-4Kg@ zeg6*0=4F7jdx;n$Y-FE2ac*ehcQ6+IlZ6485+-Q;n|l*AqW)2o&@&3ACMbQW5ylZ z(JF1@Qb~jASU$qRg0c-xMlhk^7Zv^N_;c;bmEW-8u|!AwC8SzE#WQ^(VH zDXg%_t3(N6yfZ@fgdvnUiH$jOX5w&#K%}+dG#2IG%)L-+Blaht>@>~QOhmC6u0IHq zJ!#hhb#{7Y6IX*!nerP|w#0M=PHNd%prjAZdZ4PpOH}T?iso`b{Tg)Uq9i52|4@wd!!N`wa zPDglvj4)}Tp(r_@VzwVkjaZw(g{sIPamf%<^0KW?69P4H_5rp14k8)M_EfIYUBw=# zjn|RJTdF{Iu@i8%JNZCaySK{#vod#HmbRjt49CL*8 z2t-Lu5&kfJu^b`#z`=t}c`o~qYQKPCUwX+&cn>1v7r~1YE~mVtPQtVbDNY)jnohzC z;(VI<<#E|hSf%(1ZdyLmFv;1KM4KH}BeKvf%IQj;l^C>22! zxezu^A0d|F6A{6Q*S%FnW-701Db;0}j+IEgT30FVkT>2j`f*-eUA;o;L^p2q?!9~e zU^zbaBDcVKUbvFLBhm$LHPJMONab zj9kjo+q(-XCDcP!tzDaHr^O#!O;QcyRm2M~g31C-q_{BhkjscXiS6 zwmqx{<^A^dc8J3gOd|6>DMm}by?=p-kbLFqj)*O!-wlHv*ml87&MJg$GlN zt`pxx>~^XBIblZ$hErZ=QXO>+mdD#rMB)g(-e3PIY>N@ti(l|MutyMiZv%hEfI~L| zkjgaP>PZ~RI7dfDNB;pBfD2>q$Hjg`W1S=@C}t_}Me=~F;i(MkOQhe#E?=sQX`CF=FpsPs_d5N#=jtXNvK!$)PrSElX=b5@M9ZN`*ugY+}WXQ*zd}>9z83Wu?hf)`Pr%D`0@HZduelpP2L+O3V?_#AHE#0iKP8X|04BYNT{m!R&O69b*N zOFR&7B-+6+ih{cz1y(Y#&@sg6RT$QcN##&H;I>yV91DlF-Y9$-nK?Pv5cC6Ubc?Vs z(Qig9ELbCw0HAy9+&Kt-q{^$~9N8~#Nm zRSpmR#^lg3gs2P{TcLIDfH*ImAKpFP* z!u+rsXD>5RYkwkRa~lTE#A`XrVfZ+tUeIp{u!({^GV#bJzOPtDP5yn5vQD{N=Ym72rRoIu;k`3)~jQc!}X)eS#jbTx5p>mPqcObts(jC#AhM%;LCus+aHT%dv;3 z^%IkDqQwsD9}2?zcia#$K1UIaRIC((Xl8cvh~>`HJ&(w^7q;W_F>A+tcx;l~3; zQd*nmak3i{a^)=v>!pVv1wk9@ryws85l*@iQmk?A$b>8E;c9x(1@0C8Wki-H4NFFD$!)Y z&kCE+Zxn556vy}QP&q1yCFZSVD||PuCVLHZn6RTlAmVr+tHnA`Oq?g^67mIX@1!?< zP0x>nIQB+55VLCv{+?_()QIOdjK#yz_L{=Nlp!)k$}3oPk)hrW*V)}z(uSy5;jldl ze;Iw;Gd5vgQ}R|`Si)1(LzI>N;{qV#)ra>Xu?NGpruqFN!io@AV9s0)ak4v+k=%e| z$R$!Aq-hiU0a+mdEbw%o8mRinxsH|8i@-oExp3@tjAbr`-rjn_0~qP^ zvx5@cR#eO@MvqI=qdy^7jpL1jC?Q}q_hP>3AC!G$*~4Lhy@iA>3_|7z>t;z(Vl|>) z;(RAqA(~14VPR|t^l;HiA2+R@*}rzl1{HpW#K-ipwAFD`Y?tBKOaWwrmnwn5-j?rv z{{B_t#q-zP)?lkZD91@3Fw*=uOhOlc3|9Kg#Grado=b9k1y}wz^rZm~8b!ED z^(!TWyM^sI^C~dj8MlH|C2S;1*=L=@QGO*VucDiq8yDBYaJ3qe9lwrhl(TqX)yQx& zu^*Asp-c&W@Zfsse2-B2Jh!Z^C*4{Oqn#m5r;L%}QJUWE$6MNlx=6mnx__3O6=dIG zVWN%aXUUEG%)B^>dFa!y7tC8+xCx8IMdI;@!}bsWhoS94c+TZ+wrc!F3sDWhtE7$z z8o6@9gix>E>ho9#uptTP?;r^(LE4~(b;u4>8v$^I_)Mhf!|CR)UmpU#7=_*%>;t*> z+7H}?1qewsEu!VIxtcC2!nQf(YJ)!(wjXgHM%|2F5jQz*usl(iT^erBowSn+?{G9# zFlztU9428bBuP*K46Hje?6o@P+`65`wm%7#fq8|cyheIfix>?tx+k?c4vg=EgKLfC z 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 VgSu7mdIZV0lf9cA%hvz9zX0kyb1wh@ literal 0 HcmV?d00001 diff --git a/工作日志/2021年3月18日-今日计划.md b/工作日志/2021年3月18日-今日计划.md index ab932140..37ae7f30 100644 --- a/工作日志/2021年3月18日-今日计划.md +++ b/工作日志/2021年3月18日-今日计划.md @@ -3,7 +3,7 @@ > 完成昨天的任务。 - [x] 学习、复习图算法,动手实现所有的图算法。 -- [ ] ~~看完数据结构与算法的三本书!!!对相关的原理进行复习和总结。~~ +- [x] ~~看完数据结构与算法的三本书!!!对相关的原理进行复习和总结。~~ - [x] 学习机器学习的实现方案。毕设计划真正的开始执行。 - [x] 关于字符串分割。字符串格式化方法的总结。转换成流,作为流对象处理。转换为容器。作为容器对象处理,使用泛型算法。 diff --git a/工作日志/2021年3月19日-四月份计划.md b/工作日志/2021年3月19日-四月份计划.md index 692854f0..220e80d3 100644 --- a/工作日志/2021年3月19日-四月份计划.md +++ b/工作日志/2021年3月19日-四月份计划.md @@ -29,8 +29,8 @@ - tensorflow - [x] 学习 TensorFlow2.0 基础 - [x] TensorFlow 恶意软件神经网络分类 - - [ ] tensorflow federated学习 - - [ ] TensorFlow 联邦学习实现 + - [x] tensorflow federated学习 + - [x] TensorFlow 联邦学习实现 - pytorch - [x] pytoch学习 - [x] pytorch 恶意软件神经网络分类 diff --git a/工作日志/2021年3月20日-今日计划.md b/工作日志/2021年3月20日-今日计划.md index 779a0ed7..e36d10e4 100644 --- a/工作日志/2021年3月20日-今日计划.md +++ b/工作日志/2021年3月20日-今日计划.md @@ -17,7 +17,7 @@ 2. 每天一个联邦学习框架 - [x] pytorch学习 3. 每天一篇联邦学习的文章。 - - [ ] ~~deepAMD~~ + - [x] ~~deepAMD~~ 4. 每天数据集处理一小步。 - [X] 获取2020年的两个超大型数据集,并存到云盘当中 - [X] 获取CIC关于恶意软件分析的论文 diff --git a/工作日志/2021年3月21日-今日计划.md b/工作日志/2021年3月21日-今日计划.md index 582197d4..690defe6 100644 --- a/工作日志/2021年3月21日-今日计划.md +++ b/工作日志/2021年3月21日-今日计划.md @@ -4,7 +4,7 @@ 2. 每天一个联邦学习框架 - [x] pytorch 3. 每天一篇联邦学习的文章。 - - [ ] ~~联邦半监督学习~~ + - [x] ~~联邦半监督学习~~ > 明天实现动态数据处理的脚本 diff --git a/工作日志/2021年3月22日-今日计划.md b/工作日志/2021年3月22日-今日计划.md index 1e58abff..1f49fc36 100644 --- a/工作日志/2021年3月22日-今日计划.md +++ b/工作日志/2021年3月22日-今日计划.md @@ -4,7 +4,7 @@ - [x] 支持向量机(学习原理、sklearn实践 - [x] 集成方法(学习原理、sklearn实践 2. 每天一个联邦学习框架 - - [ ] pysyft学习 + - [x] pysyft学习 ## 收获 diff --git a/工作日志/2021年3月23日-今日计划.md b/工作日志/2021年3月23日-今日计划.md index be26ed7d..6b37592b 100644 --- a/工作日志/2021年3月23日-今日计划.md +++ b/工作日志/2021年3月23日-今日计划.md @@ -1,7 +1,7 @@ ## 计划 1. 每天一个联邦学习框架 - - [ ] pysft学习 + - [x] pysft学习 ## 收获 diff --git a/工作日志/2021年3月25日-今日计划.md b/工作日志/2021年3月25日-今日计划.md index 80c5cb8c..e0081596 100644 --- a/工作日志/2021年3月25日-今日计划.md +++ b/工作日志/2021年3月25日-今日计划.md @@ -1,9 +1,9 @@ ## 计划 1. 每天数据集处理一小步。 - - [ ] 实现静态数据处理脚本 + - [x] 实现静态数据处理脚本 2. 每天数据集处理一小步。 - - [ ] 实现动态数据处理脚本 + - [x] 实现动态数据处理脚本 > 阅读完之前的论文 diff --git a/工作日志/2021年3月26日-开组会.md b/工作日志/2021年3月26日-开组会.md index c1e5ef0b..03ade338 100644 --- a/工作日志/2021年3月26日-开组会.md +++ b/工作日志/2021年3月26日-开组会.md @@ -3,7 +3,7 @@ ## 计划 > 执行之前的计划 -- [ ] 整理会议记录发到群里。 +- [x] 整理会议记录发到群里。 ## 收获 diff --git a/工作日志/2021年3月29日-今日计划.md b/工作日志/2021年3月29日-今日计划.md index 136de95f..ce3731fe 100644 --- a/工作日志/2021年3月29日-今日计划.md +++ b/工作日志/2021年3月29日-今日计划.md @@ -3,6 +3,6 @@ - [x] 数据结构预算法——蛮力法整理完成 - [x] 基础知识与项目经历——操作系统整理开始part1 -- [ ] 联邦学习与恶意软件——pysyft学习完成 +- [x] 联邦学习与恶意软件——pysyft学习完成 ## 收获 \ No newline at end of file diff --git a/工作日志/2021年3月31日-今日计划.md b/工作日志/2021年3月31日-今日计划.md index c7dc09f1..e6dc1383 100644 --- a/工作日志/2021年3月31日-今日计划.md +++ b/工作日志/2021年3月31日-今日计划.md @@ -4,6 +4,6 @@ - [x] 数据结构与算法——动态规划和贪心整理完成 - [x] 基础知识与项目经历——数据库整理完成 -- [ ] 联邦学习与恶意软件——TensorFlow学习完成part2 +- [x] 联邦学习与恶意软件——TensorFlow学习完成part2 ## 收获 \ No newline at end of file diff --git a/工作日志/2021年4月21日-今日计划.md b/工作日志/2021年4月21日-今日计划.md index b8600574..f6ddd1d9 100644 --- a/工作日志/2021年4月21日-今日计划.md +++ b/工作日志/2021年4月21日-今日计划.md @@ -7,13 +7,13 @@ ### sklearn -- [ ] 复习教程(包括tutorial、API、code) +- [x] 复习教程(包括tutorial、API、code) ### pytorch -- [ ] 复习教程(包括tutorial、API、code) -- [ ] pytorch 数据流水线技术 -- [ ] 学习pysyft框架并应用 +- [x] 复习教程(包括tutorial、API、code) +- [x] pytorch 数据流水线技术 +- [x] 学习pysyft框架并应用 ### TensorFlow diff --git a/工作日志/2021年4月27日-今日计划.md b/工作日志/2021年4月27日-今日计划.md index acca1340..2cfd0c2e 100644 --- a/工作日志/2021年4月27日-今日计划.md +++ b/工作日志/2021年4月27日-今日计划.md @@ -1,8 +1,8 @@ ## 计划 -- [ ] pysyft框架学习(一个小时) -- [ ] pysyft框架实验(一个小时)快点搞完这个吧,弄完这个就可以真正的开始论文的时间了。五一劳动节,需要多花点时间,补一下拉下的进度了。 -- [ ] 整理相关的论文() +- [x] pysyft框架学习(一个小时) +- [x] pysyft框架实验(一个小时)快点搞完这个吧,弄完这个就可以真正的开始论文的时间了。五一劳动节,需要多花点时间,补一下拉下的进度了。 +- [x] 整理相关的论文() ## 收获 diff --git a/工作日志/2021年4月2日-今日计划.md b/工作日志/2021年4月2日-今日计划.md index 077e4641..172f29f5 100644 --- a/工作日志/2021年4月2日-今日计划.md +++ b/工作日志/2021年4月2日-今日计划.md @@ -3,5 +3,5 @@ > 每日计划包括三方面的内容:数据结构与算法、基础知识与项目经历、联邦学习与恶意软件 - [x] 数据结构预算法——图算法和随机化算法整理完成 -- [ ] 基础知识与项目经历——项目经历整理完成 -- [ ] 联邦学习与恶意软件——TensorFlow federated学习完成part2 +- [x] 基础知识与项目经历——项目经历整理完成 +- [x] 联邦学习与恶意软件——TensorFlow federated学习完成part2 diff --git a/工作日志/2021年4月17日-五月份计划.md b/工作日志/2021年5月1日-五月份计划.md similarity index 76% rename from 工作日志/2021年4月17日-五月份计划.md rename to 工作日志/2021年5月1日-五月份计划.md index 8e80ff77..9ec57701 100644 --- a/工作日志/2021年4月17日-五月份计划.md +++ b/工作日志/2021年5月1日-五月份计划.md @@ -1,8 +1,11 @@ ## 任务 > 四月份计划主要进行基础知识的学习和复习。完成了初步的数据处理。接下来的主要任务是阅读论文并完成论文复习计划。 +> 开始执行五月份计划,与四月份计划进行衔接。完成工程上与学术上的推进工作。 + +### **阅读论文**(两周) +> (100篇计划)蒋师兄前前后后分享了估计也有一百篇了,现在重新开始读论文,在复现文章的同时进行广泛的阅读。利用citavi这个工具。 -### **阅读论文计划(100篇计划)**(两周) ### **联邦学习文章复现**(四周) From d560d25d1e42f0632c35a079ae712c0fa04e1c7c Mon Sep 17 00:00:00 2001 From: yinkanglong Date: Thu, 6 May 2021 21:22:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工作日志/2021年5月6日-今日计划.md | 12 ++++++++++++ 工作日志/2021年5月7日-今日计划.md | 6 ++++++ 工作日志/2021年5月8日-今日计划.md | 6 ++++++ 工作日志/2021年5月9日-今日计划.md | 6 ++++++ 4 files changed, 30 insertions(+) create mode 100644 工作日志/2021年5月6日-今日计划.md create mode 100644 工作日志/2021年5月7日-今日计划.md create mode 100644 工作日志/2021年5月8日-今日计划.md create mode 100644 工作日志/2021年5月9日-今日计划.md diff --git a/工作日志/2021年5月6日-今日计划.md b/工作日志/2021年5月6日-今日计划.md new file mode 100644 index 00000000..fb0c3bbe --- /dev/null +++ b/工作日志/2021年5月6日-今日计划.md @@ -0,0 +1,12 @@ +## 任务 + +- [x] 四月份计划——tensorflow federated +- [ ] 四月份计划——pysyft + + + +## 收获 + +1. 我发现python机器学习这一套在linux下更好运行,windows配置环境果然要麻烦一百倍。从今天开始将主要的工作环境转移到linux上边。算法的运行和学习都在linux上执行。去Windows上做一下收尾工作。 +2. 当前的主要任务包括两个,一个是四月份未完成的计划。一个是五月份新开始的计划。 +3. tensorflow federated已经学习完成了,能够完成基本的联邦学习过程。因为与学弟合作的部分还是pytorch。今后最好使用pytorch进行开发吧。除非由绝对的优势,不会回到tensorflow上了。 \ No newline at end of file diff --git a/工作日志/2021年5月7日-今日计划.md b/工作日志/2021年5月7日-今日计划.md new file mode 100644 index 00000000..fae7c26e --- /dev/null +++ b/工作日志/2021年5月7日-今日计划.md @@ -0,0 +1,6 @@ +## 计划 + +- [ ] 四月份计划——pytorch 两个数据集训练 +- [ ] 四月份计划——pysyft 两个数据集训练 + +## 收获 \ No newline at end of file diff --git a/工作日志/2021年5月8日-今日计划.md b/工作日志/2021年5月8日-今日计划.md new file mode 100644 index 00000000..823ebea9 --- /dev/null +++ b/工作日志/2021年5月8日-今日计划.md @@ -0,0 +1,6 @@ +## 计划 + +- [ ] 五月份计划——ida 实现 +- [ ] 五月份计划——prox实现 + +## 收获 \ No newline at end of file diff --git a/工作日志/2021年5月9日-今日计划.md b/工作日志/2021年5月9日-今日计划.md new file mode 100644 index 00000000..844a5ece --- /dev/null +++ b/工作日志/2021年5月9日-今日计划.md @@ -0,0 +1,6 @@ +## 计划 + +- [ ] 五月份计划——静态数据处理脚本 +- [ ] 五月份计划——动态数据处理脚本 + +## 收获 \ No newline at end of file