From 6be464a40e53ef891da95e062e8882c6bdd821af Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <yamanu@xilinx.com>
Date: Mon, 8 Feb 2021 19:49:33 +0100
Subject: [PATCH] [Notebook] add option to use prequantized dataset for cybsec
 MLP

---
 .../1-train-mlp-with-brevitas.ipynb           | 236 ++++++++++++++----
 .../2-export-to-finn-and-verify.ipynb         |  54 ++--
 2 files changed, 214 insertions(+), 76 deletions(-)

diff --git a/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb b/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb
index 84dde835d..d53a07ae8 100644
--- a/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb
+++ b/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb
@@ -40,15 +40,15 @@
     "-------------\n",
     "\n",
     "* [Initial setup](#initial_setup)\n",
-    "* [Define the Quantized MLP model](#define_quantized_mlp)\n",
     "* [Load the UNSW_NB15 dataset](#load_dataset) \n",
+    "    * [(Option 1, slower) Download original and quantize](#dataset_qnt_manual)\n",
+    "    * [(Option 2, faster) Use prequantized version](#dataset_qnt_pre)\n",
+    "* [Define the Quantized MLP model](#define_quantized_mlp)\n",
     "* [Define Train and Test  Methods](#train_test)\n",
-    "* [(Option 1) Train the Model from Scratch](#train_scratch)\n",
-    "* [(Option 2) Load Pre-Trained Parameters](#load_pretrained)\n",
+    "    * [(Option 1) Train the Model from Scratch](#train_scratch)\n",
+    "    * [(Option 2) Load Pre-Trained Parameters](#load_pretrained)\n",
     "* [Network Surgery Before Export](#network_surgery)\n",
-    "* [Export to FINN-ONNX](#export_finn_onnx)\n",
-    "* [View the Exported ONNX in Netron](#view_in_netron)\n",
-    "* [That's it!](#thats_it)"
+    "* [Export to FINN-ONNX](#export_finn_onnx)"
    ]
   },
   {
@@ -77,7 +77,17 @@
     "### Dataset Quantization <a id='dataset_qnt'></a>\n",
     "\n",
     "The goal of this notebook is to train a Quantized Neural Network (QNN) to be later deployed as an FPGA accelerator generated by the FINN compiler. Although we can choose a variety of different precisions for the input, [Murovic and Trost](https://ev.fe.uni-lj.si/1-2-2019/Murovic.pdf) have previously shown we can actually binarize the inputs and still get good (90%+) accuracy.\n",
-    "Thus, we will create a binarized representation for the dataset by following the procedure defined by [Murovic and Trost](https://ev.fe.uni-lj.si/1-2-2019/Murovic.pdf), which we repeat briefly here:\n",
+    "\n",
+    "For this part we offer two options: you may choose to download the original dataset and apply the quantization functions on it (slower), or use a pre-quantized version (faster). Both options will yield the same result, though the first option gives more details on how we quantize the dataset."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## (Option 1, slower) Download original and quantize <a id='dataset_qnt_manual'></a>\n",
+    "\n",
+    "We will create a binarized representation for the dataset by following the procedure defined by [Murovic and Trost](https://ev.fe.uni-lj.si/1-2-2019/Murovic.pdf), which we repeat briefly here:\n",
     "\n",
     "* Original features have different formats ranging from integers, floating numbers to strings.\n",
     "* Integers, which for example represent a packet lifetime, are binarized with as many bits as to include the maximum value. \n",
@@ -86,7 +96,7 @@
     "* In the end, each sample is transformed into a 593-bit wide binary vector. \n",
     "* All vectors are labeled as bad (0) or normal (1)\n",
     "\n",
-    "Following their open-source implementation provided as a Matlab script [here](https://github.com/TadejMurovic/BNN_Deployment/blob/master/cybersecurity_dataset_unswb15.m), we've created a [Python version](dataloader_quantized.py).\n",
+    "Following Murovic and Trost's open-source implementation provided as a Matlab script [here](https://github.com/TadejMurovic/BNN_Deployment/blob/master/cybersecurity_dataset_unswb15.m), we've created a [Python version](dataloader_quantized.py).\n",
     "This `UNSW_NB15_quantized` class implements a PyTorch `DataLoader`, which represents a Python iterable over a dataset. This is useful because enables access to data in batches."
    ]
   },
@@ -111,7 +121,16 @@
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Samples in each set: train = 175341, test = 82332\n",
+      "Shape of one input sample: torch.Size([593])\n"
+     ]
+    }
+   ],
    "source": [
     "from torch.utils.data import DataLoader, Dataset\n",
     "from dataloader_quantized import UNSW_NB15_quantized\n",
@@ -125,7 +144,19 @@
     "\n",
     "test_quantized_dataset = UNSW_NB15_quantized(file_path_train = file_path_train, \\\n",
     "                                              file_path_test = file_path_test, \\\n",
-    "                                              train=False)"
+    "                                              train=False)\n",
+    "\n",
+    "print(\"Samples in each set: train = %d, test = %s\" % (len(train_quantized_dataset), len(test_quantized_dataset)))\n",
+    "print(\"Shape of one input sample: \" +  str(train_quantized_dataset[0][0].shape))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## (Option 2, faster) Use prequantized version <a id='dataset_qnt_pre'></a>\n",
+    "\n",
+    "Downloading the original dataset and quantizing it can take some time, so we provide a pre-quantized version for your convenience. Uncomment the following line to download:"
    ]
   },
   {
@@ -134,21 +165,109 @@
    "metadata": {},
    "outputs": [],
    "source": [
+    "# ! wget -O unsw_nb15_binarized.npz https://zenodo.org/record/4519767/files/unsw_nb15_binarized.npz?download=1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can extract the binarized numpy arrays from the .npz archive and wrap them as a PyTorch `TensorDataset` as follows:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Samples in each set: train = 175341, test = 82332\n",
+      "Shape of one input sample: torch.Size([593])\n"
+     ]
+    }
+   ],
+   "source": [
+    "import numpy as np\n",
+    "from torch.utils.data import TensorDataset\n",
+    "\n",
+    "def get_preqnt_dataset(data_dir: str, train: bool):\n",
+    "    unsw_nb15_data = np.load(data_dir + \"/unsw_nb15_binarized.npz\")\n",
+    "    if train:\n",
+    "        partition = \"train\"\n",
+    "    else:\n",
+    "        partition = \"test\"\n",
+    "    part_data = unsw_nb15_data[partition].astype(np.float32)\n",
+    "    part_data = torch.from_numpy(part_data)\n",
+    "    part_data_in = part_data[:, :-1]\n",
+    "    part_data_out = part_data[:, -1]\n",
+    "    return TensorDataset(part_data_in, part_data_out)\n",
+    "\n",
+    "train_quantized_dataset = get_preqnt_dataset(\".\", True)\n",
+    "test_quantized_dataset = get_preqnt_dataset(\".\", False)\n",
+    "\n",
+    "print(\"Samples in each set: train = %d, test = %s\" % (len(train_quantized_dataset), len(test_quantized_dataset))) \n",
+    "print(\"Shape of one input sample: \" +  str(train_quantized_dataset[0][0].shape))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Set up DataLoader\n",
+    "\n",
+    "Following either option, we now have access to the quantized dataset. We will wrap the dataset in a PyTorch `DataLoader` for easier access in batches."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from torch.utils.data import DataLoader, Dataset\n",
+    "\n",
     "batch_size = 1000\n",
     "\n",
     "# dataset loaders\n",
     "train_quantized_loader = DataLoader(train_quantized_dataset, batch_size=batch_size, shuffle=True)\n",
-    "test_quantized_loader = DataLoader(test_quantized_dataset, batch_size=batch_size, shuffle=True)    "
+    "test_quantized_loader = DataLoader(test_quantized_dataset, batch_size=batch_size, shuffle=False)    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Input shape for 1 batch: torch.Size([1000, 593])\n",
+      "Label shape for 1 batch: torch.Size([1000])\n"
+     ]
+    }
+   ],
+   "source": [
+    "count = 0\n",
+    "for x,y in train_quantized_loader:\n",
+    "    print(\"Input shape for 1 batch: \" + str(x.shape))\n",
+    "    print(\"Label shape for 1 batch: \" + str(y.shape))\n",
+    "    count += 1\n",
+    "    if count == 1:\n",
+    "        break"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Define the Quantized MLP Model <a id='define_quantized_mlp'></a>\n",
+    "# Define the Quantized MLP Model <a id='define_quantized_mlp'></a>\n",
     "\n",
     "We'll now define an MLP model that will be trained to perform inference with quantized weights and activations.\n",
-    "For this, we'll use the quantization-aware training (QAT) capabilities offered by[Brevitas](https://github.com/Xilinx/brevitas).\n",
+    "For this, we'll use the quantization-aware training (QAT) capabilities offered by [Brevitas](https://github.com/Xilinx/brevitas).\n",
     "\n",
     "Our MLP will have four fully-connected (FC) layers in total: three hidden layers with 64 neurons, and a final output layer with a single output, all using 2-bit weights. We'll use 2-bit quantized ReLU activation functions, and apply batch normalization between each FC layer and its activation.\n",
     "\n",
@@ -157,7 +276,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -179,7 +298,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -214,13 +333,13 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Define Train and Test  Methods  <a id='train_test'></a>\n",
+    "# Define Train and Test  Methods  <a id='train_test'></a>\n",
     "The train and test methods will use a `DataLoader`, which feeds the model with a new predefined batch of training data in each iteration, until the entire training data is fed to the model. Each repetition of this process is called an `epoch`."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -249,7 +368,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -281,7 +400,16 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## (Option 1) Train the Model from Scratch <a id=\"train_scratch\"></a>\n"
+    "# Train the QNN <a id=\"train_qnn\"></a>\n",
+    "\n",
+    "We provide two options for training below: you can opt for training the model from scratch (slower) or use a pre-trained model (faster). The first option will give more insight into how the training process works, while the second option will likely give better accuracy."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## (Option 1, slower) Train the Model from Scratch <a id=\"train_scratch\"></a>\n"
    ]
   },
   {
@@ -293,7 +421,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -311,7 +439,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -322,7 +450,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 14,
    "metadata": {
     "scrolled": true
    },
@@ -331,7 +459,7 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "Training loss = 0.132304 test accuracy = 0.808811: 100%|██████████| 15/15 [04:52<00:00, 19.47s/it]\n"
+      "Training loss = 0.130799 test accuracy = 0.794551: 100%|██████████| 15/15 [01:25<00:00,  5.66s/it]\n"
      ]
     }
    ],
@@ -359,14 +487,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 15,
    "metadata": {
     "scrolled": true
    },
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAkBElEQVR4nO3deZRcZ33m8e/T1Wu11mq1N6mrJYxsRybYZoTBmIATNpkwkgMniR0W54QcA4OBxGSCCRmYcYYcD04YMoMJONiQxeAQwIkmMRizmN1gGW9IRrZsrNW2ZG2tpff+zR/3tlxqVbdKUl1Vd9XzOadP1X3r3qpf261++r33ve+riMDMzGyiploXYGZm05MDwszMynJAmJlZWQ4IMzMrywFhZmZlOSDMzKwsB4TZJCR9TdKV1d73GGu4RNKWar+vWSWaa12AWTVJ2l+ymQcGgdF0+x0RcWul7xURl2axr9lM4YCwuhIRs8afS3oS+MOI+ObE/SQ1R8TIyazNbKbxKSZrCOOnaiR9QNLTwOckzZf075J2SNqdPl9Ucszdkv4wff77kn4g6a/SfX8p6dLj3HeJpO9J2ifpm5JulPRPFX4fv5J+1h5JayWtLHnt9ZLWpe+7VdKfpO0L0u9tj6Rdkr4vyf/27aj8Q2KN5DSgAPQCV5H8/H8u3S4C/cAnpzj+JcB6YAHwMeBmSTqOfb8A/BToAv478NZKipfUAvw/4BvAKcB7gFslnZ3ucjPJabTZwAuAb6ft7we2AN3AqcCfAZ5jx47KAWGNZAz4SEQMRkR/ROyMiK9ExMGI2Ad8FHjlFMdvjIi/i4hR4O+B00l+4Va8r6Qi8GLgwxExFBE/AFZXWP9LgVnA9emx3wb+HbgifX0YWCZpTkTsjoiflbSfDvRGxHBEfD88CZtVwAFhjWRHRAyMb0jKS/qMpI2S+oDvAfMk5SY5/unxJxFxMH066xj3PQPYVdIGsLnC+s8ANkfEWEnbRmBh+vxNwOuBjZK+K+mitP0GYAPwDUlPSLq2ws+zBueAsEYy8a/m9wNnAy+JiDnAK9L2yU4bVcNTQEFSvqStp8JjtwE9E64fFIGtABFxb0SsIjn99K/Al9L2fRHx/oh4HrASuEbSq07s27BG4ICwRjab5LrDHkkF4CNZf2BEbATWAP9dUmv6V/5/rvDwnwAHgT+V1CLpkvTY29L3erOkuRExDPSRnFJD0hskPT+9BrKXZNjvWNlPMCvhgLBG9gmgA3gWuAf4+kn63DcDFwE7gf8J/DPJ/RpTioghkkC4lKTmTwFvi4hfpLu8FXgyPV32zvRzAJYC3wT2Az8GPhUR36nad2N1S75WZVZbkv4Z+EVEZN6DMTsW7kGYnWSSXizpTElNklYAq0iuGZhNK76T2uzkOw34Ksl9EFuAd0XE/bUtyexIPsVkZmZl+RSTmZmVVTenmBYsWBCLFy+udRlmZjPKfffd92xEdJd7rW4CYvHixaxZs6bWZZiZzSiSNk72mk8xmZlZWQ4IMzMrywFhZmZlOSDMzKwsB4SZmZXlgDAzs7IcEGZmVlbDB8Te/mE+8c1HeXDznlqXYmY2rdTNjXLHS4JPfPMx2ltynNczr9blmJlNGw3fg5jT3sL8fAubdh08+s5mZg2k4QMCoFjIs2mnA8LMrJQDAih2dboHYWY2gQMCKBY62Lqnn+FRr+NuZjbOAQH0FjoZHQue2jNQ61LMzKYNBwTQU8gDsHHXgRpXYmY2fTgggN6uJCB8HcLM7DkOCODUOe205po8ksnMrIQDAsg1iUWFDjY6IMzMDnFApIqFvE8xmZmVcECketOAiIhal2JmNi04IFLFrk72D46w++BwrUsxM5sWMg0ISSskrZe0QdK1U+z3JkkhaXlJ2wfT49ZLel2WdUJyiglg404PdTUzgwwDQlIOuBG4FFgGXCFpWZn9ZgPvA35S0rYMuBw4F1gBfCp9v8x4qKuZ2eGy7EFcCGyIiCciYgi4DVhVZr+/AP4XUHob8yrgtogYjIhfAhvS98tMz/w0IDySycwMyDYgFgKbS7a3pG2HSHoR0BMR/3Gsx6bHXyVpjaQ1O3bsOKFiO1pznDK7zT0IM7NUzS5SS2oCPg68/3jfIyJuiojlEbG8u7v7hGsqFvJsdECYmQHZBsRWoKdke1HaNm428ALgbklPAi8FVqcXqo92bCaKXXk2OyDMzIBsA+JeYKmkJZJaSS46rx5/MSL2RsSCiFgcEYuBe4CVEbEm3e9ySW2SlgBLgZ9mWCuQ9CCe7htgYHg0648yM5v2MguIiBgBrgbuBB4BvhQRayVdJ2nlUY5dC3wJWAd8HXh3RGT+W7u3K08EbNndn/VHmZlNe81ZvnlE3AHcMaHtw5Pse8mE7Y8CH82suDLG74XYtOsAzz9l1sn8aDOzacd3UpcoFjoBD3U1MwMHxGEWzGol35rzSCYzMxwQh5FEseCRTGZm4IA4Qk8h73UhzMxwQBzB036bmSUcEBMUu/IMjoyxfd9grUsxM6spB8QEzw119WkmM2tsDogJnlsXwgFhZo3NATHBovl5JNjkhYPMrME5ICZobW7ijLkdPsVkZg3PAVGGp/02M3NAlNXrab/NzBwQ5fQU8jy7f4j9gyO1LsXMrGYcEGX0diUjmdyLMLNG5oAow0NdzcwcEGX1ptN+uwdhZo3MAVHG3HwLc9qb2bjL90KYWeNyQEyit6uTTbu89KiZNS4HxCSKhbzvpjazhuaAmESxK8+W3f2MjnnabzNrTA6ISRQLeUbGgm17fJrJzBqTA2ISvQXfC2Fmjc0BMYme8XshHBBm1qAcEJM4Y14HzU3yrK5m1rAcEJPINYlF8zvY5LupzaxBZRoQklZIWi9pg6Rry7z+TkkPS3pA0g8kLUvbF0vqT9sfkPTpLOucTLGr0z0IM2tYzVm9saQccCPwGmALcK+k1RGxrmS3L0TEp9P9VwIfB1akrz0eEednVV8lioUOHti0u5YlmJnVTJY9iAuBDRHxREQMAbcBq0p3iIi+ks1OYFrddNBb6KRvYIS9B4drXYqZ2UmXZUAsBDaXbG9J2w4j6d2SHgc+Bry35KUlku6X9F1Jv1buAyRdJWmNpDU7duyoZu1A6Ugm31FtZo2n5hepI+LGiDgT+ADw52nzU0AxIi4ArgG+IGlOmWNviojlEbG8u7u76rWNrwvhab/NrBFlGRBbgZ6S7UVp22RuAy4DiIjBiNiZPr8PeBw4K5syJze+LoQvVJtZI8oyIO4FlkpaIqkVuBxYXbqDpKUlm78JPJa2d6cXuZH0PGAp8ESGtZbV2dbMglmtHupqZg0ps1FMETEi6WrgTiAH3BIRayVdB6yJiNXA1ZJeDQwDu4Er08NfAVwnaRgYA94ZEbuyqnUqxULePQgza0iZBQRARNwB3DGh7cMlz983yXFfAb6SZW2VKhby3Pukh7qaWeOp+UXq6a7Y1cm2vf0MjYzVuhQzs5PKAXEUxUKeCNiy26eZzKyxOCCOYnyoq69DmFmjcUAchYe6mlmjckAcxSmz22hrbvJQVzNrOA6Io5BEsZD3wkFm1nAcEBXo7cp76VEzazgOiAr0pDfLRUyryWbNzDLlgKhAbyHPwaFRnt0/VOtSzMxOGgdEBYqHhrp62m8zaxwOiAoUC52Ah7qaWWNxQFRg0fwOJK8LYWaNxQFRgfaWHKfNaXcPwswaigOiQj2FvG+WM7OG4oCoUK/XhTCzBuOAqFCxkGf7vkH6h0ZrXYqZ2UnhgKhQ0bO6mlmDcUBUqLfLQ13NrLE4ICo0Pu33xp2+Wc7MGoMDokLz8y3Mbmv2pH1m1jAcEBWSRI+n/TazBuKAOAa9XR7qamaNwwFxDIqFPFt29TM65mm/zaz+OSCOQbErz9DoGM/0DdS6FDOzzDkgjsFzI5l8msnM6l+mASFphaT1kjZIurbM6++U9LCkByT9QNKyktc+mB63XtLrsqyzUr3ptN8eyWRmjSCzgJCUA24ELgWWAVeUBkDqCxHxqxFxPvAx4OPpscuAy4FzgRXAp9L3q6nT57WTaxIbvXCQmTWALHsQFwIbIuKJiBgCbgNWle4QEX0lm53A+NXfVcBtETEYEb8ENqTvV1MtuSYWzutg067+WpdiZpa55gzfeyGwuWR7C/CSiTtJejdwDdAK/EbJsfdMOHZhmWOvAq4CKBaLVSn6aIqFPJt8N7WZNYCaX6SOiBsj4kzgA8CfH+OxN0XE8ohY3t3dnU2BExR9L4SZNYgsA2Ir0FOyvShtm8xtwGXHeexJUyzk2X1wmL6B4VqXYmaWqSwD4l5gqaQlklpJLjqvLt1B0tKSzd8EHkufrwYul9QmaQmwFPhphrVWrDcd6urV5cys3mV2DSIiRiRdDdwJ5IBbImKtpOuANRGxGrha0quBYWA3cGV67FpJXwLWASPAuyNiWqzU01N4bl2IFyycW+NqzMyyk+VFaiLiDuCOCW0fLnn+vimO/Sjw0eyqOz5eOMjMGkXNL1LPNHPaW5ifb/Hd1GZW9yoKCEmdkprS52dJWimpJdvSpq9iV6fvpjazuldpD+J7QLukhcA3gLcCn8+qqOmuWMj7bmozq3uVBoQi4iDwRuBTEfHbJNNgNKTeQp5tewYYHh2rdSlmZpmpOCAkXQS8GfiPtK3mcyPVSrErz+hYsG2Pp9wws/pVaUD8EfBB4PZ0COrzgO9kVtU052m/zawRVDTMNSK+C3wXIL1Y/WxEvDfLwqazXg91NbMGUOkopi9ImiOpE/g5sE7Sf822tOnr1NnttDY3OSDMrK5VeoppWTo192XA14AlJCOZGlJTk+iZ3+HpNsysrlUaEC3pfQ+XAasjYpjn1m5oSMlQVweEmdWvSgPiM8CTJIv6fE9SL9A35RF1rje9WS6ioXPSzOpYRQEREf8nIhZGxOsjsRH49Yxrm9Z6Cnn2D46w68BQrUsxM8tEpRep50r6uKQ16ddfk/QmGlZvwSOZzKy+VXqK6RZgH/A76Vcf8LmsipoJPKurmdW7Sqf7PjMi3lSy/T8kPZBBPTNGz3wvHGRm9a3SHkS/pJePb0i6GGjoeSY6WnOcMrvNI5nMrG5V2oN4J/APksaXUDu0+lsj6+3K+xSTmdWtSkcxPRgR5wEvBF4YERcAv5FpZTNATyHvU0xmVreOaUW5iOhL76gGuCaDemaU3kInT/cNMDA8LZbLNjOrqhNZclRVq2KGKnZ1ALBlt3sRZlZ/TiQgGv4W4mIhuRXE1yHMrB5NeZFa0j7KB4GAjkwqmkG8LoSZ1bMpAyIiZp+sQmaiBbNaybfm3IMws7p0IqeYGp4kih7JZGZ1KtOAkLRC0npJGyRdW+b1ayStk/SQpG+ls8SOvzYq6YH0a3WWdZ4IT/ttZvUqs4CQlANuBC4FlgFXSFo2Ybf7geUR8ULgy8DHSl7rj4jz06+VWdV5onq78mzedZCxsYa/Zm9mdSbLHsSFwIaIeCIihoDbgFWlO0TEdyJi/M/ve4BFGdaTiWIhz+DIGNv3Dda6FDOzqsoyIBYCm0u2t6Rtk3k7yXKm49rTqcXvkXRZBvVVRbHLQ13NrD5VOhdTpiS9BVgOvLKkuTcitkp6HvBtSQ9HxOMTjrsKuAqgWCyetHpLPTfU9QAXLinUpAYzsyxk2YPYCvSUbC9K2w4j6dXAh4CVEXHoPE1EbE0fnwDuBi6YeGxE3BQRyyNieXd3d3Wrr9DCeR00CTa7B2FmdSbLgLgXWCppiaRW4HLgsNFIki4gWe96ZURsL2mfL6ktfb4AuBhYl2Gtx621uYnT53Z4JJOZ1Z3MTjFFxIikq4E7gRxwS0SslXQdsCYiVgM3ALOAf5EEsCkdsfQrwGckjZGE2PURMS0DAjztt5nVp0yvQUTEHcAdE9o+XPL81ZMc9yPgV7OsrZqKhTx3rXum1mWYmVWV76SugmJXnp0Hhtg/OFLrUszMqsYBUQXjI5k85YaZ1RMHRBX0etpvM6tDDogqONSD2HWgxpWYmVWPA6IK5uZbmNvR4h6EmdUVB0SVFAt5LxxkZnXFAVElxXRWVzOzeuGAqJJiIc+W3f2MjI7VuhQzs6pwQFRJbyHPyFjw1N6BWpdiZlYVDogqeW4kk08zmVl9cEBUSbHLAWFm9cUBUSWnz+2gJSePZDKzuuGAqJJck1g0P++b5cysbjggqqhY8LTfZlY/HBBVNH6zXETUuhQzsxPmgKii3q48+wZG2Ns/XOtSzMxOmAOiinrSoa6+UG1m9cABUUW9HupqZnXEAVFFPfMdEGZWPxwQVdTZ1syCWW1eWc7M6oIDosqKhQ42+l4IM6sDDogq6+3qZPOu/lqXYWZ2whwQVdZTyLNtbz+DI6O1LsXM7IQ4IKqst5AnArbudi/CzGY2B0SVjc/qutEjmcxshss0ICStkLRe0gZJ15Z5/RpJ6yQ9JOlbknpLXrtS0mPp15VZ1llNvenNcl5+1MxmuswCQlIOuBG4FFgGXCFp2YTd7geWR8QLgS8DH0uPLQAfAV4CXAh8RNL8rGqtpu7ZbbS3NPluajOb8bLsQVwIbIiIJyJiCLgNWFW6Q0R8JyLGf5PeAyxKn78OuCsidkXEbuAuYEWGtVaNJM/qamZ1IcuAWAhsLtnekrZN5u3A147lWElXSVojac2OHTtOsNzqKRbyvlnOzGa8aXGRWtJbgOXADcdyXETcFBHLI2J5d3d3NsUdh2Khk027PO23mc1sWQbEVqCnZHtR2nYYSa8GPgSsjIjBYzl2uioWOugfHmXH/sGj72xmNk1lGRD3AkslLZHUClwOrC7dQdIFwGdIwmF7yUt3Aq+VND+9OP3atG1G6O3qBDySycxmtswCIiJGgKtJfrE/AnwpItZKuk7SynS3G4BZwL9IekDS6vTYXcBfkITMvcB1aduM4HUhzKweNGf55hFxB3DHhLYPlzx/9RTH3gLckl112ekpdCA5IMxsZpsWF6nrTVtzjtPntPsUk5nNaA6IjPQU8p5uw8xmNAdERnq7fLOcmc1sDoiMFAt5duwb5ODQSK1LMTM7Lg6IjJxz2hwA/vz2nzMw7LUhzGzmcUBk5FW/cgrXvOYsvnr/Vq74u3vY3jdQ65LMzI6JAyIjknjvq5by6be8iF88tY+Vn/whD23ZU+uyzMwq5oDI2IoXnM5X3vUyck3itz/9Y1Y/uK3WJZmZVcQBcRIsO2MOq6++mPN65vHeL97PDXf+grExT+RnZtObA+Ik6ZrVxj+9/SVccWGRG7/zOFf94xr2D3qEk5lNXw6Ik6i1uYm//K0XcN2qc/nO+h288VM/9LoRZjZtOSBOMkm87aLF/MMfXMgzfYOsvPEH/OjxZ2tdlpnZERwQNXLx8xew+uqL6Z7Vxltv/in/+OMna12SmdlhHBA11NvVyVf/y8u45Kxu/tu/reVDtz/M0MhYrcsyMwMcEDU3u72Fm962nHddcia3/mQTb735J+z0SnRmNg04IKaBXJP4wIpz+JvLz+eBzXtYdeMPeeSpvlqXZWYNzgExjaw6fyFfesdFDI+O8aa//RF3rn261iWZWQNzQEwz5/XMY/XVL2fpqbN5xz/ex//91mNE+KY6Mzv5HBDT0Klz2vnnq17KGy9YyF/f9ShXf+F++oc8I6yZnVyZrkltx6+9Jcdf/855nH3abK7/+i94cucB/u5tyzljXketSzOzBuEexDQmiXe88kxuufLFbNp5kJWf/AH3bdxV67LMrEE4IGaAXz/nFG5/98uY1dbM5Tfdw2e//4TXlzCzzKleLoAuX7481qxZU+syMrXn4BDv+eL9fP+xZGqOZafP4ZVnd3PJWd28qHc+LTnnvZkdG0n3RcTysq85IGaWiOCRp/Zx96PbuXv9Du7buJvRsWB2WzMvX7qAS87u5pVnncJpc9trXaqZzQAOiDrWNzDMDx97lrvX7+C7j+7g6fTU0zmnzU57F6ewfLF7F2ZWXs0CQtIK4G+AHPDZiLh+wuuvAD4BvBC4PCK+XPLaKPBwurkpIlZO9VmNGhClIoL1z+zj7vU7uHv9dtY8uZuRsWBWWzMXP7+LV551Cpec3e2RUGZ2SE0CQlIOeBR4DbAFuBe4IiLWleyzGJgD/AmwekJA7I+IWZV+ngPiSPsGhvnR4zuT3sX67Wzbm/Quzjp1FpecfQqXnNXN8sUFWpvduzBrVFMFRJb3QVwIbIiIJ9IibgNWAYcCIiKeTF/zFKYZmN3ewuvOPY3XnXsaEcFj2/dz9/rtfPfRHXzuh7/kpu89Qb41x8vOTK5dvGRJged1zyLXpFqXbmbTQJYBsRDYXLK9BXjJMRzfLmkNMAJcHxH/OnEHSVcBVwEUi8Xjr7QBSOKsU2dz1qmzueoVZ3JgcCTtXSQXu7/5yDMAtLc0cc5pczj3jDmce8Zczj1jDmefNpv2llyNvwMzO9mm853UvRGxVdLzgG9LejgiHi/dISJuAm6C5BRTLYqcqTrbmnnNslN5zbJTiQge33GABzbvYd22PtZu28vqB7dx6082Aclss2d2dx4KjGVnzOHc0+cyN99S4+/CzLKUZUBsBXpKthelbRWJiK3p4xOS7gYuAB6f8iA7LpJ4/imzeP4ps+A/JW0RweZd/azdtpd1T/WxdlsfP3r8WW6//7n/hQvndRzW0zh34RxOm9OO5FNUZvUgy4C4F1gqaQlJMFwO/F4lB0qaDxyMiEFJC4CLgY9lVqkdQRLFrjzFrjyX/urph9qf3T/I2rSXsW5bH+u29XHXI88wPtah0NnKstPnHOppLDt9DnM6WmhuEs25JlpyorkpeXSQmE1vWQ9zfT3JMNYccEtEfFTSdcCaiFgt6cXA7cB8YAB4OiLOlfQy4DPAGMl0IJ+IiJun+iyPYqqd/YMj/CLtZazb1sfap/by6NP7GRqdeuxBEhqipamJ5lwaIGmQlG8XLbkmmptEW3OOWe3NzG5vZk57y6HHOR3NzG5vOdSWfLV4pJbZJHyjnJ10QyNjbNi+n/XP9HFwaJThkTFGxoLh0WBkdIzhseQxaRtjZDQYGRs78vXRYHgs0uPT18fGGBoZY9/ACPsGRtg/OHLUetpbmtLgSAJjdnszczqe2x5/nNvRQqGzlUJnKwtmtTG/s4W2Zl+gt/pVq2Gu1sBam5uSU0xnzMn8s0bHgv0DI/QNDLOv5HHfwDB9/enzwZFDz/sGhukbGGHrnv5ku3+YwZHJezuz25opzEpCoysNj0JnG12drXQdam+jMCt53SO+rF44IGzGyzWJufmWExpVlfRIhtnTP8yuA0Ps3D/IzgND7No/lDymX1v3DPDw1r3sOjDE8Gj53ne+NXcoTLpmtVHobGVOewv51hz5thydrc3kW3N0th3+mG9tprM1R76tmXxLjibfj2I15oAwI+nxdM1qo2tWG2d2H33/iKBvYCQNjkF27k8CpDRMdh4YYvu+AR55qo/9AyMcGBph7BjO6Ha05OhsS4IjCZCSUGltJt+WY25HC/M6WpmXb2FePnmcn29hbkcrczt87cVOjAPC7DhIYm5Hcs1iyYLOio6JCAZHxjg4NMqBwZHkcWiEg4Pp49AIBwZH6R9vL92v5HHHvkEOpPvu7R9mdIrU6WzNHQqOQyHSkT6fECxJeyuz27P7tTAWwVgkjzE2vp20RclrYxFEQMTR98m35pifTwLRva7qckCYnSSSaG/J0d6SnIKqhohg/+AIew4OJ1/9Q+w+OMzeg0Pp9jC7Dw6xN33+yFN9h55PFSwzUZNgbkcL89PAK3S2Mi/fyvx8C/M7W5k//jzfyvzO8d5Wq2c6noIDwmwGk5SOymqhp1D5cRHBvsGRJCwmBMu+CkaFHa+cRJOEBE0STYKmpuSemKaSNo3vBzQ1kR5z5D4CDgyNsPvAMHsODrHrYPJ97DmYXC9au62PXQeGjjoIYV5nGhxpiMzLt9LRmqOtuYn2lmN7bBt/bG466r0+473KgeFRBobH6B8eZWB49NDjePtzbWOH2vuHRhkYGaV/aIyF8zu45jVnVfd/Fg4Is4YkKblv5BiDZabqHxpl98Gh5OtA0qvac3CIXaXPDybPn3h2P3sODDMwMjrpQIRKTQyQ5iYd/st+ZJTjudNASq5Rtbfk6GjJ8cJFc0+ozsk4IMys7nW05uho7TjmtVBGx4LBkeSX+RGPw6MMjJR/HJzYnh43PBbpL/amQ7/g20t+0R/Z3kRHa4725tyhx/bWJlpzR++dVIMDwsxsErkmpaPIal1JbfjqjJmZleWAMDOzshwQZmZWlgPCzMzKckCYmVlZDggzMyvLAWFmZmU5IMzMrKy6WVFO0g5g4wm8xQLg2SqVk7WZVCvMrHpnUq0ws+qdSbXCzKr3RGrtjYiyk9zXTUCcKElrJlt2b7qZSbXCzKp3JtUKM6vemVQrzKx6s6rVp5jMzKwsB4SZmZXlgHjOTbUu4BjMpFphZtU7k2qFmVXvTKoVZla9mdTqaxBmZlaWexBmZlaWA8LMzMpq+ICQtELSekkbJF1b63qmIqlH0nckrZO0VtL7al3T0UjKSbpf0r/XupajkTRP0pcl/ULSI5IuqnVNk5H0x+nPwM8lfVFSe61rKiXpFknbJf28pK0g6S5Jj6WP82tZ47hJar0h/Tl4SNLtkubVsMTDlKu35LX3SwpJC6rxWQ0dEJJywI3ApcAy4ApJy2pb1ZRGgPdHxDLgpcC7p3m9AO8DHql1ERX6G+DrEXEOcB7TtG5JC4H3Assj4gVADri8tlUd4fPAiglt1wLfioilwLfS7eng8xxZ613ACyLihcCjwAdPdlFT+DxH1oukHuC1wKZqfVBDBwRwIbAhIp6IiCHgNmBVjWuaVEQ8FRE/S5/vI/kFtrC2VU1O0iLgN4HP1rqWo5E0F3gFcDNARAxFxJ6aFjW1ZqBDUjOQB7bVuJ7DRMT3gF0TmlcBf58+/3vgspNZ02TK1RoR34iIkXTzHmDRSS9sEpP8twX438CfAlUbedToAbEQ2FyyvYVp/Au3lKTFwAXAT2pcylQ+QfIDO1bjOiqxBNgBfC49JfZZSZ21LqqciNgK/BXJX4pPAXsj4hu1raoip0bEU+nzp4FTa1nMMfgD4Gu1LmIqklYBWyPiwWq+b6MHxIwkaRbwFeCPIqKv1vWUI+kNwPaIuK/WtVSoGXgR8LcRcQFwgOlzCuQw6bn7VSShdgbQKektta3q2EQyvn7aj7GX9CGSU7u31rqWyUjKA38GfLja793oAbEV6CnZXpS2TVuSWkjC4daI+Gqt65nCxcBKSU+SnLr7DUn/VNuSprQF2BIR4z2yL5MExnT0auCXEbEjIoaBrwIvq3FNlXhG0ukA6eP2GtczJUm/D7wBeHNM7xvGziT5Y+HB9N/bIuBnkk470Tdu9IC4F1gqaYmkVpILfatrXNOkJInkHPkjEfHxWtczlYj4YEQsiojFJP9dvx0R0/av3Ih4Gtgs6ey06VXAuhqWNJVNwEsl5dOfiVcxTS+oT7AauDJ9fiXwbzWsZUqSVpCcHl0ZEQdrXc9UIuLhiDglIhan/962AC9Kf6ZPSEMHRHoR6mrgTpJ/YF+KiLW1rWpKFwNvJflr/IH06/W1LqqOvAe4VdJDwPnAX9a2nPLSXs6XgZ8BD5P8O55W00JI+iLwY+BsSVskvR24HniNpMdIekHX17LGcZPU+klgNnBX+u/s0zUtssQk9WbzWdO752RmZrXS0D0IMzObnAPCzMzKckCYmVlZDggzMyvLAWFmZmU5IMxSkvanj4sl/V6V3/vPJmz/qJrvb5YFB4TZkRYDxxQQ6aR5UzksICJiJtz5bA3OAWF2pOuBX0tvkPrjdE2LGyTdm64P8A4ASZdI+r6k1aR3XUv6V0n3pWs1XJW2XU8y8+oDkm5N28Z7K0rf++eSHpb0uyXvfXfJ+hS3pndNI+l6JWuCPCTpr076fx1rGEf7q8esEV0L/ElEvAEg/UW/NyJeLKkN+KGk8dlTX0SybsAv0+0/iIhdkjqAeyV9JSKulXR1RJxf5rPeSHLX9nnAgvSY76WvXQCcSzKV9w+BiyU9AvwWcE5ExHRayMbqj3sQZkf3WuBtkh4gmV69C1iavvbTknAAeK+kB0nWEOgp2W8yLwe+GBGjEfEM8F3gxSXvvSUixoAHSE597QUGgJslvRGY1vME2czmgDA7OgHviYjz068lJesvHDi0k3QJyRxDF0XEecD9wIksBTpY8nwUaE7nD7uQZC6mNwBfP4H3N5uSA8LsSPtIJmobdyfwrnSqdSSdNcliQnOB3RFxUNI5JMvCjhseP36C7wO/m17n6CZZ1e6nkxWWrgUyNyLuAP6Y5NSUWSZ8DcLsSA8Bo+mpos+TrFW9mGSOfZGsPHdZmeO+DrwzvU6wnuQ007ibgIck/Swi3lzSfjtwEfAgyQI6fxoRT6cBU85s4N8ktZP0bK45ru/QrAKezdXMzMryKSYzMyvLAWFmZmU5IMzMrCwHhJmZleWAMDOzshwQZmZWlgPCzMzK+v/cmBSCmbewoAAAAABJRU5ErkJggg==\n",
+      "image/png": "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\n",
       "text/plain": [
        "<Figure size 432x288 with 1 Axes>"
       ]
