ANLP_WS24_CA2/cnn_class.ipynb

546 lines
79 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## CNN 1b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load Packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"import torch.optim as optim\n",
"from torch.utils.data import DataLoader\n",
"from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
"from sklearn.metrics import accuracy_score, f1_score, confusion_matrix\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm import tqdm\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Datensatz laden und DatenLoader"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/michellegoppinger/Documents/Dokumente  Laptop von Michelle/Uni/Master/ANLP/ANLP_WS24_CA2/HumorDataset.py:56: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/utils/tensor_new.cpp:281.)\n",
" item = {'input_ids': torch.tensor(self.data[idx], dtype=torch.float)}\n"
]
}
],
"source": [
"data_path = 'data/embedded_padded'\n",
"BATCH_SIZE = 32\n",
"\n",
"# Definiere die Dataset-Klasse\n",
"class HumorDataset(torch.utils.data.Dataset):\n",
" def __init__(self, data):\n",
" self.data = data\n",
"\n",
" def __getitem__(self, index):\n",
" input_ids = torch.tensor(np.array(self.data[index][\"input_ids\"]), dtype=torch.float32) # (seq_len, embedding_dim)\n",
" label = torch.tensor([self.data[index][\"labels\"]], dtype=torch.float32) # (1,)\n",
" return input_ids, label\n",
"\n",
" def __len__(self):\n",
" return len(self.data)\n",
"\n",
"# Lade die vorbereiteten Daten\n",
"train_data = torch.load(data_path + '/train.pt', weights_only=False)\n",
"val_data = torch.load(data_path + '/val.pt', weights_only=False)\n",
"test_data = torch.load(data_path + '/test.pt', weights_only=False)\n",
"\n",
"train_dataset = HumorDataset(train_data)\n",
"val_dataset = HumorDataset(val_data)\n",
"test_dataset = HumorDataset(test_data)\n",
"\n",
"# DataLoader erstellen\n",
"train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n",
"val_loader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False)\n",
"test_loader = DataLoader(test_dataset, batch_size=BATCH_SIZE, shuffle=False)\n",
"\n",
"# Ableitung der Dimensionen aus den Daten\n",
"sample_input, _ = train_dataset[0] # Extrahiere input_ids\n",
"seq_len, embedding_dim = sample_input.shape\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### CNN-Modell definieren\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Single-Kernel CNN-Modell\n",
"class SingleKernelCNN(nn.Module):\n",
" def __init__(self, embedding_dim, num_classes=1, kernel_size=5, num_filters=100, dropout=0.5, use_highway=True):\n",
" super(SingleKernelCNN, self).__init__()\n",
" # Convolutional Layer mit Kernel \n",
" self.conv = nn.Conv2d(1, num_filters, (kernel_size, embedding_dim))\n",
" \n",
" # Optional Highway Layer\n",
" self.use_highway = use_highway\n",
" if self.use_highway:\n",
" self.highway = nn.Linear(num_filters, num_filters)\n",
" \n",
" # Fully Connected Layer\n",
" self.fc = nn.Linear(num_filters, num_classes)\n",
" \n",
" # Dropout zur Regularisierung\n",
" self.dropout = nn.Dropout(dropout)\n",
"\n",
" def forward(self, x):\n",
" # Eingabe x-Form: (batch_size, seq_len, embedding_dim)\n",
" x = x.unsqueeze(1) # Füge Kanaldimension hinzu: (batch_size, 1, seq_len, embedding_dim)\n",
" \n",
" # Convolution + ReLU\n",
" x = F.relu(self.conv(x).squeeze(3)) # Entferne die letzte Dimension nach der Convolution\n",
" \n",
" # Max Pooling über die Sequenzlänge\n",
" x = F.max_pool1d(x, x.size(2)).squeeze(2) # Reduziere auf (batch_size, num_filters)\n",
" \n",
" # Optionaler Highway-Mechanismus\n",
" if self.use_highway:\n",
" highway_gate = torch.sigmoid(self.highway(x))\n",
" x = highway_gate * F.relu(self.highway(x)) + (1 - highway_gate) * x\n",
" \n",
" # Dropout zur Regularisierung\n",
" x = self.dropout(x)\n",
" \n",
" # Fully Connected Layer für die Ausgabe\n",
" logits = self.fc(x)\n",
" return torch.sigmoid(logits) # Binäre Klassifikation\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### Training des Modells\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/michellegoppinger/.pyenv/versions/3.12.3/lib/python3.12/site-packages/torch/optim/lr_scheduler.py:62: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
" warnings.warn(\n",
"Epoch 1/30: 100%|██████████| 124/124 [00:24<00:00, 5.06batch/s, loss=0.619]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1, Train Loss: 0.6914, Val Loss: 0.6590\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 2/30: 100%|██████████| 124/124 [00:23<00:00, 5.28batch/s, loss=0.558]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2, Train Loss: 0.6490, Val Loss: 0.6382\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 3/30: 100%|██████████| 124/124 [00:24<00:00, 5.16batch/s, loss=0.555]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3, Train Loss: 0.6189, Val Loss: 0.6538\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 4/30: 100%|██████████| 124/124 [00:24<00:00, 5.07batch/s, loss=0.847]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4, Train Loss: 0.5968, Val Loss: 0.6346\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 5/30: 100%|██████████| 124/124 [00:23<00:00, 5.27batch/s, loss=0.435]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5, Train Loss: 0.5725, Val Loss: 0.6492\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 6/30: 100%|██████████| 124/124 [00:24<00:00, 5.17batch/s, loss=0.634]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 6, Train Loss: 0.5332, Val Loss: 0.6225\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 7/30: 100%|██████████| 124/124 [00:23<00:00, 5.27batch/s, loss=0.593]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 7, Train Loss: 0.5018, Val Loss: 0.6441\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 8/30: 100%|██████████| 124/124 [00:23<00:00, 5.27batch/s, loss=0.487]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 8, Train Loss: 0.4776, Val Loss: 0.6643\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 9/30: 100%|██████████| 124/124 [00:23<00:00, 5.22batch/s, loss=0.48] \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 9, Train Loss: 0.4288, Val Loss: 0.6483\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 10/30: 100%|██████████| 124/124 [00:24<00:00, 5.12batch/s, loss=0.328]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 10, Train Loss: 0.3805, Val Loss: 0.6563\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 11/30: 100%|██████████| 124/124 [00:23<00:00, 5.24batch/s, loss=0.373]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 11, Train Loss: 0.3523, Val Loss: 0.6816\n",
"Early Stopping ausgelöst!\n"
]
}
],
"source": [
"# Geräteauswahl: MPS (für macOS), CUDA (GPU), oder CPU\n",
"if torch.backends.mps.is_available():\n",
" device = torch.device(\"mps\") # Apple MPS für macOS\n",
"elif torch.cuda.is_available():\n",
" device = torch.device(\"cuda\") # NVIDIA CUDA\n",
"else:\n",
" device = torch.device(\"cpu\") # Fallback auf CPU\n",
"\n",
"# Initialisiere das Modell\n",
"model = SingleKernelCNN(embedding_dim=embedding_dim, num_classes=1, kernel_size=5, num_filters=100, dropout=0.5, use_highway=False).to(device)\n",
"\n",
"# Verlustfunktion und Optimierer\n",
"criterion = nn.BCELoss() # Binary Cross Entropy Loss\n",
"optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-4) \n",
"\n",
"# Lernraten-Scheduler\n",
"scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.5, patience=2, verbose=True)\n",
"\n",
"# Trainingseinstellungen\n",
"epochs = 30 # Maximalanzahl an Epochen\n",
"best_val_loss = float('inf')\n",
"patience = 5 # Geduld für Early Stopping\n",
"counter = 0\n",
"\n",
"\n",
"# Liste zum Speichern der Trainingsverluste\n",
"train_losses = []\n",
"\n",
"# Training und Validierung\n",
"for epoch in range(epochs):\n",
" model.train()\n",
" total_loss = 0\n",
" with tqdm(train_loader, unit=\"batch\", desc=f\"Epoch {epoch+1}/{epochs}\") as tepoch:\n",
" for texts, labels in train_loader:\n",
" texts, labels = texts.to(device), labels.to(device)\n",
" optimizer.zero_grad()\n",
" outputs = model(texts)\n",
" loss = criterion(outputs, labels)\n",
" loss.backward()\n",
" optimizer.step()\n",
" total_loss += loss.item()\n",
" tepoch.update(1)\n",
" tepoch.set_postfix(loss=loss.item())\n",
" \n",
" avg_train_loss = total_loss / len(train_loader)\n",
" train_losses.append(avg_train_loss) # Speichere den Trainingsverlust\n",
" \n",
" # Validierung\n",
" model.eval()\n",
" val_loss = 0\n",
" with torch.no_grad():\n",
" for texts, labels in val_loader:\n",
" texts, labels = texts.to(device), labels.to(device)\n",
" outputs = model(texts)\n",
" loss = criterion(outputs, labels)\n",
" val_loss += loss.item()\n",
" \n",
" avg_val_loss = val_loss / len(val_loader)\n",
" scheduler.step(avg_val_loss)\n",
"\n",
" print(f\"Epoch {epoch+1}, Train Loss: {avg_train_loss:.4f}, Val Loss: {avg_val_loss:.4f}\")\n",
"\n",
" # Early Stopping\n",
" if avg_val_loss < best_val_loss:\n",
" best_val_loss = avg_val_loss\n",
" counter = 0\n",
" torch.save(model.state_dict(), \"best_model.pth\")\n",
" else:\n",
" counter += 1\n",
" if counter >= patience:\n",
" print(\"Early Stopping ausgelöst!\")\n",
" break"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Trainingsverlust"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAHWCAYAAACVPVriAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdi5JREFUeJzt3QdcVeX/B/APeyigiAgi7okLJ+LeM83U3DmztEzLzNJKsywzzcwyLUvNzFGao8y9B6KCe+BCcbFUhiCb/+v79L/8WCrohcO9fN6v1xHOueee+9zz3Cvf+9zv+T4mqampqSAiIiIiMlKmWjeAiIiIiCgvMeAlIiIiIqPGgJeIiIiIjBoDXiIiIiIyagx4iYiIiMioMeAlIiIiIqPGgJeIiIiIjBoDXiIiIiIyagx4iYiIiMioMeAloicaNmwYypcv/0z3/eSTT2BiYoLC5Pr16+o5L1u2DAWFtEXadPz4cbVk1z5du+fMmYOCZu/evapt8lMfr0tDpHsvhYeHa90UIoPEgJfIQMkfv5ws6YMEMnznz59XwY8EqDnVsmVL/Pbbb6hYsaJa5HfZRlkDysctwcHBWjeRiJ6D+fPcmYi0I0FLesuXL8eOHTuybK9Ro8ZzPc7ixYuRkpLyTPf96KOP8MEHHzzX41PWgHf69Olo3bp1jkc4dYGuzuDBg2Honud1+SQLFy5E0aJFs2wvVqyY3h+LiPIPA14iA5U5aDly5IgKeJ8WzMTGxsLW1jbHj2NhYfHMbTQ3N1dLYZCUlJQnAZixiYmJQZEiRZ77OM/zunySPn36wMnJKU+OTUTaYUoDkRGTUcBatWrBz89PfYUtge6UKVPUbRs3bkS3bt1QunRpWFlZoVKlSvjss8+QnJyc4RiZcyXT53r+9NNP6n5y/0aNGuHYsWNPzeGV9bFjx2LDhg2qbXLfmjVrYuvWrVnaL+kYDRs2hLW1tXqcH3/8MdtjSqDfvHlzNQono3PVqlVLe54hISEq6JZR0cwCAgLUsb7//vu0bREREXj77bfh7u6u2la5cmXMmjUrQzCb/hzMmzcv7RzI6Ovj+kGWzLLLQ129ejUaNGgAOzs72Nvbo3bt2vj222/VbZJ3+/LLL6vf27Rpk6O0ldw8ts4333yDcuXKwcbGBq1atcLZs2ez7HPx4kUVHDo6Oqr+kX7atGlTtrnD+/btwxtvvAFnZ2eUKVMGT3Lr1i307NlTBcWy/zvvvIP4+PgctV/6SPpDXk/SplKlSuH111/HgwcPoO984jVr1qjXmIuLi2prjx49cPPmzSz7//nnn6o/5VxKIC0fSG/fvp3t+ezbty9Kliyp9pXX8IcffphlP3l9ynOX17qDgwOGDx+uPsRmtmLFirTHlT7q379/lvbp/n+Q1628nuT/Bzc3N3z11VfPfZ6ICprCMfRCVIjdu3cPXbp0UX/w5I+tBAG6YESCwwkTJqifu3fvxtSpUxEVFYXZs2c/9bgrV65EdHS0CigkAJA/kr169cK1a9eeOvp28OBB/PXXXyoIksBu/vz56N27N4KCglCiRAm1z4kTJ9C5c2e4urqqYFUC8U8//VQFBOmdO3cOL7zwAurUqaNul8DzypUrOHTokLpdnq8EbX/88QemTZuW4b4StJiZmaUFkRI4yL4SkMjzKlu2LA4fPozJkyfj7t27KphKb+nSpYiLi8Nrr72mHlcCi+cZ5ZXAfcCAAWjXrp0KssWFCxfUcxk/frz60DJu3Dh1viTY0qWrPG/aSubUGOnXN998Uz03Cbbbtm2LM2fOpL125Jw3a9ZMBUeSsiIBn5xfCVTXrVuHl156KcMxpZ+l3+T1JSO8j/Po0SP13OV1IM9TPoxJio68NnNC+kxe1xIEyv0DAwPVhxl5Lck5zMmo8P3797Nskw9MmVMaPv/8c/W6f//99xEaGqpeG+3bt8fJkydVkCl0bZEPgzNnzlQfvuR8SlukTbpjnj59Gi1atFDtk9eSBPJXr17F33//rR4nPQmKK1SooI7n7++Pn3/+WX0w0L1edG37+OOP1b6vvvoqwsLC8N1336nXT/rHFfJhQN5n8t6V/deuXauek3zQkv83iIxGKhEZhTfffDM181u6VatWatuiRYuy7B8bG5tl2+uvv55qa2ubGhcXl7Zt6NChqeXKlUtbDwwMVMcsUaJE6v3799O2b9y4UW3/+++/07ZNmzYtS5tk3dLSMvXKlStp206dOqW2f/fdd2nbunfvrtpy+/bttG2XL19ONTc3z3DMb775Rq2HhYU99tz8+OOPap8zZ85k2O7h4ZHatm3btPXPPvsstUiRIqmXLl3KsN8HH3yQamZmlhoUFJThHNjb26eGhoZm2Fd329KlSzP0gyyZZT6348ePV8dMSkp67HP5888/1fH37NmTmhM5fWxdu21sbFJv3bqVtt3X11dtf+edd9K2tWvXLrV27doZXicpKSmpTZs2Ta1SpUraNjkHct/mzZs/8TnpzJs3T+3/xx9/pG2LiYlJrVy5cpbnnLn9Bw4cUPv8/vvvGY65devWbLdnpnutZrdUq1YtbT9pg2xzc3NLjYqKStsubZbt3377rVpPSEhIdXZ2Tq1Vq1bqo0eP0vb7559/1H5Tp05N29ayZctUOzu71Bs3bmRok5zTzO0bMWJEhn1eeukl9V7UuX79unqtfv755xn2k9e+vHfSb9f9/7B8+fK0bfHx8akuLi6pvXv3fuL5IjI0TGkgMnIy8iijTJnpRqGEjOhJuSMZZZJRTvl69Wn69euH4sWLp63LfYWM8D6NjIRJGoCOjM7K1/e6+8po7s6dO9WIoYzy6Uh6QeZRJ91olaRoPG50VUavZJRORnR15Gt6+SpXnkf6r5/lecjzkvOhW6S90qb9+/dnOK6MSmcecX4e8lxkBFRGerUi51xGbnUaN24MLy8v/Pvvv2kjoDLiKqOButeNLPJNQqdOnXD58uUsX9mPGjVKjaQ/jTyGjOhLqoSOfM0uo55PI30nX/F36NAhQ9/J1/ryDcaePXty9PxlhFrOf/pFRvIzGzJkiPp2QkfaLG3XnScp/yYjvzK6LekVOpJGVL16dWzevFmty+irvK5GjBihvlFIL7uSfqNHj86wLq9XOffyzYyQb07kfSD9k/48SOpFlSpVspwHOTfp8/4tLS1Vn+fkfUxkSJjSQGTkJHiRP2KZydfSUkVBghfdH0udyMjIpx438x9nXfCbk3zJzPfV3V93XwkU5OttCXAzy7xNAlb5Wle+upWv1+UrcQlwJQAxNf3vM73kTsp2+dpd8pSFBL8SBMu+OhKsydfLjwtipV3pyVfL+iTBkbRRgnrpt44dO6rARb5yzi8SFGVWtWpV1S4h6SIyUC9fmcvyuPOUPmjO6Xm6ceOG6t/MgZ7ksz6N9J28buXr/ce1KSfka/+cXLSW+TxJm6XtunJx8lwe13YJeCWtR+gCS8mlzYknve/kQ6OcB+mf7PpRZE7rkJzqzOdbjinvAyJjwoCXyMilH8lNf+GL5KrKH0jJe5XRVhmFkpxAyd/LSR7q40bs/stayLv7Zvf8ZIRMRq5k1EwufpNgVvJOt2/fnvZYksMsI92SY+np6akCOAmC0wc38rxlhHDSpEnZPpYEfpkfOyckoMjuuWW+QFCCNWnftm3bsGXLFrXI6KKMJv766685eqxnfeyc0r02Jk6cqEZ0s5P5Q0lOz9PzkHbJ+fv999+zvV2fI/Faetp7R86D9Lm8drLbN3PJNX2+F4kKMga8RIWQXGkuX4PK15/pJyCQi3wKAglcJACX0cTMstsmI7kSvMoyd+5cfPHFF+oKdwmCJR1B91W9XNSkS2u4dOmSuhgtPQn8Hz58mHYffZERs+y+ItaNAqYno/Hdu3dXiwQvMuor1SlkNDW70U99PraQEcLM5FzpKiLo6vnKSKG+z5NUhpBUEwm20j9PqabxNNJ3kgYjF9PlR4Cd+TxJm+W1Kek5uueia7t8+EpPtulu153P7CphPAs5D9IWGVXP/AGNqDBjDi9RIaQb1Uk/ipOQkIAffvgBBaV9EkxJ6bI7d+6kbZeAQkaunnZVvYzgivTlrCQ/VkYkZWRXSn9JYClBcHqSPuDj46NGWLMbFZdau88ahEhetORr6pw6dSqtkoSOfAjJHMjrAijdc9HVsJX26POxdeScp8/BPXr0KHx9fdNyp+XDiJSzkiBcKldklv5xcqtr166qv6VSgI7klEv5u6eRvpNRa13KSnrSbzk9X7mtZqEjbZbzoTtPUqZNztWiRYsyvA7l9SuVNySXVzfyLB86lyxZoqpTPO8oq6ToyPtHKptkvr+sZ36NERUWHOElKoSaNm2qRv6GDh2qyjfJaJqUfypIX2NKvV1JSZARuzFjxqhgRkpMSa6jfO2vIykZktIgAYSMmkmupgTukpsotXkz5/vKBTpyuwS/mUtNvffee6qWrJQ5k1qncsGTXEQmJbkkoJH8zGeZlEAuSJKRZ3nMkSNHqjZKICT1YtPnT0sesgTwMiIo7ZdRWCknJQG8rvSY/C4BjZShkpxVuShR9n9c7mpOH1tHRpHlvMk5l0BNym1Jqbj0aR4LFixQ+0jpKrkgTUYppeSWfFiQOroSUD8LOZb0saRwSO1ouQhMXpc5mShFUnRkBF/KdcnrQ/KfZRRaRmLlgjYpB5b+YrjHkX7ObqY1SXXRlWUTUoJOzoGkychzl/Mk506eg5DHlj6S26VtUm5OV5ZMRsulvrCOlJmTY9WvX19doCejs/JakxSd9K/1nH7AmTFjhvr2Qo4hH+rk4jr59mb9+vXq+JKOQlToaF0mgojytixZzZo1s93/0KFDqU2aNFFlqEqXLp06adKk1G3btj21/JOufNXs2bOzHFO2S/mkp5Ulk7ZmJo8hj5Xerl27UuvVq6fKmFWqVCn1559/Tn333XdTra2tM+zz4osvqucg+8nPAQMGZCktJqSMlDxfacOKFSuyPS/R0dGpkydPVqWw5HhOTk6q3NacOXNUqamnnYPsypIJebyKFSuqY3p6eqpznfncrl27NrVjx46qnJXsV7ZsWVUq7u7duxmOtXjxYnUsKT+VkxJlOXns9M/p66+/TnV3d0+1srJKbdGihSobl9nVq1dThwwZokpYWVhYqDJdL7zwgnoOmcuSHTt2LDWnpDRXjx49VEk6OfdSqk1XWuxJr0udn376KbVBgwaqn6XUl5RPk9f2nTt3nrksWfrH1pUlW7VqlXqdSF/JY3Xr1i1LWTGxZs0a9RqWc+no6Jg6aNCgDGXfdM6ePatKjBUrVky9vqUU2scff5ylfZnL7+nOsfRfeuvWrVPl4KTMnizVq1dX77uAgICn/v/wuHNLZMhM5B+tg24iopySESupMJFdrilRfuS/y6xkMmqckxFjIioYmMNLRAWWlCZLT4JcqXOa3VS5REREj8McXiIqsCQ3VHJp5afksy5cuFBdbPa4smFERETZYcBLRAWWTLiwatUqBAcHq4uzvL29VcmxxxXVJyIiyg5zeImIiIjIqDGHl4iIiIiMGgNeIiIiIjJqzOHNhkznKbP9SLHu3E7jSURERER5T7JyZcbD0qVLq5kpn4QBbzYk2HV3d9e6GURERET0FDdv3lSzUz4JA95syMiu7gTa29tr3RyjkJiYqKaJ1U33SYaF/Wf42IeGj31o2Nh/+ifTo8sApS5uexIGvNnQpTFIsMuAV39vdFtbW3U++UY3POw/w8c+NHzsQ8PG/ss7OUk/5UVrRERERGTUCkTAu2DBApQvXx7W1tbw8vLC0aNHH7uvTCkqkXzmpVu3bhmSmKdOnQpXV1fY2Nigffv2akpSIiIiIip8NA9416xZgwkTJmDatGnw9/dH3bp10alTJ4SGhma7/19//YW7d++mLWfPnoWZmRlefvnltH2++uorzJ8/H4sWLYKvry+KFCmijhkXF5ePz4yIiIiICgLNc3jnzp2LUaNGYfjw4WpdgtTNmzdjyZIl+OCDD7Ls7+jomGF99erVKidGF/DK6O68efPw0Ucf4cUXX1Tbli9fjlKlSmHDhg3o379/vjwvIiIiYyJ/X5OSkpCcnKx1Uww2h9fc3FwNvvEc5owMaMo500eJWE0D3oSEBPj5+WHy5Mlp26SOmqQg+Pj45OgYv/zyiwpiZRRXBAYGIjg4WB1Dx8HBQaVKyDGzC3jj4+PVkv6qP92LUxZ6frrzyPNpmNh/ho99aPi07EN5zJCQEDx69CjfH9uYPjC4uLggKCiINf5zQVJTZdAyuwv9cvNe0DTgDQ8PV59y5ImkJ+sXL1586v0l11dSGiTo1ZFgV3eMzMfU3ZbZzJkzMX369CzbpXyIjB6T/uzYsUPrJtBzYP8ZPvah4dOiD+VvaNGiRdW3rDLiRpQf5BuF+/fv4/Tp0+oDV2axsbE5PpZBv2ol0K1duzYaN278XMeREWbJI85c101q5bEsmX7IpzD5T7pDhw4sx2KA2H+Gj31o+LTqQ/kGVEYly5Yty0EgPcwKxllcc0fiMHn91apVC1ZWVhlu030jX+ADXicnJ5WfkTlql3UZ9n+SmJgYlb/76aefZtiuu58cQ6o0pD+mp6dntseSE5j5JAr5D4V/GPSL59Swsf8MH/vQ8OV3H8o3sRKgycju06ZvpcdLSUlRP+Vc8jzmnC6HV35mft3n5n2g6Rm3tLREgwYNsGvXrgwvCFn39vZ+4n3//PNP9alz8ODBGbZXqFBBBb3pjymfAKRaw9OOSURERETGR/OUBkklGDp0KBo2bKhSE6TCgoze6qo2DBkyBG5ubirPNnM6Q8+ePVGiRIkM2+VTwNtvv40ZM2agSpUqKgD++OOPUbp0abV/QZOckoqjgfcRGh0HZztrNK7gCDNTftVBREREZDQBb79+/RAWFqYmipCLyiTtYOvWrWkXnUneRuah/4CAABw8eFBdVJadSZMmqaD5tddeQ0REBJo3b66OKRNbFCRbz97F9L/P427k/+oDuzpYY1p3D3Su9b90DCIiImNgDIM8MlGWDKzJkhN79+5FmzZtcO/ePYNPZbh+/boaSDxx4sRj00QLKs0DXjF27Fi1PO6Fklm1atVU8vfjyCiv5PZmzu8taMHumBX+yPwsgiPj1PaFg+sz6CUiIqOR34M8T7swTCa8+uSTT3J93GPHjqWVQs2Jpk2bqomypESqXLRG/7Ns2TL1wUEGJ/OaYX/UMOBPuPKmzy5k122T22U/IiIiQ6cb5Ekf7KYf5JHb9S39rKySLilX+6ffNnHixCyTauREyZIlc1WtQq5XkmuLDL0yQ0JCAgwZA14NyNc5md/06UmYK7fLfkRERAWNBIixCUk5WqLjEjFt07knDvJ8sum82i8nx3vSN7zpSZCpW2R0VQJO3brU+pfyYFu2bFEXz0ulJkmVvHr1qpqlVVd3uFGjRti5c2eWlAYJoHXkuD///DNeeuklFQjL9UObNm3K8E217KMbxZRRzWLFimHbtm2oUaOGepzOnTurIFxHgu9x48ap/eRapffff19d75T+WqS1a9eq0qwyMYPsIxNuSTqnpHtKCmfmUdPx48ejbdu2aevyfFu0aKHuL6VY5fHk/umf52effaaupZIPC5ImmpnuuaQns9qmD+5PnTqlUjrkfMtx5HwfP35cnRe5XisyMlLtL8uzjLgbVEpDYSO5S/rcj4iIKD89SkyGx9RtejmWhK/BUXGo/Un21+Vkdv7TTrC11E/48sEHH2DOnDmoWLEiihcvjps3b6Jr1674/PPPVRC8fPlydO/eXV07JHWIH0cmr/rqq68we/ZsfPfddxg0aBBu3LihJurIjkyYII/722+/qbxeqTglI86///67un3WrFnq96VLl6qg+Ntvv1WBpASOQoLjAQMGqMeUQFtSJQ4cOKA+DLRr104FoevWrcPIkSPTSsutWbNGPS8hgb0E2XKB/5IlS9S1VLr0UnlMHWmjXGMl6R/PSs5FvXr1sHDhQlWK9uTJk6qcmKR6yAcHOb6cXyHBf15hwKsBSdTX535ERESUe3Ktj0zkoSMBat26ddPWZYRz/fr1asT2cdcaiWHDhqkAVHzxxReYP3++mg1WgsrHTSKyaNEiVKpUSa3LsdNfdyRBs0yKJcGs+P777/Hvv/+m3S4Br4wC9+rVC+XKlVPbZLRXp3///li5cmVawLtr1y414tu7d2+1LpWvJBDVXXgno9LS5latWqnAVHeRv4wIv/vuuxkuWsstKT7w3nvvoXr16mmPpZN+5D2vMeDVgFyVKon6krv0uC9mLM1MUN6JM9oQEVHBY2NhpkZac0LS84YtPfbU/ZYNb6T+PubksfVFSqKm9/DhQ/W1+ubNm9OCykePHqmg7Unq1KmT9rtc0CZf3YeGhj52f0l90AW7QibK0u0vX/HLZFnpZ5GVkVFJBdBNXiFBuYzkSpDbqVMnNTNsnz591Ci1kGC2SZMmuHPnjirL+vvvv6Nbt25p6QeSZiDT9epGlIWMDsvxAwMD1ahydufnWcvPvvrqq2o0W9IuXn755QzPPb8wh1cDUoJFrkoVj0thT0hOxYvfH8Kx68zjJSKigkVG5SStICdLiyol1SDP4/7eyXa5XfbLyfH0efFX5moLklYgI7oySispAvL1uwSVT7tgK/OMX9JGXXCa0/1zmpusC4BlmmnJQfbw8FAjwlLBSoJVIbnHElTKjLQSsK9fv14FwekD+9dff109P90iQfDly5czBKNPq0Yh6RiZ2y2j1+nJB4hz586pgHv37t2qvdKe/MaAVyNSgkVKj7k4ZExbkDf9Jz08ULVUUYRGx6P/T0fw84FruXojEBERGcIgj25dbi8I9XgPHTqk0hMklUACXfmq/Vm+xn8e8jW/XDQn5c90JAfX398/S5DcrFkzlT8sdXGlGkT6QFICXBnB/fvvv1VgKgGnTv369XH+/HlUrlw5yyLHySmpWCH5w+kvdpPgObOqVavinXfeURfUSRqGLk9YHkueW35gSoPGQW8HD5dsi3D3beiOyX+dwcaTdzBj8wWcuBmBWb3roKgVu4yIiAxzkCdzHV6XAjbZkuSX/vXXX+pCNQkoZabWJ43U5pW33npL5dlKACq5rzKC++DBg7TRbV9fX5WXK6kMzs7Oal0uPNOlIugCXhldlQvV+vTpoy7C05GqD5LyILnDkm4gI7kSAMuoseQL55SXl5dKz5gyZYqq8iDtkMoNOjK6LPm78vgyYcWtW7dUIK/LJZZKEDLaLM9F0jTkWLkp+ZYbjJ40JsGtd6WM0yML+dpmXj9P1C9bHDM2n8fm03dx8W4UFg1ugCql7DRpKxERUV4M8hQUc+fOxYgRI1QFAScnJxUYRkVF5Xs75HFl9lkpCSbpC1ISTHJ15XchOcL79+9XVQ6kfXLh2tdff40uXbqkHUOCZckDlovn5qUro6bLOd63bx8+/PBDVZpMvkWWVAaZ/TY35CK/FStWqKB28eLFKq9YgmxdCTNpr8wwJ89D8pLlnMoIr4xKCznPo0ePVo8r+z3rZCA5YZLK78qzkBePfKUgiePyotKa340HePN3f1W2xdbSTI30dq9bGoZEcnrkClMp95I5d4kKPvaf4WMfGj6t+jAuLk7lhsoIne7qfco9GSmW+ELiitxOMSz3ldHbvn37qsoRhUncE15/uYnXmMNrABqUK47N45qjWeUSiE1IxlurTmD63+eQkJT/X7MQERFR3pIavjJieunSJZw5cwZjxoxRQd/AgQO1bprBYsBrIEoUtcLyEV54s81/V08uPXQdAxYfUaXNiIiIyHjICLDkwkq1BbkwTYJemfEtfY4u5Q5zeA2I5Dm916k6PN2LY8IfJ1WqwwvfHcD8AfXQtJKT1s0jIiIiPZCpfqViBOkPR3gNUAePUvjnreao4WqP8IcJGPyzLxbtu8rSZURERETZYMBroMqVKIK/xjRF7/plkJIKfLnlIl7/zQ9RcRkLPhMREekDB1XIkF93DHgNmI2lGea8XAdfvFQblmam2H4+RM3OdjE4/0uoEBGRcdJVhIiNjdW6KVQIxf7/6+55K5Mwh9fASRHqgV5lUbO0Pd743R+B4THoueAQZvaqjZfqldG6eUREZOCklmqxYsUQGhqq1mViAH1O71tYSGkxmaJYymzltixZYR3ZjY2NVa87ef3pahA/Kwa8RqKuezGV1zt+zUnsvxSGd9acgv+NCHz0Qg1YmT/fi4SIiAo3mWJX6IJeerYATmYes7Gx4QeGXJBgV/f6ex4MeI1I8SKWWDqsEb7ddRnzd13Gb0du4MztSPwwqD5KF7PRunlERGSgJEBzdXVV09jKBBiUe3LeZHa0li1bcvKXHJLz9LwjuzoMeI2wdNmEDlVRz70Y3l5zEidvRuCF7w5ifv96aF6FpcuIiOjZSfChrwCksJHzlpSUpGYLY8Cb/5hEYqTaVHdWKQ613OxxPyYBryzxxfe7LyNFSjoQERERFSIMeI2Yu6Mt1o5uiv6N3CFVPeZsv4TXfjuOyFh+HUVERESFBwNeI2dtYYYve9fBV73rwNLcFDsvhKL79wdx7k6k1k0jIiIiyhcMeAuJvo3c1UQV7o42CLofi14/HMafx29q3SwiIiKiPMeAtxCp5eaAf8a2QNvqzohPSsF7a09j8l+nEZeYrHXTiIiIiPIMA95CxsHWAj8PaYh3O1SFlAFcdfQmXl7kg5v3OYMOERERGScGvIWQqakJ3mpXBb8Ob4zithaqVq/k9e4NYEFxIiIiMj4MeAuxllVL4p9xLVC3jAMiYhMxfNkxzNt5iaXLiIiIyKgw4C3k3IrZ4I/R3hjcpKwqXTZv52UV+D6ISdC6aURERER6wYCXYGVuhhk9a2Nu37qwtjDFvkthana207citG4aERER0XNjwEtpetUvg/VvNEP5Era4HfEIfRb6YKVvEFJl6JeIiIjIQDHgpQxquNpj49jm6OBRCgnJKZiy/owqX8bSZURERGSoGPBSFg42FvhxcAO837k6TE2AtX638NIPh3HjXozWTSMiIiLKNQa89NjSZWNaV8KKkV4oUcQSF+5GqbzenedDtG4aERERUa4w4KUnalrZCZvHtUD9ssUQHZeEV5cfx+xtF5HM0mVERERkIBjw0lO5OFhj9WveGNa0vFpfsOcqhi45insP47VuGhEREdFTMeClHLE0N8UnPWri2/6esLEww8Er4SrF4UTQA62bRkRERPREDHgpV170dMPGsc1Q0akI7kbGoe+PPvjN5zpLlxEREVGBxYCXcq1qKTsV9Hap5YLE5FR8vPEcJvxxCrEJSVo3jYiIiCgLBrz0TOysLfDDoPr4sGsNmJmaYP2J23hpwWFcC3uoddOIiIiIMmDAS8/MxMQEo1pWxMpXvVDSzgoBIdF48ftD2Ho2WOumERERERWcgHfBggUoX748rK2t4eXlhaNHjz5x/4iICLz55ptwdXWFlZUVqlatin///Tft9k8++UQFYumX6tWr58MzKby8KpbA5reao1H54oiOT8LoFX6YueUCkpJT1O1Swsw38D78wk3UT5Y0IyIiovxkDg2tWbMGEyZMwKJFi1SwO2/ePHTq1AkBAQFwdnbOsn9CQgI6dOigblu7di3c3Nxw48YNFCtWLMN+NWvWxM6dO9PWzc01fZqFgrO9NVaOaoJZWy7i54OB+HHfNZy6GYGX6pXBvJ2X1AVugBmWXz4OVwdrTOvugc61XLVuNhERERUCmkaCc+fOxahRozB8+HC1LoHv5s2bsWTJEnzwwQdZ9pft9+/fx+HDh2FhYaG2yehwZhLguri45MMzoPQszEzx0QseqFe2OCatPYUj1+6rJbPgyDiMWeGPhYPrM+glIiIi4w14ZbTWz88PkydPTttmamqK9u3bw8fHJ9v7bNq0Cd7e3iqlYePGjShZsiQGDhyI999/H2ZmZmn7Xb58GaVLl1ZpErL/zJkzUbZs2ce2JT4+Xi06UVFR6mdiYqJaKHc61nBC+de80OMHn2zTF2SLCYDpf59D6yol1EVvVLDp3gd8Pxgu9qHhYx8aNvaf/uXmXGoW8IaHhyM5ORmlSpXKsF3WL168mO19rl27ht27d2PQoEEqb/fKlSt444031BOeNm2a2kdSI5YtW4Zq1arh7t27mD59Olq0aIGzZ8/Czs4u2+NKQCz7ZbZ9+3bY2trq5fkWNpcjTZCc8r8PIdkFvXcj4/H9mq2o4sCcXkOxY8cOrZtAz4l9aPjYh4aN/ac/sbGxOd7XoJJbU1JSVP7uTz/9pEZ0GzRogNu3b2P27NlpAW+XLl3S9q9Tp44KgMuVK4c//vgDI0eOzPa4MsosucTpR3jd3d3RsWNH2Nvb58MzMz5/n74LnD/z1P0q1vRE1zpMayjo5EOl/CctOfS6dCIyLOxDw8c+NGzsP/3TfSNfoANeJycnFbSGhIRk2C7rj8u/lcoM8iJJn75Qo0YNBAcHqxQJS0vLLPeRC9qkkoOMBj+OVHuQJTN5LL4on41rsSI52s/B1orn2IDwPWH42IeGj31o2Nh/+pOb86hZWTIJTmWEdteuXRlGcGVd8m6z06xZMxW4yn46ly5dUoFwdsGuePjwIa5evar2ofzTuIKjqsbwtOzcd/84iaWHApGQ9L8+JSIiIjKaOrySRrB48WL8+uuvuHDhAsaMGYOYmJi0qg1DhgzJcFGb3C5VGsaPH68CXano8MUXX6iL2HQmTpyIffv24fr166qaw0svvaRGhAcMGKDJcyys5EI0KT0mMge9uvVS9laIeJSE6X+fR8dv9uHfM3eRmsp8XiIiItIvTXN4+/Xrh7CwMEydOlWlJXh6emLr1q1pF7IFBQWpyg06kle7bds2vPPOOyo/V+rwSvArVRp0bt26pYLbe/fuqSoOzZs3x5EjR9TvlL+k5JiUHpOA9r86vP9x+f86vO1rlMKa4zfxzY7LuH4vFm/87o/6ZYvhw2410KCco6ZtJyIiIuNhksohtWyToB0cHBAZGcmL1vRASpP5XAnF9gO+6NjCC96VnTOUInsYn4Sf9l3F4gOBeJSYrLZ1qeWC9ztXR3mnnOUCU95fbCGVUbp27crcMwPFPjR87EPDxv7TNl7TfGphMn4S3HpVcEQDp1T1M3Pd3aJW5pjQsRr2vtca/Rq6Q27ecjYY7efuwyebzuF+TIJmbSciIiLDx4CXCoxS9taY1acO/h3fAq2qlkRSSiqWHb6OVl/twcK9VxH3/6O/RERERLnBgJcKnOou9vh1RGOsGOkFD1d7RMcnYdbWi2g7Zy/Wn7iFlGxmbyMiIiJ6HAa8VGA1r+KEf95qjq9frqtKnN2JjMM7a06hx4KDOHwlXOvmERERkYFgwEsFmqmpCXo3KIM9E1tjUudqsLMyx9nbURj4sy+GLz2KSyHRWjeRiIiICjgGvGQQrC3M8EbryurCtqHe5WBuaoI9AWHoPG8/Plh3GqFR/yt7RkRERJQeA14yKCWKWmH6i7Ww/Z2W6FzTBZLOu/rYTbSavRff7LiEmPgkrZtIREREBQwDXjJIFUsWxaJXGmDtaG/UK1tM1e/9dtdltJ6zFyt9g5CUzKmKiYiI6D8MeMmgNSzviL/GNMWCgfVR1tEWYdHxmLL+DLp8ewC7L4ZwqmIiIiJiwEuGz8TEBN3quGLnhFaY+oIHitla4HLoQ4xYdhwDF/vi7O1IrZtIREREGmLAS0bD0twUI5pXwL732uD1lhXVus+1e3jhu4N4e/UJ3HoQq3UTiYiISAMMeMnoONhYYHLXGtj9biv09Cyttm04eQdtv96HmVsuIPJRotZNJCIionzEgJeMVpnitpjXvx42jW2GJhUdkZCUgh/3XUPr2Xuw5GCgWiciIiLjx4CXjF6dMsWwalQT/DK0ISo7F8WD2ER8+s95dPhmHzafvssL24iIiIwcA14qNBe2tatRClvHt8AXL9WGU1Er3LgXizdX+qP3wsPwu3Ff6yYSERFRHmHAS4WKuZkpBnqVxb73WmN8uyqwsTCDf1AEei/0wejf/BAYHqN1E4mIiEjPGPBSoVTEyhzvdKiqpiru38gdpibA1nPB6DB3H6ZtPIt7D+O1biIRERHpCQNeKtRK2Vvjy951sGV8S7SpVhJJKan41ecGWs/eix/2XkFcYrLWTSQiIqLnxICXCEA1FzssHd4Yv7/qBQ9Xe0THJ+GrrQFoO2cv1vndQkoKL2wjIiIyVAx4idJpVtkJ/7zVHHP71kVpB2vciYzDu3+eQvfvD+LQlXCtm0dERETPgAEvUSampiboVb8Mdk9sjUmdq8HOyhzn7kRh0M++GLb0KAKCozPsn5ySCp+r97Dx5G31U9aJiIio4DDXugFEBZW1hRneaF0Z/Rq647vdV7DiyA3sDQjD/ktheLmBOyZ0rIoTQQ8w/e/zuBsZl3Y/VwdrTOvugc61XDVtPxEREf2HI7xET1GiqBU+6VETOya0QpdaLpAB3DXHb6LFrD0YvcI/Q7ArgiPjMGaFP7aevatZm4mIiOh/GPAS5VAFpyJYOLgB1o3xRj13ByQkZz81sS6hQUZ+md5ARESkPQa8RLnUoJwjJnWu/sR9JMyVkd+jgZzBjYiISGsMeImeQWh0ziamCI3KmO5ARERE+Y8BL9EzcLazztF+s7ZexC8HAxERm5DnbSIiIqLsMeAlegaNKziqagwmT9hHbpM6vp/9cx5eX+zCu3+cgt+NB0hNZV4vERFRfmLAS/QMzExNVOkxkTnoNfn/RSavmNGzFmq42iM+KQXr/G+h98LD6PLtAfx25Aai4xI1aTsREVFhw4CX6BlJnd2Fg+vDxSFjeoOsy/aX6pfB4Cbl8O+45vjrjabo06AMrMxNcTE4Gh9vOKtGfSf/dRpnb0dq9hyIiIgKA048QfScQW8HDxdVjSE0Ok7l9kq6g4wA65iYmKB+2eJq+bibhxrpXXk0CFdCH2LV0ZtqqVvGAQO9yqJ73dKwteTbkoiISJ/4l5XoOUlw612pRI72dbC1wIjmFTC8WXkVJP/uG4StZ4Nx6lYkTt06gxn/XECv+m4Y6FUO1Vzs8rztREREhQEDXiINyKivV8USarn3MB5r/f4b9b1xLxa/+txQS8NyxTGoSVl0qeWqpjkmIiKiZ8OAl6gATF38eqtKGNWiIg5dDcdK3yBsPx+C4zceqEVmbOtTv4xKeahYsqjWzSUiIjI4DHiJCghTUxO0qFJSLSFRcfjj2E2sPnYTtyMe4eeDgWppWqmECnw7erjA0pzXnBIREeUEA16iAqiUvTXealcFb7SpjH2XQvH7kSDsCQjF4av31OJU1BJ9G7pjQOOycHe01bq5REREBRoDXqICfkFc2+ql1CIjvWuOBqlRX5na+Ie9V7Fw31W0rFISg7zKom11Z5ibcdSXiIgoMwa8RAbCrZgNJnSspkZ+d10Ixe++N3Dgcjj2XQpTi4u9Nfo1ckf/xu5wdbDRurlEREQFBgNeIgNjYWaKzrVc1HLjXoyq7rD2+C0ER8Xh212X8d3uy2hXo5TK9ZXR3/Q1gYmIiAojBrxEBqxciSKY3KUGJnSoim3nQvD7kRvwDbyPHedD1FKmuI3K85V835J2Vlo3l4iISBMMeImMgJW5GXrULa2WK6HRWOl7E2v9buLWg0eYvS0A3+y4hE41XVSur0ySIXWAiYiICgvNr3BZsGABypcvD2tra3h5eeHo0aNP3D8iIgJvvvkmXF1dYWVlhapVq+Lff/99rmMSGZPKznaY2t0DRz9sj69frov6ZYshKSUVm8/cxcCffdH2631YvP8aHsQkaN1UIiIi4w9416xZgwkTJmDatGnw9/dH3bp10alTJ4SGhma7f0JCAjp06IDr169j7dq1CAgIwOLFi+Hm5vbMxyQyVjI7W+8GZfDXG83w77gWGNykLIpamSMwPAaf/3sBXjN34Z01J3Hs+n2kpqZq3VwiIiLjDHjnzp2LUaNGYfjw4fDw8MCiRYtga2uLJUuWZLu/bL9//z42bNiAZs2aqVHcVq1aqaD2WY9JVBh4lLbHjJ614TulHWb2qo1abvZISErB+hO38fIiH3Satx+/Hr6OyEeJWe6bnJKq8oL9wk3UT1knIiIyJJrl8MporZ+fHyZPnpy2zdTUFO3bt4ePj0+299m0aRO8vb1VSsPGjRtRsmRJDBw4EO+//z7MzMye6ZgiPj5eLTpRUVHqZ2Jiolro+enOI8+ntixNgT71XNVy5nYkVh27hX9O38WlkIeYtukcZm65gBdqu2JAozKo7WaP7edDMePfiwiOkveHGZZfPg4Xeyt81LU6OtUspfXToVzge9DwsQ8NG/tP/3JzLjULeMPDw5GcnIxSpTL+0ZT1ixcvZnufa9euYffu3Rg0aJDK271y5QreeOMN9YQlheFZjilmzpyJ6dOnZ9m+fft2NTpM+rNjxw6tm0DpNLcEGngCx8NNcCjYFHcfpWCt/221lLBKxb20z4H/u8hNyp+NXX0SI6qmoG4JjvYaGr4HDR/70LCx//QnNjbWOKs0pKSkwNnZGT/99JMa0W3QoAFu376N2bNnq4D3WcmIsOT9ph/hdXd3R8eOHWFvb6+n1hdu8qFE3uSSg21hYaF1cyiT3oDK4/UPisDqY7ew+WxwumA3MxMV/m4JscWkQS1Z59dA8D1o+NiHho39p3+6b+QLdMDr5OSkgtaQkJAM22XdxcUl2/tIZQZ5kcj9dGrUqIHg4GCVzvAsxxRS7UGWzOSx+KLUL57Tgq1JZWe1dDsXjFG/+T12PxnXvRsZjxO3olWZMzIcfA8aPvahYWP/6U9uzqNmF61ZWlqqEdpdu3ZlGMGVdcnTzY5cqCZpDLKfzqVLl1QgLMd7lmMSUVaxick52u/2g5x/nURERFQoqzRIGoGUFfv1119x4cIFjBkzBjExMarCghgyZEiGC9DkdqnSMH78eBXobt68GV988YW6iC2nxySip3O2s87RftP+PofZ2y4iJCouz9tERET0rDTN4e3Xrx/CwsIwdepUlZbg6emJrVu3pl10FhQUpKos6Ehe7bZt2/DOO++gTp06qv6uBL9SpSGnxySip2tcwRGuDtYIjoxT6QvZMTMxQUx8MhbsuYqf9l9D97ql8WrziqoEGhERUUFiksqK89kmQTs4OCAyMpIXrekxWV8qa3Tt2pW5SwZi69m7GLPCX/2e/j8J3SVqCwbWh6mpCX45eA3Hrj9Iu71Z5RIq8G1VtaS6nQoGvgcNH/vQsLH/tI3XDKpKAxHln861XLFwcH1M//s87kb+L2XBxcEa07p7qNv/288FJ29G4JeDgfj3zF0cunJPLZVKFsHI5hXRq76bmvWNiIhIKwx4ieixJKjt4OECnyuh2H7AFx1beMG7snOWUmSe7sXw3YB6+KBLdTVj2yrfIFwNi8GU9WdUju8rTcphsHe5HOcGExERGc1Fa0RU8Elw61XBEQ2cUtXPJ9XddStmgylda8BnSjtMfcEDZYrb4EFsIubvvoLmX+7Be3+ewsXgnNdNJCIi0geO8BKR3hW1MseI5hUwxLscdpwPweID19SkFn/63VJLiypOGNm8gsrzNTFhni8REeUtBrxElGfMzUzRpbarWvxuPMCSg4HYcvYuDlwOV0sV56Iq8O1Zj3m+RESUdxjwElG+aFCuuFpu3o/FssPXsebYTVwOfYgP/pI83wAMblIOr3iXg1PRrLMeEhERPQ/m8BJRvnJ3tMXHL3jg8OS2+KhbDZX3ey8mAd/uuoymX+7G+2tP41JItNbNJCIiI8KAl4g0YW9tgVdbVMS+91rj+4H1UNe9GBKSUrDm+E10/GY/hiw5iv2XwsBS4URE9LyY0kBEmuf5vlCnNLrVdoV/0AP8fCAQ284Fq2BXlmql7FSebw/P0szzJSKiZ8KAl4gKBKnW0KCco1qC7sVi6eFA/HHsJgJCojFp3Wl8per5lsfgJmVRgnm+RESUC0xpIKICp2wJW0zrXhOHJ7fDlK7V4epgjfCHCfhm5yWV5zv5r9O4Eso8XyIiyhkGvERUYDnYWOC1lpWwf1IbzB9QD3XKOCA+KQWrjt5E+7n7MXzpURy6Es48XyIieiKmNBBRgWdhZooedUujex1XHL8heb7XsP18CPYEhKmluoudugCue11XWJkzz5eIiDJiwEtEBpXn26i8o1quh8eoer5/HL+Ji8HRmPjnKczaehFDvcthkFc5FC9iqXVziYiogGBKAxEZpPJORfBJj5rw+aAdPuhSHS721giLjsec7Zfg/eUufLj+DK6GPdS6mUREVAAw4CUig+Zga4HRrSrhwPttMK+fJ2q52SMuMQW/+wah3df7MHLZMRy+yjxfIqLCjCkNRGQ0eb4967nhRc/S8A28r+r57roYgl0XQ9Xi4WqPV1tUUDV/Lc0zftZPTknF0cD7CI2Og7OdNRpXcISZqYlmz4WIiPSLAS8RGV2eb5OKJdRyLewhlh66jj/9buL83ShM+OMUvtxyEUOblscgr7IoZmuJrWfvYvrf53E3Mi7tGFIGbVp3D3Su5arpcyEiIv1gwEtERqtiyaL4rGctTOhQFSuPBuHXw9cRGh2P2dsC8P3uK2okd9+lsCz3C46Mw5gV/lg4uD6DXiIiI8AcXiIyelKx4c02lXHw/baY27euSm94lJicbbArdNm+MvIr6Q5ERGTYGPASUaEhubu96pfB5nHN8VG3Gk/cV8JcSXOQ3F4iIjJsDHiJqFDm+Za0s8rRvnIhGxERGTYGvERUKEk1Bn3uR0REBRcDXiIqlOSCNanG8KTiY+amJnAsYpGPrSIiorzAgJeICiWpsyulx8Tjgt6klFS8uOAQfve9wYkriIgMGANeIiq0pOSYlB5zcciYtiAjv7N61UaLKk5q1rYP15/F6BV+eBCToFlbiYjo2bEOLxGhsAe9HTxcsp1p7eWG7lhyKBCztl7EtnMhOHXzgCpr1rSyk9bNJiKiXGDAS0SFngS33pVKZNluamqCV1tUVLO2jVt9AtfCYjDoF1+MblVJTWYh0xkTEVHBx/+tiYieopabA/55qzkGNHaHpPIu3HsVfRYexvXwGK2bRkREOcCAl4goB2wtzTGzVx0sHFQfDjYWOHUrEt3mH8Bav1u8oI2IqIBjwEtElAtdartiy/gW8KrgiJiEZEz88xTGrT6JyEeJWjeNiIgegwEvEVEulS5mg5WjmuC9TtVU/u/fp+6g67cHcPw6pyEmIiqIGPASET0DCXTfbFMZa0d7o6yjLW5HPELfH30wb+clJCWnaN08IiJKhwEvEdFzqFe2ODaPa45e9dyQkgrM23kZ/X86glsPYrVuGhER/T8GvEREz8nO2gJz+3liXj9PFLUyx/EbD9Dl2wPYdOqO1k0jIiIGvERE+tOznhv+HdcC9coWQ3RcEsatOqEuansYn6R104iICjUGvEREelS2hC3+fN0b49pWhqkJVNmyF+YfwKmbEVo3jYio0GLAS0SkZ+ZmppjQsRpWjWqC0g7WuH4vFr0XHlYTVqRIoi8REeUrBrxERHnEq2IJbBnfEl1ruyApJRWztl7E4F98ERwZp3XTiIgKFQa8RER5yMHWAgsG1sdXvevAxsIMh6/eQ+dv92PbuWCtm0ZEVGgUiIB3wYIFKF++PKytreHl5YWjR48+dt9ly5bBxMQkwyL3S2/YsGFZ9uncuXM+PBMioqzk/6C+jdxV+bLabg6IiE3E67/5Ycr6M3iUkKx184iIjJ7mAe+aNWswYcIETJs2Df7+/qhbty46deqE0NDQx97H3t4ed+/eTVtu3LiRZR8JcNPvs2rVqjx+JkRET1axZFGsG9MUr7esqNZX+gah+/cHcf5OlNZNIyIyapoHvHPnzsWoUaMwfPhweHh4YNGiRbC1tcWSJUueOFri4uKStpQqVSrLPlZWVhn2KV68eB4/EyKip7M0N8XkrjWwYqQXnO2scCX0IXouOIRfDgbygjYiojxiDg0lJCTAz88PkydPTttmamqK9u3bw8fH57H3e/jwIcqVK4eUlBTUr18fX3zxBWrWrJlhn71798LZ2VkFum3btsWMGTNQokSJbI8XHx+vFp2oqP9GWxITE9VCz093Hnk+DRP7T/+8yjtg05vemLL+HHYHhOGzf85jX0AIZvWqBaeiVnp/PPah4WMfGjb2n/7l5lyapKamajakcOfOHbi5ueHw4cPw9vZO2z5p0iTs27cPvr6+We4jgfDly5dRp04dREZGYs6cOdi/fz/OnTuHMmXKqH1Wr16tRokrVKiAq1evYsqUKShatKi6r5mZWZZjfvLJJ5g+fXqW7StXrlTHISLKK/I/8MEQE2y8borEVBMUtUjFoEop8CjO0V4ioieJjY3FwIEDVTwo6a5GFfBmF93XqFEDAwYMwGeffZbtPteuXUOlSpWwc+dOtGvXLkcjvO7u7ggPD3/qCaSckX7asWMHOnToAAsLC62bQ7nE/st7l0Me4p0/TyMg5KFaH+pdFu91qAIri6wf0p8F+9DwsQ8NG/tP/yRec3JyylHAq2lKgzRSRlxDQkIybJd1ybvNCXnR1KtXD1euXHnsPhUrVlSPJftkF/BKvq8s2R2bL0r94jk1bOy/vONRpjg2jm2OL7dcxLLD1/GrTxCOXo/A/P6eqFLKTm+Pwz40fOxDw8b+05/cnEdNL1qztLREgwYNsGvXrrRtkpcr6+lHfJ8kOTkZZ86cgaur62P3uXXrFu7du/fEfYiItGZtYYZPetTEkmEN4VjEEhfuRuGF7w5ixZEb0PDLOCIig6d5lQYpSbZ48WL8+uuvuHDhAsaMGYOYmBhVtUEMGTIkw0Vtn376KbZv367SFKSM2eDBg1VZsldffTXtgrb33nsPR44cwfXr11Xw/OKLL6Jy5cqq3BkRUUHXtnopbH27BVpUcUJ8Ugo+2nAWr/3mh/sxCVo3jYjIIGma0iD69euHsLAwTJ06FcHBwfD09MTWrVvTSo0FBQWpyg06Dx48UGXMZF+pwCAjxJIDLCXNhKRInD59WgXQERERKF26NDp27Kjye7NLWyAiKoic7azx6/DGWHIoUE1JvON8CE7f2o9v+nqiaWUnrZtHRGRQNA94xdixY9WSHSkvlt4333yjlsexsbHBtm3b9N5GIqL8ZmpqgldbVESTiiUwbvUJXAuLwaBffPF6y0qY0KGqqulLRERPx/8tiYgKuFpuDvjnreYY0LisKmO2aN9V9Fl0GIHhMVo3jYjIOANeyaGVumeZPXr0SN1GRET6Z2tpjpm9amPhoPpwsLHA6VuR6Db/AP48fpMXtBER6TvglQka5MKwzCQIzm7yBiIi0p8utV2xZXwLNKnoiNiEZLy39jTeWnUCkY84exMRkd4CXhlJMDExybL91KlTcHR0zO3hiIgol0oXs8HvrzbBe52qwczUBP+cvouu3x7Asev3tW4aEZFhX7QmFREk0JWlatWqGYJeqYUro76jR4/Oq3YSEVE6Eui+2aYymlYqgfGrTyLofiz6/eiDt9pWwVttK8PcjJdoEBHlOuCdN2+eGt0dMWKESl1wcHDIMIFE+fLlczxZBBER6Ue9ssWxeVxzTNt0Dn/538a3uy7j4JVwzOvnCXdHW7VPckoqfAPvwy/cBCUC78O7srMKmImICoscB7xDhw5VPytUqIBmzZrB3LxAVDQjIir07KwtMLevJ1pVLYmP1p+F340HKsXh8161YWlmgul/n8fdyDgZF8byy8fh6mCNad090LkWZ58kosIh19952dnZqRnRdDZu3IiePXtiypQpSEjgLEBERFp50dMN/45vgfpliyE6PgnjVp3A6BX+/x/s/k9wZBzGrPDH1rN3NWsrEVGBDnhff/11XLp0Sf0u0/vKTGm2trb4888/MWnSpLxoIxER5ZCkMfzxujfGtq382H10Rcxk5FfSHYiIjF2uA14JdmX6XyFBbqtWrbBy5UosW7YM69aty4s2EhFRLsgFa80qPXn6YQlzZeT3aCArOxCR8XumsmQpKSnq9507d6Jr167qd3d3d4SHh+u/hURElGuh0XF63Y+IqFAFvA0bNsSMGTPw22+/Yd++fejWrZvaHhgYiFKlSuVFG4mIKJec7az1uh8RUaEKeKU8mb+/P8aOHYsPP/wQlSv/lye2du1aNG3aNC/aSEREudS4gqOqxvC04mP/nrmDiFhecExExi3XtcXq1KmDM2fOZNk+e/ZsmJmZ6atdRET0HKTOrpQek2oMEvQ+7tK0344EYdOpu5jQoSoGeZXlhBVEZJT09j+btbU1LCws9HU4IiJ6TlJnd+Hg+nBxyJi2ICO/iwbXx8pXvVDdxQ6RjxLVxBVd5x/AgcthmrWXiKjAjPCamppmmFY4M5lmmIiICk7Q28HDBT5XQrH9gC86tvDKMNPaP281x6pjNzF3ewAuhTzEK78cRfsapfBRtxoo71RE6+YTEWkT8K5fvz7DemJiIk6cOIFff/1VTTlMREQFiwS3XhUcce9CqvqZflphSWF4pUk59KhTGvN2XcJvPjew80II9l0KxYhmFVQ9X5nJjYioUAW8L774YpZtffr0Qc2aNbFmzRqMHDlSX20jIqJ84mBrgWnda6o83k//uYD9l8Lw4/5rWOd/C+91qoY+DdwzBMpERIUyh7dJkybYtWuXvg5HREQaqOxsh1+HN8KSYQ1R0akIwh8m4P11Z/DigoM4dp2TVBBRIQ54Hz16hPnz58PNzU0fhyMiIg3JdRptq5fC1rdbqlxeOytznL0dhZcX+WDsSn/cjnikdROJiPI2paF48eIZLlqTmdeio6Nha2uLFStW5PZwRERUQFmam+LVFhXRs54bvt5+CauPBeGf03ex43wIXm9VCaNbVYStZa7/jBAR5btc/0/1zTffZAh4pWpDyZIl4eXlpYJhIiIyLk5FrTCzV20MblIWn/59Hr6B9zF/12X8efwmPuhSHT3qln5i9R4iIoMLeIcNG5Y3LSEiogKtZmkHrH6tCbacDcbnmy+o1Ibxq09iuc8NTH3BA3Xdi2ndRCKiZw94T58+jdzMxEZERMZJRnK71nZF2+rO+PnANSzYcxV+Nx7gxQWH0KdBGUzqVA3O9hknuiAiMoiA19PTU/0nJ/m6TyL7cOIJIiLjZ21hhrFtq6hyZV9tvYi/TtzGWr9b2HLmLt5sW1nV8JV9iIgMJuANDAzM+5YQEZHBkWmL5/bzxGDvcpj+93mcuhmBr7YGYPXRm5jStQY61SzF/F4iMoyAt1y5cmmzqr3++uv4+OOPUaFChbxuGxERGYj6ZYtj/Zim2HDyNr7cchFB92MxeoUfmlYqgandPVDdxV7rJhJRIZarOrwWFhZYt25d3rWGiIgMlqmpCXrVL4M9E1tjbJvKqqzZ4av30PXbA/howxncj0nQuolEVEjleuKJnj17YsOGDXnTGiIiMnhFrMwxsVM17JrQCl1ruyAlFVhxJAitZ+/BkoOBSExO0bqJRFTI5LosWZUqVfDpp5/i0KFDaNCgAYoUKZLh9nHjxumzfUREZKDcHW3xw6AGOHLtnsrvvXA3Cp/+cx6/+97Axy94oHU1Z62bSESFRK4D3l9++QXFihWDn5+fWtKTCxMY8BIRUXpNKpbAP281x5pjNzFnewCuhsVg2NJjqrSZTF1csWRRrZtIREYu1wEvKzYQEVFumZmaYKBXWXSr44rvdl3GssPXsftiKPZfCsOwpuXxVrsqcLCx0LqZRGSkcp3Dq5OQkICAgAAkJSXpt0VERGS0JKj96AUPbHunpRrhTUpJxc8HA9F2zl6s9A1CsiT8EhFpHfDGxsZi5MiRsLW1Rc2aNREUFKS2v/XWW/jyyy/13T4iIjJClUoWxZJhjbBseCNUKlkE92ISMGX9Gbzw3UGV80tEpGnAO3nyZJw6dQp79+6FtfX/po9s37491qxZo9fGERGRcZML17a+3RJTX/CAvbW5urCt/09H8Mbvfrh5P1br5hFRYQ14pSTZ999/j+bNm2eYPUdGe69evarv9hERkZGzMDPFiOYVsPe9NhjcpCxMTYB/zwSj3dx9mLMtADHxTJ0jonwOeMPCwuDsnLWUTExMDKePJCKiZ+ZYxBIzetbG5nEt4F2xBBKSUvD9nito+/VerD9xCynM7yWi/Ap4GzZsiM2bN6et64Lcn3/+Gd7e3s/aDiIiIqWGqz1WjvLCosEN4O5og5CoeLyz5hR6LTyME0EPtG4eERlzWbKzZ8+iVq1amDlzJjp37ozz588jMTER3377rfr98OHD2LdvX962loiICgUZTOlcywWtq5XEkkOB+H73FZy8GYGXfjiMXvXc8H6X6ihl/991JFLZ4WjgfYRGx8HZzhqNKziqMmhERLkOeOvUqYNGjRrh1VdfVbOsfffdd2rb9u3bUb9+ffj4+KB27do5PRwREdFTWVuY4Y3WldGnfhl8tS0Aa/1u4a8Tt7H1XDDebFMZ7sVtMHPLRdyNjEu7j6uDNaZ190DnWq6atp2IDDDgldHbpUuX4t1330VKSgp69+6NOXPmoGXLlnnbQiIiKvSc7a0x5+W6eKVJOUz/+xz8gyIwe1tAtvsGR8ZhzAp/LBxcn0EvEeUuh7dFixZYsmQJ7t69q0Z3r1+/jtatW6Nq1aqYNWsWgoOD8awWLFiA8uXLqzJnXl5eOHr06GP3XbZsmfqqK/2SvjyaSE1NxdSpU+Hq6gobGxtVMu3y5cvP3D4iIioY6roXw7oxTfFN37qqmkN2dJe2Tf/7PCeyIKJnu2itSJEiGD58uBrxvXTpEl5++WUVsJYtWxY9evTI7eFU7d4JEyZg2rRp8Pf3R926ddGpUyeEhoY+9j729vYq8NYtN27cyHD7V199hfnz52PRokXw9fVVbZZjxsX97ysvIiIyTDLQ4eJggyfFsnKTpDlIbi8R0TNPLSwqV66MKVOm4KOPPoKdnV2G6g05NXfuXIwaNUoF0R4eHipIlVncZDT5if/ZubikLaVKlcowujtv3jzVphdffFHlGS9fvhx37txRNYSJiMjwyQVqOXE34lGet4WIjCiHN7P9+/eroHTdunUwNTVF37591ZTDuZGQkAA/Pz81e5uOHEtSEOQiuMd5+PAhypUrp3KJ5YK5L774Qk18IQIDA1V6hRxDx8HBQaVKyDH79++f5Xjx8fFq0YmKilI/pQqFLPT8dOeR59Mwsf8Mn7H1YQnbnP35+uyf87j9IAb9G7mjmK0FDJmx9WFhw/7Tv9ycy1wFvDJKKjm0sly5cgVNmzZVqQMS7EraQG6Fh4cjOTk5wwitkPWLFy9me59q1aqpQFtGbiMjI9WFc9KOc+fOoUyZMmm5xNkd83F5xlJqbfr06Vm2SwUKGW0m/dmxY4fWTaDnwP4zfMbSh5LOUMzSDBEJspZdMm+q2vrgUSK+3nkF83dfRuOSqWjlmoJSNjBoxtKHhRX7T39iY2P1H/B26dIFO3fuhJOTE4YMGYIRI0ao4DO/yeQW6Se4kGC3Ro0a+PHHH/HZZ5890zFlhFnyiNOP8Lq7u6Njx44qX5j08ylM3uQdOnSAhYVhj7IURuw/w2eMfWhRPgRvrT6lfk+fzvtf+GuCuX3rIDEpBUsP38CF4GgcCjHBoRBTtK7qhOFNy8G7oqNBzRBqjH1YmLD/9E/3jbxeA17pnLVr1+KFF16AmZkZ9EGCZzlWSEhIhu2yLrm5OW1XvXr11Iiz0N1PjiFVGtIf09PTM9tjWFlZqSW7Y/NFqV88p4aN/Wf4jKkPX/AsA3NzM1WNIX0dXpdMdXhfblQWR67dxy8Hr2HXxVDsvRSuluoudhjZvAJ6eJaGlbl+/q7lB2Pqw8KI/ac/uTmPOQ54N23aBH2ztLREgwYNsGvXLvTs2VNtk7xcWR87dmyOjiEpEWfOnEHXrl3VeoUKFVTQK8fQBbjyCUCqNYwZM0bvz4GIiLQjQW0HD5cnzrQmo7jelUqoJTA8BksPBeLP47dwMTga7609jVlbA1R938FNyqJE0ayDH0RUiC9a0xdJJRg6dCgaNmyIxo0bqwoLMTExqmqDkPQJNzc3lWcrPv30UzRp0kRViIiIiMDs2bNVWTKZAU73H9vbb7+NGTNmoEqVKioA/vjjj1G6dOm0oJqIiIyHBLcSzOZEBaci+PTFWni3QzWsOhaEZYeuIzgqDt/svIQFe6/gJU83jGxRAVVL2eV5u4moEAW8/fr1Q1hYmJooQi4qk1HZrVu3pl10FhQUpCo36Dx48ECVMZN9ixcvrkaIDx8+rEqa6UyaNEkFza+99poKips3b66OmXmCCiIiKpwcbC0wulUlldLw75m7WHIwEKduRWLN8ZtqaVHFSd3WqmpJg8rzJaLsmaRK4VrKQFIgpJSZVIHgRWv6S9b/999/VeoJc5cMD/vP8LEPn0z+FPrdeIBfDgZi27ngtEktKjsXxYhmFdCrvhusLbTN82UfGjb2n7bxmuYjvERERFqTUdyG5R3VcvN+LJYeuo4/jt/EldCHmLL+DGZvu4jBTcqpXF9ne35bSFSoZlojIiIyNu6Otpja3QM+k9vio241UKa4DR7EJuK73VfQbNZuTPjjJM7didS6mUSUCxzhJSIiyoadtQVebVERw5qWx47zIfj5YKBKe/jL/7ZamlR0xKvNK6JtdWeYpqsKQUQFDwNeIiKiJzA3M0WX2q5qOXkzQuX5yoVuUttXFqn8MLxZefRpUAa2lvyzSlQQMaWBiIgohzzdi+G7AfVwYFIbvN6qIuyszVVt36kbz6HJF7swc8sF3I18pHUziSgTBrxERES5VLqYDSZ3qYEjk9theo+aKF/CFlFxSfhx3zW0mLUH41adwKmbEVo3k4j+H797ISIiekZFrMwxtGl5VcFh98VQNX2xpDlsOnVHLQ3LFVf1fDvWdMkw+xsR5S8GvERERM9JgtkOHqXUcvZ2pJrI4u/Td3D8xgO1SKWH4c0qoG/DMupiOCLKX0xpICIi0qNabg6Y288TB99vi7FtKqO4rQVuPXiEz/45D++Zu9VPqfVLRPmHAS8REVEeKGVvjYmdquHwB+3wxUu1UalkETyMT1JVHlrN3oMxK/zgd+O+muWNiPIWUxqIiIjykI2lGQZ6lUX/Ru7YdzlMpTscuByOLWeD1VLXvZjK8+1SywUWZhyHIsoLDHiJiIjygUxO0aaas1ouBkepwHfDyTuqmoNUdXB1sFYXwA1oVBYOthnzfJNTUuEbeB9+4SYoEXgf3pWdeREcUS4w4CUiIspn1V3s8VWfupjUuTpWHLmhlruRcfhyy0XM33UZLzcooy5yK+9UBFvP3sX0v8+r2wEzLL98XAXH07p7oHMtV62fCpFBYMBLRESkEaeiVni7fVWMblUJm07eUfm9ASHR+NXnBpYfuYHapR1w+nZklvsFR8ZhzAp/LBxcn0EvUQ4wWYiIiEhj1hZm6NvIHVvfboEVI73QplpJyLVs2QW7QneZm4z8SroDET0ZA14iIqICwsTEBM2rOGHp8MaY83LdJ+4rYa6kORwNvJ9v7SMyVAx4iYiICiALs5xdlBYaLbm9RPQkDHiJiIgKIGc7a73uR1SYMeAlIiIqgBpXcFTVGJ40zutYxFLtR0RPxoCXiIioAJI6u1J6TDwu6I2ITcBf/rfytV1EhogBLxERUQElJcek9JiLQ8a0BRn5lZFdKdDw3trT+H73ZU5RTPQErMNLRERUwIPeDh4u8LkSiu0HfNGxhZeaaU0mWpu1NQCL9l3FnO2XEBIVj0961OQMbETZ4AgvERFRASdBrFcFRzRwSlU/ZV1KmH3QpTo+6e4BExPgtyM38MbvfohLTNa6uUQFDgNeIiIiAzasWQV8P6A+LM1Mse1cCAb/7Ktye4nofxjwEhERGbhudVyxfGRj2Fmb4/iNB+izyAe3Ix5p3SyiAoMBLxERkRFoUrEE1o5uChd7a1wJfYhePxzCxeAorZtFVCAw4CUiIjIS1Vzs8NcbTVHFuai6iO3lhT7wuXpP62YRaY4BLxERkREpXcxGjfQ2Lu+I6PgkDF1yFP+cvqN1s4g0xYCXiIjIyDjYWqic3s41XZCQnIK3Vp3AkoOBWjeLSDMMeImIiIyQtYUZFgyqjyHe5SBzUnz6z3nM/PcCUmS2CqJChgEvERGRkZJ6vdN71MR7naqp9R/3X8OEP04iISlF66YR5SsGvEREREZMJqh4s01lzHm5LsxNTbDh5B2MWHYM0XGJWjeNKN8w4CUiIioE+jQog5+HNoStpRkOXglHvx+PIDQ6TutmEeULBrxERESFROtqzlj9WhM4FbXE+btR6PXDYVwLe6h1s4jyHANeIiKiQqROmWJYN6YpypWwxa0Hj9B74WH4Bz3QullEeYoBLxERUSFTrkQRFfTWKeOAB7GJGLj4CHZdCNG6WUR5hgEvERFRIeRU1AqrRjVB62olEZeYglHLj2P10SCtm0WUJxjwEhERFVJFrMyxeEhDdUGblOf94K8zmLfzElKlcC+REWHAS0REVIhZmJlidp86GNumslqft/Mypqw/g6Rk1uol48GAl4iIqJCTWr0TO1XDZy/WhIkJsOroTYxe4YdHCclaN41ILxjwEhERkfKKd3ksHNQAluam2HkhFAN/PoL7MQlaN4vIOALeBQsWoHz58rC2toaXlxeOHj2ao/utXr1afSrt2bNnhu3Dhg1T29MvnTt3zqPWExERGY/OtVzw+6tecLCxwImgCPRZdBg378dq3Swiww5416xZgwkTJmDatGnw9/dH3bp10alTJ4SGhj7xftevX8fEiRPRokWLbG+XAPfu3btpy6pVq/LoGRARERmXRuUdsXa0N0o7WONaWAx6LTyMc3citW4W0TMzh8bmzp2LUaNGYfjw4Wp90aJF2Lx5M5YsWYIPPvgg2/skJydj0KBBmD59Og4cOICIiIgs+1hZWcHFxSVHbYiPj1eLTlRUlPqZmJioFnp+uvPI82mY2H+Gj31o+PK7D8s7WmPNa43x6nJ/BIQ8RN8fffDDAE80rVQiXx7f2PA9qH+5OZcmqRrWHklISICtrS3Wrl2bIS1h6NChKojduHFjtveT0eDTp09j/fr1Kn1B9t2wYUPa7bJN1i0tLVG8eHG0bdsWM2bMQIkS2b9JP/nkExU8Z7Zy5UrVPiIiosIqNgn4JcAUV6JMYWaSioGVUtCwJMuWkfZiY2MxcOBAREZGwt7evuCO8IaHh6vR2lKlSmXYLusXL17M9j4HDx7EL7/8gpMnTz72uJLO0KtXL1SoUAFXr17FlClT0KVLF/j4+MDMzCzL/pMnT1ZpFelHeN3d3dGxY8ennkDK+aewHTt2oEOHDrCwsNC6OZRL7D/Dxz40fFr2YfekFExadwb/ng3Bb1fM4Fa5KkY2K5+vbTB0fA/qn+4beYNIaciN6OhovPLKK1i8eDGcnJweu1///v3Tfq9duzbq1KmDSpUqYe/evWjXrl226Q+yZCYvSL4o9Yvn1LCx/wwf+9DwadGH8nDfD2yAzzafx9JD1/Hl1ksIe5iID7vWgKmpSb62xdDxPag/uTmPmga8ErTKiGtISMb5u2U9u/xbGa2Vi9W6d++eti0l5b/C2Obm5ggICFCBbWYVK1ZUj3XlypVsA14iIiJ6Mglsp77gARd7a8zcchG/HAxESFQcvu5bF1bmWb89JSpINK3SIDm2DRo0wK5duzIEsLLu7e2dZf/q1avjzJkzKp1Bt/To0QNt2rRRv0saQnZu3bqFe/fuwdXVNU+fDxERkTGTMp+vt6qEef08YW5qgn9O38WwJccQFccLsahg0zylQXJn5SK1hg0bonHjxpg3bx5iYmLSqjYMGTIEbm5umDlzpqrTW6tWrQz3L1asmPqp2/7w4UN1AVrv3r3VKLGMCk+aNAmVK1dW5c6IiIjo+fSs54YSRS0x+jc/+Fy7h76LfPDriMYoZW+tddOICmYd3n79+mHOnDmYOnUqPD091Ujt1q1b0y5kCwoKUnV0c0pSJKSCg4z8Vq1aFSNHjlSjyFK+LLs8XSIiIsq9FlVKYs3r3nAqaoWLwdHo9cNhXAmN1rpZRAVzhFeMHTtWLdmRC82eZNmyZRnWbWxssG3bNr22j4iIiLKq5eaA9W80xZAlRxEYHoPeC32wZFhDNCjnqHXTiArWCC8REREZLndHW6wb0xSe7sUQ+SgRAxf7Ytu5YK2bRZQBA14iIiJ6Lo5FLLFylBfaVXdGfFIKxqzww4ojN7RuFlEaBrxERET03GwtzfHjKw3Qr6E7UlKBjzacxdfbA6DhhK5EaRjwEhERkV6Ym5niy961Mb5dFbX+3e4reH/daSQm/1czn0grDHiJiIhIr7V63+lQFV+8VBsyCdsfx2/hteXHEZuQpHXTqBBjwEtERER6N9CrLH58pSGszE2xJyAMA346gnsP47VuFhVSDHiJiIgoT3TwKIWVo5qgmK0FTt2KRO+FhxF0L1brZlEhxICXiIiI8kyDcsWxdnRTuBWzwfV7sei18BDO3IrUullUyDDgJSIiojxV2bko/nqjKWq42iP8YQL6/+SD/ZfCtG4WFSIMeImIiCjPlbK3xh+vN0GzyiUQk5CMEcuO4S//W+q25JRU+Fy9h40nb6ufsk5kdFMLExERkfGzs7bA0mGNMfHPU9h06g4m/HEK+y+F40jgPQRHxqXt5+pgjWndPdC5lqum7SXjwRFeIiIiyjeW5qaY188To1pUUOsbTt7OEOwKWR+zwh9bz97VqJVkbBjwEhERUb4yNTXBB11qwM46+y+adQkN0/8+z/QG0gsGvERERJTvjgbeR3Tc4yejkDD3bmSc2o/oeTHgJSIionwXGh2n1/2InoQBLxEREeU7Zztrve5H9CQMeImIiCjfNa7gqKoxmDxhH8cilmo/oufFgJeIiIjynZmpiSo9Jh4X9EbEJmDTqdv52i4yTgx4iYiISBNSZ3fh4PpwcciYtiDr9csVgxRoeGfNKfyw9wpSU1mtgZ4dJ54gIiIiTYPeDh4uqhqDXKAmObuSxiCjvjO3XMDiA4H4amsA7kQ8wvQetdTIMFFuMeAlIiIiTUkQ612pRJbtH3bzgKuDDT7bfB4rjgQhJCoe8/vXg42lmSbtJMPFlAYiIiIqsEY0r4AFA+urGdp2nA/BwJ+P4H5MgtbNIgPDgJeIiIgKtK61XbFipBccbCxwIigCvRceRtC9WK2bRQaEAS8REREVeJLXu26MN9yK2SAwPAa9Fh7CqZsRWjeLDAQDXiIiIjIIlZ3t8NcbTeHhao/whwno/9MR7LkYqnWzyAAw4CUiIiKDUcreGmteb4IWVZzwKDEZry4/jjXHgrRuFhVwDHiJiIjIoNhZW2DJsEboVd8NySmpeH/dGXyz4xJr9dJjMeAlIiIig2NhZoqvX66LsW0qq/Vvd13G++tOIzE5ReumUQHEgJeIiIgMkomJCSZ2qobPX6oFmY/ij+O38OqvxxETn6R106iAYcBLREREBm2QVzn89EpDWFuYYt+lMPT7yUfN2kakw4CXiIiIDF57j1JYNaoJHItY4uztKPT64TCuhj3UullUQDDgJSIiIqNQr2xx/DWmKcqVsMWtB4/UBBV+N+5r3SwqABjwEhERkdEo71QE68Y0Rd0yDoiITcTAxb7YejZY62aRxhjwEhERkVFxKmqFVa81QbvqzohPSsGY3/2w3Oe61s0iDTHgJSIiIqNja2mOH19pgAGNy0LK807deA5fbrmIlBTW6i2MGPASERGRUTI3M8UXL9XCxI5V1fqifVcx4Y+TSEhird7ChgEvERERGXWt3rFtq2DOy3VhbmqCDSfvYNjSo4iKS9S6aZSPGPASERGR0evToIyajriIpRkOX72Hvot8cDfykdbNonzCgJeIiIgKhZZVS2LN694oaWeFi8HRqlZvQHC01s2ifMCAl4iIiAqNWm4OqlZvpZJFcDcyDn0WHYbP1XtaN4sKQ8C7YMEClC9fHtbW1vDy8sLRo0dzdL/Vq1er3JyePXtm2J6amoqpU6fC1dUVNjY2aN++PS5fvpxHrSciIiJD4u5oq2r1NixXHNFxSRi65Cg2nbqjdbPImAPeNWvWYMKECZg2bRr8/f1Rt25ddOrUCaGhoU+83/Xr1zFx4kS0aNEiy21fffUV5s+fj0WLFsHX1xdFihRRx4yL47zaREREBBSztcSKV73QpZYLEpJTMG7VCSzef00NmpHx0TzgnTt3LkaNGoXhw4fDw8NDBam2trZYsmTJY++TnJyMQYMGYfr06ahYsWKG2+SFOm/ePHz00Ud48cUXUadOHSxfvhx37tzBhg0b8uEZERERkSGwtjDD9wPrY1jT8mr9838v4NN/ziOZtXqNjrmWD56QkAA/Pz9Mnjw5bZupqalKQfDx8Xns/T799FM4Oztj5MiROHDgQIbbAgMDERwcrI6h4+DgoFIl5Jj9+/fPcrz4+Hi16ERFRamfiYmJaqHnpzuPPJ+Gif1n+NiHho99mHemdK4CF3tLfLn1EpYeuo47D2Ixp09tFRDrC/tP/3JzLjUNeMPDw9VobalSpTJsl/WLFy9me5+DBw/il19+wcmTJ7O9XYJd3TEyH1N3W2YzZ85Uo8WZbd++XY02k/7s2LFD6ybQc2D/GT72oeFjH+YNVwBDq5hgxRVTbDsfikvf7MSoaskoYqHfx2H/6U9sbKxhBLy5FR0djVdeeQWLFy+Gk5OT3o4rI8ySR5x+hNfd3R0dO3aEvb293h6nsH8Kkzd5hw4dYGGh5/89KM+x/wwf+9DwsQ/zXlcAHQLvY8zKkwiMTsLP1x3wy5D6KFPc5rmPzf7TP9038gU+4JWg1czMDCEhIRm2y7qLi0uW/a9evaouVuvevXvatpSU/6YHNDc3R0BAQNr95BhSpSH9MT09PbNth5WVlVoykxckX5T6xXNq2Nh/ho99aPjYh3mredVSWDu6qZqN7Vp4DPouPoqlwxqpcmb6wP7Tn9ycR00vWrO0tESDBg2wa9euDAGsrHt7e2fZv3r16jhz5oxKZ9AtPXr0QJs2bdTvMipboUIFFfSmP6Z8ApBqDdkdk4iIiCi9ai52WP9GM1R3sUNYdDz6/eiD/ZfCtG4WPQfNUxoklWDo0KFo2LAhGjdurCosxMTEqKoNYsiQIXBzc1N5tlKnt1atWhnuX6xYMfUz/fa3334bM2bMQJUqVVQA/PHHH6N06dJZ6vUSERERZcfFwRp/jPbG6N/81FTEI5Ydw5e966gpisnwaB7w9uvXD2FhYWqiCLmoTNIOtm7dmnbRWVBQkKrckBuTJk1SQfNrr72GiIgING/eXB1TAmYiIiKinLC3tsCy4Y3x3tpT2HjyDib+eQrBkY/wZpvKauIrMhyaB7xi7NixasnO3r17n3jfZcuWZdkmL0IpXSYLERER0bOyNDfFN3094epgg0X7rmLO9ku4ExmHT3vUhLmZ5tMZUA6xp4iIiIiewNTUBB90qY5PX6wJGdhd6RuE13/zQ2xCktZNoxxiwEtERESUA0O8y2PR4AawMjfFrouhGLDYF+EP/zdxFRVcDHiJiIiIcqhTTResHOWFYrYWOHUzAr0XHsb18Bitm0VPwYCXiIiIKBcalHPEujFN4e5ogxv3YlXQe/JmhNbNoidgwEtERESUS5VKFlVBb203B9yLSUD/n3yw60LGibSo4GDAS0RERPQMnO2ssfq1JmhVtSTiElMwavlxdUEbFTwMeImIiIieURErc/w8tCH6NiyDlFRgyvoz+Hp7AFJTU7VuGqXDgJeIiIjoOViYmWJW7zp4u30Vtf7d7iuY+OdpJCanaN00+n8MeImIiIiek0x69Xb7qpjVuzbMTE2wzv+Wmo74YXwSklNS4Rt4H37hJuqnrFMhnGmNiIiIyBj0a1RW5fa+8bs/DlwOR+dv9iMhOQWh0VKv1wzLLx+Hq4M1pnX3QOdarlo3t9DgCC8RERGRHrWp7ow1rzeBnbU5bkU8+v9g93+CI+MwZoU/tp69q1kbCxsGvERERER6VrO0A6zNzbK9TZfQMP3v80xvyCcMeImIiIj07GjgfYQ9YdphCXPvRsap/SjvMeAlIiIi0rPQ6Di97kfPhwEvERERkZ7JhWs5cepmBBKSWL4srzHgJSIiItKzxhUcVTUGk6fst+TQdbSZsxd/HL+JJNbtzTMMeImIiIj0TGrxSukxkTnoNfn/pX8jd5S0s8LtiEeYtPY0OnyzHxtP3uaFbHmAAS8RERFRHpA6uwsH14eLQ8b0BlmX7V/2roP977XBh11rwLGIJQLDYzB+9Ul0+Xa/KlnG6Yn1hxNPEBEREeVh0NvBwwU+V0Kx/YAvOrbwgndlZzUCLGwszTCqZUUM8CqLZYcC8dP+a7gU8hCjV/ijlps93u1QDa2rlVQzudGz4wgvERERUR6S4NargiMaOKWqn7pgN72iVuYY27YKDrzfFuPaVkYRSzOcvR2F4cuOoffCwzh8JVyTthsLBrxEREREBYSDjQUmdKymAt/XW1aEtYUp/IMiMPBnXwz46QiOX2fd3mfBgJeIiIiogJGc3slda6gc32FNy8PSzBQ+1+6hzyIfDFt6FGduRWrdRIPCgJeIiIiogHK2t8YnPWpiz3utMaCxu0qH2BsQhu7fH8Rry4/jYnCU1k00CAx4iYiIiAo4t2I2mNmrDnZNaIVe9dwg17BtPx+CLt8ewFurTuBq2EOtm1igMeAlIiIiMhDlnYpgbj9PbH+7JbrVdoVULvv71B10mLsPE/88hZv3Y7VuYoHEgJeIiIjIwFQpZYcFg+pj87jmaF/DGTJXxVq/W2rWtg/Xn8HdyEdaN7FAYcBLREREZKBqlnbAz0MbYf0bTdGiihOSUlLxu28QWs3ei0//Po+w6Hitm1ggMOAlIiIiMnD1yhbHbyO9sOa1Jmhc3hEJSSlYcigQLb/ag1lbLyIiNgGFGQNeIiIiIiPhVbEE1rzeBL+NbIy67sXwKDEZC/deRYtZezBv5yVExSWiMGLAS0RERGREZBriFlVKYsMbTfHzkIao4WqP6PgkzNt5WY34/rD3CmITklCYMOAlIiIiMtLAt71HKWx+qzkWDKyPSiWLICI2EV9tDVCB7y8HAxGXmIzCgAEvERERkREzNTVBtzqu2P5OK8ztWxdlHW0R/jABn/1zHq1n78WKIzdUzq8xY8BLREREVAiYmZqgV/0y2PVuK8zsVRuuDtYIjorDRxvOou3Xe/Hn8ZtISjbOwJcBLxEREVEhYmFmigGNy2LPxNb4pLsHnIpa4daDR3hv7Wl0/GY/Np26gxQp7GtEGPASERERFULWFmYY1qwCDkxqgyldq6O4rQWuhcdg3KoTasribeeCkSpTuRkBBrxEREREhZiNpRlea1kJB95vi3c7VIWdtTkCQqLx+m9+6PH9IewNCDX4wJcBLxERERGhqJU53mpXBQcntcXYNpVha2mGM7cjMWzpMby8yAc+V+/BUDHgJSIiIqI0DrYWmNipmkp1GNWiAqzMTXH8xgMMWHwEAxcfgd+NB8gsOSVVBcQbT95WP2W9IDHXugFEREREVPCUKGqFD7t54NUWFbFgzxWsOhqEw1fv4fDCw2hTrSTe7VgNtdwcsPXsXUz/+zzuRsal3VcqQEzr7oHOtVxREDDgJSIiIqLHKmVvjU9frIXXWlbEd7uuYK3/LewJCFOLp3sxnLwZkeU+wZFxGLPCHwsH1y8QQS9TGoiIiIjoqcoUt8WsPnWwa0IrvFTPTW3LLtgVuoQGGfktCOkNBSLgXbBgAcqXLw9ra2t4eXnh6NGjj933r7/+QsOGDVGsWDEUKVIEnp6e+O233zLsM2zYMDWdXvqlc+fO+fBMiIiIiIxbeaci+KafJ2b3qfPE/STMlTSHo4H3gcKe0rBmzRpMmDABixYtUsHuvHnz0KlTJwQEBMDZ2TnL/o6Ojvjwww9RvXp1WFpa4p9//sHw4cPVvnI/HQlwly5dmrZuZWWVb8+JiIiIyNhZmuds3DQ0+n+5vYV2hHfu3LkYNWqUClo9PDxU4Gtra4slS5Zku3/r1q3x0ksvoUaNGqhUqRLGjx+POnXq4ODBgxn2kwDXxcUlbSlevHg+PSMiIiIi4+dsZ63X/Yx2hDchIQF+fn6YPHly2jZTU1O0b98ePj4+T72/FEHevXu3Gg2eNWtWhtv27t2rRn0l0G3bti1mzJiBEiVKZHuc+Ph4tehERUWpn4mJiWqh56c7jzyfhon9Z/jYh4aPfWjYjLH/6pWxg4u9FUKi4tNydtMzAeDiYKX2y4vnnZtjmqRqOHXGnTt34ObmhsOHD8Pb2ztt+6RJk7Bv3z74+vpme7/IyEh1PwlSzczM8MMPP2DEiBFpt69evVqNEleoUAFXr17FlClTULRoURVEy/6ZffLJJ5g+fXqW7StXrlTHISIiIqKsTt0zwZJLpulCXJ3/wssRVVNQt0TehJqxsbEYOHCgigvt7e0Ldg7vs7Czs8PJkyfx8OFD7Nq1S+UAV6xYUaU7iP79+6ftW7t2bZXyIOkPMurbrl27LMeTEWY5RvoRXnd3d3Ts2PGpJ5By/ilsx44d6NChAywsLLRuDuUS+8/wsQ8NH/vQsBlr/3UFUP9cCGb8exHBUfEZ6vB+2KU6OtUslWePrftGPic0DXidnJzUiGtISEiG7bIuebePI2kPlStXVr9LlYYLFy5g5syZaQFvZhIMy2NduXIl24BX8n2zu6hNXpDG9KIsCHhODRv7z/CxDw0f+9CwGWP/veBZBl3quKlqDHKBmuTsNq7gCDPT9CO++peb86jpRWtSZaFBgwZqlFYnJSVFradPcXgauU/6HNzMbt26hXv37sHVVfvCx0RERETGxszUBN6VSuBFTzf1M6+D3dzSPKVBUgmGDh2qaus2btxYlSWLiYlRVRvEkCFDVL6ujOAK+Sn7SoqCBLn//vuvqsO7cOFCdbukOUg+bu/evdUoseTwSk6wjAinL1tGRERERIWD5gFvv379EBYWhqlTpyI4OFilKGzduhWlSv2X8xEUFKRSGHQkGH7jjTfUqK2NjY2qx7tixQp1HCEpEqdPn8avv/6KiIgIlC5dWuXifvbZZ6zFS0RERFQIaR7wirFjx6olO3KhWXpSXkyWx5EgeNu2bXpvIxEREREZJs0nniAiIiIiyksMeImIiIjIqDHgJSIiIiKjxoCXiIiIiIwaA14iIiIiMmoMeImIiIjIqDHgJSIiIiKjViDq8BY0qamp6mdUVJTWTTEaiYmJiI2NVefU2OYQLwzYf4aPfWj42IeGjf2nf7o4TRe3PQkD3mxER0ern+7u7lo3hYiIiIieErc5ODg8aReYpOYkLC5kUlJScOfOHdjZ2cHExETr5hjNpzD5AHHz5k3Y29tr3RzKJfaf4WMfGj72oWFj/+mfhLAS7JYuXRqmpk/O0uUIbzbkpJUpU0brZhgleZPzjW642H+Gj31o+NiHho39p19PG9nV4UVrRERERGTUGPASERERkVFjwEv5wsrKCtOmTVM/yfCw/wwf+9DwsQ8NG/tPW7xojYiIiIiMGkd4iYiIiMioMeAlIiIiIqPGgJeIiIiIjBoDXiIiIiIyagx4Kc/MnDkTjRo1UjPWOTs7o2fPnggICNC6WfQcvvzySzX74Ntvv611UygXbt++jcGDB6NEiRKwsbFB7dq1cfz4ca2bRTmQnJyMjz/+GBUqVFB9V6lSJXz22WdqhikqmPbv34/u3bur2b/k/8sNGzZkuF36burUqXB1dVV92r59e1y+fFmz9hYWDHgpz+zbtw9vvvkmjhw5gh07diAxMREdO3ZETEyM1k2jZ3Ds2DH8+OOPqFOnjtZNoVx48OABmjVrBgsLC2zZsgXnz5/H119/jeLFi2vdNMqBWbNmYeHChfj+++9x4cIFtf7VV1/hu+++07pp9BjyN65u3bpYsGBBtrdL/82fPx+LFi2Cr68vihQpgk6dOiEuLi7f21qYsCwZ5ZuwsDA10iuBcMuWLbVuDuXCw4cPUb9+ffzwww+YMWMGPD09MW/ePK2bRTnwwQcf4NChQzhw4IDWTaFn8MILL6BUqVL45Zdf0rb17t1bjQyuWLFC07bR08kI7/r169U3nEJCLhn5fffddzFx4kS1LTIyUvXxsmXL0L9/f41bbLw4wkv5Rt7UwtHRUeumUC7JSH23bt3UV29kWDZt2oSGDRvi5ZdfVh8469Wrh8WLF2vdLMqhpk2bYteuXbh06ZJaP3XqFA4ePIguXbpo3TR6BoGBgQgODs7wf6mDgwO8vLzg4+OjaduMnbnWDaDCISUlReV9ylertWrV0ro5lAurV6+Gv7+/Smkgw3Pt2jX1lfiECRMwZcoU1Y/jxo2DpaUlhg4dqnXzKAcj9FFRUahevTrMzMxUTu/nn3+OQYMGad00egYS7AoZ0U1P1nW3Ud5gwEv5NkJ49uxZNTJBhuPmzZsYP368ysG2trbWujn0jB82ZYT3iy++UOsywivvRckfZMBb8P3xxx/4/fffsXLlStSsWRMnT55UgwfytTj7jyjnmNJAeW7s2LH4559/sGfPHpQpU0br5lAu+Pn5ITQ0VOXvmpubq0VysOWCC/ldRpuoYJMrwT08PDJsq1GjBoKCgjRrE+Xce++9p0Z5JbdTqmu88soreOedd1QVHDI8Li4u6mdISEiG7bKuu43yBgNeyjOSnC/BriTs7969W5XVIcPSrl07nDlzRo0q6RYZLZSvU+V3+YqVCjZJI8pcDlDyQcuVK6dZmyjnYmNjYWqa8U+1vO9k5J4Mj/wdlMBW8rJ1JGVFqjV4e3tr2jZjx5QGytM0BvkabuPGjaoWry4/SRL05QpjKvik3zLnXEsJHannylxswyCjgXLhk6Q09O3bF0ePHsVPP/2kFir4pJ6r5OyWLVtWpTScOHECc+fOxYgRI7RuGj2hqs2VK1cyXKgmAwRywbb0o6SkSLWbKlWqqABY6ixLioqukgPlDZYlozwtx5KdpUuXYtiwYfneHtKP1q1bsyyZgZGUosmTJ6vi9vIHVi5gGzVqlNbNohyIjo5WAZF8UybpRRIYDRgwQE1cIBceUsGzd+9etGnTJst2ybmW0mMSdk2bNk196IyIiEDz5s1VyceqVatq0t7CggEvERERERk15vASERERkVFjwEtERERERo0BLxEREREZNQa8RERERGTUGPASERERkVFjwEtERERERo0BLxEREREZNQa8RERERGTUGPASERXyGRE3bNigdTOIiPIUA14iIo3IFNsScGZeOnfurHXTiIiMirnWDSAiKswkuF26dGmGbVZWVpq1h4jIGHGEl4hIQxLcuri4ZFiKFy+ubpPR3oULF6JLly6wsbFBxYoVsXbt2gz3P3PmDNq2batuL1GiBF577TU8fPgwwz5LlixBzZo11WO5urpi7NixGW4PDw/HSy+9BFtbW1SpUgWbNm3KcPvZs2dVG4oWLYpSpUrhlVdeUffRad26NcaNG4dJkybB0dFRPYdPPvkkD84WEdGzYcBLRFSAffzxx+jduzdOnTqFQYMGoX///rhw4YK6LSYmBp06dVIB8rFjx/Dnn39i586dGQJaCZjffPNNFQhLcCzBbOXKlTM8xvTp09G3b1+cPn0aXbt2VY9z//59dVtERIQKqOvVq4fjx49j69atCAkJUfun9+uvv6JIkSLw9fXFV199hU8//RQ7duzIl3NERPRUqUREpImhQ4emmpmZpRYpUiTD8vnnn6vb5b/o0aNHZ7iPl5dX6pgxY9TvP/30U2rx4sVTHz58mHb75s2bU01NTVODg4PVeunSpVM//PDDx7ZBHuOjjz5KW5djybYtW7ao9c8++yy1Y8eOGe5z8+ZNtU9AQIBab9WqVWrz5s0z7NOoUaPU999//5nPDRGRPjGHl4hIQ23atFGjsOlJWoCOt7d3httk/eTJk+p3GemtW7euGlnVadasGVJSUhAQEKBSIu7cuYN27do9sQ116tRJ+12OZW9vj9DQULUuI8t79uxR6QyZXb16FVWrVs1yDCGpE7pjEBFpjQEvEZGGJMDMnGKgL5LXmxMWFhYZ1iVQlqBZSD5w9+7dMWvWrCz3k6A2J8cgItIac3iJiAqwI0eOZFmvUaOG+l1+ygis5PLqHDp0CKampqhWrRrs7OxQvnx57Nq165kfv379+jh37pw6jgTm6Zf0I8tERAUZA14iIg3Fx8cjODg4w5K+AoJciCZVFi5duoRp06bh6NGjaRelycVl1tbWGDp0qKqkIKkHb731lqqiINUUhFRL+PrrrzF//nxcvnwZ/v7++O6773LcPrngTS5gGzBggLowTtIYtm3bhuHDhyM5OTkPzggRkf4xpYGISENS9SB9aoCQ0dmLFy+mVVBYvXo13njjDbXfqlWr4OHhoW6TMmISfI4fPx6NGjVS61LRYe7cuWnHkmA4Li4O33zzDSZOnAgnJyf06dMnx+0rXbq0GjV+//330bFjRxWglytXTtUPlpFkIiJDYCJXrmndCCIiykryYNevX4+ePXtq3RQiIoPGj+dEREREZNQY8BIRERGRUWMOLxFRAcWMMyIi/eAILxEREREZNQa8RERERGTUGPASERERkVFjwEtERERERo0BLxEREREZNQa8RERERGTUGPASERERkVFjwEtEREREMGb/B8Ur/dI7z+TgAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 800x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot: Trainingsverlust über die Epochen\n",
"plt.figure(figsize=(8, 5))\n",
"plt.plot(range(1, len(train_losses) + 1), train_losses, label=\"Trainingsverlust\", marker='o')\n",
"plt.xlabel(\"Epochen\")\n",
"plt.ylabel(\"Verlust\")\n",
"plt.title(\"Trainingsverlust über die Epochen\")\n",
"plt.grid(True)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Finale Evaluierung & Confusion Matrix\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/l7/061cw0t95vz1myntpf9bj9540000gn/T/ipykernel_14038/1822405546.py:2: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
" model.load_state_dict(torch.load(\"best_model.pth\"))\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🚀 Finale Test Accuracy: 0.6579\n",
"🚀 Finale Test F1 Score: 0.6966\n"
]
}
],
"source": [
"# Testen des Modells\n",
"model.load_state_dict(torch.load(\"best_model.pth\"))\n",
"model.eval()\n",
"all_preds = []\n",
"all_labels = []\n",
"\n",
"with torch.no_grad():\n",
" for texts, labels in test_loader:\n",
" texts, labels = texts.to(device), labels.to(device)\n",
" outputs = model(texts)\n",
" predictions = (outputs > 0.5).float()\n",
" all_preds.extend(predictions.cpu().numpy())\n",
" all_labels.extend(labels.cpu().numpy())\n",
"\n",
"all_preds = [int(p[0]) for p in all_preds]\n",
"all_labels = [int(l[0]) for l in all_labels]\n",
"\n",
"# Test-Accuracy und F1-Score berechnen\n",
"accuracy = accuracy_score(all_labels, all_preds)\n",
"f1 = f1_score(all_labels, all_preds)\n",
"\n",
"print(f'🚀 Finale Test Accuracy: {accuracy:.4f}')\n",
"print(f'🚀 Finale Test F1 Score: {f1:.4f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Konfusionsmatrix"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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oOICACDNuewOICN+B1FRUXLgwIFk67V/QKlSpQIVFwAACMZEoFu3bvL000/L5s2bzfjLo0ePyqxZs2TgwIHy1FNPpU2UAACkAYvOgv43DTz33HNy5coVueeee+T8+fOmmSA0NNQkAr17906bKAEASAOujHwGtysR0CrA888/L4MGDTJNBLGxsVKhQgXJlStX2kQIAACCb0KhbNmymQQAAICMyqIg4H8fgQYNGkjDhg2vugAAkJFmFnQFaPHH2rVrpXnz5lKkSBFTaV+0aJF326VLl+TZZ5+VypUrS86cOc0+nTp1Mn3yEjt16pR06NBBwsPDJTIyUrp27Wqq9H5/B/6+oGrVqlKlShXvolWBixcvmjkENGgAAHBt586dM+fQKVOmJNum/e/0nDpkyBDzc8GCBWbofosWLXz20yRgz549smLFClmyZIlJLrp37y7+stxut1sCYPjw4SYTGTdunNgt7rLdEQBpL88dvewOAUhzF3a+kabHH7ki+XD46zX03luu63VaEVi4cKG0atXqqvts3bpV/vGPf8jPP/8sxYoVk71795oLcV1fo0YNs8/SpUuladOm8uuvv5oqQrrPpaD3HnjvvfcCdTgAADLU8MH4+Hg5e/asz+KZhv9G6TT+mjBoE4DauHGjeexJAlSjRo3E5XKZ4f3+CFgioEFlz549UIcDACBDGT16tJllN/Gi625UXFyc6TPQvn170x9ARUdHS8GCBX32y5o1q+TNm9dsS9NRA61bt/Z5ri0Lx44dk23btpn2DAAAnHgb4mcGD5b+/fv7rNN5dm6Edhxs27atOddOnTpV0oLfiYBmOIlpGaJs2bIycuRIue+++wIZGwAAacqSwGUCetK/0RN/SkmA9gtYtWqVtxrgme7/+PHjPvtfvnzZjCTQbWmWCCQkJMjjjz9uRgfkyZPHrzcCAAD+JQH79++X1atXS758+Xy216pVy9zob/v27XL77bebdZos6My/NWvWlDRLBLJkyWKu+rW3IokAACCjc9k0oZCOskt8A7+DBw/Krl27TBt/4cKF5aGHHjJDB3VYoF6Ee9r9dbtO6Fe+fHm5//77zf1/pk2bZhKHXr16Sbt27fwaMXBdTQOVKlWSn376SUqWLOnvSwEACCoumxIB7VenE/R5ePoWdO7c2QzH/+yzz7xz9ySm1YH69eubx3rDPz35671/tJm+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",
"text/plain": [
"<Figure size 600x500 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Konfusionsmatrix visualisieren\n",
"conf_matrix = confusion_matrix(all_labels, all_preds)\n",
"\n",
"plt.figure(figsize=(6,5))\n",
"sns.heatmap(conf_matrix, annot=True, fmt='d', cmap=\"Blues\", xticklabels=['No Humor', 'Humor'], yticklabels=['No Humor', 'Humor'])\n",
"plt.xlabel(\"Predicted Label\")\n",
"plt.ylabel(\"True Label\")\n",
"plt.title(\"Confusion Matrix\")\n",
"plt.show()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}