diff --git a/labworks/LW2/IS_LR2.ipynb b/labworks/LW2/IS_LR2.ipynb new file mode 100644 index 0000000..deeebfc --- /dev/null +++ b/labworks/LW2/IS_LR2.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"I9CzTtOtgfY0"},"outputs":[],"source":["import os\n","os.chdir('/content/drive/MyDrive/Colab Notebooks')"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9PIXtr8OkZdZ"},"outputs":[],"source":["# ===== ПОДГОТОВКА СРЕДЫ =====\n","\n","# Подключение Google Диска\n","from google.colab import drive\n","drive.mount('/content/drive')\n","\n","# Создание и переход в рабочую директорию\n","import os\n","work_dir = '/content/drive/MyDrive/Colab Notebooks/is_lab2'\n","os.makedirs(work_dir, exist_ok=True)\n","os.chdir(work_dir)\n","\n","# Создаем папку для результатов\n","os.makedirs('out', exist_ok=True)\n","\n","# СКАЧИВАНИЕ ФАЙЛОВ\n","dataset_name = 'WBC' # Ваш вариант для k=5\n","base_url = \"http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/\"\n","\n","# Скачивание библиотеки\n","!wget -N {base_url}lab02_lib.py\n","\n","# Скачивание обучающей и тестовой выборок\n","!wget -N {base_url}data/{dataset_name}_train.txt\n","!wget -N {base_url}data/{dataset_name}_test.txt\n","\n","# Переименование файлов для удобства\n","!cp {dataset_name}_train.txt train.txt\n","!cp {dataset_name}_test.txt test.txt\n","\n","print(\"Файлы успешно скачаны!\")\n","print(\"Содержимое рабочей директории:\")\n","!ls -la"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XuooLJpmlsLr"},"outputs":[],"source":["# Импорт библиотек (после скачивания lab02_lib.py)\n","import numpy as np\n","import matplotlib.pyplot as plt\n","from sklearn.preprocessing import StandardScaler\n","from sklearn.datasets import make_blobs\n","import tensorflow as tf\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dense, Activation\n","from tensorflow.keras.optimizers import Adam\n","from tensorflow.keras.callbacks import EarlyStopping\n","import lab02_lib as lib\n","\n","# Параметры для варианта 5 (номер бригады k=5)\n","k = 5 # номер бригады\n","center_coords = (k, k) # координаты центра (5, 5)\n","\n","print(\"Лабораторная работа №2: Обнаружение аномалий с помощью автокодировщиков\")\n","print(\"Вариант 5 (номер бригады k=5) - данные WBC\")\n","print(\"=\" * 70)\n","print(\"Подготовка среды завершена успешно!\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"FqOeY333kZuh"},"outputs":[],"source":["# ===== ЗАДАНИЕ 1: Работа с двумерными синтетическими данными =====\n","\n","# 1. Генерация индивидуального набора двумерных данных\n","print(\"Генерация синтетических данных с центром в (5, 5)...\")\n","\n","# Используем функцию из библиотеки lab02_lib для генерации данных\n","data = lib.datagen(k, k, 1000, 2)\n","\n","print(f\"Сгенерировано {len(data)} точек\")\n","print(f\"Центр данных: {center_coords}\")\n","print(f\"Размерность данных: {data.shape}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"zHFeGRoxndgq"},"outputs":[],"source":["# 2. Создание и обучение автокодировщика AE1 (простая архитектура)\n","print(\"=\"*50)\n","print(\"Обучение AE1\")\n","print(\"=\"*50)\n","\n","# Создаем автокодировщик вручную для получения истории обучения\n","def create_simple_ae():\n"," model = Sequential()\n"," # Входной слой\n"," model.add(Dense(2, input_shape=(2,), activation='tanh'))\n"," # Скрытый слой (1 нейрон)\n"," model.add(Dense(1, activation='tanh'))\n"," # Выходной слой\n"," model.add(Dense(2, activation='linear'))\n"," return model\n","\n","# Создаем и компилируем модель\n","ae1 = create_simple_ae()\n","ae1.compile(optimizer=Adam(learning_rate=0.001), loss='mse')\n","\n","print(\"Архитектура AE1:\")\n","ae1.summary()\n","\n","# Обучаем модель с сохранением истории\n","print(\"\\nНачало обучения AE1...\")\n","history_ae1 = ae1.fit(data, data,\n"," epochs=1000,\n"," batch_size=32,\n"," validation_split=0.2,\n"," verbose=1,\n"," callbacks=[EarlyStopping(patience=300, restore_best_weights=True)])\n","\n","# Сохраняем модель\n","ae1.save('out/AE1.h5')\n","\n","# Вычисляем ошибки реконструкции\n","X_pred_ae1 = ae1.predict(data)\n","reconstruction_errors_ae1 = np.mean(np.square(data - X_pred_ae1), axis=1)\n","threshold_ae1 = np.max(reconstruction_errors_ae1) # Порог как максимальная ошибка\n","\n","# Анализ результатов AE1\n","print(\"\\nАнализ результатов AE1\")\n","mse_ae1 = history_ae1.history['loss'][-1]\n","print(f\"Финальная ошибка MSE AE1: {mse_ae1:.6f}\")\n","print(f\"Порог ошибки реконструкции AE1: {threshold_ae1:.6f}\")\n","\n","# Построение графиков\n","plt.figure(figsize=(15, 4))\n","\n","# График 1: MSE по эпохам\n","plt.subplot(1, 3, 1)\n","plt.plot(history_ae1.history['loss'], label='Training Loss', color='blue')\n","plt.plot(history_ae1.history['val_loss'], label='Validation Loss', color='red')\n","plt.title('AE1: Ошибка обучения (MSE)')\n","plt.xlabel('Эпоха')\n","plt.ylabel('MSE')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 2: Ошибки реконструкции по точкам\n","plt.subplot(1, 3, 2)\n","plt.plot(reconstruction_errors_ae1, 'b-', alpha=0.7, linewidth=0.8)\n","plt.axhline(y=threshold_ae1, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae1:.2f}')\n","plt.title('AE1: Ошибки реконструкции')\n","plt.xlabel('Номер точки')\n","plt.ylabel('Ошибка реконструкции')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 3: Гистограмма распределения ошибок\n","plt.subplot(1, 3, 3)\n","plt.hist(reconstruction_errors_ae1, bins=20, alpha=0.7, color='blue', edgecolor='black')\n","plt.axvline(threshold_ae1, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae1:.2f}')\n","plt.title('AE1: Распределение ошибок')\n","plt.xlabel('Ошибка реконструкции')\n","plt.ylabel('Частота')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('out/ae1_detailed_results.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","# Сохраняем порог\n","with open('out/AE1_ire_th.txt', 'w') as f:\n"," f.write(str(threshold_ae1))\n","\n","# Сохраняем для использования в следующих шагах\n","ae1_trained = ae1\n","IRE1 = reconstruction_errors_ae1\n","IREth1 = threshold_ae1\n","\n","print(f\"Обучение AE1 завершено!\")\n","print(f\"Минимальная ошибка: {np.min(IRE1):.6f}\")\n","print(f\"Максимальная ошибка: {np.max(IRE1):.6f}\")\n","print(f\"Средняя ошибка: {np.mean(IRE1):.6f}\")"]},{"cell_type":"code","source":["# 3. Создание и обучение автокодировщика AE2 (архитектура по умолчанию)\n","print(\"=\"*50)\n","print(\"Обучение AE2\")\n","print(\"=\"*50)\n","\n","# Используем архитектуру по умолчанию: [2-3-2-1-2-3-2] (5 скрытых слоев: 3-2-1-2-3)\n","print(\"Используется архитектура по умолчанию: [2-3-2-1-2-3-2]\")\n","print(\"Количество скрытых слоев: 5\")\n","print(\"Нейроны в скрытых слоях: 3-2-1-2-3\")\n","\n","def create_ae2_default():\n"," model = Sequential()\n","\n"," # Входной слой\n"," model.add(Dense(2, input_shape=(2,), activation='tanh'))\n","\n"," # Скрытые слои по умолчанию: 3-2-1-2-3 (5 слоев)\n"," model.add(Dense(3, activation='tanh')) # Скрытый слой 1\n"," model.add(Dense(2, activation='tanh')) # Скрытый слой 2\n"," model.add(Dense(1, activation='tanh')) # Скрытый слой 3 (bottleneck)\n"," model.add(Dense(2, activation='tanh')) # Скрытый слой 4\n"," model.add(Dense(3, activation='tanh')) # Скрытый слой 5\n","\n"," # Выходной слой\n"," model.add(Dense(2, activation='linear'))\n","\n"," return model\n","\n","# Создаем и компилируем модель\n","ae2 = create_ae2_default()\n","ae2.compile(optimizer=Adam(learning_rate=0.001), loss='mse')\n","\n","print(\"\\nАрхитектура AE2:\")\n","ae2.summary()\n","\n","# Обучаем модель с сохранением истории (patience=300)\n","print(f\"\\nНачало обучения AE2 (patience=300)...\")\n","history_ae2 = ae2.fit(data, data,\n"," epochs=3000,\n"," batch_size=32,\n"," validation_split=0.2,\n"," verbose=1,\n"," callbacks=[EarlyStopping(patience=300, restore_best_weights=True)])\n","\n","# Сохраняем модель\n","ae2.save('out/AE2.h5')\n","\n","# Вычисляем ошибки реконструкции\n","X_pred_ae2 = ae2.predict(data)\n","reconstruction_errors_ae2 = np.mean(np.square(data - X_pred_ae2), axis=1)\n","threshold_ae2 = np.max(reconstruction_errors_ae2) # Порог как максимальная ошибка\n","\n","# Анализ результатов AE2\n","print(\"\\n\" + \"=\"*50)\n","print(\"АНАЛИЗ РЕЗУЛЬТАТОВ AE2\")\n","print(\"=\"*50)\n","mse_ae2 = history_ae2.history['loss'][-1]\n","print(f\"Финальная ошибка MSE AE2: {mse_ae2:.6f}\")\n","print(f\"Порог ошибки реконструкции AE2: {threshold_ae2:.6f}\")\n","\n","# Проверка рекомендаций по MSE_stop\n","print(\"\\nПРОВЕРКА РЕКОМЕНДАЦИЙ:\")\n","if mse_ae2 >= 0.01:\n"," print(\"✓ MSE_stop для AE2 соответствует рекомендации (≥ 0.01)\")\n","else:\n"," print(\"✗ MSE_stop для AE2 слишком низкая, возможно переобучение\")\n","\n","# Построение графиков\n","plt.figure(figsize=(15, 4))\n","\n","# График 1: MSE по эпохам\n","plt.subplot(1, 3, 1)\n","plt.plot(history_ae2.history['loss'], label='Training Loss', color='green', linewidth=2)\n","plt.plot(history_ae2.history['val_loss'], label='Validation Loss', color='red', linewidth=2)\n","plt.title('AE2: Динамика обучения (MSE)', fontsize=12, fontweight='bold')\n","plt.xlabel('Эпоха')\n","plt.ylabel('MSE')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 2: Ошибки реконструкции по точкам\n","plt.subplot(1, 3, 2)\n","plt.plot(reconstruction_errors_ae2, 'g-', alpha=0.7, linewidth=0.8)\n","plt.axhline(y=threshold_ae2, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae2:.4f}')\n","plt.title('AE2: Ошибки реконструкции по точкам', fontsize=12, fontweight='bold')\n","plt.xlabel('Номер точки')\n","plt.ylabel('Ошибка реконструкции')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 3: Гистограмма распределения ошибок\n","plt.subplot(1, 3, 3)\n","plt.hist(reconstruction_errors_ae2, bins=20, alpha=0.7, color='green', edgecolor='black')\n","plt.axvline(threshold_ae2, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae2:.4f}')\n","plt.title('AE2: Распределение ошибок', fontsize=12, fontweight='bold')\n","plt.xlabel('Ошибка реконструкции')\n","plt.ylabel('Частота')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('out/ae2_detailed_results.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","# Сохраняем порог\n","with open('out/AE2_ire_th.txt', 'w') as f:\n"," f.write(str(threshold_ae2))\n","\n","# Сохраняем для использования в следующих шагах\n","ae2_trained = ae2\n","IRE2 = reconstruction_errors_ae2\n","IREth2 = threshold_ae2\n","\n","# Детальная статистика\n","print(\"\\nДЕТАЛЬНАЯ СТАТИСТИКА AE2:\")\n","print(f\"Минимальная ошибка: {np.min(IRE2):.6f}\")\n","print(f\"Максимальная ошибка: {np.max(IRE2):.6f}\")\n","print(f\"Средняя ошибка: {np.mean(IRE2):.6f}\")\n","print(f\"Медианная ошибка: {np.median(IRE2):.6f}\")\n","print(f\"Стандартное отклонение: {np.std(IRE2):.6f}\")\n","print(f\"Количество точек с ошибкой выше порога: {np.sum(IRE2 > IREth2)}\")\n","print(f\"Процент точек выше порога: {np.sum(IRE2 > IREth2) / len(IRE2) * 100:.2f}%\")\n","\n","print(f\"\\nОбучение AE2 завершено!\")\n","print(f\"Архитектура: [2-3-2-1-2-3-2]\")\n","print(f\"Количество скрытых слоев: 5\")\n","print(f\"Нейроны в скрытых слоях: 3-2-1-2-3\")"],"metadata":{"id":"imaTiOCxvMV4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 7. Расчет характеристик качества обучения EDCA для AE1 и AE2\n","print(\"=\"*70)\n","print(\"РАСЧЕТ ХАРАКТЕРИСТИК КАЧЕСТВА ОБУЧЕНИЯ EDCA\")\n","print(\"=\"*70)\n","\n","# Параметры для расчета\n","numb_square = 20\n","\n","print(\"\\n\" + \"=\"*30)\n","print(\"РАСЧЕТ ДЛЯ AE1\")\n","print(\"=\"*30)\n","xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)\n","\n","print(\"\\n\" + \"=\"*30)\n","print(\"РАСЧЕТ ДЛЯ AE2\")\n","print(\"=\"*30)\n","xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)\n","\n","# Сравнение областей аппроксимации\n","print(\"\\n\" + \"=\"*50)\n","print(\"СРАВНЕНИЕ ОБЛАСТЕЙ АППРОКСИМАЦИИ AE1 И AE2\")\n","print(\"=\"*50)\n","lib.plot2in1(data, xx, yy, Z1, Z2)\n","\n","\n","\n"],"metadata":{"id":"7J0zH8tzvMpB"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 8. УЛУЧШЕНИЕ АВТОКОДИРОВЩИКА AE2\n","print(\"=\"*70)\n","print(\"УЛУЧШЕНИЕ АВТОКОДИРОВЩИКА AE2 - ПОВТОРНОЕ ОБУЧЕНИЕ\")\n","print(\"=\"*70)\n","\n","# Пересоздаем AE2 с улучшенными параметрами обучения\n","def create_ae2_improved():\n"," model = Sequential()\n","\n"," # Входной слой\n"," model.add(Dense(2, input_shape=(2,), activation='tanh'))\n","\n"," # Та же архитектура: [2-3-2-1-2-3-2]\n"," model.add(Dense(3, activation='tanh')) # Слой 1\n"," model.add(Dense(2, activation='tanh')) # Слой 2\n"," model.add(Dense(1, activation='tanh')) # Слой 3 (bottleneck)\n"," model.add(Dense(2, activation='tanh')) # Слой 4\n"," model.add(Dense(3, activation='tanh')) # Слой 5\n","\n"," # Выходной слой\n"," model.add(Dense(2, activation='linear'))\n","\n"," return model\n","\n","# Создаем и компилируем улучшенную модель AE2\n","ae2_improved = create_ae2_improved()\n","ae2_improved.compile(optimizer=Adam(learning_rate=0.0005), loss='mse')\n","\n","print(\"\\nАрхитектура AE2 (улучшенный): [2-3-2-1-2-3-2]\")\n","print(\"Количество скрытых слоев: 5\")\n","ae2_improved.summary()\n","\n","# Обучаем улучшенную модель AE2\n","print(f\"\\nНачало обучения улучшенного AE2 (5000 эпох, patience=400)...\")\n","history_ae2_improved = ae2_improved.fit(data, data,\n"," epochs=5000,\n"," batch_size=16,\n"," validation_split=0.2,\n"," verbose=1,\n"," callbacks=[EarlyStopping(patience=400, restore_best_weights=True)])\n","\n","# Сохраняем улучшенную модель\n","ae2_improved.save('out/AE2_improved.h5')\n","\n","# Вычисляем ошибки реконструкции для улучшенного AE2\n","X_pred_ae2_improved = ae2_improved.predict(data)\n","reconstruction_errors_ae2_improved = np.mean(np.square(data - X_pred_ae2_improved), axis=1)\n","threshold_ae2_improved = np.max(reconstruction_errors_ae2_improved)\n","\n","# Анализ результатов улучшенного AE2\n","print(\"\\n\" + \"=\"*50)\n","print(\"АНАЛИЗ РЕЗУЛЬТАТОВ УЛУЧШЕННОГО AE2\")\n","print(\"=\"*50)\n","mse_ae2_improved = history_ae2_improved.history['loss'][-1]\n","print(f\"Финальная ошибка MSE улучшенного AE2: {mse_ae2_improved:.6f}\")\n","print(f\"Порог ошибки реконструкции улучшенного AE2: {threshold_ae2_improved:.6f}\")\n","\n","# Построение графиков обучения улучшенного AE2\n","plt.figure(figsize=(15, 4))\n","\n","# График 1: MSE по эпохам\n","plt.subplot(1, 3, 1)\n","plt.plot(history_ae2_improved.history['loss'], label='Training Loss', color='green', linewidth=2)\n","plt.plot(history_ae2_improved.history['val_loss'], label='Validation Loss', color='red', linewidth=2)\n","plt.title('AE2 (улучшенный): Динамика обучения', fontsize=12, fontweight='bold')\n","plt.xlabel('Эпоха')\n","plt.ylabel('MSE')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 2: Ошибки реконструкции по точкам\n","plt.subplot(1, 3, 2)\n","plt.plot(reconstruction_errors_ae2_improved, 'green', alpha=0.7, linewidth=0.8)\n","plt.axhline(y=threshold_ae2_improved, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae2_improved:.4f}')\n","plt.title('AE2 (улучшенный): Ошибки реконструкции', fontsize=12, fontweight='bold')\n","plt.xlabel('Номер точки')\n","plt.ylabel('Ошибка реконструкции')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 3: Гистограмма распределения ошибок\n","plt.subplot(1, 3, 3)\n","plt.hist(reconstruction_errors_ae2_improved, bins=20, alpha=0.7, color='green', edgecolor='black')\n","plt.axvline(threshold_ae2_improved, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold_ae2_improved:.4f}')\n","plt.title('AE2 (улучшенный): Распределение ошибок', fontsize=12, fontweight='bold')\n","plt.xlabel('Ошибка реконструкции')\n","plt.ylabel('Частота')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('out/ae2_improved_results.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","# Сохраняем улучшенную версию\n","ae2_trained = ae2_improved\n","IRE2 = reconstruction_errors_ae2_improved\n","IREth2 = threshold_ae2_improved\n","\n","print(f\"\\nОбучение улучшенного AE2 завершено!\")\n","print(f\"Количество фактических эпох: {len(history_ae2_improved.history['loss'])}\")"],"metadata":{"id":"DaiGy4hU5U_x"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 7. Расчет характеристик качества обучения EDCA для AE1 и AE2\n","print(\"=\"*70)\n","print(\"РАСЧЕТ ХАРАКТЕРИСТИК КАЧЕСТВА ОБУЧЕНИЯ EDCA\")\n","print(\"=\"*70)\n","\n","# Параметры для расчета\n","numb_square = 20\n","\n","print(\"\\n\" + \"=\"*30)\n","print(\"РАСЧЕТ ДЛЯ AE1\")\n","print(\"=\"*30)\n","xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)\n","\n","print(\"\\n\" + \"=\"*30)\n","print(\"РАСЧЕТ ДЛЯ AE2\")\n","print(\"=\"*30)\n","xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)\n","\n","# Сравнение областей аппроксимации\n","print(\"\\n\" + \"=\"*50)\n","print(\"СРАВНЕНИЕ ОБЛАСТЕЙ АППРОКСИМАЦИИ AE1 И AE2\")\n","print(\"=\"*50)\n","lib.plot2in1(data, xx, yy, Z1, Z2)"],"metadata":{"id":"-5RMNJ_1B0Oz"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 9. СОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ И ТЕСТИРОВАНИЕ\n","print(\"=\"*70)\n","print(\"СОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ И ТЕСТИРОВАНИЕ AE1 И AE2\")\n","print(\"=\"*70)\n","\n","\n","print(\"\\nСТРАТЕГИЯ СОЗДАНИЯ ТЕСТОВОЙ ВЫБОРКИ:\")\n","print(\"Выбираем точки, которые:\")\n","print(\"1. Находятся ЗА пределами области AE1 (но близко к данным)\")\n","print(\"2. Находятся ВНУТРИ широкой области AE2\")\n","print(\"3. Такие точки AE1 примет за норму, AE2 - за аномалии\")\n","\n","# Создаем тестовую выборку\n","print(\"\\nСОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ...\")\n","\n","# На основе анализа областей из EDCA создаем точки:\n","# - AE1 имеет очень узкую область распознавания\n","# - AE2 имеет широкую область, но с высоким Excess\n","# Выбираем точки на границе между областями\n","\n","data_test = np.array([\n"," [k + 0.030, k + 0.002], # Очень асимметричная\n"," [k + 0.002, k + 0.030],\n"," [k + 0.025, k + 0.008],\n"," [k + 0.018, k + 0.012]\n","])\n","\n","# Сохраняем тестовую выборку\n","np.savetxt('data_test.txt', data_test)\n","\n","print(\"Тестовая выборка создана и сохранена в data_test.txt\")\n","print(\"Тестовые точки:\")\n","for i, point in enumerate(data_test):\n"," print(f\" Точка {i+1}: [{point[0]:.1f}, {point[1]:.1f}]\")\n","\n","print(\"\\nОЖИДАЕМОЕ ПОВЕДЕНИЕ:\")\n","print(\"• AE1 (консервативный): примет ВСЕ точки за норму\")\n","print(\"• AE2 (либеральный): обнаружит НЕКОТОРЫЕ точки как аномалии\")\n","\n","# ТЕСТИРОВАНИЕ AE1\n","print(\"\\n\" + \"=\"*30)\n","print(\"ТЕСТИРОВАНИЕ AE1\")\n","print(\"=\"*30)\n","predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)\n","lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)\n","lib.ire_plot('test', ire1, IREth1, 'AE1')\n","\n","# ТЕСТИРОВАНИЕ AE2\n","print(\"\\n\" + \"=\"*30)\n","print(\"ТЕСТИРОВАНИЕ AE2\")\n","print(\"=\"*30)\n","predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)\n","lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)\n","lib.ire_plot('test', ire2, IREth2, 'AE2')\n","\n","# ВИЗУАЛИЗАЦИЯ РЕЗУЛЬТАТОВ\n","print(\"\\n\" + \"=\"*50)\n","print(\"ВИЗУАЛИЗАЦИЯ ОБЛАСТЕЙ И ТЕСТОВЫХ ТОЧЕК\")\n","print(\"=\"*50)\n","lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)\n","\n","# АНАЛИЗ РЕЗУЛЬТАТОВ\n","print(\"\\n\" + \"=\"*70)\n","print(\"АНАЛИЗ РЕЗУЛЬТАТОВ ТЕСТИРОВАНИЯ\")\n","print(\"=\"*70)\n","\n","print(\"\\nСВОДКА РЕЗУЛЬТАТОВ:\")\n","anomalies_ae1 = np.sum(predicted_labels1)\n","anomalies_ae2 = np.sum(predicted_labels2)\n","total_points = len(data_test)\n","\n","print(f\"AE1 обнаружил аномалий: {anomalies_ae1} из {total_points}\")\n","print(f\"AE2 обнаружил аномалий: {anomalies_ae2} из {total_points}\")\n","\n","print(\"\\nДЕТАЛЬНЫЙ АНАЛИЗ:\")\n","for i in range(len(data_test)):\n"," status_ae1 = \"НОРМА\" if predicted_labels1[i] == 0 else \"АНОМАЛИЯ\"\n"," status_ae2 = \"НОРМА\" if predicted_labels2[i] == 0 else \"АНОМАЛИЯ\"\n"," ire_val_ae1 = ire1[i][0] if len(ire1.shape) > 1 else ire1[i]\n"," ire_val_ae2 = ire2[i][0] if len(ire2.shape) > 1 else ire2[i]\n","\n"," print(f\"Точка {i+1}: [{data_test[i,0]:.1f}, {data_test[i,1]:.1f}]\")\n"," print(f\" AE1: {status_ae1} (IRE: {ire_val_ae1:.4f}, порог: {IREth1:.4f})\")\n"," print(f\" AE2: {status_ae2} (IRE: {ire_val_ae2:.4f}, порог: {IREth2:.4f})\")\n"," print()\n","\n","print(\"ВЫВОД:\")\n","if anomalies_ae1 == 0 and anomalies_ae2 > 0:\n"," print(\"✓ ЗАДАЧА ВЫПОЛНЕНА: AE1 принимает точки за норму, AE2 детектирует аномалии\")\n","else:\n"," print(\"✗ Требуется корректировка тестовой выборки\")"],"metadata":{"id":"eGZv8XHzHcEm"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 10. ПРИМЕНЕНИЕ АВТОКОДИРОВЩИКОВ К ТЕСТОВЫМ ДАННЫМ\n","print(\"=\"*70)\n","print(\"ПРИМЕНЕНИЕ AE1 И AE2 К ТЕСТОВЫМ ДАННЫМ\")\n","print(\"=\"*70)\n","\n","# Загрузка тестовой выборки\n","data_test = np.loadtxt('data_test.txt', dtype=float)\n","print(f\"Загружена тестовая выборка: {len(data_test)} точек\")\n","\n","print(\"\\nТЕСТОВЫЕ ТОЧКИ:\")\n","for i, point in enumerate(data_test):\n"," print(f\" Точка {i+1}: [{point[0]:.3f}, {point[1]:.3f}]\")\n","\n","# ПРИМЕНЕНИЕ AE1\n","print(\"\\n\" + \"=\"*50)\n","print(\"ПРИМЕНЕНИЕ AE1 К ТЕСТОВЫМ ДАННЫМ\")\n","print(\"=\"*50)\n","\n","predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)\n","\n","print(\"РЕЗУЛЬТАТЫ AE1:\")\n","print(\"Точка | Координаты | IRE | Порог | Статус\")\n","print(\"-\" * 55)\n","for i in range(len(data_test)):\n"," ire_val = ire1[i][0] if len(ire1.shape) > 1 else ire1[i]\n"," status = \"НОРМА\" if predicted_labels1[i] == 0 else \"АНОМАЛИЯ\"\n"," print(f\"{i+1:5} | [{data_test[i,0]:.3f}, {data_test[i,1]:.3f}] | {ire_val:.4f} | {IREth1:.4f} | {status}\")\n","\n","# График ошибок реконструкции для AE1\n","lib.ire_plot('test', ire1, IREth1, 'AE1')\n","\n","# ПРИМЕНЕНИЕ AE2\n","print(\"\\n\" + \"=\"*50)\n","print(\"ПРИМЕНЕНИЕ AE2 К ТЕСТОВЫМ ДАННЫМ\")\n","print(\"=\"*50)\n","\n","predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)\n","\n","print(\"РЕЗУЛЬТАТЫ AE2:\")\n","print(\"Точка | Координаты | IRE | Порог | Статус\")\n","print(\"-\" * 55)\n","for i in range(len(data_test)):\n"," ire_val = ire2[i][0] if len(ire2.shape) > 1 else ire2[i]\n"," status = \"НОРМА\" if predicted_labels2[i] == 0 else \"АНОМАЛИЯ\"\n"," print(f\"{i+1:5} | [{data_test[i,0]:.3f}, {data_test[i,1]:.3f}] | {ire_val:.4f} | {IREth2:.4f} | {status}\")\n","\n","# График ошибок реконструкции для AE2\n","lib.ire_plot('test', ire2, IREth2, 'AE2')\n","\n","# ВИЗУАЛИЗАЦИЯ\n","lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)"],"metadata":{"id":"HfOCALx4HcVJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"rJpspqIyHclf"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 11. ВИЗУАЛИЗАЦИЯ ОБУЧАЮЩЕЙ И ТЕСТОВОЙ ВЫБОРКИ В ОБЛАСТЯХ ПРОСТРАНСТВА ПРИЗНАКОВ\n","print(\"=\"*70)\n","print(\"ВИЗУАЛИЗАЦИЯ ОБУЧАЮЩЕЙ И ТЕСТОВОЙ ВЫБОРКИ\")\n","print(\"=\"*70)\n","\n","# Визуализация для AE1\n","print(\"ВИЗУАЛИЗАЦИЯ ДЛЯ AE1:\")\n","plt.figure(figsize=(12, 5))\n","\n","plt.subplot(1, 2, 1)\n","plt.contourf(xx, yy, Z1, cmap=plt.cm.Reds, alpha=0.3)\n","plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.6, s=20, label='Обучающая выборка')\n","plt.scatter(data_test[:, 0], data_test[:, 1], c='red', marker='s', s=50, label='Тестовая выборка')\n","plt.xlabel('X1')\n","plt.ylabel('X2')\n","plt.title('AE1: Область распознавания')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.subplot(1, 2, 2)\n","plt.contourf(xx, yy, Z1, cmap=plt.cm.Reds, alpha=0.3)\n","plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.3, s=10)\n","# Выделяем тестовые точки с подписями\n","for i, point in enumerate(data_test):\n"," plt.scatter(point[0], point[1], c='red', marker='s', s=80)\n"," plt.annotate(f'{i+1}', (point[0], point[1]), xytext=(5, 5),\n"," textcoords='offset points', fontweight='bold')\n","plt.xlabel('X1')\n","plt.ylabel('X2')\n","plt.title('AE1: Тестовые точки с номерами')\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('out/ae1_visualization.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","# Визуализация для AE2\n","print(\"ВИЗУАЛИЗАЦИЯ ДЛЯ AE2:\")\n","plt.figure(figsize=(12, 5))\n","\n","plt.subplot(1, 2, 1)\n","plt.contourf(xx, yy, Z2, cmap=plt.cm.Greens, alpha=0.3)\n","plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.6, s=20, label='Обучающая выборка')\n","plt.scatter(data_test[:, 0], data_test[:, 1], c='red', marker='s', s=50, label='Тестовая выборка')\n","plt.xlabel('X1')\n","plt.ylabel('X2')\n","plt.title('AE2: Область распознавания')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.subplot(1, 2, 2)\n","plt.contourf(xx, yy, Z2, cmap=plt.cm.Greens, alpha=0.3)\n","plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.3, s=10)\n","# Выделяем тестовые точки с подписями\n","for i, point in enumerate(data_test):\n"," plt.scatter(point[0], point[1], c='red', marker='s', s=80)\n"," plt.annotate(f'{i+1}', (point[0], point[1]), xytext=(5, 5),\n"," textcoords='offset points', fontweight='bold')\n","plt.xlabel('X1')\n","plt.ylabel('X2')\n","plt.title('AE2: Тестовые точки с номерами')\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('out/ae2_visualization.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","\n","\n","print(\"Созданы файлы:\")\n","print(\"- out/ae1_visualization.png\")\n","print(\"- out/ae2_visualization.png\")\n","print(\"- out/comparison_visualization.png\")"],"metadata":{"id":"zJMmFN0aOFWu"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","from tensorflow.keras.models import Sequential, load_model\n","from tensorflow.keras.layers import Dense\n","\n","print(\"=\"*70)\n","print(\"ЗАПОЛНЕНИЕ ТАБЛИЦЫ РЕЗУЛЬТАТОВ ДЛЯ AE1 И AE2\")\n","print(\"=\"*70)\n","\n","def calculate_metrics(reconstruction_errors, threshold):\n"," \"\"\"\n"," Расчет метрик Excess и Approx\n"," \"\"\"\n"," # Excess: количество точек, превышающих порог (аномалии)\n"," excess_count = np.sum(reconstruction_errors > threshold)\n"," excess_ratio = excess_count / len(reconstruction_errors)\n","\n"," # Approx: средняя ошибка реконструкции для нормальных точек\n"," normal_points = reconstruction_errors[reconstruction_errors <= threshold]\n"," approx_value = np.mean(normal_points) if len(normal_points) > 0 else 0\n","\n"," return excess_count, excess_ratio, approx_value\n","\n","def get_ae_results(data):\n"," \"\"\"\n"," Получение результатов для AE1 и AE2\n"," \"\"\"\n"," try:\n"," # Загружаем сохраненные модели\n"," ae1 = load_model('out/AE1.h5')\n"," ae2 = load_model('out/AE2_improved.h5')\n"," print(\"Модели успешно загружены\")\n"," except:\n"," print(\"Ошибка: модели не найдены. Сначала обучите AE1 и AE2.\")\n"," return None\n","\n"," # AE1 результаты\n"," X_pred_ae1 = ae1.predict(data, verbose=0)\n"," reconstruction_errors_ae1 = np.mean(np.square(data - X_pred_ae1), axis=1)\n"," threshold_ae1 = np.max(reconstruction_errors_ae1)\n"," mse_stop_ae1 = np.mean(reconstruction_errors_ae1)\n"," excess_count_ae1, excess_ratio_ae1, approx_ae1 = calculate_metrics(reconstruction_errors_ae1, threshold_ae1)\n","\n"," # AE2 результаты\n"," X_pred_ae2 = ae2.predict(data, verbose=0)\n"," reconstruction_errors_ae2 = np.mean(np.square(data - X_pred_ae2), axis=1)\n"," threshold_ae2 = np.max(reconstruction_errors_ae2)\n"," mse_stop_ae2 = np.mean(reconstruction_errors_ae2)\n"," excess_count_ae2, excess_ratio_ae2, approx_ae2 = calculate_metrics(reconstruction_errors_ae2, threshold_ae2)\n","\n"," # Создаем таблицу\n"," results_table = pd.DataFrame({\n"," 'Параметр': [\n"," 'Количество скрытых слоев',\n"," 'Количество нейронов в скрытых слоях',\n"," 'Количество эпох обучения',\n"," 'Ошибка MSE_stop',\n"," 'Порог ошибки реконструкции',\n"," 'Значение показателя Excess',\n"," 'Значение показателя Approx',\n"," 'Количество обнаруженных аномалий'\n"," ],\n"," 'AE1': [\n"," '1',\n"," '[1]',\n"," '~700',\n"," f'{mse_stop_ae1:.6f}',\n"," f'{threshold_ae1:.6f}',\n"," f'{excess_ratio_ae1:.4f}',\n"," f'{approx_ae1:.6f}',\n"," f'{excess_count_ae1}'\n"," ],\n"," 'AE2': [\n"," '5',\n"," '[3, 2, 1, 2, 3]',\n"," '~4600',\n"," f'{mse_stop_ae2:.6f}',\n"," f'{threshold_ae2:.6f}',\n"," f'{excess_ratio_ae2:.4f}',\n"," f'{approx_ae2:.6f}',\n"," f'{excess_count_ae2}'\n"," ]\n"," })\n","\n"," return results_table\n","\n","def print_final_table(results_table):\n"," \"\"\"\n"," Красивый вывод финальной таблицы\n"," \"\"\"\n"," print(\"\\n\" + \"=\"*130)\n"," print(\"ТАБЛ. 1 РЕЗУЛЬТАТЫ ЗАДАНИЯ №1\")\n"," print(\"=\"*130)\n","\n"," # Заголовки таблицы\n"," headers = [\n"," \" \", \"Количество скрытых слоев\", \"Количество нейронов в скрытых слоях\",\n"," \"Количество эпох обучения\", \"Ошибка MSE_stop\", \"Порог ошибки реконструкции\",\n"," \"Значение показателя Excess\", \"Значение показателя Approx\", \"Количество обнаруженных аномалий\"\n"," ]\n","\n"," # Данные из results_table\n"," ae1_data = results_table['AE1'].values\n"," ae2_data = results_table['AE2'].values\n","\n"," # Форматируем строки\n"," header_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(*headers)\n"," separator_line = \"|\" + \"-\"*129 + \"|\"\n","\n"," print(header_line)\n"," print(separator_line)\n","\n"," # Строка для AE1\n"," ae1_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE1\", ae1_data[0], ae1_data[1], ae1_data[2], ae1_data[3],\n"," ae1_data[4], ae1_data[5], ae1_data[6], ae1_data[7]\n"," )\n"," print(ae1_line)\n","\n"," # Строка для AE2\n"," ae2_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE2\", ae2_data[0], ae2_data[1], ae2_data[2], ae2_data[3],\n"," ae2_data[4], ae2_data[5], ae2_data[6], ae2_data[7]\n"," )\n"," print(ae2_line)\n","\n"," print(\"=\"*130)\n","\n","# Основной код\n","def main():\n"," # Загрузка данных (замените на ваши реальные данные)\n"," # data = np.loadtxt('your_data.csv')\n","\n"," # Создаем тестовые данные для демонстрации\n"," np.random.seed(42)\n"," data = np.random.randn(1000, 2)\n","\n"," # Получаем результаты\n"," results_table = get_ae_results(data)\n","\n"," if results_table is not None:\n"," # Выводим красивую таблицу\n"," print_final_table(results_table)\n","\n"," # Сохраняем в CSV\n"," results_table.to_csv('out/table_results.csv', index=False, encoding='utf-8-sig')\n"," print(f\"\\nТаблица сохранена в: out/table_results.csv\")\n","\n"," # Дополнительная информация\n"," print(\"\\n\" + \"=\"*50)\n"," print(\"ПРИМЕЧАНИЯ:\")\n"," print(\"=\"*50)\n"," print(\"• Количество эпох обучения указано приблизительно\")\n"," print(\"• Порог ошибки реконструкции = максимальная ошибка\")\n"," print(\"• Excess = доля аномалий от общего числа точек\")\n"," print(\"• Approx = средняя ошибка для нормальных точек\")\n"," else:\n"," print(\"Не удалось получить результаты. Проверьте наличие обученных моделей.\")\n","\n","if __name__ == \"__main__\":\n"," main()"],"metadata":{"id":"3VaIRmfsOFtk"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","from tensorflow.keras.models import Sequential, load_model\n","from tensorflow.keras.layers import Dense\n","\n","print(\"=\"*70)\n","print(\"ЗАПОЛНЕНИЕ ТАБЛИЦЫ РЕЗУЛЬТАТОВ ДЛЯ AE1 И AE2\")\n","print(\"=\"+70)\n","\n","def calculate_metrics(reconstruction_errors, threshold):\n"," \"\"\"\n"," Расчет метрик Excess и Approx\n"," \"\"\"\n"," # Excess: количество точек, превышающих порог (аномалии)\n"," excess_count = np.sum(reconstruction_errors > threshold)\n"," excess_ratio = excess_count / len(reconstruction_errors)\n","\n"," # Approx: средняя ошибка реконструкции для нормальных точек\n"," normal_points = reconstruction_errors[reconstruction_errors <= threshold]\n"," approx_value = np.mean(normal_points) if len(normal_points) > 0 else 0\n","\n"," return excess_count, excess_ratio, approx_value\n","\n","def get_ae_results(data, ae1_trained, ae2_trained, IREth1, IREth2):\n"," \"\"\"\n"," Получение результатов для AE1 и AE2\n"," \"\"\"\n"," # AE1 результаты\n"," X_pred_ae1 = ae1_trained.predict(data, verbose=0)\n"," reconstruction_errors_ae1 = np.mean(np.square(data - X_pred_ae1), axis=1)\n"," mse_stop_ae1 = np.mean(reconstruction_errors_ae1)\n"," excess_count_ae1, excess_ratio_ae1, approx_ae1 = calculate_metrics(reconstruction_errors_ae1, IREth1)\n","\n"," # AE2 результаты\n"," X_pred_ae2 = ae2_trained.predict(data, verbose=0)\n"," reconstruction_errors_ae2 = np.mean(np.square(data - X_pred_ae2), axis=1)\n"," mse_stop_ae2 = np.mean(reconstruction_errors_ae2)\n"," excess_count_ae2, excess_ratio_ae2, approx_ae2 = calculate_metrics(reconstruction_errors_ae2, IREth2)\n","\n"," # Создаем таблицу\n"," results_table = pd.DataFrame({\n"," 'Параметр': [\n"," 'Количество скрытых слоев',\n"," 'Количество нейронов в скрытых слоях',\n"," 'Количество эпох обучения',\n"," 'Ошибка MSE_stop',\n"," 'Порог ошибки реконструкции',\n"," 'Значение показателя Excess',\n"," 'Значение показателя Approx',\n"," 'Количество обнаруженных аномалий'\n"," ],\n"," 'AE1': [\n"," '1',\n"," '[1]',\n"," '~700',\n"," f'{mse_stop_ae1:.6f}',\n"," f'{IREth1:.6f}',\n"," f'{excess_ratio_ae1:.4f}',\n"," f'{approx_ae1:.6f}',\n"," f'{excess_count_ae1}'\n"," ],\n"," 'AE2': [\n"," '5',\n"," '[3, 2, 1, 2, 3]',\n"," '~4600',\n"," f'{mse_stop_ae2:.6f}',\n"," f'{IREth2:.6f}',\n"," f'{excess_ratio_ae2:.4f}',\n"," f'{approx_ae2:.6f}',\n"," f'{excess_count_ae2}'\n"," ]\n"," })\n","\n"," return results_table\n","\n","def print_final_table(results_table):\n"," \"\"\"\n"," Красивый вывод финальной таблицы\n"," \"\"\"\n"," print(\"\\n\" + \"=\"*130)\n"," print(\"ТАБЛ. 1 РЕЗУЛЬТАТЫ ЗАДАНИЯ №1\")\n"," print(\"=\"*130)\n","\n"," # Заголовки таблицы\n"," headers = [\n"," \" \", \"Количество скрытых слоев\", \"Количество нейронов в скрытых слоях\",\n"," \"Количество эпох обучения\", \"Ошибка MSE_stop\", \"Порог ошибки реконструкции\",\n"," \"Значение показателя Excess\", \"Значение показателя Approx\", \"Количество обнаруженных аномалий\"\n"," ]\n","\n"," # Данные из results_table\n"," ae1_data = results_table['AE1'].values\n"," ae2_data = results_table['AE2'].values\n","\n"," # Форматируем строки\n"," header_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(*headers)\n"," separator_line = \"|\" + \"-\"*129 + \"|\"\n","\n"," print(header_line)\n"," print(separator_line)\n","\n"," # Строка для AE1\n"," ae1_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE1\", ae1_data[0], ae1_data[1], ae1_data[2], ae1_data[3],\n"," ae1_data[4], ae1_data[5], ae1_data[6], ae1_data[7]\n"," )\n"," print(ae1_line)\n","\n"," # Строка для AE2\n"," ae2_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE2\", ae2_data[0], ae2_data[1], ae2_data[2], ae2_data[3],\n"," ae2_data[4], ae2_data[5], ae2_data[6], ae2_data[7]\n"," )\n"," print(ae2_line)\n","\n"," print(\"=\"*130)\n","\n","# Основной код\n","def main():\n"," # Загрузка данных (предполагается, что данные уже загружены)\n"," # data = ваш обучающий набор данных\n","\n"," # Используем переменные из вашего кода\n"," # ae1_trained, ae2_trained, IREth1, IREth2, data\n","\n"," print(\"Используются обученные модели:\")\n"," print(f\"AE1: {ae1_trained}\")\n"," print(f\"AE2: {ae2_trained}\")\n"," print(f\"Порог AE1 (IREth1): {IREth1:.6f}\")\n"," print(f\"Порог AE2 (IREth2): {IREth2:.6f}\")\n"," print(f\"Размер данных: {data.shape}\")\n","\n"," # Получаем результаты\n"," results_table = get_ae_results(data, ae1_trained, ae2_trained, IREth1, IREth2)\n","\n"," if results_table is not None:\n"," # Выводим красивую таблицу\n"," print_final_table(results_table)\n","\n"," # Сохраняем в CSV\n"," results_table.to_csv('out/table_results.csv', index=False, encoding='utf-8-sig')\n"," print(f\"\\nТаблица сохранена в: out/table_results.csv\")\n","\n"," # Дополнительная информация\n"," print(\"\\n\" + \"=\"*50)\n"," print(\"ПРИМЕЧАНИЯ:\")\n"," print(\"=\"*50)\n"," print(\"• Количество эпох обучения указано приблизительно\")\n"," print(\"• Порог ошибки реконструкции = максимальная ошибка\")\n"," print(\"• Excess = доля аномалий от общего числа точек\")\n"," print(\"• Approx = средняя ошибка для нормальных точек\")\n"," else:\n"," print(\"Не удалось получить результаты.\")\n","\n","# Запуск основного кода\n","if __name__ == \"__main__\":\n"," main()"],"metadata":{"id":"wr2cosMBRFVe"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","from tensorflow.keras.models import Sequential, load_model\n","from tensorflow.keras.layers import Dense\n","\n","print(\"=\"*70)\n","print(\"ЗАПОЛНЕНИЕ ТАБЛИЦЫ РЕЗУЛЬТАТОВ ДЛЯ AE1 И AE2\")\n","print(\"=\"*70)\n","\n","def calculate_metrics(reconstruction_errors, threshold):\n"," \"\"\"\n"," Расчет метрик Excess и Approx\n"," \"\"\"\n"," # Excess: количество точек, превышающих порог (аномалии)\n"," excess_count = np.sum(reconstruction_errors > threshold)\n"," excess_ratio = excess_count / len(reconstruction_errors)\n","\n"," # Approx: средняя ошибка реконструкции для нормальных точек\n"," normal_points = reconstruction_errors[reconstruction_errors <= threshold]\n"," approx_value = np.mean(normal_points) if len(normal_points) > 0 else 0\n","\n"," return excess_count, excess_ratio, approx_value\n","\n","def get_ae_results(data, ae1_trained, ae2_trained, IREth1, IREth2):\n"," \"\"\"\n"," Получение результатов для AE1 и AE2\n"," \"\"\"\n"," # AE1 результаты\n"," X_pred_ae1 = ae1_trained.predict(data, verbose=0)\n"," reconstruction_errors_ae1 = np.mean(np.square(data - X_pred_ae1), axis=1)\n"," mse_stop_ae1 = np.mean(reconstruction_errors_ae1)\n"," excess_count_ae1, excess_ratio_ae1, approx_ae1 = calculate_metrics(reconstruction_errors_ae1, IREth1)\n","\n"," # AE2 результаты\n"," X_pred_ae2 = ae2_trained.predict(data, verbose=0)\n"," reconstruction_errors_ae2 = np.mean(np.square(data - X_pred_ae2), axis=1)\n"," mse_stop_ae2 = np.mean(reconstruction_errors_ae2)\n"," excess_count_ae2, excess_ratio_ae2, approx_ae2 = calculate_metrics(reconstruction_errors_ae2, IREth2)\n","\n"," # Создаем таблицу\n"," results_table = pd.DataFrame({\n"," 'Параметр': [\n"," 'Количество скрытых слоев',\n"," 'Количество нейронов в скрытых слоях',\n"," 'Количество эпох обучения',\n"," 'Ошибка MSE_stop',\n"," 'Порог ошибки реконструкции',\n"," 'Значение показателя Excess',\n"," 'Значение показателя Approx',\n"," 'Количество обнаруженных аномалий'\n"," ],\n"," 'AE1': [\n"," '1',\n"," '[1]',\n"," '~700',\n"," f'{mse_stop_ae1:.6f}',\n"," f'{IREth1:.6f}',\n"," f'{excess_ratio_ae1:.4f}',\n"," f'{approx_ae1:.6f}',\n"," f'{excess_count_ae1}'\n"," ],\n"," 'AE2': [\n"," '5',\n"," '[3, 2, 1, 2, 3]',\n"," '~4600',\n"," f'{mse_stop_ae2:.6f}',\n"," f'{IREth2:.6f}',\n"," f'{excess_ratio_ae2:.4f}',\n"," f'{approx_ae2:.6f}',\n"," f'{excess_count_ae2}'\n"," ]\n"," })\n","\n"," return results_table\n","\n","def print_final_table(results_table):\n"," \"\"\"\n"," Красивый вывод финальной таблицы\n"," \"\"\"\n"," print(\"\\n\" + \"=\"*130)\n"," print(\"ТАБЛ. 1 РЕЗУЛЬТАТЫ ЗАДАНИЯ №1\")\n"," print(\"=\"*130)\n","\n"," # Заголовки таблицы\n"," headers = [\n"," \" \", \"Количество скрытых слоев\", \"Количество нейронов в скрытых слоях\",\n"," \"Количество эпох обучения\", \"Ошибка MSE_stop\", \"Порог ошибки реконструкции\",\n"," \"Значение показателя Excess\", \"Значение показателя Approx\", \"Количество обнаруженных аномалий\"\n"," ]\n","\n"," # Данные из results_table\n"," ae1_data = results_table['AE1'].values\n"," ae2_data = results_table['AE2'].values\n","\n"," # Форматируем строки\n"," header_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(*headers)\n"," separator_line = \"|\" + \"-\"*129 + \"|\"\n","\n"," print(header_line)\n"," print(separator_line)\n","\n"," # Строка для AE1\n"," ae1_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE1\", ae1_data[0], ae1_data[1], ae1_data[2], ae1_data[3],\n"," ae1_data[4], ae1_data[5], ae1_data[6], ae1_data[7]\n"," )\n"," print(ae1_line)\n","\n"," # Строка для AE2\n"," ae2_line = \"| {:^2} | {:^25} | {:^35} | {:^20} | {:^15} | {:^30} | {:^25} | {:^25} | {:^30} |\".format(\n"," \"AE2\", ae2_data[0], ae2_data[1], ae2_data[2], ae2_data[3],\n"," ae2_data[4], ae2_data[5], ae2_data[6], ae2_data[7]\n"," )\n"," print(ae2_line)\n","\n"," print(\"=\"*130)\n","\n","# Основной код\n","def main():\n"," # Используем переменные из вашего кода\n"," print(\"Используются обученные модели:\")\n"," print(f\"AE1: {ae1_trained}\")\n"," print(f\"AE2: {ae2_trained}\")\n"," print(f\"Порог AE1 (IREth1): {IREth1:.6f}\")\n"," print(f\"Порог AE2 (IREth2): {IREth2:.6f}\")\n"," print(f\"Размер данных: {data.shape}\")\n","\n"," # Получаем результаты\n"," results_table = get_ae_results(data, ae1_trained, ae2_trained, IREth1, IREth2)\n","\n"," if results_table is not None:\n"," # Выводим красивую таблицу\n"," print_final_table(results_table)\n","\n"," # Сохраняем в CSV\n"," results_table.to_csv('out/table_results.csv', index=False, encoding='utf-8-sig')\n"," print(f\"\\nТаблица сохранена в: out/table_results.csv\")\n","\n"," # Дополнительная информация\n"," print(\"\\n\" + \"=\"*50)\n"," print(\"ПРИМЕЧАНИЯ:\")\n"," print(\"=\"*50)\n"," print(\"• Количество эпох обучения указано приблизительно\")\n"," print(\"• Порог ошибки реконструкции = максимальная ошибка\")\n"," print(\"• Excess = доля аномалий от общего числа точек\")\n"," print(\"• Approx = средняя ошибка для нормальных точек\")\n"," else:\n"," print(\"Не удалось получить результаты.\")\n","\n","# Запуск основного кода\n","main()"],"metadata":{"id":"wi40j4vvReuC"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["ЗАДАНИЕ 2"],"metadata":{"id":"9ywkvm9UdMMS"}},{"cell_type":"code","source":["# 2) ЗАГРУЗКА ОБУЧАЮЩЕЙ ВЫБОРКИ\n","print(\"\\n\" + \"=\"*70)\n","print(\"2) ЗАГРУЗКА ОБУЧАЮЩЕЙ ВЫБОРКИ\")\n","print(\"=\"*70)\n","\n","import numpy as np\n","\n","# Загрузка данных WBC\n","try:\n"," train_data = np.loadtxt('WBC_train.txt', dtype=float)\n"," print(\"Файл 'WBC_train.txt' успешно загружен\")\n","except FileNotFoundError:\n"," print(\"Файл 'WBC_train.txt' не найден\")\n"," # Создаем тестовые данные для демонстрации\n"," np.random.seed(42)\n"," n_samples = 378\n"," n_features = 30\n"," train_data = np.random.randn(n_samples, n_features)\n"," print(\"Созданы тестовые данные с характеристиками WBC\")"],"metadata":{"id":"eNp2UelrTp78"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 3) ВЫВОД ДАННЫХ И ИХ РАЗМЕРНОСТИ\n","print(\"\\n\" + \"=\"*70)\n","print(\"3) ВЫВОД ДАННЫХ И РАЗМЕРНОСТИ\")\n","print(\"=\"*70)\n","\n","print(f\"Размерность обучающей выборки: {train_data.shape}\")\n","print(f\"Количество примеров: {train_data.shape[0]}\")\n","print(f\"Количество признаков: {train_data.shape[1]}\")\n","\n","print(\"\\nПервые 3 примера (первые 5 признаков):\")\n","for i in range(3):\n"," print(f\"Пример {i+1}: {train_data[i][:5]}...\")\n","\n","print(f\"\\nСтатистика данных:\")\n","print(f\"Минимальные значения: {np.min(train_data, axis=0)[:5]}...\")\n","print(f\"Максимальные значения: {np.max(train_data, axis=0)[:5]}...\")\n","print(f\"Средние значения: {np.mean(train_data, axis=0)[:5]}...\")\n","print(f\"Стандартные отклонения: {np.std(train_data, axis=0)[:5]}...\")"],"metadata":{"id":"BXbziJ2WTpmh"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import os\n","os.chdir(\"/content/drive/MyDrive/Colab Notebooks/is_lab2\")\n","\n","import matplotlib.pyplot as plt\n","from tensorflow.keras.models import Model\n","from tensorflow.keras.layers import Dense, Input, BatchNormalization, Activation\n","from tensorflow.keras.optimizers import Adam\n","from tensorflow.keras.callbacks import EarlyStopping, Callback, ReduceLROnPlateau\n","from tensorflow.keras import regularizers\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import StandardScaler\n","import joblib\n","\n","print(\"\\n\" + \"=\"*70)\n","print(\"4) СОЗДАНИЕ И ОБУЧЕНИЕ АВТОКОДИРОВЩИКА (УЛУЧШЕННАЯ СХОДИМОСТЬ)\")\n","print(\"=\"*70)\n","\n","# ==========================\n","# 1. ЗАГРУЗКА ДАННЫХ\n","# ==========================\n","print(\"Загрузка данных...\")\n","try:\n"," train_full = np.loadtxt(\"WBC_train.txt\", dtype=float)\n"," test_data = np.loadtxt(\"WBC_test.txt\", dtype=float)\n"," train_data, val_data = train_test_split(train_full, test_size=0.2, random_state=42)\n","except FileNotFoundError:\n"," print(\"Файлы не найдены. Создаем искусственные данные для демонстрации...\")\n"," n_features = 30\n"," n_train, n_val, n_test = 300, 100, 100\n"," train_data = np.random.normal(0, 1, (n_train, n_features))\n"," val_data = np.random.normal(0, 1, (n_val, n_features))\n"," test_data = np.random.normal(0, 1, (n_test, n_features))\n","\n","# ==========================\n","# 2. НОРМАЛИЗАЦИЯ\n","# ==========================\n","scaler = StandardScaler()\n","train_data_normalized = scaler.fit_transform(train_data)\n","val_data_normalized = scaler.transform(val_data)\n","test_data_normalized = scaler.transform(test_data)\n","joblib.dump(scaler, 'data_scaler.pkl')\n","\n","# ==========================\n","# 3. CALLBACK для мониторинга\n","# ==========================\n","class TrainingMonitor(Callback):\n"," def __init__(self, mse_target_min=0.01, mse_target_max=0.1, print_every=10):\n"," super().__init__()\n"," self.mse_target_min = mse_target_min\n"," self.mse_target_max = mse_target_max\n"," self.print_every = print_every\n","\n"," def on_epoch_end(self, epoch, logs=None):\n"," if (epoch + 1) % self.print_every == 0:\n"," print(f\"Эпоха {epoch+1}: train_mse={logs['loss']:.6f}, val_mse={logs['val_loss']:.6f}\")\n"," if (self.mse_target_min <= logs['val_loss'] <= self.mse_target_max and\n"," self.mse_target_min <= logs['loss'] <= self.mse_target_max):\n"," print(f\"\\nЦЕЛЕВОЙ ДИАПАЗОН MSE ДОСТИГНУТ на эпохе {epoch+1}\")\n"," self.model.stop_training = True\n","\n","# ==========================\n","# 4. СОЗДАНИЕ АВТОКОДИРОВЩИКА\n","# ==========================\n","def create_strict_autoencoder():\n"," input_dim = train_data_normalized.shape[1]\n"," input_layer = Input(shape=(input_dim,))\n","\n"," # ЭНКОДЕР\n"," x = Dense(30, kernel_regularizer=regularizers.l2(1e-4))(input_layer)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(24, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(18, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(12, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," # BOTTLENECK\n"," bottleneck = Dense(8, activation='relu', kernel_initializer='he_normal', name='bottleneck')(x)\n","\n"," # ДЕКОДЕР\n"," x = Dense(12, kernel_regularizer=regularizers.l2(1e-4))(bottleneck)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(18, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(24, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," x = Dense(30, kernel_regularizer=regularizers.l2(1e-4))(x)\n"," x = BatchNormalization()(x)\n"," x = Activation('relu')(x)\n","\n"," # ВЫХОД\n"," output_layer = Dense(input_dim, activation='linear')(x)\n"," return Model(input_layer, output_layer)\n","\n","autoencoder = create_strict_autoencoder()\n","autoencoder.summary()\n","\n","# ==========================\n","# 5. КОМПИЛЯЦИЯ\n","# ==========================\n","autoencoder.compile(optimizer=Adam(learning_rate=0.001), loss='mse', metrics=['mae'])\n","\n","# ==========================\n","# 6. CALLBACKS\n","# ==========================\n","early_stopping = EarlyStopping(monitor='val_loss', patience=5000, restore_best_weights=True, verbose=1)\n","lr_scheduler = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=5000, min_lr=1e-6, verbose=1)\n","training_monitor = TrainingMonitor()\n","\n","# ==========================\n","# 7. ОБУЧЕНИЕ\n","# ==========================\n","history = autoencoder.fit(\n"," train_data_normalized, train_data_normalized,\n"," epochs=50000,\n"," batch_size=32,\n"," validation_data=(val_data_normalized, val_data_normalized),\n"," verbose=0,\n"," callbacks=[early_stopping, training_monitor, lr_scheduler]\n",")\n","\n","# ==========================\n","# 8. АНАЛИЗ РЕЗУЛЬТАТОВ И ПОСТРОЕНИЕ ГРАФИКОВ\n","# ==========================\n","print(\"\\n\" + \"=\"*50)\n","print(\"АНАЛИЗ РЕЗУЛЬТАТОВ АВТОКОДИРОВЩИКА\")\n","print(\"=\"*50)\n","\n","final_train_mse = history.history['loss'][-1]\n","final_val_mse = history.history['val_loss'][-1]\n","best_val_mse = min(history.history['val_loss'])\n","target_achieved = 0.01 <= final_val_mse <= 0.1\n","best_target_achieved = 0.01 <= best_val_mse <= 0.1\n","\n","print(f\"Финальная Train MSE: {final_train_mse:.6f}\")\n","print(f\"Финальная Validation MSE: {final_val_mse:.6f}\")\n","print(f\"Лучшая Validation MSE: {best_val_mse:.6f}\")\n","print(f\"Целевой диапазон MSE достигнут: {'ДА' if target_achieved else 'НЕТ'}\")\n","\n","# ==========================\n","# 9. РЕКОНСТРУКЦИЯ И ОШИБКИ\n","# ==========================\n","print(\"\\nРасчет ошибок реконструкции...\")\n","train_reconstructions = autoencoder.predict(train_data_normalized, verbose=0)\n","train_errors = np.mean(np.square(train_data_normalized - train_reconstructions), axis=1)\n","val_reconstructions = autoencoder.predict(val_data_normalized, verbose=0)\n","val_errors = np.mean(np.square(val_data_normalized - val_reconstructions), axis=1)\n","test_reconstructions = autoencoder.predict(test_data_normalized, verbose=0)\n","test_errors = np.mean(np.square(test_data_normalized - test_reconstructions), axis=1)\n","\n","threshold = np.max(train_errors)\n","print(f\"Порог ошибок реконструкции: {threshold:.6f}\")\n","\n","# ==========================\n","# 10. ПОСТРОЕНИЕ ГРАФИКОВ КАК В AE2\n","# ==========================\n","\n","# График 1: Динамика обучения (MSE по эпохам)\n","plt.figure(figsize=(15, 4))\n","\n","plt.subplot(1, 3, 1)\n","plt.plot(history.history['loss'], label='Training Loss', color='blue', linewidth=2)\n","plt.plot(history.history['val_loss'], label='Validation Loss', color='red', linewidth=2)\n","plt.axhline(y=0.1, color='green', linestyle='--', alpha=0.8, label='MSE = 0.1')\n","plt.axhline(y=0.01, color='green', linestyle='--', alpha=0.8, label='MSE = 0.01')\n","plt.axhline(y=0.05, color='orange', linestyle='--', alpha=0.6, label='MSE = 0.05')\n","plt.title('Динамика обучения автокодировщика', fontsize=12, fontweight='bold')\n","plt.xlabel('Эпоха')\n","plt.ylabel('MSE')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 2: Ошибки реконструкции по точкам\n","plt.subplot(1, 3, 2)\n","plt.plot(train_errors, 'b-', alpha=0.7, linewidth=0.8)\n","plt.axhline(y=threshold, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold:.4f}')\n","plt.title('Ошибки реконструкции по точкам', fontsize=12, fontweight='bold')\n","plt.xlabel('Номер примера')\n","plt.ylabel('Ошибка реконструкции')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","# График 3: Гистограмма распределения ошибок\n","plt.subplot(1, 3, 3)\n","plt.hist(train_errors, bins=50, alpha=0.7, color='blue', edgecolor='black')\n","plt.axvline(threshold, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {threshold:.4f}')\n","plt.title('Распределение ошибок реконструкции', fontsize=12, fontweight='bold')\n","plt.xlabel('Ошибка реконструкции')\n","plt.ylabel('Частота')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","plt.tight_layout()\n","plt.savefig('autoencoder_detailed_results.png', dpi=300, bbox_inches='tight')\n","plt.show()\n","\n","\n","\n","# ==========================\n","# 12. ДЕТАЛЬНАЯ СТАТИСТИКА\n","# ==========================\n","print(\"\\nДЕТАЛЬНАЯ СТАТИСТИКА:\")\n","print(f\"Минимальная ошибка (train): {np.min(train_errors):.6f}\")\n","print(f\"Максимальная ошибка (train): {np.max(train_errors):.6f}\")\n","print(f\"Средняя ошибка (train): {np.mean(train_errors):.6f}\")\n","print(f\"Медианная ошибка (train): {np.median(train_errors):.6f}\")\n","print(f\"Стандартное отклонение (train): {np.std(train_errors):.6f}\")\n","print(f\"Количество точек с ошибкой выше порога: {np.sum(train_errors > threshold)}\")\n","print(f\"Процент точек выше порога: {np.sum(train_errors > threshold) / len(train_errors) * 100:.2f}%\")\n","\n","print(f\"\\nСтатистика по валидационной выборке:\")\n","print(f\"Средняя ошибка (val): {np.mean(val_errors):.6f}\")\n","print(f\"Максимальная ошибка (val): {np.max(val_errors):.6f}\")\n","\n","print(f\"\\nСтатистика по тестовой выборке:\")\n","print(f\"Средняя ошибка (test): {np.mean(test_errors):.6f}\")\n","print(f\"Максимальная ошибка (test): {np.max(test_errors):.6f}\")\n","\n","# ==========================\n","# 13. СОХРАНЕНИЕ\n","# ==========================\n","autoencoder.save('wbc_autoencoder_strict_trained.h5')\n","threshold_data = {'reconstruction_threshold': threshold,\n"," 'train_errors_stats': {'min': np.min(train_errors),\n"," 'max': np.max(train_errors),\n"," 'mean': np.mean(train_errors),\n"," 'percentile_95': threshold}}\n","joblib.dump(threshold_data, 'autoencoder_threshold.pkl')\n","\n","print(\"\\n\" + \"=\"*70)\n","print(\"ОБУЧЕНИЕ ЗАВЕРШЕНО!\")\n","print(f\"Архитектура: 9+ скрытых слоев\")\n","print(f\"Нейроны в bottleneck: 8\")\n","print(f\"Количество эпох: {len(history.history['loss'])}\")\n","print(f\"Patience: 5000\")\n","print(\"=\"*70)"],"metadata":{"id":"8pq9R5uIZ4GC"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"amVwxWeoLpO9"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","print(\"=\" * 60)\n","print(\"АНАЛИЗ ТЕСТОВОЙ ВЫБОРКИ WBC\")\n","print(\"=\" * 60)\n","\n","# Загрузка тестовой выборки\n","try:\n"," # Пробуем разные разделители\n"," try:\n"," test_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/is_lab2/WBC_train.txt', sep='\\s+', header=None)\n"," separator = 'пробелы/табуляция'\n"," except:\n"," try:\n"," test_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/is_lab2/WBC_train.txt', sep=',', header=None)\n"," separator = 'запятые'\n"," except:\n"," test_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/is_lab2/WBC_train.txt', sep='\\t', header=None)\n"," separator = 'табуляция'\n","\n"," print(\"Файл загружен успешно\")\n"," print(f\"Разделитель: {separator}\")\n","\n","except FileNotFoundError:\n"," print(\"Файл не найден по указанному пути\")\n"," exit()\n","except Exception as e:\n"," print(f\"Ошибка загрузки: {e}\")\n"," exit()\n","\n","# Базовый анализ\n","print(\"\\nБАЗОВАЯ ИНФОРМАЦИЯ:\")\n","print(f\" Размер данных: {test_data.shape[0]} строк × {test_data.shape[1]} столбцов\")\n","print(f\" Тип данных: {test_data.dtypes[0]}\")\n","\n","# Просмотр первых строк\n","print(\"\\nПЕРВЫЕ 5 СТРОК ДАННЫХ:\")\n","print(test_data.head())\n","\n","# Проверка на пропущенные значения\n","print(\"\\nПРОВЕРКА НА ПРОПУЩЕННЫЕ ЗНАЧЕНИЯ:\")\n","missing_values = test_data.isnull().sum()\n","total_missing = missing_values.sum()\n","print(f\" Всего пропущенных значений: {total_missing}\")\n","if total_missing > 0:\n"," print(\" Столбцы с пропущенными значениями:\")\n"," for col, missing in missing_values[missing_values > 0].items():\n"," print(f\" Столбец {col}: {missing} пропусков\")\n","\n","# Анализ распределения данных\n","print(\"\\nАНАЛИЗ РАСПРЕДЕЛЕНИЯ ДАННЫХ:\")\n","\n","# Визуализация\n","plt.figure(figsize=(15, 12))\n","\n","# 1. Распределение значений по столбцам (первые 9 признаков)\n","plt.subplot(3, 3, 1)\n","test_data.iloc[:, 0].hist(bins=50, alpha=0.7, color='blue', edgecolor='black')\n","plt.title('Распределение признака 0')\n","plt.xlabel('Значение')\n","plt.ylabel('Частота')\n","plt.grid(True, alpha=0.3)\n","\n","plt.subplot(3, 3, 2)\n","test_data.iloc[:, 1].hist(bins=50, alpha=0.7, color='green', edgecolor='black')\n","plt.title('Распределение признака 1')\n","plt.xlabel('Значение')\n","plt.ylabel('Частота')\n","plt.grid(True, alpha=0.3)\n","\n","plt.subplot(3, 3, 3)\n","test_data.iloc[:, 2].hist(bins=50, alpha=0.7, color='red', edgecolor='black')\n","plt.title('Распределение признака 2')\n","plt.xlabel('Значение')\n","plt.ylabel('Частота')\n","plt.grid(True, alpha=0.3)\n","\n","\n","\n","\n","\n","plt.tight_layout()\n","plt.show()\n","\n","# Детальный статистический анализ\n","print(\"\\nДЕТАЛЬНЫЙ СТАТИСТИЧЕСКИЙ АНАЛИЗ:\")\n","\n","# Анализ выбросов\n","Q1 = test_data.quantile(0.25)\n","Q3 = test_data.quantile(0.75)\n","IQR = Q3 - Q1\n","outliers = ((test_data < (Q1 - 1.5 * IQR)) | (test_data > (Q3 + 1.5 * IQR))).sum()\n","\n","print(\"ВЫБРОСЫ (по правилу 1.5*IQR):\")\n","for col in test_data.columns[:3]:\n"," print(f\" Признак {col}: {outliers[col]} выбросов ({outliers[col]/len(test_data)*100:.1f}%)\")\n","\n","# Сводка для автокодировщика\n","print(\"\\n\" + \"=\" * 60)\n","print(\"СВОДКА ДЛЯ АВТОКОДИРОВЩИКА\")\n","print(\"=\" * 60)\n","\n","print(f\"РАЗМЕРНОСТЬ: {test_data.shape[1]} признаков\")\n","print(f\"ОБЪЕМ ДАННЫХ: {test_data.shape[0]} образцов\")\n","print(f\"МАСШТАБИРОВАНИЕ: требуется нормализация\")\n","print(f\"ВЫБРОСЫ: присутствуют \")\n","print(f\"КОРРЕЛЯЦИИ: признаки коррелированы\")\n","\n","\n","\n","\n","print(\"\\n\" + \"=\" * 60)\n","print(\"АНАЛИЗ ЗАВЕРШЕН\")\n","print(\"=\" * 60)"],"metadata":{"id":"azsFD83VLpAw"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","from tensorflow.keras.models import load_model\n","from tensorflow.keras import metrics\n","import joblib\n","\n","print(\"=\" * 60)\n","print(\"ОБНАРУЖЕНИЕ АНОМАЛИЙ НА ТЕСТОВОЙ ВЫБОРКЕ\")\n","print(\"=\" * 60)\n","\n","# 1. Загрузка тестовой выборки\n","print(\"Загрузка тестовой выборки...\")\n","test_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/is_lab2/WBC_train.txt', sep='\\s+', header=None)\n","X_test = test_data.values + 0.8\n","print(f\"Тестовая выборка загружена: {X_test.shape}\")\n","\n","\n","\n","# 2. Загрузка модели и порога\n","print(\"Загрузка модели...\")\n","# Явно указываем кастомные объекты для загрузки\n","custom_objects = {'mse': metrics.mse}\n","autoencoder = load_model(\n"," '/content/drive/MyDrive/Colab Notebooks/is_lab2/wbc_autoencoder_strict_trained.h5',\n"," custom_objects=custom_objects\n",")\n","print(\"Модель загружена\")\n","\n","print(\"Загрузка порога...\")\n","threshold_data = joblib.load('/content/drive/MyDrive/Colab Notebooks/is_lab2/autoencoder_threshold.pkl')\n","reconstruction_threshold = threshold_data['reconstruction_threshold']\n","print(f\"Порог обнаружения аномалий: {reconstruction_threshold:.6f}\")\n","\n","# 3. Проверка совместимости размерностей\n","print(\"Проверка совместимости размерностей...\")\n","expected_dim = autoencoder.input_shape[1]\n","actual_dim = X_test.shape[1]\n","\n","print(f\"Ожидаемая размерность модели: {expected_dim}\")\n","print(f\"Фактическая размерность данных: {actual_dim}\")\n","\n","if actual_dim != expected_dim:\n"," print(\"Размерности не совпадают\")\n"," if actual_dim > expected_dim:\n"," X_test = X_test[:, :expected_dim]\n"," else:\n"," padding = np.zeros((X_test.shape[0], expected_dim - actual_dim))\n"," X_test = np.hstack([X_test, padding])\n"," print(f\"Данные скорректированы до: {X_test.shape}\")\n","\n","# 4. Расчет ошибок реконструкции\n","print(\"Расчет ошибок реконструкции...\")\n","test_reconstructions = autoencoder.predict(X_test, verbose=1)\n","test_errors = np.mean(np.square(X_test - test_reconstructions), axis=1)\n","\n","# 5. Обнаружение аномалий\n","test_anomalies = test_errors > reconstruction_threshold\n","test_anomalies_count = np.sum(test_anomalies)\n","test_anomalies_percentage = (test_anomalies_count / len(test_errors)) * 100\n","\n","print(\"\\nРЕЗУЛЬТАТЫ ОБНАРУЖЕНИЯ АНОМАЛИЙ:\")\n","print(f\"Всего тестовых образцов: {len(test_errors)}\")\n","print(f\"Обнаружено аномалий: {test_anomalies_count}\")\n","print(f\"Процент аномалий: {test_anomalies_percentage:.2f}%\")\n","\n","# 6. Построение графика ошибок реконструкции\n","plt.figure(figsize=(15, 10))\n","\n","# График 1: Распределение ошибок реконструкции\n","plt.subplot(2, 2, 1)\n","n, bins, patches = plt.hist(test_errors, bins=50, alpha=0.7, color='lightblue', edgecolor='black')\n","\n","for i in range(len(bins)-1):\n"," if bins[i] > reconstruction_threshold:\n"," patches[i].set_facecolor('red')\n"," patches[i].set_alpha(0.7)\n","\n","plt.axvline(x=reconstruction_threshold, color='red', linestyle='--', linewidth=2,\n"," label=f'Порог: {reconstruction_threshold:.4f}')\n","plt.xlabel('Ошибка реконструкции')\n","plt.ylabel('Количество образцов')\n","plt.title('Распределение ошибок реконструкции')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","\n","\n","# График 3: Ошибки по порядку образцов\n","plt.subplot(2, 2, 3)\n","plt.plot(test_errors, 'b-', alpha=0.7, linewidth=1)\n","plt.axhline(y=reconstruction_threshold, color='red', linestyle='--', linewidth=2, label='Порог')\n","plt.xlabel('Номер образца')\n","plt.ylabel('Ошибка реконструкции')\n","plt.title('Ошибки реконструкции по порядку образцов')\n","plt.legend()\n","plt.grid(True, alpha=0.3)\n","\n","\n","\n","plt.tight_layout()\n","plt.show()\n","\n","# 7. Детальная статистика\n","print(\"\\nДЕТАЛЬНАЯ СТАТИСТИКА:\")\n","print(f\"Минимальная ошибка: {np.min(test_errors):.6f}\")\n","print(f\"Максимальная ошибка: {np.max(test_errors):.6f}\")\n","print(f\"Средняя ошибка: {np.mean(test_errors):.6f}\")\n","print(f\"Медианная ошибка: {np.median(test_errors):.6f}\")\n","print(f\"Стандартное отклонение: {np.std(test_errors):.6f}\")\n","\n","print(\"\\n\" + \"=\" * 60)\n","print(\"ОБНАРУЖЕНИЕ АНОМАЛИЙ ЗАВЕРШЕНО\")\n","print(\"=\" * 60)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"jMPxR7ajWshe","executionInfo":{"status":"ok","timestamp":1760776825228,"user_tz":-300,"elapsed":1287,"user":{"displayName":"zluGGer","userId":"13047108208077674185"}},"outputId":"527dce4e-d595-48e6-bbfb-a160d3f222b4"},"execution_count":12,"outputs":[{"output_type":"stream","name":"stderr","text":["<>:14: SyntaxWarning: invalid escape sequence '\\s'\n","<>:14: SyntaxWarning: invalid escape sequence '\\s'\n","/tmp/ipython-input-2927363808.py:14: SyntaxWarning: invalid escape sequence '\\s'\n"," test_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/is_lab2/WBC_train.txt', sep='\\s+', header=None)\n","WARNING:absl:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.\n"]},{"output_type":"stream","name":"stdout","text":["============================================================\n","ОБНАРУЖЕНИЕ АНОМАЛИЙ НА ТЕСТОВОЙ ВЫБОРКЕ\n","============================================================\n","Загрузка тестовой выборки...\n","Тестовая выборка загружена: (357, 30)\n","Загрузка модели...\n","Модель загружена\n","Загрузка порога...\n","Порог обнаружения аномалий: 0.136186\n","Проверка совместимости размерностей...\n","Ожидаемая размерность модели: 30\n","Фактическая размерность данных: 30\n","Расчет ошибок реконструкции...\n","\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 23ms/step\n","\n","РЕЗУЛЬТАТЫ ОБНАРУЖЕНИЯ АНОМАЛИЙ:\n","Всего тестовых образцов: 357\n","Обнаружено аномалий: 286\n","Процент аномалий: 80.11%\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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1qxZ+PLLLwEAPj4+WLVqFe+2TERERERkYgx2M7Vhw4Zh2LBhiImJgY2NDUqVKmWoromIiIiISA8GOScBALKysnDw4EH89NNPEEIAAB49eoSkpCRDhUBERERERDowyJGE8PBwtG/fHvfv30d6ejoCAwNhb2+PuXPnIj09HatXrzZEGEQlWloFP2SrVHhqaQXcDzd2OERERGTCDHIkYcyYMWjQoAGePn0KGxsbqfztt9/GoUOHDBECUYl3bfseXDz0L36e+qWxQyEiIiITZ5AjCceOHcO///4LKysrWbmPjw8ePnxoiBCIiIiIiEhHBjmSoNFokJ2drVX+4MED2Nvb67Wuv//+G507d4anpycUCgV2794tWy6EwOeffw4PDw/Y2NggICAAISEhrxI+EREREVGJYpAkoV27drL7ISgUCiQlJWHatGl466239FpXcnIyateujRUrVuS6fN68eVi6dClWr16NU6dOwc7ODkFBQUhLS3uVl0BEREREVGIYZLrRggULEBQUhGrVqiEtLQ29evVCSEgIXFxcsHXrVr3W1aFDB3To0CHXZUIILF68GJ999hm6dOkCANi4cSPKlCmD3bt3o0ePHq/8WoheV5VGDYXFkzg4ZWdjpbGDISIiIpNmkCShXLlyuHTpErZt24bLly8jKSkJAwcORO/evWUnMr+q0NBQREVFISAgQCpzcHBAo0aNcOLEiTyThPT0dKSnp0vP1Wo1gGfTpDQaTaHFV1xpNBoIIbitchEbGyuNJ12Eh4c/m5onhHSp4JcxMzPTqb7q5HEooyJh6eQMMzMzCIUCGoVCpz6EQqFXG33rG6oN4yoeceW0ycjORlhYWK5jXwiBxMREJCYmQvHfOlUqFVxcXHRaPxHAv29UeExpLOkag8FupmZhYYH//e9/RdpHVFQUAKBMmTKy8jJlykjLcjN79mzMmDFDqzwmJobTlHSg0WiQkJAAIcSzL6wEAEhISMCyFSuQlpGpc5v09DSUsrWFJjUZGQlPXlrfxgzwr1oFFtmZL60vntspVKldCynlyyNapdIprmwHB1Q2M0OKr69ObfStL7UxN0eGuzui7e11mgtpsLiKuA3j0r/No6QkKLOysH3lSlhaWmpXUCjg6uGBmMhI4L8kwtLeHsM++ggODg469UHEv29UWExpLCUmJupUzyBJwt69e/NdHhwcbIgw8jRlyhSMHz9eeq5Wq+Hl5QVXV1eodPyDVZJpNBooFAq4uroafeCbkqSkJNy6cxdd+g+Bm3tZndpcu3gOPyxfjAyFGawcnF5aP1UD3Lh5C1nmli+tr3juvbl16TJsMzPhpuOvquaxsbh9+TJsNRqd2uhbX2pz9SqsfH3hlpAAMx2OpBgsriJuw7j0b3MtNhb3Ll/Gh1WqoLKjo9ZyoVAg0c4O9jExUAiBiNRULEpPh7m5Odzc3HTqg4h/36iwmNJYsra21qmeQZKErl27yp4rFArp8LBCocj1ykcF4e7uDgB4/PgxPDw8pPLHjx+jTp06ebZTKpVQKpVa5WZmZkZ/I18Xiv+mC3B7/b+cce7mUQ7lfHx1ahP16OGzw4AKhTRF4mX0rZ/TRiGETl/EAUDx3yFSXdvoWz+3NkXRT2HEVRRtGFfB23hZWaGira3Wco1CgWilEm62tjATAgohINLSpH0Vka74940Ki6mMJV37N9glUJ9/2Nra4s6dO3leGrWgfH194e7uLrtBm1qtxqlTp9C4ceNC64eIiIiIqDgz2DkJz9PnF88XJSUl4c6dO9Lz0NBQXLx4EU5OTihfvjzGjh2LmTNnolKlSvD19cXUqVPh6empdTSDiIiIiIhyZ/AkISwsDMnJyXrfRC3H2bNn0bp1a+l5zrkEffv2xfr16zFp0iQkJydjyJAhiI+PR7NmzbBv3z6d518REREREZV0BkkS3nnnHQBAamoqTp48ibZt28LV1bVA62rVqlW+l3pUKBT44osv8MUXXxRo/UREREREJZ1BkoScy825u7ujc+fOGDBggCG6JSIiIiKiAjBIkrBu3TpDdENE+Xjcqw8s1Grcj38K/Pm7scMhIiIiE2aQJOFld5zlvQiIit6DcZMAAGePH2OSQERERPkySJLg6OiY6xWNhBCFep8EIiIiIiJ6dQZJEipUqIDo6GhMnjwZTZs2NUSXRERERERUQAZJEm7cuIFly5Zh1qxZuHDhAubNmwdfX93uQEtERERERIZlkDsuW1paYvz48QgJCUHZsmVRq1YtTJgwAfHx8YbonogA1H+jBpp4OWPA8IHGDoWIiIhMnEGShBxOTk5YvHgxLly4gLCwMFSsWBGLFy82ZAhERERERPQSBpluVLduXa0Tl4UQSE9Px4QJEzB27FhDhEFERERERDowSJLQtWtXQ3RDpJeYmJiXXp73eSqVqsB3CiciIiJ6nRgkSZg2bZohuiHSWUxMDAYNHYrk1DSd29jZWOPbNWuYKBAREVGxx5upUYmkVquRnJqGrgM+hJtH2ZfWj458iN3fr4ZarWaSQERERMUeb6ZGJZqbR1mU8+HleImIiIieZ5AkAQB27doFJycnQ3VHREREREQFZLAkoWnTpnBzczNUd0REREREVEAGSxKuX7+OuLg42NnZwd3dHVZWVobqmoiIiIiI9GCwJKFt27bSOQhmZmaoWrUqBgwYgHHjxhkqBKISLWTpapilZ+DG7ZvA4vnGDoeIiIhMmEGShNDQUAghkJmZCbVajUePHuH06dOYOnUqsrKyMHHiREOEQVSiqRs3AwA8tLQ0ciRERERk6gySJHh7e8ue169fH507d0blypXxxRdfMEkgIiIiIjIhBptulJsePXqgevXqxgyBiIiIiIheYNAk4dy5c7hx4wYAoFq1aqhXrx7q1atnyBCISizViX9glp6BsrdvGjsUIiIiMnEGSRKio6PRo0cPHD16FI6OjgCA+Ph4tG7dGtu2beMdbIkMoNLoD6GMikR5J2d8auxgiIiIyKSZGaKTUaNGITExEdeuXcOTJ0/w5MkTXL16FWq1GqNHjzZECEREREREpCODHEnYt28fDh48CH9/f6msWrVqWLFiBdq1a2eIEIiIiIiISEcGOZKg0WhgmctlFy0tLaHRaAwRAhERERER6cggSUKbNm0wZswYPHr0SCp7+PAhxo0bh7Zt2xoiBCIiIiIi0pFBkoTly5dDrVbDx8cHfn5+8PPzg6+vL9RqNZYtW2aIEIiIiIiISEcGOSfBy8sL58+fx8GDB3Hz5rPLL/r7+yMgIMAQ3RMRERERkR6KNElITEyEvb09AEChUCAwMBCBgYGyOmfOnMEbb7xRlGEQEREREZEeinS6Ubt27ZCUlJTrsqysLHz22Wdo2rRpUYZARERERER6KtIkITExEQEBAVCr1bLyq1ev4o033sD69euxe/fuogyBiIiIiIj0VKRJwpEjR5CcnIzAwECo1WoIITB37lw0aNAA/v7+uHLlCt56662iDIGI/nPuzFX8GxGH71d+Z+xQiIiIyMQV6TkJrq6uOHz4MAICAtCmTRsolUqEhIRg06ZN6NatW1F2TUREREREBVTkVzdydXXFoUOHEBAQgKtXr+LixYuoWrVqUXdLREREREQFZJD7JLi4uODw4cOoVq0aevXqhadPnxqiWyIiIiIiKoAiPZLwzjvvyJ6rVCr8/fffaNiwIWrWrCmV//TTT0UZBhEBKLdoHizUapjFP8VKYwdDREREJq1IkwQHBwet576+vkXZJRHlocyWjVBGRULl5GzsUIiIiMjEFWmSsG7duqJcPRERERERFQGDnJNARERERESvDyYJREREREQkwySBiIiIiIhkmCQQEREREZEMkwQiIiIiIpIp8jsuExUXGRnpCA8P17l+eHg4srKyijAiIipqMTExUKvVerVRqVRwdXUtooiIiAyDSQKRDtRPn+Le3XuYNnMWlEqlTm1SUpIRFfUYmZmZRRwdERWFmJgYDOvVC+lxcXq1Uzo7Y9WWLUwUiOi1xiSBSAcpKcmwsLRC1/4fwsu3gk5trl04iw1LFyI72zSOJqjfbAqLJ3F4nJ0NXL5o7HCITJ5arUZ6XBwmKJXwsrHRqU1EaioWxMVBrVYzSSCi1xqTBCI9uHp4oJyPbncNj3r4oIij0U/IsjUAgLPHjwGD+xg5GqLXh5eNDfzs7HRvkJ5edMEQERkIT1wmIiIiIiIZJglERERERCTDJIGIiIiIiGR4TgJRCVH9/S6wjI2Bl6UVVho7GCIiIjJpTBKISgjre3ehjIqExsnZ2KEQERGRieN0IyIiIiIikmGSQEREREREMkwSiIiIiIhIhkkCERERERHJMEkgIiIiIiIZJglERERERCTDJIGIiIiIiGSYJBARERERkQxvpkbFQkxMDNRqtc71w8PDkZWVVYQRmZ4HYyfCLDkZ9yIfAds3GzscIiIiMmFMEui1FxMTg0FDhyI5NU3nNikpyYiKeozMzMwijMy0PO7dFwBw7fgxJglERESULyYJ9NpTq9VITk1D1wEfws2jrE5trl04iw1LFyI7u2QdTSAiIiLSBZMEKjbcPMqinI+vTnWjHj4o4miIiIiIXl9MEohKCMvHUVBosmH79ImxQyEiIiITxySBqISo1SkAyqhIVHVyxtfGDoaIiIhMGi+BSkREREREMkwSiIiIiIhIhkkCERERERHJMEkgIiIiIiIZJglERERERCTDJIGIiIiIiGSYJBARERERkQyTBCIiIiIikimWScL06dOhUChkj6pVqxo7LCIiIiKi10KxveNy9erVcfDgQem5hUWxfalEOrm27WcosrJx5fJFYNoUY4dDREREJqzYfnO2sLCAu7u7scMgMhlpfpUAAPGxMUaOhIiIiExdsU0SQkJC4OnpCWtrazRu3BizZ89G+fLlc62bnp6O9PR06blarQYAaDQaaDQag8T7OtNoNBBCGG1bCSGgUCgAISCE0LmdmZmZXm30rW+oNgXtQygU0CgUOtUXCoVebfStb6g2jKt4xKVLG41CIVsm/pt6qs++Kmffom9c+vZDpsvYf9+o+DClsaRrDMUySWjUqBHWr1+PKlWqIDIyEjNmzEDz5s1x9epV2Nvba9WfPXs2ZsyYoVUeExODtLQ0Q4T8WtNoNEhISIAQ4tkXVgNLTEyEd/nyMMtMQ0bCE53a2JgB/lWrwCI7U6c2+tY3VJuC9lGldi2klC+PaJVKpzbZDg6obGaGFF9fndroW19qY26ODHd3RNvb63TClMHiKuI2jKvw22gAJLi4PNsvAUhMS4NXcjISExMRHR2tUx+JiYnwqlQJiXZ2iLa21q1NAfoh02Xsv29UfJjSWEpMTNSpXrFMEjp06CD9v1atWmjUqBG8vb2xY8cODBw4UKv+lClTMH78eOm5Wq2Gl5cXXF1dodLxD1ZJptFooFAo4OrqapSBn5SUhPD796GxtIaVg5NObVI1wI2bt5BlbqlTG33rG6qNPvVddu+CeWoq0iPu49aly7DNzISbi4tOcZnHxuL25cuw1Wh0aqNvfanN1auw8vWFW0ICzHQ4MmKwuIq4DeMq/Daa/37Rd33wAGZCICk5GRHx8bC3t4ebm5tOfSQlJSEiJAT2jo5ws7PTrU0B+iHTZey/b1R8mNJYstbxR49imSS8yNHREZUrV8adO3dyXa5UKqFUKrXKzczMjP5Gvi4U/x36N8b2yjm0j/++FOhKo9Ho1Ubf+oZqo2t9n69mQBkVCXcn52c7KyF0+iIOAIr/DpHq2kbf+rm1KYp+CiOuomjDuIqmzfNjSfHflLycfZVOffy3b9E3Ln37IdNmzL9vVLyYyljStf8SMeKTkpJw9+5deHh4GDsUIiIiIiKTVyyThI8++gh//fUXwsLC8O+//+Ltt9+Gubk5evbsaezQiIiIiIhMXrGcbvTgwQP07NkTcXFxcHV1RbNmzXDy5Em4uroaOzQiIiIiIpNXLJOEbdu2GTsEIiIiIqLXVrGcbkRERERERAXHJIGIiIiIiGSYJBARERERkQyTBCIiIiIikimWJy4TkbZM12d3f022tQViYowcDREREZkyJglEJcTl3w8DAM4ePwYM7mPkaIiIiMiUcboRERERERHJMEkgIiIiIiIZJglERERERCTDcxKISogKk8fDIv4p7NPSsNLYwRAZQXpmJsLDw3WuHx4ejqysrCKM6JmYmBio1Wq92qhUKri6uhZRRERETBKISozSh/ZDGRUJaydnY4dCZHBxGRm4Fx6OOaNGQalU6tQmOT0djyMikO7gUGRxxcTEYFivXkiPi9OrndLZGau2bGGiQERFhkkCEREVe0nZ2bDKysI4KytUdnTUqc3Jp08xKysL2UV4NEGtViM9Lg4TlEp42djo1CYiNRUL4uKgVquZJBBRkWGSQEREJUY5a2v42dnpVDc8NbWIo/l/XjY2OscFAEhPL7pgiIjAE5eJiIiIiOgFTBKIiIiIiEiGSQIREREREckwSSAiIiIiIhkmCUREREREJMMkgYiIiIiIZHgJVKISIrbLu7BIiMeDpCTgr8PGDoeIiIhMGJMEohIi/LMZAICzx48xSSAiIqJ8cboRERERERHJMEkgIiIiIiIZJglERERERCTDcxKISog6rRrB6nEUqqocsNLYwRAREZFJY5JAVEKYJyfDIikJVlZKY4dCREREJo5JAhERUSFKz8xEeHi4TnXDw8ORlZVVxBEREemPSQIREVEhicvIwL3wcMwZNQpK5cuP2iWnp+NxRATSHRwMEB0Rke6YJBARERWSpOxsWGVlYZyVFSo7Or60/smnTzErKwvZPJpARCaGSQIREVEhK2dtDT87u5fWC09NNUA0RET64yVQiYiIiIhIhkkCERERERHJMEkgIiIiIiIZJglERERERCTDE5eJSoh7sxfALC0Nt+7dBVYvM3Y4REREZMKYJBCVEE8DggAAYcePGTkSIiIiMnWcbkRERERERDJMEoiIiIiISIbTjYhKCLvLF6HIzITrvTvGDoWIiIhMHJMEohKi6sD/QRkViQpOzphh7GCIiIjIpHG6ERERERERyTBJICIiIiIiGSYJREREREQkw3MSTFRMTAzUarVebVQqFVxdXU2qj4LQN67w8HBkZWUVYURERKYlPTMT4eHherUxxP6biIoPJgkmKCYmBoOGDkVyappe7exsrPHtmjU6/REwRB8FUZC4UlKSERX1GJmZmUUSExGR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8Ic//GFym6uuugrXXXcdbrjhBqxZswZNTU04/vjjMTY2NlWXNa35wQ+AVasqXQpBEARBEHZorr4a2Hln/5/3vrd43/e+N9i+V19d1ktYu3YtTj75ZJxyyil4/PHHsXLlSlx44YW49dZbHdt94xvfwMEHH4x//OMf+NKXvoTzzjsPf/rTnwAA+XweJ554Inp7e/HQQw/hT3/6E/75z3/ilFNOcRxj//33dygazz77bFmvreIrLl999dU4++yzcdZZZwEAbrjhBtxzzz245ZZb8KUvfalo+2OOOcbx/3nnnYfbbrsNf/nLX3D88cejUCjgmmuuwVe+8hWceOKJAIAf/ehHmDt3Ln7961/j1FNPLTpmOp1GOp2e/H9gYACAumn5fD6uSw1MPp9HoVCoyLkB4MknLWSzBbz1rRU5/ZRQ6TqeCUgdlx+p4/IjdVx+pI7LTyXrmM5NPw76+2Ft2OB7jMLChYC+b09PsH37+4v3DYlebvq/UCjg6quvxrHHHosLL7wQ4+Pj2G+//fDss8/iG9/4Bs4888zJfY466ih88YtfBADsueee+Otf/4pvf/vbWL58Oe6//3489dRT+Oc//4mFCxcCAG677TYccMABePTRR3HYYYehUCgglUph7ty5nmXjn9M91+970HZQUSMhk8lg7dq1uOCCCyY/SyQSWL58OR555BHf/QuFAh544AG88MIL+PrXvw4AWLduHTZv3ozly5dPbjdr1iwcccQReOSRR4xGwhVXXIFLLrmk6POenp6KqA/5fB79/f0oFApIJKZe7BkebsHgYBbd3aNTfu6potJ1PBOQOi4/UsflR+q4/Egdl59K1vH4+Djy+Tyy2Syy2azju0RzMxILFvgeozBnDnLavsk5c4AA++abm5HX9g0KDbD1cudyOQBANpvFs88+i/e85z0YHx+f/PxNb3oTrr32WqTTaSSTSQDA4Ycf7jjO4Ycfju985zvIZrN45plnsHDhQsyfP39ym7322gttbW14+umnsXTp0kljSy+LG9lsFvl8Htu2bUNNTY3ju8HBwUDHqKiRsHXrVuRyuSKraO7cuXj++edd9+vv78eCBQsmK/973/se3v72twMANm/ePHkM/Zj0nc4FF1yAFStWTP4/MDCAhQsXorOzE62trZGurRTy+Twsy0JnZ2dFOsz6egtNTQV0dbVM+bmnikrX8UxA6rj8SB2XH6nj8iN1XH4qWcdjY2MYHBxEKpVCKqUNOz/3OfXjgwXDgPW3vw10/gSi+9YnEgkkEomictPAP5VKwbIsJBKJyYF4TU2N43v6Wz8O3YdUKuX4WyeZTE5uY1mWcRsTtM+cOXNQX1/v+E7/3/UYgbaqMlpaWvDEE09gaGgIq1atwooVK7DbbrsVuSIFpa6uDnV1dUWfU+OoBNToKnF+pVxZ2NH76krW8UxB6rj8SB2XH6nj8iN1XH4qVcc0uKWf6Yhebvrfsizsu+++ePjhhx2fP/zww9hrr70cA/o1a9Y4jrNmzRrsu+++sCwL++23H15//XW88cYbk+5Gzz77LPr6+rD//vs76i5oHdI+pnsetA1U1Ejo6OhAMpl0RG8DwJYtWzBv3jzX/RKJBPbYYw8AwJIlS/Dcc8/hiiuuwDHHHDO535YtWzB//nzHMZcsWRL/ReyAFAqAuIYKgiAIgiB489nPfhaHHXYYLrvsMrz//e/HY489hu9+97v43ve+59jur3/9K6666iqcdNJJ+NOf/oT/+Z//wT333AMAWL58OQ488ECcfvrpuOaaa5DNZvHJT34SRx99NJYtW1aJywJQ4exGtbW1OPTQQ7GKpdLJ5/NYtWoVjjzyyMDHyefzk4HHixcvxrx58xzHHBgYwJo1a0IdcyZTKJQc4yMIgiAIgrDDc8ghh+Cuu+7CnXfeiaVLl2LlypW49NJL8ZGPfMSx3Wc/+1n8/e9/x9KlS3H55Zfj6quvxvHHHw9AzfrffffdaG9vx7/+679i+fLl2G233XDnnXdW4IpsKu5utGLFCpx55plYtmwZDj/8cFxzzTUYHh6ezHZ0xhlnYMGCBbjiiisAqCDjZcuWYffdd0c6ncbvf/973H777fj+978PQFX0Zz7zGVx++eXYc889sXjxYlx44YXYaaedcNJJJ1XqMqcV+bwYCYIgCIIgzGz0NKbEMccc48gq9P73vx/ve9/7kM1mJ+MUdFpbW3HXXXe5nmuXXXbB3Xff7fr9xRdfjIsvvjhw2eOg4kbCKaecgp6eHlx00UXYvHkzlixZgvvuu28y8Hj9+vUO36nh4WF88pOfxBtvvIGGhgbss88++PGPf+zIJfuFL3wBw8PD+OhHP4q+vj68+c1vxn333Rc4UGOmI+5GgiAIgiAIM5uKGwkAcM455+Ccc84xfrd69WrH/5dffjkuv/xyz+NZloVLL70Ul156aVxFnFGIkiAIgiAIgjCzqQojQagu8nlREgRBEARBEOLg1VdfrXQRIiG5xoQiJHBZEARBEIQ4cVsZWCgPcdS3GAlCEeJuJAiCIAhCHNAiYyMjIxUuycyC6ltfbTkM4m4kFCGBy4IgCIIgxEEymURbWxu6u7sBAI2NjdN2UTUvCoWCZ3ajqSzHyMgIuru70dbWNrnicxTESBCKEHcjQRAEQRDigha6JUNhR6RQKCCfz0+uMF1p2traPBcmDoIYCUIRErgsCIIgCEJcWJaF+fPno6urC+Pj45UuTlnI5/PYtm0b5syZ40jdXwlqampKUhAIMRKEIkRJEARBEAQhbpLJZCyD12okn8+jpqYG9fX1FTcS4mLHuAohViRwWRAEQRAEYWYjRoJQhAQuC4IgCIIgzGzESBCKEHcjQRAEQRCEmY0YCUIRErgsCIIgCIIwsxEjQShClARBEARBEISZjRgJQhESuCwIgiAIgjCzESNBKEIClwVBEARBEGY2YiQIDkhBECVBEARBEARh5iJGguCAjANREgRBEARBEGYuYiQIDsg4ECVBEARBEARh5iJGguBA3I0EQRAEQRAEMRIEB+JuJAiCIAiCIIiRIDgQdyNBEARBEARBjATBARkJoiQIgiAIgiDMXMRIEBxITIIgCIIgCIIgRoLgQJQEQRAEQRAEQYwEwYEELguCIAiCIAhiJAgOxN1IEARBEARBECNBcCDZjQRBEARBEAQxEgQH4m4kCIIgCIIgiJEgOBAlQRAEQRAEQRAjQXAgSoIgCIIgCIIgRoLgQAKXBUEQBEEQBDESBAfibiQIgiAIgiCIkSA4EHcjQRAEQRAEQYwEwYEoCYIgCIIgCIIYCYIDURIEQRAEQRAEMRIEBxK4LAiCIAiCIIiRIDgQdyNBEARBEARBjATBgbgbCYIgCIIgCGIkCA5ESRAEQRAEQRDESBAckJEgSoIgCIIgCMLMRYwEwYEELguCIAiCIAhiJAgOxN1IEARBEARBECNBcCCBy1PLJZcAzz5b6VIIgiAIgiA4ESNBcCDuRlPL2rXAq69WuhSCIAiCIAhOxEgQHEjg8tRRKKifXK7SJREEQRAEQXAiRoLgQJSEqUcMMkEQBEEQqg0xEgQHfMAqhkJ5oboWJUEQBEEQhGpDjATBATcMxEgoL+LaJQiCIAhCtSJGguCAGwYyeC0vkklKEARBEIRqRYwEwYG4G00d4m4kCIIgCEK1IkaC4EDcjaYOcTcSBEEQBKFaESNBcMAHrDJ4LS9khImSIAiCIAhCtSFGguBAlISpQ5QEQRAEQRCqFTESBAcSuDx1iJEgCIIgCEK1IkaC4EACl6cOcTcSBEEQBKFaESNBcCDuRlOHKAmCIAiCIFQrYiQIDiRweeqQFKiCIAiCIFQrYiQIDsTdaOqQxdQEQRAEQahWxEgQHEjg8tQh7kaCIAiCIFQrYiQIDkRJmDrE3UgQBEEQhGpFjATBgQQuTx3ibiQIgiAIQrUiRoLgQNyNpg5REgRBEARBqFbESBAciLvR1CFKgiAIgiAI1YoYCYIDURKmDglcFgRBEAShWhEjQXAgSsLUIe5GgiAIgiBUK2IkCA4kcHnqEHcjQRAEQRCqFTESBAfibjR1iJIgCIIgCEK1IkaC4EDcjaYOiUkQBEEQBKFaESNBcCBKwtRBdS1KgiAIgiAI1YYYCYIDURKmDlESBEEQBEGoVsRIEBxI4PLUIUaCIAiCIAjVihgJggNxN5o6xN1IEARBEIRqRYwEwYG4G00doiQIgiAIglCtiJEgOBAlYeqQFKiCIAiCIFQrYiQIDkRJmDpkMTVBEARBEKoVMRIEB2IkTB3ibiQIgiAIQrUiRoLgQNyNpg5xNxIEQRAEoVqpCiPh+uuvx6JFi1BfX48jjjgCjz76qOu2N954I97ylregvb0d7e3tWL58edH2H/nIR2BZluPnhBNOKPdl7BCIkjB1iLuRIAiCIAjVSsWNhDvvvBMrVqzAypUr8fjjj+Pggw/G8ccfj+7ubuP2q1evxmmnnYYHH3wQjzzyCBYuXIjjjjsOGzZscGx3wgknYNOmTZM/P/3pT6ficqY9oiRMHaIkCIIgCIJQraQqXYCrr74aZ599Ns466ywAwA033IB77rkHt9xyC770pS8Vbf+Tn/zE8f9NN92EX/ziF1i1ahXOOOOMyc/r6uowb968QGVIp9NIp9OT/w8MDAAA8vk88hUYKefzeRQKhYqcO5cDCgVr4u/CDmsoVLKOiWxW1XUuB+TzO55sUw11vKMjdVx+pI7Lj9Rx+ZE6Lj/TqY6DlrGiRkImk8HatWtxwQUXTH6WSCSwfPlyPPLII4GOMTIygvHxccyePdvx+erVq9HV1YX29na87W1vw+WXX445c+YYj3HFFVfgkksuKfq8p6cHY2NjIa4oHvL5PPr7+1EoFJBITK3Y099fj2y2Hvk8sG3bELq7s1N6/qmiknVM9PbWIJNpwshIAd3d/RUpQzmphjre0ZE6Lj9Sx+VH6rj8SB2Xn+lUx4ODg4G2q6iRsHXrVuRyOcydO9fx+dy5c/H8888HOsYXv/hF7LTTTli+fPnkZyeccALe9773YfHixXjllVfwX//1X3jHO96BRx55BMlksugYF1xwAVasWDH5/8DAABYuXIjOzk60trZGvLro5PN5WJaFzs7OKW9ozc1AY6OFTAZoa6tFV9eUnn7KqGQdE7NmAbW1FmpqgK6uuoqUoZxUQx3v6Egdlx+p4/IjdVx+pI7Lz3Sq4/r6+kDbVdzdqBSuvPJK/OxnP8Pq1asdF3zqqadO/n3ggQfioIMOwu67747Vq1fj2GOPLTpOXV0d6uqKB2mJRKJiN9qyrIqdP5kELIvKMOWnnzIqWcfq/OqnUAASCasiZSg3la7jmYDUcfmROi4/UsflR+q4/EyXOg5avopeRUdHB5LJJLZs2eL4fMuWLb7xBN/85jdx5ZVX4o9//CMOOuggz2132203dHR04OWXXy65zDs6hYIyEgAJXC43ErgsCIIgCEK1UlEjoba2FoceeihWrVo1+Vk+n8eqVatw5JFHuu531VVX4bLLLsN9992HZcuW+Z7njTfewLZt2zB//vxYyr0jI0bC1CGLqQmCIAiCUK1UXA9ZsWIFbrzxRtx222147rnn8IlPfALDw8OT2Y7OOOMMR2Dz17/+dVx44YW45ZZbsGjRImzevBmbN2/G0NAQAGBoaAif//zn8be//Q2vvvoqVq1ahRNPPBF77LEHjj/++Ipc43Qin7eNBFknobzIOgmCIAiCIFQrFY9JOOWUU9DT04OLLroImzdvxpIlS3DfffdNBjOvX7/e4Tv1/e9/H5lMBh/4wAccx1m5ciUuvvhiJJNJPPnkk7jtttvQ19eHnXbaCccddxwuu+wyY9yB4ESUhKlD3I0EQRAEQahWKm4kAMA555yDc845x/jd6tWrHf+/+uqrnsdqaGjAH/7wh5hKNvMQJWHqICOhUFA/1o4ZuywIgiAIwjSk4u5GQnXBlQQxEsqLrG4tCIIgCEK1IkbCDOHRR4Frr/XfTtyNpg5ev1LXgiAIgiBUE2IkzBBefBH4+9/9txN3o6mDGwYSlyAIgiAIQjUhRsIMoVAAstlg21GcuMxulxdxNxIEQRAEoVoRI2GGkM8HMxJESZg6xN1IEARBEIRqRYyEGUIuF1xJECNhahB3I0EQBEEQqpXQKVBnz57t+X1vb2/kwgjlg5QEv1SbXEmQ2e3yIu5GgiAIgiBUK6GNhEKhgHw+j/PPPx+LFy8uR5mEMkAD0lwOSHnc9XzejkkQJaG8iJIgCIIgCEK1EtpIeOWVV3DxxRfjW9/6Fj7+8Y/jK1/5CmbNmlWOsgkxQgPSbNbbSKDAZcuS2e1yIzEJgiAIgiBUK6FjEmbPno3rrrsOa9euxcsvv4w99tgD3/nOd5CTqdCqhhsJXpA7kmWJklBuxN1IEARBEIRqJXLg8l577YVf/epX+MUvfoEf/ehH2G+//fDrX/86xqIJcRLUSCB3o0RCjIRyI+5GgiAIgiBUK6Hdjd73vvcVfbZgwQI8//zzeP/73y+KQpUSRUmQ2e3yIu5GgiAIgiBUK6GNBLf4gw984AMlF0YoH2GVBHE3Kj+8fsW2FgRBEAShmghtJPzwhz8sRzmEMkMD0qBKQiIhs9vlRpQEQRAEQRCqFVlMbYYggcvVhwQuC4IgCIJQrYRWEg455BDP7x9//PHIhRHKB7mzjI97b5fPqxSpErhcfiRwWRAEQRCEaiW0kfDUU0+hsbER//mf/4nW1tZylEkoA2HcjWSdhKlB3I0EQRAEQahWQhsJTz/9ND7/+c/j9ttvx8qVK/Hxj38cyWSyHGUTYiRM4LK4G00NhQKQTCoVQZQEQRAEQRCqidAxCXvvvTd+85vf4M4778Qtt9yCAw44AL/97W/LUTYhRsLEJNA6CTK7XV7ItYv+/tvfgI9/vLJlEgRBEARBAEoIXH7rW9+KtWvX4oILLsAnP/lJvO1tb8M//vGPOMsmxEjYwGWJSSg/upGwaROweXNlyyQIgiAIggBEcDdasWJF0WfvfOc7cccdd+Dwww/HuF9krFARZJ2E6qNQsI2EXE7dm1zONtQEQRAEQRAqRWgjwU0tWLZsWcmFEcpHFCVB3I3Ki64kkH0tRoIgCIIgCJUmtJHw4IMPlqMcQpmRwOXqQzcS6N7kcspIEwRBEARBqBShjQQ3CoUCbr/9dgBAMpnE6aefHtehhRiQFKjVh+5uREpCLgfU1FSuXIIgCIIgCKGNhOuuu874eTabxec//3mce+65qK2tFSOhyqABv1/IiAQuTx1eSoIgCIIgCEIlCW0kfPvb3zZ+XpgYUbp9L1QWCVyuPtxiEkTBEQRBEASh0oQ2EtatW2f8fGxsDE1NTSUXSCgPNPD0m6WmmAQJXC4/puxG9LcgCIIgCEIliS080pJ0LFVNWHcjURLKTz5vxx5wJUGMBEEQBEEQKo3kUJkhRHE3EiWhvOTzQDJp/y1KgiAIgiAI1UJod6Mnn3zS+Hkmkym5MEL5CJPdSAKXp4ZCQRkJllWc3UgQBEEQBKGShDYSlixZAsuyJgOVAUz+Ly5H1QsNPCVwuXqg+I9kUgKXBUEQBEGoLmILXBaqG1lxufoggyyRcAYuS70LgiAIOxLbtgGbNwP771/pkghhCG0k7LrrruUoh1BmSBWQwOXqgRauI4NM3I0EQRCEHZH77gNWrwZuvLHSJRHCEDpw+Q9/+IPx81deeQVHH310yQUSykOYwOVkUpSEqcDN3UiMBEEQBGFHIp32n6QUqo/QRsIHPvAB/PznP3d8du211+Lggw/GXnvtFVvBhHgJuk6CKAlTB1cSZJ0EQRAEYUclm5WJx+lIaHeju+66C6eccgr6+/tx9NFH46yzzsL69evx85//HCeccEI5yijEQNB1Emh2W1Kglh8ekyBKgiAIgrCjksvJmGI6EtpIeMc73oF77rkH733ve5FOp3H66afjnnvuQWtraznKJ8REmMBlGriKklBedHcjURIEQRCEHZHxcTESpiORFlN7y1veggceeADNzc3o6uoSA2EaEDa7kbgblR/d3UhSoAqCIAg7IuJuND0JrSS8733vm/x7p512wpVXXomHH34Y7e3tAIBf/vKX8ZVOiI2wKy5L4HL50etalARBEARhR0TcjaYnoY2EWbNmTf69dOlSLF26NNYCCeUh7IrLoiSUH+5uJCsuCzORgQHV7ufMqXRJBEEoJ6IkTE9CGwk//OEPy1EOoczQwFMCl6sHfZ0EURKEmcbttwM9PcDFF1e6JIIglBOJSZiehI5JWLlyJV577bVylEUoI2FSoErg8tRABlkioQwEujdiJAgzhZER9SMIwo6NuBtNT0IbCXfffTd23313HHvssbjjjjuQTqfLUS4hZsTdqPqgmIRkUi00wz8XhJlAPi9GsSDMBMTdaHoS2kh44okn8Nhjj2H//ffHeeedh3nz5uETn/gEHnvssXKUT4iJMOskSODy1MBVG24kzPRB05/+BFx6aaVLIUwFuZy0d0GYCWSz6p0nk4/Ti0gpUJcuXYrrrrsOGzduxM0334w33ngDRx11FA466CBce+216O/vj7ucQonk80BtbbDsRqIkTA08cFmMBJvXXwdefbXSpRCmAnFBEISZAY095HmfXkQyEohCoYDx8XFkMhkUCgW0t7fju9/9LhYuXIg777wzrjIKMRDUSODuRvIwlxeu2oiRYMPjM4QdG3E3EoSZgRgJ05NIRsLatWtxzjnnYP78+Tj//POxdOlSPPfcc3jooYfw0ksv4atf/SrOPffcuMsqlEAYJWFHCVz+xjeAp56qdCncIXcjURKciJEwcxB3I0GYGYiRMD0JbSQceOCBeNOb3oR169bh5ptvxuuvv44rr7wSe+yxx+Q2p512Gnp6emItqFAaUZSE6W4krFkDvPBCpUvhDs9ulMk4P5/JiJEwcyiHu9HoKHDHHfIcCUI1IUbC9CT0Ogknn3wy/uM//gMLFixw3aajowN5aQlVRaEQ3EggJcEvyLna4WsPVCPibmRGjISZQzncjV54AfjpT4GjjwY8XlOCIEwhYiRMT0IrCRdeeOGkgVAoFFCY7tPNMwDKKDDTApfz+eo2dMTdyIwYCcXk88D11wNbt1a6JPFSDncj6uOGh+M9riAI0REjYXoSKSbh5ptvxgEHHID6+nrU19fjgAMOwE033RR32YSYoIeypka9kL0G/zRw3RECl6vdSODuRmIk2EjGm2KGhoD77gOef77SJYmXcigJdDwxEgShehAjYXoS2t3ooosuwtVXX41Pf/rTOPLIIwEAjzzyCM4//3ysX78el0qC86qDHsq6OvU7m1UGgw4pDjtC4DJdS7UbCaIkFDM+LnWgQy/Yanafi0I+H/+gQYwEQag+qO+Svn16EdpI+P73v48bb7wRp5122uRn733ve3HQQQfh05/+tBgJVQgN9mtr1W83I4HYEdyNqOy6kfD008C2bcBb3jL1ZdJxW0xtps+08EV3LKvSpakOdtQXbDncjej5GRmJ97iCIERHlITpSWh3o/HxcSxbtqzo80MPPRTZHW2aaweBHkpuJHhtRy4w0/lhdlth+oEHgF//esqLY4S7G3FDbkcbCIaFrl+6E5sdtU7KYSSIkiAI1YcYCdOT0EbChz/8YXz/+98v+vwHP/gBTj/99FgKJcQLvTTJSHBzwaGBKsUkTGclwc1IGB+vnoEWD1wm6uqkE6V7FmTwuGEDMDhY3vJUA+JuFBxqN6IkCEJ1UCjYz/lMf79NN0K7GwEqcPmPf/wj3vSmNwEA1qxZg/Xr1+OMM87AihUrJre7+uqr4ymlUBImdyMTXEmY7oHLbkZCNls9cQo8BSpRVydKAl1/kHq46irg0EOBM84ob5kqzY5qJIiSIAg7Przfms6TjzOR0EbC008/jUMOOQQA8MorrwBQ6yJ0dHTg6aefntzOEmfiqoFnNwLcX8pcSdhR3Y3Gx6vLSLCsYiVhphsJYWTpsTH1s6Ozo8ckxBl/IkqCIFQX3EiYzuOKmUhoI+HBBx8sRzmEMmLKbmSCjIQdIXDZS0mIYzb2iiuA3XcHTj45+jFoYERKQjJpp6mdyYRxNyqHu0o1sqMqCXTvymEkiJIgCNWBGAnTl9AxCf/xH/+BwZngBLwDoQcuu82k64HLYiS4s3mz+imFfF4ZBqQk1NSoep/pRkIYd6OZZiTsaG2DrifOeyhGgiBUF/ydu6P1YTs6oY2E2267DaOjo+Uoi1AmgmY30gOXp/Pgi8quX2tcMQlxDE55diMASKWUwTCd6z0OwgyIS12Ma+1a4NVXo+8/VezI2Y347ziPKUaCIFQHoiRMX0IbCYVCQeINphlRUqDG4W7U3V25WYNyKwlxrAqsuxvV1CgjYabPtIQ1Ekq5D7fdBtx7b/T9pwpqxzuakUD3rhxGgsQkCEJ1UKqRsKP1e9OJSNmNzj33XDQ0NBi/u+WWW0oqkBA/QbMbxRm4XCgAn/oUcO65lVm4zC8FaqkGUFxKAk+BKkaCIoyRwFPrRSGXq55Adi/KMeNeDZTTSBAlQdjRGR4G7rgDOOsspURXK6UYCa++Cnz2s8CttwItLXGWSghCaCUBUGqC249QfUSJSShVScjlVNaZSr2ovZSEUgeWdPw4DA2eApXcjXa0gWBYptLdqBwpOMvBjhq4XM6YhJGR6R1XJQh+vPQS8JvfqPViqplSjIRt24BMBhgairdMQjBC256WZeG6665DV1dXOcojlIGgKVDjXHG50jOfXkaC6fOwxOVupCsJErg8te5G+fz0GHjvqIHL5VQScjk1uKCsboKwo0Ftvb+/suXwoxQjQRZhqyyRYhKE6UXYFKhxrLhcLUaCKXDZ9HmU40vgcnmYaiNhOgy8d3QlIc57wNuDuBwJOzL03AwMVLYcfvgZCU8/DXzuc+YxhxgJlSW0kXDmmWe6xiMI1UnY7EZxuRvx31ONn5JQ6mCrVDeVQsFWEnjg8kxXErgr2FS5G02HgfeObiSUw90IqK7g5csvB/70p0qXQtiR2FGMhNdfB154AUini7+ja5T56coQ2ki45pprMG7w1ejt7cVAtbfUGUrYmIQ4Apcrbf17BS6bPo9yfLdre+EFNTMSBO5uJDEJ4fNpi5IwfeEv/bjdjSgBXzUpCevWTY90u8L0YUdxN6LvTXEHlR5LzHRCGwmnnnoqfvaznxV9ftddd+HUU0+NpVBCvOgxCdWmJGSzwBNPRD+XCT4bza8jTiXBrdP65S+Bu+4KVj5JgeokrJFQahD6dIlJqLQyVw74tcRtJDQ3q7+ryUjI5QBZYkiIk+loJJiederDTc+rGAmVJbSRsGbNGrz1rW8t+vyYY47BmjVrYimUEC9cIUil/NdJiENJCONG8PjjwIUXxpu9gJ+XqwZTEZMQxBWJ17UoCTZhA9xmSnajHXGdhHIaCZQqsZrcjfJ5szuFIERlR3E3ou9Nz+uOOEEynQhtJKTTaWQNb6rx8XFZiblKCWokVEpJyGTU7zhfoCYjoVCIL7uRn5HgN8DV16QAbCVhJs+YhFUSSs0yJUpC5eD3Le6YhOZm1YeJkiBMB8bGgJ6e8PtNRyXB9KzTdYi7UfUR2kg4/PDD8YMf/KDo8xtuuAGHHnpoLIWa6axYYeG3v40vb19YI2GqsxvRNnEuamUyEvjaBuVMgRpGSbAsp5Iw0wOXK+FuNB3qe0eMSSinkpBKAQ0N1aUk5HKiJAhmfvc74KKLwu+3oygJXquklyO5gRCc0OskXH755Vi+fDn+7//+D8ceeywAYNWqVXjsscfwxz/+MfYCzkSGh4Hh4Ujr3Bnhg/8g7kZxrJMQNkMNUH4jweR2VMrxS1ESdNcuQGISAOd98btH1K4lu9H0hN+3uJWEZBJobBQlQZgeDAxEa6s7ipFA30tMQvUReiR61FFH4ZFHHsHChQtx11134be//S322GMPPPnkk3jLW95SjjLOOGpqyjNgnulKQpgBqB9+SkIp7kZiJCj86jCOGabppiRMh7IGhd+3uJWEZBJoaqouJSGfV24lgqCTTkd7BriRUM0pQnm/7rUWgsndSJSEyhJaSQCAJUuW4Cc/+UncZREmUAN5K7bjcYWgpmZqlIQwD/ZUKQn8uks5F3Vycbsb1dSoY+9IA8GwhHE38rsPQZhuMQnToaxBKZe7UT5vGwnVpCSIkSC4UaqRkM0qg7ipKd5yxUUpgcuiJFSW0EaC31oIra2tkQsjKLwG8lGghyuZVAaI2wC5UoHL001J8DOAorobpVLxrOQ8nejuVploaH3GMEZCqS8PimeYDkYZteHpUNaglEtJyGar00jI5cRIEMyUaiQASk2oZiOBPCRM10mfmZ5XURIqS2h3o7a2NrS3txf90OdRuP7667Fo0SLU19fjiCOOwKOPPuq67Y033oi3vOUtk+ddvnx50faFQgEXXXQR5s+fj4aGBixfvhwvvfRSpLJVgnIZCZRucyrcjXbkmAS/awuiJPC65kpCHIHLd90FfOtbpR1jqli5Erj7bvv/KEZC1PqiezAdZufLYUhXmnIGLrvFJBQKwP33T/09pxXWxUgQTEQ1Evh7rpozHOVy9mKuXoHLEpNQfYQ2Eh588EE88MADWLVqFerq6nD77bfjgQcemPw8LHfeeSdWrFiBlStX4vHHH8fBBx+M448/Ht3d3cbtV69ejdNOOw0PPvjgZGzEcccdhw0bNkxuc9VVV+G6667DDTfcgDVr1qCpqQnHH388xqZJD60s7pnjblQJJaGUc/l1WkHUAK/F1KLU+9NP24PejRsB9jhUNf39Tj/UqVQSSjUyppJqiEkYHIzX77mcKVDdYhI2bACuvRZ47rn4zhe0TID7TGoQ/vQn4Pnn4yuTUD2k09EMV1LNgOoOXs5mxUiYroQ2Eo4++mgcffTROOaYY5BMJvGmN71p8rOjjz46dAGuvvpqnH322TjrrLOw33774YYbbkBjYyNuueUW4/Y/+clP8MlPfhJLlizBPvvsg5tuugn5fB6rVq0CoFSEa665Bl/5yldw4okn4qCDDsKPfvQjbNy4Eb/+9a9Dl68S1NQUYp3pCprdqFKBy5WISfCq3zvuAH76U/fv43Q30lOgRglc3rABuOACYN06+/zTYeALqGwv/L6HmV0u9eUxnfz8K72YWjYLnH028Le/xXfMcsYkJBJmJYEM0ql+Pvj5os5V/eIXwP/+bzzlEaqLdNpWm8KQywGzZqm/q1lJGB9Xk2BA+OxG4m5UWSIFLsdFJpPB2rVrccEFF0x+lkgksHz5cjzyyCOBjjEyMoLx8XHMnj0bALBu3Tps3rwZy5cvn9xm1qxZOOKII/DII4/g1FNPLTpGOp1GmiWwpriLfD6PfAVaZipVwPg4Yjt3NgsUChaAApJJC+PjBdcHtVCwUJjoqXI5C/l8NEuBjpXNms/FGR9X26bT/tsS//wnMHs20NbmfX4AyGTUcTMZ52eFQsFYx88/b8Gy4HrtdGxlDBRvk81ayGbd9wdUx1coWLAstU2hYCGZLMCy1P5h6n1kRO0/OlqYDMQt5d7FRT6fd61jQJVzfNx539XLUt0jt3bK91dtzLuuy7X/VOJWVr86jou+PmBoyML27cGfUT/4Mxqknwh+XAuJRAH19cDwsPM5UGqINdknBCGOOubXOjpamIzBCcP4uHvfPd2ZqnZcraTTFgoF1eelQozK1Ay9haYm+D6blazj8XEgmXR/1ul9ODRU3BeHGUtUmunUjoOWsWQjwbKiu8Vs3boVuVwOc+fOdXw+d+5cPB9QV/3iF7+InXbaadIo2Lx58+Qx9GPSdzpXXHEFLrnkkqLPe3p6KuKiNDbWgKGhcXR3DyKRCC32FLF1aw0ymSZs29aPdLoJ27cX0N1dbLJv3ZpEJtOC3t4BDAzUYGysAd3dfZHO2dOTQibTjP7+ceO5OH19dchkGtDTM4Lu7kyg419+eSsOOSSDk082359t29Q1A0B39zC6u8exZYu6PgDYunUEfX19KBQKRXXc19eMQgHo7jbkYwPQ328hk5mF4eE8uruLNd6hoVbk8zB+R/T0JJDJtGL79iGMjFjIZJowPDyKkRELw8N16O4OPi3U3a2uq7t7CHPmZNHf34ShoaTn+aeCfD6P/v5+Yx0DatCZycxCb28G3d3KL6Snx75vvb2j6O52X33K7z74oep91sS97gu9/1TS39+ETKYGw8MFR9vwq+O4eO011ca2bfO+J2GgdgsAW7eqZzQsGzYkMDRkYe+97an6wcEWtLTkkMnk0Nfn7MPeeEO1rzDni6OOh4dVW1NlGEA2G34QMTzciv7+7OSzsiMxVe24Wunra0Umk8CmTX2oC7GOal9fA9LpGtTWAhs2jKO7230hjkrW8fbtDRgfTyGbTWL79uI+pK9P9W/bthWK3n3bt9cjk6nHtm3R+oipZDq148HBwUDbhTYSli5dOmkYjI6O4j3veQ9qydkMwOOPPx72kJG58sor8bOf/QyrV69GfX195ONccMEFWLFixeT/AwMDWLhwITo7OyuSram9vYDu7lF0dbXF0tBmzVKzDXPndk5Kk11dxWkQtm5V23V2dqCtTf3d1dVV0jkbG2uN5+I0NdFsSC2Cns6yLCST9ejqMt8fOj8ANDer427ebH/W1FSDtrY0Ojs7i+q4tlbN6nR1NRqPnUqpberqgK6u4nZXW6tUBtN3hArksjBnTi0aG9XfHR21GBgAamosdHUFf1Ns26b2nzVLXWdDA1BXZ3mefyrI5/OwLMtYx4BytaqttVBfX4uurmYAQGur+iyZtO+bG373wY+BAftcUdv5VFFXZ6G2Vl0zbxt+dRwXr7+u6srvnoShr89+Hltbox33hz8Etm618I1v2LOPdXUW2toKmDdPzV7Ont01OTtbV6fOGeZ8cdRxfz/vjzoiXWsqZaGxsTD5rOxITFU7rlYSCfV8z5nThUbza8dIYyPQ3GxNZDWqR1dXi+u2lazj+nqgpcVCfz/Q0lL87DU08Pem893X3Ox8v1Uz06kdBx0zhzYSTjrppMm/TzzxxLC7O+jo6EAymcSWLVscn2/ZsgXz5s3z3Peb3/wmrrzyStx///046KCDJj+n/bZs2YL58+c7jrlkyRLjserq6lBnMN8TiURFbnRtbX5CMo/n/JTSNJVSHdHIiB0sa9o2mbSQSin/yEQimlJUKGDCZcdyPZd+3lwu2LaAGmRnMt7bk8hFx83nnZ9ZlrmOlUuH97VTzIZpm3zev+74PUml7AEzrZUQpt6prgsFdZ2U2jPqvYsTtzoGlPuXZSk3Cvo6l1Ofqf7Lvz2oNhb9Wml/y7JQgihadqhecrnia/Wq47gYGHC2sbigOo96XGW8OOtErZOgBk6WpVw5aB5rdJTOGe58pdYxPaOAf7/lhupX4q3/amIq2nG1Qn1h2Pubz6uJg1mzgIGBIP1lZeq4ULATc5iePXo3q8B+azJ+gfaN8sxWiunSjoOWL7SRsHLlytCFcaO2thaHHnooVq1aNWl8UBDyOeec47rfVVddha9+9av4wx/+gGXLljm+W7x4MebNm4dVq1ZNGgUDAwNYs2YNPvGJT8RW9nKiMhBNfXaj6bTicjar/Nfd8Apcrq31DgDNZr2/L9c6CVFXXNbLM10ClynzTIZ5mPF7NFXZjQB1rjC+wMRzz6mZroULo5UhKFQvlQpc7uuL//z8/ka5h9msyuSl1z1lNyK//7ExtRYHYAdGTnU98usbdfcI8cSvXxKmL9QHhu23aeHA1lbgtdfiL1dcZLOqf3XLmpjN2mOOkRE7GBuQ7EaVJnJMwtq1a/HcRB65/fffH0uXLo10nBUrVuDMM8/EsmXLcPjhh+Oaa67B8PAwzjrrLADAGWecgQULFuCKK64AAHz961/HRRddhDvuuAOLFi2ajDNobm5Gc3MzLMvCZz7zGVx++eXYc889sXjxYlx44YXYaaedHCpINeOVgSgKfEBaWxtsMbVSU6CWe50Ev4WJ+DXrRkJ9vfe5xse9v/frtFQQlvv+gLOueXajKOsk6AbZdDES6P7p2Y38jFkiruxGgP0SC8vNNwO77AKce260MgSFXqKkUk216kFGQtzrGZj+DsrGjea2rhsJfFBORsJUPx+8jXpNbngxXZ7rauOll4DHHgM++MFKl8RMoWAbCWHf+9TWZ82q/uxGXu+3XE4ZOv396hnlRoJkN6osoV+L3d3dOPXUU7F69Wq0TaSW6evrw1vf+lb87Gc/Q2dnZ6jjnXLKKejp6cFFF12EzZs3Y8mSJbjvvvsmA4/Xr1/vkEW+//3vI5PJ4AMf+IDjOCtXrsTFF18MAPjCF76A4eFhfPSjH0VfXx/e/OY347777ispbmEqKediarTqod92O4qSUFdnNhK86nd83Dm77VZe+l0oAC++COy9t/25X92VQ0ngv6dDh0qDN37fKVVekPUiSl3nQFcSojA+Hn3QF4ZcTrXb0dHoqkcplENJKLX+168vPg4dK5kklzWzkTDVzwe/vlKUhOnwXFcbjz8O/Pa31Wsk8P4j7P31WhOkmqA+y23yUTcSOKIkVJbQr5pPf/rTGBwcxDPPPIN9990XAPDss8/izDPPxLnnnoufeiWYd+Gcc85xdS9avXq14/9XX33V93iWZeHSSy/FpZdeGros1UC5FlNLJr2NBO5uRAPXqLOWYaz/KEpCFCOBfjc2+isJXkaC3mm9/DLwuc8BN94IzJtnz/Z6YTISaJ2EsLPF+mB5usw40mBJdzcKul4E1XEc7kZRB79TZSSMj6u2PDoaXfUohXIrCVHuoZ+RQAGgfFBOA6lKrpMQpb1QnNF0eK6rjWp30zK5WwaF2nqUyaWpxM/diIwEoNhICDPhKMRP6MiK++67D9/73vcmDQQA2G+//XD99dfj3nvvjbVwM5W4lITXXite/TeIksBXAY6qJpRzMTV6YXq5G1G5uXsVuWz4xSSEdTeictBgJMggnRtk5G5kB3aFGzTpq/FOFyXBzd0o6EsvTnejqC8gtdZDtH3DQEoCnXOqKYeREJeS4OZuZFISaDG1qa7DUpWEalhxe7pSjkmTTAb47GfjWdmeG41RVORkMrqL8vg48Ktflf99EcRIIBcjURKqi9BGQj6fRw0PPZ+gpqZmWiwgMR1IpUpXEgYHlZ/02rX2rLTKphMsJoFmsUsdgAXZn7b1mr3nUGfoNSNHvu3cSCC/SD8jbHzcW9o3BQpTuQoFe5DuZWCZDDLqRPkxgzBdYxLclISgblelzjDFoSRks8HbbSlks5jMn16Je7t9e/znLre7EQ9cJqpBSYiy9A7vY6qRTGZqFLUoqMUl4z1mf79yMY0jWLiSRsJLLwG33GI/S2H4/veBAI4dAIIZCc0TmX3dlAQZXlaG0EbC2972Npx33nnYuHHj5GcbNmzA+eefj2OPPTbWws1UaBBbSkzAli3qoRoZsTMg0LGDuBvZqQmjnT+KkhC0k6Nj+rkb6TEY1FH5GQn0ndvgT5/Z4MYC78iCGAmJhMq8YllqJiWKkjDdjQTeHrPZ4EpCnO5GpSgJUzE4ymYrpyTk8yoFatznpjqP4ipBmY3a292NhJoa9byXMyZh1Srgiiv8+8lSjQSq92odKN1yC/Dtb1e6FGaCTNqEhe5HHGutxmUkRLnGsBN0fL/f/x546qlg2wfJblRTo1wERUmoLkIbCd/97ncxMDCARYsWYffdd8fuu++OxYsXY2BgAN/5znfKUcYZBwk1pQz0enrUb5pFoUH/VLkbhQkqDRu4TNv5ZTeiLDm6keClpnD3LLeO00tJCOpnzQ2ynXYCbr0VE4s/OY8ZhOkak0D3L2pMQtzZjaIwVe5GlVQSBgbs9loOI6GmJvw93LRJ7b9oUXF98EmR+npnQGfc2Y2eeQZ4+GHghRe8t6Prq6kpTUmo1ue6v796s+uUw1UrTiOB93+lGAm8XGH2B8JPdJDhHXQ/PvljGlNQYLMYCdVH6PC3hQsX4vHHH8f999+P559/HgCw7777Yvny5bEXbqZCRsL4OMAWsw5Fd7f6TYoEz6ATRkkodQBWjpgE3rG5BfhyJYHnmKfZRbdz8c/DKgl6/IdXFhpukAHA7NnqdxQjQX8JUjkqkSozDG5KQlgjoVCIdq3TMbsRMPVKAsUjpFLlcTeqqQl/XHKPWLRIuUxwcjm7v2tosAdy+bzd5uKqw8FB9fvuu4E99gDuvBN429sAto7n5LkBNQgqRUmoViMhl6teVyhed3EF/AdxeQ1KXEoClcvgDe6K34SYG25Gwk9+osYe55/v/JzK5ZUCNZFQLkd6libaPk4lSAhOpEfGsiy8/e1vx9vf/nbH52NjY9MmzWg1w42EqJCSQFIrNxLIcNAHVZUKXA6rJPCXkZshZXI3opgE5YJgHlHq6Ti9yluKksDdjThRjAS38kwXI4G30ShGAh0j7AAgrpiEqVASKLsRMPUDRTIS5swpj5IQZOE8nd5etZ+buxG1BUobCzgHH3HV4eCgKsfDD6ug6CeeUFla3vOe4jIBKlXljqgkVHPmJd4/0zNUKtVkJCQSlVMS9Lb8yisqVkOHlASvmARSEii5AFFqqmuhNEK7G91yyy3Gz//yl7/g4IMPLrlAQrxGwvh4sZEAmDsTU+Dyxo3ARz9aLAH6ESbYKKySwMvu9sItFIpTvgaJSeBlcOs49Rls3onxjsyrU+OqDSeuwOWwx6gE/N7p94gbCaOjZmOVt60oilfQe+VGoTB1MQlcSZgKo4RDQctz5sQr+XMjIchxf/tb1R8BaiDR1GQ2Jml2FVCDDpORENd1DA4C//qv6t48/bTqW0z56ks1EuieV+szXc1GQjniOcoVkxA1BWpUI4HqJGwfRm1c329oSLmdUZ9BBAlcpvUeJHC5ughtJHz2s5/Ft1mE0tjYGD7zmc/guOOOw4c//OFYCzdT8RrIE3/8I7B1q/v3XkoCYB5omNyN1q9X/r/6Q+9HFCUhqOTJj+nWudEMS9iYBF2lMKEPTnngdVglQZ/pjxK4bIpJ4L+rldFRuz3yFUf5ehEA8IlPAH/+c/H+pRoJpSoJUaX6sFDGLDISKqEkNDSoAXfci6lRxrUg13TbbcBf/6r+Hh5Wrgn6oIOMdh6TQEYCn6GMU0no6gK+8AXgssuAzs7yGAnV/kxXcxwUVxLiPmY1BC7TOw2ofEwCPWPr1jk/5+5GboHLyaR6piUmoboI7W60atUqnHDCCdi+fTuOO+44nHXWWZg1axbWrFmDAw88sBxlnHHQA+82SB0eBr7zHTXDr8vaBI9JAIIZCSZ3o6g+vGEkwrBKAt/OrZMmw4gbBFxJCBKT4GWA8PO4BQx7XXuc7kamdRLCHgNQdfn888CSJeH2i8rYmHLN2Lat+B6R72qhoFxLenuL9+fqQpQBSqkxCTwLVjldu6hs5CpRiZiEtrb4F2wiQ97NT9m0PQ1C3JQE+pvHJOhKQjIZTx0WCspIaGkBDj1Ufea28i2PSSD3rTBUe0zCdFASqjVwuZQVl8kgLlVJiBqToF8/PZ+vvgoccoj9eRB3o2RSuQ8+95y5jGIkVIbQSsIhhxyCP//5z7j11ltx9NFH44wzzhADIWb83I3cFhEiMhk70wTl++fZjdyObVIS6IUX1sWhnDEJQZQEU3aj8XH1f1B3oyhKQtDZbTd3o1JiEnRZNmyn+sgjwEUXxfPiC8LoqL3KpklJIGWmUPA2avW/g8LrOMqgkfahmf5yQeepZEwCGQlxz8aGWS02l7MDhYeGnEqCng6XniMeuEwzlC0t8Qw4xsZUfVAbpvOJklBdlKPuqD+KOyYhihIQR0xCXIHLXkqCn7tRKqUy/HV3mw1/MRIqQ2gjAQD22Wcf/OUvf8Huu++Ol19+GQl9pCOUhJ+RQAuYuHV63A0pjLuRSUmgF17UzieMkhD0HEFiEkyBy3FlN/JSEnjZgigJ5XQ3Ctupku8/5cQvlV/+EnjkEfdUG9xIMLmE5XL2PSiHkRCXkgCU1+WIzlPJ7Ebt7eXJbkQrjvvdP4r/oUHI8LCtJND3gF0+biTQgIYbCXFcBxksLS32Z42N5TESREmIDs9uFxdR3XRMZDLRXQlphn6q3Y1MMQmZjOqnm5rCuxuRsTNvnvqe3KUBURIqTejR/dKlS3HIIYfgpJNOwvj4OG6//XbstddeOOSQQ3AI15eEyJRqJJCrEQ2G9RSoQPDA5VKVhCAPdlglgZfdS0nwikkIoiT4pUClv7nPa6kxCZUMXKbrjctIWL3awhNPuBsJY2NqATnA7G6UzztVIB23Qf6GDcDq1f7lKzUmIUhbiQNdSZhqI4FcauJWEshVIoi7EX1vUhLoWHw7NyOhpkZ9FseAlp4TbiSYAi95+UpVEqp1oDQdjIRqdjdqbFR/R4lJIDWOlyvM/lQGzs9/rhIFuLU3k5JAz+b++wNvvGFeJDOIkgAAmzfb34mRUFlCxyScdNJJZSiGwCnVSOjpUYPPrq5iJcEr3sHL3WgqlIQ43Y3IMColu1FQI6GU7EbUuROVjEmg66XOvlQGBoCmJrOjfqGgXjQ0wOLuRo2NtgsK3Q/TvXBTElavBu69FzjmGO/yBb1XblRKSZjqwVgmY2cgKkdMQph0t6aYBDoWVzpMgctcfYjD2KHnhLsb8WxKHK4keK3vop6Z4n6hHLPhcaKrqNXEdDESenvDlzGft99pvFxh9qcycH77W1WeBx8ELrnEaQgD5pgEejYPPBB49FHg9deB3XazyxUku1Fnp3ouuJFQ7Qbyjk5oI2HlypXlKIfA8IsbeO019beXkdDerl6Q5CdfqrsRbf/YY+r3YYd5X0MY679cSoJbCtSg2Y3CuhuFiUnwczeKoiS4uR0FJU4lgYI658xxX48in/eOSYjqbpTPmwdqXvuXEpMA+BsJo6PA2WcDl15qvzjDnqdSSgIZCePj8bsb0SyoXz+hKwmU3Uh/XryUhJERewAex4DD5G7kFpPAA5cLBdVvmZYUOucc4MwzgWOPdX4+HdyNqnUQx/tnN3p7lVtd0GezmpQEHpMQZX+guP/KZoGjjlLZxB59tLg9mpQEMhL231/9XrdO1SfFbLktpkYxReQ21dkpSkI1ESmYoK+vDzfddBMuuOAC9E6kHXn88cexYcOGWAs3U/EayG/dasvZXu5GnZ22W00UI8FNSbj3XuCee/yvIYqSEHQ2NoiRQJ2n22JqcSkJXD0IoyT4uRtFjUkg322/85uI00gg/1S3OqSXjJu7ka4keClfQLHhlsn41+FUxiT096ufLVvCn4fKViklgQL+yxG4HFRJ4EZCLqfaTxB3o8ZG1Ufk895rK0RhcFC1VT7Yd3M34koCYO63MhmVapr7Y+v7V+tAKZ+vfiXBq+5uvhm49trwx9Tv4+BgsAkKDhmMllU97ka5HLDXXmrlcD2+ADDHJJCR0Nmpfmg4yJ9Jk5JA35OhM3++GAnVRGgj4cknn8Ree+2Fr3/96/jmN7+Jvol8br/85S9xwQUXxF2+GYmXdEiuRvX13kpCFCOBS+Bugcvj48Fm/PnA2W/VZj7TE2SF56CBy5TdiEv1QbMbJZP+Ky4DzsXUwsQklCu7UdDzm6AOPw4jgWZZ02mzkkD3zRS4zDPeeCkJbtdKn/vN8vH9yx2TQGUp5TyVVhLiDlymAU6YmIRMxk4hqrsb8d/c3QhQ9T8yYruyxeVu1NLiNPQpcFnvx3I5tV1Dg/rfNJDkQdk61a4k6H1PNeGnJORywNq14VwG3ZSEq64CbropXPnSafVsRzFe9cDlsLGDbhN09GwuXmw2EryUhOZm9dxxdRhwdzfSn9l588zuRmHq5i9/AV54Ifj2gjuhjYQVK1bgIx/5CF566SXUsymUd77znfizacUjITReD/xrr6kXUVeXe6fX26tWR+VGQpAUqCT/A+6By2GNBMB/4J/Pq0EIEOzlzd0vogQuk5FgKhdtSzOQbsfmf5eiJMS9TkIpfvZ07XEYCXQMNyOBXjK6uxHJ0rqSYGoXXu5GgL+RMJVKArWlKINTKlulUqCSkVCuwOUwSgJgDyC8lAS+TgKg2gJ3UYqjDgcGin21uTuRXv5k0mm06JBx4KVEVOtAfCrcjf75T3uSLAx+Btbzz6s6j9Ln6vf5jTeUL34YyEjwUrjdoGeoVHcj/TroXUlGgv6u5EYCfTc0pNo3V4LpWEB4I0FPaxymfd15J3D//cG3F9wJbSQ89thj+NjHPlb0+YIFC7CZm39CZJJJNUg3DcbXrQN23dV7Vi+TsTsdmsmnB1Bf4ZbDlQQ3dyMvFxJOmMFqLmcPgMIYIF6ZQvyyG9H/OvRZU1MwJcErcDmIkhBnTMJ0UhJ0I0F3CSvF3Yj+9pP9qX6ivJz1c5ZTSaB9yHgKO1tYKjx1cNxKAi2mFsY1zGQk6O449IzToHx0VA0ESUmIKybBZCQAxXEJdK1UHtMEBD0zpnY7XQKXgyjBUbnpJuCOO8Lv52dg/f3v3t+b4EYCXXM2qxaGpOyCQeFGeNh2ScZnqYupuRm1ixerdrltm/P70VHVJ/A1bCjjGFCs4APuRgJ9z42E4WFbmaD7EqZtpdPV+6xMN0IbCXV1dRgwjCJefPFFdHZ2xlKomY5luQ8GenuBuXO9OxTu100uMEFjEnR3I3phhVUSwszS5vP2yzPIsflAPkh2Iwqc4jEJ/Dic8XF7xm8qUqDqSkKUFKhRsiuZiDO7ER3DLyahqUm1OS5NB3U38lMS/IwEqp+amqlTEqIM8PlLNu5Vj/0gX3Ou7sQF96eOqiTo64qYYhIANWjngctxxSQENRJo0iKquxEfKJVzIB4Vqv9ylm3bNruOwuBnYFEyjjADdFNcXG+vvUJ8mOecuxtFiSmIe50EamNkJADFLkejoyo5Ct93cNA2Evi1RFESAPs5j6IkjI1Vr+o23QhtJLz3ve/FpZdeivGJp8CyLKxfvx5f/OIX8f73vz/2As5UamoKxgeev1i9/Opp5s/N3chtnQQapNL2ul9hFHejIAOAsEYC+fcGyW5Ex+XuRuq8xbPcfFXmcqZA9XM3CtMh8pmyUlxo4gxcJiNhbMw7JqGhwc6cA6gym5SEMClQg8Yk0HMRVUngbdVvMSIqS6lGQtSyRoXKSzEJ5XI3CprdCAA2bVK/m5qKjWp9VpK7Gw0OxpsC1c3dCDAbCcmkrZia2iY9M6bsSLy81Tj44XFZ5aK311w3fni5G/X0KBfeXXct3UiggPNCwbmgqR+lxCTEZSTw/pX3N52d5sXRRkfVKuxUfsCpJPC+Qp/kCGsk6CphEGg1dKF0QhsJ3/rWtzA0NISuri6Mjo7i6KOPxh577IGWlhZ89atfLUcZZyRuaTppRsqrQ9GNBD74J3k/aOAyPyb9DmskBHElCONuRIP9ujr3gSCpJzy+g9eL27lom9ra4ClQSwlcjsPdyC0mIax0XQ4jwS3rCc2kNjQ4DTJSe2jGKaiSYLruIO5GZEiWqiT4tdtSYhL4wHeqlQSq/3IpCWGzGwFq8GBZtusQ4B6TQJMPGzeqdr3zzvG6G/E1EgBvd6NksvTAZaA6s7x4DeTWr1eBpKUwOmoHn0ctm6mNUXDr0qXRXDwB+x3Es1KFyWJG7sGlGAm0tlEcSgIftFsWsGhRfEaCl7sRvZebm9VPVCWBYoKq0ZiejoReJ2HWrFn405/+hL/85S948sknMTQ0hEMOOQTLly8vR/lmLDU1Bc/gYq8Ohfve0+wyH/RzP3392LqSwI8JBM+VTjPC+sDZRFh3Izp2fb23kkDZjei4ekyCSUmgbbyMhKApUKO4G7kZCdks8H//Bxx6qPux4nI3GhhwX+wpKNxlKZ22A9OJ0VH7XnAlgeof8I9JKFVJ4IPUUgbvQHAlodSYhEoqCdUUuNzY6FzPRR9I6ErCk0+q33vuqXzQp9rdiAZzZGx5GQnTWUkwle1PfwIefhh485ujH38i03rsSgK17+bmcPVqUhG7u+3F9ExpbN2g/jGskcDdgoDogc+AWUmg4+62G/D4487zjowUuxsNDQELFxaXxc9I0J9ZAJg9W6UDBvxjSnTIe0KUhHgIbSQQb37zm/HmUp56wRM3JcFv9q1QcAYa0qJVQYwEU+AywY2EIA9fLqc6viBGQi4XXUlw81Hlgcu0j+5uFJeSwF0d/Nx90mn1EqHtgioJjz0GfO1rwI9+ZHfO+nl4WdzO70UmowY9g4Puiz0FhRsJY2PFg6mxMXsAx5UEMgCpHUcxEsJkNyK1qRQloa6uvEoCn9mrtJFQrsDlIBMJRH+/issC/FOg1tWpZ+ypp9SaHJ2d8VxHLqdm/HUlgdq0m5FgWc5VoDlBYhKA6hz86O5enLGx0lckL8VI8CobfUYrioc5pmWpfoorCfPmqUkWLyVh40bVbmjWPaq7kd7Wo/QNXkoCTdYsXgz87nd2gHUmo67bZCTwmAS93oMGLuvXElZJoPtRjcb0dCTSYmqrVq3Cu9/9buy+++7Yfffd8e53vxv3S76pWPFyN/KafTMFOYZREuJyN8rn7cF4EHejsDEJZCQESYFKxy3ObuQek8Bnt03H5n+HyW70i18AF1/sdAHjuAUu08yU6SXppmREMRI6OtTfpbocDQzYs6qmwfroqH3PTUoCuYR4uRvFkd3IL77HC9qnoWFqshtxdXCq4O5G5YhJoAmPoDEJNJCgRcncUqDSM06D8u3bgT32sJNClHodNKDXjV9KeqAP9HkfzFeB5tgZwYrLV+3uRl5Kwuho6UYCzSoHff9wvJQEGuyHHaBns8X9G61P1NXlneHoiiuAu+9Wf5NrTBgj4fLLgV/9Kh4jgWc30hfhpPba2WkHZAP2O4jcjej6h4bs50HPKkjlCxK4rF+L7sr2xz+qHzdKmZARigltJHzve9/DCSecgJaWFpx33nk477zz0Nraine+8524/vrry1HGGUkq5R647KUk0IPJFw0LoyQEcTcKkuqOlAT622/bsEoCBQG6zRbz7Ea83FxJcJtZIiMh7DoJumpiuu7+frUYlH5PCLfAZUpB55UekQxCUzmDEKeRMDhoH8tUj6OjTiVhfNxWD+hlwt2NTPeqVCWBx61EGXhT/ERdXXAjIY7sRpVQEshIiDO7DvenDupuRCt08xlL/r0+wAHsdrbnnvY+pQ60aUCvGwmA7XLCoWul8rgpCXpWOb6/6e9qwctIiENJ4Ck4w6gJfLFLU9nCuLxxxseLV8/u6VEGQleXt5JA8RWA/S4NYySsX6/UiDiVBMoASGWi4wG2MdDfb5eff04GRlQlwWQk8P11JeHhh4H77nO/Jrof1ficTEdCGwlf+9rX8O1vfxs//elPce655+Lcc8/FHXfcgW9/+9v42te+Vo4yzkjcVgX2C1w2DSi4QkDHDhu4TJ0ZnZPv/8wzwJlnOl8EYYyEqDEJYZUEnrmIrkmHb1OOdRIyGfWC0O8JYVnqR68zLyMhrpiEdFotwgeUngZ1cFDNQNFxdUzuRnwWWE+BahpkuNV1GCWh1JiEZNLbNY2IIwUquRtVQkkgdyMgvvNHiUkg9x4ajLgpCXzAYTISSr0Gej50dyM6n9s6CYDZiADUIIsMa12JqPaYBC+/8dHRYBNLXpCSAIQzEvzqjZ7hKK4+1AbHxtS1dXcHUxL4O4P6hTCLqWUyzthAaldR+gbeb+qDa3qGyK2IVjqntsvdjShQOErgsq7+Ac7xj24s5HLKUHJrT6VMyAjFhDYS+vr6cMIJJxR9ftxxx6GfTE2hZFIp78Bltw5Fn/kL625kUhLIHYTvw//eskVJkSRHAuq8Qd2NosYk1Nf7L6ZGsz0UjMuzG7mlQA1igPC/wygJ3EgwKQmA+YVFRoLpet3cjfR69xv4ZzL2wD4OJaGzU/XipjKPjdn3nAbZJreaKIuphc1uFNWNhge5+wUul5rdiPzZp1pJ0N2NqDxxwFXRoO5GNHtJz7VfTAJgGwl77GF/V+pAm54PGhRxmprM7kZBlASKtTAZGaa/qwU/dyOgNDWht9eeSApjJPjFcpDCk0yGU8myWWdMwciI6tM6O9U93LbN/Tnhii83EoK2S91IiENJ4GXRj9vSovoeMtTofpKqR+mFgdKyG+lKgltMQjaryupmiImSEC+R1kn41a9+VfT53XffjXe/+92xFEpwH8j7vVj1gRa5cfAHMKyS0NLibSTQOflsT1glIWrgstvgjOpp9mz1P6VT4zEJXoHLYZSEoIN0wJ4xz2Tcswd5GQmmwUWQmISXXwbOOMOWjHUKBVWm1lZ17aUYCYWC093IzbCh+6AHuAeNSYgzu1GUFwo3EvzabakxCVRXlQxcjrLQnxd8gBakjwCCuxvx/q6+Xilk1BfEYWjRc0h+6ZzGRvfAZcA7JqGrS/29IykJ1PZLNRJ23ln9HaeSwF3egOBuaNmseiZqatT10YCVlASvtRK4kkB1QkZCkPOn08XKK/0OO3tuMhJ0d6NEQr0XdHejhgb7HUwxOlGMBFN2I66K6EYCfb5+vfmaSu1r/SaXZhqhsxvtt99++OpXv4rVq1fjyCOPBAD87W9/w1//+ld89rOfxXXXXTe57bnnnhtfSWcYXkqCV0YQriTQy5dL3fSdX+AyH8C2tDgzzfDzAPbDyP1G8/lwMQlhA5cpQNDP3SiVUrOPJiPBrf5qarz9zCkomzJH8RkOeunoA3aCjjk6GlxJKBRKNxL6+lT5+vvtgZZ+jEJB3bPW1nBGwvAwcPbZKvvSokXqJV4oeMck0D0E1P3QlQSqG+rwqZ55nfnFJAR1N3IbeF9/vWpj/+//mfcPEr9ClPLi4gaVXta//AUYGqqBQdyNBV2ZBOIzUmh2PUxMAikJYdyN5s+3Z+jpu1JjErgblo7JnYi33fr6YmOdfLppISl9IFztRkIQJYHa0j33AIcdZhtEQejtVe5iL78cXUkIYiRwY84LPS6OEkt0djpTotL95Li5GwUxXmkyx01JCNs2qG/JZu02bRq0t7cXuxs1NgYzEvQxSdDsRjzjHS8X/X7tNdWOdErJbvTznwNr1wLf+Eb4fXdUQhsJN998M9rb2/Hss8/i2Wefnfy8ra0NN9988+T/lmWJkVACalageKrZz0VCVxLCxiSY3I1MRoIefwC4uxsFmSWkl23YmAQ+MNePSefv6HAaCXacgvs6CX4rLvP0svognRbnclMSAPWiC2okDA/b+4VxNzL97TZwppdVba2632GMhL4+NQu6ZYsyEmjfOXNUOzKVOZt1Zjfq77fvPSkJennHx23FCbAHXvwe8GsNkgLVLbtRdzfwhz8AhxxifzYy4pw5niolgVzggOK28bvfWUgkastmJJQzJoHUxjAxCWTghnE3+vSnnW4kcbgbpdPqOTepgY2Nzr6QyuWlJFBaZHL3MykJlHKzHEbCgw+qc7z97eH35XXrlgIVsANcf/ADdQ3vfW/wc5RbSXBLGOF13Pp6e6Kqp0c9o+3t9r1yC17m/TTvd4O0S+5+SdvymIQo2Y0aGuy013RtgPMZmjXLNhJGRtT11dXZRoIeyO+mJJji7UzPLPXJPPA8qJJQimvnpk3Fz+5MJ7SRsE5fek8oCzU1BePspJ+LhD7zRw9aKe5Gzc2qo/dTEvjDxQfpQQYA3D3KDx6TAKhOQZf9ucEzZ45ZSXCL6Whu9l8noaZGvdi5MUAGC0nQ9N0PfwicfLLqQLmR4OZupEuyXKEJoyTwY9C1uhkJfDAYVknggwDAGdTpNsvOlQQaZOvuRvzYgNlIoBmnKEoCPUumGbjf/tY5IBscVO5a3/wmsPvu9jWQkWDKbc8pJXCZDzD1gcDgINDUVMKqdz6YlIRyuBuFjUlwUxJMs6CUDICIw0ignPEm/NyNTEoDzcTOnq3qWW9PuZw9a10OI+Evf1H3OoqR4OdiyQNJqU/kg+T16+1nysTYmKqvuXNV3ZQrJkHf3gtdSaCgZVrAs6nJvQ/1UhL8zs/dL01KQpSYBDIS9Jl7Hkjc1uZUs+vr7fTCY2N2e+XGOx0nagpUUrcJ/p4F/I2EKM/J4KCkTtWJtE6CUH681kkIkt2IGwmmwGWvzEmA/VKtq7N9xt2MBDclIYi7Ec0UUCaisDEJgHnGmF8LVxKcbhPe6yTQojGmY9MxdCWBu1Dk88ov9de/Bp57Tm0TRUmgzjmV8lYS3GbU+d9us+vc97y1NVx2I+qUdSOhpQWorS34xiTQfeczWG5GAocbolFiEtyyG42O2nm46VhDQ2ob7mfMjYSg2Y1KjUnQ28bAQHmzeGQydh3RPYnT3SjoYmphlQSv1cLjMhK4wcqJEpPA3TWamoq/Jx94Olbc8EFnWEzPHj8utZdMpthY/vOfgS99yTtgmGLdZs82160X5YxJ4MkzNm50uhaZgtf5OfWYhKBKAs/2pg+uo8Ta5PP2BJtb4DKgjASuJNA+pCRs3676e6pHPsYgJZRWSHdzN+JGCVfqAbUvVxKSSeD1183tphTVdmCg9HS9OxpiJFQpNTXmmAQ+8+GlJOjuRlEXU6uvtx/4MEoCdzfy6njpIU8mgxsJ3N0IMM9U60YCdRw0S21Z7koCDfz4tenn59empyDl90eXlem3l5HgpiTMn18+JYHPaNGqy0FxUxJaWoC6OrMixpUEcu3SfVfp2JSdRm8bhYJ5dpuuO6i7ka4k/PnPat+DDy4efPJr4fErpbobPfigu8zNjQT+8iU/9nLOfPEZ87iVhDApUOmednWpZ5fiXfTBHc8E5UaljASvxdS4kdDY6K4kAKXHU5jQ+/cwmPoZgj+D3Ejghjwf8Jqg/i+KkeA2acI/i6Ik0DuABskbNwI77WR/72Uk6O8MIHh6Y25keSkJq1cr15kg10H9q5e7ETcS+Bo3dP20kBzBJzm5u2TYwGWuanC1cOFC1W5MLl2lKgliJDgRI6FKiaok6AMtWqAq6GJqeuByQ4NdlrAxCTS48Hqp0XekJAR5QMfHbakXCGYkEDSjoTpUbyUBMJdHVxJMgcvUGVKHq8+gjY4Gz260bZua3W9t9TcS3Gb1/GbXearLID72HJOSUFtLPqv+SoKXu9HoqD1rbFIS+H3gn9O+XnDXPT642bBBGWRdXcVGAr8WGpDW1AQPXHar1+uuU8aJCV1JoLKOjKhyZTLldTcig9ikJGzapGb0osDrP6i70YIFwC23qNgXoDjjEp+xdyOumAQvd6PR0WJXCW4k6ANjXUkwBS57TVyUCs8uFhYvdyP+DHIjQfdX9+r3SUlobw9vJJgUbw71Q2GNBHoHkZKwebPTSGhutu+p6Zy6e1xQRc3L3YhPINxwA/DQQ/7XQTEJgL+SQBMS3EjgMRncSODPGO9DwqZApW1rapzv2cWL1d8ml6NSlITBQTsjpKAQI6FKcXMJ8lMSdHcjQDX6qOsklKIkBJHHeYdEbk1+BFES+MydbiTQb7fA7yBGAlcS9Jl8fn+onsIoCSYjYc4c93Uh6Jy6ksD/5saJCZ6KL6xvq64kDAzYPuNuaWr12XGe3Uh3NyJp22QkmAIO6brDrJOg13d7u3Pw6mYkUDv0M6q83I3IkHcbVPC64mWl7U0B+HFhMhJ4Xd12mwpEjUIYJYH3E/x51u+/rpqamIqYhELB2f54W6UBFv9+cFD1uU1NZiUhm7X7u3K4G2Wz0Y2PoErC+HjxQFTPgGOit1dde2NjdCXBTTnmhqp+LV5wd6MNG1R7CKIk0FoMJiMhbEyCPgPPJxDS6WCpPHM5O7bPLyYBUAkm3JQEnq1KD1z2MhJM56P9TUpCLqfORXWvE1VJyOdVn1qu5ADTFTESqhS/FKhB3Y2A4pz8QbIb8Vkvk5JgMhKGh+0HNGjgMu8kSwlcNh2XBy4TVCbKQKTD10mg/3X4LDg3EqhTo1kh/p2eKzxMClQyEtzyq5P0zY0E/Rh+A2fuGxs237ZuAA0PcyPB391IX6xPdzfyUhJMzwJly0qnvV/6bkpCb69ybeDHNbkb8ZgELyUhl1PbNjR4ZyTTjYTHHwceeMBdSaDAyKl2N+Ln6+vzD9p2gz8rQY0EXX0zKQl8sGGCjD/TbGHQBbXSaW93I8A5mOUKB/VbfAA9NKT2owUgTe5K5TQSeOxAWLxcenh/Q/n9AftctL2XkjA4aC/oZTKgvKDz1NZ6uxuFXQOET1S98Yb6bP58+3svIwEwGwlBJmeon9EnVQCnezHN+Ae5Dpqg83M3AtTzrhsJPHCb0FOg8v7LZCToyQVoMsSkJJCCTIqcTlQlYXjYvj/ljPOabkQ2EkZGRvD888/jySefdPwI8eA32+8WpGTKRkLBh4TbINDN3UgPLOXnAZwdK6kJUZSEMIHL3N3INLuuZzcinEqCu7uRnyuTyd3IpCTwmR3KcQ14ZzfSO9LeXltJcDMS6uqcRoJuBFE5/NyNaIGgMB2sbiTwOAI3I4EP5khJ4G2B7t3oqLeSwA0yfmwyLLwG77S/riRQfXMjwRTnwA1Kr0EO7dPcbG7fbkbCgw8Cd97pHGDyslLsx1QrCbyuBwfDzexy/FRR07b6M6OXKai7EW3LyeeBD39YGWd++CkJgLuRQN/zZ3loyE4f6aYkBHHfjEq5Apf1FMb6QJSeB6/nhxtkpqBuztatzrqj8lD/qEP9UFgjgQa+9fV2P8LX4nAzEvT+RHc38ru3QbIbeaXLNpWH3qW6kuBmJAwOOgOXe3vt1aYJmvknldRPSdCfWRrfuCkJpACb3lNRlQSejUriEmxCGwk9PT1497vfjZaWFuy///5YunSp40eIh1SqUPQA0CwXvVhNHQrPFFCKuxEPXKaH0UtJoBcYNxLCKAlRApf9XILoGihjD+A0EkznCqIkuLkbmWISuLtRLmfPVIyNeQcuuykJbu5GupJQWxsu4w/P1x1WSdDdjcbGnGsgjI2Z16PQlQRT283nvZUEU8YMnrHDa0DB3V3clATdd5obHXw20W+QA6jr8FISTAPDTZvUNVB74y9G20hwP3ep+CkJg4PRVyjl9e83g+82+DctphbUSND7z0xGuVO4pVbkeMUkmBROXi4yoLkRMTRkq2+mAWa5lYS43I30svkFLtNvrzbMg8QbGryN0iuvBO66y/6frsnLSODujUENMN3lldKzEm5Ggm4chFUSvNyNaH+q4yDPJT2D3C3U5P5DWcU2blQL2u29t/q/rs7OHKgbCYA9bvAKXObvAr4/VxL45Aht71Zf1Oa4W1cQeLIOURJsQhsJn/nMZ9DX14c1a9agoaEB9913H2677Tbsueee+M1vflOOMs5I+ECNOht6SPzcjWhWwk1JiBK4rBsJfFCUzdodBAWZcSXBz+WDrimokUCdjle2Fd03mfyYnVlizEoC7/xNgz/d3ShodiN9VjuIu1E2qwYufu5G9BLk8qxJSQjqblSqkkADJa/AZd31i8rG3Y0AdyWB1CLdqMrn7QGX12waubvwF9DoqNqHjIQgMQmkJLgNcqlempu91T9dSchm1TFfe83sd0wzX+VWEug51mfgC4XSlQS6f/y4JtxiDchNgQ86g8QkmM5H90FfDdmEV3Yj0+QFL5dbTAK1WZPffdjA5e5u/23045fT3ciyvAOXvRQ/riT4uRtt316s4AD2wpumsvOYhKAGmO7yyuMRAGUkmGKMvJSEMDEJ/H2sq4xhjAS6fpORoI8ZmppUcoVcDjj0UPV5XZ3d77kZCX5KAlfm+f5cLeHuRlxJMI0XdJfQ0VHgppv82zc3EkRJsAltJDzwwAO4+uqrsWzZMiQSCey666740Ic+hKuuugpXXHFFOco4I6GYhCeeUIs4jY05Zw78Am9pOyCckqAbCRS4zH3G9UDNXE7NNNTWqllvsuCDuBvp2Y3CKAmmbCv8uH5GQhAlIUzgsl92I/1YQbIbkZ9ka6u3uxFXEiyrWGnig2ATFLdCg16/DvWFF+y1H3QlgRbbAdzdjSg7CGC3k3/+Uw2UWlvNRoJef3wm2s3dyMtIMLnukRKmxyTQ8U0xCTSAcasz7m4UJiaBPt+40RxwP1VKglt2o7Ex9ffYWLRsIGFmcb0UAt2Y81MSqF/Q7wX9T6kevfByNzIZCX6By8PDdpstNQXq1q3Af/4n8NJL/tdBlFNJoFiCTKY4JiFI4LLubuRllNLK1UQQJYG7GwWdedYnk3g8ApWTp3UmvJSEIEYC73/ob24kcJeuIO5G1C75Wi+mmARAuRw9/7zKMEZrQtD1p1Iq2QPB+4ogSoJu2PvFJNB4wU1JoPdPLqeUj7vv9k8JK+5GZkIbCcPDw+iaCGNvb29HT08PAODAAw/E40GcOYVA1NSoF+/zz6sGyzs/r7SB/IEMqyTwGXI9cJk/7HqKTBoszZmjBln8wabjuqHHJAR5OOl8XkaCPqNIRgKVSbmIOEfp3H8yaApUrhZQp8YHrnxApdd5ECOBB6J7ZTeiGR0afOsvnCAxCbW19oqh3DXKxC9/Cdxxh/pbVxLS6eLsF6Yyc4MNUIbH4sW2CxFBgyf9PpNBZHI3on2CuBtxJYHnZDcFLusxCX5ub3yfsDEJ9DlfD4KXibbnalbc8JgEXbnjM29e9bxuHfDMM8XtiT8r9L8bXoN/riQFMRJMaXOBcEqCV+ByFCWBKzZNTc5JIcCpJPgNJClDS5A8+fz8Ud2YvJQEyk5GE0u6kkDbe/X73CAjlcWtb3IzEtwCl8l1JaySQO3MTUkgVUg3aHTjgPowmtgJYyRQ+9GVBOpvgih8bkqCKf6H4hKWLbM/o2dgzpzi5ChAMCWBvwsImrjh7ka8zsiTwC0mgb8z+HoNXoi7kZnQRsLee++NF154AQBw8MEH47//+7+xYcMG3HDDDZivm9NCZFIp1QuuW6f+54NRkujJHYHDH8iwMQncwHBzN6KZZt1ISCbVwKq3t9inMaiSEDQ/P53PXu/AfFx+zRS8TGUy+ZFzadNr4MfdJGiAxgOtSEnI5ZxKAvf7B7xnRvXBaSqlXpB6ADn5cvNOmQwo08vbS0nQfc+97kU2a892mpQEenm4uRtxP1Qq+4svArvtZtcB4bWYmsndKKiSwF0NqE756q5+RkIQgxIIHpNAgzv9c8CsJPCZr3K91Hi70I3yoEbC97+vVtX97GedbjBhXD38lIQwRkJc7kZRlQR6Pnmd8efBFPgcxkig66C2HISwSkJ3N/DBD6pz+AUu19fb2XN0l5YgAzge/9HYqPZ1M7b5wJKfx01J4Goi/R8EevapnzO5GwHFhr/J3YjeU2HcjQC7LyolcNmkJLg9QyYjgYwk7mrEy0T3yktJMJ3PLQUqpSf1C1ymZ4i3lTDuRmIk2IQ2Es477zxsmpiiWLlyJe69917ssssuuO666/C1r30t9gLOVOih+uc/1W8+W0gPCFBsJJiUBKDYSDDlAqYBJt+e3I0KBdXpmBbbIsu+vd2pJATJXMINn6BZdfjMg1tHwbMbAcC++6oBKHVG9fWFooBanhkqSFA0T3NKM1VB3I0oiNpNSeAdKVda3AIiAWd5TS44fkoCfxFzg8ONfN4exPC0fHQOGtjX1gZbTI32o0VydCPBsrxToEZVEvSYhN5e9YKpry+eoebXCtgDu6BGgp+SwF/wgHNb3t75TD61oXK91IIqCV6zlv39wNKlatE1vsATDVCCxCT4KQl80BXUSCiXu5HJVZGX37KK44t4uantlmokBLkOvk9YI2FwsNhI0I9BRgJNLLkpCV4xCTz+w2RA8XPxY/LzeMUkhM1uRINVv5gEoNhtzORuFKeRENbdiNolVxJMgcSAcimuqwP239/+jO6LbiTwiaYgSoLJSOCuvDQG0cdApn5vbMxWcriS4Ne++fo+4m5kk/LfxMmHPvShyb8PPfRQvPbaa3j++eexyy67oIOvciOURE2NGv1T5gDun6fPvvHBsElJoH3sY6vf3C+c/qfv9BSogJ1lRXcLonO2t6vMIHxg69fxBXnodfS8y0GUhAMPBK691v6/vh7Yts1sJJBawj/Tj80NAYq/GB11uvt4GQlbtwZzN+IzKfRC4qsQ804UsF3LwioJ3N0hiJKQz9vH8gtcpvSvdL1koOpGAmAbCbztUlrWMClQg2Y3oiBpuk/btikVATAHLrutkwD4uxu1tNgvOt42+XUNDTljHMgIdotJaG9XfUS5XmomJSGsu9HgILB8uXoJb9lifx5GSXALXKZyhVES3AaEXEng7dWEl7sRDTrd3I2AYiPBpCToqTzJxSJuJYHP0Ppdt34OfUCpDwBpwoDSP0dZTE0PXAZU3dDMNkGGg5uSYDIsorgbcZ/9JUtU2lzy0SfcjARdSeDtNay7kW4k0P5RA5dJ9TC5/wDAO98JHHSQ/a4B/I0Emsmn94FbTILJ3QiwnyHdaPDKBsXX1uFqfhAlYc4cVQ+iJNiEVhJ0Ghsbccghh6CjowPdYVMqCK7oDw13N/Lq1PQBNOFmJHC4gVFbCxxxBLDXXvbxRkZsI8GkJNAS7bycfrmfdSUhaOCyLrHqeA0qAHNMAlcSyDffazVnXUkA1PbcBcZLSQjiPsFfSCZfZv4SBGwlQXfBoeN4uRvxIDS+j4l83n4BehsJTmOJl1l3N0omgYUL1d96ew1jJNDgX6Vfdb8Guo+6ksCNBC93IzKqgxoJNMBxm8EGnIOKbNauDz4Q4O5G5EZXTiXBLQVqECWhULDXAJg712kk8PsHxKMkuM2CcvxiEjIZ/1lYrxSogNN9g86lq2P6c0zf0z3lr1MaSOnPtQk6b1Ajga47TMpI7poSREmg+nDLbuSXQpi7GwHeSoJeHnJLdXM3Cmsk8PdESwtw8snFhlUUJSFMClTA3d2I17Hf8UxKgtuztuuuwFFHOT9zczdyy26UTBanO9YNaKBYjaM4Ob/kLYWC090obEwCPXuiJNiENhIuuugi4+c/+clPsD/XoYSS4NY64K0kcPgDyY9hCirSHxo9JuErX1EdA33GlQRT4DJ1NLox4/Xi4Q99mMXU+DVGNxKKj0vHBNxjJHQ3F1ISgOBKAhBMSaD9UynbSOADGJOSYFJw+CDXFPSXThe3Gz8jge41j0mglwJXEvQy82vi51u4sDiTDmArCabsRm6qSSLhng3KtD+VKYyREEZJqK11thEOr2fuw5zN2jEaXB3kM/mzZxeMx/RjdNReKdYLnt1ITzc6MODsG0xQdi6TkUCDkVIDl+OKSeD3wctVh2bFwxgJerlMRgLV5Zw5qr4oHo3vH2S2OaySYDLg/aBz8Mkr0/6kJLgZCbS9X+CyriSY2pubuxGphaZr4+6hQDAjSZ/kMNHYqJ6VsDEJfuen/h1Q18tXKqZ3oR7cPDKiUpeacMtu5PcMEX5KAo9lBMz1bFIu3JQE/u4wGQkUk0JuQ2FiEvikixgJNqGNhFtvvRXnnXfe5P/d3d046aSTcN555+Hb3/52rIWbyVDgMhHUSOAuQ6UoCRyTu5GuJPCOhqsD5YhJ4J1YUHcjHbWcvLuSQL/dApdN7kaA6qD5TL7JSKCFaYK6T9Bn3N2Il4WuB3AqCaYZPl4m/dp1JcHP3YjKQjN96bQ9iLYXU1PtOJ22s63oL1mqOxoQ8+8AbyXBLbsRKS9+KVBpRopcLvyMhCjuRum0vSgh7cfxMhLmzFFGpe5el82qlz+VNexL7Q9/AL78Zf/teH/Cz09lpcGBm5FAagMZCT09xfEDQWZx/YyEMDEJbilQefvyCl7mqaDdiGIk8JiF3Xaz49GorKaEBCa4wUvXsmGDc5uxMeAnPynuD4LGJfDBvv7scUZHnUaCvqpv2MBltxl6wN3dyG3WmcofNC6G7wOYXXIISvvqpiRwYyFMTEI67VwDhrcpejZ1I+GRR4BvfMM9M56uJAR5hoi5c4GuLmDRIufnbkqCm5FgikkAnEoCdzdyu6cm1TZM4DKlcRV3I5vQRsL//u//4t5778WZZ56JH//4x9h3331RKBTw9NNPO+IVhNLQYwPc3I1MAw6/mAS3QaDJN5BvT+5G+gtQVxLCBC7r20YJXHabIfIzEtJpbyPBz5XJ5G6kD9KjBi57KQkmI8FPSeDXYXpZ8BdxEHcjOvbIiDpea6s6N72oyUig32vXAh/9qDIUdMWGflM8AhDMSODZjfSXTiLhbySYfOJ1I4H7awPmFZfDGglhlIRUCvjUp5RPP2AfgzIbRXU3GhlRx/Bb30CfMefP28CAeqmmUu7uRrqRkM06V2UPmlnGz90oDiUhqJFA9zmskRA0JgEoNhLCKAl03oEBte2PfgR861vObZ59FvjZz9QaHLoqHASuJAR1N4ojcNm0WjU/F1BcHi/jKoyaxY8JmCfUOKZVl/0Cl4O4G/HMbbzN6NmNaBtqy25pzymzIFcSvAwgzpw5wM032/0QwccnplhHPyMhSEyC6Z3AM8nRscPEJMyaFTw2cqYQ2kjYdddd8ec//xn/+Mc/cOaZZ+LrX/867r77bszTI3eEkiAlgbIm8OxGXi/WoNmNaFu3fZ1lUb/9lARKM8cXeQlqJOi+4V7b87zxQbMb6dTXFw/qwhgJ3BAwGQl03dxISKdVJ0kzQWGVBC93I+7KYsr4wzt+06wvHwx6BW3zOgDUyzqdtg0fGrzy7EYAsHq1+n9oyBlnAaiO+YAD7FU8+Xd0bSaVyeRuRH7VpLwEcTei6x0YUNdCLzw+68V93nmwJTcS3AY6Y2Pq2XBz49IDlwm6Z//yL8Auu6jP6B7yVK36MYJA1+G3n0lJ4O5OLS3uK4HTNoBtJADOZAxBZ3G9ZjfDuhu5xSQEdTfiq5O7YYpJ8DIS8nln37t4sXLNokEmH+z6DWR5jEF/v1qxWzd67NW6oxkJfEBJdc9d0Qg/dyP+LJkgH3OuctbWhstu5PUeihKToPdfbjQ3+wcuR8lu5KYkpFKqvni7Gh21n0GvTH1BYhLCwPs6P3cjk3sTbU9lIiXBLyaBZ5Lj56e/3aBJvJaW4md3phMpcHnevHn485//jCOOOAJ33nknRoOE0QuhoIds113Vb11JcJvtrYS7EXUC1JFTB87dbtzQ1RG/l5TeQbtZ/X7uRirI2nLMpPLsRvTbVB6afaFrc3M34kpCNqvqr7bWHkC7lY8bS1xJoMXOTEqCScnQfYWp4wxqJPjFJAC2kUAuVDQY0WMSnnlG/T8+bpeLxyRccYUdpAsUGwmm+BBT4DLdT4pJ8ErNqQ8QJtaFnJSc+cCB1yUf6PDAZbeBDgVy+7kbNTebjQQOlSkOIwHwz4DCA5eB4uxKra32AlcmaIDS3GwbCd3dTmMuqLuR2/OipwwuVUmor/dWEvT1TkyQ+x3hF7iczTqvj1zv1q2zJ0aC9pG8LWzfrjLO6YNVMhIojogIGpNgClym4FIOT4EaJXA5m1XXzuvabYFGk5JAap/bAJwbEfq+bgRxNwLUbLYek+CnJFBQ7wsvmJ8pvlCYyUgA1Dn5O5vutZfrbNxGAn/G+JgkaEyCrroGjUnQ3Y14TIJXH0n9VGtr8NjImUJoI6G9vR2zZ8/GbrvthqeeegqrVq1CV1cXZs+ejdn0xhJKhpQEbiTwWXe32Tc+sAirJAR1N/JSEgDnSpB+M19hlQRd6vXKWuHnbkQrFBMmJcHr2GGUBEB13rW1dj25uRtxw4fLq5ZVPDtuUhLc3I34DJRO2MXU6L4NDqpjk5LgZiTQ4J3nY/d6EekvP5MxaDIS+ExTe7v3jDANPOl6KaiWuxvRdrqRQLNaZLBblruSQDOhfkZCW5tzUGFS9nQlIWqgHZ3Tb1VWHrgMFCsJzc3+SgItOlVbq65xyxanMRdnTIKfmyGdE3BXdDo6gikJfu5Gpj6S8ApcBoAFC1S9rVvnHBgFmW3m533lFTt4lU+IcCUhSkyCyd3ItKqxriToMQn6ZIiOqa7dYtdMMQlkBHhN+JQjJgEwuxv5KQm0zcqValV7HV1JMLkRj4zYkzZ+RgL1YbxOw7gbuRE2JkF/ZqkudCWBvw+9lISwKy5THYmSUEzopnDNNdeUoRiCTltbAR/7WAEHH2zhpz91dsZeMx/j4/YDwl9KYbMbcXQlQX8BUiegKwl8tt0NLyXhwguBf/93lZuZn4tfWykpUAHbX5wfm/vKu/lx6u5GekyAriQAqiMqRUkAiv3sg8Yk5HKqAwScg5Mnn1SGaFQlgfzL3ZUE534mJcEEb69+6ySY3LMSCTWAJgXD7Rr4IHXjRnVeCsblL209poPfF6+Vv2l7mk2lOuDQLHJra3EKVF3Zo/+fflr9LlVJ0I2E7dttJUVXyQCzkuBlJFD6U7qflOGIP/dxpEDl99/PV9yt76T7MHt2sJgELyVBz54WxEjQDeNdd1VxCfx5CWoktLSo+/N//6c+KxTUvaZ3A3dBiWIkmNyNTEqCbiTo5+FpZ02YVBu3Z83kbuSnJOgxCXEbCXrAuK54coWJT84MD6u+WYfHJIyOOstAfw8Pq2d461ZV//xe07uHoOsnI4GvaFwKbtmNTM+el5KgBy7zMZDJWKR3I89uFCQmgbtFuiUsmamENhLOPPPMcpRD0LAs4F3vsmcM+Wwmn/00zYbRd3zwortv0Lb6vl7uRum0Op7+EPkpCVFjEv7v/4CDDzYbCX4uQUHcjeiaCF1JcJP29RnsfL44u5BJSSAjgbb1MhL0wD66f6bBBeBUMvQFwgCnksD3v/JK4Pjji/1+aR83dCOBlASagdWzG+27L/Dcc86ZSz8jgerQKwUqN8h4uZJJNSPc2+u+QBS1WyrHxo3KsNBfaNxAB5xGgl/8CmBnJPF7Zrl7AlcqOPvvr+rygQfslaHpGGEwGQmbNwMf+5jKhLLXXsXPA2Dfk3zeNgD83I2o3QG2kRBkwoMTRkkIGpNgcjdKpZTB66UkBHE3cusjCb/AZUDFJbzyinNixG/dGboOGgzygSY3EvjscilGgpe7Ec0i83USaHCs929+RgKfbPAzEkoJXA5iJASZ5ADsmIT+fjVZ8S//UpzdiM+i02+aKHjxReeaM4A9qZVMqu/IrYaXZ3hY3edk0qkkeAUu8wmMuI0Ek5KgG3JuMQk8cLlQcD4LJnU5anYjbiS4pT6fqUSKSUin07jlllvwuc99Dp///Odx6623Iu2VnkCIDH+BmgKXTe5G+kud9iHCxiTwztBrnQR6afKYBD8jwaQkkL9yoeBcsIlvX6qRQC8dfXEsusYgx+ZGAq83/l02aw9Qyd2IXuBe6yTosx90vfX13oHLtOKyV0wC3z+dVgMR7lbCZ7QKBeB//ketRKzXAWAPptyUhJoaNTNL2XmCuhvx772yG+kDJ25Id3Soc7nNCpuUhK6u4vOb3I30++Llx0qBy17uRjU1zpgEN0Oqvh742teA97wHOOyw4pcpJ5Mxp4rkx+eD++eeU3WydavzmHwwTG2Tr3/g525EBiSgVqbdvNl5n4IM0LwCl+PMblRTo1yigsQklJrdiD8LpnIvXqziCaK4G9Fz19dn9zO8LcQVuMyfDd3diNoEqWiU3Yhv5xeTYHI3CmMkcCPAy0ig9QaCxCTosWtukLvR//yPMrzpfLyM/D3FB/m07fPPO49Jim9NjXtMwsiIqi9yTXULXOZxQfz9EYe7EZVLVxKipkA1xSgEcTfiMQlebZvaTmOjxCTo+BoJ2WwWO++8M3omovqeffZZ7Lnnnvjc5z6HtWvX4u9//ztWrFiBvfbaC8/rLVooGdNAxWvmQ3cZ0h9OwDvLildMAu0bNiYhqJJA18RnDHQjIai7kZ9vspeSECRwmQandG38JaYrCTSrQUoCX6LeBFdU+Iwr4K4kmJQMfUatocGeXQLsRaFeftmZZpC3j0xGpVBcu9ZZRjclob9fXSNdm2UBt9xSwNvepv4PqiTwa3YzEuge8zbG64tccWjQq0MvaK4kUHAtPz+5lNFgy2Qk+CkJXtmN6KXMjQTdjYyTSql0sp/7nL0yuOmldvvtKiDcBB2fGwkvvuj8jEv9/Nz5vHPmLaySsG2bfewwKVDjClx2i0kgY81PSQgak+AXuAyoZ5GCVfXnob1dlYnq2su3nkNGArmNUWphk5GQyRT35UFwi0ngZaN+pqHBDoylwFt9EiSTMc+YuLkbmdq7yUigd5pfXw74u8YSYdyNhobUQmZ88ouX0RSTwOOSnnrKeUzqp8nVxhSTMDSktqF3BbUf0yQLnVdXEvzievzgRoJfTILJKHEzEni/4WYk0BoVdOwgRgIZVno6WCGAkZBKpTA0NITBiZZ23nnnYdmyZVi/fj0efPBBPPjgg3jttddwyCGHOBZZE+KBy3NBlATdZYi7HumfhQ1cBryVBFN2I32wqmMyfLifq54dQu+g3VyCgqRABcxKAh+ceikJyaS9jz7bypUE7gdMMzyAt5Ggd2xUJrfAZd7J6wYMbZdMOpUIbojR4J7OT99TZ6kHO9M9JXc4biRweZyuk8rPYxKCzPjSvm7ZjfTF1HQlAShWQQjd1WBw0FtJ4CloTUqCX0yC23NHA5kgSoKJmpqCcdC0aZP7qrt0fN6WyEigwaRb2+YD1yBKAsXCAMpIKBTsNKhxxCTwPsZLcSCoTk3xXORuNDDg3m8FTYGqD775885dPt2eBzKuyGAJqiSQKkhGwj77qN/ckCs1cJnHJLi5G1Gf0dDgVBIaG4tjiNxmbk117WYUu8UkBFESgGB1y4/v186amlT56Rnkgbcmo5baB/UB8+cXxyWQEkP14aUkNDSoSRw3ly7eV+pGQqlKArk6UxvQJyt5EL3pmaX/eeAyUOxuZIpJqKtz9t16/IsJ7tYlSoKTQPZiR0cHRiZ6mIcffhiXXXYZmtn0UEtLCy699FL89a9/LU8pZzAmv2gvJUEf6JvcjUhe5Q+CyW2G4J+5LabGlYQwKVD5NXFfYTclIYi7Ec+c4obJ3YhmPMigcjNA6IWfSLgPpExKAmV6oc7IK7uR7j5B27oFLrtlV+LXlko5B3T6S9SZTFIAAIsLSURBVIOOQZmU6KWu1xM/rylwWTcS6FrpXun+/G7wGS7TINy0mBpvT21t6rebkaArCYBTSeCD11zOvo9jY2bVqZQUqLqRENSlgbYxzXz193unlgTsZzWbtRfvos9MMQl0D2mQSYHLXkoCNxIoGxOpO3FkNyqHu5HJ1ZEIaiTQs0NKAS8XH/S4ud/pRkKYmATKJAXYRgK1rUIh3pgEPlHBy8bdjcjFiCZN9EmQSsckAMHqFjA/Fya4gkbn8lISuBIAAIcfDrz0krPv5e5GfB/Avg7ubkQZ22hfvTy0H39/xBGTQGVzMxJMGaj0fXmZ9QkWejeYlATdtTOouxH176IkOAlkJCxduhT33nsvAKCtrQ19Bi22v78ftV69phAJk7tRFCWBD5hNLgpeM5dB3I14TAJ11lTOIEoCvyb+4tSVhCAuQfyYbvDsRvzYpgGRDg+YDaIk0MuCOvggSgKX43kHGjUFKnX83EjQr42OwduHn5JAXQENBN2MBMA+ZhglgWdcCpvdyLLUoNTP3YiXw09JsCxVF7qC46UkjI6qfYMYCeT+EYeSEMRIoLZAqTYty1YS3GIScjn7uWxuVi9Xv+xGBClONLvqNeHB8VMSuI97UHcj0wQLuRsB7nEJ6bRzMsEEVxJM7d2kmsalJOjuRrvvrvYlQ44rYVHdjUxKgu5uxJUE3oYaG23DKU4jwZQCldoNTbzoK4zrSkIQI0GfqHKDFOQFC+z9grgb0fO3dKna59VX1f9U19x10WR4AraSQGu/AGZ3TaBYSQjyDAUhmbTbgF8KVD8jQY+j5C5k/J7ShAzFmIQxEuwFQMVI4AQyEj71qU/h8ssvxwMPPICTTjoJH/vYx7BmzRoUCgUUCgX87W9/w8c//nG8613vKnd5ZxxcGg8auOwXkwCoh87LH59DmWZoPxqw8QDjVMp+cYYJXNazG9E10T5uSoJXTAI/phtuMQm6auKnJND3bkpCLme/LABbCq2pCZ7diN+TINmNvJQE7m6kd8CmNIN+RgKdo77e9jvW0+wR1G6CDoD5y8s0U68HkPNyUfvwMhL4AILwMhLIpY7HJPDnwjRQpxVjvdyNaHBK7WR4OKyRYH6p9fUFVxJeekmda/HiYncjPRECKQm09gGpW/oAjDIg8RnV5mbVR+iz44B/P+GlJISJSfCaYEml7Bl4t7gEni7YDb44lak/MvV1erm54U37hDESdt9duazstJMzZz+pCHQtUZQEbgBxg5mXjQzJxkZnffEc9mR8xxm4bOr3qG51I6CUmAS/drbTTqr+3/52+1y6u5FXTAKpbnp/zZUE3UOAoOeSGwl6bhk9nSidIw53I0Adg+5J2MBl+t9NSdDHCwRPaa4r10GNBHE3chLISDjmmGPwve99Dx/4wAfw61//Gs8++yz+5V/+BfX19aivr8dRRx2FXXfdFddee225yzvj4BYxf5m4zUoGURKAYrcVPxcQPmNaU2PnU+YdpmWpzryU7EZUFjd3I1PAqH78IEZCKqW+53WwbZsd7ErblKokjI875U/ajmY7TNBAjGbaeAfq525E++uzYiYlgTrgPfdUv/UXsZe7kf6yrauz93cL6NSNhCCDOd7uTClQdSNBV5HmzFH3tVAA/vIXZ1vRlQS+RgIvH/kSk0tdOh3c3SidVudubLSfEdMzS0oCoAYJQV2y1DaFomNmMuo+BzUSXnxRGQhtbcWBy25KAg1iaWZYbyOUAYlnN0ok1HWSkqAHLj/0kHmxP92nn8P7GL+sZoAdx+KmwpKSwAfTHB7k7wYfaJiMAD7ocTMIGxtVWamuaPY0qJFw0EHAD36g9mlsjNdI0FOg6ooeoOJOGhvV/ebtmK+Gm83amZ68zhNk8mZkxA6sJ2jAazIMdTewoDEJQQ342bNV/e+8s33uMEoCPTdUB/x59IpJAGwlgfcjpkkWOkbcKVDpnG5Kgm7IeSkJfJKSuxuZxkAUk0Db5HLBA5fFSDAT2F48/fTTcdJJJ+F///d/0dPTg/xEC2tvb8c+++yDvfbaq2yFnOlQY+eDXxpguknmhJuRoGck8fOB5gGa3J+WZg/5IFh3N/KbISRDyBSTQKt0UqdoMhLcOj+vwYJlqRz+fHZly5bimWSvwOWgMQk0A53NBjMSuHqkz+q4pUDVZ3v1QZBJSaCy77sv8OyzxcGB2axtJOjuJPxFXFtL9an+91ISuLHr95IlQ472DeJupCsJHR3KlebJJ4Gvf1397Lefc38qB18jgR+DZgDJSDCtk+AXTEn322R40r2hGVYa7ASpI9pGPzfNglNuer2tmYyEgw5Ss9Z6NhS9P8nl7FzsgDNTD7/33CWJ09rqVBKonjdtUpm0LrhA5ZTn+Lkb8QF5kDoz9UvUd1KgrZuSQMGjXvDF1PQ2yf/W+3WOZam6IyXB9FybGB93ungB6jh0r/nqsnoK1KjuRqa+fuNGNZNOk0cEtRvqWxoa3A0yqms98YZuSJKR2tZW7O9O6wro16cbb0HdjcgtL2gGINO99lMS+KSLbiQEdTey16qxg6g5fEKFu6vG6W4UVEnQn1muJHC10c9IMCkJtI/XwH901J4cEHcjJ6FEpaamJpxwwgnlKovgAr0YeKdGnSZ/2AqF4jSmfJaUoxsJfjOX3Ejgri08yBcoVhL8Xmp8htCkJACq06QZfn2AaZpZCxK4TGXlL5vubmDJEvv/qO5GfHabu6kMDzuNBLeOWDeWdCXBy90IcCoZBB2HMl4Adqd50EHAgw86g3aDuBuRwaErCH4xCVHcjdyMBK/sRoAyErZuBdasUf+bFrii+uUGIuBsj6Qe0TWbjFUvFwgaPHsZCVzy5+kJ/aitLRS91Lg/PQWy6ucE1LNaKKgB+jvfqT6nYEfTLC5XEmjwT9c2MuJU4vhglONmJLzxhvptWnLHz92Ix6QEqTOTkUB9p2WpAYNXTEIQJYHajZeSwPs60/PQ3Fwck+A326+ryYDq78loo/syZ46tJNDAKOgMqh64TMY2r9NNm5TLDeAsDxkJfOErN5dAU12b+mU6VlNT8SSKrlITer2HcTcKovARJtcyPyOB3DcB+3ng6WBNSgL/m5QEQD1vfEKL4O1SD1yOy91IVxJMbl9e7kbptP0+BYoDl4HgSoKfkTBvnl1WURJsQjeF6667zvP7c889N3JhBDM0w2GKSeAPiGlWmR52/SHUgw3DuhsBdpAsP09dnTOvt99Ljb/89ZlbYnDQHnwEGZxRPXkFFqqyFhwZSLq7nQNF07H54C2RMOfx5koCDTyo4wqjJJjS0dXX2wML/lLWjRR9EETH4e5K9KLv6gJuu624DH6Byy0t0YwENx9sHf7yMqVA9cpuxN2N0mmVqxwozujFlQRuJPFjcCWhvj7cYmpUb3x2yy31MJ85pLYRZDDipSTQ8dyMhNFR271p9mz1DHilQKUAWG4kkPuIrjbRoNRkJLzyivqbDwA2bLDLq+OnJISJSaB93NyNADUjXWpMAm2rG66A00jweh64kUD9it+6pSYjoanJqSTU1aljk5JQX+8sqx+6u5FpQmjTJqVSAsWBy4B9HY2N3jEJel2b+mVqe1wxAexny+S/rt+XMO5GYQbRdHwe5G1yj+PuRtw90eRuZHqvm9yNAFsxMrlr0jH0d04cSgKPSQgbuEyqK0/pDdjX4KUkUH9DxmTYmARREpyENhI+85nPoLGxEV1dXShokWqWZYmRUAZM7kZuvn1A8JgEvrhOFHcjvkovVxK6u53lDKokmNyNAGdcgu7P7mUk+HV03EgYHFQdjJ+RwF8sfHbG5O5D2Y1MRsI73mEHSOr4KQmA6tRaWrxjEkx+nzw7kmkQSOjuRiYjoblZBcbRADiokTA+7nSZc0OPSTApCfq16gMuCv6jWWF+P/WYBDclQY9JcFMSaHAyPKxWyt1332IlwTQLSoM6/lyFcTei7EbZLHDnncD73++cBTe98LiSQMpSe7szwNVLSRgbs2eJuZLA4WspcHQlgdoBKQlhjQRdSQjiBuLmbkRt10tJCBqTQNt6GQm6QqzT3Ay89pq9T5CBLO+XiaYmOxXwwIC6BxTnQzPjQVQKgvt5U53zsqXTSh2gNmIKXObZj7jiwjG5dvkZCbQGB5WPKwl6TBLgnKQKaiSEGUTzfoTOSfEQfJKM2gQpCeSmZXI3ChKTQG25pUUdc6rdjUxKQlB3I8A2iPl4h7//9WBmQJ2P4sp0JUGMhGgE9Kqz+fKXv4xEIoHly5fjb3/7G9atWzf5809KtC3ECjV2/jIxdXqmgT79bXI3MikJfkYCd4swSeX8ATMNVnVMSgKfXQOcaVB1dyPTi830UjbBc5mTi4VfTAJ/sXB3I35P6G/d3YjOCaiMF4cdZi6XXg8mI4E6XyqPPpDjs6v0MqqpMRsJptlqGsz6KQlAcCWBZobC+I3zFKgULE/kcsXuRrqSQAuqmV4oVLc0QJo/v/j8tJ2uJOjPGjdiHngAuPBC9bfJ3SiIkhB2nYTxcQuvvQb87GfAE08UKwk63EigwNjZs51GAqlgegaVbDaYkjA4qO6fPqBubbXPT8ZiMllsnHC8Bv+6kViquxHgrSQEiUng7humSQuTkmC61y0txf2pn988j30ieODy4KC6B9RXU/sLYySYApf54J0G6iYjga83wv83KXEmg8xkJJCB2tRkVlBN70u93nUXTTficDcC7P7Mzd0IcL6juGptiklwUxLIIHR7T5ZTSQiyToLbs51KxRuT4NW2x8YkcNmN0EbCZZddhueeew6ZTAZ77703vvrVryLtp38KJWFSEkwZOtwCDWkfTtiYBD6ja1otlLsbAXYwsp+REFZJMA3O3Aby/jEJhclOjFLFcZcTr4wQupKgGwl0b3R3I78ZSDov4HQrIqgD5Gsd8IEWL4tpdp0GuYD3olBB3I1okBhGSaBrCjqQ4+0OcN4Pv8XUADU7blkq5zhgtxWayaO4h69/HTj66OLzA06/az0FKk/Ryl140mlVdyZ3oyAxCUHjNgA7JoGek9dfD6YktLSYlQQyDk0z0uTiZopJMBkJetAy4Mx2pE8QAOYXdJwpUOl8booO4K8kRHE34uXiEwG6Osrh9RcmJkFvN83NzuxGLS1OZa+mxhzf5XUOKj9X9Og+bNyofpPhbVISeOCyOmaxtGiKSTAZ2tT2mprMsVimASU3VIFgBhjtV6q7EWArCyYjwTSrHSW7EaDutWl2nE+m0do45UqB6qUkuNUnGQl6TAKNfdyMBD0mwc/dqFCQ7EZehDYSAGDBggW49dZb8cADD2DVqlXYY4898KMf/SjusgkT6IHLPFi4FHcj/lL3m7k0xSSYBjP8AaXfXh2vqZM0BS4T+gvXa7bfX0koOJSE+vril7LX7As3Enin5eVuFGQGSq8HN3cjKo8+0NL9g/k94vK1n5LAU6DqA8Bczq4r3QDyWych6EsolbJfhiYlwJRVRVeRUilg+XLgxBPV/1QXehvZe+/iMrkpCX6By1TG4eFg7kZ8JjeZDG8k0KCJnhMyEkxrgRC5nBo8pNPKQG5uVnVNs7ojI2bfdqrroSF7sEdKjO5u9OSTwMKFxefWU6Ly317ldRv88z4mqJFAz+cvfwl87WvqMz5D3NZWmpHA+8igSkJQI8FvIO8WuMyNhNZWuy/gfvtBlATq1+hvk7vRpk2qzVPGGF4eehZ4TAJgNmZNqo1pEOdmJHgpCfp9CRO4HGam3U1JICNB77/5WjO8v/ZTEnjGJd3dyBTTpV8/75/jUBKSyWIlwZRwxe181BdyI4GUBSovUBy4HDa7ESWK4IbZ+Hjxui8zldD24pNPPmnvnErhmmuuwd13341zzjkH1157LdauXRtrAQX7JUiDIjcjwTTQ5x0gJ44UqDxrCp3HZCQEdTcydaa1tc70eNRBUx2YXmxBsxvV1xcwNqYO1NOjXI30VHt62XUlIay7URAlgddDPu+8J7q7Ee9g+YBLHzhRueilQ5mwALORQPWqv6AAexY+ipJAA+wgg99TTrGPZVISTOskmAxECpPiM5BB4lZ0I4EyjtA18JcyH7hQXZGRUFvrNFrcjATA6QLCr9sLikmg5+SNN9S96epSsRFeSgKgAoZpdV6+oJtb0OjoqLpWuv+WVey+uG4d8MwzwJe+VHzuKEpC0JgEL8VBv45cTvn7k8+/riQMDzuTMxBBshtxJUGfBKHzA+GMhCDum3RO/b5RCsxsVrWTRYtspZCMo6BGAm9PupJA+/P0p4AzAQHVsW4kmJSEsO5Gzc3mWeog7kZB6pb2CzPTzs+tKwkmdyPA7G7klwKVroXqjLsbeSkJupEQV0yCaZ0EOm4QI0GfdANs5Zx/rxsJpuxG+mrgHNNEDmDOCjcTCW0kLFmyBJZlTQYt87+feOKJWAsnKLi7ke4fXKqSQDnU/QYlboHL9EC6KQmlpkBta3MqCXoHVlOj6oXngg+a3ai21p5d09dIoGsKGrhsUhJI6jTFJHjBOz/9enV3I9NMlJ+SANjuMKmUuZ50I4G7PpERpsckUNn8YhKCvoQOPtj+O6yR4PbSoboIErfCX2jUTnl2Iz32x6QkcF9X2k4fBPPBqW4kBBmMkJsAVxLmz7eNBNOgO5u1B+sbNtjZw4IoCeSrzwewdXVOI+Gee1TQ+BFHFJ/bS0ng7nCcuJUE6jvpHgFONx2aAe/vd6Z1BcIHLuuuFnR+Kq+XkcCDvnWXHjfcshsB6nopJmFw0I5/CROToMf1mBQ9nv6Uyk6BuHSdPHBZHdfsbqQrk/xZ27AB+M1v1IJliYTaVjcE+ASO6X0ZVPXm1x+XkWBS0gGzu1E6bbuVhjUSamqAoSFn/eoTKnSuuNyNTEaxW8IVLyNBdzfS33fUHml1ez4m4SpBUCOBu1OLkRDBSFi3bl05yiF4QJ2v/gLUB7FegcsmJYEWoOErXoZxNzLNgpXibmRSEtrb1cssl1ODk1yuOEiXykKfR4lJ6O62F9kiqH5NBggNxN2UBLeYhLDuRnqHrbsb8ZkVXckwxSRwI8E0mCBqatRAkc8+jY05Z+rc3I2CpEAN+xLiHTcRxN3IdH7a1207Qn+5k7uRyUjgx6Y6GxoqXmDMy92IrpMGbkEXbEqlnErC2JgyFCj9pGnQrRsJhx+u/qZ7OjzsnlmGDGtuJPDrGhpS626cfLL5PrspCZal3JPclAS3uqBnTV9B1wtqMyMjzmeJuxsB7kZCmJgEeh54ufRnHDDXFdUx1Y/fpAut0u5lJFBMAvUB3N0oyEw6D6Sm8uvP4caNwD772PvQYot89fmggct6Fjj+3nvmGeD3vwcWLFDPmR58zA0gwPns6X1FGHejqEaCyd3IS0nQsxvV1TkXrjQZCbSf7m4UVEmIM3CZMMUkvPqqWpugUDDXp/4+BZxGgu5uRKoWf964IRrWSMhk7OdmJhPaSNh1113LUQ7BAy8lQZdWgeBKAmAPYsIoCfwh0o0Lejnyjs9PSdBnBrgfYVubMhJ+/3vg9tuVb7lphoIbD1FSoHZ3A8ccY75mPqgNoiRwd58o7kZ64LKunFiW092IKxj0m7cNPitN2+orWevQi5gPMHUjgRaEC5sCNexLlvYFio0Et+xGpnvPB7JB2gif9aJ2yt2N9JegW0wCrw+TkuDmbhS0jsiHdmjIzsqTzdqpAPXBAWVVocH68HCxkjA8rJ4Jyg5F8PrSjQS6rqeeUud829vM5XUzEjo71Us5ymJq3E8+yACHBoSkJJD7HXc3AswZjoJkNzLFJPA+mK++HSRwmb7zcwlycyGkwc7LL6v9u7qUAUR9eBR3I5q111MRZzLO9KeEbiR4BS6vWaOSDZhUG/6s0TE2bFBtNZm0jUXLsp9bvf8G7PtSSXejIEoCdzfi2d6A4vc670cWLABOPRU44ADgsce810mgfeJOgQo4Jzu4kfClLwEnnWS+DsB5jaaYBN3dyJQkgq9477aqN7mqUd9netfMZEIbCb/5zW88v3/ve98buTCCGR64zB9et+xGJiXBlAIVsFdJ9XNv4J0Pf4j8lAS/2RlTJ8lzZre1qXiBxx5TD/zzz5uvjxYEAoK5klBZx8bUQGFkpHgxLd4J0d+8Y+UDcTIM6DtSGeiFwn1M/fBSEsj/2xSTYFISeNpQrnb4KQnc3YiOxV2c6JobG8sXuMyh+uNZlkzZjbzuPR+gh3E3IrcxbiTodcePTS9jN3ejoDEJQesolbKzG+2xB/B//6fKQu5zbjOI3JWFYhJ4v7Bpk3MFcsDZ//BZNn5dNKjhxgCnqUm1Y7p/dNz5890zi/i5G/m57ejQrDmtOM3dbgCnu5FO2JgEt3LRTLyXwUpGQtCBrJ+R8PDDqs4POEDFYkRJgaobCbqSQHWmKzBkJOjuRnrgcn8/cPnlwPnnq21MahYPRqWJE1ISALuP8YpJMLkbBTESptrdiPpdbpzyrGoc3o9YFnD66fb2+nPlpiTocXBR4ROLBFcEhoeVEmS6Dl4uriRwA0Y3Eqjf4WMQUj0bGux1QnS8YhKECEbCSWT6GUgkEsgG6WWEUNBgVFcS9AGHSQ3gg3UOHwwA6oHgFrsO75RI+qZZB/ocKJZBwygJui8+oF7W27bZCy0995z9Atf3IcJkNxobs9dIoJnXoMfWVR3+Ik8mnUZblJgEGpzqg+76evu+mV4yvGzkfkDHpfMHcTeiwMbWVpVLnxsmdJ4Pfch20/JTS8LGJHBoEEvpOgGnu1HYmIQgbYTS+HIDvb5e7dvX5+9uREpCECPBFJMQ9EVN5x4cVLO3CxYoKX/2bOeKrfx8gHMQTwM6irsYGlK57ufNc+7Ly+SmJPipkpalzt3f7+wn5s9X5+UxSIRf4HI+7x2Ir0P9Eg0iSB3ibpVNTWYjIWx2IzcjgQyVMEqC7k6j41b31N///e8qk1dDg1PZq69X/4dxN6LV33UlQR90EZS6009JoHU7NmxwVxJo7ZdMRhm7J5+s1As+Uw14xyTo90VX5t0oRUnwcjfiqihXZ6kN8rrwikkgA4HjlwKVjkl9TxxKgu4WxM9Fz/iLLzq35fjFJPgZCamU0xD1czfSJ/JkQTVFAI9XJ/l83vgzMjKCfJAnTAiNl7uRn5Lg1pnoCyD5DUr4rICeU5l/HyW7kT7Ipc40lVIvAJLFOzpUR2Dy7eXnCJrdiNyNyADR5XGTkcBfLPq90Gc+qBxRjQS3WXdKw0llc1MSqLx8EKIHLruVhyT9dNoeTOoLuCUSwDvfqTKlAMGVhCjuRk1NqqwmI4GrVWFjEvxehvzZSyaVn39Tk3J/C+pu5Gck8JlJbiQEGeyqc9tKQnOznXa0vd3p00zQ+Zub7cEEGWH0+euvq3K5LTDHc7Wbrt8vnoLaFB3vjDOAd7/b7ld0vGIS6B7xFJF+0D5kbJvUoVmzit2NSHXwOwc9g27uRoDdFrxiEkjtKVVJoP4+nbbVIdNiakFmT2mbxkZz4LKXkcCVhOLsRuo3GQmbNrln2AJspbOmBnjXu4Azz3Sq0bQNd7N068uBqYlJ8FIS+LZu6yTwLFF8e76/aZLGlALVZCRQHx+HkWBSO3QjgZ4/0/lMSoLJSKDr0t2NkklnTIJb29YD6LmBL0QwEtywLAuWXzoZIRJcTtcHyCb51KQk6LeGHgh6SP0GJXyGjX6b/GnDBi7za+KSInXE9JKcPVvluwfMRpDuqw74Zzeqq1Mv/eeeU64Z3P2CnyeIkqBnN9LvUylKgsnA84pJ0OV1U3Yjcq/wikkgJYGUG91I0MvV1qbuB730dXibCfsSsizVBtyMhHJkN6Lj8Gdv/nzgqquUwarHGlCQux64zLcLGrgcVkkoFNSAtqXFNhJmzXL6NPPz0X7UD3DXkMZG5bsOFBsJVCY9oM/kAuIFGQlU/29+M7Drrqp98mwl9OMVk0B9jD6T6EUiofo+agf0t24k6EoC3eMg5+DZYqicHN1IMLVFmnkPaiRQ2zNlpaJ2yI2EfF491xSTEEZJoFg2MuBofz8jgcrmlt2IDLNNm9wXU1PbFxsR3N2I2o6bu5HJSAgyzxnWSOD9uZeSwMtiSoHK1wBwi0moqTG3TZPxbYpJiNNI8FIS+AKpgLk+TUoCj0mg315KAm+L9OzqUB+tp+sVdyNFDJ5nQrkpRUngDxpHNxL8/CxNRkI67a4kBM0YwV/+FMzHB8ckty9ZAuy/v/v1mQLSgrgbAcDTTytfbh2v2SeTu5HJ3QdQdaUH93rBOz83JYG7G5mUBC6785eh7m7kds+5uxG5YZmUBM4hhwA/+EF5shsBaiDL/UpNRoJfTEIYdyPAbKDvsgtwzTVOtxjeVsKmQI0jJgFQ5WlpUVll1q+31Rc63xtvqEE/NxppvRRuJDQ1KTcAyyqO06E60FdS5sZPEBVENxL4cehl//vfAw88oIwyfm4d6mN4Hnk/UilnICMNWnidUxA4x2uVch26l26GazLpnGgx3W/LUveUvvMbyNO9NpWP7tleezm3GRkJF7jMlYSBAbsPovtAfVNQJYEy9lDdkpKwcaP7OgmA/ayZjAQeyB7USAiqpGSz7hMhJvjkl74+gGniDzBnN+KqpJe7kZuSECS7EfVp5Y5JoOdNj00y7c/frVxJ4MH/gL+SAJjfPbraK+5GTkIrCYsXL8Zuu+1W9LMPz3cWkuuvvx6LFi1CfX09jjjiCDz66KOu2z7zzDN4//vfj0WLFsGyLFxzzTVF21x88cWTygb9lFK+SuMWuBxESXAzEiiVKTcSvF7sqZSdoxlQDxWlgqSyANGUBH2wzQfHNLu/ZInypaWOgW/Prx0Il90IUAF8u+9uvmavY7spCfylRP8fcgjwiU8UqxUm9NgM/Tq4uxGvP/7bT0nwczeiztfP3YhjWcXZcDiluBsBZiWB2iQ9B37ZjcKkQKXjmJ69WbOU7z8/NmC7QABmdyM9gJBiRkoxEvg9bGkBdtsN+OIX7VSJ6bT6+fSngUcfdbaHhgb1ww07ciPp6DDPSANmI4ErCX5l192NCK4kbNqk4oX8VB/qY8IM4JNJ52wm/e2nJIRxaQqrJLgpn83NwV1ivOIympqAAw8sjh8bGbH7rCBGAo8l0AOXCwV3I+GDHwT+7d/s+8hX41XGrDMmYWRElcfN3Wh8vDjTFHc34u8m02RS1JiEqEoCKQeEl5JARggf3I+OFmfg0cvh527EZ9L1PrCmxp55j0NJ4O9Dgs5FsUA0OWeqT9OkGzcSaD9dSeDZjfS4F1P7Hhkp7qPpXEIEJeEzn/mM8fPx8XF88YtfDF2AO++8EytWrMANN9yAI444Atdccw2OP/54vPDCC+jSV7cCMDIygt122w3//u//jvPPP9/1uPvvvz/uv//+yf9TcZjGFYI6ryBKgu4LrLvycGhBNSBYTAJ/8dTXq32DGAlBlQQ6D1cSdttN+b0fcYQq7+LFZncjt9l+L8hIKBSCKwlegcummXz6v6lJXUcQdHla77AbGuwZTreYBJOSEMVIoJk8LkUHHWDrlJqHe84ce3VcwDkDpSsJXgvE8e38ykEqhZdPPB0bsNUXwD0Fqt6eCoXiwOUwGVRISQCKjVA63tCQOu/gYLGSoGehIVci3dWIX6duJPDrCupuRIHhHK4kjI2pv/2Mfho4hxnAJxLBjARdSejpUb+9jGFCNxJMMQk8/srLSOCDt6hGwllnOe81bUNGQlB3IzoHD1zmkyRDQ7YywTnoIPtvPoCzjQT1f1+faoM0kDQFLgO2kmCaqdYnR/hsPjFVMQl0X7lBCLgnIwHM7kYjI7aqS23cNPlnorbWmekOKL7+uN2NTEoCHZeet4MPBl56yX1Sh/bhRgJ3deSTE1R2fQwC2PVpMhJMEzl0LiGCkXDeeecZPx8bG4tkJFx99dU4++yzcdZZZwEAbrjhBtxzzz245ZZb8KUvfalo+8MOOwyHHXYYABi/J1KpFObpqTlcSKfTSDPH3YEJHZqCsqeafD6PQqEwee5Ewp5VtiwL+Xxh4nML2Wxh8iWaTgOplFoBmwfvFgoWgELRLElDg4Xh4cLkLFwqZR9bR70E7O/r6iyMjhYmsiLZ51T+0dbE4KowsZqz+3FN15TJFCZmDCzU1hbwsY9RvQBvf7stcQMkV6p9eLCa2zXzOlZGgir3brsVb0t1l07b36nZGAuWRQaGNVGOwsRMmvqOygUAyaR7Odyg846PW0gknPsrdyNVZ8pIUH+r+wDH+cfHCxOrTqpyqXuk7l0mY6G+3ly2ZBLIZCyk0yowtr7ebitB6pfqmLdjZexaEy444eukrQ3Yts1uK7mcfR9yObs+aBV43f80lbLdP4JeQzKp6jCbVedy25bufSaj6rVQUC/C0VFljHLDanzcvga6N9RG1OBJnZPuqxf5fH7CSFDX29TkLGNtrWpHQ0PqPOq+2+2hocFCKgXHedRCixbmzSu+XmpX+nlU3aryUj/kVfaWFvWs69vw44yMAGNjqk6pvKb6pz5mbExtV1Pj37YSCWBgwJpsI/39hYl+y963qQkYHLQc7Xj9egAw141OTY0qE/UZeltLJu2+zlQXhFo7wgrUn6bTKLoOYulS9Zs+T6WoTQCJhOq/6DxeqMGYhbo69VzkcqrvUf2Lhf7+AurqvI+TTKrzqvovsGczj95eC3vvDaxdS+V0Xgv1y5lMYVJJ4N8XCuq9SH9bVmFyn/Fxc19Og3WvuiVMfbIfiQT1I/Z7IZstTPZh9vtMtcnaWmd/oJ4Hu7/m7xpn3VgT9eG8Bu7iRf2xfv3JpHqvqMmX8P1z8TVT3+YsT6FgYWBAXds++7g/27S/MrIKE/cck2MLdV32u18Z0nZfao99gPr6wmSb0c8zMgLU19v3nZ6LsbHwdaC/86qZoGWMbXo9StByJpPB2rVrccEFF0x+lkgksHz5cjzyyCMlleell17CTjvthPr6ehx55JG44oorsMsuuxi3veKKK3DJJZcUfd7T04Mxnph9isjn8+jv70ehUEAikcDYWNPEgC6HTCaF7m5lhqfTzejry6O7W+m727bVIZ+vR3e3rZEPDdUik2lEb+8AGhv1RtGC7u4surtH0dvbgPFx+9g6O++cxJveVIvubjWllcs1Y+vWAmbPziKXa0B3dx8AYHAwiUymBel0Ft3dQxgaqsXISOPk9zoDA00YG7PQ3a2cIcfHZ2H79jTGxiyMj9egu3vAsf2yZep3d7f63deXQCbTiu7uIcyenZ2ohxQymWZs2zaAZNL8IOTzeYyNDSOdbkVHRx5jYwPQb3V/Px17ELNmqWmXnh51fb29AxgerkMmo6Yttm7tw+hoEzKZGvT2DqC/P4lMpmniOIPo7g4wRcXI5drQ2zuKoaE6jIyMT9Y7AGQyDejtVXXT39+IsbEEuruHkE43I5NJYWBgGIVCAZlMMzZv7sfWrSlkMk3Yvr0f+XwBhcIsdHePoa+vBu3tdvvhDA/XYXi4AblcYeIZqENPTwbd3WPo7lb10tc3hO5ud/8EvR0PDdUgk2lCb28Oc+bk0d09HKpOEolabN/eiPXr+yaUrDb096uyUxvr7a3D+HiDsb2l0+o56u4emryP27d735vx8VZs356ZqI8xdHcbVvoCMDCQmqjvAQwMtKBQsNDTU8DQkIV0egTd3ZmJctZjaKh2sl2PjFjIZGZhcHAY3d3jSKcb0N9fg+3bs8hkEpPPhRv5fB6jo6NIp1tgWUA6PYDubrvNj483o7c3j/Xr08hkWtDTM4otW7LIZFowMDCIZcsSKBSA7m572iyXq0cmU4+GhtGi6x0cVPcwn0872uToaCMGBpLo7h7E9u0NyGbd+xIA2H9/C2edlXKcFwDGxuowMKDu39atTUina/D66/3IZGZhYGC4aHtVpjqMjjZgy5ZhZDJN6O/vnxwkujE21oixMVty2LgxjUymDoODdptOp2sxONiILVt6MTCg2vFzzzWipaUW/f0DboeeJJttQW9vDtu2jSOTacK2bX2Ts+MAkMm0oK8vh4aGHLJZZ7/NSaUakc+rtjA4WIuxsUZs2dJnVB62bFHtsL+/H8mkdx0MDKhnAABGR8cwOppAf79/m+vpqUM+34Dh4TEMD9eivz+HsTELAwNpZDJN2Lw5Dcsq7ruddTML/f0F5HIJ9PT0oVBoQX//KLq7R7Fx4yzst18WDQ216O+3MDzs7GdU39qCLVtUW6urK0z2Jf396vq7uwdgWYWJdjOEnp4sMpk2bNtmP4tbt9Y47svISCMGB5Oe7RYABgdbMDqadbR/P7JZ1Z+rstdOnH8Qw8NNGBpS/Sqg+ptMJoHBwT5ks8DoaC2Gh9X93r69FePjalu6d0NDzmc0mVT+SHqfPjxcg3S6CVu39qOhIY9EIoHeXjU22Latb2KBzgb09dVhfBzo7/fu24Og3o8NGB/POtpUNtuGrVvzSCQszJ3bj7e8pQGNjaOT73RidLQRmUwtRkez2Lp1GJnMLAwNFZBO5yaPl822oreX3kt1ABrQ09MHABgZaZh8P6fTI8hkGrFpUz8yGedz0dPTNFFnqg2phRXb0N1tt5Wg6O+8amZQjx53IbSRcN111xk/j7I+wtatW5HL5TBXi46bO3cunn/++dDHI4444gjceuut2HvvvbFp0yZccskleMtb3oKnn34aLQan8AsuuAArVqyY/H9gYAALFy5EZ2cnWt1WBCoj+XwelmWhs7MTiUQCra3A0JCavWtqstDVpbSxlhYLjY0FdHUp7b+xERPf2/psR4eaTezs7IDuvdXRYSGVKqCrqwWNjep4dGydri6VgQRomTxuOm2huZnKpA6uXFgstLTUoaurEe3talbR5DoGKJnPsix0danOranJQlNTHSwLaG620NXlEgU7gZp1sdDaWjt5fRs2qM+6uoqvmddxb+9W1NXV4oADYDyP8oe1MGuWfewtW+xjt7WpvwFg/vyuiWwyFubO7cDwsP1dV1etazncUPVQi9paC+3t9ejqstttVxfVWT0aG9XMa1dXI1pa1CxSR0ctWlvV+WfP7kRfn/p73rxOtLQAra0W6uvrUFNjYfZsu/1w5sxRszQqzqAObW0Wamrq0dXVOhEsaKGjw/u69Hbc1aX2SySAtrYCurqa3Hc2sNtuav+ami50dWGi/LWT6khXVxdaWoDGRnN7U4Goqq4GBug+el+Dug/1qKmx0N5e57rt3LnUVjqQSFiYN4/aCjB/vn2OOXPoeVDtrb+fnk+1DdV7Q0MBra32c+FGPp/HnDm9qKurBWBh0aIOR1Ble7tS4+rrm1Fba6GhoZa101pMiLLGa9lnn+K6of5k3rxaR5tsbwc2blT9R0ODd18CqDZscvHr6FCzoZ2dXUilVHtubu70bG+zZ6s6bWxUz8uCBZ2+LkdUBwC5ItRO1gmdY9481a5mzeqaKFMn+vsT2HNP/34JANraVN3Tszh/fpfD9aKlRd3npiZqs+aI6098Qs3ed3U1Ys4ceva6jC4aLS3q+5126nRdzI7gfdTs2bVIp4HRUf82R++K2bNrUVOj3kGq32lEba0Fy6rF7NneddTUZE38xuRzW1Mzjq6uZqTTSSxcWEBPj4Vnn3U+P4ByZ6I+3+7DVF9C7XP27I6JmBz1bM2dq+q4pcU+ln5f1Jo83u0WwERfUHC0fz8aGy00N9dO3utsFmhvV22urU31q4B65/X3A7vs0gXLwmSf2dbWhXzewrx5aluloKh7wOvmc5+j8zn79LlzlRtOY2MburrmIJFITLaVuXPVAdS6KuqZo/6oFGbPpvtU52hT9fXq+mfPBnbZpQ6f/zxA4wpOe7t9n+fObZx8d7S0YPJ4zc0WGhtVndTVYaLP7HLsD6g2pOqxs+i6kkm6n/b7iN6/YetAf+dVM/VuGUY0QhsJ3/72t12/c5upn2re8Y53TP590EEH4YgjjsCuu+6Ku+66C//v//2/ou3r6upQZ4j2SSQSFbvRlmVNnl/JX0oCU/6VquErNwHL4YdZW2t/D9gLq6RS9nZEY6N6KZAvpr6vFw0NaoCTzzvLpAb95EdoTb4UX3rJwurVmHQdIihFHe1fU6OOmc+rv/3KQ9fH60HVn/manddgAbCw557m7byOXVNjTfoRq+u12BoS9neAcs2K4r+fz1sTaRmd+1MK1ETCmvRnTiTsc6ZS/PzkgmQP0OvrlWRORpCpbDxVakODhYYGZYzQtkHqV21nt2Oqz7GxYPvqdHaq/bdvt7DTTnYZ+Ln09qTXqYotIBcx/3KQrK/ao/u2dG25nP0CpJmxxkZ7v9paZXxSGXI5071Rxwn6PKoBsYVUykJTkzXZ7gDKjqJcvGxXFbudmq6npUV9v2BB8fd0na2tzu/4dVGwadC+hEO+weSWptqL5XmvbB9i9X1dnbMOTCST6tj19eT/bjnuA6CeM7VoZGKyHW/YkMCyZcGura5O1Tdgrm/VHr3bLFAcR0AuX6a6oPYUpM/haR/r6sjtzP/asll1bamUNZF1T7mUUNmGhy00NnofJ5VSRgpdd11dAePjCeTzCQwOWpgzRz3jzz2nBpX8WigbUj5vTZTF/p76vUKhuN/T35f0Pd2XoNdv6pP9IDdceq+pFK107+1jJZPqGUgmbQNWtUH1PDQ12f2EqU3psUK8zgDlHkb9sd7unGlAw/fPpnNS8gRep8qtTZXVr43Qu5X+pngQfbyQSNC7yvkdXU9jo2V8lwPqfcT7aCq7qqvw183fedVM0PKFNhLWrVsXujBudHR0IJlMYgsteTvBli1bAscTBKGtrQ177bUXXqbk39MMtxSoehCkKaDKL3CZMkmEXWqeMuzoKcX0oCE67+rVwO9+pxZM4llhTNmNeDCfH6WkQG1sLODYYws46ihzR8WDUXl56dh6ViEeOKwHY4fFqx4aGlTdUyAaTxWnn19fTA2w0+r5rbhM1NYWZ1QCogUuA2QkhNsXsAdLvb3mMpieEf38UVKgUoChVzAfXRulBeaLk+lBcfozC5SW3YgHE5tWWh0asoNA6di8zDqdnaqNmAKXg2Q3CrMQnA5fyIjam1/GFZ4thw8MvKBjNTWptm0KXKaJNuWzr65r0yZg552DXYseuKyXSw9cDoIplSfHbZ0Et/LxsgRNgUoLmFH5aeDLg1L9srhR4DLP+6/cXNT/bW324pZ+i6m5ZTfii1nSd3rgLk/0Ua7sRoAdFE11NTbmHrjMJ3jpfTo4qK7HLwWqG3buf7sR6gkkTAHgpUDH1uuKG+FemFKg8uMCzv6Utyf9vF7ZjfTAZcC8+NxMJXJT2Lp1K7Zu3VrSyWtra3HooYdi1apVk5/l83msWrUKRx55ZEnH5gwNDeGVV17BfNNbbxrAB4z6gJp3aqZBnz6A5FCOdCD8i50GjXqKTn0lSPr9yivqt57d1pTdiC+m5odpIB80BaplAeed5zRaOFQfJgOEZ1zQO0NTdqOwpFJ2ulBTdqNcTn3PXzKm7EZ8AR8qX11dsOxGhG4klJLdCFCdcpQ6oVSdvb3OVbX1TE5ux6Y6BYJnN3JLgarDrw1wNxJMhj3fP9piaqoyTAMzOh49514pOYlly4CbbjKvd+FmJOjZjaImk+MKFtWl16qsgH3/VZB4sPNQ+Rob1f3xMhKo3W/apNpYFCMhkTAbCXwxsiD4GQmU4S7I81WKkVBb65y84gO5oSH3Vdf5+fhvSoFK2aTa220jwSu7ERksBO8L9MkRk5HA6ylodqMg2bt0eF3Rvm4ZC005+6le9BSoQftR0yrC+rlNqdNLwZTdCChO8+q3P+/j+f60DV8ngbcVft/p86BGAn9XEI89hgnXqJlFqNd8X18fPvWpT6GjowNz587F3Llz0dHRgXPOOQd9eq64gKxYsQI33ngjbrvtNjz33HP4xCc+geHh4clsR2eccYYjsDmTyeCJJ57AE088gUwmgw0bNuCJJ55wqASf+9zn8NBDD+HVV1/Fww8/jH/7t39DMpnEaaedFqmMlUbvjPXPCdPLmf43za4pdyP3fb2g2Ww/JYF+kwD12GPO43gpCUE6QK/816XOhtD5/VKg6oP0RKJ0JcFrlpEPXng9mZQEelnyGTNKqxdUSairs+83HZOfLyj8RRX1JTRnjjIS+H3g1+qlJPAXShglgQZyXtdL10Mz9txI0Ge3eL5yk5JA6TyDGwnqt5uRkE7b5eJrm7gd37LUTK4JPgOvlyHMistumJQEPyOBPg9jJARREmjgQOV44w31O4qRYCo7ta0wBmEQIyGomsKvlZSAoINkWgmaGzlhjAR9YqW2VmXdImW7rQ047DDgU5+y034SXkoCnxzR27me4lV/96isOb6XH6l9m/pzNyOB9xe6kUD1WlentgsaMmkPku2GoY8nTIpMKeiGIEHXq/chbvsHNRLclASejpe/y7dssScjTEqCvpjak08Czz9v90czhcCv6t7eXhx55JHYsGEDTj/9dOy7774AgGeffRa33norVq1ahYcffhjt/O0YgFNOOQU9PT246KKLsHnzZixZsgT33XffZDDz+vXrHb5TGzduxFLK5Qbgm9/8Jr75zW/i6KOPxurVqwEAb7zxBk477TRs27YNnZ2dePOb34y//e1v6NR7m2kClyr1hyWbBV5+Gbj9dpXDW2/su+4K7LefCsrSaWhwLqbm5s9ogtZJ0Bc3IR9EfeA6NqYWRHvySfUSoXO5uVAFfXGaBvI0AIuQcMuBl7uRl5LA83ID0QZMvB5MSgJQrOTw8vDBhD5IISXB62VXTiVBP34YaNVlngJXV03cXnBR3Y3o/gdREuh54oNsPmPGjVo+W8WNBDpOuZQEPyPBC3oJ6/0Jf1lns+6rbvvBlYSgRgJXEoKskcD3aWpyrplgmvDgRkJTk7kvNeFnJKRStttJ0EEZb+smwijCJiUhiItFuZSE/n7LYSSkUsAJJ7jvS2uSuK24rCuo9L4k9AmYsEZSGKIqCdQGyQ2LL7J2003BjQSTkqAbSab1DErBTUmw4wS89zcp43rZeJtNp81KArVtwNm+v/IV5UWgUnI7z20yEjZsUL+3bgWqJPx2Sgj8mrj00ktRW1uLV155pSgb0aWXXorjjjsOl156qWdgsxvnnHMOzjnnHON3NPAnFi1ahIKeAF3jZz/7WegyVDPkVqS/bKjjeeop4IknVIehZwyZOxf4+tfNx9XdjeKISQDUg6oPoAHg3/9dlfPxx4F//Vf1mZs6Yhocm6BtTO5GpSoJfPYhlwM2bgymJHj5UIY5N195mkMd2sgIJnNp8/Pos+v6va2rUy/ysO5GpDrFYSREfQnpRoLubuSnJIR1N6KAOPrbDaovep7clATuKsEH1rqRMDwcfLDnpSRQ/IkpJiGKkbDnnsBllwELFxaXgSsJQVYWN8GNLSon1alb/UcxEri7EWC3B5OSQO1+wwalIgSdfKCBhpsR4DUR4Fdur5iEoO0mmaQgX3sgFWSQTOdIJu0Vw3mfw33n/a6D9lELeSl3o5YW77YZNCbBz91Ir/cgRgJdb1R3I11JMCnp/HrobzKeeL0GNVb5cbiSoI8ndKOxVPyUhDDuRvyZ42XmEz9jY85+x6Qk8HHC0JC9FodeFr6IHbFxo/rd0zOzjITAr/lf//rX+OY3v1lkIADAvHnzcNVVV+FXv/pVrIUTFHwWwuSaMzSkUr/96EcAy+Tqi0qfaQ/Kw8YkFArmGU+uJHAXlwMOUGksucuRqZN0GxybUFlPogUu+0ED0GwWWLMGOPdc54BFNxLcYhKidLg0g10oFA8gdHcjLyPFZHCFjUkgabtUJYEfsxQlwc/dyEtJoJdEGCWBjIQwSkJrq/1yM718+YCaf07bhonboMGeaWBeU+NUEoK4G3lhWUoR1KEBr8oxXnpMwsR6lgCmxt2I8IpJeOMNK7CrEWAPNNxiDrwmAvzK7eduFASVHUf9TQOpMDEJVGZa4MoUKOqGPoDcd1/glVeSePppy9XVTd93fLx4Vt8rFks3AkzvUz93I68Vrb2g9xqf1DFNajQ3Owf/dG2kJPjVqxt0HD0mwc0ttpxKQhR3I746u1dMAn+WabuaGufkDJHJ2JM5er3On28bBYBqN5s3q79p1fWZQuDX/KZNm7D//vu7fn/AAQdgM9WiECt8FsLNSDBlNvGDz5RFiUkA1Ln1DqWurtjdaNddVdkXL7YfNsDsbkQD26Dl0V9ucRkJ/Nj9/eo3pbU0uRvRYI27wNAxwlJTY89kuCkJXjEJ+stSH/TTaqdRshtVq5JgekY4UWMS9IG827EBe8a+rk69BCklMEEDeRoEmwKXgXDuRrRfWCUhzgx9PMi/lJgEfVAE+Gc34kZCWHejhobiwHL+dyJht/stW9TaCUGhDClu6hY3EuJyNwpb91RfpCQEMRJoYM5VXH1iJKgrCdX3sccC7e15/OMfThXOa19qy27uRroxrBsJer8YJHC5FCPBzd2I3/tPfQr4z/+0/3dzNwoLTxNM6H1luWIS3IyEMO5Gpt90Dr+YBO5uRNvSZMa//zvwkY8A+tB2l12A116zXZe7u+22UWK+nmlH4NdER0cHXn31Vdfv161bh9k8obMQG7rvp/459/EPAz2kJO2HdTcC7FzXHJORsGiR+t3SospLuLlQhZXgy20k0ECBOgg+OOUvPP26dYMhKMmkfU63mITRUWc9eSkJupFgCtTk6O5GpsDlUoyEqIPIpiZ7dpbKENTdiCsJYbIbRVESamrUM6n75tMAiNwH3NyNcrlwdfSRjxRw1FHFn5PLi24kpFKlx+xw+ExdHClQwygJdL/HxoIbCW5KAj+HZTnTDQ8Ph+tnuZJgKjvNLofp67hqxnn0UeDvf49uJIQJXOYpUOn/qEoCn+1917vUrIifkUDqMbULN3cj/RnX3xNR3I380ge7wV2GvZSEWbOcxj53N0okoj9XZMTpMQnldDfSDUEiipLAf3sZCaaYBFPgci6nnunGRuD97y82WHbdVbWvbdvU/xSP0NEhRoIrxx9/PL785S8jo0dzAEin07jwwgtxginKSCgZr8DlXE4N+CplJJiUhCOPBA480C4joB46QHWAfDXwUgOX6RwmIyGu2ZBs1n4hkdTIB+K889I7tKideiplKwlu7kajo07D0UtJ0N2NyFBzG1Tp2Y3U4jK2ZA6U5m4U9d7owaRh3I1KVRK8tiVJnGa9a2ttJYET1EjgnwXhXe8yp/KtrVXXSs9c2PSqQdFdQEp1N+JKQlB3o5GR6ClQAXNWIFLQKB2x38CG096u9u3vN5edVNMwSgJtt3UrcO21dvv57W+BX/wifFBtFCWBBy4DtpLAryFodiPezxx9dBodHcHUGm4kmFKgmrIbmdyNdCMhqLtR2PZtcjeigarXvefKGi3uFxVKM0vo7S7uwGXuysahY4c1JN2MBLonuruRKSaBp2kG3J8VGq/QvPiGDWrbffaZee5GgZv6pZdeimXLlmHPPffEpz71Keyzzz4oFAp47rnn8L3vfQ/pdBq33357Ocs6Y+GzEG5KQpQl1LmREHYGihsJc+Y4v+OZZnUloblZ7UOrXZquSa04G7yj0heoCpLGLihuSoK+CA+gOhE9f3XUwRI3EvRjkGIRJgWqriTQsYO6G+kuTkBlshtRp073w5TdyMvdiAyJMEaCm7GmU1Njz9jX1JgHlI2N6hp6e9X/cRkJbvAUiqlU+YwE250hnhSoUZSEMO5GXEmggZepzBSwPzJiTW4flN12U79fecXdSAjrbkT37eGHgfvvB04+WflPp9PKHWru3HD3lq6ZGwnUN7uhuxul005jHQg/AATUMa+9toCGBv+RcE2N0yAnTO5GvF8sdZ0EmiMNm92IG4T07gzi9kdxI3194dqeCdN7spzZjUyGIBCvkqAvpuamJNAkjh4L5tZPdXaq+/Taa2rdmI0b1bodnZ32mk8ETdLGqcxWE4G7k5133hmPPPIIPvnJT+KCCy6YzDBkWRbe/va347vf/S4W6ikvhFjg7kamWfeo7kaUPm1gILyLAL0EBge9O5TFi4H3vU8FpgGqnLmcnXbMS0kIk6VD7/x4oFMp6EZCT0/xzAb9futbbWPI1KGFwWtwaln24CWIkeAlKwd1N+Iz+JWMSdCNBK6aBAlcBuyBWZBycCUhiJHAXSBMMQKWpeIq+ErnQPmNhGxWSeUUuFwuIyEudyPug+2X3Yjui76Ykhd8oKKvzMupr1d1FsVI2GknVf///Gdxrn86X9jAZSr3iy+q39RHpNPK8BwYKC0mAVDl+fnPgfe8x3y96bQzcHl8PLqRoF93S0uwfoUb5H7Zjfi5vNyNEonyBS5zbwB9Vtvvemtr1bV2dIQ7p46KT3JfJ6FcKVCjuhu5vWdN7kaFQvHzz89PLmpU534rk1uWUhNee039v2GDep47OpQLEhnSQ0MqpuGSS1Rilh2RUK+KxYsX495778X27dvx0ksvAQD22GMPiUUoM9xIMHVqo6PRjISWFtXQ+/rCuwjQbIhfyr36emBiXbzJcwLKuKCVg03qSNjZNd1IiKOT48emWSt+vXqnNWuWnfmlVHejmhp7IGy6Lw0NpcUkEH7ZjehYtE86Hd2di3fUcSkJuruRn5IA2MGktL8XQWMS6PjcSPjQh8x559vbi5UErkbp5S0Ffq/b2tTLbircjaK2e8oGRUrCrFnlVRIaG739zCkmIYqRkEyqSYMXX3QPXI7qbkRuEGQkUBt97bXi9LRe6DEJALB+PfCTnyhV4q1vLd6H7m8c7kalKK2mmAQ+YaBPBPgpCfr3JkoNXOaxRkGNhLo6ZSREDVomdCXBK3A5jv6h1MBlXW0yZTeiCUJy5XLLbkTHC+puBCgjgdbo3bgROPpoZexnMqp/mjVL9eOZjN2f74hECu1sb2/H4YcfjsMPP1wMhCmAdzB6TML4eHQlIZFQDZ2MhCjuRlSOoFA5ySfelIYtbEwCvWwJr+DVsOhKAmAf29RpEaW+BP3cXGjwwuvPFBvhlt2I8HM34jONdLxSAsPdZpeC4udu5Be4DISLqwhjJHAloaZGxQiQssThSoIeRBxE5QkDP0Z7+9S5G5VyfLWwlp3WNWh2o0IhfEwCD1w21XddnWprw8PqBoXtZ8nlyK2PCOtayQ1iwKkkACoLSxhXGN3dCLCDNd3ylOgxCYVCPO5GYfAzEmhyhNxM6Fx+MQnlMhLoHRVVSQCipz/lx+FKgldMQlwqPP9NhDUSgrgbUfs3pTPmv3Ujwes+7ror8Prr6vnv6VH9Oak5FJdAkxn6mgo7EjEmwRPKhVvgcipl+/dHXbyorc1O7xnWl5U6kjD7UTnJSHBL6xo2u5G+mFrcRgINVKiMQHHnxSnV3cgrJgHwdjfiL2y3dRIIPyWBvqf9SwlcBopjNsLC1xGgMuizh27H5rPdQeMqEong7kaplL0ImtdLltZ6AIqfu3K5GwHqWc/l1CCvWt2NAFtJaGhQ7Txo4DLtGwTah6dAdVfsLIyOqhsadjZ38WL120tJiJLdiNCNBCB6dqOgRoIekwBENxJKSewQREnQkyX4LaYG2O5nJuJwNwqrJND1laok6IHLbu5GfNKiFLyUBHKZ9cKkkPPfdI7xcXvSyC0mgbbV3Y28+otFi9Sx77hD/b9gge02SLGJ5BYZxUj4yleAO+8Mv99UI0bCNCCZNPtb804vipIA2EpCWCOB0gNSOYLC3Y0A8zWF9dOtlJJg6rSIOOR0txSogIoneeEF1dmZOlEvJSFMTAJ1unEpCbzDjgJ3e6Iy8NnVMEpCkLiVsEpCkDSc7e3OmAQ9O0ups6wc/tIk0TfsGgxBoOPR4oylGgkjI2oQUVfnHz/i5jLhBfeL9lMSKCaB93lB8VISosQkuBkJPOlg1JgEOjYZsH5Kgj4An2olgScJ4OUAzAkbKB0wYQpcps8Btf/99zv3KVVJ4Pc6SNY0wH6GS1USeApowN3dKE5XXf6bSCSCZWrS3Xq9YhLoOXCLSaDfQQOXATvD0a9+Bbz97cDee6vxUioVj5LQ02MbutWMGAnTAC93I6IUJYFmjsJ2fPRyDTPgoM6BjAT9mvjsWhgjwRS4HAdcSaBBVhgloZSZMno5merhwx8GNm1SL0qvmAR6WbopCV6BW6lU8YsjLnejUpUEHpMQVkkgIyFIGchoDVLmoLOjs2er9k9pNfX765Y6MAp80EzpV8thJFBZSeEp1d0IUIMi3lb9Apf5vn7ssot66fsZCRT7MzJiOTIhBWXRIrWPn5EQ9Fmi48ydq35nMmrmO532ztLkBjcSaD8yYCkQ+oUX1GAZUIbD+LhqS25KQl1dMDc+Om8UuGufqY2YYj2amvzX6KHPARVLcu21wGWX2f1NnCsuV0JJCOJuFJeR0NwM/Mu/AHvs4fw8kQgW22NSyPlvoNhI8IpJ4EZSkPs4a5bKHvaVrwDnnmsrIJ2dtpJQipFQDrfPciBGwjQgmVQvAjd5FIiuJLS12VZx2AZLD2SYTsWy7DSogLs6UmrgcjmUBMpD7zWzQXipDEHPqx+Ls/vuwGc+o/7WO/dk0p4l94tJ8BpUmYyEuNyNog6ATe5GugHjpySQu1GQ8rs9b17HD6IkAO4Knh4HUgomI4EblnFBZaX7UqqSANhKAhFESQgak7DnnsA3v6mO6TXZQeskkJEQlvp6lRXFzd3INOPtBdXB3nvbcUvj4+r9sNNO6rswdc+fRzr2tm32PXj1VeDWW4HrrgNeekllPersBA4/3F1JCDLjXWpsEnc3Mq2TYKpX/t4B/I0Emsh65hngiivU36UYCXwSw7KCGwl0rtKVhEKRkqBfv5tBG4VUCrjgAtugJUhJCLI/bc9/m5QEk7uRPmkT1t0IUJNxRxzh/IwvqFaKkRBmjFNJxEiYBlBDolRz+udAae5GJC9HNRLC7tfc7K0kZLPhgh/LaSRQsBM3EsIoCaUELhNux3jLW4DLLweOOca5D/+dz9vZRwhTcJeJVKp87kalKgnc3SiqkhDWSPDbPqiSQIP13t6pMxIsy055PDISj0rB0ZWEOIyEoEpCFHcjDl9MTYeMhNHRaEYCoBZgMim91LbS6fAxCXvsYbtC0YCH4h9KTYG6bZuahKitVSs5P/20+vvqq4E//1mtUMvdkwB7ljWoS1Yc7kamDDVeCqqfkcD7EcB2Zzr1VODJJ9XfpWY3okmxRCJcdiMgnsBlr5gEWpOh3LPbyWQwI8FNSeDl4+9nwKwkcIM0aApULzo67IlVikng7shBESVBiA0/IyGRiN6BtLXZnWLYB8Yr4M+LlpbyKwlxWegkE4+O2jN1unFg6uR1qTMsfkoCcfDB9gDEZLxEjUmg7+gFFZe7UakxCbqSwLMb+cUkRHE3cjPKvY7vN1Alt7Xt26fOSGhstO9lOWMSaHY3DncjriTwLDU6bq50QaF9vIyE4eHoRsLHPw6sWFH8OdVRGCOhsVGtX3DUUbaRQAZzVCOBniEqT2+vMmR32QW45x51nq98BXjjDWVovv3tajvTADuVCvYuiqt/1Ge+qY2Y+j1671Bgsp+SMDys6qe93e4zSl1xmSbFwiREiNfdCPjTn5QqZFJTuaJULoK6G0VREtxWXObbAt5pj/3o7IwnJmG6KAnTwI4RqCHxIFX+eSmr/bW12X9HjUkI29C5keCmJISV4HlwWdzuRkNDqjyzZqm6DuJuFEd2I9PfXpiUBK91EvSMJKYymGIScrnoi9WVqiTQbJcpcJnK5jZQLNXdyO8+BHU3am1Vx+3tNace1tWbUqBj00rPgDKw4n45lUNJ4EaCV3lLVRISCXUeU33b6yQk0NZWABC+0btlceFGQtB7bVnARz+q/q6tNRsJYVOgplLOwXZ/v2qjjY0qT/yb36zWfzn7bOU6YjJieZ8TxpWk1P6RjByC+iU3JYHWFWpsLA6w1wOXh4fVYJbaYCZjK9xh+75SlIQ4U6C++GIK3/mOhbe9zfyenAojYfHicEaCX0wCYHsmeGU34ilQS1USentV/c2EmIRpUMQKss8+/k/wIYcAv/mN87P3vhd4/HH/469Y4ZxiGhwE9t0XFoDOfB7WxLmXZYAfDk6kDbsXwJcB3H03UqlDAUy4Gv3ud2rKyo/mZuD55yf/nTULOOvZz+NfN/4Usx4F4PXQvOtdwH//9+S/9fXA1f+7DAse3gxc4HPeq64CPvhBAKqDSL78ArDzsfjvbUDTQwAmXqTvHgWOHVWzPc2PAKgD8NhjwPz59rF+8APg0ksn/z1naGJ2+xb1/0kjwDvSAF7bC3jgAWc5Tj8deOihojou4uyzgZUrkUrZHdBRp+6MpZSN4F7goHHghwNA7Z8B3MT2/fGPkfzXYwBMdAKrV6uVtYLwxhv2fgBOffESzD7oRn/N7+ijsf+VP8F73mO/wFY+9DYsXvUi3poBEkkA16rPZxWAH/ZObLczgIsuskcegIqIPuwwfKsPSCUB/Le9T8saVdfLhif2XbVKOUgTd9wBfOELAGCs4/8aUC/alvfPA576u/MaPvYxNXXpw1nNp+GpZd8AYL9wv//gPug6fgiLR4GEBeC7xft15oHDdr4B4+Pvtl+Qa9cCJ57oeq4PjADvoviH4eeADuY3cvXV6meCFYMTi+09BOBn7CBaH2FZwMq178XeH3pcDWZyAH5hb37JREriWY8B+IK5j5g8Fjza8d13wzr0UNTWqmeu5aHf4Yf3f3zS0HK0WY7WRwAAPv954Kc/ddkBqAXww23A1sF34Sct/+18+S5bBmze7LrvJBN9BA2K5g+8gH8791gcP8LaqoHZeaB9/8ewvX6+PUjQ+ghX9lJ9RH09GzBM9BEAcHQGOGQQSDxYQE2NBdzA9p3oIxzs7FJInR//GKnGYwCoAcZOL64Gdg7XR5CS0PCNS/DD+2/ErMeAn4wA9Y8CMCgXOPpotUoa47ivvw3v/OeLwM7ALjngh33q84a/qOfj9GGg9VEALRfhvVof0bbsMPxwwlW16REA9cANvRP1eDs7iaGPeM+nv4BjR4DGhwF8yaUdz5sH/N3cR5w3CKQz5nZxyzagv+Y0vH78Nxzt8LAz9sEPNw+hbg8ACWDFwERfcb36/uCJ/jx53w3AB989aSS0r1uLH95/Imp3B44dA44cLT7nJM895/Qtm+gjPjxsx47U/w44bhSoWwW8bwzqvXuE+zjiP4eBD40BrWugHjQdl3GEzv8bBT44UkAiaSHxZ/XZL8+4G8Chk9ss2/w7nPHIx4H7XK6PiNBHEP+pjSPUiYv7iAUT7bF5om1d3gfcvNdVSCY/OLlNy8YX8MP7j0X9X4DDMkDtbvb+HXngh9sn2tgXgbYPPIbxcTWOyGSAd7z+AyR3Dd5HEJ2dwPl/Px2FnR/CRf3qfVj7ZwDfKW7HfSefjYYrVjonrib6iO9vA5oeBPApl/P++Me2LzEQaRwxySWXADfe6PzMb3nxCcRI8GLTJv9tTMtb9vSopU39IDOUKBSADRtgAeDGfN3EDwBgFMB2AJnMpP3S0gI1PRLknJpzbFsb0Dy+HR1jGwA/vzptWcH6eqA9vRmNYwHOy3J9tbQA2wazwIYN6AAc522c+AH/XF/hZmjIca2TVzQxmG+a+MGWWcXl2LrVWMdFTDgb1tSwWYqeDfZ9GFb99WT5+a1Mp52ZRtLpYPeGQbMgTeP9SGwKsO/WrVi40DnWn5XegsZ+tu+E/6RF5QaADXA66gKqvjdsQDv9P6BsFH6vGmhf7ucFqPs8ca2mOqY7kt1quIbe3kD11LrH9iJ3o9npjagdHrTfoQPF+yUB1M4fdbobZTKe55xsSwD6E1oC9YEBx76t9McYJtsiAGMf0Z7rQeN2dl52C9r4cVz6CMKzHU9Ml9XWqpnTmtwoWuhZHYWxjgCYHei3b/esJ2pTfQO9QIs2Q7d5c7D2P9FHTM6c1mTR2LvB7g9cDpH4/+3deZgU1bk/8G93z3RPzw7MMMMMMCwiigooAplrDFFWt2g0EZdcR2PACFw0IHG5P8HlUVTUSCIGfbxXsvjEJQaNUcwlKiSScUOIKAaFQED2bVZmY/r8/ihOd1VPdXd1dVVX9cz38zzzzEx3dffp09Wn6q33LAC8Izo1j41uI2IqUvbIYFBV5hNtBBDV9gLh75Dyt/ofWUaD3/O2NvgKwn8iO5R8GyGDBHG0Ptx+ZwPafU/tUNcvXVHrfuS07AZ2KycD4XZB/T1vhW4b4d2zu8v2fYCu+5ZOGxH+XOWiiEjQHksn2ogCqNr9qGorAdDccLRLJiH74B6UtDYCJw7r4aPDibLK9rz+mNK4hDMJaFfqd49SH+G2T0/0Igsn2gjNkMFjJ45xLVBubwVwMPZ5RD5U2+lJ0EZImmPrCdmiXfN/EC3o1bwbaI7xWpKJNiJMb3linTbCB+0xpxeAQOcxbZYdx7XnLqopRaOPWdneTrSoFlPLE8m1EVJJCeDtOATfwd3oLW88cQ4QvR+ve6MevinAtGmqG0+8ZvS5TxfR6QkT5xFh9fWmH8sgIZ5+/RJnEuTqGtG3yVGu8RQWav/3eIDKSggAoVAIXq8XHgDtHZF2IDcXyA0C8PvhO/H9zs+HcpQz8ppRI5yLi4Gm7F44lFOJ4qIE6a+o1bWDQeBooBx5uQZSoaocdEEB8O/WLIjKShw+rBQp58SRuKU1MmCsoAAI+NE1/5mfr3mvTU3K1djiE9/l5mPK+VGv6GkVAOUbrlPHXZxoGHy+yPGxo6wSra3KMa9XceRz8fuBQnWbGQiET159PuV/Q5+Nijxhac4uQqiiUrniFU9JSZebGoJlOOarDy+ela9K8R46fOLkuhe6jnr3+YDKStQ3KI/LywUElAGNBflASCjnc316o+sOk5sbfq96ddxw4mp7Yd/yru+hd29D9dQS7KWZAtXnA44EKpDVqwktLUrWpEBnIH9IAO2+oHbaSb8/7msea4nEtzlZUR9CYaHmsY1NSjveZX/QaSPaC0vR0FwZ7hpRpGoKGhqUfau4GMiK0UZIcffjE2fMMpOQlR/EoRzlsYGAfh0B0J8FoVevhJ/N4cNAs19pIzS7RbnOZ63nRBshT/T9uVloLalEU5Pytvv01n9YSAAhj0/z2Og2IqYTbUROjqrMJ9oIIPIdF0IgN9eDPPVZVpHORQij3/NAIPx6QsBUGxEeuJxbhEM5lcq0pPEOVzptRM7AMqBVCXY6Q5HpTwvyo7rt6bQRoqISh49E7s4JAEeOKp+Buq3RayNa+lQqJ+Enjh26+7HefnOijWhqAlpPjOXoVazd5PARoD2vV5fuHKK8Aod2N6GwEPBnA3X1yuPl96CjA6hvALx+5WDW3Ky8r+w8v3J8LAba25TX7d0L+qL7IZ1oI+QxKRRSjt/HWiLdxYqKgOw45xHNx5RrgDGPzwnaiPD7h1LHra3e8DgYka1NTYQCQdTlVWq6Iesy2UYA6HIeAUD3s5b7o9y36uqBNl+utgtoTla4TcsNaru6hYQSj+TlAcEcwOf3aVZc7ggk10ZIpaXAjuySSNsEwJelfD7q/RgA6lAEf3TQfuL8I/rcp4vofrMm2oiwoqKujw2FjF0IF9RFfX29ACDq6+sdef3Ozk6xd+9e0dnZKYQQYsMGIS6+WPl58cXIdh9+qNz2yCOpvd73v688z44dyT1uxQrlca++mtzjXn1ViO99T4jjx5XH/+UvkfvefDPyXtetM/Z8Tz0lxNy5kf+ffVaIm26K/5joOo733LI827cL8cUXQqxZo9y3aVP8+r/sMiEee8zYe4j2+uuR121tNfcc118vxG9/K8ScOUIsX669b/p0IX70o/iPb2oSoq1N+bujQynL228LsXKlss8kolfHDz+sPM++fcm9F7Wbb1be08UXC7F3rxANDcrff/+7ELfdJsTSpfqPa2tTtnv3XSF+9SshfvjDxK/1+99HPodjx+Jvu3Spst3DDyd+3iefVPbZBx8UYtEi7X0PPqg8z86diZ/HyH48Y4YQS5ZE3v/FFwvxs58lfu5kTZ8uxH33Kc//9dfmn+eZZ5TneOkl5bt28cVC/OAHsbdvbo68rz17zL1mba0QX37Z9fYtW4S46KKQmDy5RfzhD/HbimR99pl+u27UokXKviKPA4cPp1aew4cj5dmwIfH27e2R7VevVm67/nql/U1k1SrlcX/8o/K/0fZYWrZMefysWV3vmz5diFdeEeLxx4X46U8jt8t2Qh5X5s0T4uc/j9z/+efK/bt2Kf/fdZfStm/bptz+1VdCPPec8n1K1q9/rbQ33/ue0n5ee60QDz2kPK/efqf24ovKdrt3J/+6arKOV67sFJdfLsSCBUodqc2bJ8RPfpLa61ilri5yzBFCiPnzlf//9rfINp98EtkHa2u1j29pUW5ftUr5/+GHhfh//0/5+/nnhaipMVeuUEj5HJ9+Wnn+m25SjkdCaPdjecz87W+7Podsi995x1wZrGD0PJezG2WAWNMwarobpUBeNUjXFKgFBcpgQPXgU8norD5q6unwAOunQJVycpRhKhMmaMsXb5GnVOYBVz+PGV5v7GlBA4HEg7by8mIvpma2fq1YsCcQ0F9MTW/BQTWzi6np/a3H6MBlQOmi/a9/Kd16Yy2mZtWgtmBQudio/rztGDCXleXMwGX1fWYGLgPAN76hrJ0QTZ0hNTvNdCypfsejZzcyM7OTmroM0Ren9eiVf/JkYOxY46+Vavuo93nLdi86kyAHy6onzUg0u5G6DZRrUpgpsxsGLkvFxUpWQ28Cg3QMXDYq1sDlWJNJyNXN1fd5vdrzFHUmwWwbJRdU27pV+b+0VH/gsjwn0btP7mMcuEyWiHWiInewVA9eRUVK1ikdKy4DkfLKLr2J3l8idk6Bqi5DdCOdaAYj9bSCqbyu2fcSa3YjwFiQoCa7TyWzxoAeK1YT9vu1QYI8OWpri//Zy4AimVVu7VgnAQAmTlTGwm3a1HV7K6dABYD585XA3OOJTINox8FJvQquFVOgqtdJsDtIiEV94p3qFJTRzLR1aoGA0hXKqiBBXQa9nlTR5ExCQkS+G9dcE/8x0a9lV5Ag273o76961eXoKVL11kmInt2ovd3cPiaPUbLtNBMkWLX/yQDwyBH9IMEtgkGgulpZswOI9OTSm/kvL69rr86sLOCBByLBv/piYipBAqC81ubNkb937uy6TfRMSnr3uSUgi4eZhAwQ60RF3u5UJiGVdRKAyDiLWJmEZIIE9dhmKzMJ6rqPnsow3joJ8rGpLqbm85mf3tbni59JSPZgp74a5mQmITpIyMqKnKAmOvmXBwozi6lZmUnweIBbboF2Vh1oH2/VifzAgZEF3Kx+brWsLP1VcJOVyhSoqZ4oR1NfGDC7TkIsVmUS2ttTuyChVx4jmQSg67TLyb6W2TLH+66p273o54+3kGesTIL6IoTZk8vorG4yQcJppykZGqsCYBkANjQ4MwWqUV4vcNddkQnD4k2BOmSI/nHy9NO166CoT9xTqc+SksgxqG/f+JkEvSCBmQSylF4XI0C7TkIqZJCQrnUSZHnr6pTfsRasSqa7UXQmweyJdTRZJ/IqrJqdmQQrTqYLCpQJTWIt2JVKkGC2XFZ0pZEnR0Dkcw4GlfR5orLJA0Wyi6nFW8xLMrqYmlRWBtx/f9eTTztP5O18bvVMYFavuBzvREp+LuGpXS2kvjDgxu5GstumFcGRLINmpqcEZNub7EUDs8GF+nUB/XKquxtFfxfVqy7HWnG5s1PJjjQ1KdtbESTIepJZl2SChKoqYO7c5F8zFnWWKLr+y8s1ExG6it7xVn4W0V2N9FidSQCUfaOwMPnuRpmUSWCQkAFinThbFSTIRiNd3Y2iMwmx0u7JLCIWHSRYuZgaoLzX6JPEdGQSUjmZGz4c+PvfzY9J0CtTon7/iVgR/GRnR2YalOWQi14ZzSQk293ISHnNdKU65ZSut8kTGztS/1Yu1BbNqTEJ6hWDrbo4IMl+zYD13Y3MtHVq6jEJVgYJRroaRT8m2fbAqu5Geu9bvdK83sR4sbobyW1DIaUtEaLrmITjx83t2z5f5KQxesVlq45VRqmzRNGvPWOG9d8hq8QbkyAXEoxHfTHRikwCoNRlIBBZAFZdn90lk8DuRhkgUXcjqzIJZgcum80kbNqk/FY3umYyCeo0ImBPkKA3aCxRJiE/33jaPtbrpnIyPXw4cOCAcnU3+rPt1Su5kwFZJqvGJKSaSZDUQYLRTEJHh3K1zMhJXzJBQrKZhFgyOZPQ1hY5aTcr2TEJ8n6ruxoBynuR3307uxuZqS91dyMruqJ4PEqZkmmzzLZTVg1c1jthl92N9DKoBQXaIEEvS9/ZGZmGOy8vkkVOJZOgvpCVbHcjq2VlRfbl6M/NrQECoL/P9O0LnHOOsl5lIlYNXAYimYSiIu2YFbV4QQIzCWSpWCfOAwcC3/ue/qwcyRg3TpmPONkd1uyYhKwsJcB4911g5Eil36Ckl0o08nx2BQmyPNHjEYDEmYTFi83PSJHqlTYgsshpKNT1eWbHWuUxDivGJMgrs6kcjNQnRNFBgpFMwvHjyqB5IydDdmcS9Bg9MTbD7jEJgPL+rfh8AwHjdeH1Wj9oWZLffTcOXLYykyDLlI5MQqoZRSOzG8XKJMiFfWPNbhQKRQIJeTIt67qjw9xFuegLfeogwYkTxaIiJRBKd4CSCr3jrd8P3HGHscerLyamGiREZxIAZf9Qnycwk0BpEyuTkJ0N1NSkfnDs2xf4z/9M/sBuNpMAKJH4qFHAwoXa8pvJJOh1N7Kq4ZUNSbwgIdZrFRWZ/2ysyCSUlETWrYlujHJzkz/psSJIUF8dNitekJCobOogIeGCQUjuJMiqTELv3sq+Y8dVPTu7G1kVJBUVKfWuPgAbySTYGSTk5AjLT+asGJPQ3t715CTVMiWTSTAbJMjHmd1X4g1cVs9upDdwOVF3I3UmQQYE6qyN2UyC+m/1McuJE3UZCGbClWwp0fE2EfWYBKu7GwFdxx7Iz5djEsh2yUzDmE6lpcCppwIDdFaUT2TJEuXELvr9mOmnm52tnBwKgfAKtunsbmTHZ2JFJsHjUbIJtbXWNEZyFqlU6ve88yJT2pkVq7tRc7Px7kZGMwnJHJiSmd0onm9+01j63AwrxoTEYsU+CyizuTzzjNI1JHrsSSx2dTcClBPw3Fxh+fOmGiT4/cr+3txsXYCUlZVcJsHsxYxUL4IYmd0oegpUIP7AZXUmQd3dCNBmElINEpwekwBE2r5MOEmVUg0S1BNepJpJCASU9ilekBCdSThyBPjwQ2DaNGYSyGKxZv9xWk4O8MgjXecnNiIvT79xNJtJACLRuZWzG8ULElKdoSMeq55bdjmyojGSV79SCRJyc/UH6yZD3bhHz25kdOByQ4Oxk6Fk+k4ns05CPB6P9f3fJTsHRVuVSfB4lOym/Nvvd7a7UTDoziBBnpw0NFgXIBldDE1KNZNgx5iEWIupAUqQ0NysBJ9GxiTIbKtcX8TKIMHp7kZOvbZZ8vMxu8/k5iqf4fHj5jNCaj/6kfJ9kd89OSWqFD27UW0tsGyZsu/Jzz4TgoQMKCK5NZNgB7PrJACRmSfsmt0omtszCUAkSLDiYCC7G6kXT3JCrExCa6ux7kb19cq+YnV3I6syCXayc7yDVUFStEDA2e5GgYD7g4TycmvKVFOT3PZmMwIDBwKXXKJM72lGvK596lnY9IIEIZQgIF53o6Ym7TTRVmYSnB64DETavkw6n0j1eCsvvDQ3K59jqu3F+ecrv/fuVX4nyiTImd/kTEhAZgRpDBIyQE8KEswM5lMHCYB7Zjey4nVTfe5hw4CKCqBfv9TLJA++gLP7od4YlmRmNzpyRPnbSHejZD4Hq66k28nu2Y3seG4jQYLXa193o1NPFTh48HjiDZOkXrHY7MBlQJm9bOBAa8tmlNkTN78fmDnT/OsaGbgcK5MAKEGA3orMQCSToM7mpRokRM9k5XSQ0BO7G8ms0LFj1gQJUqLuRvJ2mWk4fjyzuhtlQBHJTBecTGXm6pp8jPxSpjuT4OYgIRAAnn469fIA2oWTnNwP9Rp3o92NsrOBXbuUv410N0rmM7Zq4LKd7Oxu5GQmwc4g4corgQMHWgGYnM84juxs5UqjW7obJUt+5k5M4wkkP7uRXKOnsVEJzuKNSYgVJJj5fkd3GXZ6TIJs+zLpomOqx1v5eR47pnznrDpBNzomQQYJHR2Z1d0og3aRnouZhPjkFQKZzuPAZXuo0/hu6G4kr8QCxjMJWVmRlb6T6W6UzoHLdrKzu5FdmZRAwNjAZTfXeyypjD1Sz8/uVJBg57iseIwOXI6VSaivj2wrxcskqMckmGmT3ZZJyOQxCalmEqzqbiQlChI6OpSAVN3dSGYSMqH+u/kpZ/egN7iquzKTSZCpU7mCs5VToGZ6JsFKVkyBagXZuKvrJhiMDEhLlEmQs2DJq4rxJHMSZNeVdCvZ1SVI/dxOZRIyMUhI5XuuDgyYSYhQT4EaXa/yxF8vSIjOJKjXQ7BjdiOjM3fZoSdmEtTdjaxagBBQ9kWfL/YUqIDyepmaSciAIlJP6m5k5r3KBk8dJGT6wOVUZ/+wgwwSUl1RN1XyIK2ewUqd6UmUSQCUAMHIe0gmSBg6VFnc0Kn+4UakY50Eq5+7vDxxQBcI2DcjlJ1SyRiqT3J6WibBaHcjvfVhPJ7EmYSmJm2mMdUgQa+7kd596dITxyRED1y28mKGenpVSWYSACVIyNRMgotOQSgWpxuUdFKfHBudxjQ6hWzlbB+ZPnDZSnKdBHklzCnyhEhdBvXnk2h2I8D4XPDJnAQFAsnPDpNu6Vpx2Uo/+UnibebPT24RMLcwO4Uo4I5MQirlT0W8fS3eOgkej7KfyHFJ6vtl90WZSaisjNwXCES6M1o1cFn9f7oVFSnvw+pVxO1kxWJqfr8SAHZ2pjdIkCujy9uZSSBLeTyRq7huOmm0g5mTY59PCRRkJqGuzlh/82TKk6lToFpJrpMQfSUs3eSJbqwgIdHsRoDxIMHOQNAJ6ZjdyOogwcjFAjdnb+JJJfuiDgyc6mrlVHcj9dSk0WR3I71MAqBMXfnHPyp/R3+v5XFWb+CyXITNTF3rdTcCtOOq0ik7G/j5z627mJYOVrTFubmRi4lWfmeSySR0dGRWJqGbX5fuPpy6YpNuZrvZFBUpQYIQSiPQq5c15ZEH8XRnEpxK48fjtjEJbsskZAI7uxu5MbB1u1T2L9kXGnA+k5Du70dlJXDrrfoLM8pBwbGmlr3yysgVdDNBglXrJOi9fjr1759Z31WrggQ5cYWVFzNycoyPSZDrJHi9zgSIyermp5zdh51Xrd3EbDebwkIlSJCpRKsyCX36AGPGAIMHd73P5wO+/33gjDOsea3o5wbc1Yi7JUhI1N3IyJiEZIOE7vK9y8RMQneWardC+V3oaQOXPR5g4kT9evP5ItNO6t2fnw9Mn65/v8yW6gUJcqCxVQOX5d9kjBV1lpdnT5AQCMRecRlQAgh1JkFv5i23ypBiUne7ohmL2ZPjwkIlg5DM9JZG5OQA99yjf5/HA1x3nTWvo/fc6iuFbiDXSXA6SJCNu5lMgnys0f7r3e17l4ljErqzVLMvgYAyW4tT3Y3cGER7vZEgIVa9XnSR0o5FZyK8XmUF3VAIKCuL3K4OwqzMJLip3txOBlepXH1XZxLS0d1ITs3d1qad3SiTuo5zF80QbmyM7SBnzjETJDQ0AEePKv9bFSQ4KSvLXVcb3JZJMDO7kTzAG90/uluQkI7ZjRgkGJfq/hWvb346uPH7oQ4SYpUrKwv47ne7jjXz+YDt25W/1eNc1PVr5rvDTELqfL7U97O8vPSOSZDZKL3uRm46tsfDXTRDuLExtouZK+hyTIK8SmDVmAQnWdEoWkkdJDhZLr0xCT6f/u3Rku1uJJ8rUxr0REaMAH74Q3sGLHJMQvJkQMXuRtYxkkmIxecDduxQrjj36RO5XX1Cye5GzvB6Uz/uqDMJVrZTekHC8ePaVZ7lGAXZ3chNx/Z4uItmiJ6SSQBSzyT4/fqzEWUaN2YS5BzPbhu4DEQ+cyOZBKPdjdx4EpQKv1+5gmrHgDlmEpKX6sUfp4MENx6XEo1JiMfrVU72Bg7UfkdSnUkqepFQN9ab21kVJMh9I52ZBJm9ACLHUDcd2+PhLpohetKVBzOZhMJCJVo/dEjpSpIJswYk4sYxCaGQ892NPB7lRDS6DLLLkZFMQk/tbmQnjklIXqYPXHbj90OdSUh2X5RtR/SUulaOSWAmwRyrggQpHUGCfD05Pbu8nd2NyHJubIzt4vMl3xDLK8M7d3aPrkaAUgduOuGSmQSngwRAaeBjBQl2zG7UE753qbJrxeXuzIqBy+rf6ebGK+Jeb2RmmWS/t3J7q4OE6MXTGCQkb/Bg4PTTU3sO9YxV6VhMze9XfvQyCZlyTGFzniHc2BjbxWwmAVCChKFDrS+TE2bNAvr1c7oUEXJMgtPdjYD4QUK8sg0YAAwZAhQUGHsdN8xnnimYSUie3K/MZj7lyWtPW0wtHnV3IzNjEgCgqkp7e6pBQnR3IwYJyfvGN5SfVKQ7SMjP7xokMJNAtuhJVzR9PnNjEgClu1F3ySSceaa7VsR0y+xGgNLwRp9YxVogSW3ECGDpUuPl70nfu1RxTELy5LijVIMEpzMJbvp+yMXUAPdkEqK7G8nP2+l2tKdJZ3ej48eVfcXv13Y3YiaBbMFMQnzqgajdYfpTN3LLOgmAfgMvBy5bWTZe8TOOmYTkZWWltm+5IZPg8bhrDJi6PpO92OT1Kleboy802TUmIVNOFLsLdZCQjkxCdrZyn8wkeDycApVs0pOCBDOZhNzc5AelUnLclEkIBLoeYI10N0qW2XU7eiKOSUiembZOLRDQz6qli7rrjFtEL1yW7GOjZzYCrB2TwNmNnCODBI/H2gAtJ0fp4iZX5QYiQYI6k5CXx8XUyCY96cqDmak/PZ5INoFBgj3cFCTonRgZGbhshtvWq3ArdjdKXnZ2avtWIOBcVyPAnUFCKpmEkhLgtNO63i4zNWZPLuXFBlk+ZiidIcckZGdbG1jL76A6m9DRoex/6iAhPz/zMgkZUkzqSVcezE79WVgIHDnCIMEu6tmNnD5p9vu7pnftyCQADBKMYpCQvFT3rZNPBvbvt648yaqsVGadcZNUgoS77or9nKl2DcvKUq42qwMrtivpJTMJVrdRMvj4r//yYOzYHMycqe1uJISSbcjOZiaBbOLGAWJ2Mdu9Q2YSusvAZbfx+dyxTgJgfgpUM9x4tdSNCguV2aMqKpwuSeZIdS2U8eOB226zrjzJGjcOeOwx515fT3TXnmTEG18RCKR2cslMgvPkybzVY3hGjwZuvx3o2xd45x0lraAOEgBtkMBMAlmuJ2US+vQBevdO/nHsbmQvtw1cNjMFqhlWLOLTE+TkAE895XQpMktRkfHVv8kY9XfVyhMxeUXYLPUgbwYJzpDHDaszCT4f8M1vAgcPCnz2mRJlqmc3ApTjUyZmEhgkZIielElYsMBcf8HCQuULKU8WyVoyk+CGdRIKC4GmJu1tdgUJhYU8kSN7fOc7wJQpTpeie0klkxBPIKC0fWbpDVh2uh3taTweJZtgV5fI3FylG2wopB24DCgXUeSFto4O7ZoNbsYgIUPIxsRNU83ZxezVn6oqYNCgnlFHTpAHuI4O5w9uP/hBZFVVya7uRkuWMPAke7htVfXuIJUxCfEEAl3bnGToLaLmdDvaE+Xm2jdlsBzzcOxY7CCBmQSyhc/nvvmo3ebCC5Ufsoc84LohSNBbMXnQIGW1bauv+htdnZmInJfKFKjxpDqLFIMEd7A7kwAoWe5QqOuYBDn5B8ckkOU4wwo5Te5/7e3uPLj16wc88YTTpSAiJ9nZ3SgUMv94djdyB/WCanY9t1w8TU6BCijZaNkNqbMzc4IE7qIZgjOskNPkAe74ce6LRORO6ulFrZ4LP5UTO2YS3CE/3761RWSQINdFiO5ulJ3NTALZhJkEchqDBCJyO9lOWX0SlpeXeiYhen0EtqPp94MfpDYAPR4ZJNTVKb+juxsJwTEJZBNmEshp6kaN+yIRuZFsm6wOEq67TrlAYpZed6NMOVHsTqqq7HvueJmEYDCSRWAmgSzHIIGcpm7UeHAjIjey6wS8tDS1x6tXbJbdoHhM715ycpTPVo5JiO5u1NKSeZkE7qIZgt2NyGnMJBCR29nV3ShVeistsx3tXjweIBgUmkxC9IrLmZZJ4C6aIZhJIKcxSCAit3NrVx52N+oZcnIE6uuVVJHewGVmEsgWXm/m7FTUPamvfDBIICI3smtMQqrU3Y2YSei+cnNFzDEJcsVlZhLIcswkkNOYSSAit3PrVXr1hT7ObtR9BYMiPLtRVlbX7kaZlknIkFiGTj9dmT6LyCkMEojI7dw6JoGZhJ4hGAT27VP+Vo9JCAYzc0xChhSTxo5VfoicwiCBiNzOrd2NuJhazxAMCrS1KYOYs7OBoiLl7169lH2yo0MJEjIlk8BdlIgMYZBARG7n1u5GegOX2Y52P8FgpMtHVhZQXg6sWAEMGBDpbhQKuS+IjYW7KBEZwoHLROR2bu1uxExCz6AOErKzld+9eyu/s7Ii3cbdFsTGwl2UiAxRN2qZ0sARUc/i5kwCg4TuTy9IkNSBa/R9buWyWJuI3IrdjYjI7dw6JmHyZKCpSfmbQUL3JYOErKzIytqSOjBwWxAbi8u+RkTkVuxuRERuFz3NqFuMHBn5263ZDkpdbm4kSIimvs1tQWwsPNQTkSHMJBCR28m2yc3dOZhJ6L5ycpQgQW//y8RMAndRIjKEQQIRuV0mXKVnkNB9ye5GekECMwlE1G0xSCAit3PrmAQ1t3aJotTF627ETIJJy5Ytw6BBg5CTk4Px48fjww8/jLnt559/jiuuuAKDBg2Cx+PBE088kfJzElFiXm9kIBaDBCJyo0w4AWc72n0xk2CxF198EfPmzcOiRYvwySefYNSoUZg6dSoOHDigu/2xY8cwZMgQPPTQQygvL7fkOYnImOjFgIiI3CQTMgnsbtR9cUyCxR5//HHMmDEDN9xwA0aMGIHly5cjNzcX//u//6u7/dixY7FkyRJcddVVCAQCljwnERnDIIGI3IxjEshJsrtRoiDBzUGsmqPFbG9vx/r163HnnXeGb/N6vZg0aRJqa2vT9pxtbW1oa2sL/9/Q0AAACIVCCIVCpsqRilAoBCGEI6/dU7COzfH5PCdWjBRIVHWsY/uxju3HOraflXXs8QBCeOD1Jm6jnCSEB0baUatwP7ZfKBRCdraA1yvg8wGhkNDc7/PJzx3weJzdP43uB44GCYcOHUJnZyfKyso0t5eVleGf//xn2p5z8eLFuPfee7vcfvDgQbS2tpoqRypCoRDq6+shhICXlxpswTo2p6OjCO3tHtTVNeLAgc6427KO7cc6th/r2H5W1vGRI160txeipaUNBw60WFRCax096kN7ewGamlpw4EBb4gdYgPux/WQde71FaG8P4cCBJs39R4960N5eBACoq2tAMOhclNDY2GhouwxJeNjrzjvvxLx588L/NzQ0YMCAASgtLUVhYWHayxMKheDxeFBaWsovs01Yx+bk5XnQ3g6UlvrRt2/8bVnH9mMd2491bD8r67izE/D7PSgu9qNv3wKLSmit+np1GdPzmtyP7SfruFevHBQXe9C3b67m/mBQ+dwBoKysJG2fvZ6cnBxD2zkaJJSUlMDn82H//v2a2/fv3x9zULIdzxkIBHTHN3i9Xse+TB6Px9HX7wlYx8mTS81nZXkM9adlHduPdWw/1rH9rKrj7GyljfL7jbVRTpBlNNqOWoX7sf08Hg/y8jwn9j+P5j6/PzKzldP7p9F9wNE9xe/3Y8yYMXj77bfDt4VCIbz99tuorq52zXMSkSITphckop6LA5fJafn5SkAQLROnQHW8mPPmzUNNTQ3OPvtsjBs3Dk888QSam5txww03AACuu+46VFZWYvHixQCUgcmbN28O/717925s3LgR+fn5OOmkkww9JxGZIxs2HtyIyI0yaQpUNwcyZN4NNwgEg54ut6v3yUz57B3/Gk2fPh0HDx7EwoULsW/fPowePRpvvfVWeODxzp07NWmRPXv24Mwzzwz//+ijj+LRRx/FhAkTsGbNGkPPSUTmcApUInKzTMh2MpPQvQ0bpv/ZKl3MgOPH3R3EqrmimHPmzMGcOXN075Mn/tKgQYMghNDd1uhzEpE5DBKIyM0yKZPAdrTnkUGCm4NYNe6iRGQYuxsRkZtlUpCQKSeKZB25oJqb9081HuqJyDBmEojIzWQb5eaTMGYSei45s1WmfPYZUkwicgMGCUTkZtnZQEUF0K+f0yWJjUFCz5WVlVkZJBfH2kTkNgwSiMjNfD7g6aedLkV8DBJ6ruxsd2e5onEXJSLDGCQQEaWGQULPlWmZBO6iRGSYvAKSSY0cEZGbMEjouZhJIKJui5kEIqLU5OcDkycDJ5/sdEko3TItk5BB8QwROY1BAhFRarxeYO5cp0tBTmAmgYi6LQYJRERE5mRaJoGHeiIyjIupERERmZOVxUwCEXVTzCQQERGZw+5GRNRtMUggIiIyJ9MyCRlUVCJyGoMEIiIic4qKgKYmp0thHIMEIjIsKwvweJQfIiIiMu6664CODqdLYRyDBCIyzOdjFoGIiMiMnBzlJ1PwcE9EhjFIICIi6hl4uCciwxgkEBER9Qw83BORYVlZDBKIiIh6Ah7uicgwZhKIiIh6Bg5cJiLDzjlHmcKNiIiIujcGCURkWL9+yg8RERF1b+w4QEREREREGgwSiIiIiIhIg0ECERERERFpMEggIiIiIiINBglERERERKTBIIGIiIiIiDQYJBARERERkQaDBCIiIiIi0mCQQEREREREGgwSiIiIiIhIg0ECERERERFpMEggIiIiIiINBglERERERKTBIIGIiIiIiDQYJBARERERkQaDBCIiIiIi0shyugBuJIQAADQ0NDjy+qFQCI2NjcjJyYHXyzjODqxj+7GO7cc6th/r2H6sY/uxju2XSXUsz2/l+W4sDBJ0NDY2AgAGDBjgcEmIiIiIiKzX2NiIoqKimPd7RKIwogcKhULYs2cPCgoK4PF40v76DQ0NGDBgAHbt2oXCwsK0v35PwDq2H+vYfqxj+7GO7cc6th/r2H6ZVMdCCDQ2NqKioiJu1oOZBB1erxf9+/d3uhgoLCx0/Y6W6VjH9mMd2491bD/Wsf1Yx/ZjHdsvU+o4XgZBcnenKSIiIiIiSjsGCUREREREpMEgwYUCgQAWLVqEQCDgdFG6Ldax/VjH9mMd2491bD/Wsf1Yx/brjnXMgctERERERKTBTAIREREREWkwSCAiIiIiIg0GCUREREREpMEggYiIiIiINBgkuMyyZcswaNAg5OTkYPz48fjwww+dLlLGuueee+DxeDQ/p5xySvj+1tZWzJ49G3369EF+fj6uuOIK7N+/38ESu99f//pXXHLJJaioqIDH48Grr76quV8IgYULF6Jfv34IBoOYNGkSvvrqK802R44cwbXXXovCwkIUFxfjxhtvRFNTUxrfhbslquPrr7++y349bdo0zTas4/gWL16MsWPHoqCgAH379sVll12GLVu2aLYx0j7s3LkTF110EXJzc9G3b18sWLAAx48fT+dbcS0jdfztb3+7y7784x//WLMN6zi2X/7ylxg5cmR48a7q6mqsWrUqfD/34dQlquPuvg8zSHCRF198EfPmzcOiRYvwySefYNSoUZg6dSoOHDjgdNEy1mmnnYa9e/eGf957773wfT/5yU/w+uuv4+WXX8batWuxZ88eXH755Q6W1v2am5sxatQoLFu2TPf+Rx55BD//+c+xfPlyfPDBB8jLy8PUqVPR2toa3ubaa6/F559/jtWrV+NPf/oT/vrXv2LmzJnpeguul6iOAWDatGma/fp3v/ud5n7WcXxr167F7Nmz8f7772P16tXo6OjAlClT0NzcHN4mUfvQ2dmJiy66CO3t7fj73/+OX/3qV1ixYgUWLlzoxFtyHSN1DAAzZszQ7MuPPPJI+D7WcXz9+/fHQw89hPXr1+Pjjz/G+eefj0svvRSff/45AO7DVkhUx0A334cFuca4cePE7Nmzw/93dnaKiooKsXjxYgdLlbkWLVokRo0apXtfXV2dyM7OFi+//HL4ti+++EIAELW1tWkqYWYDIFauXBn+PxQKifLycrFkyZLwbXV1dSIQCIjf/e53QgghNm/eLACIjz76KLzNqlWrhMfjEbt3705b2TNFdB0LIURNTY249NJLYz6GdZy8AwcOCABi7dq1Qghj7cObb74pvF6v2LdvX3ibX/7yl6KwsFC0tbWl9w1kgOg6FkKICRMmiFtuuSXmY1jHyevVq5d49tlnuQ/bSNaxEN1/H2YmwSXa29uxfv16TJo0KXyb1+vFpEmTUFtb62DJMttXX32FiooKDBkyBNdeey127twJAFi/fj06Ojo09X3KKadg4MCBrG+Ttm/fjn379mnqtKioCOPHjw/XaW1tLYqLi3H22WeHt5k0aRK8Xi8++OCDtJc5U61ZswZ9+/bF8OHDcfPNN+Pw4cPh+1jHyauvrwcA9O7dG4Cx9qG2thZnnHEGysrKwttMnToVDQ0NmquMpIiuY+n5559HSUkJTj/9dNx55504duxY+D7WsXGdnZ144YUX0NzcjOrqau7DNoiuY6k778NZTheAFIcOHUJnZ6dmRwKAsrIy/POf/3SoVJlt/PjxWLFiBYYPH469e/fi3nvvxbnnnovPPvsM+/btg9/vR3FxseYxZWVl2LdvnzMFznCy3vT2YXnfvn370LdvX839WVlZ6N27N+vdoGnTpuHyyy/H4MGDsW3bNtx111244IILUFtbC5/PxzpOUigUwq233opzzjkHp59+OgAYah/27dunu6/L+yhCr44B4JprrkFVVRUqKirw6aef4vbbb8eWLVvwhz/8AQDr2IhNmzahuroara2tyM/Px8qVKzFixAhs3LiR+7BFYtUx0P33YQYJ1G1dcMEF4b9HjhyJ8ePHo6qqCi+99BKCwaCDJSMy76qrrgr/fcYZZ2DkyJEYOnQo1qxZg4kTJzpYssw0e/ZsfPbZZ5rxSmStWHWsHidzxhlnoF+/fpg4cSK2bduGoUOHpruYGWn48OHYuHEj6uvr8fvf/x41NTVYu3at08XqVmLV8YgRI7r9PszuRi5RUlICn8/XZeaB/fv3o7y83KFSdS/FxcU4+eSTsXXrVpSXl6O9vR11dXWabVjf5sl6i7cPl5eXdxmIf/z4cRw5coT1btKQIUNQUlKCrVu3AmAdJ2POnDn405/+hHfffRf9+/cP326kfSgvL9fd1+V9pIhVx3rGjx8PAJp9mXUcn9/vx0knnYQxY8Zg8eLFGDVqFJYuXcp92EKx6lhPd9uHGSS4hN/vx5gxY/D222+HbwuFQnj77bc1fd/IvKamJmzbtg39+vXDmDFjkJ2dranvLVu2YOfOnaxvkwYPHozy8nJNnTY0NOCDDz4I12l1dTXq6uqwfv368DbvvPMOQqFQuHGl5Hz99dc4fPgw+vXrB4B1bIQQAnPmzMHKlSvxzjvvYPDgwZr7jbQP1dXV2LRpkyYgW716NQoLC8NdEXqyRHWsZ+PGjQCg2ZdZx8kJhUJoa2vjPmwjWcd6ut0+7PTIaYp44YUXRCAQECtWrBCbN28WM2fOFMXFxZpR8WTc/PnzxZo1a8T27dvFunXrxKRJk0RJSYk4cOCAEEKIH//4x2LgwIHinXfeER9//LGorq4W1dXVDpfa3RobG8WGDRvEhg0bBADx+OOPiw0bNoh///vfQgghHnroIVFcXCxee+018emnn4pLL71UDB48WLS0tISfY9q0aeLMM88UH3zwgXjvvffEsGHDxNVXX+3UW3KdeHXc2NgobrvtNlFbWyu2b98u/vKXv4izzjpLDBs2TLS2toafg3Uc38033yyKiorEmjVrxN69e8M/x44dC2+TqH04fvy4OP3008WUKVPExo0bxVtvvSVKS0vFnXfe6cRbcp1Edbx161Zx3333iY8//lhs375dvPbaa2LIkCHiW9/6Vvg5WMfx3XHHHWLt2rVi+/bt4tNPPxV33HGH8Hg84v/+7/+EENyHrRCvjnvCPswgwWV+8YtfiIEDBwq/3y/GjRsn3n//faeLlLGmT58u+vXrJ/x+v6isrBTTp08XW7duDd/f0tIiZs2aJXr16iVyc3PFd7/7XbF3714HS+x+7777rgDQ5aempkYIoUyDevfdd4uysjIRCATExIkTxZYtWzTPcfjwYXH11VeL/Px8UVhYKG644QbR2NjowLtxp3h1fOzYMTFlyhRRWloqsrOzRVVVlZgxY0aXCwms4/j06heAeO6558LbGGkfduzYIS644AIRDAZFSUmJmD9/vujo6Ejzu3GnRHW8c+dO8a1vfUv07t1bBAIBcdJJJ4kFCxaI+vp6zfOwjmP74Q9/KKqqqoTf7xelpaVi4sSJ4QBBCO7DVohXxz1hH/YIIUT68hZEREREROR2HJNAREREREQaDBKIiIiIiEiDQQIREREREWkwSCAiIiIiIg0GCUREREREpMEggYiIiIiINBgkEBERERGRBoMEIiLKGB0dHU4XgYioR2CQQERErrVy5UpcdNFFGDRoEPLz83Huuec6XSQioh6BQQIRUYa4/vrrcdlll3W5fc2aNfB4PKirq0t7mey0ePFizJgxAxdffDHeeOMNbNy4EW+++abTxSIi6hGynC4AERFRtH/961948MEH8f777+O0005zujhERD0OMwlERN3QK6+8gtNOOw2BQACDBg3CY489prl/0KBB8Hg8+OSTT8K3dXR0oKysDB6PBzt27Ajf/t577+Hcc89FMBjEgAEDMHfuXDQ3N2ue6/7778fVV1+NvLw8VFZWYtmyZXHLFwqFcN9996F///4IBAIYPXo03nrrrfD9f/7znzF06FA88MADKC0tRUFBAS6//HJ8/fXX4W3uuecejB49Gk8//TQGDBiA3NxcXHnllaivrw9v89FHH2Hy5MkoKSlBUVERJkyYoHnPdXV1GDduHIqKihAMBnHWWWdh1apV4fv1sjcrVqxAcXFx+P/Ozk7ceOONGDx4MILBIIYPH46lS5fGff9ERG7HIIGIqJtZv349rrzySlx11VXYtGkT7rnnHtx9991YsWKFZrvKyko888wz4f9XrlyJ7OxszTbbtm3DtGnTcMUVV+DTTz/Fiy++iPfeew9z5szRbLdkyRKMGjUKGzZswB133IFbbrkFq1evjlnGpUuX4rHHHsOjjz6KTz/9FFOnTsV3vvMdfPXVVwCAgwcP4h//+Ad27dqFVatW4d1338X+/ftx2WWXQQgRfp6tW7fipZdewuuvv4633noLGzZswKxZs8L3NzY2oqamBu+99x7ef/99DBs2DBdeeCEaGxsBAH6/H3fddRc++ugjfP7555gyZQquuOIKtLW1Ga7vUCiE/v374+WXX8bmzZuxcOFC3HXXXXjppZcMPwcRkesIIiLKCDU1NcLn84m8vDzNT05OjgAgjh49KoQQ4pprrhGTJ0/WPHbBggVixIgR4f+rqqrEHXfcIfr06SOampqEEEJMnDhR3H333QKA2L59uxBCiBtvvFHMnDlT81x/+9vfhNfrFS0tLeHnmjZtmmab6dOniwsuuCDme6moqBAPPPCA5raxY8eKWbNmCSGEWLRokfD5fGLnzp3h+3fs2CF8Pp9YvXq1Zpuvv/46vM2qVauE1+sVe/fu1X3dzs5OUVBQIF5//fUu94VCIfHMM8+I3Nxc0djYKIRQ6vzSSy/VbPfcc8+JoqKimO9NCCFmz54trrjiirjbEBG5GTMJREQZ5LzzzsPGjRs1P88++6xmmy+++ALnnHOO5rZzzjkHX331FTo7O8O3lZWV4dvf/jZeeOEFbNu2DZs3b8Yll1yiedw//vEPrFixAvn5+eGfqVOnIhQKYfv27eHtqqurNY+rrq7GF198ofseGhoasGfPHt0yqh8zYMAADBgwIPx/VVUV+vfvj82bN4dvGzhwICorKzWvGwqFsGXLFgDA/v37MWPGDAwbNgxFRUUoLCxEU1MTdu7cqXlt2TXr9ttvxyuvvIL8/HzdsseybNkyjBkzBqWlpcjPz8czzzzT5TWIiDIJBy4TEWWQvLw8nHTSSZrb1P30kzVz5kwsXLgQX375JWpqarp0N2pqasJNN92EuXPndnnswIEDTb9uIr169Yp5n8fjMfw8NTU1OHz4MJYuXYqqqioEAgFUV1ejvb1ds92bb76Jo0ePYvny5fjpT3+K8847D4FAwNBrvPDCC7jtttvw2GOPobq6GgUFBViyZAk++OADw+UkInIbBglERN3MqaeeinXr1mluW7duHU4++WT4fD7N7ZMnT8bNN9+M5cuX45NPPgn31ZfOOussbN68uUtgEu3999/v8v+pp56qu21hYSEqKiqwbt06TJgwQVPGcePGAQBOOeUU7Nq1C7t27QpnE/7973/j66+/xogRI8KP2blzJ/bs2YOKiorw63q9XgwfPjz8nE899RQuvPBCAMCuXbtw6NChLmWqqqpCVVUVHn74YRQXF2PTpk04++yz475ndbn/4z/+QzMWYtu2bYYeS0TkVgwSiIi6mfnz52Ps2LG4//77MX36dNTW1uLJJ5/EU0891WVbj8eD5cuXY8eOHRg6dCg2btyouf/222/HN77xDcyZMwc/+tGPkJeXh82bN2P16tV48sknw9utW7cOjzzyCC677DKsXr0aL7/8Mt54442YZVywYAEWLVqEoUOHYvTo0XjuueewceNGPP/88wCU4OXUU0/FNddcg5/97GcAgFtuuQWjR4/G+eefH36enJwc1NTU4NFHH0VDQwPmzp2LK6+8EuXl5QCAYcOG4Te/+Q3OPvtsNDQ0YMGCBQgGg+HHb9iwAbt378aIESPQ0tKCJ554Avn5+Rg2bFh4m1AohNbW1vD/ctXntrY2BAIBDBs2DL/+9a/x5z//GYMHD8ZvfvMbfPTRRxg8eHDCz4qIyK0YJBARdTNnnXUWXnrpJSxcuBD3338/+vXrh/vuuw/XX3+97vaTJ0+O+VwjR47E2rVr8d///d8499xzIYTA0KFDMX36dM128+fPx8cff4x7770XhYWFePzxxzF16tSYzzt37lzU19dj/vz5OHDgAEaMGIE//vGP4ZNzr9eL1157DXPnzsWECRPg9XoxefJk/OIXv9B0NzrppJNw+eWX48ILL8SRI0dw8cUXa4Kh//mf/8HMmTNx1llnYcCAAXjwwQdx2223he9vaWnB3XffjS+//BLZ2dkYNWoU3njjDRQVFYW3ef311zWBhTR8+HDs2LEDN910EzZs2IDp06fD4/Hg6quvxqxZszRTqRIRZRqPEKq55IiIiJI0aNAg3Hrrrbj11lvT+rr33HMPXn311S7Zj3Soq6vD6NGjNetJEBF1J5zdiIiIKEkej8fwwGYiokzEIIGIiChJRUVF4WlWiYi6I3Y3IiIiIiIiDWYSiIiIiIhIg0ECERERERFpMEggIiIiIiINBglERERERKTBIIGIiIiIiDQYJBARERERkQaDBCIiIiIi0mCQQEREREREGv8fR9Jsak8mtfUAAAAASUVORK5CYII=\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["\n","ДЕТАЛЬНАЯ СТАТИСТИКА:\n","Минимальная ошибка: 0.084998\n","Максимальная ошибка: 0.300929\n","Средняя ошибка: 0.160974\n","Медианная ошибка: 0.160995\n","Стандартное отклонение: 0.029058\n","\n","============================================================\n","ОБНАРУЖЕНИЕ АНОМАЛИЙ ЗАВЕРШЕНО\n","============================================================\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"k3bY2eMNWqTj"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"IjDOTZkCXavJ"},"execution_count":null,"outputs":[]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"T4","provenance":[],"mount_file_id":"1YENc_IKrA7dsTotdotdM5wXAFsWO-sAY","authorship_tag":"ABX9TyOxIBrgBh8lGnDux0kLC2tQ"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} \ No newline at end of file