@@ -387,12 +515,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAvDklEQVR4nO3deXxU1fnH8c+TBAhLwhoM+6JIEFGWiPtS0UrdcGkral26aG2rtlbb6s/2V2v7a617rXax2qrVurZarBsatG6oBARZEjbZwpawhgAJWZ7fH3OjQ5hMBshkZpLv+/WaV+bee+6dJyHcJ+ece84xd0dERKShtEQHICIiyUkJQkREIlKCEBGRiJQgREQkIiUIERGJSAlCREQiUoKQVs3MXjGzy5q7rEhbYBoHIcnGzCrCNjsBVUBtsP1td3+i5aMSaXuUICSpmdly4Fvu/kaEYxnuXtPyUaUW/ZxkX6mJSVKGmZ1kZiVm9hMzWwf8zcy6m9l/zKzMzDYH7/uHnfOWmX0reH+5mb1rZncGZZeZ2Zf2sewQM3vbzLaZ2Rtm9oCZPd5I3E3F2MPM/mZma4LjL4Qdm2Rms82s3MyWmtnEYP9yMzslrNwt9Z9vZoPNzM3sm2a2EpgW7H/WzNaZ2dYg9pFh53c0s7vMbEVw/N1g30tmdk2D7+cTMzt3L//5JAUpQUiqyQV6AIOAKwn9Dv8t2B4I7ATuj3L+kcBCoBdwO/Cwmdk+lP0H8BHQE7gFuCTKZzYV498JNaWNBHoD9wCY2XjgMeBHQDfgBGB5lM9p6ERgBHBasP0KMCz4jFlAeFPdncA44BhCP98fA3XAo8DX6guZ2eFAP+ClvYhDUpW766VX0r4I3RBPCd6fBOwCMqOUHw1sDtt+i1ATFcDlwJKwY50AB3L3piyhm3wN0Cns+OPA4zF+T5/FCPQhdCPuHqHcn4F7mvq5BNu31H8+MDiIdWiUGLoFZboSSmA7gcMjlMsENgPDgu07gT8k+vdCr5Z5qQYhqabM3SvrN8ysk5n9OWgaKQfeBrqZWXoj56+rf+PuO4K3XfaybF9gU9g+gFWNBdxEjAOCa22OcOoAYGlj143BZzGZWbqZ3RY0U5XzeU2kV/DKjPRZwc/6aeBrZpYGXEioxiNtgBKEpJqGT1VcDwwHjnT3bELNMACNNRs1h7VADzPrFLZvQJTy0WJcFVyrW4TzVgEHNnLN7YRqNfVyI5QJ/1ldBEwCTiFUaxgcFsMGoDLKZz0KXAxMAHa4+/RGykkrowQhqS6LUPPIFjPrAfw83h/o7iuAQuAWM2tvZkcDZ+1LjO6+llDfwB+Czux2ZlafQB4Gvm5mE8wszcz6mVlecGw2MDkonw98uYmwswg9LryRUGL5dVgMdcBfgbvNrG9Q2zjazDoEx6cTaga7C9Ue2hQlCEl19wIdCf0V/AHwagt97sXA0YRuuL8i1AxT1UjZe4ke4yVANVAMlAI/AHD3j4CvE+q03gr8l1BHN8DPCP3Fvxn4BaFO82geA1YAq4EFQRzhbgDmAjOATcBv2f3+8BgwilBfi7QRGgch0gzM7Gmg2N3jXoNJBDO7FLjS3Y9LdCzSclSDENkHZnaEmR0YNP1MJNS+/0KCw4qLoK/lu8CDiY5FWpYShMi+ySX0WGwFcB/wHXf/OKERxYGZnQaUAetpuhlLWhk1MYmISESqQYiISEQZiQ6gufTq1csHDx6c6DBERFLKzJkzN7h7TqRjrSZBDB48mMLCwkSHISKSUsxsRWPH1MQkIiIRKUGIiEhEShAiIhKREoSIiESkBCEiIhEpQYiISERKECIiEpEShIhIinJ3Xpm7lqc+WhmX67eagXIiIm3Jh59u5DevFDN71RbGDuzGBUcMwKx5F1JUghARSSEL123j9leLKSguJTc7k9vPP4zzx/Vv9uQAShAiIilh7dad3D11Ef+cVULnDhn8ZGIelx8zmI7t0+P2mUoQIiJJbOuOav7w3yU88t5y3OEbxw7he184iO6d28f9s5UgRESSUGV1LY9NX84Dby6lvLKac0f347pTD2ZAj04tFoMShIhIEqmtc174eDV3v76I1Vt2cuLBOfxkYh6H9M1u8ViUIEREkoC789aiMn77SjHF67Yxql9X7vjyYRxzUK+ExaQEISKSYHNWbeG2V4qZ/ulGBvboxO8vHMMZo/qQltb8TybtDSUIEZEEWb5hO3dMXchLn6ylR+f23HLWIVx05CDaZyTHGGYlCBGRFrahoor7Chbzjw9X0i49jWtPPogrThhKVma7RIe2GyUIEZEWsr2qhofeWcaDby+lsqaOyUcM4PsThtE7OzPRoUWkBCEi0oC7s6u2jsrqOqqqa0Nfa0JfK2tqqaquo7K6lsqaBseqa6mqqT9nz/Pmrd7KhopdTByZy48mDufAnC6J/lajUoIQkTbL3SmrqKJ47TaK1pZTvC70dWlZBdW1vs/X7ZCRRoeMNDLbpZPZLv2z96MHdOc7Jx3IuEHdm/G7iJ+4Jggzmwj8DkgHHnL32xocHwg8CnQLytzo7i8Hx24CvgnUAte6+2vxjFVEWreqmlqWlFZQtHYbxWHJYOP2XZ+V6dM1k7zcLE48OIfsju0i3uQz26XRISP0dbf9Gel0aJdG+/S0hD991FziliDMLB14ADgVKAFmmNkUd18QVuynwDPu/kczOwR4GRgcvJ8MjAT6Am+Y2cHuXhuveEWkdXB31pdXUbSuPKxmUM7Ssu3U1oVqBR0y0hiem8WEEb0Z0SebvNxs8nKzWmT6ilQSzxrEeGCJu38KYGZPAZOA8AThQP3wwK7AmuD9JOApd68ClpnZkuB60+MYr4ikmMrqWhavr6BoXXkoEazdRvG6cjbvqP6sTL9uHRnRJ4svHpJLXp8sRvTJZnDPzqS3kr/y4ymeCaIfsCpsuwQ4skGZW4CpZnYN0Bk4JezcDxqc26/hB5jZlcCVAAMHDmyWoEUkOe3cVcuCteXMW72Vuau3Mm/1VhaXVnxWK+jYLp3huVlMPDSXvNxsRvTJZnhuFl07Jtejo6kk0Z3UFwKPuPtdZnY08HczOzTWk939QeBBgPz8/H3vURKRpLK9qoaiteXMDUsGS0orCHIBvbq059B+XTllxAGM7JtNXp9sBvXo1Gra/pNFPBPEamBA2Hb/YF+4bwITAdx9upllAr1iPFdEWoGKqhrmr97KvDWf1w6WllXgQTLIyerAqH5dmXhoHw7tm82o/l3Jzc6MywI5srt4JogZwDAzG0Lo5j4ZuKhBmZXABOARMxsBZAJlwBTgH2Z2N6FO6mHAR3GMVURaQHllNfNXhxLBvDWhZLBsw/bPksEB2aFkcOZhfTi0b1dG9e/KAUk6iKwtiFuCcPcaM7saeI3QI6x/dff5ZnYrUOjuU4Drgb+Y2XWEOqwvd3cH5pvZM4Q6tGuA7+kJJpHP7aqp472lGzjmwJ50yIjfimLN5YkPV/DQO8tYtmH7Z/v6dM3k0H5dOWd0P0b168rIftn0zlIySCbm3jqa7vPz872wsDDRYYjEVV2d8+Ina7hz6kJWbdrJl8f1586vHJ7osKJ6f8kGLn74Q0YP6MaEvN4c2q8rh/brSq8uHRIdmgBmNtPd8yMdS3QntYjE6J3FZdz2SjHz15STl5vFeWP78dzMEsYP6cFX8wc0fYEEKN1WybVPzWZor848/s0j6dxBt5xUon8tkSQ3t2Qrv321mHeXbKBft47cc8HhTDq8Hw6s21rJz16Yx6h+XRnRp+VXHIumts657unZbKus5vFvjVdySEHJMem4iOxhxcbtXPPkx5x1/7vMW7OVn54xgmk3nMi5Y/qTlmakpxm/mzyG7I7t+N4Ts9hWWd30RVvQA28u4b0lG7l10kjycpMreUlslNJFksyGiirun7aEJz5cQXqa8b0vHMi3TzyQ7AhrBeRkdeD3F47hor98wE3/msvvLxyTFI9/Tl+6kXvfWMQ5o/smbfOXNE0JQiRJNFwr4Kv5A/jBKcOafMzzqKE9ueG04dz+6kKOHNKDS44e3DIBN6JsWxXXPvUxg3t15v/OHZUUCUv2jRKECFC0tpy7pi5kadl2xg3qzvghPThqSE8G9OgY9xtcdW0dT320kt8VLP5srYAbThvOQb1jXyvgqhMOZMayTfzyP0UcPqAbh/XvFr+Ao6jvdyjfWc1j31C/Q6rTY67SppVs3sHdry/i+Y9Xk9Uhg/zBPZi1cjNbgsnecrMzGT+kB0cO7cGRQ3pwYE6XZksY7s5Lc9dy52sLWb5xB+MH9+DG0/MYO3Df1grYvH0XZ9z3DmlpxkvXHE/XTi0/B9HvCxZz1+uL+M15o7hwvOZHSwV6zFWkgc3bd/GHt5bw6PsrwODKE4by3RMPomundtTVOYtLK/ho2UY+XLaJ6Z9uZMqc0ETDPTu3Z/yQHqGkMaQneblZ+zT/z/tLN3DbK8V8UrKV4Qdk8dfL8/nC8N77lXy6d27P/ReP5at/ms4Nz83hwUvGtWjzzgefbuSeNxYxaXRfJh+hfofWQDUIaVMqq2v523vL+cNbS9heVcP5Y/tz3akH07dbx0bPcXeWb9wRShifbuLDZZtYvWUnANmZGRwxOFTDGD+kJyP7ZtMuvfGHAxesKee3rxbz30Vl9O2ayQ+/OJxzx/Rr1qmnH353Gb/8zwJ+esYIvnX80Ga7bjQbKqo4/Xfv0KVDBlOuOY4ualpKGapBSJtXU1vHP2eVcM/ri1lXXsmEvN78eGIew3OzmjzXzBjSqzNDenXmgiNCzSYlm3fw0bJNn70KiksB6NQ+nXGDunPkkFDCOHxAVzpkpLNqU6gp64XZq8nObMfNp4/gkqMHkdmu+afJ+Maxg5mxbBO3vVLMmIHdGDeoR7N/Rri6oN9hy85qHvn6eCWHVkQ1CGnV3J03ikq5/dViFpdWMHpAN276Uh5HDu3ZrJ9TWl7JR8tDyeLDTzexcP02ANpnpDGybzbzV5djBl8/dgjfOenAuK9RUF5ZzZn3vcuumjpeuvY4esZxWosH3lzCHa8t5NfnjuKiI9XvkGqi1SCUIKTVmrki9Ff0jOWbGdqrMz+eOJzTRua2SLv85u27mLE81Bw1a+Vmhh+QxfdPGUafro03ZTW3eau3ct4f3+eooT155PIj4rJWwkfLNjH5wemccVhf7ps8Wo+0piAlCGlTlpRWcPurxUxdsJ6crA784JRhfDV/QNS+gdbqiQ9XcPPz87jhiwdz9cnDmvXaGyuqOP2+d+jUPoMpVx9LVoSBfJL81AchbcL68krufWMRT89YRaf2GVx/6sF88/ghdGrfdn/NLxo/kI+WbeLu1xcxdlB3jjmwV7Nct67Oue6ZOWzeUc1fLz9CyaGVarv/c6TVKK+s5s//XcrD7y6jts659OjBXHPyQXFtd08VZsavzx3FvNVbufbJ2bz8/eOaZc2FP729lLcXlfGrcw5lZN+uzRCpJKO2V+eWVqOqppaH313Gibe/yQNvLuW0kbkU/PAkbjl7pJJDmM4dMvjDxeOoqKrm2ic/pqa2br+uN2P5Ju6auogzD+vDxeqUbtVUg5CUU1fn/HvOau58bRGrt+zkuIN6ceOX8ji0n/6Sbczw3Cx+dc4obnh2Dve+sZgbThu+T9fZtH0X1/zjYwZ078hvztM8S62dEoSknF+/XMRD7y5jZN9sbjt/FMcPy0l0SCnhy+P6M2PZJu5/cwnjBnfnC8N779X5dXXOD5+Zzabtu/jXd49Rv0MboCYmSSnPzFjFQ+8u45KjBvHi1ccpOeylX0waSV5uFj98ejZrgtHgsXrwnU95a2EZPzvrENXW2gglCEkZM5Zv4uYX5nLcQb34+VmHxOW5/tYus106f7h4LLtq6rj6H7OojrE/onD5Ju54bSFnjOrD19Tv0GYoQUhKWLVpB9/++0wGdO/EAxeNJaMNjmloLkNzunDb+Ycxa+UWbn+1uMnym7fv4ponP6Z/94785nz1O7Ql+l8mSa+iqoYrHiukpraOhy7LT8g01q3NWYf35dKjB/GXd5Yxdf66RsvV1TnXPzuHjRW7eOCisRFXtZPWSwlCklpdnfODp2azuLSCBy4ey9Cc2BfRkehuPmMEh/XvyvXPzmHlxh0Ry/zlnU+ZVlzKT88coX6HNkgJQpLaHVMX8kbRen52xgh1SDezDhnpPHDRWAz47j9mUlldu9vxmSs2cftrCzl9VC6XHDUoMUFKQilBSNJ6/uMS/vjWUi46ciCXHTM40eG0SgN6dOKur45m3upy/u+los/2bw7GO/Tr1pHbzj9M/Q5tlBKEJKVZKzfzk3/O5aihPfjF2SN1g4qjUw85gCtPGMrfP1jBlDlrcHdueHYOG9Tv0OZpoJwknTVbdnLlYzPJzc7kjxePa5OzsLa0H502nJkrNnPTPz9h1orNFBSX8ouzRzKqv/od2jL9z5OksmNX6ImlyupaHr4sn+6d2yc6pDahXXoa9180hvYZaTzy/nImjszl0qPV79DWxTVBmNlEM1toZkvM7MYIx+8xs9nBa5GZbQk7druZzTezIjO7z9TG0OrV1TnXPzOHBWvL+f2FYxh2QNPLgUrz6dO1I3/82jjOPKwPv/2y+h0kjk1MZpYOPACcCpQAM8xsirsvqC/j7teFlb8GGBO8PwY4FjgsOPwucCLwVrzilcS7t2Axr8xbx82nj+ALeXs3T5A0j6OG9uSoZl6OVVJXPGsQ44El7v6pu+8CngImRSl/IfBk8N6BTKA90AFoB6yPY6ySYC/OWcN9BYv5yrj+fOv4IYkOR0SIb4LoB6wK2y4J9u3BzAYBQ4BpAO4+HXgTWBu8XnP3ogjnXWlmhWZWWFZW1szhS0v5pGQLNzw7h/xB3fnVuYeqaUMkSSRLJ/Vk4Dl3rwUws4OAEUB/QknlZDM7vuFJ7v6gu+e7e35OjgZRpaL15ZVc8Vghvbp04E+XjKNDRnqiQxKRQDwTxGpgQNh2/2BfJJP5vHkJ4FzgA3evcPcK4BXg6LhEKQlTWV3LlY8Vsq2yhocuy6eXVoETSSrxTBAzgGFmNsTM2hNKAlMaFjKzPKA7MD1s90rgRDPLMLN2hDqo92hiktTl7vz4uU/4ZPVW7r1gNCP6ZCc6JBFpIG4Jwt1rgKuB1wjd3J9x9/lmdquZnR1WdDLwlLt72L7ngKXAXGAOMMfdX4xXrNLyHnhzCVPmrOFHpw3niyNzEx2OiERgu9+XU1d+fr4XFhYmOgyJwavz1nHV4zM5Z3Rf7rlgtDqlRRLIzGa6e36kY8nSSS1txPw1W7nu6dmMHtBNk8CJJDklCGkxZduquOLRQrp1aseDl44js52eWBJJZpqsT1pEVU0t3/57IZt27OK5q46hd1ZmokMSkSaoBiFAaJK8DRVV1NU1f5+Uu3PTv+Yya+UW7v7qaK1MJpIiVIMQ3J1zHniPResryEgzcrI60Ds7k95ZHTgguwO9szI/+9o7+Nqzc3vS0mLrP3jw7U/516zVXHfKwZw+qk+cvxsRaS5KEMLSsgoWra/gvDH9yO2ayfryKkq3VbJy4w4Kl29i847qPc7JSDN6dQklkJwggRzwWVLJJCf4OnvVFm57tZgzDuvDtRMOSsB3JyL7SglCKCgqBeBHE4fTp2vHPY5X1dRStq2K9eVVlG2r/CyBhL5WUbJ5B7NWbmbT9l0Rrz+qX1fu/PLhemJJJMUoQQgFxaUc0ic7YnKA0OL2/bt3on/3TlGvs6umjrKKKtaXV1IaJJGKqhq+Mm4AHdvriSWRVKME0cZt2bGLmSs2892TDtzva7XPSKNft4706xY50YhIamk0QZjZeTGcX+nuLzdjPNLC/ruojNo6Z8KIAxIdiogkmWg1iL8A/waiNRyfAChBpLCColJ6dWnPYXr0VEQaiJYgXnH3b0Q72cweb+Z4pAXV1Nbx1sJSThuZG/MjqyLSdjQ6UM7dv9bUybGUkeRVuGIz5ZU1TBih9Z9FZE8xj6Q2s4PM7HEz+6eZafGeVmBacSnt09M4bphW4xORPUXrpM5098qwXb8Efhy8fxEYHce4pAUUFK3nyKE96NJBD7OJyJ6i1SBeNLNLw7argcHAIKA2nkFJ/C3fsJ2lZduZkKfmJRGJLFqCmAhkm9mrZnYCcANwGqH1oi9uieAkfqYVh0ZPn5ynx1tFJLJG2xbcvRa438z+DvwM+A7wU3df2lLBSfwUFK9nWO8uDOwZfXS0iLRd0fogjgR+BOwCfg3sBP7PzFYDv3T3LS0SoTS7bZXVfPjpJr55/JBEhyIiSSxa7+SfgdOBLsDf3P1YYLKZnQg8Tai5SVLQO4s3UFPnnKLR0yISRbQEUUOoU7ozoVoEAO7+X+C/8Q1L4qmgqJRundoxZkC3RIciIkksWoK4CPg2oeRwaZRykkJq65w3F5Zy0sE5ZKRrQUERaVy0TupFwPUtGIu0gNmrtrBp+y5OVvOSiDSh0T8hzew/TZ0cSxlJLtOK15OeZpx4sEZPi0h00ZqYjjOzKVGOG3BIM8cjcVZQVMoRg7vTtWO7RIciIkkuWoKYFMP5kdeYlKRUsnkHxeu2cfPpIxIdioikgGh9EHpSqZV5s370tGZvFZEY6DGWNqSguJTBPTsxtFfnRIciIikgrgnCzCaa2UIzW2JmN0Y4fo+ZzQ5ei8xsS9ixgWY21cyKzGyBmQ2OZ6yt3Y5dNby/dCMTRhyAmRYHEpGmNTnPs5mdBbzk7nV7c2EzSwceAE4FSoAZZjbF3RfUl3H368LKXwOMCbvEY8D/ufvrZtYF2KvPl929t2Qju2rqNHuriMQslhrEBcBiM7vdzPL24trjgSXu/qm77wKeInrH94XAkwBmdgiQ4e6vA7h7hbvv2IvPlgYKitaT1SGD/ME9Eh2KiKSIJhNEsKzoGGAp8IiZTTezK80sq4lT+wGrwrZLgn17MLNBwBBgWrDrYGCLmf3LzD42szuCGknD8640s0IzKywrK2vqW2mz6uqcacWlnHBwDu0z1O0kIrGJ6W7h7uXAc4RqAX0IrQkxK2gWag6TgeeCKcYh1PR1PKE1KI4AhgKXR4jrQXfPd/f8nBwN/GrM/DXllG6r4mQ1L4nIXmgyQZjZ2Wb2PPAW0A4Y7+5fAg4n+lQcq4EBYdv9g32RTCZoXgqUALOD5qka4AVgbFOxSmQFxesxgy8oQYjIXohlMeLzgXvc/e3wne6+w8y+GeW8GcAwMxtCKDFMJjQB4G6Cfo3uwPQG53Yzsxx3LwNOBgpjiFUiKCgqZezA7vTo3D7RoYhIComliekW4KP6DTPrWP/IqbsXNHZS8Jf/1cBrQBHwjLvPN7NbzezssKKTgafc3cPOrSXUvFRgZnMJTevxl1i/Kfnc+vJK5q7equYlEdlrsdQgngWOCduuDfYd0dSJ7v4y8HKDff/bYPuWRs59HTgshvgkivrR0xM0elpE9lIsNYiM4DFVAIL3aqtIEQXFpfTr1pHhBzT10JmIyO5iSRBl4U1CZjYJ2BC/kKS5VFbX8u7iDUwY0Vujp0Vkr8XSxHQV8ISZ3U+oL2AVWmEuJUz/dCM7q2vV/yAi+6TJBOHuS4GjgukucPeKuEclzWJaUSkd26Vz1NCeiQ5FRFJQLDUIzOwMYCSQWd9U4e63xjEu2U/uodHTxw3rRWa7PQahi4g0KZaBcn8iNB/TNYSamL4CDIpzXLKfFq7fxuotOzlFTy+JyD6KpZP6GHe/FNjs7r8AjiY0V5IksYKi0OOtXxiuBCEi+yaWBFEZfN1hZn2BakLzMUkSKyhaz2H9u9I7OzPRoYhIioolQbxoZt2AO4BZwHLgH3GMSfbTxooqPl61RU8vich+idpJbWZpQIG7bwH+aWb/ATLdfWtLBCf75q2FZbjDhLwDEh2KiKSwqDWIYBW5B8K2q5Qckl9B8XoOyO7Aof2yEx2KiKSwWJqYCszsfNNQ3JSwq6aOtxdt4OQ8jZ4Wkf0TS4L4NqHJ+arMrNzMtplZeZzjkn00Y/kmKqpqOFnNSyKyn2IZSa1Z3lJIQVEp7TPSOPYgjZ4Wkf3TZIIwsxMi7W+4gJAknrtTULyeYw/sSaf2MQ2SFxFpVCx3kR+Fvc8ExgMzCa3yJklkadl2VmzcwbeOH5roUESkFYiliems8G0zGwDcG6+AZN9NK14PoPEPItIsYumkbqgEGNHcgcj+KygqJS83i37dOiY6FBFpBWLpg/g9UL9edBowmtCIakkiW3dUU7hiM1edqOYlEWkesfRBFIa9rwGedPf34hSP7KO3FpVSW+dMGKHHW0WkecSSIJ4DKt29FsDM0s2sk7vviG9osjemFZfSs3N7Du/fLdGhiEgrEdNIaiC8Ubsj8EZ8wpF9UVNbx1sLyzhpeG/S0zR6WkSaRywJIjN8mdHgfaf4hSR7a9bKLWzdWc0ELQ4kIs0olgSx3czG1m+Y2ThgZ/xCkr1VULSedunG8cN6JToUEWlFYumD+AHwrJmtIbTkaC6hJUglSRQUl3LkkJ5kZbZLdCgi0orEMlBuhpnlAcODXQvdvTq+YUmsVmzczpLSCi4aPzDRoYhIK9NkE5OZfQ/o7O7z3H0e0MXMvhv/0CQW04pDa0+r/0FEmlssfRBXBCvKAeDum4Er4haR7JWColIOzOnMoJ6dEx2KiLQysSSI9PDFgswsHWgfy8XNbKKZLTSzJWZ2Y4Tj95jZ7OC1yMy2NDiebWYlZnZ/LJ/X1myrrObDZRs5RYPjRCQOYumkfhV42sz+HGx/O9gXVZBIHgBOJTR/0wwzm+LuC+rLuPt1YeWvAcY0uMwvAU0r3oh3F2+gutY1OZ+IxEUsNYifANOA7wSvAnafArwx44El7v6pu+8CngImRSl/IfBk/UbwOO0BwNQYPqtNKiguJTszg3GDuic6FBFphZpMEO5e5+5/cvcvu/uXgQXA72O4dj9gVdh2SbBvD2Y2CBhCKBFhZmnAXcAN0T7AzK40s0IzKywrK4shpNajts55s7iUk4b3JiN9XyblFRGJLqY7i5mNMbPbzWw5cCtQ3MxxTAaeq5/vCfgu8LK7l0Q7yd0fdPd8d8/Pyclp5pCS25ySLWzcvktPL4lI3DTaB2FmBxNq9rkQ2AA8DZi7fyHGa68GBoRt9w/2RTIZ+F7Y9tHA8cHjtF2A9mZW4e57dHS3VdOKSklPM048uG0lRhFpOdE6qYuBd4Az3X0JgJldF6V8QzOAYWY2hFBimAxc1LBQMAivOzC9fp+7Xxx2/HIgX8lhdwXFpYwb1J1unWJ6oExEZK9Fa2I6D1gLvGlmfzGzCYSm2oiJu9cAVwOvAUXAM+4+38xuNbOzw4pOBp5yd490HdnTmi07KVpbzgQ9vSQicdRoDcLdXwBeMLPOhJ4++gHQ28z+CDzv7k0+XeTuLwMvN9j3vw22b2niGo8AjzT1WW1JgUZPi0gLiOUppu3u/g93P4tQP8LHhB59lQSZVrSeQT07cWBOl0SHIiKt2F49H+num4MnhybEKyCJbseuGt5bupGT83oTNsBdRKTZ6QH6FPP+ko3sqqljQp6m1xCR+FKCSDHPzSyhS4cMxg/pkehQRKSVU4JIIW8Wl/Lq/HVccfxQ2mfon05E4kt3mRSxY1cNP31hHgfmdOaqk4YmOhwRaQNimc1VksDv3ljM6i07efrKo+iQkZ7ocESkDVANIgUsWFPOQ+8u44L8ARw5tGeiwxGRNkIJIsnV1jk3PT+Xbh3bcdPpeYkOR0TaECWIJPfEhyuYs2oLPzvzEM27JCItSgkiia0vr+T2Vxdy3EG9mDS6b6LDEZE2Rgkiif3ixflU19bxq3MO1ahpEWlxShBJqqBoPS/PXce1E4YxuFfnRIcjIm2QEkQS2l5Vw//+ez7DenfhiuM15kFEEkPjIJLQvW8sYvWWnTx71dEaMS0iCaO7T5KZt3orf31vOReOH8gRgzXfkogkjhJEEqmtc/7n+bl079SOGydqzIOIJJYSRBL5+/TlfFKylZ+deQhdO7VLdDgi0sYpQSSJtVt3cufURZxwcA5nH64xDyKSeEoQSeKWKcGYh0ka8yAiyUEJIglMnb+O1+av5/unDGNgz06JDkdEBFCCSLiKqhp+PmU+ww/I0pgHEUkqGgeRYHdPXcTarZXcf9FY2qUrX4tI8tAdKYHmlmzlkfeXcfGRAxk3qHuiwxER2Y0SRILU1NZx0/Of0LNLB36sMQ8ikoSUIBLksekrmLe6nJ+fdQhdO2rMg4gkHyWIBFizZSd3TV3IScNzOGNUn0SHIyISUVwThJlNNLOFZrbEzG6McPweM5sdvBaZ2ZZg/2gzm25m883sEzO7IJ5xtrSfT5lPrTu/1JgHEUlicXuKyczSgQeAU4ESYIaZTXH3BfVl3P26sPLXAGOCzR3Ape6+2Mz6AjPN7DV33xKveFvKa/PX8fqC9dz0pTwG9NCYBxFJXvGsQYwHlrj7p+6+C3gKmBSl/IXAkwDuvsjdFwfv1wClQE4cY20R2yqr+fm/55OXm8U3jhuS6HBERKKKZ4LoB6wK2y4J9u3BzAYBQ4BpEY6NB9oDS+MQY4u6a+oi1m+r5DfnjdKYBxFJeslyl5oMPOfuteE7zawP8Hfg6+5e1/AkM7vSzArNrLCsrKyFQt03c1Zt4dHpy7nkqEGMGagxDyKS/OKZIFYDA8K2+wf7IplM0LxUz8yygZeAm939g0gnufuD7p7v7vk5OcnbAlVTW8f/PD+XnC4duOG04YkOR0QkJvFMEDOAYWY2xMzaE0oCUxoWMrM8oDswPWxfe+B54DF3fy6OMbaIR95fzvw15dxy9kiyMzXmQURSQ9wShLvXAFcDrwFFwDPuPt/MbjWzs8OKTgaecncP2/dV4ATg8rDHYEfHK9Z4Ktm8g7umLmJCXm++dGhuosMREYmZ7X5fTl35+fleWFiY6DB24+5869FC3l+6kdd/eAL9u+uxVhFJLmY2093zIx1Llk7qVunVeesoKC7lh6cerOQgIilHCSJOyiurueXF+RzSJ5uvHzs40eGIiOw1rQcRB3V1zg3PzKFsWxUPXpJPhsY8iEgK0p0rDu59YxFTF6znp2ccwuEDuiU6HBGRfaIE0cxe+mQt901bwlfG9VfTkoikNCWIZjR/zVZueHYOYwd241fnaqZWEUltShDNZENFFVc+NpNundrxp0vG0SEjPdEhiYjsF3VSN4NdNXV85/GZbKio4rmrjqF3VmaiQxIR2W9KEPvJ3fn5lPnMWL6Z300ezaj+XRMdkohIs1AT0356/IMVPPnRSr570oFMGh1xNnMRkZSkBLEf3l+6gVteXMCEvN7c8EXN0ioirYsSxD5auXEH33tiFkN6debeyaNJS9MTSyLSuihB7IOKqhqueKyQOoeHLs0nS1N4i0grpE7qvVRX5/zw6dksKavg0a+PZ3CvzokOSUQkLlSD2Ev102jcfPoIjhvWK9HhiIjEjRLEXqifRuOr+ZpGQ0RaPyWIGNVPozFuUHd+eY6m0RCR1k8JIgbh02j88WtjNY2GiLQJ6qRugqbREJG2SgkiCk2jISJtmZqYotA0GiLSlilBNELTaIhIW6cEEYGm0RARUYLYg6bREBEJUSd1GE2jISLyOdUgwmgaDRGRzylBBDSNhojI7pQg0DQaIiKRxDVBmNlEM1toZkvM7MYIx+8xs9nBa5GZbQk7dpmZLQ5el8UrRk2jISISWdw6qc0sHXgAOBUoAWaY2RR3X1Bfxt2vCyt/DTAmeN8D+DmQDzgwMzh3c3PHmZFm5OVm8YNTDtY0GiIiYeJZgxgPLHH3T919F/AUMClK+QuBJ4P3pwGvu/umICm8DkyMR5DdOrXn4cuP0DQaIiINxDNB9ANWhW2XBPv2YGaDgCHAtL0518yuNLNCMyssKytrlqBFRCQkWTqpJwPPuXvt3pzk7g+6e7675+fk5MQpNBGRtimeCWI1MCBsu3+wL5LJfN68tLfniohIHMQzQcwAhpnZEDNrTygJTGlYyMzygO7A9LDdrwFfNLPuZtYd+GKwT0REWkjcnmJy9xozu5rQjT0d+Ku7zzezW4FCd69PFpOBp9zdw87dZGa/JJRkAG51903xilVERPZkYffllJafn++FhYWJDkNEJKWY2Ux3z490LFk6qUVEJMkoQYiISEStponJzMqAFftxiV7AhmYKJ95SKVZIrXhTKVZIrXhTKVZIrXj3J9ZB7h5xnECrSRD7y8wKG2uHSzapFCukVrypFCukVrypFCukVrzxilVNTCIiEpEShIiIRKQE8bkHEx3AXkilWCG14k2lWCG14k2lWCG14o1LrOqDEBGRiFSDEBGRiJQgREQkojafIJpaFjWZmNkAM3vTzBaY2Xwz+36iY2qKmaWb2cdm9p9Ex9IUM+tmZs+ZWbGZFZnZ0YmOqTFmdl3wOzDPzJ40s6RaDtHM/mpmpWY2L2xfDzN7PVhG+PVgIs6EayTWO4Lfg0/M7Hkz65bAEHcTKd6wY9ebmZtZr+b4rDadIMKWRf0ScAhwoZkdktiooqoBrnf3Q4CjgO8lebwA3weKEh1EjH4HvOruecDhJGncZtYPuBbId/dDCU2GOTmxUe3hEfZcBfJGoMDdhwEFwXYyeIQ9Y30dONTdDwMWATe1dFBRPEKEFTbNbAChma9XNtcHtekEwd4vi5pQ7r7W3WcF77cRuoFFXKUvGZhZf+AM4KFEx9IUM+sKnAA8DODuu9x9S0KDii4D6GhmGUAnYE2C49mNu78NNJyBeRLwaPD+UeCcloypMZFidfep7l4TbH5AaE2apNDIzxbgHuDHQLM9edTWE0TMy6ImGzMbDIwBPkxwKNHcS+gXti7BccRiCFAG/C1oEnvIzDonOqhI3H01cCehvxTXAlvdfWpio4rJAe6+Nni/DjggkcHshW8AryQ6iGjMbBKw2t3nNOd123qCSElm1gX4J/ADdy9PdDyRmNmZQKm7z0x0LDHKAMYCf3T3McB2kqcJZDdB2/0kQkmtL9DZzL6W2Kj2TrD+S9I/Y29mNxNq2n0i0bE0xsw6Af8D/G9zX7utJ4iUW9rUzNoRSg5PuPu/Eh1PFMcCZ5vZckJNdyeb2eOJDSmqEqDE3etrZM8RShjJ6BRgmbuXuXs18C/gmATHFIv1ZtYHIPhamuB4ojKzy4EzgYvDFzRLQgcS+mNhTvD/rT8wy8xy9/fCbT1BxLQsarIwMyPURl7k7ncnOp5o3P0md+/v7oMJ/VynuXvS/pXr7uuAVWY2PNg1AViQwJCiWQkcZWadgt+JCSRph3oDU4DLgveXAf9OYCxRmdlEQs2jZ7v7jkTHE427z3X33u4+OPj/VgKMDX6n90ubThBBJ1T9sqhFwDPuPj+xUUV1LHAJob/GZwev0xMdVCtyDfCEmX0CjAZ+ndhwIgtqOc8Bs4C5hP4fJ9W0EGb2JKF15oebWYmZfRO4DTjVzBYTqgXdlsgY6zUS6/1AFvB68P/sTwkNMkwj8cbns5K75iQiIonSpmsQIiLSOCUIERGJSAlCREQiUoIQEZGIlCBERCQiJQiRgJlVBF8Hm9lFzXzt/2mw/X5zXl8kHpQgRPY0GNirBBFMmhfNbgnC3VNh5LO0cUoQInu6DTg+GCB1XbCmxR1mNiNYH+DbAGZ2kpm9Y2ZTCEZdm9kLZjYzWKvhymDfbYRmXp1tZk8E++prKxZce56ZzTWzC8Ku/VbY+hRPBKOmMbPbLLQmyCdmdmeL/3SkzWjqrx6RtuhG4AZ3PxMguNFvdfcjzKwD8J6Z1c+eOpbQugHLgu1vuPsmM+sIzDCzf7r7jWZ2tbuPjvBZ5xEatX040Cs45+3g2BhgJKGpvN8DjjWzIuBcIM/dPZkWspHWRzUIkaZ9EbjUzGYTml69JzAsOPZRWHIAuNbM5hBaQ2BAWLnGHAc86e617r4e+C9wRNi1S9y9DphNqOlrK1AJPGxm5wFJPU+QpDYlCJGmGXCNu48OXkPC1l/Y/lkhs5MIzTF0tLsfDnwM7M9SoFVh72uBjGD+sPGE5mI6E3h1P64vEpUShMiethGaqK3ea8B3gqnWMbODG1lMqCuw2d13mFkeoWVh61XXn9/AO8AFQT9HDqFV7T5qLLBgLZCu7v4ycB2hpimRuFAfhMiePgFqg6aiRwitVT2Y0Bz7RmjluXMinPcqcFXQT7CQUDNTvQeBT8xslrtfHLb/eeBoYA6hBXR+7O7rggQTSRbwbzPLJFSz+eE+fYciMdBsriIiEpGamEREJCIlCBERiUgJQkREIlKCEBGRiJQgREQkIiUIERGJSAlCREQi+n+aW9JmVieV2QAAAABJRU5ErkJggg==\n",
+      "image/png": "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\n",
       "text/plain": [
        "<Figure size 432x288 with 1 Axes>"
       ]
