Created
December 5, 2021 21:38
-
-
Save ShairozS/f500a13e618f040281967c35d9aff538 to your computer and use it in GitHub Desktop.
Training MNIST with Cross Entropy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Training on MNIST Dataset with Cross-entropy Loss\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"D:\\Research\\ContrastiveRepresentationLearning\n" | |
] | |
} | |
], | |
"source": [ | |
"import os\n", | |
"#import torchsummary\n", | |
"import matplotlib.pyplot as plt\n", | |
"import torch\n", | |
"import numpy as np\n", | |
"import cv2\n", | |
"from torch import nn\n", | |
"from torch.utils.data import Dataset, DataLoader, SubsetRandomSampler\n", | |
"from torchvision import transforms, models\n", | |
"import tqdm\n", | |
"import torchsummary\n", | |
"\n", | |
"os.chdir('..'); os.chdir('..')\n", | |
"print(os.getcwd()) # Should be .\\ContrastiveLearning\n", | |
"from Code.trainers import Trainer\n", | |
"#from Code.models import SiameseNet\n", | |
"from Code.dataloaders import LabeledContrastiveDataset\n", | |
"from Code.utils import extract_embeddings, plot_embeddings\n", | |
"\n", | |
"\n", | |
"# Hyperparameters\n", | |
"N = 3000\n", | |
"EMB_SIZE = 32\n", | |
"DEVICE = 'cuda'\n", | |
"LR = 0.0005\n", | |
"EPOCHS = 10\n", | |
"NAME = 'MNIST_XENT_LOSS_' + '_'.join([str(N), str(LR), str(EPOCHS)])\n", | |
"\n", | |
"# Reproduciblity\n", | |
"SEED = 911\n", | |
"torch.manual_seed(SEED)\n", | |
"torch.backends.cudnn.deterministic = True\n", | |
"torch.backends.cudnn.benchmark = False\n", | |
"np.random.seed(SEED)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Create Dataloader and Inspect Data\n", | |
"---------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"root = r'D:\\Data\\Imagery\\MNIST\\MNIST'\n", | |
"mean, std = 0.1307, 0.3081\n", | |
"tfms = transforms.Compose([\n", | |
" transforms.ToTensor(),\n", | |
" transforms.Normalize((mean,), (std,))\n", | |
" ])\n", | |
"\n", | |
"\n", | |
"lcd = LabeledContrastiveDataset(root, transforms=tfms)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\Shair\\.conda\\envs\\pytorch\\lib\\site-packages\\torchvision\\transforms\\functional.py:114: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ..\\torch\\csrc\\utils\\tensor_numpy.cpp:143.)\n", | |
" img = torch.from_numpy(pic.transpose((2, 0, 1))).contiguous()\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"torch.Size([10, 1, 28, 28])\n", | |
"torch.Size([10, 1, 28, 28])\n", | |
"torch.Size([10])\n" | |
] | |
} | |
], | |
"source": [ | |
"datadict = lcd.__getitem__(4)\n", | |
"print(datadict[\"x1\"].shape); print(datadict[\"x2\"].shape); print(datadict[\"labels\"].shape)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from torchvision import transforms\n", | |
"\n", | |
"\n", | |
"train_sampler = SubsetRandomSampler(range(int(N*0.9)))\n", | |
"test_sampler = SubsetRandomSampler(range(int(N*0.9), N))\n", | |
"\n", | |
"siamese_train_loader = torch.utils.data.DataLoader(lcd, batch_size=None, sampler=train_sampler)\n", | |
"siamese_test_loader = torch.utils.data.DataLoader(lcd, batch_size=None, shuffle=test_sampler)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Model\n", | |
"------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"----------------------------------------------------------------\n", | |
" Layer (type) Output Shape Param #\n", | |
"================================================================\n", | |
" Conv2d-1 [-1, 64, 14, 14] 3,200\n", | |
" BatchNorm2d-2 [-1, 64, 14, 14] 128\n", | |
" ReLU-3 [-1, 64, 14, 14] 0\n", | |
" MaxPool2d-4 [-1, 64, 7, 7] 0\n", | |
" Conv2d-5 [-1, 64, 7, 7] 36,864\n", | |
" BatchNorm2d-6 [-1, 64, 7, 7] 128\n", | |
" ReLU-7 [-1, 64, 7, 7] 0\n", | |
" Conv2d-8 [-1, 64, 7, 7] 36,864\n", | |
" BatchNorm2d-9 [-1, 64, 7, 7] 128\n", | |
" ReLU-10 [-1, 64, 7, 7] 0\n", | |
" BasicBlock-11 [-1, 64, 7, 7] 0\n", | |
" Conv2d-12 [-1, 64, 7, 7] 36,864\n", | |
" BatchNorm2d-13 [-1, 64, 7, 7] 128\n", | |
" ReLU-14 [-1, 64, 7, 7] 0\n", | |
" Conv2d-15 [-1, 64, 7, 7] 36,864\n", | |
" BatchNorm2d-16 [-1, 64, 7, 7] 128\n", | |
" ReLU-17 [-1, 64, 7, 7] 0\n", | |
" BasicBlock-18 [-1, 64, 7, 7] 0\n", | |
" Conv2d-19 [-1, 128, 4, 4] 73,728\n", | |
" BatchNorm2d-20 [-1, 128, 4, 4] 256\n", | |
" ReLU-21 [-1, 128, 4, 4] 0\n", | |
" Conv2d-22 [-1, 128, 4, 4] 147,456\n", | |
" BatchNorm2d-23 [-1, 128, 4, 4] 256\n", | |
" Conv2d-24 [-1, 128, 4, 4] 8,192\n", | |
" BatchNorm2d-25 [-1, 128, 4, 4] 256\n", | |
" ReLU-26 [-1, 128, 4, 4] 0\n", | |
" BasicBlock-27 [-1, 128, 4, 4] 0\n", | |
" Conv2d-28 [-1, 128, 4, 4] 147,456\n", | |
" BatchNorm2d-29 [-1, 128, 4, 4] 256\n", | |
" ReLU-30 [-1, 128, 4, 4] 0\n", | |
" Conv2d-31 [-1, 128, 4, 4] 147,456\n", | |
" BatchNorm2d-32 [-1, 128, 4, 4] 256\n", | |
" ReLU-33 [-1, 128, 4, 4] 0\n", | |
" BasicBlock-34 [-1, 128, 4, 4] 0\n", | |
" Conv2d-35 [-1, 256, 2, 2] 294,912\n", | |
" BatchNorm2d-36 [-1, 256, 2, 2] 512\n", | |
" ReLU-37 [-1, 256, 2, 2] 0\n", | |
" Conv2d-38 [-1, 256, 2, 2] 589,824\n", | |
" BatchNorm2d-39 [-1, 256, 2, 2] 512\n", | |
" Conv2d-40 [-1, 256, 2, 2] 32,768\n", | |
" BatchNorm2d-41 [-1, 256, 2, 2] 512\n", | |
" ReLU-42 [-1, 256, 2, 2] 0\n", | |
" BasicBlock-43 [-1, 256, 2, 2] 0\n", | |
" Conv2d-44 [-1, 256, 2, 2] 589,824\n", | |
" BatchNorm2d-45 [-1, 256, 2, 2] 512\n", | |
" ReLU-46 [-1, 256, 2, 2] 0\n", | |
" Conv2d-47 [-1, 256, 2, 2] 589,824\n", | |
" BatchNorm2d-48 [-1, 256, 2, 2] 512\n", | |
" ReLU-49 [-1, 256, 2, 2] 0\n", | |
" BasicBlock-50 [-1, 256, 2, 2] 0\n", | |
" Conv2d-51 [-1, 512, 1, 1] 1,179,648\n", | |
" BatchNorm2d-52 [-1, 512, 1, 1] 1,024\n", | |
" ReLU-53 [-1, 512, 1, 1] 0\n", | |
" Conv2d-54 [-1, 512, 1, 1] 2,359,296\n", | |
" BatchNorm2d-55 [-1, 512, 1, 1] 1,024\n", | |
" Conv2d-56 [-1, 512, 1, 1] 131,072\n", | |
" BatchNorm2d-57 [-1, 512, 1, 1] 1,024\n", | |
" ReLU-58 [-1, 512, 1, 1] 0\n", | |
" BasicBlock-59 [-1, 512, 1, 1] 0\n", | |
" Conv2d-60 [-1, 512, 1, 1] 2,359,296\n", | |
" BatchNorm2d-61 [-1, 512, 1, 1] 1,024\n", | |
" ReLU-62 [-1, 512, 1, 1] 0\n", | |
" Conv2d-63 [-1, 512, 1, 1] 2,359,296\n", | |
" BatchNorm2d-64 [-1, 512, 1, 1] 1,024\n", | |
" ReLU-65 [-1, 512, 1, 1] 0\n", | |
" BasicBlock-66 [-1, 512, 1, 1] 0\n", | |
"AdaptiveAvgPool2d-67 [-1, 512, 1, 1] 0\n", | |
" ReLU-68 [-1, 512] 0\n", | |
" Linear-69 [-1, 10] 5,130\n", | |
"================================================================\n", | |
"Total params: 11,175,434\n", | |
"Trainable params: 11,175,434\n", | |
"Non-trainable params: 0\n", | |
"----------------------------------------------------------------\n", | |
"Input size (MB): 0.00\n", | |
"Forward/backward pass size (MB): 1.09\n", | |
"Params size (MB): 42.63\n", | |
"Estimated Total Size (MB): 43.73\n", | |
"----------------------------------------------------------------\n" | |
] | |
} | |
], | |
"source": [ | |
"embedding_net = models.resnet18()\n", | |
"embedding_net.conv1 = nn.Conv2d(1, 64, (7,7), (2,2), (3,3))\n", | |
"embedding_net.fc = nn.Sequential(nn.ReLU(),(nn.Linear(512, 10))) # Classify directly into 10 labels\n", | |
"model = embedding_net\n", | |
"model.to('cuda')\n", | |
"model.train(); print() ; torchsummary.summary(model, input_size = [(1, 28, 28)], device=DEVICE)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Training\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"torch.Size([3, 5]) torch.Size([3])\n", | |
"torch.FloatTensor torch.LongTensor\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"loss = nn.CrossEntropyLoss()\n", | |
"\n", | |
"input = torch.randn(3, 5, requires_grad=True)\n", | |
"\n", | |
"target = torch.empty(3, dtype=torch.long).random_(5)\n", | |
"print(input.shape, target.shape)\n", | |
"print(input.type(), target.type())\n", | |
"output = loss(input, target)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
" 0%| | 0/2700 [00:00<?, ?it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 0 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [04:42<00:00, 9.56it/s]\n", | |
" 0%| | 3/2700 [00:00<02:33, 17.60it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 1 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [03:04<00:00, 14.63it/s]\n", | |
" 0%| | 2/2700 [00:00<04:23, 10.26it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 2 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:47<00:00, 16.15it/s]\n", | |
" 0%| | 3/2700 [00:00<01:59, 22.56it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 3 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:19<00:00, 19.29it/s]\n", | |
" 0%| | 1/2700 [00:00<07:19, 6.14it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 4 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:09<00:00, 20.86it/s]\n", | |
" 0%| | 3/2700 [00:00<02:06, 21.28it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 5 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:05<00:00, 21.52it/s]\n", | |
" 0%| | 3/2700 [00:00<01:58, 22.73it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 6 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:03<00:00, 21.91it/s]\n", | |
" 0%| | 3/2700 [00:00<02:00, 22.38it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 7 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:02<00:00, 22.01it/s]\n", | |
" 0%| | 3/2700 [00:00<01:59, 22.56it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 8 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:01<00:00, 22.23it/s]\n", | |
" 0%| | 3/2700 [00:00<02:02, 22.06it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 9 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [02:01<00:00, 22.26it/s]\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"loss_fn = nn.CrossEntropyLoss()\n", | |
"print_every = 1\n", | |
"device = 'cuda'\n", | |
"model.to(device)\n", | |
"opt = torch.optim.Adam(model.parameters(), lr = 0.0005)\n", | |
"\n", | |
"\n", | |
"## Loop over epochs in the range of epochs\n", | |
"epoch_losses = []\n", | |
"\n", | |
"for epoch in range(0, EPOCHS):\n", | |
"\n", | |
"\n", | |
" ## If the report_every epoch is reached, reinitialize metric lists\n", | |
" if epoch % print_every == 0:\n", | |
" print(\"----- Epoch: \" + str(epoch) + \" -----\")\n", | |
"\n", | |
"\n", | |
"\n", | |
" batch_losses = []\n", | |
"\n", | |
" for idx, data_dict in tqdm.tqdm(enumerate(siamese_train_loader), total=len(siamese_train_loader)):\n", | |
" \n", | |
" ## Grab an example\n", | |
" x1 = data_dict[\"x1\"]; x2 = data_dict[\"x2\"]; y = data_dict[\"labels\"]\n", | |
" ## Send it to self.device\n", | |
" x1 = x1.to(device); x2 = x2.to(device)\n", | |
" y = y.type(torch.LongTensor).to(device)\n", | |
" \n", | |
" for pt in [x1, x2]:\n", | |
" ## Zero the gradients\n", | |
" opt.zero_grad()\n", | |
"\n", | |
" ## Pass the inputs through the model\n", | |
" pred_y = model(pt)\n", | |
" \n", | |
" ## Calculate the loss(es)\n", | |
" #print(y.type()); print(pred_y.type())\n", | |
" #print(y.shape); print(pred_y.shape)\n", | |
" #print(y);print(pred_y)\n", | |
" loss = loss_fn(pred_y, y)\n", | |
"\n", | |
" ## Pass the loss backward\n", | |
" loss.backward()\n", | |
"\n", | |
" ## Take an optimizer step\n", | |
" opt.step()\n", | |
"\n", | |
" ## Return the total loss\n", | |
" batch_losses.append(loss.item())\n", | |
"\n", | |
"\n", | |
" epoch_losses.append(np.mean(batch_losses))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Text(0.5, 0, 'Epochs')" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.plot(epoch_losses)\n", | |
"plt.title(\"Training Loss - Contrastive Pair Loss\")\n", | |
"plt.ylabel(\"Train loss\"); plt.xlabel(\"Epochs\")\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Inspecting Embeddings\n", | |
"-------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"EMBS_TO_VISUALIZE = N - int(N*0.9)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"performing PCA to reduce embeddings to 2 dimensions\n", | |
"0.7956117 % variance explained using PCA\n" | |
] | |
} | |
], | |
"source": [ | |
"test_embs = extract_embeddings(siamese_test_loader, model, EMBS_TO_VISUALIZE, reduce_to_dimension=2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Emb</th>\n", | |
" <th>Label</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>[52.396347, -17.985022]</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>[-19.177603, 5.147454]</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>[95.39646, 17.447662]</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>[-8.757756, 19.612215]</td>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>[2.6080818, -9.878834]</td>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Emb Label\n", | |
"0 [52.396347, -17.985022] 1\n", | |
"1 [-19.177603, 5.147454] 0\n", | |
"2 [95.39646, 17.447662] 3\n", | |
"3 [-8.757756, 19.612215] 5\n", | |
"4 [2.6080818, -9.878834] 7" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"test_embs.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAFuCAYAAACStS/DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACkBklEQVR4nOz9eXxcd33o/78+n3PO7DMa7btkeV+T2NkTO2QPAQIkJGX7hrZwKb9e2l4e0DZAaeACJfBobx8tpUDL4/bR2wVo2ErYwhKyr47jxPtuS7Z2jUazL2f5/P4YW7Ys2ZZt2Zbsz7OPttE5c868Z2TNez7b+yOUUgpN0zRNOwV5oQPQNE3T5gadMDRN07Rp0QlD0zRNmxadMDRN07Rp0QlD0zRNmxadMDRN07RpMS90ANrc9sUvfpH169cDsHfvXlpbWwkEAgD813/91/h/T8emTZv4/ve/z+c///lJ5z75yU/y/PPPU1NTM+H4u971Lj7wgQ9M+zluvfVW/v7v/55Vq1ZN+5rjff7zn6e6upo//uM/nnRu9erV/OQnPyGZTPKtb32Lr371q2f8PJo22+iEoZ2Vz3zmM+P/feutt/I3f/M3Z/xhvGfPHgYHB094/vd+7/f40Ic+dEb3Pt9WrVqlk4V20dEJQztnvve97/Gd73wHz/OIx+P85V/+JQsWLODVV1/ly1/+Mp7nAfCRj3yEyy67jK9+9atkMhk+9alP8cgjj5zWc91666287W1v46WXXiKVSvE//sf/4LXXXmPr1q2Ypsk3vvENGhsbAfj2t7/Njh07KJfL/P7v/z73338/AL/97W/5xje+gW3bBAIBHnroIVavXk02m+Uv/uIv2LFjBw0NDRiGwZVXXgnAq6++yhe+8AWEEKxatWr8Nb388st84Qtf4Kc//Smf/OQniUQi7Ny5k4GBAZYsWcJXvvIVwuEwTz/9NH/zN3+DlJJly5bxwgsv8O1vfxu/389DDz1EMpkE4E1vehMf+9jHZuLXomlnTmnaDLnlllvUpk2blFJKvfzyy+p973ufyufzSimlnn32WfXmN79ZKaXUBz7wAfXTn/5UKaXU9u3b1ec+9zmllFI/+MEP1B/8wR9Mee+HHnpIrV27Vr397W+f8L87duwYf+4vfelLSimlfvazn6mlS5eq7du3K6WU+p//83+qb3zjG+OP++xnP6uUUmpgYEBdf/31ateuXWr//v3qbW97mxodHVVKKbVr1y514403qlwup/7qr/5K/fmf/7nyPE8lEgl10003qa9+9auqVCqpG264Qb3wwgtKKaV+8pOfqMWLF6uDBw+ql156Sb31rW8dj/3d7363KpVKqlwuq3e+853q+9//vhodHVXXXHPNeJw//OEPx6//2te+pv7yL/9SKaVULpdTH/vYx1Q6nT7r35GmnQ3dwtDOiaeeeoru7m7e8573jB9Lp9OMjY1x99138/nPf57f/va33HDDDXz84x+f1j1P1SV15513AtDe3k5dXR1Lly4FoKOjg1QqNf64IzE1NjZy44038uKLL2IYBkNDQ/ze7/3e+OOEEPT09PDiiy/y6U9/GiEENTU13HHHHQDs2rUL0zS5/vrrAXjb297Gww8/PGVs69atw+fzAbB48WJSqRSvvvoqCxYsGI/z3nvv5Ytf/OL44//gD/6A/v5+brjhBj7xiU8QjUan9T5p2rmiE4Z2Tniexzve8Q7+7M/+bPznoaEhqqqqeM973sMtt9zC888/z7PPPsvXvvY1Hn/88bN+ziMfyACWZZ3wcVIenRzoeR6maeK6Ltdffz1/93d/N36uv7+fhoYGANQxJdcMwxj/b3VcKTbTnPpP6tjBfyEESikMw5h0/ZHYLrvsMp544glefPFFXnrpJR544AG+9a1vsXLlyhO+Lk071/S0Wu2cWLt2LT/72c8YGhoC4Dvf+Q6/+7u/C1S+4W/fvp377ruPL3zhC6TTaYaHhzEMA8dxznlsP/rRjwDo6+vjxRdf5Prrr+f666/n+eefZ+/evQA8/fTTvP3tb6dYLLJu3Tq+//3v43keqVSKJ554AoAlS5aglOLpp58G4IknnpjQkjmVNWvWcODAAXbs2AHAL3/5S9LpNEII/uZv/oavf/3r3H777fzFX/wFCxcuZPfu3TP5NmjaadMtDO2cWLt2LR/+8If54Ac/iBCCSCTC1772NYQQ/Omf/ilf+tKX+Lu/+zuEEPzRH/0RbW1tuK7LP/7jP/JHf/RHfO1rX5t0z3/913/lsccem3Ds8ssvn3Ia7smUSiXuvfdebNvmM5/5DF1dXUBluuzHP/5xlFLjA+XhcJg//uM/5rOf/Sx33303NTU1LF68GKi0Yv7xH/+Rz33uc/zt3/4ty5Yto7a2dtpxxONx/vZv/5aHHnoIKSUrV67ENE2CwSC/+7u/yyc/+Une9ra34fP5WLJkCW9961tP63Vq2kwT6vg2saZp50U2m+XrX/86f/zHf0wwGGTr1q185CMf4dlnn0UIcaHD07RJdAtD0y6QSCSCZVncf//9mKaJaZrjrS5Nm410C0PTNE2bFj3orWmapk2LThiapmnatFzQMYxy2SGVKlzIEE4qEvGTzZYudBgnpOM7c7M5NtDxna3ZGl99/dxefHlBWxizfXDPNI1TP+gC0vGdudkcG+j4ztZsj2+u0l1SmqZp2rTohKFpmqZNi04YmqZp2rTohKFpmqZNi04YmqZp2rTohKFpmqZNi04YmqZp2rTohKFpmqZNi65Wq2maNk2GUIhiHhCoYAjXu9ARnV86YWiapp2CEGAkh0muf5XcgW6EFEQWLyK+ejVOtGbSVrsXK50wNE3TTkEmBjn46PfxyuXxY2Mb3yC7aw+t734AJ1J9AaM7f/QYxixmGKCcLF45DV4RKWd37S1NuxiZuCSee35CsjjCyeVIb3wd4xL529QtjNnKybFn8wb6u/fgOjbBcJT5y9dQ27oAhXWho9O0S4bI58j19JzwfGb3bmLXXgu+0HmM6sLQCWM2cgtsfPbnZFOj44cKuQxb1z/NwmKB1kWr8S6xwTZNu2CUAu/EYxTKU3BpDGHoLqnZRghBaqRvQrI41v7tG3FKmfMclaZdulQwTLC15YTnI13zIHDxty5AJ4xZxzAkAz17TnjedWyK+fR5jEjTLm2uYVK3di3CmPxxKf0+4lddiXOJtDB0l9Sso4jGa2hs68Q0LVzPoVQs0rtvJ9lUEgCh87ymnTdKgWhsoe2B+xl57nkKvb0gJJF5ndTeeANuvO6S6ZLSCWOWUV6JcCzGa0/9jJH+gwhDUl3XwrKr1hKpqiYx2EcgHLvQYWraJcVDIBpbaXjnfYhiDhCoUAQHeckkC9BdUrOKFB7JgW6e/cl3SAz1AaBcj9HBQ6x/4seEIzFWXP0mDF/kAkeqaZcepcCRJnaoCjsUqySLS8yl94pnMc/JsW/bazhOGdP0YVgWQkoQArtconvXJmI1DXgnmbGhaZp2ruguqVmklMuSGDxU+UGANCykNAEFQpBOJnDKJYxLZEaGpmmzi04Ys4iQAtM8dlGeAgGH/w8CUWlxaJqmXQD602cW8QUitM1fdsLzzZ0LMXzh8xiRpmnaUTphzCLCCtM0bxF1Te2TzkXjdSy96iYQulGoadqFoT99ZgnDkAgBVbVtXHvHffR37+bgnq14rkvbgmV0LrkcM1irB7w1TbtgdMK4wITwsPNjHDq4h1x6jFhNPY1t85m/8nrmLbsShECaIRzH08lC07QLSieMC0gIRbJ/L1tefnJ8A5ahQ/vZv/U1Ll97J5Ga9krdM0dXGtQ07cLTYxgXkFNMMTrUz6LLrmb+isuJxOIgwHUdNr/0Wzw7d6FD1DRNG6cTxgVimgK3nKeQTbL5pV+z+/WXqaqtY9kV12JZFnapSDY1cqHD1DRNG6e7pC4AKRXZxEF+871vkUuPjR8fPLSP5o6FLFlzI7tefxm7WECISkkCTdO0C+2MEoZt23z605+mt7eXcrnMH/7hH7Jw4UI++clPIoRg0aJFfPazn0XqRWZTUnaOTS8+QalYOO6EYqBnL82di4jEqwnF4jpZaBctIcBwbUSpiJIGXjCsJ3bMcmeUMB577DHi8Th//dd/TTKZ5N5772Xp0qV87GMf49prr+Xhhx/miSee4I477pjpeOc8IaCQTdF3YOf4ym11zPZ5Snn07tvBkitvJBStQQ93axcjQzl4hw4y9OJLFIdHMPx+qlauIHbF5ZT9urjmbHVGTYA3v/nN/K//9b/GfzYMg61bt3LNNdcAcNNNN/HCCy/MTIQXGcMQuG65sq2jAMvnx/IHkcbR3O26NvXNnSD9FzBSTTs3pBSUd+3k0A//m0L/AMpxcHI5Ei+/Qv+PH8Mq5y90iNoJnFELIxyulKfIZrP8yZ/8CR/72Mf4yle+ghBi/Hwmc+ptRA1DEI/P3kJ6hiFnPL7RwYO4jkOsupaR/oOV5zFNDNPENC2UUjR1LsIXDBGLBc97fDNpNsc3m2ODizs+JzlK94svYFnGpHNuYgRvsI/4qssuWHzaiZ3xoHd/fz8f/ehHed/73sc999zDX//1X4+fy+VyxGKn3uTHdRVjY7P320Q8HprR+JST5cXHv0ddSweLr7iexGAvyvNwHQelKi01yxdg/rLVKBk85XPPdHwzbTbHN5tjg4s7PjmcoJjOnvB84vVNiHmLcNwzH8+Yre9ffX30QodwVs6oS2pkZIQPfvCD/Nmf/Rn3338/AMuXL+fll18G4JlnnuGqq66auSgvAlIKRvu7SQ73s3Pji/iDIW548wNU1zcD4LkOTR0Luf2B/0G0rhWlJn/70rSLwqlmcuhx71nrjFoY3/zmN0mn03z961/n61//OgB/8Rd/wRe/+EX+9m//lvnz53PXXXfNaKBznWFIBg/toVws4Dhlnvvpd1i46hquvu0dSCkRQmIF/Ehp4ikL/VejzUVCCKQEz1MnzAtGrAojGMAtFKc8H1uxHFfP9piVhFIXbuKmbbuzstl4xEw2a6XKs/3Vp9i58QXKxcLh8R6B6zrj04+vveNeWuevQPqrz3t858Jsjm82xwZzLz4pwcikKPb2Yo8l8dXW4m9uwY1UTZoqK6WgvPUNBn/9xKT7+hvqab7vPmzf2Y0/zNb3b653SemFe+eBlIL0yBDReC2WL0Ahmx4/Z1o+PM8lVl1PrKYeK1SN617AYDXtNEkJ6lA3PY/9FK9cHj9uBAO0vvMdyMbWCUnD8xT+pStoDYdJvPASxZHD02pXLCe2ZvVZJwvt3NEJ43xQJTa/8GuCkRgdi1awb1uJfCYFgGOXCYSirLnpbmqa5ulkoc0pQgjMXIru45IFgFso0vfYT2h9//vxAhPXVrjCQHQupLG1HVEqgjTwQmFs3RU1q+mEcR6U82mSwwMMHtrP/OWrueqWexg8uI9CNk2srpGuJZcTranHVXrdhTY3uPk8xkg/xYFBbKdM3dVryOzvptDXP+FxTi6PMzwM7ZMX4ymlcAwfhHyVAzpZzHo6YZwH5VKRYDhKuVRg37aN9OzeSn3rPGK1jRRzGXa89gLXvvk9uM6FjlTTTs0q5ej/2a9J7d2PEAInOYqTydJ4+63IeR3kDvRMeLyTSWMJwQUcLtVmiC72dB5YvgCm5ScQrHzLcuwy/Qd2sXvTy/Tu3UF96zyUzt3aLCWlwDQEpikxJSRfeIF8TyUpKBTSZ6Ech4HHf0WoqRFhTpwSbsXjOllcJPSn1HngC1URP7zewh8KU8xm8JSHzx8gEI7S0rUMR2+SpM0yR8Yn8vv3kduzFyPgp2bNajLbtmMc+aqpQAaCCEOiXI/Ups2E2trIHegGwIrFMOvqsS/cy9BmkE4Y54HCYsU1t/LG878kmxolUhMEpTAsi5VX34wVqsbT+UKbRYQAY2yIQ9//IU7u6PRUf7yK8uAAgYb68WPKMAk0NVEcHKQ8miTQ0QlUkkXLO+/B8Yd1jf6LhE4Y55CUAuUWccoFhJBcecs95NNJ0skR/IEg0ZpGDF9EJwtt1jFch6EnnpyQLAAQErdYxC0UIBCsrC9VCuUPEGhtJdzRTmz5UmIrV2DU1eP6w7o76iKiE8Y5IoVLaugguze9XNkkSQhq6ltYfMV1NM+/bHwlrP5b0mYbU4JIJij29CAMc8IHfn5gkNjy5eT27MYKBI/WI1AKJQ3i118PLZ2VGVCHj2sXDz3ofQ5IKUgN9fD6c788uqOeUowO9fLqkz+hnE/qvyNt1hECzNQIyV89Tm7vXoq9vTiJEYTrVE4CuZ4eqlatINjaOjEZSEH9uhuRjS26RXER0y2Mc0C5RXZvennKc45d5uDuLcy/bK3uitJmFZkY5OCj38crl6m79mqEaWGn0ji5HIGWZpRhgacYfmk9rW++AxmNkj/Yi/T7CHZ0oKJxXKGLZl7MdAvjHLBLeXKZNMpz8Vwb5U1cYJEYOIjnTF14TdMuBBOX0edfGF+tnTt4iJqr1wCgHBcnlT7SyAAhCDQ14Ta0Ebz6OvyXrcGJ1epkcQnQCeMckEJRzI0xNtJPcriP5HAfudQIyqvU/RCHq9Nq2mwh8jmy3d3jPxf6+vHVN1B7/bUIy8TJ5cB1sWIxWt/5dnzNh8vye0rvw30J0V1SM0wKj9HEIKFIjFxmDKiUQCgWcjh2maraJlrmLUaaftyz2CBG02aUUnDcB//oxjcItbfR/jv3ozyPUGcnoroWNxBGSP2F51Kkf+szzC6m2fXGKyxYeTWWb2JtKMex8QdDNHUu1slCm1VUMEywtWXS8fzBQwy98DLldBaa27F9Id2iuITphDHDCtk0dqlI7/5dXHXLPXQuuYxwLE60uo4lq29gyeobMP1zuya+dvFxDZO6tTcijMkfCdLnI371VehiBJpOGDNMHv6Dy2fT7N70KpY/xKJV19K1bA3FfJ7k8ICeUqudF6ZQmG4ZQ5z6H5xSQGMrbffff7SlIQWRrnm0/c79uPG6cxusNifoMYwZFozEMS0fjl1GKUVyqJ/k0NGSz8uuuglX7z+pnUOm5+AO9JJ4bSN2Oo2vppr4lVci6ptwT/Id0UMgmlppuPddiEIOhECFwjgYesdgDdAJY8YZvghL19zIlleemrTKtXneYoKRWv23p50zhnLJbdzAyPMvjB8rjSTI7N5D42234V++ChdxwuuVAkeaEK46H+Fqc4xOGDPIkB7lQppQtIprb3s7iYFe+rp3Y1l+OpasoqaxAw/rQoepXcREOsnICy9OPqFg6Kmn6ejogEj8vMelXRx0wpghws2xbf2zDPXuBwRCmDS0drDmprsxrDBKWHh68EI7h6QU5A8cOGH9JuU4lAcHMKJxPY6mnRGdMM6SEKDsNK/85kf0de9GKYVp+QhHqxg8tJ9iIc/la+/WGyRp55wQ4JVKJ32MV7YxEOhBCe1M6FlSZ8mzcwz27KH3wE6U8gCFY5dIjQ5hF3OkEkMUMqMXOkxtDpLyxGMNU3FdRbC9/aSP8Tc26OKA2hnTCeMsSClIjw6ilEfnksuoaWydcD6XHgPlMJYYOu0/fu3SJITALGbJ7thO8Y0N0LMPq5id9r8fo66BQFPjlOci87sQ8ZqZDFe7xOh+krPhFsinR+jdv4PU8CDVDS10Lb2cXW+8TGYsges5uK6L5fPrPmPtlIQQyJF+en/8E0SpgG1Xao+Z4TAt77gH2dByylXWjhWg+e33MPL002T37EW5HsI0qVq2lPgNN2BLPelCO3M6YZwhoUrseO0Zdr/xEj5/gLGRAUaH+ujeuYk1N7+V7Rueo5jPIqUkXtesuwG0UzILGQ7992M4uRyWdbTyq5PL0ffjx2h73/vwgqeuElAORKl581uoyaRQ5TLC74dIHFv/E9TOku6SOgNCQHp0gMGDBwiEwpRLBaLxWqCy38XO156nY+EKDMNi+dU3YQZ0KRDt1OyhoUpV2Ck4uTzlwcGjJcZPwVESJ1KNW9OIE47j6GShzQDdwjgDhhQc2rMVUFj+IIVsBk+4xOubKOZz5LNp6prb6VxyGbH6TlxP52Xt5KQUFJMnnxxRTo4SnC90a1W7YM7qk+yNN97gwQcfBGDr1q2sW7eOBx98kAcffJCf//znMxLgbKSUh2vbAAhhUFXbgGn5KeZzGKZ1uNhgPdE6nSy06VFKYcXjJ32ML16tk4V2QZ1xC+Nb3/oWjz32GMFgEIBt27bx+7//+3zwgx+cseBmLSGpbekgOTJw+GeDYLSaYDhW+cP3+wmE43hKJwvtKCkFsphDpVMoz8OIRPEiMVyvstbOamjECAVx84VJ1xrBAL6mJj0OoV1QZ/yJ1tHRwT/8wz+M/7xlyxaeeuop3v/+9/PpT3+abDY7IwHORq6raGxbgOUPHD2oFAiJkAYdiy7D0CXMtWMYKLwDe+j7z2/T8+3vcvC7j9Lz7/9BYcMrmG5lW1QvHKPl7fdgHP4SNn5tMEDL2+/BDccuROiaNk6os2jjHjp0iI9//OM8+uij/OAHP2DJkiWsXLmSb3zjG6TTaR566KGTXu953qzeSMgw5EkryyaHe9m+4TlSI4MAmD4/85ZcRueSy/AFwhc8vgttNsd3vmMrdh+g57uPgjf5ORtuv4341VeP/2yPJij19VFKjGJVVxNsbcGqnV3lxWfz7xZmb3zHzn6bi2Zs0PuOO+4gFouN//cXvvCFU17juoqxsfxMhTDj4vHQSeOTvmpWXPdm7GIW13HwBYKY/gj5IuSL5/51nSq+C202x3c+YjOFhywVkUIxtnU7dtmesiLH0HMvYnZ04fhDlQMySHzlKrx0AaUUOQXMsvdxNv9uYfbGV18/t3seZqyT/UMf+hCbNm0C4MUXX2TFihUzdetZSylQWJiBavyReoQZwXUvdFQzS0qBZRQxxSiWTGGZNmK6czsvUVIozNEBkj/5MQe++lW6v/nPlAcHqL/6Sgxz8jdMO5OBUnHScc9TesGnNqvMWAvjc5/7HF/4whewLIu6urpptTC02c00XOz8AYYHNuE6lQ80X6CK2parUEbDVL0rlzwhBPT10POd71I41AtKYUYjZPfswVdTQ92b1pF8YzNKHP2uJgyJMOZ2V4V2aTirhNHW1sajjz4KwIoVK/jud787I0FpF56UAqfQw/ChVyYcLxdTDOx/ipaFd+IRvzDBzWKGXWTwid9SHBgYLzPuFopYsRiFvn7s5BhmMIBdLI9fE5k/HxWe210V2qVBz/vUpmSIEqODm6c8p5RLemQHU/SuXPJUNk1pYABlO0ePOQ6YJmY4RHrHTnzV8fFuPSsWpXbdWhz9p6jNAXql92kSAlA25UL68EB3CCsQnbNjF0KA7SlS2TKFsksoYFIV9mGpEk556jIVAIXcELH6MuA7f8HOBZ6acnGdnUphxaL4auIEmprA8hNZvJhgVxdOKKq3p9DmBJ0wToNpSsr5EfZu3sBwXw+u62CYFu0Ll9OxZDVK+C90iKdFCBjL2/zs+f0MJ48uFmupj/DWG9uQ0sLz7CmvldIEob8VH0+EI/hqaipdUsdWllVgpzLE16wmtHgxsdYOHK+SrHWy0OYK/Rc/DYYBlMfIJnrY9doLFLJjtC9cwrzFlZlgB3a8QfeO15Bybv3l257iQO8Ql80PcvXSOJFQpfR133CWHz/TTbBuzQmvjdUswvV0qezjecEwdTffhBWbvMjOjEUJd3ZiRKsoO+qUpco1bbbRLYxTkFJQSPXSs2sLuza9TGZ0ePxcbVM7q667lT1bN3JozzbaFqxA+ubGalxplCmO7sMZfY1cKU8kHOPOy5fTPRpnw84xhkYL5LwFGFYQ155YqiIQriMQ7aCsS6BO4nkKc/4iOj/wIAO//CXZ3XsRQhBdupjatTfib2vFCVedcN9tTZvNdMI4Bc/JMNLfw7ZXn8VznQnnEgMH2bftNepbOhg8eIBSMUdwliYMISqrX5UCxytxcN9LjAzuJp2uTJctlYYZSz1DW8dlpNqa2XMoy0jKYfX8O8mN7SeXOYQQBrGahVihZsrO3Op+O59cYSLmL6H9DzohkwbXRQSDuP4wjmHqAoLanKUTxim4xTwHd29DKQ8hJ/fg9e3fSdey1QwePIBhzL63UwgoOoq+kRz7esfw+UwWtAYp2h6mMfH1uK5isHcrKxZ1sucQhAImJSeEv2oVwaqlKCFwXQNbtyxOSSlFWfqhqv64ExcmHk2bCbPvE26WcV2XfGYM5Xl0LllFuVggmxplpP8gUKmH5Xku4WgV/lBs1n0eZMsuP3xqL8PJSpkJKQXPv5Zi+bwI1yxYzsjYBrxjvvGWHRfhJKmK+mmorpSqcF0PlyNzaGfbK9Q07XzRCeMUrECQ+SuuxHVtBnv2USzkqKptZOGqq9m58UXymTEM02L51W8CGZhdfdNS8PRrh+gbzlEsO+SKNpYhCQX8bNmfY35zM80NVfQNjY2HXfn/ijuv7STil3o1t6Zp43TCOAXTF8B1bDY89TM8z8UwLUYHK4Pga950N+VSkcaORUgrOutmvWQLDol0geuXR/FbgkTa5uUdGQYSOXyGYlN3iRu6mmmtdyiUHGzHI+CzmNfeCSI0617PTDGFR3lwEJlKIywLEYvjmr5Zles1bTbSCeMkivk06cQA+7ZtJF7XSCaVxHVsXNfBNC32bdvIbff/D5QRnZXfxIM+m+u6kgz2bSdTzBEPxXjv2mUcGG3hZy8cZDhZxlhaw2D/bvyWgWVKOuYtxzBiOLO47PzZsMp5ks8+Q2HPHsqlyhqTQGMjjXfdgVvdoAekNe0kdMI4AWVn2LFpA2MjA2TTSUzLRzReAwiEEJg+H4bpo5DPE4jOvplRPp9Lonc9Awe3ULIdpBAUC2n69r9Ea8tSrl7WhONJYtE4fYBhhemafwXVdYuwnYtzeY6pXBJPPUlmx64J+xIUBwfp/cEPaXvv+7BDuqaTpp2IThhTMKTHttdfAOVil0sAOHYZxy4jhKSqtgHDrEwrPX6q7QUnIFd2KZdHSAx3U1MVYCxTxHE83MNdTCP9O7lqcReZUgjTH+GaG9+PkBaGDGI7s7CpNFPSY2R27Z7ylJPLU+g+gG/FZRdtV5ymna2L86vkWSoXMgz39ZDPpqhubJlwTimPfCYFgBASfzByIUKcRAgQUjCcLrF13yj9fd0MJHJEgwbVER9+nyDok/h9JoYhaYiWGRlNUMoexGdKUP5ZuUPZTHIymYnlOo6T7z6AlHqvD007Ed3CmILr2CjlUcznaOpYSCAUoZg/uke557qAomXeIqxg7IKPX7hA/0iecFCSyw5R6xshHirjazDwvAIBs0ykJsiRxoPPsrBth9a6IKqwC+U2A6EL+RLOC2md/J+7EQ7rgW9NOwndwpiCaflombeI+cvXIIRk7VveTeu8JUhZ6ff2BYO0L1zBgsuuw/Mu7FvoAS9vG2Bn9zB+9wC5vl+RT7xGIBijmB3ALo4S8PnI5xIY3hhOYZh8bpDGhiaaIik8O4uQF1+dciHAxMV0SpiikgWMeDVm5MQtwtjyZRd9K0vTzoZuYUzBMAzSo0Nsefm3KOVh+fwsXHk1y668kWw6RW1zO/7I7NhxLpkrs+tgkt+9LU7P9p9genmEkNj5QaobV5Ac3IJdThEMhlBuEb/PoKbpMnDSmM5BfIFqkJFK5rlImE4J+2A3idc24haKBJsbqVq9GuoaaXrznfT++DGOX4BYe901UF13YQLWtDlCqAs4j9C23Vm3UbvEYctLvyTR30MuPUqxcHRPiEAwws3v/ACheCueOv993UJUtgBVqrLXs+G3+NVLB1jWpvAVX2dsaCtl20MICPoE9a1XI02L0cGtGIYPISTxuoWUSzmkNHBcRV3LVTjUnJOumHg8dN5/v6ZbJvnkb0lv2z7huDAkLfe8DbNrISRHKOzaSbb7IGY0QtXllyPrG3Hk7Km+eyHeu9Oh4zsz9fVzexaebmEcp1RIkRg4BEISq6knWK7CtcsIKTFMi2wmTai6/byu6JZSkCu7DI7mGcuUiEf9NNWGONSdoDYqKWd2g5PGkBIhvMPfnQWDPS8QjrcTii8gXruIQqaf9Mh2HDtPU9ctBKJd2F4ENYdmBUkpkE4ZlMKz/JNmNLlDA5OSBYByPQZ/8wRt72vCjtVSf/vtBNM5EBLHVRdTA0vTzhmdMI5z7OC2EBJpWEjj6DfP5FA/TfNWnrepl1IKBsaK/PjpPeSLR6fwBgIm165oZkGLj51b+uhsqqGYPYRpSBzXw1OV1kgxO0QhnyUUaSI1tBHTCuGPtOCPzqfkhJgLtaEMPEQ2jSjmyR84QGbXHjwhiCxcQHT5CpxIHKUUpilJbtlywvs42RxuegwC4crPnmAuvH5Nmy10wjiOZZ18y9FAOHJeZ9LkSu6kZAGQydv86Kk9fPw9y7GLY1ihJTiuwDJBSgPX8/CZPoSAeF0H5fwArlPEH6qjvn0dtjs3ZkVZTonUSy9ghYIM/uo3lAaHEIbEV1dLaXiE1KbNtD5wP06sFhB4pfJJ76fm6l662iXtqQ0H+bdfbGckWaCuOsgH7l7GzVe2n/H9PM/jc5/7HDt37sTn8/HFL36Rzs7OU16nZ0kdJxCOEwyfeCZNU8fC8zaTRggYGM1PSBaVcQwHiUM6l6dnqEBHawsD/Xtp6roZFx/K87BMiZSCeN1i6luvwZAWrYvupnnB2/Bkw5yYPiqlIPvG6+QPHiJ/oJvS4BBQ6V4qDQ0jyiWcXJ7RF17AFArP84gsWnTC+wnTwIjO7T5k7dLz1IaDfO17b1QqTgPDyQJf+94bPLXh4Bnf8ze/+Q3lcpn/+q//4hOf+ARf/vKXp3WdbmEcR1ohVl57KxuffRzUxG+jS9fciD8UP9narxklhCB5eIOjys+gvDzlUhrLitBaFyCfL7J43kqyu54mmThI87ybMA0QqoxpBfGH6hkd2kW8bjnCV0/JnjvfEWQuQ/K1jcQWLyTxzLMEO9oJt7eBEOQPHqKcGMFqaCS7dx+1uQxeKEagswMrFsVOZybdr/ryy1HRuO6F0uaUf/vFdkr2xM+iku3yb7/YfsatjA0bNrBu3ToArrjiCracpCv3WDphHMfzFMGqZq69812MDR1kuO8QwUgVzZ2L8IfjeOr8rVlQSlEdC1T+G0DZFPJp/P4Q5eIYSnmErCoG+nvoWngt/X072Lp1PdVVYVpb5hGt6USJMNVNjTiegbLPW+gzQpWKuIUCRiBA4223kN23j7HXNwGK6KKF1Fy1htSOXdj5AqhKq88JRml917sYeeopst3d4CmMQID4miuIXrEG+wLMbtO0szGSLJzW8enIZrNEjlmTZBgGjuNgmidPCTphTEEpkFaM+SuupqFzFUpVNhE635OJlIKmmhChoMVouoTnuQirBtst4ikI+iRNVWUKI4c41D3CvEU3MW9JFaY0UAQpuXOnNTEVaZkI08BfHefQfz1K/lDf+LnS8Aip7dtp/50HGNu9D+UPApX3zI5WU3vP26nNplG2jQwE8cJRbD0VSpuD6qqDDE+RHOqqg2d8z0gkQi53dMmA53mnTBagxzBOyXG8C7L6VwiB33KIBcvccU07uWKJgdEC/cMZekeKSH8t77r9cgrDLyDdMfwMk+p/AcuwsN0wzhxPFgAqUkXt1Vcxuv5VFAJxXJ0nN19gbPMWGm+7GdcKTDjnYOBEqnGrG7CDUfQCbm2u+sDdy/BbE3s2/JbBB+5edsb3XLNmDc888wwAr7/+OosXL57WdbqFMQtZFmD3MnTgFdJyFY8/t487r56Pq/yMjmWpilj4TEUqkyeiZGUPB8/Fdct4bhE4828es4mjBLGlSxj8+S9wCwUCzU2UE6O4xRLSNDACAexEAiMcwZ0Lo/iadgaOjFPM5CypO+64g+eff573vOc9KKX40pe+NK3rdMKYZQxDYKhhspk+ojWLyaQksUiEFzfuIRQK4zc99nePUSqVqa6q4h3XrcAefQnT8gMmQhgX1aCuZ/nx1dfjpNO4hQL+xkakZYGUYJooy0KhxyW0i9vNV7afVYI4npSSz3/+86d/3dk86RtvvMGDDz4IQHd3N+9973t53/vex2c/+1m82VBoaY6REgxvkETfRtKJnYz0bmCk+wluWOJy1bIGCoUcuZLEOTzLdiyTRVhxDNOH5Y/jC9aCCF/YFzHDVCBIsL0dEY5g1dUjozGUP4CyfCghCba0oAIXR4tK02a7M04Y3/rWt/jMZz5DqVTZYOiRRx7hYx/7GN/+9rdRSvHEE0/MWJCXAsu08RmjZMf2UC6MIKVFvH4R7R1LGTy0gXm1eaojAtcpYVhBhDQwTQPLNPCH6kAGqW25Gse7uCrPOhjUXH89wpCHa2gdbT4JQ1J7w/W4UjeUNe18OOPig7/85S9ZsmQJf/7nf86jjz7KunXreOaZZxBC8Jvf/Ibnn3+ez372sye9h+d5uLN472jDkOdlwNstpynmBxjY/1tyqR5QCmlYeJ6DP9KOFVnC/v2vI6pu4Jcv7iYQqkVIiyXtIW5Z7uEPBIlUz8fy15zzWE/HjL1/nkf+wH5Gnn6G4sAgAP7GBupvWkewaz7COP0keb5+t2dKx3d2Zmt8ljW3v9Cd8Vezu+66i0OHDo3/rJRCiEpfcjgcJpOZvHDqeK6rZmVFySPOR8VL04BSehelwiCFzMB4UUOlPFAe5Vw//nALlhUkFJJIISkXUzQ3tnLrNUuIBIO4riRXUFCYXe/lTL5/oraZmnfcB/lsZYwmFMY2fZQzpQse27mg4zs7szU+Xa32MCmP9m7lcjlisdhM3fqcMU2J8lwQxgX7NiLIoXDIJvdSybeKY3sKlVemkNrN/K4ryHohFs1rYXFbiAVt9dRXR0hnPC6qUe4TUIpK+fFI9TEHL1w8mnYpmrGEsXz5cl5++WWuvfZannnmGa677rqZuvWME9jkU8Mc2ruNUiFHdUMrTR0LsYLx878pkucghcAupTGsEK5TBDwExvjnoVvOEgwECaoxbl82glvOEwu3II0AMPu+RWmadnGasdVdDz30EP/wD//Au9/9bmzb5q677pqpW88ogUP39g28+uRPGOjZS3J4gH1bN/Dyr39Ifqx/vFvtvJEWjlPGF6gCwDBDgDicLCq/nmC0CV+girHEPkqFDFagDoyq8xunpmkXTGbLM/T8w0fY91f30/MPHyGz5ZkZue+xM12n46xaGG1tbTz66KMAdHV18R//8R9nc7vzopAZoXvnG5OOu47N1lee4spb7wUZmOLKmSUEmEYJvCIoh3jDKgZ7nsMXrMPwXFw7ByhM00992/UM9ryIwCISn0dVwxWUHT0zSNMuBZktzzDys2+inMp4nZMeYeRn3wQguvKmM77vt771LR577DGCwelPS5/79SNOg2lKevftwLQsGtu76Fi0gtauxQRClSJc+WyaUj51zuMwDIHfzJMZfp3+fU8izSBmqIXqjjczmBJ0D5ZJFkJ4VhNVrbfjGjU0d91C08K3EK2/jrJz7hOapmmzQ/LJ/xxPFkcop0Tyyf88q/t2dHTwD//wD6d1zSX3NdUfCNC5aAUHdm4inRzGHwzTsWgFlm8e3bu24LnOqW9yhixLYpChkD1IYmgrCkVV7TwMK8Te4Rg/fW6Y65bdQLzaBQQH0rB+o8uaxbC4vYly+ZLK75qmAU46cVrHp+v4ma7TcUklDKU8DNPg5V//aPxYMZ9lc2KQlnmLaVuwFF9g5ldKSynwGWmc0ijdu3+BY+ewfBGEtBg88Azx+e/n0Sd20t2fYW9vCpRXmVaLQEiD1oZqWuoEvgs8hdvEA7sE0sSzfOdtm1pNu5SZsVqc9MiUx897LOf9GS8gp5hh/7bXkdLA8yZuSNJ3YBcLVl6NFYzN+Ewpnxwl0buBYq6fUiEBSuHaOQwzSCBUR6ogGUzkUAqKZRcpJVKYKMCzFW/sGmHN4vqZDeoUhADTLuKOJfFyOQzLpDg6ytimLQgpia++gsD8hdiW7h7TtHOp+pb3TxjDABCmn+pb3n/eY7mkEkYhl8J1FVU1DWTGEjhOZf9ngSAQipAeHaZx3qoZrYPl93lkR/dTVbeI7Ohu/MEalPKwS2lcp4DrFHAcB0MqDEPguArPUxOWGJQdD0OKc7ruwFQOpFN4pRJGMIA0JL2P/ZTS8DDkchSHhgg2t9Bw2y0Mr9/AwC9/TWThPmrvvAvH9J+7wDTtEndkYDv55H/ipBOYsVqqb3n/WQ14n6lLKmFUEoFCmj6qahsrrQylEFIipIk7w10sQggkOdKJXXhuJ6XCcOW4NPEF4tjFNHYpQ9RXoC4e4NBQZTtWcVz11csW1uI3JfY52AFICDCzYwz95gnyPT2gKpN6/VUxYitWkBgeppBIgIJCXx8Dj/+K2pvWMvra62T37KXq8n5onTfjcWmadlR05U3nJEEcO9N1Oi6pUdRQpAopDSofiQrPdSiXijh2GeW5NHXMn5EV35ZpY5LAK+wiN7aPSLwTKX0YVggA5TmU8qNYgarKuEp5N9evbCIS8k1KFs11Ya5YXH9OkgWAWcrT96Mfk+/uGW/BqGKBsdc3kXz5FaJLFqGco913peFhpCERZmVAJbNlC6Z5Sf0z0rRL1iX1l24GYnQuWYXnlBgb7ic1OkQukySdHAY8gsHwWS/c85kFEoeeJjn4Bq6dwi6lyKV6UMqhoXPdMY/08NwSlj+Gkx9m3eWN3HFNJwva4tRUBaiuCnDDZc388e9cQTxonVVMJyIE2IMDlEdHJxz0SpWuuuyevfjjcTjuPSmPjmIcnrvt2eduVpmmabPLJdYlJWhbtJJSIUNpS458No1p+WhbsIymjoVseOZxrr7tnQgzcuqbTcE0PdLDm4hUNZNN7mX40DY8t0y4qg0hJL5gLbWt15Ic3Izn5PFch2hVFzUt16PMEHdcFeaqZY3kSw5+yyAe8eGTnLPZSFIKsr29xx1ViGP29i0nxzAiYdxM9ujrjETwDu+vHV2yeFZXHNY0beZcUgkDIJtMkBpNsHTNOiyfD8/zSA4PsnvzBlCKdGKQeFOEMyn6Lrwc/kCUgQNP4ToFKq2IMunELrLJbtqXvp2iE6Cm/WYsQ+IPxPBHOinZPjxXAYrqkEV16GiL4lzWtlKK8ZbC0YMgAwGQAjyFEQpihkLjCcMIBjCCQbxSGV91HH97B7beHlXTLgmXVMKQUpDPpsilx8ilx6Z8TC6dpLpZcCbbhEjhkRndczhZAAiEkEgziDDCjI32EIguYsfWJ3AchxWr345dso4pM3h+eZ4iNG8ePPscHNOKUaZJoKGBciqF9AeQwRC+uhqcXJ7mt72V1J59RJcspnbtWpxgRFeN1bRLxCWVMDxPEYqcvGhfOFZ9RskCKl392VTP+M9S+lC+BjJ5h0LJxp8/RNvSNdR03EHQyPHc1gKXLSrQXH3hthhVsWoa3nQTQ08+fcxBIBJh3r3vwPUU0eXLCTTUEZ7XiTItwpdfDpEYtpI6WWjaJeSSShgA4XgdgWCYYiE36ZzlDxCrbTyj7igAhIVh+vDcEkIYODLOgd4MjluZzmsYLvnuMQpOkPrqZnqH+3HcId524zzUDI9TGIZEiEqS9DyFIUFkUqhiAWH5IFqFIwxcYRBceRntzc2kNr6BnRrDX19P1WWrUDX1GEISWHk5nqcoHxujThSadt482/0K39n0YxL5UWpDNbz3snewrvOaM76fbdt8+tOfpre3l3K5zB/+4R9y2223nfK6Sy5hSDPM5Wvv5PXnfknpmB3qfP4Al994J4YvOq1BZtPwECqH5+YR0kIYEVxCVNUuJTm0FWVE6B3I4biKSteUoCreysb9BV7b2cv73ryU+W1V9A1ncT01Y9PVDOVCcoTMtu3Y6TShtjYiC+cz9vobjG3aglcugxCEOttpuOVWnFg1DibUNRN/cwvCc1HSqMStAKV0CRBNu4Ce7X6Ff1r/n5TdyuzFkfwo/7S+UnjwTJPGY489Rjwe56//+q9JJpPce++9OmFMRSlFINrI1bfdR3ZsmFwmRSgSI1pdP+1k4TNLpAY3kBnr4chXbcsfpb79emKNaxgY6sUplSmUHbzDzRVDWgRrVrDhmT7KtstQMk9HU5Sy7WJIMSMtDEO5FDa/zvBTx9TK91wymzdR6B8Af+DIm0D+QA+9P/ghre95N3agMiusMttJgp71pGmzxnc2/Xg8WRxRdst8Z9OPzzhhvPnNb56wZ5FhTK9Q3SW1DuMIz1MIM0ysfh4tC66gqqELYUam3bKoJItuju2XsUsZBvY/RdlW+OvWEoq2YEgDIQxqattp6rqN7zyZGF8YmM6VsQzJ6iUNM9YdJZKJickCCDU3MbbxDUpDQwh3Yv0sO52mdOjg+d80StO0aUvkR0/r+HSEw2EikQjZbJY/+ZM/4WMf+9i0rrskE8YRSlWSx+mMWQiVPdyymOJ+ns3w0D6e3lTEDl1DtO1uws138vrgAr724z4ODuaQsvLh3Fofob46RENsZuowGYYkvX37ccGCVyqhXBdlOyjHnnRddu8+DEMnDE2brWpDNad1fLr6+/v5wAc+wDve8Q7uueeeaV1zyXRJSWyK+RTFXBaf308gEkeaodPqn5dSoLzikSUKxxE4nqKY7se0FtMzWOCNPRl2HBilbHuow9dLIWioCbFyQS1N8cDh9RdnTwhwMumJBxWIY5uaUyzqMAKB0x7kN6VAHo7bNSTued8IXdMuHe+97B0TxjAAfIaP9172jjO+58jICB/84Ad5+OGHuf7666d93SWRMJSTZdPLT5Ic7hs/FghFWHXdbQSrmk75gSkEWEaeYrYPKT3sUgLTF0YIH56q7L+dSBVwXI+quhYODWV4Y/cw9968EMMQ7O9Lk8mVUQo6mqL8f3cvo7Hq7JKFIcHNZDBtG88fxPMUwbZ2Mrv2THic5ynMSAQnl0UYk1d8RJcvm3b9LCHAX1bk9ycoDuUAQbA5QnBenJIpz3g6sqZpJ3ZknGImZ0l985vfJJ1O8/Wvf52vf/3rQGXL1kDg5NsVCHUB/8pt22VsLH/qB54Fgc2WF37J6NDxJTDAtHxce+e7kFZsymvj8RBjY3l8RoaB/U/g2AWq6heRGtxEuZjEMINY/jhDYyUy+TICWLH6HXzu/+3FdjxCAYs7rumgpiqA7XhUR/20N0TwG6f34SoEGE4ZUSpWiv4ViyQ3vk7pUA+uB7FlS4msWAEKDv7Hf+AWj9bNt+JVxOZ3MfirX2PV1aGOKW4YX305VTeswzGmV6sqUPYYe2MAw2egXEU5VQRPIf0GNde1UzQndm0def9mo9kcG+j4ztZsja++PnqhQzgrF/0YRjmfnjJZALiOQy6VwOczTtiPb5qK0f4NOHZl9XY2eZC61quRhh/XKeC5RQqlSgG+htYr2H7I4+4buvBZknzR5pnXe3nmtUMcGszQWhfGJ09vFbmhXDi4n8Hvf4+ef/s38lu3sO9r/0jqtddw0hnKyTFGXniJvu99HyGg9b578cWPLk60Uyk8YOGf/BGxVavw19cR7uqk9d53UnXD2mknC58h8TJl/BE/KlNGuh5VC2sJNkfxSi75A0kM46L/56Rpl7SLvkuqVMhOebymZT5W9Tye3p7H3bmXtoYISzriRAPmhC4q4WXJZwbGf3adIqnEfpq6bqaUT1AqJGltq8U229l20GNH9zANNUEeuG0JmXylz3HVwlpqIn5Od4dVKQXO7j30/fznoCC6cAGJl16mNDyCMA1Cba0gKnctj6VIb95C+Pq1NL/nvXipMbxyCTMcgao4tjCpuq2FuGODYeIicKaZt4QAI+8w9Fw3XvFoddrcviSRxXUEmyMUB7IE59fg6pyhaRetiz5hWL7Js5BqmrsYcBp55vHthKJVBCMuB/pSvLJ1gPtuWUhzdXB8MFwpl+OXNdvlHCN9m7H8UaxgE8OpeTz1ytD4NYOjBXoGeyiVXZbNr2X7vgRtDVE6G6OczoQkWcgx8Myz408fqK9l+InfVuJyXNxsDmJVHMlw6e3biaxejeMLQn2l3MixxcddD5DWaa/StpQgvWlgQrI4IrtrhJobOigli6d3U03T5pyL/vugPxwnFDk6RiGEwKrp4pkNB0AI/MHweBdR2Xb5xQv7KdpH1ytI6ccwpp76apcyGEIwknKOzrYSgnTepn8kx2i6SEdDlE27R/jJs/t4YcsApzOfSOWy2JnMMUfEhJlOdjaLUEd/Vq431fStMyKEwDRlpcRIycVOl5C+qf+5FHtThDurcC09PVfTLmYXfcIQRpBV192GdXiVc6y6jh0H0yAEkaoaxHF9+KlsmVTu6HoFR4WI1y+bfF8hkNKgqm4Jly1qIOivNNYc12M0XRnvWHtFK6OpwvjWr6/tGGQsV550r8n3Prxn0XGfv3YmQ6ClecLjjn1QuLMDAqFT3v/kzy0IKDCH89ibh3D3jCLKLggwwlMnTrfkEmyNHS6DomnaxeqiTxhKKQKxRq69/T6WX3UTje0LcGWA6vpmfCcozV12jn5r9zxFoGoR1Q0rENJEUPkSX3QsiF3FbzflKZYc3nvXUm65qp32hghXLmnkfXctJeQz2NWTnHDvfb2p8cV7x5N4WNkk7p4d2NsrW5/6jxnAzuw7QN3aG8Z3wDOjUdTh/5Y+i/iVa6Y9LjHl80sIuQrnUAY3VcLwGdhDWZxUEVVywBRY1QHEMS0N6TMId8YpWxf9PyVNu+Rd9GMYcLgUiBWlvmM5hiFZJEfoGe6ZMllIKYiFBIYaJJ8GS4ZQKkIgfhmt8QWUyzkGk0VMWUVBWQQDeboHM1QXbJbNq6YuHuSFTX28sqV/vGVxLMdVx+94CoDhORS2vMHIs8+jDpfwsKJRalZfxtCzz6MUuPk8ub4B2u6/l9GXX0EYBi6KYHsb9Tetw62uP6sqskEHks/3kO8eqyz6MyWhjjjCkPhrQ5THiihDYlYFwDvctvFJrLYYRUcv3tO0c2Xo6Wfo+ff/pDSSwF9XS8eD76fhTTed8f1c1+Uzn/kM+/fvxzAMHnnkETo6Ok553SWRMI6olPp26WqOEfSb49NhjxACFrYFUNk36O/dh2UZ2LZHrGY+0frV2F6EF3ZkqK+O0z2Y4UdP7cG2PUxTUh0LsGpBLW+5YR4Dw9kT1u/rbI5O2tJUCPD6D02qA2VnMqR27aHlrjtI7dhFvr8fO5WCrnnM+/99BEMKyrYLoSiuYZ55WXYgIATJF3vIHxgbP6Ycj9y+UbyyQ3RFA6I3TXGsUBlGEWCELKoua6LsE5zW4IymadM29PQz7P3Hb+KVKuurSsMj7P3HbwKccdJ48sknAfjud7/Lyy+/zCOPPMI3vvGNU1434wnjne98J9FoZXFKW1sbjzzyyEw/xSlJKVBuEc8pg5AYvomFBaMBk3fduohfvLCfRKoyu0cKWNwZ49oFZYrJ/cfcTZEe3Yth+hHRywgGTIbGCnzvN7vGP6Adx2N4NM9moK4qwA1XtPLsxslrP9oao9TFJq+kNJTL8KsbpnwtxYFBBp9/kY73vRdXgRASLxSm5Cri8RD5I4uTziJZCAFqrIQ9NvVMp8KhNKF5cXzVQSKrGnGLDsKQqICBYwhd/lzTzqGef//P8WRxhFcq0fPv/3nGCeP222/n5ptvBqCvr4+6urppXTejCaN0+EX9+7//+0ze9rQIHEb7D7Bv6wZy6TFMy0dr1xI6llwORhiotDTqoj7effti0nmbsuMSCVj4nL2kBjcy1advKrGbxvgSyrbi9V3DU36bH00V2Lovwe/fswLb8Xhj1zCFkoPPlCxfUMu1K5qwphq/KJexk2MnfE1OJotbKuHEaisHZnhwWUpJOTF5Q6ljuXkbGfFR9hu4x67o1slC086p0kjitI5Pl2maPPTQQ/z617/mq1/96vSuOatnPM6OHTsoFAp88IMfxHEcPv7xj3PFFVec8PGGIYjHz25Wz7GU57Fv26vsev0lAEzTAOXSu28bmeQgV958D4HwxDIg9YcLPnpugb49+7GOGbwVQmBZR5bbeQjhkS2USaQKk2YwHVF2Khsm3XVdJ9csb6Jku1imQXXUPz7YLQQTEo5XNgjEYzDFLoAAwrLwh4NEjnuvDEPO2PuXC1iVBXohEzc/eb2F9JuE2uOY0ZPXmjlX8c202Rwb6PjO1myP73T462opDY9MefxsfeUrX+FP//RP+Z3f+R1+9rOfEQqd/D2b0YQRCAT40Ic+xAMPPMCBAwf48Ic/zOOPP45pTv00rqtmtN6LsjPseuMVHMeddG50eIih3h6qGudP2TowTQ+wsI9Zg1EZwzj8sxAYwsQyDeJRP4cGJ68gN00DQ4JEMTZWQAABQ4DySKcLWHYBu7+f7K5dCMMgsmwpRl0DruUnuno1mZ5DU76u+PIVFK0QuePeqzOplyOEwASEUniGGJ8K668LISwDqQ6XfS8cTRoyYBBoi1GwwD2N55ut9XxgdscGOr6zNVvjO5NaUh0Pvn/CGAaA9PvpePD9ZxzHf//3fzM4OMhHPvIRgsEgQohpbaI0owmjq6uLzs5OhBB0dXURj8cZHh6mubn51BfPgGI+g2NP3vPhiP7u3dS0LJoyobiuJFq3lHx2CAAhTUxfGE8VcZ0S4VgrnrJob4xgGIIdB5LjLQWlFKYhCViSpfNqiAStSV01VjHDwGM/oTgwOH5sbPMWIgsXUHfHHaj2TmquupLR48YyQm1tVF93LeUZGFT2IVDJIsXeNE6+jBn2EeqqwQmbuH6D8LI6sttGMJTCOPwahCGovqYNJ2rh2npkW9POtyPjFDM5S+rOO+/kU5/6FO9///txHIdPf/rT+P2n3ptnRhPG97//fXbt2sXnPvc5BgcHyWaz1NfXz+RTnB0hONHosFJg+Rupql+GFJWpr3ZpDF+gGn+wBn+kg5ItaK0L0zuc5dar2vn1Kz3jycIwBKsW1HHrmrZJycKQMLZ+/YRkcUR2z17C8zrxrbyCyHU3EF22lNz+AyjHJtTZiVFbR9mcfjfQifiFgEQBO5FHuIpgXQQlILmhl9iKBrzaIEZ7FfHqIIUDY3h5GzPqJ9RVjR00cXSy0LQLpuFNN51VgjheKBTi7//+70/7uhlNGPfffz+f+tSneO9734sQgi996Usn7I46FwLhGJbPj10uTXm+pWvJSfd+cFyTWM18hg48QSE3iEAhjQDSDFHfFsIMtLPjQBqBoKslxoffsZLeoSwIWDavho7GaKUL6jgylyG9dfsUz1iRfO11mhcvxTH9UN1AsLYRISpddmf7MS0E+FUlWQw9sRflqMPLNQVmxEfV6mayO0eouqaNkgTCFv7LGhAeKCkouN6UGy9pmnbpmdFPc5/Px//5P/9nJm95WgxfhEWXX8u29c9MOldd30K0uvGkaxVMaTPc8yKlUhHDimOZEtt2cV2PwZ4XaFxwN89uPES+6BAJWbQ1RKmLB8gXHZ54uZubr2pnRWf1pGmmynPxyicuCeIWCuA4YFaahDM1TfXIhkdepsjoM/vxike74oQpcbJl0psGCS2qgaIDoSPlTQ4/vy71oWnaMS6qhXueB3Vti1kTirBv6wayqSSWz0/bgmU0z1uKkifv2lFelmKhsrG6UgrF0Q4spTyyY92EAn7yRYds3mbHgYmbsG/bl2BFZ/Wk+wrLhxWLYqczk84B+GprYBr9h9N1ZDaW6UF2xxCm38Q7rmaIcjykT2Knihh+s1K4UNM07SQuqoQBoJRBpKady9c24zolhDQwrOCk1dVT8dyTl+i2i0mCgbYTnhdSTDlO4gbC1FxzNYO/+e2U19Veew2uNM9q8R1U9to2Si72SB7lKYx4EH9tiFJvCsNnTJj5BKBcBYZAlV1kcHobKWmadum66BIGHJ65hIk4PH4ynWQBII2Tt0CC4ZqTnl+1oA41RXeS5ymCS5ZRm8kwuuE11OFZWtLno/6mtRgtbWdVNNAwJJYUlLvHGNsxMp54co6HryaIry5CaTCHMCXqmJpPSlWWk1jxAI5f6i4oTdNO6qJMGGfKMKMEA3FKuQQcNydZCEmkqpPLF8GhwcyksZDG2hAdjdETbr9qGz7C191AdMVK7LEkQkrMeDVuOIqjzmwfCeV4+Isuxd4kTt5GWAbxxXVkupO4RRekILcvSaizGs8DM+bHLdjjLQ1pCPwtUYyaICWdLDRNOwWdMKgsZjNSCUY3vkZ4XguFsR4ct4C/phph+hDSpL7jBhwVZUETPHD7Yl7c3M9gIo/fMli5oI7LFtbhP8V2ekKaiHAcX6QaR4LtqTPuhrKEIL9zhLGdw0gFdrKAV3QwghbV17SS3ZfEczyEKRnbNEDtde0knu9GGBKrurIbn682QOzqNgrizOPQNO3c27zhEL/9xU5SyQJV1UFuvXsJq648cff4dCUSCe677z7+5V/+hQULFpzy8TphAGZ6lIOPPoqbL5De4aP66lUY9QEcN0OopRNfuBGvKFFODoIRWqqD3HvTfIplDykhaBknndlUma3kkd81Smkkh5CCYEuUQFsVJYPTqjJrGALpgpGzSe1JIF2FV3RQZRdUpeZTessQ/uYI5ZECVpUfe6yApzziV7bg2R5e0SbYEoPqAEWhzqrKraZp59bmDYf46fc2j1edSCUL/PR7mwHOKmnYts3DDz9MIDD9dV6XfMIwJIy9tgE3X9klzyuVSTy3AWEa1Cxfhp1LktjxEsWRUYyAn6pVK4lefjm2P0LwcN2pUyULX9El8dKhCeMHmd2jFPoyxK9pozjNvYcCCkrdacq5Et5YCTdXxiu7IESleuzhfTTKI3kiS+ooHEwjwhZWQxhfPEhxNI9Z5ceoilOWh6vM6mShabPab3+xc0LJIgDbdvntL3aeVcL4yle+wnve8x7++Z//edrXXPLbpIlCjuyefZOO+6qr8Ryb7v/37xT7+lGui5PLk3jpFQZ+8lOs8vTq1JgIstuHJySLI5ycTak3fcId+I7lVzC2oQ87WSBQGybQFMVXH8bJlStdUaHjZjkdbnkIBcH2KkohA1qjOHE/RWZurYemaedWKlk4rePT8cMf/pCamhrWrVt3Wtdd8gmjYvKHZ3R+F8NPPT3lo4t9/ZT7+6bcOe940vEoJU78iy30pjFPsQRCSoE7mifSHIOSQ/r1fjLbBlGuou6mLoyID+UqzIgPAGEIkJVXFWiK4O+qrqwa93T3k6bNNVWHxxyne3w6fvCDH/DCCy/w4IMPsn37dh566CGGh4dPed0l3yWlAiHC8+eT2rxlwnGhFG6hgAwEJs2YAkhv2UrtgiUTChlKKbBcBbYHUuBZklP1+ShPHZ3fegJ+BJgmo1sPomwPt2Aj/Sa53QmKB1PEr2oltXkA5YJVEyTYGkMGTOpv6UI2hinqRXmaNmfdeveSCWMYUKmkfevdS874nv/5n/85/t8PPvggn/vc56ZV9++STxiuEsSvXEN29x7c4sSFe0II/DU1KCFO8Ll/9KApBAzmGds9gnt42qq/NkhseQP+ujClkan3uvA3hHFNCVN8qAsBflth96fI7h6hPJIHBTJgIkxZWT+RLlEayOCrCVIYyOKviWDVh8n2jFG1pkUnC02b446MU5yLWVKn65JPGABevI62dz/A6Esvkd23HzwPMxYj1NVVqas0RbKIrVg+XsjQMAQM5BjbNLEabSlRYPTlQ9Re3cpQIjfpPsKUhDqrT/ih7vMg/WovwcYIxUPp8evdbBnlephRP0bEh1Owia9uIbq8kVx/msJghqormrADpzkFS9O0WWnVlW3nLEGczg6pOmFQGQD2quqoefNbqMnnEIAIh2k0JL2//M2kxweam/C1tGIf/iw2HUVy59TbJbpll8JQltob2klvHsJOl0BAoDZEeGk9Jd/UrRchgHQZeyRPoCZU6bI6dpe+ggMRP27eBgnlVJFAWxXhWB2eJSmjTriIUNM07UzohHEMR0kIHt4Ry4PYFVdAMMTg8y+SHRzGDASpu3wF1Veuoew7ZivDsotXmrytKYAUUB7IEeyIE7+mFWV7KAGeJSkdM63VlBLD9VAwvme2PZLHzZYpjxbw1YUpD03s1vLKDmbEh785imu72JaoJDGdKDRNOwcuyYRhSoFhe5XaSabEsQSeB7bnUXY8pBCE/AYFJXm1GKW06EaqV0LaVWzMwIoRl0WtHP3GP8V0KSFAugonW0YCmW3DOLky0aV1uDE/7uFprVIIrKJDfs8wpdHC4UV9MULz45Qsieco8j1jxNe0MJrIT6j3JIRABkwCLVFEyMLRiyo0TTuHLrmEEVCQ3z5CoS+D8hTCkoQ74+TrgvzohQMkUgUCPpOVC+qY1xrj5S0DR/eHOKxnMEPVHUtpqKqUJFd+Ayvmr3Q3HSY9RTlZBKUItFVRGM7hFh1G1/dSc1UrKu5HKYWVt8nvH0P6TPx1IUojebL7RikNZqhZ3YIwBV7JJbtrhNrrO8juSVAazCIMQbC9itCCGuxCGVEd0F1QmqadU5fUOgwfgtRrfeQPpY9WlXU8+jYNMPJaP41VQZSCQsnhpa0DPPqb3VyxpGHSfZSCV7YPjLcsbBSxlQ2V9Q9UDrsFG5TCVxdC+Azc4uEuKwXp7cOYHviFxE0WcYZz5HeNYPdnibTGCLXFsHM2dqZE7fUdAJQTBUbX92LG/FRf307jWxYT7IojYj5ESxRbJwtN086xSyphkClhj1VaAQJwPUW+5OB6CjlW5Ir2+PhDPaXo7k/jeoqAf/I6jJFknvLh2U1KgR22qL2xg1BnFVbIhxn2UXV5E5Fl9SCganEtVUvqiMyLE2gIY3kKtzdN4tluigNZnGyZ0nCO5PpeVM4m0BQhu28UX0uEhjsWEF5Qg78uWOmGMg2Kwzn8jVEKAhy9alvTtPPgkumSMgxJebgyaKyAdL5MMl3EcRXFsoOUgoUFhxULatm6N8GRvZB29YxRXx3i4MDE3fICfhPzmJIenqcoWhJrSR3hhYri/jGU8nAzZbK7RnDzNkbYwl8XIthaRXkwR+qNgco2gXJi3s7uTlC7tpNstoznM5DxAJGV9TipEngKqyaEFfMhQxaU7XP+3mmadmHt3PgiL/3qB2TGEkTjtVx357tYsvr6s7rnO9/5TqLRyiSftrY2HnnkkVNec8kkDFBgSASQLzkkxiYu0vM8xWi2hM8yiYQssgWHcNA6YfmPK5c2YggxadzAdT3KhkRGLJyRPOnNgxgBEyvmB09RHs5jp0pUXdZUKRyIqCzaMyYmjfJonlBHFbYEL2hghkzM6iAIKDpeZWxkBt8dTdNmp50bX+TJH/0rjl0GIDOW4Mkf/SvAGSeNUqnS03I6azDgEuqScl2FvymKB4xljg5OCyEq+2FYkqyAFzb10dVSBUpRGwuyYn4tQ4mJhQaXzKumq+nEmyW5rkegNkRu3yhm2IeXt7GTBcojeezRAl7JQdnueP0n5arJU2E9VZku61bqP9meouR6lKYoYqhp2sXrpV/9YDxZHOHYZV761Q/O+J47duygUCjwwQ9+kA984AO8/vrr07ruEmphgBswCHXGKfenx48JAZYpia9q5MfbBxhK5gkf3t+6qzXG5QvraKgOsasnic+ULO+qoa4qiHmKwoNO2cXwW9iJHJ7rIRCVgRMBTqqEMCXSZ+CWHKzqAG7RqSQOQPoNQgtqKE7eHlzTtEtMZmzqRcEnOj4dgUCAD33oQzzwwAMcOHCAD3/4wzz++OOY5slTwiWVMBylsBZU04gitz+Jnbfxxfz4OuO8dDBJ/2iBaMiHEIIbr2jlqmWN4LgsaIqwuDVWucc0v+FLKVDlShIQUh4uMHg0y9hjRUKdcTL7RnEBsyqAEAIFWLVBvIhPT5PVNI1ovHbK5BCN157xPbu6uujs7EQIQVdXF/F4nOHhYZqbm0963UXTJSUECFWmnB8hP9aHU0wihTv5caagX8LeuI9EZxXbA5IfvXGInuEMzbUh3nz9PK5cUs+1SxuIRw6vs1CVRDHdZOFD4OVthClRrjq6F4anAIUwJXZXFdlF1diLaxgxFKOOg20KgvOqiF7RTFk3LTRNA667812Ylm/CMdPycd2d7zrje37/+9/ny1/+MgCDg4Nks9lLp1qtEAI7n2DLK0+SSY4cOUh9cwdL16wDMzz+WNdVLJ1Xzb7eFFsOjE64T3tjlDWL6zFgvLDg6ccCarRArjtF1WVNDD+5H+V4lSEKQyCkwHffUr53cJiedJ7moI+r1jRhmQYpKfDVhZF6JzxN0w47MrA9k7Ok7r//fj71qU/x3ve+FyEEX/rSl07ZHQUg1AXs97Btl7Gx6e1cdzLKybH+iR9SKhy9l2FaGIZJtKaOFdfegWLijnSOpxgaK7K9exSUYklnDY3VQaxjpsrG46FpxWcYAtOpfMhLv0Fhd4JyokC4I46XK1M8lKY0msfwm/hvbOelQoHf7h1EWofXd8hKV1RN0KIrGuKujjqEe+pfy3Tju1Bmc3yzOTbQ8Z2t2RpffX30QodwVuZ8C0MIwdhI33iyiFbV0N7YgcjkcItFfJFaKGQgWDPhOlMKWmqCdDS0A9Mfm5j43OB3obg/SXG0QLA5ip23KQ9mkX4ToRQYAtf1CLZXgRAkUGwbSiN9Bh6VcRU8hSkFqaLNgFGioBShUz67pmna+TXnE4aUgtGhPgCqaxto9VXR/70f4ZaOTp0tX7Galrffhx2ITLr+TBLFET4X0q/04ubLhDurSTx9AGEIhCHwyh65vaPEr2ohvKKB/N5RZMRi2HZwJBQ9b0Kvk+sqPClxlEIv3NY0bTaa0UFvz/N4+OGHefe7382DDz5Id3f3TN7+BBSBUASEoL2ujd6f/GxCsgAoHOwl8dSTmJw8OUhDUDYEJUNMWkg36bFS4A3nKPalCTbHSG3sRzkeXslF+kzU4TGQkfW9UHYZVR45vySPR30kgKOYlBhszyPmtwjKU8zZ1TRNuwBmtIXxm9/8hnK5zH/913/x+uuv8+Uvf5lvfOMbM/kUk7iuoqG1i9GBQ+S27UB5E5OCMCSGaZHZs5ea9BjEaibdQwhBTsDGwTG6x/J4StEYCXBtWy0xKSZ/slN543IHxlCOh7RkpdjgYU6ujBUL4JYdhKPIj+QwO2KUqgLEDOg0JNtHMuQdF09V9swAMITg6pY4fiF0qXJN02adGU0YGzZsYN26dQBcccUVbNmy5aSPNwxBPH72vfVuxGLh8ssZ3PbfE0p5CCGJVddj+nwIwHDLRKZ4vkSxzC93D1BwXDAkEhgu2vxi3wB3dTUyb6oYXY+c7SINeXTa7GHK9nCyJXz1YZRSeD6D9Z7Nzv1J3rqomW3Dae6a38jmoRT7xir1repDfu6Y10DIMIhEplf0wzDkjLx/58psjm82xwY6vrM12+Obq2Y0YWSzWSKRo+MEhmHgOM4Jp2u5rpqxmQyR+k7K8xZQHk7gOg6Wz48/GEYYJo7tVko2GRbZkSQqPYZXLCJDIWR1DZvGCmQK5ck3tQyePzhCrKMBedw0W5/PwN8cI9+bQU5RzRbAVYqSgLRf8kYiRc52GCvazK+OMJQvUh/ysaI+SsgyqfZb9IzlqfGZ035PZutMkCNmc3yzOTbQ8Z2t2RqfniV1jEgkQi53dBtRz/OmNbd3JjiuIL7mKrI7944fU+roeoZwRweGadD3g+9THBxCADg20dtvpydUj/A8lGFNWv+QyJWxhcI0JEXlIYGgkNi2S7AtirnTRylRILywhlLUhxfxIWwXf6JILlvENgTpsElmpLIfxlCuxMF0AVcpltREMKQkXbTZPpjCbxpc0xivFCPUNE07LL1tiMRz3TjpEmbMT+3aTmLLJ+/Vczr+6Z/+id/+9rfYts173/teHnjggVNeM6Of5mvWrOHJJ5/kLW95C6+//jqLFy+eydufkqhtoP6Wmxh66pkJ4w6+2hoab3kTh374I8qjYwjlYScSONksZncPxWoXx/Qj/X5kOILiaL9WayzIYMFmY1+SVKkyTtEcDXBtSw1W0KT62jbyBZtDYYMNB0ZIdSfx+QwWNcRYsaganwEvDSc5Uhbqlf4kdy9oYsdImmcOjtAeDRKQkqZIgHVttVjHzZ7SNO3Slt42xNCv9ox3fTvpEkO/2gNwxknj5ZdfZuPGjXznO9+hUCjwL//yL9O6bkYTxh133MHzzz/Pe97zHpRSfOlLX5rJ25+SKwwCK6+gs6OTQnc3bj5PoLUVq7GRUv9AJVkIcJJjOJksAM7uXXS+aR47PElpeJiAZYGvMoYQ8ZnUhf08eWAIccyneH+myM/3DPD2Rc3EmyLsSGTY0DeKETLxB8IoYLdjM5TPsaQ+Rl+2SEPYT7JoU3Y9frF3gCsaYjywtI3GsJ+wlEQMCY5OFpqmTZR4rnvyOKnjkXiu+4wTxnPPPcfixYv56Ec/Sjab5c///M+ndd2MJgwpJZ///Odn8panzUVCrBb/5XWVrVJdhWdICr2HKg9wHOz00c2QCgcPsdD06HEEZSmxUyl8DX6UEnTEguwazTLVJNey57ElkWFhTZgX+0cpK0VL2E/QMnA8j4PpAsOpPKua4tQGfAzly0R8BlbAwhCCsaJDTzLLyqoQ0lWgy5ZrmjYFJ106rePTkUwm6evr45vf/CaHDh3iD//wD3n88ccRJ9oA6LCLpvjg8TxP4R4ur6GUwoxEj5yo/K8QRK66ksgHP0jKF2DtivncddVyGiMBLBQdVUG64iEKZWfKuk4OsHUkRdlTFF2Pte21KGBHIsuBVIEF1RGua61h82CK96/sIGIZla1ggbBpEDUNbuqox9Cr9DRNOwkz5j+t49MRj8dZu3YtPp+P+fPn4/f7GR0dPeV1c36l93R4niI4rxNhSHBlZY/tt7+dN4Jxdu8bAmkQyLgYjsPaFfPpqItjegLblBOThQAPsJWiaLs0RwIYAtZ11PGzPQNk7aPVcfuyRVrCAW7vqmcwW+RPrprPjpEsOduhORygOewn4KFLmGuadlK1azsnjGEACFNSu7bzjO955ZVX8m//9m/8/u//PkNDQxQKBeLx+Cmvu+gShhDgSUHx8AdxQAqkq1DRahpvv53B3/ya6MoV7IrVsatnEIQg2NCAnctTLts82z3EO6piVCGIhnw0RvwMZksgKoliuFDG8RSeUiyti1JyPbYMpyckiyMGckUyZZdsscz8SIDV1ZFKfJ7Cc5Uer9A07ZSOjFPM5CypW265hfXr13P//fejlOLhhx/GMKZeHnCsOZcwhAElVUQg8BPAO7ZLRwoSrssrh5IM5Sr9e3VhP9c2V1NnGviWLKOjsYFU2Wb39kP4amowgkGcbBZVtrGqYgh/kK0jadY2VuM3JNe11PDzvQOUPMVwvkSlKK2iNuQjYpkM58ukijZTbY4Xsgy2j6RZVVfZfOlMS6ZrmnZpiy1vOOtptMeb7kD3seZMwpASkm6S1w9toWesH0NKltTNZ0X9EoIqjFKQ8jx+sWcQ95hunpFciV/sHeCtC5uoFhLi9XgCjDEPUSrhZLMYoRD+hjBYPhSSRKE8XpojLgRvX9TCa0Mpco6LAJbURQmZBi/1jnJNaw2259EcCZAslim7HoaQRH0GpiEZLZapC/nxA5PbIJqmaXPHnEgYQsCIPcwPt/8S2z1as+mVQ2+wO7Gfdy55M0Ejymt9iQnJ4ghPwYaBMW5vqwVXVfbjFhICQaxAEKjsqndEyDIwDs+NUgpiEloifiwZJ2M7HEoX6E7liQcsMiUbBRhS4DMkIbNStjxnu3hlhyub47SEfLi2bl1omja3zYlZUq50eKbnlQnJ4ohkIc320T24srI+4kQGskWOTEILCUl7VQhUJSEoQAlwBXgCVjZUkVEu2xIZ+myHAgIJ7EhkeH0wRbJoUxfy0xDyk7ddrmyqxnE9gqZByfXIlV0MKagJWtzUXoepp8xqmnYRmBMtjLybpz89dMLzO4f3srx+OcZJqrwaQoyvp1Cux7XN1YwVbcZKNgXXI12ysT3Flc1xRos2I55ix2gWx3ZxleLOhY34DcGCeIiFNVH2jeXIlB3iAYN5sSAtkQBP94xgSYnPkNSHfKxrq6V6ijLmmqZpc9GcSBinmk/kKQ8Txbx4mP5sgSVxg5hZaU+kHT87xlwaw34CML4jRtBTvHV+I/uyBXYmMsyrCtEeC3IwXeDFQwmuaa1hdVMVedslHvDheoq7FjSxO5njR7t6UUpQ9jx2j8L+sRy3dNZzfWs1NUEfUdMkLATC9fB040LTtIvEnEgYQSNITbCK0UJqyvPz4m1Yno+rmixGR4cZ6tvAYKlS+iPgj7C25Uqqq+vxnKOJR6nKNNlN/WOEfSaO47G+L4nflCyqjfCTPQOELYNEoYynFIurI9yzuJmdiTQNoQBl18MyKq2WrO3yzMER3resjQgCXMWp05ymadrcMicShk/5ubHzKn6647eTPob9ho9VjctQCnzlIdzh9fixcaU8fG2pciwSwZMN44Pb0hCkbYes45J33Mp4hlAsro3y8z0DFA9PgfUbkoLjsj+V58XeUWqDPoQqgynHWysR0wAF+bJLZBpzmTVN007H9u3befbZZ8lkMkSjUdatW8eyZcvO+H4//OEP+dGPfgRAqVRi+/btPP/888RisZNeNycShucp2oLtvG3p7bzY8yoj+SRCCDriLdzQdhVVMo6UDsn+TUjlUWWZRK3KS5OAUh5jg5uobrsF1zUoSsGWkQx+y6A/V8RvSKr8Fu3RIHuTWWxVSUuCo11YUgi2jaRZ11bHcK6MVBwdEzn8/4uuhzAN9OJtTdNmyvbt2/nVr36F41S2SMhkMvzqV78COOOkcd9993HfffcB8L//9//mXe961ymTBcyRhAGAJ2gPtNO8tJGCW0AKQVCGEa7E8xSmKFPMV2qhKKUmf5jnRxGqRFGG+fneQTJlh9XNcSwpKTgeRafEopooY6nC+GLAoGUwenhjJcfzMIWJopJEpppeFvOZOllomjajnn322fFkcYTjODz77LNn1coA2Lx5M3v27OGzn/3stB4/J6bVHqGUwnAtIsQIqSjCPRq+QiCldcJrpTSR0mDP4dlNAEPZIrd3NVAdsKgNmRScElUBEyEqazHcwyVAoLLvt2UIfIaYsnptQ9hPzNTdUZqmzaxMJnNax0/HP/3TP/HRj3502o+fUwnjZDyCRKpPXIwrWj2PMoHxPbSjPpPGaJB0yeaOrhoMkePVvm4W1QSoD/mJ+UyyZQdLSvyGxBSCxpCf1kiA2sDExNQcDXBLRx1Sr7fQNG2GRaNTb+t6ouPTlU6n2bdvH9ddd920r5k7XVKn4LqKaO0yCpkByqX0hHM+f4xI7VKK3tEV3Uvqo/xi3yA3tfv47ubfsLCmnSub4uCNcE1zFU92jwICU1bGJBpCflbVVxExDd46r5GM61J2PYKmJCIlwtV9UZqmzbx169ZNGMMAME2TdevWndV9169fzw033HBa11w0CQPAdkM0zLuVYvYQ2eR+ACLVXQQibdhuEFPAvHiIA2N5BvMlagI+9if3kCxmWN+3DUllVtTSui7ev+I6+nOKnA1N4QC1AR9xyzxcktwjjgCjMjsKnSw0TTtHjoxTzOQsKYD9+/fT1tZ2WtcIdQE3ZLBtl7Gx/IzfV0qBlJXuIc+TEyraFg3BhsExujNFwpbL3sSzHEqPIACfIcf76BrCfrrijbx5wa34VRih1MTKuLNAPB46J+/fTJnN8c3m2EDHd7Zma3z19WfXjXShXTRjGMfyPIXjCBxHTPqQD3pwbUsNtUELT0n8hoUUE5MFgEQwlEtQtEso15t1yULTNO18uygTxolIKXAleK7H2tZahDJY3bwcv5yYLCwpMQQ0huuImJELFq+madpsclGNYZyMa0r2ZQpsHU6Tt11iQYsVDTEMgiyq7WB3ogeoLNCrDfoImD5unn8DhmfqEh+apmlcIgnDMwQvDSTZO5obPzacLTGUK7GmuZq7FtzK5U297EnsQuAyP97GktoFtEabZmU/qKZp2oVwSSSMtONNSBZHCAWb+sd417IWOoKLuapuIa7nIpWpxyw0TdOOMyfHMAxD4MgytiwhjJN/sBuG5ED6xK0EVylGC2Vs28O1AdfQyULTNG0Kc66FUZR5dozsYcfwHhzPpb2qmdVNK4gb1Sfce8I7xcxhnR80TZvNEn2v0bfnF5SLY/gCcVoW3k1ty5ozvp9t23zyk5+kt7cXKSVf+MIXWLBgwSmvm1MtjJLM89jOx3mxZwPJQopMKcu2od08uuWnDNvDiCmKPLmuR0cseMJ7SgE1gRPXoNI0TbuQEn2v0b3t+5SLYwCUi2N0b/s+ib7XzvieTz/9NI7j8N3vfpePfvSj/N3f/d20rpszCUNKwa7kPhL5yZso2Z7Ds90v40l3ymurLYuWaGDKc8vqY4SnyjSapmmzQN+eX6A8e8Ix5dn07fnFGd+zq6sL13XxPI9sNotpTq+zaca6pJRS3HTTTcybNw+AK664gk984hMzdXtsymwf2n3C8/2ZYXJulghVk84ZrsfN7XVsSWTYOZKh5HpEfCarGmIsiAZRurSHpmmz1JGWxXSPT0coFKK3t5e7776bZDLJN7/5zWldN2MJo6enhxUrVkz7iU+XQuGqk1eD9dQxuxodx3Q81tREWF4TwQMMwK/A08lC07RZzBeIT5kcfIH4Gd/zX//1X1m7di2f+MQn6O/v53d/93f5yU9+gt/vP+l1M9YltXXrVgYHB3nwwQf58Ic/zL59+2bq1gD4hI958RMXyooHYoSME49VQCU5+FxFwFVY7uyrDaVpmna8loV3I47b60dIi5aFd5/xPWOx2Hh59KqqKhzHwXWn7tKf8LxnUnzwe9/7Hv/v//2/CccefvhhEokEd999N6+++iqPPPIIP/jBD056H8/zcE/jG/5gfphHN/+EkluedO7uRbewon7JtO81FcdzUCisw78cw5C47uzd40LHd+Zmc2yg4ztbszU+yzqzTdZmepZULpfj05/+NMPDw9i2zQc+8AHuueeeU143Y9VqC4UChmHg8/kAWLt2Lc8++yziJAPKp1utVkrBqJPg+YOvcnCsj9aqJubXthPxhYhYEWJmFD/BKVsO0oCCKqAUBGUA5R6NqyTzdKcPsX14D6BYWreQeVXtNMbqZvVK79lakfOI2RzfbI4NdHxna7bGN9er1c7YGMbXvvY14vE4H/7wh9mxYwctLS0nTRZnwvMUcVnDPQtup+AWebV/E8/tW48SCiEEMX+EW7pupNnfzJHhDiEEWdK81ruZvaPduJ5He1UTV7deQY1ZS4HKVN1jZ1/1pYeoDsZ44LK3YjD17KrpklKMx65pmjaXzVjC+IM/+AP+7M/+jKeffhrDMHjkkUdm6tYTKRjuy7Nx7HVePrgRf8Sg6BVxhcNoMcl/7/gF71t1LzGqAciS5gfbfkauXBi/xd7RHrrH+nj3qnvYMbJ7yqm6yUKaDX2buLbuGk4x1j51mNIl46Y5NNaP63m0xhqJW9VId86tldQ0TQNmMGFUVVXxz//8zzN1uykZhuDg/jEyTorX+7ZiRqAvMzBeTdbnN0gVM6zvf4M72m8GBZv6t01IFkc4nkPPeDfU1HYO7+PyulX4Oflg+vE8w2HD0Ou80vs6CoU8/D9d1e3c2rkWyzu7VoumadqFMGcW7gHYJZcdm/pxTQf8LsPZxITS465T+Wnb0E5yKkNRFdk72n3C++XtAkW3eMLzZddGcXrNCykF3bluHt/zJIdS/RxK9dOfHSTv5tmX7GHj4BbkmY17aZqmXVBzKmGUSi7Fgo0pDRzhTFqX4R0uJhUwAyQKYxhScrIh/UwxR0O47oTn68M1BIwAGB7SZMrSI8cryCy/3PM0uXIBdTid2a7DUDZBzsmzdXgneW/2DcZpmqadypxKGIZR+cS2RyWtsYZJ548Msq9oWMJwNoEfP13V7Se8X8EpcX37lYgpVvsJAVe2rmLryE7+e/fPeWzvL+kuHsD25RE+dzyW4+Mbyo0wmh+b8vmShRR5p4Cj7CnPa5qmzWZzagTWFzCprY/Qtz/NLXesZXeim0ypss+FUgohJcsbl1D2HNqiNbiu4oqm5exO7KfolCbcSwrJta1XUO9v4O7Fb+LZ7vXj94r4QlzbeQVbBnexfXg3Ukry5TwvHFrPwppO7liwjqAVIOaL4XdC460YB4fB7DDxQIx0KTspftdz8RkWprDQ2/hpmjZdL/Um+NHOPkaLNjUBi3uXtHBda+0Z369cLvOpT32KgwcPEolEePjhh8fLOp3MnEoYQsBlV7Xx3BO7yR0U3Lfsbg6m++hO9RK0AixrWsRwLsv63v0sr78CJQUxFeddy9/CK30b2Td6EE95tMWauK59DfVWPcoVdIXn07KymbSdxvFcYv4wTx54kee711MXrqE7eYiiW0IgeK1/C03RekZySW6dfwM1/hpCqjK3WiAYzo6yunklPam+KV/DqqalhGX4tBYsapp26XqpN8G/b+6hfHhq/mjR5t83V7aUPtOk8eijjxIKhXj00UfZt28fX/jCF/i///f/nvK6OZUwAIJxyY1v6ySTKhGhif2lfppDzThS8Zu9m6gNxbl70R08fSDLWxZGCHsQE3Hu6LiZQltlXCEgA0jPQCAoyAwFr4DjumTLOUZyo7RVNfPrPc9SH65hNJ+k6FZaJwqFQLB1aBf14Vr2jB6gNVpkSXQpnquQymBB7TwOpvu4oeNKXjq4Ee+YcZZVjUtY3bhqfHBe0zTtVH60s288WRxR9hQ/2tl3xgljz5493HTTTQDMnz+fvXv3Tuu6uZMwpEd/aZADYwfxcJFCUuWvYu2SGxgpZMnbRZY1XkHe9rNlyKHsenSnCqysCuF5CuUKAoQq93LBsWwG8v1kyzk8PLYO7ebV3jdoq2rB9hxumX89u0b20Z8dmhCGQlFyyljS4uVDr/Ou5W+hRAGLAJ6nmBdrZ9PAdoJWgN9Z+TZG8qO4nkdjpI6OqlaCXhhP90dpmjZNo8WpxzxPdHw6li1bxpNPPsntt9/OG2+8weDgIK7rYhgnn8I5JxKGlIJDhT6Giwn2jXVzMNWHJS2WNiwk59iYRjP7k5L2KoOQVWZlA5Q9Cw91eCB84gd0Ueb4+a4n2JfsZqyYJlvO0Rpr4q1LbuPxXU/xolOiJhhnSd0CDowdmhRPW1ULQ7kRcuXKbKdjp976vCD3LL6TbYldbBvcjSVNmqL1dERbqTXq9IpvTdNOS03AmjI5nM3Gb+9617vYu3cvH/jAB1izZg0rVqw4ZbKAOZIwyqLAUHGEH279BWX36Bs3sH+EulA971n1dpbXe7zQ8wIjhRHKrk1tKM5tXdeTpw2/DIInEQJso8RPd/2anSN7kVIwVkwhhKQ/M8ST+15kbefVvHRoI/lygVWNS/CbvgkD5j7DYnHtPL69+cdc2bwKT3kEZADvmEKPfi/IVXVXsLJ2KQoPnwiAK85oxbimaZe2e5e0TBjDAPBJwb1LWs74nps3b+bKK6/k05/+NJs3b6anp2da182JhJH3Cjy9/6UJyQKgPhinKVpLzk4xVsiyM7GLolNGAcO5BN3Jbn5v9f0EZZB50Q6GSiPkiznW976BoxzCVgghJJ7yKLllksUxfKYPpTws00/ZtVlU28WWwZ0oFE2Rem6adx0b+7ayqn4pdy+6BUtaePbk2cmuq7A4eW15TdO0UzkyTjGTs6Q6Ozv5+7//e/7lX/6FaDTKX/3VX03ruhmrVnsmplutdtgb4P88f7TsSMD0c3PXdWTKOXYn9hMw/VzbupqGQC3D6SRvjO5g1+heym6Jxkgd/9/l76JgF3j14GY6a1v59qb/xpCSiC/MaGEMiRgfV7h53nX0pPopOgVuaL+KruoOik6J0UKS0XyKBl8NKuug0g6hQIj5HfOJRuModf6Xb8/WipxHzOb4ZnNsoOM7W7M1Pl2t9jyQwkBKOb6S+/aF63hq/wuM5EcxhYmJwejYKKYyecv8m2kvxFmy4FZ+0/M8tufgM0x+tO0pFlV3cSQ/Oq5DwKy0AI7NmGFf6PC4h2BR7XwOpvqp9lexon4JsgwbXllPuWxjYFBIFRgZSNDU1MTy5Ss5H2+nEJVa/3ohh6Zp59ucSBgxM8q8eCv7Rg/SHmumZ6yXoVwCn7RwHJtYMEypUCbr5NiW3I0vJygfdGgI17JzZB9Fp0y2nMdWLgHTT8D0U3SK5Mp5qvxRUqUMAoGUkrpQLSVnGzd2XEVztIF5wXkoBUq5bNr5Gl4JTCqDTUc+sgcGBmhqaqK2tplz2WATwiWdHqOnpwfXdWhrayUer8UwAuf0eTVN02COlAbxqyC3da2jIVLHorr5bBvehRQSlMKUFkEziG2XUUqxbXA3LS2t7OvZx+XxpSytn89oYQzDMEjkkriex92LbsaQJtlyDsuwaAzXETQDvG3xbWTLGd6z8h3c3LqW2kANjuPhuh7lcpHh4ZETxnjgwAGEOJej2g5bt25m/fr1DA4OMjKSYMuWrbz00ovYdu4cPq+maVrFnGhheJ5ifqSL+5bezVg5hUQSMH34hEWVL0oxV0BKA8dzKLs2hmHgeh5+LFY0LCVVTGMKg7xdwFMe/ZlhHljxVnrGekkUkjRF6rm8aTnxQIxaXy3S8aGOW1zned5Jv8Xbto1SHjDzYxlCCBKJEQYGBiadKxaLbN++ncsvX4PnzeyGVZqmaceaEy0MAOEZzA/PZ1XdMta0rKIt1kK1VUUhU8DzVCWBGD7a4y3kMzlqQ9W0xJvYOrCD/aMHuaHjShSKTX07WFa/iP7MEOlSlqgvStxfhSX81Bj1CNuaMjGYpjW+/exU4vEqhJiZZCElOE6RcjmH55WR0qO7+8AJHz8yMkK5fOIy7ZqmaTNhTrQwjvA8heH5ubHtan6w7RdgqvES4iBAwQ3tV3Fg617ikRibBrYzkkjg9/lZ2bCYdy67ixcPbuDl7tdpq2rm9vlraQjXERJhDM+HOsmiOtP0M39+Fzt27Jx0TkrBvHnz8c6yR0oIcN0S27dvZ3BwEM9TWJbFqlUrsO0Tr+pUSuEduxBE0zTtHJhTCeOIel8Db1tyG890v0S5XCaXz1EdjHNt+xUMdveRKWRZs2INj+99Gs/zKBaLRN0Q9aKady56CyWviEASkqHxBXfqFLOOPE/R2tqB47js378f161cGAgEWLlyJcFg5KwThufZrF//Crnc0TEJ27bp7j6I3+8nm516rMLn82GaJ279aJqmzYQ5mTDwBB3BDh5Y2kDOyeK4Dm7OJj2SJNBo0tDRzBMHnqdgFzGkwc3zryc/mGXH4E4uu2w1UkUqt3GPdP9UVnKbpu+k4wBKGXR1LaKtrZ1isYAQkkAgiGH4zrrkhxAwNpackCyOGB0dZcmSRSQSCZhi74758+djmn5ddkTTtHNqbiYMKt/4LfzEpR8kmHWS1rpW9h/aR1YUuLxpOX7TT0OgllTfKInRBEIIHKeElH6EgGIxy+7dO8nlctTV1RKNRqmtrcPnC+GeoIfHdRVS+gmF/BNiOVuGIacc1A4GK/uJ9/UNsGbNarZv30mhUDh8jcG8eV20trbrZKFp2jk3ZxPG8RzHw/NsuvccwHFcAgE/rluiu7T/uEdWPlhLpSwvv/wiHR3tWJbJnj17Kl1X0Rhr1qyhurr+vMavFJjm0V9HU1MT8XiMZHIMUMTj1UQiMa6//kaKxTye5xGLRfA8SycLTdPOi4smYQBYlo/a2jr6+/vJ5yvfwgUK4dl4pTzV1dX4imMYkTjb9uymubmZ3t4+enuPVqQtlYZ56qmnuO6664hGlyCEQHmKcslBCIHlNxCCk+4Vfjoq93LI5fLU1dUSDAbw+fwcPNjNc89tGn+clJIVK1axbNkKAoEYAJHI7Cx/oGnaxemiShiuCwsWLGBoaAjXdREoKKSwM6NIKVmwahmZF3+Iufg6ksNDdMxfOCFZHGHbZXbs2EFLSwupUZctr/UyNlr5YK6tj7ByTQvReGAGxi0EpVKGjRs3Hh67UOTzeWpra2hsbKysJ3FdQBCJROnv76eqqor29q4LsmOflAKlHJQCKc1Jr19KgeuWUcrDMM689LKmabPTRZUwAAKBCNdddx07duwgOdyHnRklXtfAksUL8fdtxbFLKLtMyITh4aHxNReV+lFHua7LaGKMl58awnWOTn9KDGd57jd7uOmuxQTDZ/eh6Lol1q9fT6l0pHy6IBQK0dvbSyaTYeHCRRw4cIBQKIRhVH5VBw4coKWljZn+1cn/f3t3HmRXWSd8/HvWe+5+e+9Oek3SWQgEErJCBBEURUesYaKIy0vpW6OWjjqOOI41DjhExhlHa6asGWscLYtSRwR1ynnfGQHfGREDIUA2QiB7ek2n97svZ3veP273TW42Qha6OzyfKqroc+89/evTnfM7z/Z7VHCcIkIIDMNEUaoTghAOx44N0d/fj+971NfX09HRiWGEpkqn2PT09NHf34/rOkSjUZYtW0YoFEOIObPcR5Kkc7jiEobvg2VFWbVqNaWRI3i5NtTsGN6hrbhTi9s0J0+iqYXhscmq9Q26rqOqKqYZQFVVctkSmqpw6vi35/kcePk4K9e3419g35SiKExOTpyULMqEEAghSCaTLF++nImJiarur2KxiO97qOql+dWpqkKplGX//v2Mjo4ihCASibBkyRISiXqEUBDCYfv2F0mnU5XP5XJ9DA4eY+3atVhWkJ07d5BMJiuvJ5MpXnjhBa666ioaG1vlOIskXQGuyEc/IUBFwJEX8V75HU7fXvzpldCqSinSQNA0aWior/qc67oYhkkoFKGY9zB0i85F9XQva0TXqy/V6HAG13ntxXKKUv7v1GOqKlBVQWdnB7FYFF3XiMdjxGKxyuB3oVCotCymBYMWiqKedC4FRfHx/RJC2Kjq6ysP4jgFtm3bxsjIidZWNptl+/btTEyMoOsqIyPHq5LFNNd1OXjwEMnkRFWyONm+ffvxvBJCOICLpsnyJZI0V11xLYxpPhp6vAl7/FjVcaOhg/09faQmJ1lx0ztoa2tjcHAQgEgkioLJ+EiWxYu7eXn7KH1HJqmtD3Hj2xaSy2XxhYeiqGSS516lp6qCUqlAOp0EIB5PYBjlKbKZzCSHDh1kZGQY23ZYvLibxYu7OXz4MJqms3r1aoaGhjBNs7JAcFpnZ1dl3YfruqTTYxw4sJ90OoOu68yfP5+urgUoymsv5FNVhd7efmzbPu01RYH9+/dRW1vL4OAghmHguu5pZVOE8Onvn96tqxyT67qoqoqimNh2idHR4xw8eBhd12htbWPevFYURY5xSNJcc8UmDM8TWB3Lyffs5uQl2CKUYLK/F9uHHTt3snz51TQ2NtLfP4Dr+BTzPitWrEDxIxw8fhxVVeheXktv/37Gx4dwHQchVJrnt6JojahqefpuqVRCVVUCAQtFUTh8+CA9PT1VYyRLlizGsix27tyJED6qqqHrPjt37iQWi9HZ2cmePXuA8mK8WCxWNSOrtbWVlpZy946qKgwO9rN9+87Kz+Y4Dj09PYyNjbJmzbqqpKGqylR9qhK6rmOaIcBlZGT4tGvn+x7FYgHHsSkUyoPw4XCIcDhMsVhkcHAQz/Onfq7yOhQhfFKpJK7rTn0/Dc8Lks1mKBbL16dUgv379zM0NMT116+RSUOS5piLShi/+c1vePzxx/nWt74FwK5du/j617+Opmls3LiRz3zmM5ckyAvlBOtJrHk3qR1PIpzyWIHie5jhKB4mnid46aU9JBJxrrvuOtySzujxDKPHfHLpSaKxAF1LEmRyfYwPHkF1c3i2g2aYpIZtdu4osXjJUnbt2l15So/FYnR3L2RkZPi0p/FIJMJzz20llUohhMA0Awjh4/s+4+PjdHZ2YlkWjuOQTCbxfZ9rrrkawzAJhyPoeqAygOx5pTPWtQLIZnOMj4/R2Dgf3xcoikdPz9GpfTua8DwX1/Vobm6io6OdAwcOYtvlsRzfd5mcTBKPx1iwYAHPPvsMqVSKfD6PYRjU1dWzdOlSDh06jOd52LbNggVdHD16pJIsAAIBk2w2g6qevtlTOp1mbGyUpqb5cmxDkuaQC04YmzdvZsuWLSxbtqxy7P777+c73/kObW1t/PEf/zF79+5l+fLllyTQC+H5CqJuETVvbcTPjiOcInq8kc6aDHtf2Vd5XzKZwrJC9O53SCdLxKLldQ5mQGPR0ijP/b//wSsWMEwdXVNRFR8vn2Z4SKG+vqGq2yiTSfH73/+eVauur7qht7bOJ51OMTo6imGUn6wNQ5/q+1fQdZ3h4WFaW9sYHx8nlUqxe/dLNDe3MDQ0RE1NDddeuwLQploL7mkD5icbHBygqWkeqgpHjhzm+PHjzJ8/jx07tlc+p6oqLS0tLFiwgMOHj+A4NplMFiF8uru72b59B4GASSAQoFAoTCW2chdYbW0dx44do7PzGhKJGsLhCLY9Ufn+qqrhOA4rV66kt7e3vJ7lpAQ6MNBHU1MLZyp1IknS7HTBg96rVq3igQceqHydzWaxbZv29nYURWHjxo1s3br1UsR4UXwfiloMO96F27CMglFHU/N8ampqqt5n2yUSNSEi4UilC8gKmZSyk/h2EUVVUFUFTS8v3CMQJptOMTk5QTBoIQTYJY9Mysa1FVLJNB3tHUC5OyoYDFIsFk9pdShTs6J8FEVB0zQMwyCVSuJ5HoVCfmoAXDAyMsyWLb/n6NFDbN36DBMTY1x33bV0dy9i8eJu5s1rqVopPn1+xynS29tLa+t8Xnzxhaok4/s+qVSKV199ldbWefi+j+PYJBIJJicnCQYtSqUShUKBRKIGwzCwbZvBwUFqa2tYvHgxw8OjpNNpVqxYQXf3YgKBAIqikEgkWLduHel0eqoG1qm/l3PvLyJJ0uzzmi2Mxx57jIcffrjq2EMPPcQdd9zBtm3bKsey2SyRSKTydTgcpr+//5zn1jSFRCL0emO+JNavX8/o6Ah9fX34vk9LSwvR7ga2/L/DlYQRiZhoolDevlUrJ4zyA7GCUFV838PQdfKFEpNjOTzPR4jywr9DB/pZvXoNTU0lcrkMmUwaTdOwLAvf9/E8ge/7KIqKEOWb57x58+jv70cIgaIoxONxXNfGtktkMhnS6RSLFi0ikUiQyaTZvn07vu9RKBRoaGhg8eIlDAwMUCwW6ezsJBoNMjKSxrICFAp5XNc9bb2JbTuEQiESiRqi0QjFYoHOzi6y2Qy2bVem+YJA0zRqa2sRolyld3h4mHy+wNjYCAsXLkJVFVauXIWmqYRCIbZv38Hk5MTUOpLqZ5PW1lbi8QgzRdPUGfvbOx8yvosz2+Obq14zYWzatIlNmza95okikUhVpdVcLkcsFjvnZzxPzGhpi3i8kWuvbZhKEApCwIo1reza1o/r+jiORyRooZsGqjL1RHzSQ7ECJGpqePXVPhzHrxxTVQ3d0Dh6cJTWzgZSqSSKotLT08PVV1/Niy/uRPiQzxUJBoNks9mpWVTmVJdQ+Zu0t7dz+PARMplM5ZjneRiGzo4dO/B9UUnSIyMjJJNJ1q5dx+DgMWKxGpLJPL4v0HWddDp9xif6cldR+Wdft24DfX29lVlO02tUFEXB930KhUJlrMa2bdLp7NRZBI7jkMnkGB+fBMoPDF1dXUxMTBAIWLjuiW47ywrQ0NA0o7/7RGJ2l1WR8V2c2RpfQ0N0pkO4KJdsHUYkEsEwDPr6+hBCsGXLFlavXn2pTn9ZCCHwvHK3VXmmj6C5Nc7b3r2UdTd1sWBxA7F4lOtWrTzts4pb4tqVqxgZHsMunbgZCspjAx3tnRwbSDHQkyQYDBGLRSkWS+SyRdauWUttbQ2O4xK0QlxzzTUsX341Rw73oGkquq5z3XXXkUymKk/502KxWGVsRNNUPM/FsoJTlXg9UqkU69atq8xAsqwQmqYRDofPeA2CwSBCCAIBa6oKb5ienl4aGxsrrRFFUfE8D1Ut7yhYW1tbqZg7dTXQNJV4PF45ksvlcByHW265pfLgoKoKLS3NrF27Dk2zXv8vTJKkGXVJp9V+7Wtf44tf/CKe57Fx40auvfbaS3n6N4TvC3RTo745QjweIp80aQocZcONN9LbP0g2kyEUDtPZ0U6ofh6/f27naedobmrENOJYZhHPVeno6CAajbJy5fVs+d12gkGLto42uruX4LkejQ0NeL7KkiXLCIUNMpksw8MjpFLVi+VCoRC+75PP55keLA6HI9TV1VIslsjnC2Qy2ao9PVTVoLt7MalUEl3Xq2YyWVYQXdcJBoOEQmF8X9DQ0MyKFTAyMsx1161k9+5dla60UqlEOBzmqquu4vDhI1WxxWIJ2tu7yGTSpFIpAoEAjY0NKIpJQ0MLrmujqurUvh3I8QtJmoMUMYP/ch3Hm5XNxmnTzdqAKOAO7cNJDuMrOpqmE2hsg7pOcoUSe186yMjYKIamMb+1DVWEOPjqBMIXLFrWyFXXteB5PsnxLBMTE/T1HSWbzRMOh+jo6CQ9AYO9aZZc3cySaxo4fnyIPXteqgyIT0yMo+s6a9asQVU0nnrqd8TicZYuvhrPMXEdn1giSDQWxPNsamrr0A2tMmW1PKsqz+joKNu2bcP3PYLBEIZhEAhYrF69BsuKVm7i00UEfd/B8zzGxycolQqAgqqq9PVVL/azrAAbNtxYWfdRLlII8Xhw1v5+Z2uXxTQZ38WZrfHN9S6pK3bh3qVUUoKorauw5hVQPBdfD+BgIDwwAyHCwWaa62rwfUH/oTylYnlWkKoqtC+ow50qXqhpBgf3ZGhs6aShRsUu+Rzck628Hq8N4nnQ0NDCxo1xhoeHyOXydHcvQlU19u45RF1dLa2tbbTN78YuqGTTNq4r8F2PUr7IYF8Szx2ns7uOru56dEPFKXkIEaC9rYuW5nmk0imSySSxWIxYLI6qBqqe+MtrNww0zUDTYP78GKqqUCzm2L79xapkEQoFWbXq+qpzyLUVknRlkgnjPPm+wMYCjaqBbyFg4ZJGtm/tZfR4pnLcMDVWrW8nGNYrs67C0QDhqMWx/vRp57eCBjV14cp7DSNER8eiqXEEj76eATwPjhwe4F133MrxgRxbnzo0tTBuqlCipnLDLYtQVUE+Y9N7eJJ4IsCxviThmMWxviQADU0RWtpayWdLjBdsEnU6ZkA7643e90V5h0MjyLp1G8jncxQKeSyr3JWlqqbsYpKkNwGZMC4BVVdYs7GTfNYmky5imjqxhIVxyk1YUWHtWzp58dleJsdOzCiLxizWbOxEN9SqG295zwuB70HPfpt5DUsIdmr4rs6Lz/bj2D6JmiBjo1kURaGuIYJpamQzJXoOjqFqKje8bSGqpvLUr8sD5UIIBvssnnv6KGs3dtHXM46Kwvq3LnjNPT7KoemEQnHC4Xglub0ZkoWqKthFl1LRRVUVrJCJqikUcjZ2ycMwNUIhA9Sp4peqgl30sG0XTVOxgjpcwo23JGkmyIRxqSgQipqEY2blpnCmm68R0Njw1gUUcg7FgkPA0giGyzefs914hS9ITuQ4+EqWcCRA6KYIyfEChqHiuj4KCtGYxVXXzuPp3xwkFDYpFV1KRYfUZIHnf3+UUMQkly3f3JITeSLRANuePsLKde3seqGfrU8d5pY7lqLpZ544p2kKTsnDcXxUVSFg6QjOHK+mKbiOYHS4PB04YF36m6WmqSgKlbUvl5WAAy8Pc2T/aKX7MBINsHBJI4cPjJBNlxdD1jdHWb2hHSHgwL5Rjh4aw/fKs+/qmyJcu6YNK2S8KRKsdGWSCeMSO697gQLBiEEwcqL43rk+p2kq4bDFiMjieV5lTYM3lZCEgO5ljbz04gCO7eFZ5ZtaXUOEkWMZigWXYMhE4UT3kqappPNFDEPF83xGj2dJTxSobTrRLaaqCr4n8D1BcizPQM8k4UigHH/IoKklhmooVbGrwLHeFC8800NyPI+iKrQvqGXVunZMSwMUAsHTd+s7bwKyqRL9vRP4nmBeW4JEbRDlPMumKwLyeYd8JlluKbzGJliqqnDo1REO7B2uui79PZP090zyltu6eXnnYPl6NEfZ/cIAxYLL/pfLhSvD0QDBkMHYcJZn/vsQN9++GM24IncVkN4EZMKYA1RdYemKZnoOj1EsuFiWgWGoOI6PpqmoqkI0bjEx1c1lGBqlgoNhajiOi+8L8jkbw9Qo5J2qczuuP7WJkks6VaSuOVKeneXD0GCKI/tHSSeLLFvRQsl22fvMEIWpc3Uva2T1jR2oU60SVVUYODrJk//xCoipRYGuz4G9wwwNpLj5HYvZ9XwfTfPjXL1yHkZAe12tA+HDSy8OMNg7WTnWe3icRF2I9Td1VeI4E0UBu+hVugMNQ8NxPOobI6za0I5uamf8nFP0eHXXcSbHc+XWnAJW0MSyDLKZIkMDSWrqQsxrS7DrhX423LyQyfEc625agO/59Bwao5B3CIVNigWH4WNpWrtq5MQAaU6SjzpzgO8LmtvirLmxE1VTOX4sRWd3PWZAo1RyicQDiKkbkDZdwgRwHJfauvKCPSFObEOr62r5hqVAwNLxvfIK9nA0UD4uBC/vGGD7s71MjOWpb4ywY1sfLz7TC0KUb7a2xyu7h3jxmV6m92yyix7Pb+mpmhTguj6u4zM5nmegd5LahgjH+pI8+9sjeM753zRVVeH4QKoqWUxLjuc5sHd4agLAWa6hK9j61JGqsSOAsZEszz19tHL9Tv2eycl8ebOsqa4oISCbKZFKFghFAowNZ6lrjJDP2SxZ3syO53r57eP7efrJA7zwTA8NzVHmtSUqCWJoIPW6N7mSpNlCJow5QgjB8lXzuP3O5cQSFtff0MHi5U2EIwEikQC6qRGNB6ipD1PI2yTqQuVBcwUisQABS8d1PRQFogmLfM6mY2EdI8fKM7bCEZNETbn2TjZt03+0fGNWEIQjJsODaRCQThbLYxJTDu0bIZ9zURTIZ22S4/mqmKf3zUDAYG95M6ry9ygyMZY7rbbV2fie4PD+kbO+3ndkAqfknvX1VLJINl0842vpyUJlHOJkdskjlznz5lKO7SF8gRUyCZga4UiAZ/77EOlkkelFlaWiy85t/RimRiRaXqNinKUlI0lzgUwYc4gAGudHmddeQ6nkcv2GDm6/8yo23tZNx4JaNt7aXe4yCZW7PwxD48DeETa8dSHz2hOoqkpTSwzf9WnvqqWts4bDB8YIR0xueddSAiEdTVMZOOkpPhS1GB87kQR8v3qoW1GU8liFogAC5aSn51Nrb6maCuLE68f6k+e9Zavv+ZSKZ08IruuftZtHVRWSE+dexJWaLJz25F/MO6STBRqaqxdbKVNFKIsFh0VLGxBC0N8ziev6eL44bTvfV3cP0dKWAKCru77SWpGkuUaOYcxBwbBBKGJWVlKH4wEAurrrEMDO53opFQSFvMPCJQ20diRYuKQeu+RSyDsIX1AquQwfS3PDWxcQrw3R0BLB83x0XZ2aznuCYZzyVCzKLRcEhMIm2tQMr2DEZF5bnMHe5NQbq2/Ai5Y2MHzsRLmT0857DpquEUsEq9a6VF2TkHHWGV5ClNe5nItlnXn20tBgiqtXzmPrU0coFqaKMU7F3tldh6op5PIe2Uy59WIXHRI1QSbG85VurkLBQdc1OrvricZlDS1p7pIJY446081NKLBoWT0dC2opFlx0XSlP40QgBARCBsGIiVPyyGdLdC1uIBjUMS290hDwPJ95rXF6D40BUMjZdC6sLbdF/XJ3jKqqIMrjH4GgTqIuhBDl7pZrV7cxNpylVCx3U01vMds8P05DU5QjB8Yq8bZ11Z7/07YiWHJ181kTxuLlzRjm6clu+lrVNYRRtfKsr1Ppulr5GU4WDBuoqsKRA6NseOsCxkdzjB7PYJga7QvqaJkXY2wsSzBoEAwZROMWdsmlWHSoqw9TLDjYtocV1GhqiRKOBeR+UdKcJruk3gCKonCeXfUXzfMEqq4QihqYQR1fiKoboe8LNEMlWhMkVmNhnJQsoHxzT9QFSdSGpr4WTIzlWbmmDU1TiMQsPM8nXhMkXhPk6pXzq8Y0muZHuf19y7nq2hYStSGa5sW58W0Lufkd3ezY1ld5X8fCOiKxwHn/XEJAvMbiunXt6CdNS1VVhcXLm5jfkThjsphmWhrXb+io6jKb/vz1N3RgBE5v7RimxjXXz6eQd9i76xi5bInG5iixhEVyPEcwarJgSQPdVzey9JoWErXB8hRfRaFQsLFCBo0tEbqvaiaasGSykOY8WXzwHC62gJlJCSU/jpscRjUstJoWHCOOJy7NneNyFljzXJ/9e4YZ6JnAdX26uuupqQvR3zNJIWcTiVl0L2skVmOdtnxP0xQ8TyDcE+tEXt45SHIyjxkw6F7WQF1jmAvJotMrqHPZUnk/kGjgvNd1KIpCMe/Qf3SCXNYmEg3Q2lmDFdLPOr1XAVKTRfbtGSI1WcAwNboW1dO+oLZq7YfwBTue62P4WGZq3Ka8CZYZ0Nh4azeB0OtrzM/W4nnTZHwXZq4XH5QJ4xwu5o/O8rNkd/wX9tjgiYOqRuzaW6B5Oa64+Mbd5f5Hoarl1d3TYxvm1BRc3/NRNRX/Nf50To5PVRU8V0ztWihe1/qLS03TVGIxi3S6eGIW1zlMjefjTq1y18/W9eULJsfyHDkwhut6zGtNMK89MbXe5PX9wLP1hjdNxndh5nrCkGMYl4Gh+hT2PFWdLAB8j/Su/6bmpnrcYMuMxPZ6THdfTa9Mrow3qMprJosznUtRKZcTmeE1a9PlRM4nWcCJVfjT1+FsXV+KqlDXFKahuVwqXlHL75WlQKQrhRzDuAy0UorC0OEzvygExSO70eV0/CuSEOD5Pr4Q5xxTkaS5SCaMy0A4xfK+r2fhZsZRhHfW1yVJkmYjmTAuA0UPnHNAV4/UIBTZxJAkaW6RCeMy8KwEVlPXWV+3FlyHKxsYkiTNMTJhXAaOrxK65hbMRFP1C4pKbMXNeOGmM39QkiRpFpOzpC6TohYjvP4PCWdGcCaOoZhBjPo2HDOBdwmm1EqSJL3RZMK4jEpYEG1HjXcggKI/81NKJUmSLpRMGG8AuVmOJElXAtk3IkmSJJ0XmTAkSZKk8yIThiRJknReZMKQJEmSzosc9J6DNE3meUmS3ngXdef5zW9+w5/92Z9Vvn7yySe57bbb+MhHPsJHPvIRnn/++YsOUDrBpEQg24+373/w9v0Wd/gwJqWZDkuSpDeJC25hbN68mS1btrBs2bLKsb1793Lfffdx++23X5LgpBMCIk9+5+OURnorx5y+3Wj1nQRXvJ2SEpzB6CRJejO44BbGqlWreOCBB6qO7d27l1/84hfcc889fOMb38B13YuNT2JqI6Pe3ZVkoSigCQ+/kMXu2Y3fv4uAJq+1JEmX12u2MB577DEefvjhqmMPPfQQd9xxB9u2bas6fuONN3LbbbfR2trK/fffzyOPPMKHP/zhs55b0xQSidAFhn75aZo6K+Lz80kmB/ZiGOUKt34hi5saBeEDgszOJ4nrBrH2q1EjtTMb7Elmy/U7k9kcG8j4LtZsj2+ues2EsWnTJjZt2nReJ7vrrruIxWIA3HrrrTzxxBPnfL/niVm5jeK02bLNo+UVKWUzAGi+jT15HASoannbDZHL4BZzFLY/SWDlu3H82VE6fbZcvzOZzbGBjO9izdb45voWrZdsuo0Qgve+970cP34cgK1bt7J8+fJLdfo3NaGa6JEEiqLgF7Kn1aMyEg2owRhmTQP65FGs4jCmYp9rSw5JkqTX7ZJNq1UUhc2bN/OZz3wGy7JYuHAh73//+y/V6d/UHC1IqHsN2V2/wXOqZ0UpqkLs2reRO/g8hZ69GLUt+LqFkWgiev07KZm1yC2lJUm6FBQxgzvUO443K5uN02ZTs9ZUbNwjz5Pd+QReNgWAZuhEV74Dzy6S2fU/5ffVz8dTzfLr4TixjR+gpIQr51EUMEQJtZRGeB4EwjhG7LIUSJxN1+9Uszk2kPFdrNka31zvkpIL9+YIW5joC2+gYd4Cir2vgKKgBSMoZpDk498HQDUDCNWofMbLpRCpYZSaBQhRThZm7hiZXf+Dmx6d+oxFePFajLYVOMI44/eWJEkCWRpkTnF9lZLVhBKtI9PzCoWePdjTU201HT3egE/1wIU7MYSqlo8FSuMkn/1lJVkA+HaRzMtP4w/sqbxPkiTpTGQLY45xhYY+bwW1dW2IiQGEa2PUNIERwOf02VFKMIIQoGlQ7N2DcJ0znjd34HkS85bgqSaKZ4MWwEGvjH9omgIo+L4vx0Qk6U1KJow5yBUarllPYmk7pYnjsP8FfMc+/Y2qilHfRtEXGNgURvvPek6rqQMxdpT84Zfwihm0YIzw4jWota1QSGEPHcJ3bMzGDtSaeQjfR/EchKrhGhE87zL+wJIkzQoyYcxxJT1GbNU7Sb7wn+CfdNdWFOLX3YZj1pSn4aoaqn7mMYpAcyciN0m6Zw/e1BiIX8yT3vYfhDqW4RRylEamko1XQhs+TOn4EdxCFkXTCHVcTXjRagp6zTkHzw1DKScZRcX1VdlSkaQ5RiaMOc73wa1bQO1bP4Q9uB9n8jh6rJ5A2zIcqw5PlMclXKET7LoWe2LotHNYdS0kn/klWqK5ckwBcIukXnyC2pvvpjTSj9nQisglSb3yLGogiKIbOLk09tARAj17iN9wF050Hq448WelKGCJHKSGcMb6EYqKFk5ghmsRkSZszMt9iSRJukRkwrgC+L5C0axDW7QRS1XwfUHR86sW+AkhUBs6CTR2VBUw1IJRnOQweqyuasBcUcqzrBA+bnoMNRAi2NDKxO8fQ8HHy05g1LRU3l86fhRn+AiqbaPWd1daGiF7hNTvH8Ue6QFAtSKogSChJRvwJ45hdKyqmp2lKOXaWb5fjlmSpNlDJowriOf55xxLKBEktPJdWBN9FI7uRrgOwbZl4BYpaEerb9DCB2+qoKHvoWg6vl1A8V2E51DuT6q+oZeGj6Lms1i1rZSw8NMjTP73w5T6XjkRY3oc1QqTAyLXvBU1NwahFlRVwXTTeBPHcFMjaOE4en07thEHRUVRyt/yfNeLqKqChgf4eBiXZZ2JJL3ZyITxJlNSgij1Swk2dIPw8RQDI3cM8Wp1IUkUFcUwwXXQ4g14x3tQFHX6rg3K6TOyFUXFzadR7DxaMIgz2kdpYN9p7/OLObz0GH4+jef1oC+cj545RvK5X+GXTiy2UjWdxPW34bseXnIII96IUT8fXwvgCgNXC54xEQT8HP7wUQp9exG+hzV/CVZLNyU9JsdNJOkiyITxJiSEwBEqUE4AIliH1dxF8fjRynt8AWoojtnYiZOZLCcJ3UTRTYRTRAvH8Oxi1XnNlgWkD+4qz87y8jhnGC+Z5mWT+Pk0aiCC4eZIvvCf1ckCID/J+OP/QnzNu0m98Gv0UBTFMImueCuF/oMYLYuwOlZUJQLLz06thp/AK+ZACJzJYbTDO4jf8EcUjZpLdyEl6U1GJgwJG5Pgte9Ai+6g0LsH3y6WV4AvWEugoZ3xrf8BQOF4L5EVN5Pb+3sUw6qUKAEIti3BLRSwGtrwjCi6l0VRz1E113PR4/WoiSb87DhePl31suLbOKkRhF3ETY8TaGilOLAPfJ+MEARauskfeJ7CwH7iN26iqMUIaTZMDmIGTAg0EWhZAIqKcGxUK4yXHCAULSKsKMKTq9ol6fWSCUMCoKSE0BZvJN55HYpvIzQTR49SFD6JWz6CyIyVFwkmmrBal5F+4T/xHRvVihBaeC1KME6+fx+JG+6iKDRUPYjwPYy6Vpyxfk7tC1KtCGZTF16wDm+8en2Iqij4hUxlDMXPZxC+W27lAPZwD+GlG1BGevDyaUq9ewgvWEHp0C5SWx4DVUU1g6Se/z8E5nUT7LyG9IuPE7nmZnznZZzRfuJr3oUVaUAJxlAKKYTrQjCGbcTx/DfmmkvSXCMThlTheeBpESoLxn0BKJS0GCTK+5w4gFJTQ/zt/xuRHsGZPE5pYgQjrJPY+AFsswZ8gS0CWPWtRK65mcyu3+BODleShmJa1L79f0G0gZIfxAzFTotFuA5ClO/ceqKB4sD+6tc9F+H75V41u4B7/BCZHU8ifBc9VIMzPgi6Sal/H6phYTa0kd72H9Te8mGKA/uZ3Porat7yfjJbfoY9eRzh2OjxeiJL1xOY140nVAjWYqvWWcc9VFVBEzaK7+Fplkw00hVPJgzpdRMC8kRQE1H0eDtWp8BTTIq+mEoy5XESc95SnPQ44aU3omgaXnYC1YoQaFmA2rSQnDe1D3mwFj1Wj5seK38WygPuiooSCKCF4ni55EkRKCiahqKWB96txlaye36H8Gy0cE3lvYqiIIRPsWcP8fXvpdj3CplXnyXUdQ2Foy9RGjxAcegQeqQWdBNnfICJ3/6E2PW3Y9sOwnWIrb6DktV42hTfgJ/DPXaQfO8ehOdiNrRjdV1LKVAvB9alK5YsPihdMN8X2ELHEWeetqqYQZSuG7CWrMdo7CS4aA3BpTfgN11FzjuxfaatWsTWvBs9Wh6QFkKgWhG0SC2J9XeSPfgiimlV3h+Y3409MVSpzKvqZnmQu1RAtUL4pQKgVFoownNAUcoLDUcH0MKJ8ja3yWG0YAwQuJlxhF3eayT7yjMEG+bjZiZIPfcrTC9b9XMFRI7c878i89JvcVJjuNkk+aMvMfn0zzDzQ3LjKumKJVsY0mXleOAY9VBXf+LgKWtFhICSWUv0hg9AbhwvO4kWDKMbJqnn/y/O+DH0SA3OxBBmYweh7uvJHd6Fj4qim6iRBGo4AeNDCN9DDYTwS/lyCwNA1UHVyq+ZQfBcfLuAZkUQdhHFClUVZfQL2coSRq+QQaSOo9QuRIhyN5Q3eAg7OXzazypcm9ye3xFcdxcOclBduvLIhCHNCkKU14gQaUWJtuEKgaNA9C0fJJI8hpdLoUcTOMlRsge3I9AINLQSvmojJT1BZMk6in2v4uUzqMEovmtPJQqXYMfVlPr3gecR7FpBcaQPVQ+UpwYX0mjheHUdLihvmD7FTY2g1C1CCIEmbPK9e876c9gTQ0RKaRyz7nJdKkmaMTJhSLPO9HiBL6CgxaEujtao4Cig1i4g0Xo1KAqeGaUkNIQPoZbFxNe8i9SLT6CH46iFDL6dx2xeSKBtCclnfoFRN49AyyKS25+k9qb3k97+JKoVRpyyYt1s7sI9acqwForhTr9F+OWdCs8Zvxz9lq5MMmFIc4LnTd+xTTCmChaedF/OE8G66m00da7APn4URfHRI7W4mUlKI73U3fq/UAIh7MnjJDbcidD08qpx3y1P31VV8H1UK0zk6pvIHHkJKG9MpdXOx5lOYloAs6kTNzNxxji1UBTM8Blfk6S5TiYM6YpRFAEIzkdd2IaiCGzAbHLQF65FaCZC0bCaM/ilPIFwGLNlMaXBVykc3oVR34YajGA2tJHv3Ydv26BqxFe/q1zPaipfeR5YHddQ6N2LcEqnxRBZegOOFq7MFpOkK4lMGNIVx/dPND0K6IA+1RrxQQmDFSYYDZFO5tE71hBruwZF+Ci+R+HYIfT6NqxYHUbzQuxADb5fPe3JDtRRc+Nd5F7+HaWxQaDcbRVZtgEaF8tCh9IVSyYM6U3N9VRcpqb4qqC2r8aYLhHvi6pur2m+LygFmwiu+UPCdrq8gNAM4WhhmSykK5pMGJJ0Et8X53XTFwJsdDBqT/qwTBbSlU0u3JMkSZLOi0wYkiRJ0nmRCUOSJEk6LzJhSJIkSedFJgxJkiTpvFzQLKlMJsN9991HNpvFcRy+/OUvs3LlSnbt2sXXv/51NE1j48aNfOYzn7nU8UqSJEkz5IJaGD/84Q9Zv349P/7xj/mbv/kb/vqv/xqA+++/n29961v89Kc/Zffu3ezdu/eSBitJkiTNnAtqYdx7772YZrmej+d5BAIBstkstm3T3t4OwMaNG9m6dSvLly+/dNFKkiRJM+Y1E8Zjjz3Gww8/XHXsoYceYsWKFYyOjnLffffxla98hWw2SyQSqbwnHA7T399/6umqaJpCIhE653tmkqapMr6LMJvjm82xgYzvYs32+Oaq10wYmzZtYtOmTacd379/P1/4whf40pe+xNq1a8lms+RyucrruVyOWOz0vZpPpqrqydsOzEqqqr32m2aQjO/CzebYQMZ3sWZ7fHPRBd2uDx06xOc+9zm+9a1vcfPNNwMQiUQwDIO+vj6EEGzZsoXVq1df0mAlSZKkmaOIU3e3Pw+f+tSn2L9/P/PnzwfKyeK73/0uu3bt4qGHHsLzPDZu3Mif/umfXvKAJUmSpJlxQQlDkiRJevOZ5SMIkiRJ0mwhE4YkSZJ0XmTCkCRJks6LTBiSJEnSeZE77p3ibHWynnzySf7u7/6OlpYWAP7kT/6EtWvXvuHx+b7PAw88wP79+zFNk82bN9PR0fGGx3Eyx3H4yle+wuDgILZt86lPfYrm5mY++clP0tnZCcAHP/hB7rjjjhmL8X3vex/RaBSA1tZWPvnJT/LlL38ZRVHo7u7m/vvvR52hRUG//OUv+fd//3cASqUSr776Ko888sisuH67d+/m7//+7/nRj35Eb2/vGa/Zo48+yiOPPIKu63zqU5/illtumZH4Xn31VR588EE0TcM0Tf72b/+W+vp6Nm/ezI4dOwiHwwD88z//c+VvQXqdhFTlH//xH8UPf/hDIYQQhw8fFu973/uEEEJ8+9vfFo8//vgMRlb2xBNPiD//8z8XQgixc+dO8clPfnKGIxLi5z//udi8ebMQQoiJiQlx8803i0cffVT84Ac/mOHIyorForjzzjurjn3iE58Qzz33nBBCiK9+9aviySefnIHITvfAAw+IRx55ZFZcv+9973viPe95j9i0aZMQ4szXbGRkRLznPe8RpVJJpNPpyv/PRHwf+tCHxCuvvCKEEOKnP/2peOihh4QQQtx9991ifHz8DYnpSie7pE5x7733cvfddwMn6mQB7N27l1/84hfcc889fOMb38B13RmJb/v27bzlLW8B4LrrruPll1+ekThO9s53vpPPfe5zla81TePll1/mqaee4kMf+lCldMxM2bdvH4VCgY997GN89KMfZdeuXezdu7fSQrzpppt49tlnZyy+aXv27OHQoUN84AMfmBXXr729ne985zuVr890zV566SVWrlyJaZpEo1Ha29vZt2/fjMT37W9/m2XLlgEn/u36vk9vby9/9Vd/xd13383Pf/7zNyS2K9WbOmE89thjvOc976n6r6enB8uyKnWyvvCFLwBw44038tWvfpWf/OQn5PN5HnnkkRmJ+dSaXZqmzVjymhYOh4lEImSzWT772c/y+c9/nhUrVvClL32Jn/zkJ7S1tfFP//RPMxafZVl8/OMf5wc/+AFf+9rX+OIXv4gQAkVRKvFnMpkZi2/av/zLv/DpT38aYFZcv9tvvx1dP9FrfaZrls1mq7p3wuHwG5bcTo2vsbERgB07dvDjH/+Ye++9l3w+z4c//GG++c1v8v3vf59/+7d/e8MS2pXoTT2Gcb51sgDuuuuuSm2sW2+9lSeeeOINjXVaJBKpqtnl+37VP5qZMjQ0xKc//Wnuuece/uAP/oB0Ol25Xm9/+9t58MEHZyy2rq4uOjo6UBSFrq4uEolEVen986l7drml02mOHDnC+vXrgfI1my3Xb9rJYzzT1+zUv8dcLjej4wP/9V//xXe/+12+973vUVtbi+d5fPSjHyUYDAKwfv169u3bx9KlS2csxrnsTd3COJMz1ckSQvDe976X48ePA8xo2fZVq1bx9NNPA7Br1y4WL148I3GcbGxsjI997GPcd999/NEf/REAH//4x3nppZeAmb1eAD//+c/5xje+AcDw8DDZbJYbb7yRbdu2AfD000/PeN2zF154gRtuuKHy9Wy6ftOuuuqq067ZihUr2L59O6VSiUwmw+HDh2fsb/JXv/oVP/7xj/nRj35EW1sbAD09Pdxzzz14nofjOOzYsWNWXMu5SpYGOcXZ6mRt2bKFf/iHf8CyLBYuXMhf/uVfYhjGGx7f9CypAwcOIITgoYceYuHChW94HCfbvHkzv/71r1mwYEHl2Oc//3m++c1vYhgG9fX1PPjgg1VdaW8k27b5i7/4C44dO4aiKHzxi1+kpqaGr371qziOw4IFC9i8eTOaNnPVTb///e+j6zr33nsvUB4vePDBB2f8+g0MDPCFL3yBRx99lKNHj57xmj366KP87Gc/QwjBJz7xCW6//fY3PL6f/vSnbNiwgZaWlkrLbM2aNXz2s5/lX//1X3n88ccxDIM777yTD37wg29YfFcamTAkSZKk8yK7pCRJkqTzIhOGJEmSdF5kwpAkSZLOi0wYkiRJ0nmRCUOSJEk6LzJhSJIkSedFJgxJkiTpvPx/eJDFnQk6ywkAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 401.625x360 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"plot_embeddings(test_embs)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Saving Model\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"weightfol = r'D:/Research/ContrastiveRepresentationLearning/Outputs/Weights'\n", | |
"outpath = weightfol + r\"/\" + NAME + '.pth'\n", | |
"torch.save(model.state_dict(), outpath); print(\"Model saved at: \", outpath)" | |
] | |
} | |
], | |
"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.8.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment