From 02b136f0a9e508c0858b3220896253500bcedf82 Mon Sep 17 00:00:00 2001
From: Prayag Thakur <114804510+PrAyAg9@users.noreply.github.com>
Date: Sat, 26 Oct 2024 12:04:55 +0530
Subject: [PATCH 1/3] Added Asthtma Prediciton
---
.../Ashtma_Attack_Pred.ipynb | 568 ++++++++++++++++++
.../Asthamapred_dataset.csv | 55 ++
.../Ashtma Attack Prediction/README.md | 101 ++++
3 files changed, 724 insertions(+)
create mode 100644 Prediction Models/Ashtma Attack Prediction/Ashtma_Attack_Pred.ipynb
create mode 100644 Prediction Models/Ashtma Attack Prediction/Asthamapred_dataset.csv
create mode 100644 Prediction Models/Ashtma Attack Prediction/README.md
diff --git a/Prediction Models/Ashtma Attack Prediction/Ashtma_Attack_Pred.ipynb b/Prediction Models/Ashtma Attack Prediction/Ashtma_Attack_Pred.ipynb
new file mode 100644
index 000000000..1d952a0dc
--- /dev/null
+++ b/Prediction Models/Ashtma Attack Prediction/Ashtma_Attack_Pred.ipynb
@@ -0,0 +1,568 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "aZW8c2uAjZhI",
+ "outputId": "098dffb7-f29d-49da-88c2-2dea1120fc88"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2.16.0-rc0\n"
+ ]
+ }
+ ],
+ "source": [
+ "import tensorflow as tf\n",
+ "from tensorflow import keras\n",
+ "from tensorflow.keras import layers\n",
+ "from tensorflow.keras import Sequential\n",
+ "from tensorflow.keras.layers import Flatten, Dense\n",
+ "from tensorflow.keras.layers import Conv1D,MaxPooling1D\n",
+ "from tensorflow.keras.optimizers import Adam\n",
+ "from tensorflow.keras.layers import Input\n",
+ "import warnings\n",
+ "warnings.filterwarnings(\"ignore\")\n",
+ "\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "from sklearn import metrics\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "print(tf.__version__)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Height | \n",
+ " Gender | \n",
+ " Outdoor Temperature | \n",
+ " Humidity | \n",
+ " PM 2.5 | \n",
+ " PM 10 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 19 | \n",
+ " 155 | \n",
+ " 1 | \n",
+ " 33 | \n",
+ " 60 | \n",
+ " 16 | \n",
+ " 23.62 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 26 | \n",
+ " 183 | \n",
+ " 1 | \n",
+ " 32 | \n",
+ " 71 | \n",
+ " 12 | \n",
+ " 18.29 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 22 | \n",
+ " 153 | \n",
+ " 0 | \n",
+ " 27 | \n",
+ " 85 | \n",
+ " 27 | \n",
+ " 38.29 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 25 | \n",
+ " 160 | \n",
+ " 0 | \n",
+ " 26 | \n",
+ " 88 | \n",
+ " 18 | \n",
+ " 26.20 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 18 | \n",
+ " 162 | \n",
+ " 0 | \n",
+ " 26 | \n",
+ " 85 | \n",
+ " 16 | \n",
+ " 23.62 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Height Gender Outdoor Temperature Humidity PM 2.5 PM 10\n",
+ "0 19 155 1 33 60 16 23.62\n",
+ "1 26 183 1 32 71 12 18.29\n",
+ "2 22 153 0 27 85 27 38.29\n",
+ "3 25 160 0 26 88 18 26.20\n",
+ "4 18 162 0 26 85 16 23.62"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "asthma=pd.read_csv(\"asthamapred_dataset.csv\")\n",
+ "X=asthma.drop(columns=['PEFR'])\n",
+ "X.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 79ms/step - loss: 6678.8521\n",
+ "RMSE Percentage: 1.8573691809018122\n"
+ ]
+ }
+ ],
+ "source": [
+ "y=asthma['PEFR']\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)\n",
+ "model = Sequential()\n",
+ "model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(7, 1)))\n",
+ "model.add(MaxPooling1D(pool_size=2))\n",
+ "model.add(Flatten())\n",
+ "model.add(Dense(1, activation='linear'))\n",
+ "\n",
+ "model.compile(loss='mean_squared_error', optimizer='adam')\n",
+ "\n",
+ "model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=0,validation_data=(X_test, y_test))\n",
+ "\n",
+ "mse = model.evaluate(X_test, y_test)\n",
+ "mse_percent =( mse / int(tf.reduce_mean(y_test))**2) * 100\n",
+ "x=np.sqrt(mse_percent)\n",
+ "print(\"RMSE Percentage:\", x)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "1_XmJ5M2jxm7",
+ "outputId": "370a8026-63fd-43b5-d123-ae8fb10e867d"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 473ms/step - loss: 3066.3235 - mae: 41.9071 - val_loss: 5111.3110 - val_mae: 58.5285\n",
+ "Epoch 2/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 82ms/step - loss: 2886.0901 - mae: 42.9304 - val_loss: 4651.0132 - val_mae: 55.4539\n",
+ "Epoch 3/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2984.9177 - mae: 42.2460 - val_loss: 4481.2637 - val_mae: 54.2376\n",
+ "Epoch 4/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 81ms/step - loss: 2784.7637 - mae: 43.9418 - val_loss: 4675.2202 - val_mae: 55.6406\n",
+ "Epoch 5/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2880.4436 - mae: 42.6021 - val_loss: 4910.6753 - val_mae: 57.2565\n",
+ "Epoch 6/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 93ms/step - loss: 2773.5842 - mae: 43.5240 - val_loss: 5173.2627 - val_mae: 58.9641\n",
+ "Epoch 7/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 93ms/step - loss: 2869.4204 - mae: 43.6546 - val_loss: 5417.0161 - val_mae: 60.4732\n",
+ "Epoch 8/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2934.8435 - mae: 42.0037 - val_loss: 5538.6230 - val_mae: 61.2056\n",
+ "Epoch 9/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 98ms/step - loss: 2947.6016 - mae: 42.5322 - val_loss: 5623.1519 - val_mae: 61.7085\n",
+ "Epoch 10/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 102ms/step - loss: 3068.3069 - mae: 41.9002 - val_loss: 5496.2891 - val_mae: 60.9756\n",
+ "Epoch 11/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 111ms/step - loss: 2930.7207 - mae: 42.5918 - val_loss: 5309.0723 - val_mae: 59.8602\n",
+ "Epoch 12/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 86ms/step - loss: 3172.2332 - mae: 40.5299 - val_loss: 5053.9922 - val_mae: 58.2743\n",
+ "Epoch 13/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 94ms/step - loss: 3072.4509 - mae: 40.3506 - val_loss: 4745.5474 - val_mae: 56.2430\n",
+ "Epoch 14/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 76ms/step - loss: 2784.7300 - mae: 43.2323 - val_loss: 4511.3965 - val_mae: 54.6098\n",
+ "Epoch 15/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 91ms/step - loss: 2884.6406 - mae: 42.5299 - val_loss: 4406.6201 - val_mae: 53.8586\n",
+ "Epoch 16/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 99ms/step - loss: 2908.4734 - mae: 41.6471 - val_loss: 4371.5747 - val_mae: 53.6159\n",
+ "Epoch 17/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 104ms/step - loss: 3143.0420 - mae: 40.2395 - val_loss: 4453.5049 - val_mae: 54.2411\n",
+ "Epoch 18/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 91ms/step - loss: 3120.3223 - mae: 40.2150 - val_loss: 4595.7656 - val_mae: 55.2835\n",
+ "Epoch 19/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 123ms/step - loss: 2764.2986 - mae: 42.9869 - val_loss: 4718.9614 - val_mae: 56.1586\n",
+ "Epoch 20/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 115ms/step - loss: 3141.2302 - mae: 40.3943 - val_loss: 4882.1797 - val_mae: 57.2679\n",
+ "Epoch 21/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 114ms/step - loss: 3137.5779 - mae: 39.8686 - val_loss: 4882.7793 - val_mae: 57.2845\n",
+ "Epoch 22/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 103ms/step - loss: 2732.3801 - mae: 43.0897 - val_loss: 4851.4121 - val_mae: 57.0891\n",
+ "Epoch 23/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2734.5879 - mae: 43.0481 - val_loss: 4906.3657 - val_mae: 57.4603\n",
+ "Epoch 24/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 88ms/step - loss: 2850.3699 - mae: 41.6207 - val_loss: 4935.8120 - val_mae: 57.6624\n",
+ "Epoch 25/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 86ms/step - loss: 3048.0415 - mae: 40.3262 - val_loss: 4920.8911 - val_mae: 57.5767\n",
+ "Epoch 26/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 92ms/step - loss: 2699.0771 - mae: 43.3855 - val_loss: 4873.3208 - val_mae: 57.2787\n",
+ "Epoch 27/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 98ms/step - loss: 2810.4873 - mae: 41.9483 - val_loss: 4846.3374 - val_mae: 57.1140\n",
+ "Epoch 28/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2857.3064 - mae: 41.9243 - val_loss: 4835.5347 - val_mae: 57.0553\n",
+ "Epoch 29/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 89ms/step - loss: 2816.2141 - mae: 41.0199 - val_loss: 4779.4126 - val_mae: 56.6956\n",
+ "Epoch 30/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 81ms/step - loss: 2779.1694 - mae: 41.7353 - val_loss: 4777.8154 - val_mae: 56.6989\n",
+ "Epoch 31/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 87ms/step - loss: 2947.0742 - mae: 41.0918 - val_loss: 4759.3306 - val_mae: 56.5894\n",
+ "Epoch 32/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 107ms/step - loss: 2936.5425 - mae: 40.5920 - val_loss: 4632.5425 - val_mae: 55.7444\n",
+ "Epoch 33/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 91ms/step - loss: 2719.9607 - mae: 42.3116 - val_loss: 4529.4097 - val_mae: 55.0411\n",
+ "Epoch 34/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 90ms/step - loss: 2935.8262 - mae: 41.2333 - val_loss: 4526.7314 - val_mae: 55.0358\n",
+ "Epoch 35/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 86ms/step - loss: 3149.7007 - mae: 38.9118 - val_loss: 4486.4712 - val_mae: 54.7642\n",
+ "Epoch 36/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 83ms/step - loss: 2858.2236 - mae: 41.4179 - val_loss: 4386.8721 - val_mae: 54.0629\n",
+ "Epoch 37/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 105ms/step - loss: 2802.3157 - mae: 42.0515 - val_loss: 4303.7163 - val_mae: 53.4683\n",
+ "Epoch 38/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 76ms/step - loss: 2813.4839 - mae: 41.0744 - val_loss: 4335.2925 - val_mae: 53.7155\n",
+ "Epoch 39/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 83ms/step - loss: 2898.1125 - mae: 40.6110 - val_loss: 4482.7661 - val_mae: 54.7890\n",
+ "Epoch 40/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 88ms/step - loss: 2768.7629 - mae: 41.6373 - val_loss: 4576.4956 - val_mae: 55.4560\n",
+ "Epoch 41/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 71ms/step - loss: 2822.0535 - mae: 40.4955 - val_loss: 4623.6738 - val_mae: 55.7934\n",
+ "Epoch 42/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 89ms/step - loss: 2710.8362 - mae: 41.2092 - val_loss: 4727.1660 - val_mae: 56.5043\n",
+ "Epoch 43/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 87ms/step - loss: 2704.9319 - mae: 41.1856 - val_loss: 4882.5132 - val_mae: 57.5350\n",
+ "Epoch 44/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 78ms/step - loss: 2855.7283 - mae: 39.7750 - val_loss: 4963.5747 - val_mae: 58.0648\n",
+ "Epoch 45/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 86ms/step - loss: 2597.9631 - mae: 42.4541 - val_loss: 5019.8066 - val_mae: 58.4300\n",
+ "Epoch 46/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 94ms/step - loss: 2795.7339 - mae: 40.3239 - val_loss: 5035.1655 - val_mae: 58.5354\n",
+ "Epoch 47/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 79ms/step - loss: 2725.8347 - mae: 41.4939 - val_loss: 4934.8096 - val_mae: 57.9101\n",
+ "Epoch 48/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 100ms/step - loss: 2751.0461 - mae: 41.3523 - val_loss: 4748.0073 - val_mae: 56.7054\n",
+ "Epoch 49/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 94ms/step - loss: 3049.7542 - mae: 37.9449 - val_loss: 4540.4707 - val_mae: 55.3100\n",
+ "Epoch 50/50\n",
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 94ms/step - loss: 2924.0317 - mae: 38.7024 - val_loss: 4397.3408 - val_mae: 54.3130\n"
+ ]
+ },
+ {
+ "ename": "PicklingError",
+ "evalue": "Can't pickle . at 0x000001B12EACA8E0>: it's not found as keras.src.layers.layer.Layer._initializer_tracker..",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mPicklingError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[1;32mIn[41], line 7\u001b[0m\n\u001b[0;32m 2\u001b[0m model\u001b[38;5;241m.\u001b[39mcompile(optimizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124madam\u001b[39m\u001b[38;5;124m'\u001b[39m, loss\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmse\u001b[39m\u001b[38;5;124m'\u001b[39m, metrics\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmae\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[0;32m 5\u001b[0m history \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mfit(X_train, y_train, epochs\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m50\u001b[39m, validation_data\u001b[38;5;241m=\u001b[39m(X_test, y_test))\n\u001b[1;32m----> 7\u001b[0m \u001b[43mjoblib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdump\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPEFR_predictor.joblib\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 9\u001b[0m loss, mae \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mevaluate(X_test, y_test)\n\u001b[0;32m 10\u001b[0m y_test_float \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mcast(y_test, dtype\u001b[38;5;241m=\u001b[39mtf\u001b[38;5;241m.\u001b[39mfloat32)\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:553\u001b[0m, in \u001b[0;36mdump\u001b[1;34m(value, filename, compress, protocol, cache_size)\u001b[0m\n\u001b[0;32m 551\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_filename:\n\u001b[0;32m 552\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(filename, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwb\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m--> 553\u001b[0m \u001b[43mNumpyPickler\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprotocol\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdump\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 554\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 555\u001b[0m NumpyPickler(filename, protocol\u001b[38;5;241m=\u001b[39mprotocol)\u001b[38;5;241m.\u001b[39mdump(value)\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:481\u001b[0m, in \u001b[0;36m_Pickler.dump\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 479\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mproto \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m4\u001b[39m:\n\u001b[0;32m 480\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mframer\u001b[38;5;241m.\u001b[39mstart_framing()\n\u001b[1;32m--> 481\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 482\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite(STOP)\n\u001b[0;32m 483\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mframer\u001b[38;5;241m.\u001b[39mend_framing()\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:597\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 593\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PicklingError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTuple returned by \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m must have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 594\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtwo to six elements\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m reduce)\n\u001b[0;32m 596\u001b[0m \u001b[38;5;66;03m# Save the reduce() output and finally memoize the object\u001b[39;00m\n\u001b[1;32m--> 597\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave_reduce\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mrv\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:711\u001b[0m, in \u001b[0;36m_Pickler.save_reduce\u001b[1;34m(self, func, args, state, listitems, dictitems, state_setter, obj)\u001b[0m\n\u001b[0;32m 709\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 710\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state_setter \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 711\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 712\u001b[0m write(BUILD)\n\u001b[0;32m 713\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 714\u001b[0m \u001b[38;5;66;03m# If a state_setter is specified, call it instead of load_build\u001b[39;00m\n\u001b[0;32m 715\u001b[0m \u001b[38;5;66;03m# to update obj's with its previous state.\u001b[39;00m\n\u001b[0;32m 716\u001b[0m \u001b[38;5;66;03m# First, push state_setter and its tuple of expected arguments\u001b[39;00m\n\u001b[0;32m 717\u001b[0m \u001b[38;5;66;03m# (obj, state) onto the stack.\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:554\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 552\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdispatch\u001b[38;5;241m.\u001b[39mget(t)\n\u001b[0;32m 553\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 554\u001b[0m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Call unbound method with explicit self\u001b[39;00m\n\u001b[0;32m 555\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;66;03m# Check private dispatch table if any, or else\u001b[39;00m\n\u001b[0;32m 558\u001b[0m \u001b[38;5;66;03m# copyreg.dispatch_table\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:966\u001b[0m, in \u001b[0;36m_Pickler.save_dict\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 963\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite(MARK \u001b[38;5;241m+\u001b[39m DICT)\n\u001b[0;32m 965\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmemoize(obj)\n\u001b[1;32m--> 966\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_batch_setitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:990\u001b[0m, in \u001b[0;36m_Pickler._batch_setitems\u001b[1;34m(self, items)\u001b[0m\n\u001b[0;32m 988\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m tmp:\n\u001b[0;32m 989\u001b[0m save(k)\n\u001b[1;32m--> 990\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 991\u001b[0m write(SETITEMS)\n\u001b[0;32m 992\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m n:\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:597\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 593\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PicklingError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTuple returned by \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m must have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 594\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtwo to six elements\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m reduce)\n\u001b[0;32m 596\u001b[0m \u001b[38;5;66;03m# Save the reduce() output and finally memoize the object\u001b[39;00m\n\u001b[1;32m--> 597\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave_reduce\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mrv\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:711\u001b[0m, in \u001b[0;36m_Pickler.save_reduce\u001b[1;34m(self, func, args, state, listitems, dictitems, state_setter, obj)\u001b[0m\n\u001b[0;32m 709\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 710\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state_setter \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 711\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 712\u001b[0m write(BUILD)\n\u001b[0;32m 713\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 714\u001b[0m \u001b[38;5;66;03m# If a state_setter is specified, call it instead of load_build\u001b[39;00m\n\u001b[0;32m 715\u001b[0m \u001b[38;5;66;03m# to update obj's with its previous state.\u001b[39;00m\n\u001b[0;32m 716\u001b[0m \u001b[38;5;66;03m# First, push state_setter and its tuple of expected arguments\u001b[39;00m\n\u001b[0;32m 717\u001b[0m \u001b[38;5;66;03m# (obj, state) onto the stack.\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:554\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 552\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdispatch\u001b[38;5;241m.\u001b[39mget(t)\n\u001b[0;32m 553\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 554\u001b[0m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Call unbound method with explicit self\u001b[39;00m\n\u001b[0;32m 555\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;66;03m# Check private dispatch table if any, or else\u001b[39;00m\n\u001b[0;32m 558\u001b[0m \u001b[38;5;66;03m# copyreg.dispatch_table\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:966\u001b[0m, in \u001b[0;36m_Pickler.save_dict\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 963\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite(MARK \u001b[38;5;241m+\u001b[39m DICT)\n\u001b[0;32m 965\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmemoize(obj)\n\u001b[1;32m--> 966\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_batch_setitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:990\u001b[0m, in \u001b[0;36m_Pickler._batch_setitems\u001b[1;34m(self, items)\u001b[0m\n\u001b[0;32m 988\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m tmp:\n\u001b[0;32m 989\u001b[0m save(k)\n\u001b[1;32m--> 990\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 991\u001b[0m write(SETITEMS)\n\u001b[0;32m 992\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m n:\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:554\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 552\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdispatch\u001b[38;5;241m.\u001b[39mget(t)\n\u001b[0;32m 553\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 554\u001b[0m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Call unbound method with explicit self\u001b[39;00m\n\u001b[0;32m 555\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;66;03m# Check private dispatch table if any, or else\u001b[39;00m\n\u001b[0;32m 558\u001b[0m \u001b[38;5;66;03m# copyreg.dispatch_table\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:966\u001b[0m, in \u001b[0;36m_Pickler.save_dict\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 963\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite(MARK \u001b[38;5;241m+\u001b[39m DICT)\n\u001b[0;32m 965\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmemoize(obj)\n\u001b[1;32m--> 966\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_batch_setitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:990\u001b[0m, in \u001b[0;36m_Pickler._batch_setitems\u001b[1;34m(self, items)\u001b[0m\n\u001b[0;32m 988\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m tmp:\n\u001b[0;32m 989\u001b[0m save(k)\n\u001b[1;32m--> 990\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 991\u001b[0m write(SETITEMS)\n\u001b[0;32m 992\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m n:\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:554\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 552\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdispatch\u001b[38;5;241m.\u001b[39mget(t)\n\u001b[0;32m 553\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 554\u001b[0m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Call unbound method with explicit self\u001b[39;00m\n\u001b[0;32m 555\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;66;03m# Check private dispatch table if any, or else\u001b[39;00m\n\u001b[0;32m 558\u001b[0m \u001b[38;5;66;03m# copyreg.dispatch_table\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:881\u001b[0m, in \u001b[0;36m_Pickler.save_tuple\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 879\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m n \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m3\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mproto \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2\u001b[39m:\n\u001b[0;32m 880\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m element \u001b[38;5;129;01min\u001b[39;00m obj:\n\u001b[1;32m--> 881\u001b[0m \u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43melement\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 882\u001b[0m \u001b[38;5;66;03m# Subtle. Same as in the big comment below.\u001b[39;00m\n\u001b[0;32m 883\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mid\u001b[39m(obj) \u001b[38;5;129;01min\u001b[39;00m memo:\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joblib\\numpy_pickle.py:355\u001b[0m, in \u001b[0;36mNumpyPickler.save\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 352\u001b[0m wrapper\u001b[38;5;241m.\u001b[39mwrite_array(obj, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 353\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 355\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mPickler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:554\u001b[0m, in \u001b[0;36m_Pickler.save\u001b[1;34m(self, obj, save_persistent_id)\u001b[0m\n\u001b[0;32m 552\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdispatch\u001b[38;5;241m.\u001b[39mget(t)\n\u001b[0;32m 553\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 554\u001b[0m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Call unbound method with explicit self\u001b[39;00m\n\u001b[0;32m 555\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;66;03m# Check private dispatch table if any, or else\u001b[39;00m\n\u001b[0;32m 558\u001b[0m \u001b[38;5;66;03m# copyreg.dispatch_table\u001b[39;00m\n",
+ "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py:1063\u001b[0m, in \u001b[0;36m_Pickler.save_global\u001b[1;34m(self, obj, name)\u001b[0m\n\u001b[0;32m 1061\u001b[0m obj2, parent \u001b[38;5;241m=\u001b[39m _getattribute(module, name)\n\u001b[0;32m 1062\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mImportError\u001b[39;00m, \u001b[38;5;167;01mKeyError\u001b[39;00m, \u001b[38;5;167;01mAttributeError\u001b[39;00m):\n\u001b[1;32m-> 1063\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PicklingError(\n\u001b[0;32m 1064\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCan\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt pickle \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m: it\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms not found as \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m\n\u001b[0;32m 1065\u001b[0m (obj, module_name, name)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 1066\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1067\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m obj2 \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m obj:\n",
+ "\u001b[1;31mPicklingError\u001b[0m: Can't pickle . at 0x000001B12EACA8E0>: it's not found as keras.src.layers.layer.Layer._initializer_tracker.."
+ ]
+ }
+ ],
+ "source": [
+ "import joblib\n",
+ "model.compile(optimizer='adam', loss='mse', metrics=['mae'])\n",
+ "\n",
+ "\n",
+ "history = model.fit(X_train, y_train, epochs=50, validation_data=(X_test, y_test))\n",
+ "\n",
+ "joblib.dump(model, 'PEFR_predictor.joblib')\n",
+ "\n",
+ "loss, mae = model.evaluate(X_test, y_test)\n",
+ "y_test_float = tf.cast(y_test, dtype=tf.float32)\n",
+ "mae_percentage = (int(mae) / tf.math.reduce_variance(y_test_float))*100\n",
+ "mae_percentage\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 136ms/step\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([[467.9805 ],\n",
+ " [531.3571 ],\n",
+ " [496.45547],\n",
+ " [514.9509 ],\n",
+ " [475.6978 ],\n",
+ " [462.05984],\n",
+ " [490.24817],\n",
+ " [449.3226 ],\n",
+ " [530.9557 ],\n",
+ " [426.03867],\n",
+ " [498.93262]], dtype=float32)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "predictions=model.predict(X_test)\n",
+ "predictions"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "y_train\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "p2xrwNQ6j7Nf",
+ "outputId": "40f5985a-2e37-4572-abc9-4e84e2e9bd8a"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.1162505"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mae_percentage.numpy()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "f9N2S9ZNk_ny",
+ "outputId": "b94476e0-14ad-4587-fa6b-4fbf9eecf6f9"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "RMSE Percentage: 1.8573691809018122\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"RMSE Percentage:\", x)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABpJElEQVR4nO3dd3wUdf7H8dduyqYXAqRI6L03QcSCAmLDhqKIiuWsyAnKiXgW0LOcZ0HUww4WFMUTfuodIiCionTpHVFaQqjpfef3xzdZjATYJLvZbPJ+Ph7zmNmZ2ZlPhpD97LfaLMuyEBEREfFDdl8HICIiIlJZSmRERETEbymREREREb+lREZERET8lhIZERER8VtKZERERMRvKZERERERvxXo6wC8zel0sm/fPiIjI7HZbL4OR0RERNxgWRaZmZkkJSVht5+43KXWJzL79u0jOTnZ12GIiIhIJezevZtGjRqd8HitT2QiIyMB8yCioqJ8HI2IiIi4IyMjg+TkZNfn+InU+kSmtDopKipKiYyIiIifOVWzEDX2FREREb+lREZERET8lhIZERER8Vu1vo2MiIhUjNPppKCgwNdhSC0XFBREQEBAla+jREZERFwKCgrYuXMnTqfT16FIHRATE0NCQkKVxnlTIiMiIoAZgCwlJYWAgACSk5NPOgiZSFVYlkVOTg5paWkAJCYmVvpaSmRERASAoqIicnJySEpKIiwszNfhSC0XGhoKQFpaGg0bNqx0NZPSbRERAaC4uBiA4OBgH0cidUVpwlxYWFjpayiRERGRMjQvnVQXT/yuKZERERERv6VERkRERPyWEhkREZE/adq0KZMmTXL7/O+++w6bzcbRo0e9FpOUT4mMeJfTCUX5vo5CRGopm8120mXChAmVuu7y5cu544473D7/zDPPJCUlhejo6Erdz12lCVN5S2pqqlfvXVOp+7V4T9pmmDEMCvPglv9BvWa+jkhEapmUlBTX9ieffMJjjz3Gli1bXPsiIiJc25ZlUVxcTGDgqT/6GjRoUKE4goODSUhIqNB7qmLLli1ERUWV2dewYcNyzy0oKCi3J1phYSFBQUEVvndl3+ctKpER79j5A7xzARz+FTL3wSc3QkGOr6MSkQqwLIucgiKfLJZluRVjQkKCa4mOjsZms7leb968mcjISObMmUOPHj1wOBz8+OOP7Nixg8svv5z4+HgiIiI4/fTTmT9/fpnr/rlqyWaz8fbbb3PllVcSFhZGq1at+OKLL1zH/1y1NG3aNGJiYpg7dy7t2rUjIiKCCy+8sEziVVRUxF//+ldiYmKIi4tj3LhxjBgxgiuuuOKUP3fDhg3L/OwJCQmuAQxvvvlmrrjiCp566imSkpJo06YNv/32GzabjU8++YRzzz2XkJAQpk+fjtPp5IknnqBRo0Y4HA66du3K119/7brPid5Xk6hERjxv7acw+x5wFkKj0+HwTti/Dr4aA1e+DuraKeIXcguLaf/YXJ/ce+MTgwgL9sxH1EMPPcTzzz9P8+bNiY2NZffu3Vx88cU89dRTOBwO3n//fQYPHsyWLVto3LjxCa8zceJEnnvuOf71r3/xyiuvMHz4cH7//Xfq1atX7vk5OTk8//zzfPDBB9jtdm644QbGjh3rSgT++c9/Mn36dKZOnUq7du14+eWXmT17Nuedd16Vf+YFCxYQFRXFvHnzjnsWL7zwAt26dSMkJISXX36ZF154gTfeeINu3brx7rvvctlll7FhwwZatWp1wvfVJCqREc+xLPj+efj8dpPEtL8cRnwJ10wFmx3WzoDlb/s6ShGpY5544gkGDhxIixYtqFevHl26dOHOO++kY8eOtGrViieffJIWLVqUKWEpz80338ywYcNo2bIlTz/9NFlZWSxbtuyE5xcWFvL666/Ts2dPunfvzr333suCBQtcx1955RXGjx/PlVdeSdu2bXn11VeJiYlx62dq1KgRERERrqVDhw5ljoeHh/P222/ToUOHMsdGjx7NVVddRbNmzUhMTOT5559n3LhxXHfddbRp04Z//vOfdO3a9biGzn9+X02iEhnxjOIi+O/9sOo98/rMUTDgCbDbodk5MPAJ+OYR+PohSOgMjXv7Nl4ROaXQoAA2PjHIZ/f2lJ49e5Z5nZWVxYQJE/jvf/9LSkoKRUVF5ObmsmvXrpNep3Pnzq7t8PBwoqKiXHMFlScsLIwWLVq4XicmJrrOT09PZ//+/fTq1ct1PCAggB49erg1YecPP/xAZGSk6/Wf26x06tSp3HYxf3wWGRkZ7Nu3j759+5Y5p2/fvqxZs+aE76tplMhI1eVnwsybYft8U/Jy0XPQ6/ay5/S5F/auhA2z4NOb4M7vITLeJ+GKiHtsNpvHqnd8KTw8vMzrsWPHMm/ePJ5//nlatmxJaGgoV199NQUFBSe9zp+TBZvNdtKko7zz3W37cyrNmjU7aenNn3/mU+0/lcq+rzqoakmqJiMFpl5kkpjAULh2+vFJDJh2MZe9Cg3aQlaqSXyKKz+3hohIZS1evJibb76ZK6+8kk6dOpGQkMBvv/1WrTFER0cTHx/P8uXLXfuKi4tZtWpVtcUQFRVFUlISixcvLrN/8eLFtG/fvtriqCr/T7XFd/ZvhOnXQMYeCG8A138Cp/U48fmOCLj2Q3jzPNj1E3zzKFz0bPXFKyICtGrVis8//5zBgwdjs9l49NFH3arO8bRRo0bxzDPP0LJlS9q2bcsrr7zCkSNH3Jp/KC0tjby8vDL74uLiKtwt+m9/+xuPP/44LVq0oGvXrkydOpXVq1fXuJ5JJ6NERirnwFZ490LIT4f6rWH4TIhteur31W9lei59MhyWToFGPaHT1V4PV0Sk1Isvvsitt97KmWeeSf369Rk3bhwZGRnVHse4ceNITU3lpptuIiAggDvuuINBgwYREHDq9kFt2rQ5bt/PP//MGWecUaEY/vrXv5Kens4DDzxAWloa7du354svvijTY6mms1meqrCroTIyMoiOjiY9Pf24wYOkkvIz4a3z4eBWaNTLlMSEld/98IQWPAE/vABBYfCX+RDf4dTvERGvysvLY+fOnTRr1qzGdbGtC5xOJ+3atWPo0KE8+eSTvg6nWpzsd87dz2+1kZGKsSyYfbdJYqJOg+s+qngSA3De36HF+VCYAzOGQ+5Rj4cqIlKT/f7777z11lts3bqVdevWcffdd7Nz506uv/56X4fmV5TISMUsngSbvoSAYBj6PkRUbBhvF3sADHkHohvDkZ0w604zL5OISB1ht9uZNm0ap59+On379mXdunXMnz+fdu3a+To0v6I2MuK+X78zVUJgulg3quK4AmH14NoPzFQGW7+GNR9Dt+FVDlNExB8kJycf12NIKk4lMuKeo7tg5i1gOaHbDdDjZs9cN6krnDfebC96FopOPo6DiIjIHymRkVMrzDOTPuYehsSucPELnp0vqdedEN7QJEu/fOC564qISK2nREZOzrLgfw9AymoILakKCvJwb4bgMDhnrNn+/l9QmOvZ64uISK2lREZObuU0+OVDM/XA1e9CzIlnhq2SHjdDVCPITIEVU71zDxERqXWUyMiJ7VkJcx402+c/Ci2qPrX8CQU64NySe/34IuRnee9eIiJSayiRkfJlHYBPb4TiAmh7KZw1xvv37Ho9xDaD7AOw7A3v309EpES/fv0YPXq063XTpk2ZNGnSSd9js9mYPXt2le/tqevUVUpk5HjFRfDZLZCx10w/cMUUzzbuPZGAIOhX0oNp8csaJE9ETmnw4MFceOGF5R774YcfsNlsrF27tsLXXb58OXfccUdVwytjwoQJdO3a9bj9KSkpXHTRRR69159NmzYNm8123FIbRnBWIiPHWz0dfvsBgksmeQypxqkdOl1tZsjOS4cl/66++4qIX7rtttuYN28ee/bsOe7Y1KlT6dmzJ507d67wdRs0aEBYWJgnQjylhIQEHA6H1+8TFRVFSkpKmeX3338/4fkFBccPh2FZFkVFRRW+d2Xf5w4lMnK8Ve+b9Tl/gwbHT0zmVfYAOO9hs/3zvyH7UPXeX0T8yqWXXkqDBg2YNm1amf1ZWVnMnDmT2267jUOHDjFs2DBOO+00wsLC6NSpEx9//PFJr/vnqqVt27ZxzjnnEBISQvv27Zk3b95x7xk3bhytW7cmLCyM5s2b8+ijj1JYWAiYEpGJEyeyZs0aV2lIacx/rlpat24d559/PqGhocTFxXHHHXeQlXWs3eDNN9/MFVdcwfPPP09iYiJxcXGMHDnSda8TsdlsJCQklFni4+Ndx/v168e9997L6NGjqV+/PoMGDeK7777DZrMxZ84cevTogcPh4McffyQ/P5+//vWvNGzYkJCQEM466yyWL1/uutaJ3ucNGtlXykrbDHtXgC3AtFnxhbaDIaEzpK6Fn16GgU/4Jg6Rus6yzHxovhAU5laVdmBgIDfddBPTpk3j73//O7aS98ycOZPi4mKGDRtGVlYWPXr0YNy4cURFRfHf//6XG2+8kRYtWtCrV69T3sPpdHLVVVcRHx/P0qVLSU9PL9OeplRkZCTTpk0jKSmJdevWcfvttxMZGcmDDz7Itddey/r16/n666+ZP38+ANHR0cddIzs7m0GDBtGnTx+WL19OWloaf/nLX7j33nvLJGsLFy4kMTGRhQsXsn37dq699lq6du3K7bfffsqf52Tee+897r77bteIwykpKQA89NBDPP/88zRv3pzY2FgefPBB/vOf//Dee+/RpEkTnnvuOQYNGsT27dupV+/Y/Ht/fp83KJGRslZ/aNatL4SIhr6JwW6H8x+Bj4bC0jfhjHsgMsE3sYjUZYU58HSSb+798D4IDnfr1FtvvZV//etfLFq0iH79+gGmWmnIkCFER0cTHR3N2LFjXeePGjWKuXPn8umnn7qVyMyfP5/Nmzczd+5ckpLM83j66aePa9fyyCOPuLabNm3K2LFjmTFjBg8++CChoaFEREQQGBhIQsKJ/5599NFH5OXl8f777xMebn7+V199lcGDB/PPf/7TVYISGxvLq6++SkBAAG3btuWSSy5hwYIFJ01k0tPTiYiIKLPv7LPPZs6cOa7XrVq14rnnnnO9Lk1knnjiCQYOHAiYZGvKlClMmzbN9Qzeeust5s2bxzvvvMPf/vY31/v/+D5vUSIjxxQXwpoZZtvXcx61ugAa9YI9y+CHF+Hi5079HhGpk9q2bcuZZ57Ju+++S79+/di+fTs//PADTzxhSnOLi4t5+umn+fTTT9m7dy8FBQXk5+e73QZm06ZNJCcnu5IYgD59+hx33ieffMLkyZPZsWMHWVlZFBUVERVVsTaGmzZtokuXLq4kBqBv3744nU62bNniSmQ6dOhAQECA65zExETWrVt30mtHRkayatWqMvtCQ0PLvO7Ro0e57+3Z89jcejt27KCwsJC+ffu69gUFBdGrVy82bdp0wvd5i88Tmb179zJu3DjmzJlDTk4OLVu2dDXQAtNA6PHHH+ett97i6NGj9O3blylTptCqVSsfR14LbfvGdH0Ob2ASCV+y2UypzPuXwcqpcOYoiEn2bUwidU1QmCkZ8dW9K+C2225j1KhRvPbaa0ydOpUWLVpw7rnnAvCvf/2Ll19+mUmTJtGpUyfCw8MZPXp0uY1ZK+vnn39m+PDhTJw4kUGDBhEdHc2MGTN44YUXPHaPPwoKCirz2maz4XQ6T/oeu91Oy5YtT3rOHxMod/afSmXfVxE+bex75MgR+vbtS1BQEHPmzGHjxo288MILZerRnnvuOSZPnszrr7/O0qVLCQ8PZ9CgQeTl5fkw8lrql+lm3eU60xXa15qfC03PNmPZfP8vX0cjUvfYbKZ6xxdLBYd8GDp0KHa7nY8++oj333+fW2+91dVeZvHixVx++eXccMMNdOnShebNm7N161a3r92uXTt2797tqmYBWLJkSZlzfvrpJ5o0acLf//53evbsSatWrY7rERQcHExxcfEp77VmzRqys7Nd+xYvXozdbqdNm2rufHECLVq0IDg4uMzM3YWFhSxfvpz27dtXezw+TWT++c9/kpyczNSpU+nVqxfNmjXjggsuoEWLFoApjZk0aRKPPPIIl19+OZ07d+b9999n3759Jxw8KD8/n4yMjDKLuCFzP2z92mx3vcG3sfzR+Y+a9S8fwqEdvo1FRGqsiIgIrr32WsaPH09KSgo333yz61irVq2YN28eP/30E5s2beLOO+9k//79bl97wIABtG7dmhEjRrBmzRp++OEH/v73v5c5p1WrVuzatYsZM2awY8cOJk+ezKxZs8qc07RpU3bu3Mnq1as5ePAg+fn5x91r+PDhhISEMGLECNavX8/ChQsZNWoUN954Y5keRpVhWRapqanHLacqyfmz8PBw7r77bv72t7/x9ddfs3HjRm6//XZycnK47bbbqhRjZfg0kfniiy/o2bMn11xzDQ0bNqRbt2689dZbruM7d+4kNTWVAQMGuPZFR0fTu3dvfv7553Kv+cwzz7gad0VHR5OcrOoIt6z9BKxiOK0nNGzr62iOadzbVHNZxbBI7WRE5MRuu+02jhw5wqBBg8q0Z3nkkUfo3r07gwYNol+/fiQkJHDFFVe4fV273c6sWbPIzc2lV69e/OUvf+Gpp54qc85ll13GmDFjuPfee+natSs//fQTjz76aJlzhgwZwoUXXsh5551HgwYNyu0CHhYWxty5czl8+DCnn346V199Nf379+fVV1+t2MMoR0ZGBomJicctaWlpFb7Ws88+y5AhQ7jxxhvp3r0727dvZ+7cuV7rmXQyNsuyrGq/a4nSEQXvv/9+rrnmGpYvX859993H66+/zogRI/jpp5/o27cv+/btIzEx0fW+oUOHYrPZ+OSTT467Zn5+fpksNyMjg+TkZNLT0yvc6KrOsCz49xlwYDNcOgl63uLriMra9wu82Q+wwT1LalaiJVKL5OXlsXPnTpo1a1YrRnyVmu9kv3MZGRlER0ef8vPbp419nU4nPXv25OmnnwagW7durF+/3pXIVIbD4aiWERJrlb0rTRITGAodr/J1NMdL6gbtBsOmL2HpFBj8sq8jEhGRGsKnVUuJiYnHNQxq164du3btAnD1tf9zXeb+/ftP2g9fKuiXD8y6/WUQcvwATTXC6SVjI2yYBYVq6C0iIoZPE5m+ffuyZcuWMvu2bt1KkyZNAGjWrBkJCQksWLDAdTwjI4OlS5eW24dfKqEgB9Z/bra71aBGvn/W9GyIOs3MwbRtrq+jERGRGsKnicyYMWNYsmQJTz/9NNu3b+ejjz7izTffZOTIkYDpFz969Gj+8Y9/8MUXX7Bu3TpuuukmkpKSKtRQS05i05eQnwExTaDJWb6O5sTsduh0jdlec3zbKBERqZt8msicfvrpzJo1i48//piOHTvy5JNPMmnSJIYPPzaq7IMPPsioUaO44447OP3008nKyuLrr79WQzRPKa1W6naDSRZqsi7XmfW2byDnsG9jEanFfNgHROoYT/yu+bTXUnVwt9VznXR4J0zuCthg9Dr/GDn39bPNZJIXPw+9qjY5moiUVVhYyPbt20lKSip3QkMRTzt06BBpaWm0bt26zJQL4Ce9lsTH1pSMYdC8n38kMWBKZVLXmnFvlMiIeFRgYCBhYWEcOHCAoKAg7DW9lFb8lmVZ5OTkkJaWRkxMzHFJTEUokamrnMXHpiSoyY18/6zj1fDNI7BnuRnpN66FryMSqTVsNhuJiYns3LnzuOH1RbwhJiamyr2QlcjUVTsXQcYe09267aW+jsZ9kfHQ4nzYPt+Uypz3sK8jEqlVgoODadWqlUcnVBQpT1BQUJVKYkopkamrSktjOl0DQX7WcLrzdccSmX7jKzy5nIicnN1uV4cK8RuqAK2Lco+YbtfgX9VKpdpeAsERcOQ32L3U19GIiIgPKZGpi9Z9BsX5EN8RErv6OpqKCw6DdpeZ7TUzfBuLiIj4lBKZumh1SbVS1+H+Wy3T5Vqz3jALivJPfq6IiNRaSmTqmtT1ZjZpexB0HurraCqv6dkQmQR5R2GrpiwQEamrlMjUNaVjx7S5CMLr+zaWqrAHQOeSKQvWasoCEZG6SolMXeJ0mqoYgM7X+jYWT+hcMmXB1rmaskBEpI5SIlOX7FkGGXvBEQUtB/g6mqqLbw8JncBZCBs+93U0IiLiA0pk6pLS0pg2F/vf2DEnUloqoxmxRUTqJCUydYXTCRtmm+0OV/o0FI/qdDXY7Ka06dAOX0cjIiLVTIlMXbHrZ8hKBUe0GeK/tohMgObnme21n/o2FhERqXZKZCrr0A7zwXlgq68jcU9ptVK7SyEw2LexeFqXkuqltZ+AZfk2FhERb8g+CDsWwsr31LnhTzTXUmUtfArW/wcGTIAGrX0dzck5i2Hj/5nt2lStVKrtJRAUDkd2wu5l0Li3ryMSEamc4iI4tA32b4DUdbB/vRn/Kyv12DnL3oJb/msm/RUlMpWW0MkkMqnrfB3Jqf2+GLLTICQGmvfzdTSeFxwO7S8zY+SsnaFERkT8i9MJK6fCqvchbZOZQqY89ZqbufL2r4OPh8EN/4Gg0OqNtQZSIlNZCZ3M2h8SGVe10mAICPJtLN7S+VqTyKz/HC58FgIdvo5IROTU0jbBl/eVnQA3OALiO5QsHc3nTcP24IiAlLUw7RLzBXXmLXDthxBQtz/K6/ZPXxUJnc364DYoyDalAjVRcRFs/MJs18ZqpVLNzoHIRMhMgW3fmKRNRKSmKsyDH56HHyeZsbCCI+C8h82o6zFNwX6CJqyJnWHYDPjwKtg6B74YBZe/duLz64C6+5NXVURDiIgHLJNR11S//QA5ByG0HjQ719fReI89wHTFBlg307exiIiczG8/wut94ft/mSSm9UUwcin0GWmqj06VlDTtC9dMA1sArPkIvnmkTnd0UCJTFa7qpbW+jeNkSquV2l9W+4sf25eUOO1YCMWFvo1FROTPcg7D/91rqoYObTdfhoe+D8M+huhGFbtWm4tMSQzAktfgxxc9H6+fUCJTFTW9nUxxIWwqrVa6yrexVIekbhAWB/kZpveSiEhNYFmmc8hrveCXD8y+HrfAyGXQ/nKw2Sp33a7DYNAzZnvBE7Biqmfi9TNKZKqipicyOxeZFu7hDaBJX19H4312O7Tob7a3z/NtLCIiAIW5MHMEfHYrZB+A+m3glq9h8CQIjan69fvcA2ePNdtfjTk2gnsdokSmKkob/O7fYMZqqWnWl/ZWqgPVSqVKJ8PcPt+3cYiI5KXDh0PMOF72IOg3Hu76AZr08ex9zn/ElPBgwee3m+r1OkSJTFXUaw5BYVCYA4d/9XU0ZRUVwOYvzXbHOlCtVKplf8BmSskyU095uoiIV2SlHesm7YiCm2ZDv4e8MzSEzQaXvGCqqYoLYMZw2LvS8/epoZTIVIU9wPTzh5rX4PfX78y3gYh4aOzh7L8mC69v2sqASmVExDeO/AbvDjJfqMIbwM1fQdOzvHtPewBc9ZYZ9LQwG/5ze82sKfACJTJVVVPbyWz43KzbX25+wesSVS+JiK/s3wDvDDKl9DGN4da5kNileu4d6IChH0BoLBzeARtnV899fUyJTFXFdzTrmpTIFOXD5v+a7brQW+nPWg006x3fmgEBRUSqw66lMPUiMy9Sw/Zw6zcQ16J6YwiJgt53me0fXqwT48sokamq0ga/NSmR2fGt6YIcmQTJdXDeodN6mHml8tLrVD2x3yrINl1Tf/43bPkaDm7XOEDif7Z+A+9fbv7uJPeGW/4HUYm+iaXXHWak4P3rzUjntVwd6criRfHtARtk7YfM/RAZ7+uIzHxDAB2uqJvDVtsDoMX5pnpt+zxNIlkTFReahHvdTFN6WJhT9rgtAGKbQv1WENfSfKuNawkN2kFEA5+ELHJCa2fC7LvAWQQtB8LQ93w7bU1YPeh5K/w0Gb5/HlpdUPmxavyAEpmqCg43f2APbTMzkvo6kSnMhS3/M9u1eW6lU2k10CQy2+aZronie04n7PrZJC8b/w9yDx87FtvUtDc7/JsZ8bQo19TxH95R9ho2O3QaCv3GmV6DIr627C34X8k4Lp2ugSum1IzJefvcC0vfgD3LzJQIzc72dUReo0TGExI6mUQmdd2xhqa+sn0+FGRBVCM4radvY/Gl0oHxUlZD1gF9i/eltE2w+iNTfZSx99j+8IZmaIBO15jqwNJvjE6nmfzz0PaSZUfJeptpQLl2Bqz/DLrdAOf8reJDu4t4yp6Vx5KYXnfChc/WnFLwyHjofiMsf9tMTqlERk4qoZP59l8T2smUzq1UV6uVSkXGm/ZLqWthxwLocp2vI6p78rPg2yfNt0JKGhw6oswAjZ2uhqZnlz9Qo90O0aeZpfmfJjrduwoWPmUS9pXTTILU8zY4+34zkatIdbEsmPuw2e40FC76Z82rvjnzr2bagl+/M0lXox6+jsgr6vAnnQfVlAa/BTmmsSTUzd5Kf1bae0ndsKvf9vnw7z6w9HXAgjYXm26hY7fBFa9Bi/MqN9r0ad3hhv+YId6bnGUG/1o6BV7uAvMeN5PyiVSHTV/A7iUQGAoDJ9a8JAYgtgl0vtZs//CCb2PxIpXIeELpWDIHt5keGL5q5LXtGzMQUkxj8we/rms5wPzn3b7ADAxV18bTOZHiQlPdU5gLxfmmu35RPhTlmcSg9DWY4uiG7d3/I51zGL4eb6p/AKIbw+CXPF/l2qSPGWTs1+9Mqc/elbB4Eqx4F864B7oNN/8PRLyhKB/mPWa2zxwFUUm+jedkzhoDaz6GLf+F/RtLOqjULkpkPCEy3tT3Z6eZD4hGPmqbUjoIXocra+a3g+rWqBc4ok2j0n2/+O7fpab57BbY9KX759dvY9qydLgKGrQu/5zS2X3njIOcg4DNjGVx/iPgiPBI2Mex2UzJTvN+sPVr+PYp0+B+0bNmqd/GlMq1GmhGt/bG0PBSNy17y4zeGxEPfe/zdTQn16A1tL/MNLD/8SUY8pavI/I4JTKektDJtMVIXeubD8y8DNg612yrWskICDRtLDZ9Yao6lMjA7mUmibHZIaYJBIZAYLBZBwSbD/vS7fxMM4P6wS3w3TNmie9o2l91uOrYQF/pe+G/95tkAkwX6ctegeTTq+dnstmgzUXQahBs+j9Y+ibsXmriPrgFfn4VgsLN70LLASaxUWmNVFbOYfj+ObN93t+9l6h70ln3m0Rm/Wdw3vha1+NPiYynuBIZH7WT2fSlqRqo37r6hsP2B60GmkRm2zwzYVtdt+AJs+46HC5/9dTn56XD5v+Z0r4d35oBtvavh2//YX7PGp8Jv3wIBZlmdt9z/maKsgODvftzlMduN6WRHa6E3KPw60LYNt+MJZS13wxLUDo0QYO2psosMhEiE45f+8OHk/jGoufM/4uGHUzPOX+Q1NUk8dvnw+KXYfDLvo7Io5TIeIprzqX1vrn/uk/NutNQVSv9UWnbjL0rzTepsHq+jceXfv0OfvvBlLacO86994REQ9dhZsk5DJu/MgMu7vweUtaYBUw13mWvQMO2Xgu/QkJjjiU1Tqepcto2zyx7lsGBzWY5keBIk9A0P9d8667LvzdyzKEdsLykambQP/yr3d3ZY00is/oj8/+/JrfrqSAlMp5S2nNp/4bqb1iakWI+WMB0a5VjopLMN6e0DaZEoa4+H8uCBU+a7R63QExyxa8RVg+632SW7IOmpOu3xabhbY9bau4fdbvdlB4ldoFzxkLuERP30V1mvJrM1LLrgixTwnQo04xds2E2DHoaOutLQp0377Fjo/e2ON/X0VRMkz6mBHXXT/DTq3Dh076OyGOUyHhKXAvTDa8wGw7vhPotq+/e6/8DltPM71GvWfXd11+0GmASmW3z6m4is/Vr2LvC/I6e/UDVrxde3wyB3vPWql+ruoXGQrtLT3w8P9MkNQe3muTvwCaYdQesng6XvFi9/7el5vhtsSmRtNnhgid9HU3lnPMAfPgTrJxq/g6Ex/k6Io/QODKeYg+A+A5mO3Vt9d7bVa10TfXe11+UVi/tWGCqGeoap9O0aQHofafvp9Go6RyRZo6ntpfAnd9D/8dMA+idi2DKmaaNRGn3dKkbnE745u9mu/sIaNjOt/FUVov+pmSyMMeMv1RLKJHxJFc7mWps8Htgi2mnYA9Ub6UTST7DzASbfQBS1/g6muq3cZZpoOuIqvldRWuawGDzzfWen01VQnG+GVl4Sl8zf43UDes/M0M4BEfAeQ/7OprKs9mOlcgufdP0dq0FlMh4ki8SmbUlpTEtB9SaYkKPCww2Y41A3Rvlt7gIFpbUhfe5V41WK6tec7jhcxjyjhkz6tA2mHYJzB4JGftML5bcI6ZBdPYh04YoKw0y95s2bBpx2H8V5sL8iWb7rDH+PxVG28Gmd2t+upmHqRZQGxlPqu6pCizLzCQMqlY6lZb9Tf32tvmmi3BdsXaGmXAxtB6ccbevo/FvNptpY9Wyv/lgWzkVVn9oFndEJpovOwmdIbGz2Y5tpgbENd2Sf0PGHjMRb5+Rvo6m6ux2M67M7LvMz9ZnpN8PFqlExpPi2wM2yEo138a8nbnvXgZHfzfFnW0u9u69/F3LknmX9iwz35xDY30bT3Uoyofv/mm2zxoDIVG+jae2CI2FwZOgyzD43wOn+OJiM4mKVTKjd2aKmUqklCOqJLnpZGYA73AlBAR5+ycQd2UdgB9eMtv9H4OgUN/G4ymdrjZjSmXug41fQGf//iKsRMaTgsNN76VD280ft5b9vXu/0ka+bS+F4DDv3svfxSSbQdAObDbjqXS40tcRed+q9yF9F0QkQK/bfR1N7dO4N9z1IxTmmWTFZseVuNjsZUta8rPM0Aypa82SshbSNkJ+Bvy+2CxgkpwhtaO4v1b47mnTFT+pW+0q9Q4Igh43m59v+dtKZORPEjpVTyJTXGgGJgMzvoWcWssBJpHZNr/2JzIFOfD9v8z2OWNrzzfJmigo5NTnOCJM4tO497F9xYWmi3fKWkhZbebvWTfTfDHpcIW3ohV37V0FK6eZ7QueMlUytUn3m8xUC7uXmIFcEzr6OqJKq2X/MjVAdTX43b7ATIYY3hCanevde9UWpd2wt8837Ytqs+VvmWH5Yxqb7qJS8wQEmSEbug6Di/4JZ99v9n81xlRNi+9kpcEnN5gqwfZXQNO+vo7I86ISTdIMsOId38ZSRR5NZPbu3evJy/mn6mrwW1qt1HGImRxRTq3JmRAUZtow7ffRVBLVIS/DzHILcO5Dvpn3SCrunAfNF6Hcw/DlfbU/2a6pigrg05sgYy/EtYLLJvs6Iu85/TazXvOJX3fF9kgik5qayqhRo2jVqpUnLuffSktkDm0zxfvekJ9pJvIDv6/brFaBDmh2jtneNs+3sXjTkn+bBs1xraDztb6ORtwVGAxXvmEm39zyP1jzsa8jqpu+Hge7fjYNsYd9bOYbq62anm26Yhdmw9pPfB1NpbmdyBw5coRhw4ZRv359kpKSmDx5Mk6nk8cee4zmzZuzfPlypk6d6s1Y/UNEPIQ3MEWSaZu8c49NX0FRLsS1hKTu3rlHbfXH6qXaKOewmUcFzMBdKq3zL/Edjg24NmccHN3t23jqmhXvmgWbGTOofi3/cm6zwel/MdvL3/HbUkC3E5mHHnqIn376iZtvvpm4uDjGjBnDpZdeyqpVq/j2229ZsmQJ116rb3/YbH9oJ+OlqQo003XltbrArHf9XDvbISyeZHpZxHcydfvif/reB41ONz2avri3bk6r4Qu//wT/Kxljqv9j0PoC38ZTXbpcZ6rcD2wyz8APuZ3IzJkzh6lTp/L888/z5ZdfYlkWXbt25auvvuKMM87wZoz+x5sNfjP3m+7DUHcnQKyK2CZwWk9TYlba66u2OLgNlrxuts9/pPb1sqgr7AGmiikw1Pxf9/OGmH4hfY9pF+MsMlO9nDXG1xFVn5DoY13L/XSkX7f/0u3bt4927cxEWU2bNiUkJIQbbrjBa4H5NW82+N3wufkQbnS6GbNGKq70P23pqMi1gbMY/m+kmQuoxfnQepCvI5KqiGsBA58w2/Meg0M7fBtPbVaYCzOuN3OxxXeCy1+teyXdpdVLm740X5b9jNuJjGVZBAYeq28PCAggNFRjU5SrtERm/wbzAeNJpQ2yOmnsmErreJUZsGzvCjj8q6+j8Yxlb8LupWaU58GT694f4tro9L+YxumFOTD7bs//LRHTJuSLv5qJd8Pi4LrpZmDTuiaxMzTqBc5C+OV9X0dTYRVKZPr370/37t3p3r07ubm5DB482PW6dBFMI9zAUNMS/PBOz1334HYzA6stoPYP6OZNEQ2PTSK57j8+DcUjDv96bFK7gU+YUYzF/9ntcPm/ITjSJKk/veLriGqfn14xbQ5tAXDNe6bqua4q7Yq9YprfJc1ud2l4/PHHy7y+/PLLPR5MrWEPMPMu7V1pGvzWb+mZ65Y28m1xPkQ08Mw166pO18COb80zPWes/5ZgOJ3mG2VRrulK2eMWX0cknhSTDBc9a6oNFz4FrQaank1Sddvnw/ySz7WL/gnNzvZtPL7W/gr4eryZIHPrXGjrP/P3VTqRkVNI6FSSyKwzVRlVZVnHqpU0NkjVtb0UAseYIeJT10JiF19HVDkrp8JvP5heB5e9oga+tVHX4WbIha1zYNZd8JcFGuSwqvasgM9uNe0Nu914rI1IXRYUAt1vhMUvm0a/fpTIVOqv3tq1a/nss8/47LPPWLvWS12M/Z2ney7tWQFHfoOgcL/6BauxQqKg9YVm218b/R7dZRqCAvR/HOo182084h02Gwx+GULrmaT7u2d8HZH/ykozpVtv94e8dNMu5JIX/LdE1tN63ALYYMcCv2pgXqFEZtmyZXTq1Ilu3boxdOhQhg4dSrdu3ejcuTPLly/3Voz+ydM9l1wzXV9SNxujeYOr99J//K5OGMsyw9gXZEHyGdDrDl9HJN4UGQ+Xvmi2f3wRNv6fb+PxN8WF8PNr8EoP+OVDs6/zdXD9J2bEbzHqNTs2aOhK/xng1u1EZuPGjfTv35/Q0FA+/PBDVq1axapVq/jggw9wOBz079+fjRs3ejNW/9KwPWAz8/pkHajatYoK/jDTtaqVPKbVQDOGQuY+/xsI6pcPTRufwBC4/DVVKdUFHa6EM+4x27Pu8v58brXFjm9hSl+Y+7AZZDCxK9w2D656A8Lq+Tq6mqe0mu2XD03XdD/g9l+/CRMmMHDgQJYuXcqwYcPo2rUrXbt25frrr2fZsmX079+fCRMmeDFUP+OIODbOy/4q/sHZ9AXkHITIxGO9baTqAh3QvqTRuj9VL2Xsg7l/N9vnPey5xuRS8w18EpqfZ7pkfzys6l+SarPDO2HGcPjgSji4BcLqm3Zkty+E5F6+jq7majUQohub+do2zPJ1NG5xO5FZuHAhDz/8MLZy6hJtNhsPP/wwCxcu9Ghwfs9T7WRWvGvW3Udo7hxPK61e2jgbivJ9GopbLAu+GgP56XBaD+hzr68jkuoUEAjXTIV6zSF9txmNtqjA11HVLAU58O0/4LXesPkr07X6jHtg1ErofpNKL0/FHgA9bzbby/1jVGm3/0UzMzOJj48/4fGEhAQyMzM9ElStUZrI7F5W+WukbYLfF5v/jD1GeCYuOaZJX1PSlZfuHxNJrpsJW7+GgOCSKqUAX0ck1S00FobNMLMz7/oJ5vzNbyf787jCPPjwKvj+X2aU62bnwt0/wYXPQGiMr6PzH91uMrOw711hxi6r4dxOZJo0acKyZSf+QF66dClNmtThwYTKUzpB4Zb/VX4E2dLSmDYXQVSSZ+KSY+wB0HGI2a7p1UuZ+2HOg2b73AehYTvfxiO+06CNmZ0ZG6yc5rdz5HiU0wn/d4+ZENYRDUM/gJv+Dxq29XVk/ieiwbFqdz8olXE7kbnuuuu4//77Wb9+/XHH1q1bx9ixYzX79Z8ldIKWA81YBYsnV/z9+VmwZobZLh11UTyvtHppyxzIr6GlipYF/3vA1FsndIa+o30dkfha6wtgwASzPWcc/LrIp+H43MJ/wPr/gD0Qrn0f2l+mbtVVUdrod91nkHPYt7GcgtuJzPjx42nUqBFdu3bloosu4v7772fMmDFceOGFdOvWjaSkJB5++GFvxuqfzr7frFdPh8zUir13/WemlX295tCsn6cjk1KJXSCuFRTlmYHHaqLtC8yEbvZAU6UUEOTriKQm6HufmXfNKoaZIzw7JYo/WfUB/PCC2R48WZ0iPKHxGeZLU1EufPesr6M5KbcTmZCQEBYuXMhTTz1FSkoKr7/+Om+88Qapqan84x//YOHChYSEhFTo5hMmTMBms5VZ2rY9VgzYr1+/447fddddFbqHzzU504zzUVxgxjFwl2UdKy7ueasaqHmTzVazZ8R2FsO8R81277vMBG8iYH53L5sMSd1Mad3Hw2puqaK37FgIX4022+f8DboN92k4tYbNBhf8w2wvf9u016yhKvTpGBwczLhx41i9ejU5OTnk5OSwevVqHnroIRyOyg0q1KFDB1JSUlzLjz/+WOb47bffXub4c889V6n7+FRpqcyKd80fG3fsWWF6OwU4zBDl4l2drjbrX78zo3/WJKunQ9pGCImBsx/wdTRS0wSFwnUfQUQ8HNgEn99p2ovUBfs3mp5bziLzZeS8v/s6otql+blmOher2MzDVEMblXusL29KSgpPPfUUr776asUCCAwkISHhhMfDwsJOetwvtLoA4jvC/vWw7C3TUPNUVpQ0sOp4lQZtqg5xLUx35r0rzdgJve/0dURGQTZ8+5TZPudv+l2Q8kUlmWRm6sWw5b8w/Wqzz2Y3DdptdtPz0WYv2WeHqEbQdZgZFNIfZabCR0NN9XvjM02Vq9rEeN4F/4Bt38CvC007who4RU6FSmQ2bNjAq6++yptvvsnRo0cBOHjwIKNHj6Z58+aVGkdm27ZtJCUl0bx5c4YPH86uXbvKHJ8+fTr169enY8eOjB8/npycnJNeLz8/n4yMjDKLz9lscNYYs71kivlwOpmcw8dG8tVkZtWnJlYv/fSqGR06pgn0ut3X0UhN1qinmZMJzFw5v3wAq94zJcHL34Zlb8DSKbDkNfjpFfh6HLzUEeZPqHmlkKdSkA0fXWvG0qnXAq6brqkGvKVes2PjVc19uEaOt2WzLPfKir744guuvvpqioqKAGjevDlvvfUWQ4cOpUePHowePZoLL7ywQjefM2cOWVlZtGnThpSUFCZOnMjevXtZv349kZGRvPnmmzRp0oSkpCTWrl3LuHHj6NWrF59//vkJrzlhwgQmTpx43P709HSioqIqFJ9HFRfBqz3hyE4Y9Az0uefE5/70CnzziGlodef3+pZRXTL3w4ttTS+zv672/SSMmfthcjcozIar3z3WTVzkZH79zoz94Sw2VQFWsfmdtpwl+5ymKmb7fDiw2bwnwAHdboC+f4XYpr6M/tScxWbE3q1zICzOTDdQOoq6eEd+JrzS03ypGjARzhpdLbfNyMggOjr6lJ/fbicyvXr1om/fvjz55JO8/fbb3H///XTo0IF3332X008/3SNBHz16lCZNmvDiiy9y223Hdzf+9ttv6d+/P9u3b6dFi/J/cfPz88nPP5YxZmRkkJyc7PtEBmDFVNMoLeo080EZGHz8OU4nvNrDjDsz+GXocXM1B1nHvX+FKUI97xE492++jeXL+8wYIaf1hL/MV0IrnuV0mmTghxfNwGdgqp86DjEfVPEdfBreCc0ZB0tfN8nXiC+hcW9fR1Q3rP4YZt8FwREwapWZyNTL3E1k3K5a2rJlCyNHjiQiIoJRo0Zht9t56aWXPJbEAMTExNC6dWu2b99e7vHevc0v7ImOAzgcDqKiososNUbX6yEiATL2wtpPyj9n53cmiXFEHavqkOrjql761LcN29I2w6r3zfYF/1ASI55nt0PbS0ySPOIraHG+Kb1Z9ylMOdNU3VRlVHJvWPqGSWLATPqoJKb6dL7WtCMsyIIFT/g6mjIqNEVBaVIQEBBAaGgozZs392gwWVlZ7Nixg8TExHKPr169GuCEx2u8QAecWVLXuHiSKSL9s9JRFLtcB8Hh1RaalGh3qfmmd3Crb2cXnveYqQJoeyk06eO7OKT2s9mg2dlw4yy447uSEV1tZiqMdwYeS6h97ehu+KZkGIIBE8xs4FJ97Ha48J9me/WHpmNEDVGhXktz584lOtq0cHc6nSxYsOC4kX4vu+wyt683duxYBg8eTJMmTdi3bx+PP/44AQEBDBs2jB07dvDRRx9x8cUXExcXx9q1axkzZgznnHMOnTv78TgaPW6G75+HQ9vNrNZ//M+Yvte0CgczdoxUv5BoaHMhbPw/0+jXF2O2/LoIts01g98NOL69l4jXJHWDoe/Dwe3w3TNmUM6v7jcDRvo6of7uWTN/UpOzNLK1rySfDp2vg7UzYM5DcNs3NaK0uEKJzIgRZSctvPPOsl1UbTYbxcXllDKcwJ49exg2bBiHDh2iQYMGnHXWWSxZsoQGDRqQl5fH/PnzmTRpEtnZ2SQnJzNkyBAeeeSRioRc8zgiTdfeRf80ddPtrzj2i7DqPVO026Sv5tHxpU7XmERm/X+g/+PVO+O402kaeoNJZuu3rL57i5Sq3xKGvG0aBW+cDZ/cAHcshJjGvoknbROs+chsD5hQIz4866wBj5tRxvcsM9MXdPZ9Ewi3G/v6K3cbC1WrnMPwUgcozIEb/gMtB0BxoekKmZVqJoMrHaBNql9hnum9lHvEfPMbWI2lIms+gVl3mDZSf/0FwutX371F/qwgG969EFLXQnwnuG2ub6q8Px5mJt9tNxiu/bD67y9lff88fPskRCbBqBVe+53weGNfd+Tm5nrycrVXWL1jvZF+eNGst/zPJDHhDaCd+9Vz4gVBIXDpJLO9eBJs/l/13Lcw91gjurPGKIkR3wsONwPthTeA/etg1l3VP2rwriXm76PNDuc/Vr33lvL1udeUzmXugx8n+ToazyQy+fn5vPDCCzRr5uNxN/xJn3vBHgS/L4ZdS4818u1+U/ndsqV6dbgCzigZ62fWXdUzGd/S1yFjjxlx9Yy7vX8/EXfEJJtSEHuQadf3fTVOE2NZMO9xs93tRmjQuvruLScWFAIXlIw4/tNkOLrr5Od7mduJTH5+PuPHj6dnz56ceeaZzJ49G4CpU6fSrFkzJk2axJgxY7wVZ+0TfZrpmQQw52+wcxFg07gxNcmAidCoF+Snm/lcCvO8d6/sg8dK5/o/aubPEakpGp8Bl75ktr97xrQhqw5bv4bdSyAwBPo9VD33FPe0GwxNz4aiPNPL0ofcTmQee+wxpkyZQtOmTfntt9+45ppruOOOO3jppZd48cUX+e233xg3bpw3Y619+o4GbJCyxrxuPch3jenkeIHBcM00M3po6lqY48YcWZW16DkzZ0xCZ+g01Hv3Eams7jeWLaVMWevd+zmLYX5J+7Qz7jZzR0nNYbPBhc+aKr8Ns+C3xT4Lxe1EZubMmbz//vt89tlnfPPNNxQXF1NUVMSaNWu47rrrCAgI8GactVP9liVjNpToefxoxuJj0aeZ3hvYTK+y1R95/h77NxybJPSCf5jxGkRqooFPmoHzCnNgxvWQdcB791ozw8zmHRKj7tY1VUJH6HGLSWb2LPdZGG7/xdyzZw89evQAoGPHjjgcDsaMGYNN3eCq5uwHTN1z/TbQsr+vo5HytDgf+o0321/dbxIPTznyO3w4xHRzbX0hND/Xc9cW8bSAQDPvV70WZsLGT2+EogLP36cwDxY+bbbPvh9CYzx/D/GM8/5u5gSspvmXyuN2IlNcXExw8LFGqIGBgURERHglqDolsTOMXAq3/A/sKtWqsc75G7ToD0W58MmNkOeBWdWzDsAHV0JmCjRoB1dMqfo1RbwtNBaGzQBHNOz6Gf73gOen81j+VknD99Og1x2evbZ4VngcJHTyaQhuj/RlWRY333wzDoeZKj0vL4+77rqL8PCy/cdPNjO1nIBmbq357Ha46i144xw4vAO+uBeuea/yA3PlZcCHV5lrRTeGGz833fJF/EGD1nD1O/DRUDOFQVxL6HufZ66dexR+eMFs9xuvhu9ySm6XyIwYMYKGDRsSHR1NdHQ0N9xwA0lJSa7XpYtIrRUeB0PfM1WBG//v2OR1FVWYZwb4Sl0LYfXhptlqyCj+p9VA02YGTK+VZW955rqLXzaDUTZoC12GeeaaUqtpZF+Rilr6pukybw+Em/9XsRl4i4tMV+4t/4XgSLjlv5DYxXuxinjbgifhh+fN9uDJ0GPEyc8/mYwUmNzNVOFe95GZnVvqLJ+M7JuWlubJy4nUTL1uh44lDXRn3gyb/1v+TOZ/Zlnw5V9NEhPggGEfK4kR/3f+I2aAT4Av7zO9jSpr0T9NEpPcG9pc7Jn4pNZzO5EJCwvjwIFjXe0uueQSUlJSXK/3799PYmKiZ6MTqYlsNvPNs35rM0T3jOvh5a7w40uQfaj891iWmQxy9XTTVfGaqdDs7GoNW8QrbDYzbMDptwMWzL4b1leireTBbaa9DWhiSKkQtxOZvLw8/lgL9f333x83t1Itr6USOcYRYaqV+o6G0HqQvgvmT4AX28Hse2DvqrLnL54EP79qti97RUXmUrvYbHDRc2aKFcsJ//kLbPrK/fcXFZipCKxiMwxBkzO9F6vUOm73WnKHxpSROiWigZkZu99D5hvosjchZbUpdVk9HU7rabqOFmSaJAfMN9duN/gyahHvsNvNZKtFBbB2hql2ve4jaH3Bid+TuR9WvGuW7DTABv0fr6aApbbwaCIjUicFhUK34dD1eti70iQ0G2bB3hUwa8Wx884aA2eO8l2cIt5mD4DLX4PifPN/4JMbYPin0Lxf2fP2rDS9/jbMAmeh2ReZaNrbxLev9rDFv7mdyNhstjIlLn9+LVLn2WzQqKdZLviHmdJgxVTI2AvdR+ibptQNAYFmzKWiAtOw/aPr4Ib/QKPTjw1bsPcPCX7yGdD7Dmh3GQQE+S5u8Vtud7+22+1ER0e7kpejR48SFRWFvWReGMuyyMjIoLjYjd4b1Ujdr8Wniovg8K9Qv5UaL0rdUpQPM4bD9nkQHAHB4ZC13xwLCIaOV5sEJqmbb+OUGsvdz2+3S2SmTp3qkcBE6pSAQDMKqkhdE+iAaz+Aj66FnYugIAsiEuD0v0CPm00bMxEP0IB4IiLiPQXZsOTfENvMVB8FBp/6PSJ4oURGRESkwoLDzaSrIl7i0ZF9RURERKqTEhkRERHxW0pkRERExG8pkRERERG/5XYi0759ew4fPux6fc8993Dw4EHX67S0NMLCwjwbnYiIiMhJuJ3IbN68maKiItfrDz/8kIyMDNdry7LIy8vzbHQiIiIiJ1HpqqXyhp/RlAUiIiJSndRGRkRERPyW24lMeZNEqgRGREREfMntkX0ty6J///4EBpq35ObmMnjwYIKDzXDTf2w/IyIiIlId3E5kHn/88TKvL7/88uPOGTJkSNUjEhEREXGT24nMLbfcQqNGjbDb1axGREREaga3s5JmzZqVGTdGRERExNfcTmTK624tIiIi4ksVqidSLyURERGpSdxuIwPw6KOPnnIaghdffLFKAYmIiIi4q0KJzLp161zdrcujEhsRERGpThVKZGbNmkXDhg29FYuIiIhIhVRoZF8RERGRmkS9lkRERMRvuZ3ITJ06lejoaG/GIiIiIlIhbreRSU9P54033jhuf3R0NK1bt6ZPnz4eDUxERETkVNxOZF566aVy9x89epT09HTOPPNMvvjiC+rVq+ex4EREREROxu2qpZ07d5a7HDlyhO3bt+N0OnnkkUe8GauIiIhIGR6ZAbJ58+Y8++yzfPPNN564nIiIiIhbPDaVdePGjUlNTfXU5UREREROyWOJzLp162jSpImnLiciIiJySm439s3IyCh3f3p6OitXruSBBx5gxIgRHgtMRERE5FTcTmRiYmJOOLqvzWbjL3/5Cw899JDHAhMRERE5FbcTmYULF5a7PyoqilatWhESEkJaWhpJSUkeC05ERETkZNxOZM4999yTHl+zZg3du3enuLi4ykGJiIiIuMNjjX1FREREqpsSGREREfFbSmRERETEb7ndRmbt2rUnPb5ly5YqByMiIiJSEW4nMl27dsVms2FZ1nHHSvefqHu2iIiIiDe4ncjs3LnTm3GIiIiIVJjbiYymHxAREZGaxu1EptTy5cv5+OOP2bp1KwCtW7fm+uuvp2fPnh4PTkRERORkKtRr6cEHH6R37968/fbb7Nmzhz179vDWW2/Ru3dvxo0b560YRURERMrldiLz3nvv8corrzB58mQOHTrE6tWrWb16NYcPH+all15i8uTJvP/++96MVURERKQMm1VeN6Ry9OrVi2HDhjFmzJhyj7/44ovMmDGDZcuWeTTAqsrIyCA6Opr09HSioqJ8HY6IiIi4wd3Pb7dLZDZs2MDll19+wuNXXHEFGzZsqFiUIiIiIlXgdiITEBBAQUHBCY8XFhYSEBDgkaBERERE3OF2ItO9e3emT59+wuMffPAB3bt390hQIiIiIu5wu/v12LFjueKKK8jPz+eBBx4gPj4egNTUVF544QUmTZrErFmzvBaoiIiIyJ+53dgX4JVXXmHs2LEUFRURHR0NQHp6OoGBgTz33HPcd999Xgu0stTYV0RExP+4+/ldoUQGYM+ePcycOZNt27YBZkC8IUOGkJycXLWIvUSJjIiIiP/xWiLjb5TIiIiI+B+Pd7/eunXrcWPELFiwgPPOO49evXrx9NNPVzjICRMmYLPZyixt27Z1Hc/Ly2PkyJHExcURERHBkCFD2L9/f4XvIyIiIrWT24nMuHHj+Oqrr1yvd+7cyeDBgwkODqZPnz4888wzTJo0qcIBdOjQgZSUFNfy448/uo6NGTOGL7/8kpkzZ7Jo0SL27dvHVVddVeF7iIiISO3kdq+lFStW8OCDD7peT58+ndatWzN37lwAOnfuzCuvvMLo0aMrFkBgIAkJCcftT09P55133uGjjz7i/PPPB2Dq1Km0a9eOJUuWcMYZZ1ToPiIiIlL7uF0ic/DgQRo1auR6vXDhQgYPHux63a9fP3777bcKB7Bt2zaSkpJo3rw5w4cPZ9euXQCsXLmSwsJCBgwY4Dq3bdu2NG7cmJ9//vmE18vPzycjI6PMIiIiIrWT24lMvXr1SElJAcDpdLJixYoypSIFBQVUtN1w7969mTZtGl9//TVTpkxh586dnH322WRmZpKamkpwcDAxMTFl3hMfH09qauoJr/nMM88QHR3tWmpqbyoRERGpOrerlvr168eTTz7Jv//9b2bOnInT6aRfv36u4xs3bqRp06YVuvlFF13k2u7cuTO9e/emSZMmfPrpp4SGhlboWqXGjx/P/fff73qdkZGhZEZERKSWcjuReeqppxg4cCBNmjQhICCAyZMnEx4e7jr+wQcfuNqyVFZMTAytW7dm+/btDBw4kIKCAo4ePVqmVGb//v3ltqkp5XA4cDgcVYpDRERE/IPbiUzTpk3ZtGkTGzZsoEGDBiQlJZU5PnHixDJtaCojKyuLHTt2cOONN9KjRw+CgoJYsGABQ4YMAWDLli3s2rWLPn36VOk+IiIiUju4nciA6WHUpUuXMvsKCgooKCg4br87xo4dy+DBg2nSpAn79u3j8ccfJyAggGHDhhEdHc1tt93G/fffT7169YiKimLUqFH06dNHPZZEREQEqEBjXzDdn0eNGuWaBXv8+PFERkYSHR3NwIEDOXToUIVuvmfPHoYNG0abNm0YOnQocXFxLFmyhAYNGgDw0ksvcemllzJkyBDOOeccEhIS+Pzzzyt0DxEREam93J6i4KmnnuKpp56ib9++rFq1iqFDhzJ79mxGjx6N3W5n8uTJXHrppUyZMsXbMVeIpigQERHxP+5+frtdtTRt2jTeeecdhg0bxooVK+jduzeffvqpq/1Kx44dueuuu6oeuYiIiIib3K5a2rVrF2eddRYAPXv2JDAwkI4dO7qOd+7c2TXOjIiIiEh1cDuRKSwsLNOtOTg4mKCgINfrwMBAiouLPRudiIiIyElUqNfSxo0bXaPqWpbF5s2bycrKAswUBiIiIiLVye3Gvna7HZvNVu40BKX7bTZbjSuVUWNfERER/+Pxxr47d+70SGAiIiIinuJ2ItOkSZNTnrN+/foqBSMiIiJSERUaEK88mZmZvPnmm/Tq1atSo/uKiIiIVFalE5nvv/+eESNGkJiYyPPPP8/555/PkiVLPBmbiIiIyElVqNdSamqqa2C8jIwMhg4dSn5+PrNnz6Z9+/beilFERESkXG6XyAwePJg2bdqwdu1aJk2axL59+3jllVe8GZuIiIjISbldIjNnzhz++te/cvfdd9OqVStvxiQiIiLiFrdLZH788UcyMzPp0aMHvXv35tVXX9UgeCIiIuJTbicyZ5xxBm+99RYpKSnceeedzJgxg6SkJJxOJ/PmzSMzM9ObcYqIiIgcx+2RfcuzZcsW3nnnHT744AOOHj3KwIED+eKLLzwZX5VpZF8RERH/4+7nd5XGkWnTpg3PPfcce/bs4eOPP67KpUREREQqrEolMv5AJTIiIiL+p1pKZERERER8SYmMiIiI+C0lMiIiIuK3lMiIiIiI33J7ZN/vv//erfPOOeecSgcjIiIiUhFuJzL9+vU74TGbzeZaFxUVVTkoEREREXe4ncgcOXKk3P05OTm8/PLLTJ48mebNm3ssMBEREZFTcTuRiY6OLvPa6XTy7rvvMnHiROx2O6+99hojRozweIAiIiIiJ+J2IvNHn3/+OQ8//DAHDhxg/PjxjBo1CofD4enYRERERE6qQr2WFi1axBlnnMGNN97IVVddxa+//srYsWOVxIiIiIhPuF0ic/HFFzN//nxuvfVWZs+eTUJCgjfjEhERETklt+dastvtBAYGEh4e7uqlVJ7Dhw97LDhP0FxLIiIi/sfdz2+3S2SmTp3qkcBEREREPMXtRMadHknFxcVVCkZERESkIjwyRcHWrVsZN24cjRo18sTlRERERNxS6UQmJyeHqVOncvbZZ9O+fXsWLVrE/fff78nYRERERE6qwuPILFmyhLfffpuZM2fSuHFjNm3axMKFCzn77LO9EZ+IiIjICbldIvPCCy/QoUMHrr76amJjY/n+++9Zt24dNpuNuLg4b8YoIiIiUi63S2TGjRvHuHHjeOKJJwgICPBmTCIiIiJucbtE5sknn2TmzJk0a9aMcePGsX79em/GJSIiInJKbicy48ePZ+vWrXzwwQekpqbSu3dvunTpgmVZJ5wZW0RERMSbKtxr6dxzz+W9994jNTWVe+65hx49enDuuedy5pln8uKLL3ojRhEREZFyuT1FwcmsW7eOd955h+nTp3PgwAFPxOUxmqJARETE/7j7+e2RRKZUYWEhQUFBnrqcRyiRERER8T/ufn67XbV08cUXk56e7nr97LPPcvToUdfrQ4cO0aVLl8pFKyIiIlIJbicyc+fOJT8/3/X66aefLjPTdVFREVu2bPFsdCIiIiIn4XYi8+caKA/WSImIiIhUikcmjRQRERHxBbcTGZvNhs1mO26fiIiIiK+4PUWBZVncfPPNOBwOAPLy8rjrrrsIDw8HKNN+RkRERKQ6uJ3IjBgxoszrG2644bhzbrrppqpHJCIiIuImtxOZqVOnejMOERERkQpTY18RERHxW26XyNx6661unffuu+9WOhgRERGRinA7kZk2bRpNmjShW7duGkNGREREagS3E5m7776bjz/+mJ07d3LLLbdwww03UK9ePW/GJiIiInJSbreRee2110hJSeHBBx/kyy+/JDk5maFDhzJ37lyV0IiIiIhPVHr2699//51p06bx/vvvU1RUxIYNG4iIiPB0fFWm2a9FRET8j8dnvz7ujXY7NpsNy7IoLi6u7GVEREREKq1CiUx+fj4ff/wxAwcOpHXr1qxbt45XX32VXbt21cjSGBEREand3G7se8899zBjxgySk5O59dZb+fjjj6lfv743YxMRERE5KbfbyNjtdho3bky3bt1OOlnk559/7rHgPEFtZERERPyPu5/fbpfI3HTTTZrtWkRERGqUCg2IJyIiIlKTaK4lERER8VtKZERERMRvKZERERERv6VERkRERPyWEhkRERHxW0pkRERExG8pkRERERG/pURGRERE/FaNSWSeffZZbDYbo0ePdu3r168fNputzHLXXXf5LkgRERGpUdwe2debli9fzhtvvEHnzp2PO3b77bfzxBNPuF6HhYVVZ2giIiJSg/m8RCYrK4vhw4fz1ltvERsbe9zxsLAwEhISXIsmfhQREZFSPk9kRo4cySWXXMKAAQPKPT59+nTq169Px44dGT9+PDk5OSe9Xn5+PhkZGWUWERERqZ18WrU0Y8YMVq1axfLly8s9fv3119OkSROSkpJYu3Yt48aNY8uWLXz++ecnvOYzzzzDxIkTvRWyiIiI1CA2y7IsX9x49+7d9OzZk3nz5rnaxvTr14+uXbsyadKkct/z7bff0r9/f7Zv306LFi3KPSc/P5/8/HzX64yMDJKTk0lPT1e1lIiIiJ/IyMggOjr6lJ/fPiuRWblyJWlpaXTv3t21r7i4mO+//55XX32V/Px8AgICyrynd+/eACdNZBwOBw6Hw3uBi4iISI3hs0Smf//+rFu3rsy+W265hbZt2zJu3LjjkhiA1atXA5CYmFgdIYqIiEgN57NEJjIyko4dO5bZFx4eTlxcHB07dmTHjh189NFHXHzxxcTFxbF27VrGjBnDOeecU243bREREal7asQ4MuUJDg5m/vz5TJo0iezsbJKTkxkyZAiPPPKIr0MTERGRGsJnjX2ri7uNhURERKTmcPfz2+fjyIiIiIhUlhIZERER8VtKZERERMRvKZERERERv6VERkRERPyWEhkRERHxW0pkRERExG8pkRERERG/pURGRERE/JYSGREREfFbSmRERETEbymREREREb+lREZERET8lhIZERER8VtKZERERMRvKZERERERv6VERkRERPyWEhkRERHxW0pkRERExG8pkRERERG/pURGRERE/JYSGREREfFbSmRERETEbymREREREb+lREZERET8lhIZERER8VtKZERERMRvKZERERERv6VERkRERPyWEhkRERHxW0pkRERExG8F+joAf5edX8T+jDz2Z+STlplHWka+eZ1p1oezC2hcL4xuyTF0axxL5+RookKCfB22iIhIraBEppImfrmBmSv2kJVfdMpzt6dl8e3mNABsNmjZIIJujWPomhxLt8YxtI6PJMBu83bIIiIitY4SmSooTWIiHIE0jHIQHxli1lEhNIx00DAqhNiwILanZfHLrqP8svsIuw/nsi0ti21pWXy6Yg8A4cEBNK0fTsPIY+9tUHqNkus0iHAQHKiaQBERkT+yWZZl+ToIb8rIyCA6Opr09HSioqI8dt19R3PJL3LSMNJBuMP9fPBgVj6rdx1l9W6T2KzZne5WqQ5Ak7gwzmvTkP7tGtKrWT0cgQGVDV9ERKRGc/fzW4mMjxU7LX49kMXuIzmkZeSTlvmHtjaZ+RzIyONAVj6FxWX/mcKDAzindQPOb9uQ89o2pH6Ew6Nx5RUWE2C3ERTg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",
+ "text/plain": [
+ "