@@ -410,16 +538,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "0.8088106689986883"
+       "0.7945513287664577"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -430,7 +558,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -442,14 +570,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## (Option 2) Load Pre-Trained Parameters <a id=\"load_pretrained\"></a>\n",
+    "## (Option 2, faster) Load Pre-Trained Parameters <a id=\"load_pretrained\"></a>\n",
     "\n",
     "Instead of training from scratch, you can also use pre-trained parameters we provide here. These parameters should achieve ~91.9% test accuracy."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -458,7 +586,7 @@
        "IncompatibleKeys(missing_keys=[], unexpected_keys=[])"
       ]
      },
-     "execution_count": 16,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -473,7 +601,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 20,
    "metadata": {
     "scrolled": true
    },
@@ -484,7 +612,7 @@
        "0.9188772287810328"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -497,7 +625,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Network Surgery Before Export <a id=\"network_surgery\"></a>\n",
+    "# Network Surgery Before Export <a id=\"network_surgery\"></a>\n",
     "\n",
     "Sometimes, it's desirable to make some changes to our trained network prior to export (this is known in general as \"network surgery\"). This depends on the model and is not generally necessary, but in this case we want to make a couple of changes to get better results with FINN."
    ]
@@ -511,7 +639,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
@@ -520,7 +648,7 @@
        "(64, 593)"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -536,7 +664,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -545,7 +673,7 @@
        "(64, 600)"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -560,7 +688,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
@@ -569,7 +697,7 @@
        "torch.Size([64, 600])"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -592,7 +720,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -620,7 +748,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -650,7 +778,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
@@ -659,7 +787,7 @@
        "0.9188772287810328"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -672,14 +800,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Export to FINN-ONNX <a id=\"export_finn_onnx\" ></a>\n",
+    "# Export to FINN-ONNX <a id=\"export_finn_onnx\" ></a>\n",
     "\n",
     "FINN expects an ONNX model as input. We'll now export our network into ONNX to be imported and used in FINN for the next notebooks. Note that the particular ONNX representation used for FINN differs from standard ONNX, you can read more about this [here](https://finn.readthedocs.io/en/latest/internals.html#intermediate-representation-finn-onnx)."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 27,
    "metadata": {
     "scrolled": true
    },
@@ -714,7 +842,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## View the Exported ONNX in Netron <a id=\"view_in_netron\" ></a>\n",
+    "## View the Exported ONNX in Netron\n",
     "\n",
     "Let's examine the exported ONNX model with Netron. Particular things of note:\n",
     "\n",
@@ -727,7 +855,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [
     {
@@ -744,17 +872,17 @@
        "        <iframe\n",
        "            width=\"100%\"\n",
        "            height=\"400\"\n",
-       "            src=\"http://0.0.0.0:8081/\"\n",
+       "            src=\"http://localhost:8081/\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "        ></iframe>\n",
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7f3a74f3a5c0>"
+       "<IPython.lib.display.IFrame at 0x7f8a808b3b70>"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
diff --git a/notebooks/end2end_example/cybersecurity/2-export-to-finn-and-verify.ipynb b/notebooks/end2end_example/cybersecurity/2-export-to-finn-and-verify.ipynb
index 358615dbe..0f69019a3 100644
--- a/notebooks/end2end_example/cybersecurity/2-export-to-finn-and-verify.ipynb
+++ b/notebooks/end2end_example/cybersecurity/2-export-to-finn-and-verify.ipynb
@@ -93,14 +93,14 @@
        "        <iframe\n",
        "            width=\"100%\"\n",
        "            height=\"400\"\n",
-       "            src=\"http://0.0.0.0:8081/\"\n",
+       "            src=\"http://localhost:8081/\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "        ></iframe>\n",
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7fc1fc950748>"
+       "<IPython.lib.display.IFrame at 0x7fe10c830e48>"
       ]
      },
      "execution_count": 3,
@@ -124,7 +124,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -145,6 +145,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "**Would the FINN compiler still work if we didn't do this?** The compilation step in the next notebook applies these transformations internally and would work fine, but we're going to use FINN's verification capabilities below and these require the tidy-up transformations.\n",
+    "\n",
     "There's one more thing we'll do: we will mark the input tensor datatype as bipolar, which will be used by the compiler later on. \n",
     "\n",
     "*In the near future it will be possible to add this information to the model while exporting, instead of having to add it manually.*"
@@ -152,7 +154,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
@@ -213,14 +215,14 @@
        "        <iframe\n",
        "            width=\"100%\"\n",
        "            height=\"400\"\n",
-       "            src=\"http://0.0.0.0:8081/\"\n",
+       "            src=\"http://localhost:8081/\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "        ></iframe>\n",
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7fc280154278>"
+       "<IPython.lib.display.IFrame at 0x7fe10a956e80>"
       ]
      },
      "execution_count": 6,
@@ -245,7 +247,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -254,22 +256,30 @@
        "torch.Size([100, 593])"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "from torch.utils.data import DataLoader, Dataset\n",
-    "from dataloader_quantized import UNSW_NB15_quantized\n",
+    "import numpy as np\n",
+    "from torch.utils.data import TensorDataset\n",
     "\n",
-    "test_quantized_dataset = UNSW_NB15_quantized(file_path_train='UNSW_NB15_training-set.csv', \\\n",
-    "                                              file_path_test = \"UNSW_NB15_testing-set.csv\", \\\n",
-    "                                              train=False)\n",
+    "def get_preqnt_dataset(data_dir: str, train: bool):\n",
+    "    unsw_nb15_data = np.load(data_dir + \"/unsw_nb15_binarized.npz\")\n",
+    "    if train:\n",
+    "        partition = \"train\"\n",
+    "    else:\n",
+    "        partition = \"test\"\n",
+    "    part_data = unsw_nb15_data[partition].astype(np.float32)\n",
+    "    part_data = torch.from_numpy(part_data)\n",
+    "    part_data_in = part_data[:, :-1]\n",
+    "    part_data_out = part_data[:, -1]\n",
+    "    return TensorDataset(part_data_in, part_data_out)\n",
     "\n",
     "n_verification_inputs = 100\n",
-    "# last column is the label, exclude it\n",
-    "input_tensor = test_quantized_dataset.data[:n_verification_inputs,:-1]\n",
+    "test_quantized_dataset = get_preqnt_dataset(\".\", False)\n",
+    "input_tensor = test_quantized_dataset.tensors[0][:n_verification_inputs]\n",
     "input_tensor.shape"
    ]
   },
@@ -282,7 +292,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
@@ -291,7 +301,7 @@
        "IncompatibleKeys(missing_keys=[], unexpected_keys=[])"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -335,7 +345,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -365,7 +375,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -395,14 +405,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "ok 100 nok 0: 100%|██████████| 100/100 [00:46<00:00,  2.17it/s]\n"
+      "ok 100 nok 0: 100%|██████████| 100/100 [00:47<00:00,  2.11it/s]\n"
      ]
     }
    ],
@@ -431,7 +441,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
-- 
GitLab