diff --git "a/codebertfinal1.ipynb" "b/codebertfinal1.ipynb" deleted file mode 100644--- "a/codebertfinal1.ipynb" +++ /dev/null @@ -1,10538 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "18dbb1be", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 446, - "referenced_widgets": [ - "c7b64c3fa9f14c608308d44721412c77", - "9bb76d5339764a47af0bb87e5c872da6", - "ba9add180c5b4b029a793cfcd54220f1", - "3ebe9bbe311e468fb3a73f01567021c1", - "d2139ad46e8d47a1b1b49d19366c783c", - "f697c0ee8dc144afb67ea232e3b70447", - "f997dae644fd4c819e5c54b32e64e7bd", - "a0d6ee9e859141d2ab333d7a30ac6938", - "b230ce982ce34a7baf26dbc3ce23cca9", - "5a486e95fe0549569168960af69653c6", - "3ccd660336844bcb9801d23d4e6ee720", - "d906e6e37a12471e9f764636d74f137f", - "21af9ee830444f0f9814573bcfe8905d", - "d46408f5e26c47739be00319970078a5", - "837dfac7768c4cedab8d2be760bf39d4", - "049cd15384ea4263bef050235dc184d5", - "343c896a16c84bca95ea5adbf73ef798", - "fe33264a06414a1794eb03eb336eb988", - "2e0a1390bdff442682709960445c3cc9", - "7317417c1cd643b187021f11f623578e", - "09ceaecbe73347459cf178154fb2f666", - "0f9ada970efe45aeb5ca93d6b8bce102", - "c04baa69cb014303b0d84fb84ef2b622", - "cef93a14a6ab4aa783071ed9b57430d7", - "22f21478adb943c59ce194ffc62be791", - "94d941aa461e469090e01f7a334c7355", - "8be45b59d75b4b589e15b5e834065dd3", - "fe4697e826e6464cb3f7fa62059439e2", - "5c769c14dce141918f8a4564d16915f8", - "c619d570d57a49af8defa57a7c410a62", - "bc233746666a404db843d007ab5500fd", - "7a18b3fa59e64f42ab02ad72a1b69977", - "100fec0a3f6640f5b56ad16d6431474c", - "02cf31cc9512449785073c2c1c8c70a9", - "f9414aff91714f12985b0d78cc14a70f", - "0c418facf3ac4b0c92bf80f82cbea228", - "97aeb67415a34ea387e8057984cafa74", - "80e4bf66155b428bb82499790723a14d", - "827a126e8f1d4e5988d1bb7a3d86501d", - "a1a5a555c8c04fd5b16b9e66838ff877", - "2e5ad845d7434da19d5d048918f2673b", - "d522b283964c44d7ad1eb7fdf88ded3e", - "5c98504ed8364e59a20ccf7695462a08", - "651631ab8be940808611ae11bae73676", - "8dfdd5a4481c491ab7719142da57b057", - "f90de96505cf4d09bb43221ce79ef1bd", - "2d5ecfe4fe77487e8b254146b53ac10e", - "e9f92c3c75cd4d4aa4e29b57eae2e85c", - "a646f4abbe234f52b25544f35ba11c2b", - "fc163b73cb9c4f248ba08a6a3283c8b0", - "c762e16539584db7b654b074eb2dcaa5", - "a12a408485d84077bc9e6ad26d116a45", - "a36fe22e54e340bf938229b7f4759007", - "2f7b3b50f85b4d71aa3cb346c00f43c9", - "3ede807613af4ecaac6a7d03882ebdd4", - "2ba0026f73bc427696dd0d462c6f47ac", - "df815ffc6ad44aa897aa846faf51bc5c", - "e1cd9d5c12024b4bb5cabb09c0eafeb4", - "dcb38e184be7445c9a51b3cc7156dc1d", - "2b0bcf64d3234d09a44507e12e964bb2", - "7a73a857a50f45efbcb0e02b3967740a", - "c3d9458c3c954b9498de96baf5145949", - "001bc529df0345789c93d5ab49c384fe", - "c735b1d49b6f4020b69a8e287c1b1cfc", - "55a55710766a4d20a2aca86cba455b7f", - "72f8a4e708c1453088dff9ede2eba33d" - ] - }, - "id": "18dbb1be", - "outputId": "201c3558-ce92-4b3f-f851-6811fd26e449" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "GPU Memory available: 15095MB\n", - "Initializing CodeBERT...\n", - "Setting up CodeBERT model...\n", - "\n", - "Loading tokenizer...\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", - "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", - "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", - "You will be able to reuse this secret in all of your notebooks.\n", - "Please note that authentication is recommended but still optional to access public models or datasets.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "tokenizer_config.json: 0%| | 0.00/25.0 [00:00= 7:\n", - " print(\"Enabling TF32 for better T4 performance\")\n", - " torch.backends.cuda.matmul.allow_tf32 = True\n", - " torch.backends.cudnn.allow_tf32 = True\n", - "\n", - " # Use adaptive memory management\n", - " torch.backends.cudnn.benchmark = True\n", - "\n", - " # Test CUDA operation\n", - " test_tensor = torch.zeros(1).to(device)\n", - " del test_tensor\n", - "\n", - " print(\"CUDA initialization successful\")\n", - " return device\n", - "\n", - " except RuntimeError as e:\n", - " print(f\"CUDA setup failed: {e}\")\n", - " print(\"Falling back to CPU\")\n", - " torch.cuda.empty_cache()\n", - " return torch.device('cpu')\n", - " else:\n", - " print(\"No CUDA device available\")\n", - " return device\n", - "\n", - " except Exception as e:\n", - " print(f\"Unexpected error during CUDA setup: {e}\")\n", - " return device\n", - "\n", - "# Initialize device\n", - "print(\"Initializing compute device...\")\n", - "device = setup_cuda(seed=42)\n", - "print(f\"Using device: {device}\")\n", - "\n", - "# Verify CUDA state if using GPU\n", - "if device.type == 'cuda':\n", - " print(\"\\nCUDA Status:\")\n", - " print(f\"CUDA version: {torch.version.cuda}\")\n", - " print(f\"PyTorch CUDA: {torch.backends.cudnn.version()}\")\n", - " print(f\"Current device: {torch.cuda.current_device()}\")\n", - " print(f\"Memory allocated: {torch.cuda.memory_allocated(device)/1024**2:.1f} MB\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "40195817", - "metadata": { - "id": "40195817", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000, - "referenced_widgets": [ - "b3e044756b16418280eceec32e6172a8", - "d752534d9c7447cc876cfb0ecbcb5a7a", - "2c923ae011d547bc9c1c2790b032496b", - "a52f3d8bf2c344f391e79d1ca349691a", - "05dd34cda5504651ba82ae8a09602a1a", - "897b0e9cb51146cfba6f9efa4f990c1e", - "755710e514044bf4a3dd7fd0c8ff080f", - "34ca1dfe1aeb4f1aaaf6676a6eee5045", - "61f86231f92645bdbdea8cb35abb5d40", - "59bbbf8ee5154d9c9f7dc1ed9c0bd72b", - "0059fa025a994c36bf6b5e126feae1d0" - ] - }, - "outputId": "84b8a4fe-b7bb-48eb-bd9f-03681020f643" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Initializing CodeBERT...\n", - "Setting up CodeBERT model...\n", - "\n", - "Attempting to load tokenizer...\n", - "\n", - "Attempting to load model...\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "All TF 2.0 model weights were used when initializing RobertaModel.\n", - "\n", - "All the weights of RobertaModel were initialized from the TF 2.0 model.\n", - "If your task is similar to the task the model of the checkpoint was trained on, you can already use RobertaModel for predictions without further training.\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "Enabling gradient checkpointing for memory efficiency...\n", - "\n", - "Enabling automatic mixed precision...\n", - "\n", - "CodeBERT setup completed successfully!\n", - "Loading and analyzing data...\n", - "Loading data...\n", - "Initial samples: 2400\n", - "Samples after cleaning: 2400\n", - "Preparing samples...\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "Processing samples: 0%| | 0/2400 [00:00 str:\n", - " # Remove comments and convert to single line to reduce pattern matching\n", - " import re\n", - " code = re.sub(r'\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*', '', code)\n", - "\n", - " # Remove common includes and defines that could leak information\n", - " lines = code.split('\\n')\n", - " cleaned_lines = []\n", - " skip_patterns = [\n", - " '#include',\n", - " '#define',\n", - " '#ifdef',\n", - " '#ifndef',\n", - " '#endif',\n", - " 'OMITBAD',\n", - " 'OMITGOOD',\n", - " 'std_testcase',\n", - " '_WIN32',\n", - " '__CPROVER',\n", - " 'assert',\n", - " 'sizeof'\n", - " ]\n", - "\n", - " for line in lines:\n", - " if not any(pattern in line for pattern in skip_patterns):\n", - " # Convert to single line representation\n", - " line = line.strip()\n", - " if line:\n", - " # Normalize code structure\n", - " line = self._normalize_code_structure(line)\n", - " # Normalize variable names\n", - " line = self._normalize_identifiers(line)\n", - " cleaned_lines.append(line)\n", - "\n", - " return '\\n'.join(cleaned_lines).strip()\n", - "\n", - " def _normalize_code_structure(self, line: str) -> str:\n", - " # Normalize code structure to reduce pattern matching\n", - " import re\n", - "\n", - " # Replace specific numbers with N\n", - " line = re.sub(r'\\b\\d+\\b', 'N', line)\n", - "\n", - " # Replace string literals with STR\n", - " line = re.sub(r'\"[^\"]*\"', 'STR', line)\n", - " line = re.sub(r\"'[^']*'\", 'STR', line)\n", - "\n", - " # Replace array access patterns\n", - " line = re.sub(r'\\[\\d+\\]', '[N]', line)\n", - "\n", - " # Normalize function calls\n", - " line = re.sub(r'(\\w+)\\s*\\(([^()]*)\\)', r'CALL(\\2)', line)\n", - "\n", - " # Normalize variable declarations\n", - " line = re.sub(r'\\b(int|char|void|float|double|long|short)\\b\\s+\\w+', r'\\1 VAR', line)\n", - "\n", - " # Normalize pointer operations\n", - " line = re.sub(r'\\*+(\\w+)', r'PTR', line)\n", - " line = re.sub(r'&\\w+', 'ADDR', line)\n", - "\n", - " # Normalize common operations\n", - " line = re.sub(r'malloc\\s*\\(.*?\\)', 'ALLOC()', line)\n", - " line = re.sub(r'free\\s*\\(.*?\\)', 'FREE()', line)\n", - " line = re.sub(r'memcpy\\s*\\(.*?\\)', 'MEMCPY()', line)\n", - " line = re.sub(r'strcpy\\s*\\(.*?\\)', 'STRCPY()', line)\n", - "\n", - " return line\n", - "\n", - " def _normalize_identifiers(self, line: str) -> str:\n", - " # Replace specific variable names with generic placeholders\n", - " import re\n", - " # Normalize common variable patterns\n", - " line = re.sub(r'\\bdata\\b', 'VAR', line)\n", - " line = re.sub(r'\\bbuffer\\b', 'BUF', line)\n", - " line = re.sub(r'\\bsource\\b', 'SRC', line)\n", - " line = re.sub(r'\\bdest\\b', 'DST', line)\n", - " line = re.sub(r'CWE\\d+', 'CWE', line)\n", - " line = re.sub(r'_\\d+', '_N', line)\n", - " # Normalize function names\n", - " line = re.sub(r'good\\d*\\b', 'GOOD', line)\n", - " line = re.sub(r'bad\\d*\\b', 'BAD', line)\n", - " return line\n", - "\n", - " def _prepare_samples(self):\n", - " \"\"\"Prepare samples for training/testing with balanced classes\"\"\"\n", - " from collections import defaultdict\n", - " from tqdm.notebook import tqdm\n", - "\n", - " print(\"Preparing samples...\")\n", - "\n", - " if len(self.df) == 0:\n", - " raise ValueError(\"No samples in DataFrame\")\n", - "\n", - " # Create samples from DataFrame with progress bar\n", - " valid_samples = []\n", - " skipped = defaultdict(int)\n", - "\n", - " for _, row in tqdm(self.df.iterrows(), total=len(self.df), desc=\"Processing samples\"):\n", - " code = row['code']\n", - " cwe = row.get('cwe', 'none') # Default to 'none' if missing\n", - "\n", - " # Basic validation\n", - " if not isinstance(code, str) or not code.strip():\n", - " skipped['empty_code'] += 1\n", - " continue\n", - "\n", - " # Convert CWE to class index\n", - " if cwe in self.cwe_to_idx:\n", - " label = self.cwe_to_idx[cwe]\n", - " else:\n", - " skipped['unknown_cwe'] += 1\n", - " print(f\"Warning: Unknown CWE '{cwe}', defaulting to 'none'\")\n", - " label = self.cwe_to_idx['none'] # Use 'none' as default class\n", - "\n", - " # Create and preprocess sample\n", - " try:\n", - " sample = CodeSample(code=code, label=label, cwe=cwe)\n", - " processed_code = self.preprocess_code(code)\n", - " if not processed_code:\n", - " skipped['empty_processed'] += 1\n", - " continue\n", - " sample.processed_code = processed_code\n", - " valid_samples.append(sample)\n", - " except Exception as e:\n", - " skipped['processing_error'] += 1\n", - " print(f\"Error processing sample: {str(e)}\")\n", - " continue\n", - "\n", - " print(\"\\nSkipped samples:\")\n", - " for reason, count in skipped.items():\n", - " print(f\"{reason}: {count}\")\n", - "\n", - " if not valid_samples:\n", - " raise ValueError(\"No valid samples after preprocessing\")\n", - "\n", - " # Group samples by CWE class\n", - " samples_by_class = defaultdict(list)\n", - " for s in valid_samples:\n", - " samples_by_class[s.label].append(s)\n", - "\n", - " # Print initial distribution\n", - " print(\"\\nInitial class distribution:\")\n", - " for label, samples in samples_by_class.items():\n", - " print(f\"{self.cwe_classes[label]}: {len(samples)} samples\")\n", - "\n", - " # Balance classes by undersampling majority classes\n", - " min_samples = min(len(samples) for samples in samples_by_class.values())\n", - " if min_samples == 0:\n", - " raise ValueError(\"Found class with 0 samples\")\n", - "\n", - " print(f\"\\nBalancing classes to {min_samples} samples each...\")\n", - " balanced_samples = []\n", - "\n", - " for label, samples in samples_by_class.items():\n", - " random.Random(42).shuffle(samples)\n", - " balanced_samples.extend(samples[:min_samples])\n", - "\n", - " # Update samples list with balanced data\n", - " self.samples = balanced_samples\n", - " random.Random(42).shuffle(self.samples)\n", - "\n", - " # Print final distribution\n", - " class_counts = defaultdict(int)\n", - " for sample in self.samples:\n", - " class_counts[self.cwe_classes[sample.label]] += 1\n", - "\n", - " print(\"\\nFinal balanced class distribution:\")\n", - " for cwe, count in class_counts.items():\n", - " print(f\"{cwe}: {count} samples\")\n", - "\n", - " def split_train_test(self, test_size=0.2, initial_threshold=0.8):\n", - " \"\"\"Split data ensuring better class balance and controlled similarity\"\"\"\n", - " from collections import defaultdict\n", - " import numpy as np\n", - " print(\"Splitting data with balanced classes...\")\n", - " print(f\"Total samples before split: {len(self.samples)}\")\n", - "\n", - " if len(self.samples) == 0:\n", - " raise ValueError(\"No samples available to split\")\n", - "\n", - " # Split samples by class\n", - " samples_by_class = defaultdict(list)\n", - " for s in self.samples:\n", - " samples_by_class[s.label].append(s)\n", - "\n", - " print(\"\\nInitial class distribution:\")\n", - " for label, samples in samples_by_class.items():\n", - " print(f\"{self.cwe_classes[label]}: {len(samples)} samples\")\n", - "\n", - " test_samples = []\n", - " train_samples = []\n", - "\n", - " # Process each class separately\n", - " min_samples_per_class = min(len(samples) for samples in samples_by_class.values())\n", - " target_train_size = max(int(min_samples_per_class * 0.8), 1)\n", - " print(f\"\\nTarget training samples per class: {target_train_size}\")\n", - "\n", - " for label, samples in samples_by_class.items():\n", - " print(f\"\\nProcessing class {self.cwe_classes[label]}:\")\n", - " print(f\"Total samples for class: {len(samples)}\")\n", - "\n", - " if len(samples) == 0:\n", - " print(f\"Warning: No samples for class {self.cwe_classes[label]}\")\n", - " continue\n", - "\n", - " # Shuffle samples\n", - " samples_copy = samples.copy()\n", - " random.Random(42).shuffle(samples_copy)\n", - "\n", - " # Take a balanced number of samples for test set\n", - " test_size = min(len(samples_copy) - target_train_size, 80) # Cap test size at 80\n", - " test_split = samples_copy[:test_size]\n", - " remaining = samples_copy[test_size:]\n", - "\n", - " print(f\"Selected {len(test_split)} test samples\")\n", - " print(f\"Have {len(remaining)} samples available for training\")\n", - "\n", - " # Add to test samples\n", - " test_samples.extend(test_split)\n", - "\n", - " if len(remaining) == 0:\n", - " print(f\"Warning: No training samples for class {self.cwe_classes[label]}\")\n", - " continue\n", - "\n", - " # Select training samples - take all remaining up to target size\n", - " selected_train = remaining[:target_train_size]\n", - " train_samples.extend(selected_train)\n", - " print(f\"Added {len(selected_train)} training samples\")\n", - "\n", - " if not train_samples or not test_samples:\n", - " raise ValueError(\n", - " f\"Split resulted in empty sets: Train={len(train_samples)}, Test={len(test_samples)}\"\n", - " )\n", - "\n", - " # Final shuffle\n", - " random.Random(42).shuffle(train_samples)\n", - " random.Random(42).shuffle(test_samples)\n", - "\n", - " print(\"\\nFinal split sizes:\")\n", - " print(f\"Train: {len(train_samples)}\")\n", - " print(f\"Test: {len(test_samples)}\")\n", - "\n", - " # Print class distribution\n", - " print(\"\\nClass distribution after splitting:\")\n", - " class_counts = defaultdict(lambda: {'train': 0, 'test': 0})\n", - "\n", - " for sample in train_samples:\n", - " class_counts[self.cwe_classes[sample.label]]['train'] += 1\n", - " for sample in test_samples:\n", - " class_counts[self.cwe_classes[sample.label]]['test'] += 1\n", - "\n", - " for cwe_class, counts in class_counts.items():\n", - " print(f\"{cwe_class}: Train - {counts['train']}, Test - {counts['test']}\")\n", - "\n", - " return train_samples, test_samples\n", - "\n", - " def _extract_function_structure(self, code: str) -> str:\n", - " \"\"\"Extract basic function structure while ignoring specifics\"\"\"\n", - " import re\n", - " # Extract function definitions and their basic structure\n", - " functions = re.findall(r'\\w+\\s+\\w+\\s*\\([^)]*\\)\\s*{[^}]*}', code)\n", - " structures = []\n", - " for func in functions:\n", - " # Keep only control structures and basic operations\n", - " structure = re.sub(r'\\\".*?\\\"', 'STR', func) # Replace strings\n", - " structure = re.sub(r'\\w+\\s+\\w+\\s*=', 'ASSIGN', structure) # Replace assignments\n", - " structure = re.sub(r'\\b\\w+\\b\\s*\\(', 'CALL(', structure) # Replace function calls\n", - " structures.append(structure)\n", - " return ' '.join(structures)\n", - "\n", - " def create_torch_datasets(self, train_samples: List[CodeSample], test_samples: List[CodeSample]):\n", - " \"\"\"Create PyTorch datasets from the samples\"\"\"\n", - " from collections import defaultdict\n", - " import torch\n", - " print(f\"\\nCreating datasets from {len(train_samples)} train and {len(test_samples)} test samples\")\n", - "\n", - " if not train_samples or not test_samples:\n", - " raise ValueError(\"Empty sample lists provided\")\n", - "\n", - " # Process samples\n", - " train_texts = []\n", - " train_labels = []\n", - " test_texts = []\n", - " test_labels = []\n", - "\n", - " # Process train samples\n", - " for sample in train_samples:\n", - " if sample.processed_code:\n", - " train_texts.append(sample.processed_code)\n", - " train_labels.append(sample.label)\n", - "\n", - " # Process test samples\n", - " for sample in test_samples:\n", - " if sample.processed_code:\n", - " test_texts.append(sample.processed_code)\n", - " test_labels.append(sample.label)\n", - "\n", - " if not train_texts or not test_texts:\n", - " raise ValueError(\"No valid text samples found\")\n", - "\n", - " # Create encodings\n", - " train_encodings = self.tokenizer(\n", - " train_texts,\n", - " truncation=True,\n", - " padding=True,\n", - " max_length=512,\n", - " return_tensors=\"pt\"\n", - " )\n", - "\n", - " test_encodings = self.tokenizer(\n", - " test_texts,\n", - " truncation=True,\n", - " padding=True,\n", - " max_length=512,\n", - " return_tensors=\"pt\"\n", - " )\n", - "\n", - " # Create datasets\n", - " train_dataset = VulnTorchDataset(\n", - " train_encodings,\n", - " torch.tensor(train_labels)\n", - " )\n", - "\n", - " test_dataset = VulnTorchDataset(\n", - " test_encodings,\n", - " torch.tensor(test_labels)\n", - " )\n", - "\n", - " return train_dataset, test_dataset\n", - "# Load and analyze data\n", - "print(\"Loading and analyzing data...\")\n", - "dataset = VulnDataset('cwe_top5_sampled_with_juliet_none.csv')\n", - "train_samples, test_samples = dataset.split_train_test(test_size=0.2, initial_threshold=0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "004ee010", - "metadata": { - "id": "004ee010" - }, - "outputs": [], - "source": [ - "class VulnTorchDataset(torch.utils.data.Dataset):\n", - " def __init__(self, encodings, labels):\n", - " self.encodings = encodings\n", - " self.labels = labels\n", - "\n", - " def __getitem__(self, idx):\n", - " item = {key: val[idx] for key, val in self.encodings.items()}\n", - " item['labels'] = self.labels[idx]\n", - " return item\n", - "\n", - " def __len__(self):\n", - " return len(self.labels)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "85ea1734", - "metadata": { - "id": "85ea1734" - }, - "outputs": [], - "source": [ - "class MultiHeadSelfAttention(nn.Module):\n", - " def __init__(self, config):\n", - " super().__init__()\n", - " self.num_attention_heads = config.num_attention_heads\n", - " self.attention_head_size = int(config.hidden_size / config.num_attention_heads)\n", - " self.all_head_size = self.num_attention_heads * self.attention_head_size\n", - " self.query = nn.Linear(config.hidden_size, self.all_head_size)\n", - " self.key = nn.Linear(config.hidden_size, self.all_head_size)\n", - " self.value = nn.Linear(config.hidden_size, self.all_head_size)\n", - " self.dropout = nn.Dropout(config.attention_probs_dropout_prob)\n", - "\n", - " def transpose_for_scores(self, x):\n", - " new_x_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size)\n", - " x = x.view(*new_x_shape)\n", - " return x.permute(0, 2, 1, 3)\n", - "\n", - " def forward(self, hidden_states, attention_mask=None):\n", - " query_layer = self.transpose_for_scores(self.query(hidden_states))\n", - " key_layer = self.transpose_for_scores(self.key(hidden_states))\n", - " value_layer = self.transpose_for_scores(self.value(hidden_states))\n", - "\n", - " attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2))\n", - " attention_scores = attention_scores / math.sqrt(self.attention_head_size)\n", - "\n", - " if attention_mask is not None:\n", - " extended_attention_mask = attention_mask[:, None, None, :]\n", - " extended_attention_mask = (1.0 - extended_attention_mask) * -10000.0\n", - " attention_scores = attention_scores + extended_attention_mask\n", - "\n", - " attention_probs = nn.Softmax(dim=-1)(attention_scores)\n", - " attention_probs = self.dropout(attention_probs)\n", - " context_layer = torch.matmul(attention_probs, value_layer)\n", - " context_layer = context_layer.permute(0, 2, 1, 3).contiguous()\n", - " new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)\n", - " context_layer = context_layer.view(*new_context_layer_shape)\n", - " return context_layer\n", - "\n", - "class VulnDetector(nn.Module):\n", - " def __init__(self, num_classes=6, dropout=0.3):\n", - " super().__init__()\n", - "\n", - " # Set up cache directory\n", - " cache_dir = 'codebert_cache'\n", - " os.makedirs(cache_dir, exist_ok=True)\n", - "\n", - " # Determine device\n", - " self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - " print(f\"\\nUsing device: {self.device}\")\n", - " print(\"\\nLoading CodeBERT for classifier...\")\n", - "\n", - " try:\n", - " self.codebert = RobertaModel.from_pretrained(\n", - " 'microsoft/codebert-base',\n", - " cache_dir=cache_dir,\n", - " local_files_only=False,\n", - " trust_remote_code=True\n", - " )\n", - "\n", - " # Move model to device first\n", - " self.codebert = self.codebert.to(self.device)\n", - "\n", - " # Enable gradient checkpointing for memory efficiency\n", - " if torch.cuda.is_available():\n", - " self.codebert.gradient_checkpointing_enable()\n", - "\n", - " print(\"Model loaded successfully\")\n", - "\n", - " except Exception as e:\n", - " print(f\"Error loading model: {str(e)}\")\n", - " raise\n", - "\n", - " # Freeze some layers for transfer learning\n", - " total_layers = len(list(self.codebert.encoder.layer))\n", - " layers_to_freeze = int(total_layers * 0.6) # Freeze 60% of layers\n", - "\n", - " for i, layer in enumerate(self.codebert.encoder.layer):\n", - " if i < layers_to_freeze:\n", - " for param in layer.parameters():\n", - " param.requires_grad = False\n", - "\n", - " # Define vulnerability type groups for hierarchical classification\n", - " self.vuln_groups = {\n", - " 'integer': ['CWE190', 'CWE191'], # Integer overflow/underflow\n", - " 'buffer': ['CWE121', 'CWE122'], # Buffer overflow (stack/heap)\n", - " 'injection': ['CWE78'], # Command injection\n", - " 'none': ['none'] # Non-vulnerable\n", - " }\n", - "\n", - " # Multi-head attention for different vulnerability patterns\n", - " self.attention_heads = nn.ModuleDict({\n", - " 'integer': MultiHeadSelfAttention(self.codebert.config),\n", - " 'buffer': MultiHeadSelfAttention(self.codebert.config),\n", - " 'injection': MultiHeadSelfAttention(self.codebert.config),\n", - " 'none': MultiHeadSelfAttention(self.codebert.config)\n", - " })\n", - "\n", - " # Group-specific feature extractors\n", - " hidden_size = 768\n", - " self.group_features = nn.ModuleDict({\n", - " 'integer': nn.Sequential(\n", - " nn.Linear(hidden_size * 2, 512),\n", - " nn.LayerNorm(512),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout)\n", - " ),\n", - " 'buffer': nn.Sequential(\n", - " nn.Linear(hidden_size * 2, 512),\n", - " nn.LayerNorm(512),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout)\n", - " ),\n", - " 'injection': nn.Sequential(\n", - " nn.Linear(hidden_size * 2, 512),\n", - " nn.LayerNorm(512),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout)\n", - " ),\n", - " 'none': nn.Sequential(\n", - " nn.Linear(hidden_size * 2, 512),\n", - " nn.LayerNorm(512),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout)\n", - " )\n", - " })\n", - "\n", - " # Shared feature processing\n", - " self.shared_features = nn.Sequential(\n", - " nn.Linear(2048, 1024), # Concatenated group features\n", - " nn.LayerNorm(1024),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout),\n", - " nn.Linear(1024, 512),\n", - " nn.LayerNorm(512),\n", - " nn.GELU(),\n", - " nn.Dropout(dropout/2)\n", - " )\n", - "\n", - " # Final classifier\n", - " self.classifier = nn.Linear(512, num_classes)\n", - "\n", - " # Initialize weights\n", - " self._init_weights()\n", - "\n", - " def _init_weights(self):\n", - " # Initialize attention heads\n", - " for head in self.attention_heads.values():\n", - " for module in head.modules():\n", - " if isinstance(module, nn.Linear):\n", - " nn.init.xavier_normal_(module.weight)\n", - " if module.bias is not None:\n", - " module.bias.data.zero_()\n", - "\n", - " # Initialize group features\n", - " for features in self.group_features.values():\n", - " for module in features.modules():\n", - " if isinstance(module, nn.Linear):\n", - " nn.init.xavier_normal_(module.weight)\n", - " if module.bias is not None:\n", - " module.bias.data.zero_()\n", - "\n", - " # Initialize shared features\n", - " for module in self.shared_features.modules():\n", - " if isinstance(module, nn.Linear):\n", - " nn.init.xavier_normal_(module.weight)\n", - " if module.bias is not None:\n", - " module.bias.data.zero_()\n", - "\n", - " # Initialize classifier\n", - " nn.init.xavier_uniform_(self.classifier.weight)\n", - " self.classifier.bias.data.zero_()\n", - "\n", - " def forward(self, input_ids, attention_mask, token_type_ids=None):\n", - " # Move inputs to device\n", - " input_ids = input_ids.to(self.device)\n", - " attention_mask = attention_mask.to(self.device)\n", - "\n", - " if token_type_ids is None:\n", - " token_type_ids = torch.zeros_like(input_ids, device=self.device)\n", - " else:\n", - " token_type_ids = token_type_ids.to(self.device)\n", - "\n", - " # Get CodeBERT outputs\n", - " outputs = self.codebert(\n", - " input_ids=input_ids,\n", - " attention_mask=attention_mask,\n", - " token_type_ids=token_type_ids,\n", - " output_hidden_states=True,\n", - " return_dict=True\n", - " )\n", - "\n", - " last_hidden = outputs.last_hidden_state\n", - " pooled = outputs.pooler_output\n", - "\n", - " # Process each vulnerability group\n", - " group_outputs = []\n", - " for group_name, attention_head in self.attention_heads.items():\n", - " # Apply attention\n", - " attended = attention_head(last_hidden, attention_mask)\n", - "\n", - " # Global average pooling\n", - " avg_pool = torch.mean(attended, dim=1)\n", - "\n", - " # Concatenate with pooled output\n", - " group_input = torch.cat([pooled, avg_pool], dim=1)\n", - "\n", - " # Extract group-specific features\n", - " group_features = self.group_features[group_name](group_input)\n", - " group_outputs.append(group_features)\n", - "\n", - " # Combine all group features\n", - " combined = torch.cat(group_outputs, dim=1)\n", - "\n", - " # Process through shared layers\n", - " features = self.shared_features(combined)\n", - "\n", - " # Final classification\n", - " logits = self.classifier(features)\n", - "\n", - " # L2 regularization\n", - " l2_reg = torch.tensor(0., device=self.device)\n", - " for name, param in self.named_parameters():\n", - " if any(x in name for x in ['intermediate', 'classifier', 'attention_heads', 'group_features']):\n", - " l2_reg += 0.01 * torch.norm(param)\n", - "\n", - " return logits, l2_reg" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "da28b1b3", - "metadata": { - "id": "da28b1b3" - }, - "outputs": [], - "source": [ - "class FocalLoss(nn.Module):\n", - " def __init__(self, alpha=None, gamma=2):\n", - " super().__init__()\n", - " self.alpha = alpha\n", - " self.gamma = gamma\n", - " self.criterion = nn.CrossEntropyLoss(weight=alpha, reduction='none')\n", - "\n", - " def forward(self, inputs, targets):\n", - " ce_loss = self.criterion(inputs, targets)\n", - " pt = torch.exp(-ce_loss)\n", - " focal_loss = ((1 - pt) ** self.gamma) * ce_loss\n", - " return focal_loss.mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "06f8099c", - "metadata": { - "id": "06f8099c" - }, - "outputs": [], - "source": [ - "from transformers import get_linear_schedule_with_warmup\n", - "\n", - "class EarlyStopping:\n", - " def __init__(self, patience=3, min_delta=1e-4):\n", - " self.patience = patience\n", - " self.min_delta = min_delta\n", - " self.counter = 0\n", - " self.best_loss = None\n", - " self.early_stop = False\n", - "\n", - " def __call__(self, val_loss):\n", - " if self.best_loss is None:\n", - " self.best_loss = val_loss\n", - " elif val_loss > self.best_loss - self.min_delta:\n", - " self.counter += 1\n", - " if self.counter >= self.patience:\n", - " self.early_stop = True\n", - " else:\n", - " self.best_loss = val_loss\n", - " self.counter = 0\n", - "\n", - "class VulnTrainer:\n", - " def __init__(\n", - " self,\n", - " model,\n", - " train_dataset,\n", - " test_dataset,\n", - " num_classes=5,\n", - " batch_size=16,\n", - " learning_rate=1e-5,\n", - " num_epochs=5\n", - " ):\n", - " self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - " print(f\"\\nUsing device: {self.device}\")\n", - "\n", - " # Initialize model on device\n", - " self.model = model\n", - " self.model.to(self.device)\n", - " self.num_classes = num_classes\n", - "\n", - " # Early stopping\n", - " self.early_stopping = EarlyStopping(patience=5, min_delta=1e-3)\n", - "\n", - " # Compute class weights for balanced training\n", - " train_labels = train_dataset.labels.numpy()\n", - " class_counts = np.bincount(train_labels, minlength=num_classes)\n", - " weights = 1. / class_counts\n", - " class_weights = torch.FloatTensor(weights).to(self.device)\n", - "\n", - " # Setup data loaders with weighted sampling\n", - " sample_weights = torch.FloatTensor([weights[label] for label in train_labels])\n", - " sampler = torch.utils.data.WeightedRandomSampler(\n", - " weights=sample_weights,\n", - " num_samples=len(train_dataset),\n", - " replacement=True\n", - " )\n", - "\n", - " self.train_loader = torch.utils.data.DataLoader(\n", - " train_dataset,\n", - " batch_size=batch_size,\n", - " sampler=sampler,\n", - " pin_memory=True,\n", - " num_workers=2\n", - " )\n", - "\n", - " self.test_loader = torch.utils.data.DataLoader(\n", - " test_dataset,\n", - " batch_size=batch_size,\n", - " shuffle=False,\n", - " pin_memory=True,\n", - " num_workers=2\n", - " )\n", - "\n", - " # Cross entropy loss with class weights\n", - " self.criterion = nn.CrossEntropyLoss(weight=class_weights)\n", - "\n", - " # Optimizer setup\n", - " base_params = {'params': [], 'lr': learning_rate * 0.1}\n", - " new_params = {'params': [], 'lr': learning_rate}\n", - "\n", - " for name, param in model.named_parameters():\n", - " if param.requires_grad:\n", - " if 'codebert' in name:\n", - " base_params['params'].append(param)\n", - " else:\n", - " new_params['params'].append(param)\n", - "\n", - " self.optimizer = torch.optim.AdamW(\n", - " [base_params, new_params],\n", - " weight_decay=0.01,\n", - " betas=(0.9, 0.999),\n", - " eps=1e-8\n", - " )\n", - "\n", - " # Learning rate schedule\n", - " num_training_steps = len(self.train_loader) * num_epochs\n", - " num_warmup_steps = num_training_steps // 4\n", - "\n", - " self.scheduler = get_linear_schedule_with_warmup(\n", - " self.optimizer,\n", - " num_warmup_steps=num_warmup_steps,\n", - " num_training_steps=num_training_steps\n", - " )\n", - "\n", - " self.num_epochs = num_epochs\n", - "\n", - " def save_checkpoint(self, epoch, auc):\n", - " \"\"\"Save model checkpoint with complete state\"\"\"\n", - " checkpoint = {\n", - " 'model_state_dict': self.model.state_dict(),\n", - " 'optimizer_state_dict': self.optimizer.state_dict(),\n", - " 'scheduler_state_dict': self.scheduler.state_dict(),\n", - " 'epoch': epoch,\n", - " 'best_auc': auc,\n", - " }\n", - " torch.save(checkpoint, 'best_model.pt')\n", - "\n", - " def load_checkpoint(self):\n", - " \"\"\"Load model checkpoint and restore state\"\"\"\n", - " try:\n", - " checkpoint = torch.load('best_model.pt')\n", - " self.model.load_state_dict(checkpoint['model_state_dict'])\n", - " self.optimizer.load_state_dict(checkpoint['optimizer_state_dict'])\n", - " self.scheduler.load_state_dict(checkpoint['scheduler_state_dict'])\n", - " best_auc = checkpoint['best_auc']\n", - " print(f'Restored best model with AUC: {best_auc:.4f}')\n", - " return best_auc\n", - " except Exception as e:\n", - " print(f'Error loading checkpoint: {str(e)}')\n", - " return 0.0\n", - "\n", - " def evaluate(self):\n", - " self.model.eval()\n", - " total_loss = 0\n", - " all_preds = []\n", - " all_labels = []\n", - "\n", - " with torch.no_grad():\n", - " for batch in self.test_loader:\n", - " input_ids = batch['input_ids'].to(self.device)\n", - " attention_mask = batch['attention_mask'].to(self.device)\n", - " labels = batch['labels'].to(self.device)\n", - "\n", - " logits, l2_reg = self.model(input_ids, attention_mask)\n", - " loss = self.criterion(logits, labels) + l2_reg\n", - "\n", - " total_loss += loss.item()\n", - " preds = torch.argmax(logits, dim=1)\n", - "\n", - " all_preds.extend(preds.cpu().numpy())\n", - " all_labels.extend(labels.cpu().numpy())\n", - "\n", - " # Calculate metrics\n", - " accuracy = accuracy_score(all_labels, all_preds)\n", - " macro_f1 = f1_score(all_labels, all_preds, average='macro')\n", - " per_class_f1 = f1_score(all_labels, all_preds, average=None)\n", - " conf_matrix = confusion_matrix(all_labels, all_preds)\n", - "\n", - " # Create metrics dictionary\n", - " metrics = {\n", - " 'loss': total_loss / len(self.test_loader),\n", - " 'accuracy': accuracy,\n", - " 'macro_f1': macro_f1,\n", - " 'per_class_f1': per_class_f1,\n", - " 'confusion_matrix': conf_matrix\n", - " }\n", - "\n", - " return metrics\n", - "\n", - " def train(self):\n", - " best_f1 = 0\n", - " val_losses = []\n", - " val_f1s = []\n", - "\n", - " # Print initial GPU memory usage\n", - " if torch.cuda.is_available():\n", - " print(f\"GPU Memory before training: {torch.cuda.memory_allocated()/1024**2:.1f}MB\")\n", - "\n", - " for epoch in range(self.num_epochs):\n", - " # Training phase\n", - " self.model.train()\n", - " train_loss = 0\n", - " progress_bar = tqdm(self.train_loader, desc=f'Epoch {epoch+1}/{self.num_epochs}')\n", - "\n", - " for batch in progress_bar:\n", - " self.optimizer.zero_grad()\n", - "\n", - " input_ids = batch['input_ids'].to(self.device)\n", - " attention_mask = batch['attention_mask'].to(self.device)\n", - " labels = batch['labels'].to(self.device)\n", - "\n", - " logits, l2_reg = self.model(input_ids, attention_mask)\n", - " loss = self.criterion(logits, labels) + l2_reg\n", - "\n", - " loss.backward()\n", - " torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1.0)\n", - " self.optimizer.step()\n", - " self.scheduler.step()\n", - "\n", - " train_loss += loss.item()\n", - " progress_bar.set_postfix({'loss': f'{loss.item():.4f}'})\n", - "\n", - " # Clear memory\n", - " del input_ids, attention_mask, labels, logits, loss\n", - " if torch.cuda.is_available():\n", - " torch.cuda.empty_cache()\n", - "\n", - " # Evaluation\n", - " metrics = self.evaluate()\n", - " val_losses.append(metrics['loss'])\n", - " val_f1s.append(metrics['macro_f1'])\n", - "\n", - " print(f'\\nEvaluation Metrics:')\n", - " print(f\"Average Loss: {metrics['loss']:.4f}\")\n", - " print(f\"Accuracy: {metrics['accuracy']:.4f}\")\n", - " print(f\"Macro F1: {metrics['macro_f1']:.4f}\")\n", - "\n", - " print('\\nPer-class F1 scores:')\n", - " for i, f1 in enumerate(metrics['per_class_f1']):\n", - " print(f\"Class {self.cwe_classes[i]}: {f1:.4f}\")\n", - "\n", - " print('\\nConfusion Matrix:')\n", - " print(metrics['confusion_matrix'])\n", - "\n", - " # Save best model\n", - " if metrics['macro_f1'] > best_f1:\n", - " best_f1 = metrics['macro_f1']\n", - " self.save_checkpoint(epoch, best_f1)\n", - " print(f'\\nSaved new best model with F1: {best_f1:.4f}')\n", - "\n", - " # Early stopping check\n", - " self.early_stopping(metrics['loss'])\n", - " if self.early_stopping.early_stop:\n", - " print('Early stopping triggered')\n", - " break\n", - "\n", - " # Clear memory after epoch\n", - " if torch.cuda.is_available():\n", - " torch.cuda.empty_cache()\n", - "\n", - " print(f\"\\nAvg loss: {train_loss/len(self.train_loader):.4f}\")\n", - "\n", - " print(\"\\nTraining completed!\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "2bf397bc", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000, - "referenced_widgets": [ - "9c5704c61bb141aab4483012b6ede209", - "7d97773e6db74d73b4c01df03a49c5b7", - "2e32990919f14a08a74d549d74f167cb", - "634a04d4a515492ab9a27dd4dfc60a4b", - "5f7ba15bc28b4e7cba2041e4b39dd458", - "6ec6fe079796478eb6590d0d4bf80b2f", - "c321f7aab5964ca08de4734264d0a9b3", - "2f6f9bbed8e84aba8d014ec6f3058754", - "99a967f107e640c98905875a9be4401b", - "1c3226ae780648a0b5d7341dc229b0d4", - "bf6f9f9304aa4e218f70df85bc56229a", - "1488099b130441adb88968543cbd750a", - "19001a5e3996412c88e22c9a0fd07628", - "31568ca672264dc6a2289770fcc83912", - "82766bb4dfaa403fbc768184240b4421", - "50f037306151454f826333bf3fa40d39", - "097e62b4bc3341fbbc2c9dca5f8a01b1", - "96c99aef2aaf4a7cbbf8bdae505ec50b", - "6b143cef83c940d0b538885b63d93606", - "b449be2f8a444bb09f9859ee37e1a2a9", - "ce855bf8bba04507972c368b59d79ac1", - "6bd0ecd2a6ac45c0a5c9eced91c04ad1", - "87097737e19d4d6a92b80b3f3daead73", - "cee8ee892df7455b99e7c2bbd37f714c", - "ebd544982c1a4989bdc339ef008a1be5", - "bd64e931d52e44469e38fff4c764276a", - "b0b696917e2f4362a1ea41ba14a7b6a4", - "c8ee3081fce1416d85bdeaf6da351c67", - "509795fe9ba643a98da86119039b5f65", - "84d8bbd6fb934c0cb0d1f10d89d94ba3", - "1b9a8e7fb66c4b1f8ff692bc1606a2e9", - "ec3c3b2b4328427b999b4316277e141a", - "d271766834c44e8380a0c6dde0ad7820", - "55ea4d7888d54c769d4b70458eec335a", - "5cf69cd40e0a487db861d88b73d191bb", - "da122508928344fe8027bcab9f39bb81", - "90bc055389544e0ca740f1fff2d2914e", - "23c20623ffb844138d8539757e6ec7a9", - "f8d51363887b4f03b7e24cb01360754d", - "37b05caea71e45d8b9f11b2461aa5da3", - "eaf0e391749b4a18aa9121f4b00b5a50", - "d57bb16c7fe44372a77ce398d39478e3", - "7a97592582f24cf9a006f044ce8cf3e6", - "2fc3325660bb40378a41dbad01936386", - "b762c25520b645f38613d9e247ae06aa", - "7a0d1d445542465b8fe555fb1b9ef562", - "4f10dcb8a5a34a939ad99fcc0a1daab6", - "0756100e8e4e45e3a55b22c180b2fe3c", - "fe09cd19661e4f908f6976e695d9f297", - "c9a307b7114e4067820921844eb7b862", - "f95d16981a17410e9bd4b18e12475df5", - "fa7ac3d8d8e74a8088d269a0bc74babf", - "a97c6d5d371249c4b150128fa4107d61", - "2534a7bccf7f4dfa8e7acbd615e9be6e", - "c5fab0b8d8b241aeb4e289bef20739ef" - ] - }, - "id": "2bf397bc", - "outputId": "7f5fcd44-f8df-4fe7-c3b4-cfde7e8f40ab" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "Creating PyTorch datasets...\n", - "\n", - "Creating datasets from 1920 train and 480 test samples\n", - "\n", - "Initializing model...\n", - "\n", - "Using device: cuda\n", - "\n", - "Loading CodeBERT for classifier...\n", - "Model loaded successfully\n", - "\n", - "Starting training...\n", - "\n", - "Using device: cuda\n", - "GPU Memory before training: 525.8MB\n", - "GPU Memory before training: 525.8MB\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "Epoch 1/5: 0%| | 0/480 [00:00\n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{...\n", - "Similar test sample found (idx: 8, similarity: 0.54)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var(unsigned int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void va...\n", - "Similar test sample found (idx: 11, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snwprintf\n", - "#else\n", - "#define SNPRINTF snprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "void var...\n", - "Similar test sample found (idx: 13, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(twoIntsStruct * data);\n", - "void var(twoIntsStruct * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "v...\n", - "Similar test sample found (idx: 16, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 17, similarity: 0.44)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeo...\n", - "Similar test sample found (idx: 20, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscpy(dest, dat...\n", - "Similar test sample found (idx: 26, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "wchar_t * var(wchar_t * data)\n", - "{\n", - " ...\n", - "Similar test sample found (idx: 38, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data)\n", - "{\n", - " if(data < 0) \n", - " {\n", - " int result = data * 2;\n", - " printIntLine(result);\n", - " ...\n", - "Similar test sample found (idx: 47, similarity: 0.63)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 60, similarity: 0.39)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "char * var(char * data)\n", - "{\n", - " memset(data, 'A', 100-1); \n", - " data[100-1] = '\\0'; \n", - " ret...\n", - "Similar test sample found (idx: 64, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 67, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 70, similarity: 0.65)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define FULL_COMMAND \"dir \"\n", - "#else\n", - "#include \n", - "#define FULL_COMMAND \"ls \"\n", - "#endif\n", - "#if...\n", - "Similar test sample found (idx: 97, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 101, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "extern int var;\n", - "void var(int data)\n", - "{\n", - " if(var)\n", - " {\n", - " {\n", - " int result = ...\n", - "Similar test sample found (idx: 113, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var...\n", - "Similar test sample found (idx: 114, similarity: 0.41)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " data = RAND32();\n", - " var(data);\n", - "}\n", - "#endif \n", - "#...\n", - "Similar test sample found (idx: 120, similarity: 0.89)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var(short data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(short data);...\n", - "Similar test sample found (idx: 135, similarity: 0.53)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "int var(int data)\n", - "{\n", - " data = INT_MAX;\n", - " return data;\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "int var(int data)\n", - "{\n", - " ...\n", - "Similar test sample found (idx: 140, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 157, similarity: 0.65)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 169, similarity: 0.89)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var(short data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(short data);...\n", - "Similar test sample found (idx: 170, similarity: 0.59)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define FULL_COMMAND L\"dir \"\n", - "#else\n", - "#include \n", - "#define FULL_COMMAND L\"ls \"\n", - "#endif\n", - "#...\n", - "Similar test sample found (idx: 177, similarity: 0.65)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 181, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 187, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 190, similarity: 0.54)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var(unsigned int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void va...\n", - "Similar test sample found (idx: 195, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data)\n", - "{\n", - " {\n", - " --data;\n", - " int result = data;\n", - " printIntLine(result);\n", - " }\n", - "}\n", - "...\n", - "Similar test sample found (idx: 197, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 198, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 202, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 222, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 225, similarity: 0.49)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "char var(char data)\n", - "{\n", - " data = (char)RAND32();\n", - " return data;\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "char var(char d...\n", - "Similar test sample found (idx: 229, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " fscanf(stdin, \"%d\", &data);\n", - " var(data);\n", - "...\n", - "Similar test sample found (idx: 233, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snprintf\n", - "#else\n", - "#define SNPRINTF snprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "void var(...\n", - "Similar test sample found (idx: 238, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 272, similarity: 0.87)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var(char data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(char data);\n", - "vo...\n", - "Similar test sample found (idx: 285, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 287, similarity: 0.39)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "char * var(char * data)\n", - "{\n", - " data = (char *)malloc(50*sizeof(char));\n", - " if (data == NUL...\n", - "Similar test sample found (idx: 288, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(twoIntsStruct * data);\n", - "void var(twoIntsStruct * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "v...\n", - "Similar test sample found (idx: 289, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 296, similarity: 0.56)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int * * dataPtr)\n", - "{\n", - " int * data = *dataPtr;\n", - " {\n", - " int source[100] = {0}; \n", - " memmove...\n", - "Similar test sample found (idx: 298, similarity: 0.63)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 307, similarity: 0.54)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var(unsigned int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void va...\n", - "Similar test sample found (idx: 320, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "wchar_t * var(wchar_t * data)\n", - "{\n", - " wmemset(data, L'A', 100-1); \n", - " data[100-1] = L'\\0';...\n", - "Similar test sample found (idx: 341, similarity: 0.43)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data)\n", - "{\n", - " {\n", - " char dest[50] = \"\";\n", - " strcat(dest, data);\n", - " ...\n", - "Similar test sample found (idx: 347, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var(wchar_t * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMI...\n", - "Similar test sample found (idx: 351, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 352, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "extern int var;\n", - "void var(int data)\n", - "{\n", - " if(var)\n", - " {\n", - " {\n", - " --data;\n", - " int result ...\n", - "Similar test sample found (idx: 359, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscat(dest, dat...\n", - "Similar test sample found (idx: 379, similarity: 0.45)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * * dataPtr)\n", - "{\n", - " int64_t * data = *dataPtr;\n", - " {\n", - " int64_t source[100] = {0}; \n", - " ...\n", - "Similar test sample found (idx: 381, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 395, similarity: 0.63)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 397, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data)\n", - "{\n", - " if(data > 0) \n", - " {\n", - " int result = data * 2;\n", - " printIntLine(result);\n", - " ...\n", - "Similar test sample found (idx: 403, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 407, similarity: 0.54)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var(unsigned int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void va...\n", - "Similar test sample found (idx: 409, similarity: 0.41)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscat(dest, dat...\n", - "Similar test sample found (idx: 414, similarity: 0.48)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeo...\n", - "Similar test sample found (idx: 416, similarity: 0.60)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 424, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snwprintf\n", - "#else\n", - "#define SNPRINTF snprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "void var...\n", - "Similar test sample found (idx: 432, similarity: 0.54)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var(unsigned int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void va...\n", - "Similar test sample found (idx: 436, similarity: 0.65)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 444, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var...\n", - "Similar test sample found (idx: 445, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 452, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 464, similarity: 0.34)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int * data);\n", - "void var()\n", - "{\n", - " int * data;\n", - " int * dataBadBuffer = (int *)ALLOCA(50*sizeof(int));\n", - "...\n", - "Similar test sample found (idx: 471, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 474, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 479, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "\n", - "Train Example 1:\n", - "Code Preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Label: 2\n", - "CWE: CWE190\n", - "Similar test sample found (idx: 40, similarity: 0.63)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 61, similarity: 0.72)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 100, similarity: 0.75)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 110, similarity: 0.65)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 139, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 142, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " short data;\n", - " data = 0;\n", - " if(globalTrue)\n", - " {\n", - " data = (short)RAND32();\n", - " }\n", - " ...\n", - "Similar test sample found (idx: 200, similarity: 0.49)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 237, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 261, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 299, similarity: 0.76)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 305, similarity: 0.75)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 309, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#define CHAR_ARRAY_SIZE (3 * sizeof(data) + 2)\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " if(globalTrue)\n", - " ...\n", - "Similar test sample found (idx: 314, similarity: 0.34)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " if(globalFive==5)\n", - " {\n", - " fscanf (stdin, \"%u\", &...\n", - "Similar test sample found (idx: 315, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 412, similarity: 0.79)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 449, similarity: 0.66)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "\n", - "Train Example 2:\n", - "Code Preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Label: 4\n", - "CWE: CWE122\n", - "Similar test sample found (idx: 3, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 5, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{...\n", - "Similar test sample found (idx: 13, similarity: 0.77)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(twoIntsStruct * data);\n", - "void var(twoIntsStruct * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "v...\n", - "Similar test sample found (idx: 16, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 17, similarity: 0.48)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeo...\n", - "Similar test sample found (idx: 19, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 20, similarity: 0.48)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscpy(dest, dat...\n", - "Similar test sample found (idx: 26, similarity: 0.53)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "wchar_t * var(wchar_t * data)\n", - "{\n", - " ...\n", - "Similar test sample found (idx: 35, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 36, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 47, similarity: 0.88)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 52, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 55, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 60, similarity: 0.53)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "char * var(char * data)\n", - "{\n", - " memset(data, 'A', 100-1); \n", - " data[100-1] = '\\0'; \n", - " ret...\n", - "Similar test sample found (idx: 62, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 64, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 67, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 69, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " char dataBadBuffer[50];\n", - " char...\n", - "Similar test sample found (idx: 70, similarity: 0.95)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define FULL_COMMAND \"dir \"\n", - "#else\n", - "#include \n", - "#define FULL_COMMAND \"ls \"\n", - "#endif\n", - "#if...\n", - "Similar test sample found (idx: 84, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 86, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 97, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 102, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 109, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 113, similarity: 0.95)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var...\n", - "Similar test sample found (idx: 116, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 119, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 120, similarity: 0.70)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var(short data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(short data);...\n", - "Similar test sample found (idx: 135, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "int var(int data)\n", - "{\n", - " data = INT_MAX;\n", - " return data;\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "int var(int data)\n", - "{\n", - " ...\n", - "Similar test sample found (idx: 140, similarity: 0.61)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 143, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 157, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 163, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 167, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 169, similarity: 0.70)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var(short data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(short data);...\n", - "Similar test sample found (idx: 170, similarity: 0.81)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define FULL_COMMAND L\"dir \"\n", - "#else\n", - "#include \n", - "#define FULL_COMMAND L\"ls \"\n", - "#endif\n", - "#...\n", - "Similar test sample found (idx: 177, similarity: 0.95)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 181, similarity: 0.62)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 184, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 187, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 194, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 197, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(char * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "...\n", - "Similar test sample found (idx: 198, similarity: 0.61)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 202, similarity: 0.62)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 206, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 222, similarity: 0.62)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 225, similarity: 0.51)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "char var(char data)\n", - "{\n", - " data = (char)RAND32();\n", - " return data;\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "char var(char d...\n", - "Similar test sample found (idx: 233, similarity: 0.97)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snprintf\n", - "#else\n", - "#define SNPRINTF snprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "void var(...\n", - "Similar test sample found (idx: 238, similarity: 0.61)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 245, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 250, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 264, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 272, similarity: 0.78)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var(char data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(char data);\n", - "vo...\n", - "Similar test sample found (idx: 278, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 279, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 285, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 287, similarity: 0.50)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "char * var(char * data)\n", - "{\n", - " data = (char *)malloc(50*sizeof(char));\n", - " if (data == NUL...\n", - "Similar test sample found (idx: 288, similarity: 0.77)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(twoIntsStruct * data);\n", - "void var(twoIntsStruct * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "v...\n", - "Similar test sample found (idx: 289, similarity: 0.61)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 296, similarity: 0.58)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int * * dataPtr)\n", - "{\n", - " int * data = *dataPtr;\n", - " {\n", - " int source[100] = {0}; \n", - " memmove...\n", - "Similar test sample found (idx: 298, similarity: 0.88)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 318, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 320, similarity: 0.50)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "wchar_t * var(wchar_t * data)\n", - "{\n", - " wmemset(data, L'A', 100-1); \n", - " data[100-1] = L'\\0';...\n", - "Similar test sample found (idx: 325, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 334, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 337, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 341, similarity: 0.45)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data)\n", - "{\n", - " {\n", - " char dest[50] = \"\";\n", - " strcat(dest, data);\n", - " ...\n", - "Similar test sample found (idx: 347, similarity: 0.95)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var(wchar_t * data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMI...\n", - "Similar test sample found (idx: 351, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 359, similarity: 0.48)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscat(dest, dat...\n", - "Similar test sample found (idx: 365, similarity: 0.36)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = (char *)malloc(100*sizeof...\n", - "Similar test sample found (idx: 366, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 379, similarity: 0.52)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * * dataPtr)\n", - "{\n", - " int64_t * data = *dataPtr;\n", - " {\n", - " int64_t source[100] = {0}; \n", - " ...\n", - "Similar test sample found (idx: 381, similarity: 0.62)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "Similar test sample found (idx: 382, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{...\n", - "Similar test sample found (idx: 395, similarity: 0.88)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 403, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 405, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 406, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 409, similarity: 0.52)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data)\n", - "{\n", - " {\n", - " wchar_t dest[50] = L\"\";\n", - " wcscat(dest, dat...\n", - "Similar test sample found (idx: 414, similarity: 0.52)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeo...\n", - "Similar test sample found (idx: 415, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 416, similarity: 0.83)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 417, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 421, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 424, similarity: 0.93)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snwprintf\n", - "#else\n", - "#define SNPRINTF snprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "void var...\n", - "Similar test sample found (idx: 427, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 434, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 436, similarity: 0.91)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 445, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 452, similarity: 0.67)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var(int data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int data);\n", - "void ...\n", - "Similar test sample found (idx: 455, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 460, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 462, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 465, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 470, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 471, similarity: 0.61)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifdef _WIN32\n", - "#include \n", - "#include \n", - "#include \n", - "#pragma comment(lib, \"ws2_32\") \n", - "#define CLOSE_S...\n", - "Similar test sample found (idx: 474, similarity: 1.00)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var(cha...\n", - "Similar test sample found (idx: 477, similarity: 0.40)\n", - "Test sample preview: void loop() { for(int i = 0; i < 10; i++) { printf(\".\"); } }...\n", - "Similar test sample found (idx: 478, similarity: 0.32)\n", - "Test sample preview: void func() { int x = 5; printf(\"%d\", x); }...\n", - "Similar test sample found (idx: 479, similarity: 0.62)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var(int64_t data)\n", - "{\n", - " var(data);\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t ...\n", - "\n", - "Train Example 3:\n", - "Code Preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Label: 1\n", - "CWE: CWE78\n", - "Similar test sample found (idx: 14, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 44, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 108, similarity: 0.57)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 124, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 146, similarity: 0.34)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 160, similarity: 0.44)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 168, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 241, similarity: 0.46)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 247, similarity: 0.43)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 367, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 390, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 391, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 425, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "Similar test sample found (idx: 448, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#defin...\n", - "\n", - "Train Example 4:\n", - "Code Preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "unsigned int var(unsigned int data);\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " ...\n", - "Label: 2\n", - "CWE: CWE190\n", - "Similar test sample found (idx: 2, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var()\n", - "{\n", - " short data;\n", - " void (*funcPtr) (short) = var;\n", - " data = 0;\n", - " data...\n", - "Similar test sample found (idx: 4, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var()\n", - "{\n", - " wchar_t * data;\n", - " wchar_t * dataBadBuffer = ...\n", - "Similar test sample found (idx: 5, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{...\n", - "Similar test sample found (idx: 16, similarity: 0.41)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 43, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var()\n", - "{\n", - " int64_t data;\n", - " data = 0L...\n", - "Similar test sample found (idx: 46, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "typedef struct _CWE191_Integer_Underflow__short_rand_multiply_67_structType\n", - "{\n", - " short structFirst;\n", - "} var;\n", - "#ifndef OMITBAD\n", - "...\n", - "Similar test sample found (idx: 48, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " goto source;\n", - "source:\n", - " data = INT_MIN;\n", - " goto sink;\n", - "sink:\n", - " ...\n", - "Similar test sample found (idx: 67, similarity: 0.41)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = NULL;\n", - " data = (char *)...\n", - "Similar test sample found (idx: 88, similarity: 0.50)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "unsigned int var;\n", - "unsigned int var;\n", - "unsigned int var;\n", - "#ifndef OMITBAD\n", - "void var();\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " da...\n", - "Similar test sample found (idx: 90, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "wchar_t * var;\n", - "wchar_t * var;\n", - "#ifndef OMITBAD\n", - "void var();\n", - "void var()\n", - "{\n", - " wchar_t * data;\n", - " data = (wc...\n", - "Similar test sample found (idx: 114, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " data = RAND32();\n", - " var(data);\n", - "}\n", - "#endif \n", - "#...\n", - "Similar test sample found (idx: 122, similarity: 0.39)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int * dataPtr);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " fscanf(stdin, \"%d\", &data);\n", - " var(&d...\n", - "Similar test sample found (idx: 128, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "static char badSource(char data)\n", - "{\n", - " fscanf (stdin, \"%c\", &data);\n", - " return data;\n", - "}\n", - "void var()\n", - "{\n", - " char...\n", - "Similar test sample found (idx: 145, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * dataPtr);\n", - "void var()\n", - "{\n", - " int64_t data;\n", - " data = 0LL;\n", - " data = (int64_t)RAND64();\n", - " ...\n", - "Similar test sample found (idx: 172, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char data)\n", - "{\n", - " {\n", - " char result = data * data;\n", - " printHexCharLine(re...\n", - "Similar test sample found (idx: 174, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "wchar_t * var;\n", - "wchar_t * var;\n", - "#ifndef OMITBAD\n", - "void var();\n", - "void var()\n", - "{\n", - " wchar_t * data;\n", - " data = NUL...\n", - "Similar test sample found (idx: 186, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(short data);\n", - "void var()\n", - "{\n", - " short data;\n", - " void (*funcPtr) (short) = var;\n", - " data = 0;\n", - " data...\n", - "Similar test sample found (idx: 201, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var()\n", - "{\n", - " int64_t data;\n", - " void (*funcPtr) (int64_t) = var;\n", - " data = 0LL;\n", - "...\n", - "Similar test sample found (idx: 211, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "typedef struct _CWE191_Integer_Underflow__char_rand_predec_67_structType\n", - "{\n", - " char structFirst;\n", - "} var;\n", - "#ifndef OMITBAD\n", - "void...\n", - "Similar test sample found (idx: 215, similarity: 0.63)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " fscanf (stdin, \"%u\", &data);\n", - " {\n", - " ...\n", - "Similar test sample found (idx: 216, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " short data;\n", - " data = 0;\n", - " while(1)\n", - " {\n", - " data = (short)RAND32();\n", - " break;...\n", - "Similar test sample found (idx: 224, similarity: 0.50)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " goto source;\n", - "source:\n", - " fscanf (std...\n", - "Similar test sample found (idx: 229, similarity: 0.41)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " fscanf(stdin, \"%d\", &data);\n", - " var(data);\n", - "...\n", - "Similar test sample found (idx: 242, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "int64_t var(int64_t data);\n", - "void var()\n", - "{\n", - " int64_t data;\n", - " data = 0LL;\n", - " data = var(data);\n", - " {\n", - " ...\n", - "Similar test sample found (idx: 254, similarity: 0.58)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " data = (unsigned int)RAND...\n", - "Similar test sample found (idx: 255, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "static char var;\n", - "static char var;\n", - "static char var;\n", - "#ifndef OMITBAD\n", - "static void badSink()\n", - "{\n", - " char data = var;\n", - " {\n", - " ...\n", - "Similar test sample found (idx: 256, similarity: 0.35)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var()\n", - "{\n", - " char data;\n", - " void (*funcPtr) (char) = var;\n", - " dat...\n", - "Similar test sample found (idx: 257, similarity: 0.39)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var()\n", - "{\n", - " char data;\n", - " data = ' ';\n", - " fscanf (stdin, \"%c\", &data);\n", - " var(da...\n", - "Similar test sample found (idx: 258, similarity: 0.47)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "int var = 0;\n", - "void var(unsigned int data);\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " fscanf (stdi...\n", - "Similar test sample found (idx: 273, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#define CHAR_ARRAY_SIZE (3 * sizeof(data) + 2)\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - "...\n", - "Similar test sample found (idx: 276, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var()\n", - "{\n", - " wchar_t * data;\n", - " data = NULL;\n", - " data = (w...\n", - "Similar test sample found (idx: 281, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "static void badSink(char data)\n", - "{\n", - " {\n", - " data++;\n", - " char result = data;\n", - " printHexCharLine(...\n", - "Similar test sample found (idx: 292, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING \"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(void * dataVoidPtr);\n", - "void ...\n", - "Similar test sample found (idx: 313, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " if(1)\n", - " {\n", - " data = (unsigned...\n", - "Similar test sample found (idx: 316, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " short data;\n", - " data = 0;\n", - " goto source;\n", - "source:\n", - " fscanf (stdin, \"%hd\", &data);\n", - " go...\n", - "Similar test sample found (idx: 319, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "char * var;\n", - "char * var;\n", - "#ifndef OMITBAD\n", - "void var();\n", - "void var()\n", - "{\n", - " char * data;\n", - " char * dataBadBuffe...\n", - "Similar test sample found (idx: 322, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH L\"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT L\"cmd.exe\"\n", - "#def...\n", - "Similar test sample found (idx: 328, similarity: 0.36)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "short var(short data);\n", - "void var()\n", - "{\n", - " short data;\n", - " data = 0;\n", - " data = var(data);\n", - " {\n", - " data++...\n", - "Similar test sample found (idx: 329, similarity: 0.34)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "static char badSource(char data)\n", - "{\n", - " fscanf (stdin, \"%c\", &data);\n", - " return data;\n", - "}\n", - "voi...\n", - "Similar test sample found (idx: 330, similarity: 0.48)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(unsigned int data);\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " data = UINT_MAX;\n", - " var(...\n", - "Similar test sample found (idx: 339, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var()\n", - "{\n", - " char data;\n", - " void (*funcPtr) (char) = var;\n", - " data = ' ';\n", - " data ...\n", - "Similar test sample found (idx: 345, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define SNPRINTF _snwprintf\n", - "#else\n", - "#define SNPRINTF swprintf\n", - "#endif\n", - "#ifndef OMITBAD\n", - "static w...\n", - "Similar test sample found (idx: 348, similarity: 0.77)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "static unsigned int badSource(unsigned int data)\n", - "{\n", - " data = (unsigned int)RAND32();\n", - " ...\n", - "Similar test sample found (idx: 349, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(void * dataVoidPtr);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " fscanf(stdin, \"%d\", &data);\n", - " v...\n", - "Similar test sample found (idx: 357, similarity: 0.36)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " unsigned int *dataPtr1 = &data;\n", - " unsigned int *dataPtr2 = &data;\n", - "...\n", - "Similar test sample found (idx: 365, similarity: 0.34)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * data);\n", - "void var()\n", - "{\n", - " char * data;\n", - " data = (char *)malloc(100*sizeof...\n", - "Similar test sample found (idx: 372, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(int64_t data);\n", - "void var()\n", - "{\n", - " int64_t data;\n", - " data = 0LL;\n", - " data = LLONG_MA...\n", - "Similar test sample found (idx: 380, similarity: 0.42)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "int64_t * var(int64_t * data);\n", - "void var()\n", - "{\n", - " int64_t * data;\n", - " data = NULL;\n", - " data = var(data);\n", - " p...\n", - "Similar test sample found (idx: 385, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var()\n", - "{\n", - " char data;\n", - " data = ' ';\n", - " data = CHAR_MIN;\n", - " var(data);\n", - "}\n", - "#endi...\n", - "Similar test sample found (idx: 387, similarity: 0.31)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "typedef struct _CWE122_Heap_Based_Buffer_Overflow__c_dest_wchar_t_cpy_67_structType\n", - "{\n", - " wchar_t * struc...\n", - "Similar test sample found (idx: 408, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var()\n", - "{\n", - " wchar_t * data;\n", - " data = NULL;\n", - " data = (w...\n", - "Similar test sample found (idx: 429, similarity: 0.30)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#define CHAR_ARRAY_SIZE (3 * sizeof(data) + 2)\n", - "#ifndef OMITBAD\n", - "void var(int data);\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - "...\n", - "Similar test sample found (idx: 433, similarity: 0.37)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(twoIntsStruct * data);\n", - "void var()\n", - "{\n", - " twoIntsStruct * data;\n", - " data = NULL;\n", - " data = (twoIntsS...\n", - "Similar test sample found (idx: 444, similarity: 0.38)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef _WIN32\n", - "#include \n", - "#endif\n", - "#define SRC_STRING L\"AAAAAAAAAA\"\n", - "#ifndef OMITBAD\n", - "void var(wchar_t * data);\n", - "void var...\n", - "Similar test sample found (idx: 450, similarity: 0.40)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(char data);\n", - "void var()\n", - "{\n", - " char data;\n", - " data = ' ';\n", - " data = (char)RAND32();\n", - " var(data);\n", - "}...\n", - "Similar test sample found (idx: 464, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int * data);\n", - "void var()\n", - "{\n", - " int * data;\n", - " int * dataBadBuffer = (int *)ALLOCA(50*sizeof(int));\n", - "...\n", - "Similar test sample found (idx: 468, similarity: 0.33)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " int data;\n", - " data = 0;\n", - " goto source;\n", - "source:\n", - " data = RAND32();\n", - " goto sink;\n", - "sink:\n", - "...\n", - "Similar test sample found (idx: 473, similarity: 0.32)\n", - "Test sample preview: #include \"std_testcase.h\"\n", - "typedef struct _CWE122_Heap_Based_Buffer_Overflow__CWE131_memmove_67_structType\n", - "{\n", - " int * structFirst;\n", - "} var;\n", - "#ifndef OMIT...\n", - "\n", - "CWE Distribution Analysis:\n", - "\n", - "Samples per CWE type (Train):\n", - "CWE191: 320 samples\n", - "CWE190: 320 samples\n", - "CWE122: 320 samples\n", - "CWE78: 320 samples\n", - "CWE121: 320 samples\n", - "none: 320 samples\n", - "\n", - "Code Length Statistics:\n", - "Train - Mean: 1460.5, Min: 39, Max: 11019\n", - "Test - Mean: 1365.1, Min: 39, Max: 10949\n" - ] - } - ], - "source": [ - "# Analysis Imports\n", - "import pandas as pd\n", - "from collections import defaultdict\n", - "from difflib import SequenceMatcher\n", - "import numpy as np\n", - "\n", - "print(\"Analyzing code samples and data distribution...\")\n", - "\n", - "# Sample Analysis\n", - "print(\"\\nSample Code Analysis:\")\n", - "for i in range(5):\n", - " print(f\"\\nTrain Example {i}:\")\n", - " print(f\"Code Preview: {train_samples[i].code[:150]}...\")\n", - " print(f\"Label: {train_samples[i].label}\")\n", - " print(f\"CWE: {train_samples[i].cwe}\")\n", - "\n", - " # Find similar test samples\n", - " similar_found = False\n", - " for j, test_sample in enumerate(test_samples):\n", - " similarity = SequenceMatcher(None,\n", - " train_samples[i].processed_code.lower(),\n", - " test_sample.processed_code.lower()).ratio()\n", - " if similarity > 0.3: # Lower threshold for debugging\n", - " print(f\"Similar test sample found (idx: {j}, similarity: {similarity:.2f})\")\n", - " print(f\"Test sample preview: {test_sample.code[:150]}...\")\n", - " similar_found = True\n", - " if not similar_found:\n", - " print(\"No similar test samples found\")\n", - "\n", - "# CWE Distribution Analysis\n", - "print(\"\\nCWE Distribution Analysis:\")\n", - "cwe_groups = defaultdict(list)\n", - "for idx, sample in enumerate(train_samples):\n", - " cwe_groups[sample.cwe].append(idx)\n", - "\n", - "print(\"\\nSamples per CWE type (Train):\")\n", - "for cwe, indices in cwe_groups.items():\n", - " print(f\"{cwe}: {len(indices)} samples\")\n", - "\n", - "# Code Length Analysis\n", - "train_lengths = [len(s.code) for s in train_samples]\n", - "test_lengths = [len(s.code) for s in test_samples]\n", - "\n", - "print(\"\\nCode Length Statistics:\")\n", - "print(\"Train - Mean: {:.1f}, Min: {}, Max: {}\".format(\n", - " np.mean(train_lengths), min(train_lengths), max(train_lengths)))\n", - "print(\"Test - Mean: {:.1f}, Min: {}, Max: {}\".format(\n", - " np.mean(test_lengths), min(test_lengths), max(test_lengths)))" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "0f99f172", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 646, - "referenced_widgets": [ - "1dd7763001494fefac086d1ff755d938", - "551ee3ccd3a54faaacef1990b31d8604", - "c75e02b810f24f1c89e9f200ca03625b", - "da29cb98c9d04203ab68fb7b2fa9a1b3", - "eec60a22260c41738ea13b37ff80721d", - "3036b81f7bb1432f98a386c67b022c61", - "94aa6aa7c40b4de593a576d05847d455", - "d63f0b01bd214452ac76c67cbfd0c973", - "10a40f32ef66474d851aeabc0b1e2919", - "18097ff5b4bb47a3a432a201af41b8ab", - "1bf578f733084a699567659b5a6c090c" - ] - }, - "id": "0f99f172", - "outputId": "a755bb62-e933-440c-bd7c-73ee5dc111e6" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Running detailed model analysis...\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "Analyzing predictions: 0%| | 0/120 [00:00 CWE190: 25 instances\n", - "CWE122 -> CWE121: 24 instances\n", - "CWE190 -> CWE191: 20 instances\n", - "CWE121 -> CWE122: 5 instances\n", - "CWE122 -> CWE190: 3 instances\n", - "CWE122 -> CWE191: 1 instances\n", - "CWE121 -> CWE191: 1 instances\n", - "CWE121 -> CWE190: 1 instances\n", - "CWE122 -> CWE78: 1 instances\n", - "CWE121 -> CWE78: 1 instances\n" - ] - } - ], - "source": [ - "def analyze_model_predictions(model, test_loader, cwe_classes):\n", - " \"\"\"Detailed analysis of model predictions\"\"\"\n", - " model.eval()\n", - " all_preds = []\n", - " all_labels = []\n", - " all_probs = []\n", - " mistakes = defaultdict(list)\n", - "\n", - " with torch.no_grad():\n", - " for batch in tqdm(test_loader, desc='Analyzing predictions'):\n", - " inputs = {k: v.to(device) for k, v in batch.items()}\n", - " labels = inputs.pop('labels')\n", - "\n", - " outputs, _ = model(**inputs)\n", - " probs = torch.softmax(outputs, dim=1)\n", - " preds = outputs.argmax(dim=1)\n", - "\n", - " # Store predictions and true labels\n", - " all_preds.extend(preds.cpu().numpy())\n", - " all_labels.extend(labels.cpu().numpy())\n", - " all_probs.extend(probs.cpu().numpy())\n", - "\n", - " # Track mistakes\n", - " for i, (pred, true) in enumerate(zip(preds, labels)):\n", - " if pred != true:\n", - " mistakes[f'{cwe_classes[true.item()]} -> {cwe_classes[pred.item()]}'].append({\n", - " 'true': true.item(),\n", - " 'pred': pred.item(),\n", - " 'probs': probs[i].cpu().numpy()\n", - " })\n", - "\n", - " # Convert to numpy arrays\n", - " all_preds = np.array(all_preds)\n", - " all_labels = np.array(all_labels)\n", - " all_probs = np.array(all_probs)\n", - "\n", - " # Compute metrics\n", - " accuracy = accuracy_score(all_labels, all_preds)\n", - " macro_f1 = f1_score(all_labels, all_preds, average='macro')\n", - " class_f1 = f1_score(all_labels, all_preds, average=None)\n", - " conf_mat = confusion_matrix(all_labels, all_preds)\n", - "\n", - " # Print results\n", - " print('\\nModel Performance Analysis:')\n", - " print(f'Overall Accuracy: {accuracy:.4f}')\n", - " print(f'Macro F1: {macro_f1:.4f}\\n')\n", - "\n", - " print('Per-class F1 scores:')\n", - " for i, f1 in enumerate(class_f1):\n", - " print(f'{cwe_classes[i]}: {f1:.4f}')\n", - "\n", - " print('\\nConfusion Matrix:')\n", - " print(conf_mat)\n", - "\n", - " print('\\nCommon misclassifications:')\n", - " for error_type, error_list in sorted(mistakes.items(), key=lambda x: len(x[1]), reverse=True):\n", - " print(f'{error_type}: {len(error_list)} instances')\n", - "\n", - " return all_preds, all_labels, all_probs, mistakes\n", - "\n", - "# Run detailed analysis\n", - "print(\"Running detailed model analysis...\")\n", - "all_preds, all_labels, all_probs, mistakes = analyze_model_predictions(\n", - " model, trainer.test_loader, dataset.cwe_classes\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "6eafd8c0", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 - }, - "id": "6eafd8c0", - "outputId": "827efacb-9fb9-4506-bb0c-0754e7528239" - }, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdMAAASlCAYAAABDZEBUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8Tff/wPHXzR4kQUJEgwwxYlObCCFmzSpqj1JatWq0RtDU3rttYs9SqrS2tFTEDBp7F4kiZO+c3x/55X5dN1MSN+H9fDzO49H7OZ/zOe9zWnru+37O+6NSFEVBCCGEEEIIIYQQQgghhBDp0tN1AEIIIYQQQgghhBBCCCFEfifJdCGEEEIIIYQQQgghhBAiE5JMF0IIIYQQQgghhBBCCCEyIcl0IYQQQgghhBBCCCGEECITkkwXQgghhBBCCCGEEEIIITIhyXQhhBBCCCGEEEIIIYQQIhOSTBdCCCGEEEIIIYQQQgghMiHJdCGEEEIIIYQQQgghhBAiE5JMF0IIIYQQQgghhBBCCCEyIcl0Id4jN2/epGXLllhaWqJSqdi9e3eujn/v3j1UKhVr167N1XELsqZNm9K0aVNdhyGEEEIIId5z/fr1o2zZsroOQwghhCjQJJkuxFt2+/ZthgwZgqOjIyYmJlhYWNCwYUMWL15MTExMnp67b9++XL58GW9vbzZs2EDt2rXz9HxvU79+/VCpVFhYWKR5H2/evIlKpUKlUjFv3rxsj//48WO8vLwIDAzMhWiFEEIIITK2du1a9bOLSqXCwMCAUqVK0a9fPx49epTmMYqisGHDBpo0aYKVlRVmZmZUqVKF6dOnExUVle65du3aRevWrbG2tsbIyAg7Ozu6devG0aNHsxRrbGwsCxcupG7dulhaWmJiYoKLiwtffPEFN27ceKPrF1kXHh7OtGnTqFatGoUKFcLU1JTKlSszfvx4Hj9+rOvwhBBCiHeKga4DEOJ9sm/fPj7++GOMjY3p06cPlStXJj4+nhMnTvD1118TFBTEDz/8kCfnjomJwd/fn2+//ZYvvvgiT85RpkwZYmJiMDQ0zJPxM2NgYEB0dDS//fYb3bp109i3adMmTExMiI2NfaOxHz9+zLRp0yhbtizVq1fP8nEHDx58o/MJIYQQQgBMnz4dBwcHYmNjOXXqFGvXruXEiRP8888/mJiYqPslJSXRs2dPtm/fTuPGjfHy8sLMzIzjx48zbdo0fv75Zw4fPkyJEiXUxyiKwoABA1i7di01atRg9OjR2NraEhwczK5du2jevDl///03DRo0SDe+Z8+e0apVK86dO0e7du3o2bMnhQoV4vr162zdupUffviB+Pj4PL1H77M7d+7g4eHBgwcP+Pjjj/nss88wMjLi0qVL+Pj4sGvXLvlBQwghhMhFkkwX4i25e/cu3bt3p0yZMhw9epSSJUuq9w0fPpxbt26xb9++PDv/06dPAbCyssqzc6hUKo0vdW+bsbExDRs2ZMuWLVrJ9M2bN9O2bVt27tz5VmKJjo7GzMwMIyOjt3I+IYQQQrybWrdurX6bcNCgQVhbWzN79mz27Nmj8bwzZ84ctm/fztixY5k7d666/bPPPqNbt2507NiRfv368ccff6j3zZ8/n7Vr1zJy5EgWLFiASqVS7/v222/ZsGEDBgYZf2Xs168fFy5cYMeOHXTp0kVj34wZM/j2229zdP2pEhMTSU5Ofu+eraKiojA3N09zX2JiIp07d+bJkyf4+fnRqFEjjf3e3t7Mnj37bYQphBBCvDekzIsQb8mcOXOIjIzEx8dHI5GeytnZma+++kr9OTExkRkzZuDk5ISxsTFly5blm2++IS4uTuO4smXL0q5dO06cOEGdOnUwMTHB0dGR9evXq/t4eXlRpkwZAL7++mtUKpW6XmJ6tRO9vLw0vlABHDp0iEaNGmFlZUWhQoUoX74833zzjXp/ejXTjx49SuPGjTE3N8fKyooOHTpw9erVNM9369Yt+vXrh5WVFZaWlvTv35/o6Oj0b+xrevbsyR9//MHLly/VbWfOnOHmzZv07NlTq39oaChjx46lSpUqFCpUCAsLC1q3bs3FixfVffz8/Pjwww8B6N+/v/p169TrbNq0KZUrV+bcuXM0adIEMzMz9X15vWZ63759MTEx0bp+T09PihQpIq/iCiGEECJDjRs3BlJKB6aKiYlh7ty5uLi4MHPmTK1j2rdvT9++fdm/fz+nTp1SHzNz5kwqVKjAvHnztJ77AHr37k2dOnXSjSUgIIB9+/YxcOBArUQ6pEx0eLW8Xnprybz+PJr6TDlv3jwWLVqkfh6+cOECBgYGTJs2TWuM69evo1KpWLZsmbrt5cuXjBw5Ent7e4yNjXF2dmb27NkkJydrHLt161Zq1apF4cKFsbCwoEqVKixevDjd6349xoULF1KmTBlMTU1xc3Pjn3/+0ep/7do1unbtStGiRTExMaF27drs2bNHo09qaZ8///yTYcOGUbx4cT744IN0Y9i5cycXL17k22+/1UqkA1hYWODt7Z3hdcybN48GDRpQrFgxTE1NqVWrFjt27NDql9n3AIClS5fi6uqKmZkZRYoUoXbt2mzevDnD8wshhBAFjcxMF+It+e2333B0dMzwNdlXDRo0iHXr1tG1a1fGjBlDQEAAM2fO5OrVq+zatUuj761bt+jatSsDBw6kb9+++Pr60q9fP2rVqoWrqyudO3fGysqKUaNG0aNHD9q0aUOhQoWyFX9QUBDt2rWjatWqTJ8+HWNjY27dusXff/+d4XGHDx+mdevWODo64uXlRUxMDEuXLqVhw4acP39eK5HfrVs3HBwcmDlzJufPn+enn36iePHiWZ5V07lzZ4YOHcovv/zCgAEDgJRZ6RUqVKBmzZpa/e/cucPu3bv5+OOPcXBw4MmTJ6xevRo3NzeuXLmCnZ0dFStWZPr06UyZMoXPPvtM/SX21X+Xz58/p3Xr1nTv3p1evXppvEL9qsWLF3P06FH69u2Lv78/+vr6rF69moMHD7Jhwwbs7OyydJ1CCCGEeD/du3cPgCJFiqjbTpw4wYsXL/jqq6/SnUnep08f1qxZw969e6lXrx4nTpwgNDSUkSNHoq+v/0axpCaDe/fu/UbHZ2bNmjXExsby2WefYWxsTMmSJXFzc2P79u1MnTpVo++2bdvQ19fn448/BlLeEnRzc+PRo0cMGTKE0qVLc/LkSSZOnEhwcDCLFi0CUpLEPXr0oHnz5urnzatXr/L3339rTHRJz/r164mIiGD48OHExsayePFimjVrxuXLl9XPg0FBQTRs2JBSpUoxYcIEzM3N2b59Ox07dmTnzp106tRJY8xhw4ZhY2PDlClTMqx1nxv3f/HixXz00Ud8+umnxMfHs3XrVj7++GP27t1L27Zt1fFn9j3gxx9/ZMSIEXTt2pWvvvqK2NhYLl26REBAQJoTWoQQQogCSxFC5LmwsDAFUDp06JCl/oGBgQqgDBo0SKN97NixCqAcPXpU3VamTBkFUP766y9123///acYGxsrY8aMUbfdvXtXAZS5c+dqjNm3b1+lTJkyWjFMnTpVefWviIULFyqA8vTp03TjTj3HmjVr1G3Vq1dXihcvrjx//lzddvHiRUVPT0/p06eP1vkGDBigMWanTp2UYsWKpXvOV6/D3NxcURRF6dq1q9K8eXNFURQlKSlJsbW1VaZNm5bmPYiNjVWSkpK0rsPY2FiZPn26uu3MmTNa15bKzc1NAZRVq1aluc/NzU2j7cCBAwqgfPfdd8qdO3eUQoUKKR07dsz0GoUQQgjx/lizZo0CKIcPH1aePn2q/Pvvv8qOHTsUGxsbxdjYWPn333/VfRctWqQAyq5du9IdLzQ0VAGUzp07K4qiKIsXL870mMx06tRJAZQXL15kqX9az0WKov08mvrMZmFhofz3338afVevXq0AyuXLlzXaK1WqpDRr1kz9ecaMGYq5ubly48YNjX4TJkxQ9PX1lQcPHiiKoihfffWVYmFhoSQmJmbpGl6P0dTUVHn48KG6PSAgQAGUUaNGqduaN2+uVKlSRYmNjVW3JScnKw0aNFDKlSunbkv9d96oUaMsxVOjRg3F0tIyyzGn9dwfHR2t8Tk+Pl6pXLmyxr3MyveADh06KK6urlmORQghhCiopMyLEG9BeHg4AIULF85S/99//x2A0aNHa7SPGTMGQKu2eqVKldSzpQFsbGwoX748d+7ceeOYX5daa/3XX3/VejU2PcHBwQQGBtKvXz+KFi2qbq9atSotWrRQX+erhg4dqvG5cePGPH/+XH0Ps6Jnz574+fkREhLC0aNHCQkJSXdGjLGxMXp6KX8VJiUl8fz5c/Wrq+fPn8/yOY2Njenfv3+W+rZs2ZIhQ4Ywffp0OnfujImJCatXr87yuYQQQgjx/vDw8MDGxgZ7e3u6du2Kubk5e/bs0Sj/ERERAWT8rJm6L/WZKrvPp2nJjTEy0qVLF2xsbDTaOnfujIGBAdu2bVO3/fPPP1y5coVPPvlE3fbzzz/TuHFjihQpwrNnz9Sbh4cHSUlJ/PXXX0DKM25UVBSHDh16oxg7duxIqVKl1J/r1KlD3bp11c+5oaGhHD16lG7duhEREaGO4/nz53h6enLz5k0ePXqkMebgwYOz9LZAeHh4ju+9qamp+p9fvHhBWFgYjRs31ngOzsr3ACsrKx4+fMiZM2dyFI8QQgiR30kyXYi3wMLCAvjfF53M3L9/Hz09PZydnTXabW1tsbKy4v79+xrtpUuX1hqjSJEivHjx4g0j1vbJJ5/QsGFDBg0aRIkSJejevTvbt2/PMLGeGmf58uW19lWsWJFnz55pvbr6+rWkvsKcnWtp06YNhQsXZtu2bWzatIkPP/xQ616mSk5OZuHChZQrVw5jY2Osra2xsbHh0qVLhIWFZfmcpUqVytaCWPPmzaNo0aIEBgayZMkSihcvnuVjhRBCCPH+WL58OYcOHWLHjh20adOGZ8+eYWxsrNEnNaGa0bPm6wn37D6fpiU3xsiIg4ODVpu1tTXNmzdn+/bt6rZt27ZhYGBA586d1W03b95k//792NjYaGweHh4A/Pfff0BKSRUXFxdat27NBx98wIABA9i/f3+WYyxXrpxWm4uLi7ocz61bt1AUhcmTJ2vFklqqJjWWjK47LRYWFjm+96llf0xMTChatCg2NjasXLlS4zk4K98Dxo8fT6FChahTpw7lypVj+PDhmZaDFEIIIQoiSaYL8RZYWFhgZ2eX5mJEGUlrIai0pDdzRVGUNz5HUlKSxmdTU1P++usvDh8+TO/evbl06RKffPIJLVq00OqbEzm5llTGxsZ07tyZdevWsWvXrgzrNH7//feMHj2aJk2asHHjRg4cOMChQ4dwdXXN8gx80JzVkxUXLlxQf3G6fPlyto4VQgghxPujTp06eHh40KVLF/bs2UPlypXp2bMnkZGR6j4VK1YE4NKlS+mOk7qvUqVKAFSoUAHI2XNIdsfI6nNnqvSer7p3786NGzcIDAwEYPv27TRv3hxra2t1n+TkZFq0aMGhQ4fS3FIXTC1evDiBgYHs2bOHjz76iGPHjtG6dWv69u2bpWvKTOrz5NixY9ON5fVJH1l9rqxQoQJhYWH8+++/bxTb8ePH+eijjzAxMWHFihX8/vvvHDp0iJ49e2o8e2fle0DFihW5fv06W7dupVGjRuzcuZNGjRpp1bYXQgghCjpJpgvxlrRr147bt2/j7++fad8yZcqQnJzMzZs3NdqfPHnCy5cvKVOmTK7FVaRIEV6+fKnV/vrsdwA9PT2aN2/OggULuHLlCt7e3hw9epRjx46lOXZqnNevX9fad+3aNaytrTE3N8/ZBaSjZ8+eXLhwgYiICLp3755uvx07duDu7o6Pjw/du3enZcuWeHh4aN2TrP6wkRVRUVH079+fSpUq8dlnnzFnzhx5JVYIIYQQmdLX12fmzJk8fvyYZcuWqdsbNWqElZUVmzdvTjcxvX79eiDlmTT1mCJFirBly5Y3nhjRvn17ADZu3Jil/tl57sxIx44dMTIyYtu2bQQGBnLjxg2t5z0nJyciIyPx8PBIc3v1bUgjIyPat2/PihUruH37NkOGDGH9+vXcunUr01hef14HuHHjBmXLlgXA0dERAENDw3RjedNSLdm9/6/buXMnJiYmHDhwgAEDBtC6dWv1zP3XZeV7gLm5OZ988glr1qzhwYMHtG3bFm9vb2JjY98oPiGEECI/kmS6EG/JuHHjMDc3Z9CgQTx58kRr/+3bt1m8eDGQUqYEYNGiRRp9FixYAEDbtm1zLS4nJyfCwsI0ZjIFBweza9cujX6hoaFax1avXh2AuLi4NMcuWbIk1atXZ926dRpfnP755x8OHjyovs684O7uzowZM1i2bBm2trbp9tPX19ea9f7zzz9r1a5MTfqn9QUwu8aPH8+DBw9Yt24dCxYsoGzZsvTt2zfd+yiEEEIIkapp06bUqVOHRYsWqZOUZmZmjB07luvXr/Ptt99qHbNv3z7Wrl2Lp6cn9erVUx8zfvx4rl69yvjx49N8C3Djxo2cPn063Vjq169Pq1at+Omnn9i9e7fW/vj4eMaOHav+7OTkxLVr13j69Km67eLFi9kuB2JlZYWnpyfbt29n69atGBkZ0bFjR40+3bp1w9/fnwMHDmgd//LlSxITEwF4/vy5xj49PT2qVq0KpP+M+6rdu3drPDeePn2agIAAWrduDaTMfG/atCmrV68mODhY6/hX70V2de3alSpVquDt7Z3mhJ2IiIg0/3tIpa+vj0ql0vgx5d69e1r/LrPyPeD1+2hkZESlSpVQFIWEhISsXpIQQgiR7xnoOgAh3hdOTk5s3ryZTz75hIoVK9KnTx8qV65MfHw8J0+e5Oeff6Zfv34AVKtWjb59+/LDDz/w8uVL3NzcOH36NOvWraNjx464u7vnWlzdu3dn/PjxdOrUiREjRhAdHc3KlStxcXHRWHho+vTp/PXXX7Rt25YyZcrw33//sWLFCj744AMaNWqU7vhz586ldevW1K9fn4EDBxITE8PSpUuxtLTEy8sr167jdXp6ekyaNCnTfu3atWP69On079+fBg0acPnyZTZt2qSeRZTKyckJKysrVq1aReHChTE3N6du3bpZrmmZ6ujRo6xYsYKpU6dSs2ZNANasWUPTpk2ZPHkyc+bMydZ4QgghhHj/fP3113z88cesXbtWvXj7hAkTuHDhArNnz8bf358uXbpgamrKiRMn2LhxIxUrVmTdunVa4wQFBTF//nyOHTtG165dsbW1JSQkhN27d3P69GlOnjyZYSzr16+nZcuWdO7cmfbt29O8eXPMzc25efMmW7duJTg4mHnz5gEwYMAAFixYgKenJwMHDuS///5j1apVuLq6ZmuxeUip492rVy9WrFiBp6enepHMV69tz549tGvXjn79+lGrVi2ioqK4fPkyO3bs4N69e1hbWzNo0CBCQ0Np1qwZH3zwAffv32fp0qVUr15dXT4nI87OzjRq1IjPP/+cuLg4Fi1aRLFixRg3bpy6z/Lly2nUqBFVqlRh8ODBODo68uTJE/z9/Xn48CEXL17M1rWnMjQ05JdffsHDw4MmTZrQrVs3GjZsiKGhIUFBQWzevJkiRYrg7e2d5vFt27ZlwYIFtGrVip49e/Lff/+xfPlynJ2dNSbaZOV7QMuWLbG1taVhw4aUKFGCq1evsmzZMtq2bZtnC9QKIYQQOqEIId6qGzduKIMHD1bKli2rGBkZKYULF1YaNmyoLF26VImNjVX3S0hIUKZNm6Y4ODgohoaGir29vTJx4kSNPoqiKGXKlFHatm2rdR43NzfFzc1N/fnu3bsKoMydO1er78GDB5XKlSsrRkZGSvny5ZWNGzcqU6dOVV79K+LIkSNKhw4dFDs7O8XIyEixs7NTevToody4cUPrHGvWrNEY//Dhw0rDhg0VU1NTxcLCQmnfvr1y5coVjT6p53v69KlG+5o1axRAuXv3brr3VFEUpW/fvoq5uXmGfdK6B7GxscqYMWOUkiVLKqampkrDhg0Vf39/rfunKIry66+/KpUqVVIMDAw0rtPNzU1xdXVN85yvjhMeHq6UKVNGqVmzppKQkKDRb9SoUYqenp7i7++f4TUIIYQQ4v2Q+gx05swZrX1JSUmKk5OT4uTkpCQmJmq0r1mzRmnYsKFiYWGhmJiYKK6ursq0adOUyMjIdM+1Y8cOpWXLlkrRokUVAwMDpWTJksonn3yi+Pn5ZSnW6OhoZd68ecqHH36oFCpUSDEyMlLKlSunfPnll8qtW7c0+m7cuFFxdHRUjIyMlOrVqysHDhxQ+vbtq5QpU0bdJ6Pn1lTh4eGKqampAigbN25Ms09ERIQyceJExdnZWTEyMlKsra2VBg0aKPPmzVPi4+M1rr148eKKkZGRUrp0aWXIkCFKcHBwhtf8aozz589X7O3tFWNjY6Vx48bKxYsXtfrfvn1b6dOnj2Jra6sYGhoqpUqVUtq1a6fs2LFD3Sejf+cZefHihTJlyhSlSpUqipmZmWJiYqJUrlxZmThxosZ1vH6fFUVRfHx8lHLlyinGxsZKhQoVlDVr1rzR94DVq1crTZo0UYoVK6YYGxsrTk5Oytdff62EhYVl61qEEEKI/E6lKNlY1U8IIYQQQgghhHjP3bt3DwcHB+bOnatRykYIIYQQ7zapmS6EEEIIIYQQQgghhBBCZEKS6UIIIYQQQgghhBBCCCFEJiSZLoQQQgghhBBCCCGEEEJkQpLpQgghhHivJCUlMXnyZBwcHDA1NcXJyYkZM2bw6jIyiqIwZcoUSpYsiampKR4eHty8eVOHUQshhMhPypYti6IoUi9dCCGEeM9IMl0IIYQQ75XZs2ezcuVKli1bxtWrV5k9ezZz5sxh6dKl6j5z5sxhyZIlrFq1ioCAAMzNzfH09CQ2NlaHkQshhBBCCCGE0CWV8uo0LCGEEEKIAiguLo64uDiNNmNjY4yNjbX6tmvXjhIlSuDj46Nu69KlC6ampmzcuBFFUbCzs2PMmDHqGYdhYWGUKFGCtWvX0r1797y9GKElOTmZx48fU7hwYVQqla7DEUIIIYRIk6IoREREYGdnh56ezF8V4l1koOsA8gvTtkt0HUKB8HzXl7oOQYj3UlR8kq5DKBAKm8j/1rLibd8m0xpf5Pk5xnewZtq0aRptU6dOxcvLS6tvgwYN+OGHH7hx4wYuLi5cvHiREydOsGDBAgDu3r1LSEgIHh4e6mMsLS2pW7cu/v7+kkzXgcePH2Nvb6/rMIQQQgghsuTff//lgw8+0HUYQog8IFkHIYQQQhR4EydOZPTo0Rptac1KB5gwYQLh4eFUqFABfX19kpKS8Pb25tNPPwUgJCQEgBIlSmgcV6JECfU+8XYVLlwYSPliamFhoeNohBBCCCHSFh4ejr29vfrZRQjx7pFkuhBCCCHylirvX3FNr6RLWrZv386mTZvYvHkzrq6uBAYGMnLkSOzs7Ojbt28eRyreRGppFwsLC0mmCyGEECLfk7J0Qry7JJkuhBBCiPfK119/zYQJE9TlWqpUqcL9+/eZOXMmffv2xdbWFoAnT55QsmRJ9XFPnjyhevXqughZCCGEEEIIIUQ+IKshCCGEECJvqVR5v2VDdHS01oJQ+vr6JCcnA+Dg4ICtrS1HjhxR7w8PDycgIID69evn/H4IIYQQQgghhCiQZGa6EEIIId4r7du3x9vbm9KlS+Pq6sqFCxdYsGABAwYMAFJeyx05ciTfffcd5cqVw8HBgcmTJ2NnZ0fHjh11G7wQQgghhBBCCJ2RZLoQQggh8tZbqJmeHUuXLmXy5MkMGzaM//77Dzs7O4YMGcKUKVPUfcaNG0dUVBSfffYZL1++pFGjRuzfvx8TExMdRi6EEEIIIUT2JCcnEx8fr+swhMjXjIyMtN5eTo9KURQlj+MpEEzbLtF1CAXC811f6joEId5LUfFJug6hQChsIr8RZ8Xbvk2mtUfl+Tlizi7M83MI3QkPD8fS0pKwsDBZgFQIIYQQ+VZ+e2aJj4/n7t276nKGQoi06enp4eDggJGRUaZ9JesghBBCiLyVzZrmQgghhBBCiJxRFIXg4GD09fWxt7fP8qxbId43ycnJPH78mODgYEqXLo0qk++vkkwXQgghhBBCCCGEEOIdkpiYSHR0NHZ2dpiZmek6HCHyNRsbGx4/fkxiYiKGhoYZ9pVkuhBCCCHyVj6rmS6EEEIIIcS7LikppVRoVspWCPG+S/1zkpSUlGkyXb7dCiGEEEIIIYQQQgjxDsqsZIUQInt/TmRmuhBCCCHyljzACyGEEEIIIYR4B8jMdCGEEEIIIYQQQgghhBAiE5JMF0IIIUTeUunl/SaEEEIIIYQQBVx8fDzOzs6cPHlS16G8M1atWkX79u1zbTz59imEEEIIIYQQQgghhMgXQkJC+PLLL3F0dMTY2Bh7e3vat2/PkSNHAOjevTutWrXSOGb//v2oVCq8vLw02r28vChdujQA9+7dQ6VSpbmdOnUKgODgYHr27ImLiwt6enqMHDlSK74ff/yRxo0bU6RIEYoUKYKHhwenT5/W6PPLL7/QsmVLihUrhkqlIjAwMEvXvmrVKhwcHGjQoIHWviFDhqCvr8/PP/+sta9fv3507NhRq93Pzw+VSsXLly/VbfHx8cyZM4dq1aphZmaGtbU1DRs2ZM2aNSQkJGQpzjdx6dIlGjdujImJCfb29syZMyfTY44cOUKDBg0oXLgwtra2jB8/nsTERI0+Bw4coF69ehQuXBgbGxu6dOnCvXv31PsHDBjA+fPnOX78eK5cxzuVTH/y5AnTp0/XdRhCCCGEeJVKlfebEEIIIYQQosC7d+8etWrV4ujRo8ydO5fLly+zf/9+3N3dGT58OADu7u78/fffGknVY8eOYW9vj5+fn8Z4x44dw93dXaPt8OHDBAcHa2y1atUCIC4uDhsbGyZNmkS1atXSjNHPz48ePXpw7Ngx/P39sbe3p2XLljx69EjdJyoqikaNGjF79uwsX7uiKCxbtoyBAwdq7YuOjmbr1q2MGzcOX1/fLI/5uvj4eDw9PZk1axafffYZJ0+e5PTp0wwfPpylS5cSFBT0xmNnJDw8nJYtW1KmTBnOnTvH3Llz8fLy4ocffkj3mIsXL9KmTRtatWrFhQsX2LZtG3v27GHChAnqPnfv3qVDhw40a9aMwMBADhw4wLNnz+jcubO6j5GRET179mTJkiW5ci3v1AKkISEhTJs2jSlTpug6FCGEEEIIIYQQQggh8gVFUYhJSNLJuU0N9VFlcQLMsGHDUKlUnD59GnNzc3W7q6srAwYMAFKS6ZGRkZw9e5Z69eoBKQnuCRMmMGbMGGJjYzExMSE2NpaAgAD69++vcY5ixYpha2ub5vnLli3L4sWLAdJNWm/atEnj808//cTOnTs5cuQIffr0AaB3794AGjOkM3Pu3Dlu375N27Zttfb9/PPPVKpUiQkTJmBnZ8e///6Lvb19lsdOtWjRIv766y/Onj1LjRo11O2Ojo58/PHHxMfHZ3vMrNi0aRPx8fH4+vpiZGSEq6srgYGBLFiwgM8++yzNY7Zt20bVqlXVeV5nZ2fmzJlDt27dmDp1KoULF+bcuXMkJSXx3XffoaeXMmd87NixdOjQgYSEBAwNDQFo3749LVq0ICYmBlNT0xxdS4FKpl+6dCnD/devX39LkQghhBAiy6SmuRBCCCGEEDoVk5BEpSkHdHLuK9M9MTPKPAUZGhrK/v378fb21kikp7KysgLAxcUFOzs7jh07Rr169YiIiOD8+fPs3buXpUuX4u/vj7u7OydPniQuLk5rZnpui46OJiEhgaJFi+ZonOPHj+Pi4kLhwoW19vn4+NCrVy8sLS1p3bo1a9euZfLkydk+x6ZNm/Dw8NBIpKcyNDRUJ59f9+DBAypVqpTh2N988w3ffPNNmvv8/f1p0qQJRkZG6jZPT09mz57NixcvKFKkiNYxcXFxmJiYaLSZmpoSGxvLuXPnaNq0KbVq1UJPT481a9bQr18/IiMj2bBhAx4eHhrXUrt2bRITEwkICKBp06YZXkdmCtS32+rVq1OjRg2qV6+utdWoUYPu3bvrOkQhhBBCiHfaX3/9Rfv27bGzs0OlUrF79+5Mj/Hz86NmzZoYGxvj7OzM2rVr8zxOIYQQQghRsNy6dQtFUahQoUKmfd3d3dUlXVKT0DY2NjRp0kTd7ufnh4ODA2XKlNE4tkGDBhQqVEhjy4nx48djZ2eHh4dHjsa5f/8+dnZ2Wu03b97k1KlTfPLJJwD06tWLNWvWoChKts9x8+bNLN3f19nZ2REYGJjhNnTo0HSPDwkJoUSJEhptqZ9DQkLSPMbT05OTJ0+yZcsWkpKSePTokbq8d3BwMAAODg4cPHiQb775BmNjY6ysrHj48CHbt2/XGMvMzAxLS0vu37+f7Wt/XYGamV60aFHmzJlD8+bN09wfFBSUq6uzCiGEECIXSE3zd0pUVBTVqlVjwIABGrUI03P37l3atm3L0KFD2bRpE0eOHGHQoEGULFkST0/PtxCxEEIIIYQwNdTnynTdPHuZGupnqV92ksNNmzZl5MiRJCQk4Ofnp55t7ObmxurVq4GUZHpas9K3bdtGxYoVs3yujMyaNYutW7fi5+enNYs6u2JiYtIcw9fXF09PT6ytrQFo06YNAwcO5OjRo+nmSNPzJgl4AAMDA5ydnd/o2DfVsmVL5s6dy9ChQ+nduzfGxsZMnjyZ48ePq0u6hISEMHjwYPr27UuPHj2IiIhgypQpdO3alUOHDmmUFzI1NSU6OjrHcRWoZHqtWrV4/Pix1i9KqV6+fPnG/1EIIYQQQojMtW7dmtatW2e5/6pVq3BwcGD+/PkAVKxYkRMnTrBw4cJ8lUxXFIXEuDhIToZHpyEuUtchvRXP4sO5Fv1Y12G8MVVMPIa3nkA+/AqgKCqiIouQnJy1BEJei01M0lmtXCGE0DVFUVCpVBSxL0mrQUOzXL/7XaJSqbJUakWXypUrh0ql4tq1a5n2dXd3JyoqijNnznDs2DG+/vprICWZPmDAAEJDQwkICGDIkCFax9rb2+dKYnjevHnMmjWLw4cPU7Vq1RyPZ21tzeXLlzXakpKSWLduHSEhIRgYGGi0+/r6qpPpFhYWac66fvnyJfr6+uqyOS4uLlm6v6/LaZkXW1tbnjx5otGW+jm9+vUAo0ePZtSoUQQHB1OkSBHu3bvHxIkTcXR0BGD58uVYWloyZ84c9TEbN27E3t6egIAAdU19SCkjZGNjk/GFZkH+/lP0mqFDhxIVFZXu/tKlS7NmzZq3GJEQQgghMiU1099r/v7+Wq+8enp6MnLkyHSPiYuLIy4uTv05PDw8r8IDUr5gb50yjsc3rubpeYQQQgjx9sUlJrL5VCDVS5ekRulSePTuj2EOZxCLvFG0aFE8PT1Zvnw5I0aM0Kqb/vLlS3XddCcnJ+zt7dmzZw+BgYG4ubkBUKpUKUqVKsX8+fOJj4/Ps3rpc+bMwdvbmwMHDlC7du1cGbNGjRqsXLlS/eMPwO+//05ERAQXLlxAX/9/P9D/888/9O/fX31Pypcvz9atW4mLi8PY2Fjd7/z58zg4OKjrh/fs2ZNvvvmGCxcuaNVNT0hIID4+Ps169allXjKSUc34+vXr8+2332osCnro0CHKly+fZr30V6lUKnX5my1btmBvb0/NmjWBlHr1qbPUU6Xep+TkZHXb7du3iY2NTbNWfHYVqG+3nTp1olevXunuL1KkCH379n2LEQkhhBAiUypV3m8i30qvPmJ4eDgxMTFpHjNz5kwsLS3Vm729fZ7GmBgXJ4l0IYQQ4h0UE5/AKr8Agh4/Yee5f4iJT9B1SCITy5cvJykpiTp16rBz505u3rzJ1atXWbJkCfXr19fo6+7uzooVK3B2dtZ43nRzc2Pp0qXqhUpf9/z5c0JCQjS22NhY9f7UGuCRkZE8ffqUwMBArly5ot4/e/ZsJk+ejK+vL2XLllWPERn5vzcbQ0NDNY67fv06gYGB6dYHT72eyMhIgoKC1G0+Pj60bduWatWqUblyZfXWrVs3rKys2LRpEwCffvopKpWKPn36cO7cOW7duoWvry+LFi1izJgx6vFGjhxJw4YNad68OcuXL+fixYvcuXOH7du3U69ePW7evJlmbKllXjLaMkqm9+zZEyMjIwYOHEhQUBDbtm1j8eLFjB49Wt1n165dWvXc586dy+XLlwkKCmLGjBnMmjWLJUuWqBPmbdu25cyZM0yfPp2bN29y/vx5+vfvT5kyZTQS58ePH8fR0REnJ6d0Y8yqAjUzXQghhBBCvPsmTpyo8WAdHh6e5wn1VJ/XvIdh1CP4dAeUafhWzqkre+/sZbr/dKrZVOPHlj/qOpw3cvfjrsTdvoP96tWYf/ihrsPRcGLHTYKOP6amZ2k+bOOg01geh8XQfP6fGBvoETilpU5jEUKItykxMRH/bt2ICghg144d1K9fH4NXZu2K/MfR0ZHz58/j7e3NmDFjCA4OxsbGhlq1arFy5UqNvu7u7qxfv15dLz2Vm5sba9asoWfPnmmeI62FQrds2UL37t0BNJKw586dY/PmzZQpU4Z79+4BsHLlSuLj4+natavGGFOnTsXLywuAPXv20L9/f/W+1LFf7fO6YsWK0alTJzZt2sTMmTN58uQJ+/btY/PmzVp99fT06NSpEz4+PgwfPhwrKyuOHz/OhAkT+OijjwgLC8PZ2ZkFCxYwcOBA9XHGxsYcOnSIhQsXsnr1asaOHYuZmRkVK1ZkxIgRVK5cOc3YcsrS0pKDBw8yfPhwatWqhbW1NVOmTOGzzz5T9wkLC+P69esax/3xxx94e3sTFxdHtWrV+PXXXzVKTjZr1ozNmzczZ84c5syZg5mZGfXr12f//v2Ympqq+23ZsoXBgwfnyrWolAJWZDw4OJgjR45QtGhRPDw8MDIyUu+Liopi/vz5TJkyJdvjmrZdkpthvrOe7/pS1yEI8V6Kipcap1lR2ER+I86Kt32bTJt45fk5Yv7K+3MIbSqVil27dtGxY8d0+zRp0oSaNWuyaNEidduaNWsYOXIkYWFhWTpPeHg4lpaWhIWFYWFhkcOotSXExrKkb8qXoRHl/8ZQXwUT/wUj7Vdc3yXT/Kex48YO+rv2Z3Tt0ZkfkA/dad+euJu3KL12Leb16uo6HA1/bb3BZb+H1G5TlrofOeo0lkcvY2g46yjGBnpc/y7rax4IIcS7ICoqisePH1OuXLk8P1deP7NkR2xsLHfv3sXBwSHHC2OKt+fSpUu0aNGC27dvU6hQIV2H804ICgqiWbNm3LhxA0tLyzT7ZOfPS4Eq83LmzBkqVarE8OHD6dq1K66urhqvPkRGRjJt2jQdRiiEEEIIIV5Vv359jhw5otF26NAhrdd08xXbKu98Ih0g8L9AAKoVr6bbQIQQQohctHfvXkaMGEHq3FFzc/O3kkgXIjdUrVqV2bNnc/fuXV2H8s4IDg5m/fr16SbSs6tATeH75ptv6NSpEz/99BNRUVGMHz8eNzc3Dh06lCsF5IUQQgiRB2QB0ndKZGQkt27dUn++e/cugYGBFC1alNKlSzNx4kQePXrE+vXrgZQF5JctW8a4ceMYMGAAR48eZfv27ezbt09Xl5A5+zq6jiBPbLu2jROPT6R8UOD2y9sAVLPJWTI9OVlh5h9XufssOqchpk1RaPDXTmye/qu1q/T9hxgB8w5e59/r+trHpjGW3YM4jGOSM++bQ6bRSRgDv118zI8vQvP8fBmJTZA33IQQ74fVq1czbNgwkpOTqVu3Lp9++qmuQxIi2/r166frEN4paZX1yYkClUw/d+4cy5cvR09Pj8KFC7NixQpKly5N8+bNOXDgAKVLl9Z1iEIIIYQQ77SzZ8/i7u6u/pxa27xv376sXbuW4OBgHjx4oN7v4ODAvn37GDVqFIsXL+aDDz7gp59+wtPT863HnmW2VXUdQa5LVpKZdXoWiUqiRruzlTPWptY5GvtKcDg/Hs+72VMlo54x5uSvGfY5EpLAg+gnmY5VPl6fGtFGmfbLTUGhkVyIylpJo7xmXUjqBAsh3k2KojB58mS8vb0B6N+/P926ddNxVEKId1GBSqYDGqvrAkyYMAEDAwNatmyJr6+vjqISQgghRLr0VLqOQOSipk2bktGSO2vXrk3zmAsXLuRhVLnM4N1LOCqKok6kj/twHKYGpqhQUbdkzuuMxyelzPIuam7E157lczze64wfPYBDkGRswqOeQ7TPb2PL55VrZjqOoiiE//aQpOg4jBwLYVDSNNNjckplqMfHpc3pZpA/3tCp41BU1yEIIUSuS0hIYPDgwaxbtw5IWeBx6tSpqFTyDCqEyH0FKpleuXJlTp48SdWqmrOFxo4dS3JyMj169NBRZEIIIYQQQhQMHzl9hKVx7tSMfFUhYwN61Mn9N0XjbidwBzAyNcFz/NA3HufxzRfsehaHvqEevT6vjmnhtztDXQghRO6LiIigS5cuHDp0CH19fVavXs3AgQN1HZYQ4h2WP6ZIZFGfPn34+++/09w3btw4pk2bJqVehBBCiPxGpZf3mxBCZOLCoZSa6xXq2UoiXQgh3hHnzp3j6NGjmJub89tvv0kiXQiR5wrUzPRBgwYxaNCgdPePHz+e8ePHv8WIhBBCCCGEeLclJiXzMiYh3f1h0enve1OKopAUmrJoZ9LLlzke67/7Edy79AxUUK25fS5EKIQQIj9o2rQp69ato3z58tSuXVvX4Qgh3gMFKpkuhBBCiAJI6lUKUWAlJSu0WnycW/9FvtXz/jtwIFEn/XM8TkxkPL8tucjTBxEAlK1iTRFb8xyPK4QQQndOnDiBra0tzs7OAHz66ac6jkgI8T55p96Lvnr1Ko6OjroOQwghhBBCiHfCy+j4LCXSVSpoWalErpxTURSi/E9ptRdu4ZGtcRLikti3/JI6kW5sZkCddg65EqMQQgjd2LlzJx4eHrRq1YqnT5/qOhwhxHvonZqZHh8fz/3793UdhhBCCCFeJTXNhXgn3JvV9q2cJzkqGhQFgPKBF9AzMcn2GElJyez/4R+e3A3H2NyAzmNrUbSkzEgXQoiCbPHixYwaNQpFUahSpQrm5vL3uih4mjRpwtChQ+nZs6euQ3knrFq1in379vHbb7+9tXMWqG+3o0ePznCbN2+erkPMlmu+/YjZN0JrW/h5U4oUMmbBUDcuru5N6C/DuLGmP/OHNMHCTBZLAjh39gxffTGUFs0aU6NKBY4dOazrkPIluU9ZJ/cqa3xWL6dRLVeNrWfndroOK9/aunkTrVs048MaVfi0+8dcvnRJ1yEJIUS+lxz1/zPhDQxQGRtn+3hFUTi24RoPgp5jYKhHu+HVJJEuhBAFWHJyMmPGjGHkyJEoisKwYcPYsWMHZmZmug5N5JGQkBC+/PJLHB0dMTY2xt7envbt23PkyBEAunfvTqtWrTSO2b9/PyqVCi8vL412Ly8vSpcuDcC9e/dQqVRpbqdOpbwV169fvzT3u7q6qsdMSkpi8uTJODg4YGpqipOTEzNmzED5/8kA6dmzZw9Pnjyhe/fuWvtmzpyJvr4+c+fO1drn5eVF9erVtdpTrycwMFDdpigKP/zwA3Xr1qVQoUJYWVlRu3ZtFi1aRHR0dIbx5cSIESOoVasWxsbGacaaltjYWIYPH06xYsUoVKgQXbp04cmTJxp9Hjx4QNu2bTEzM6N48eJ8/fXXJCYmqvcPGDCA8+fPc/z48dy8nAwVqJnpixcvpnr16lhYWKS5PzLy7dZyzKlGI7ehr/+/OrKVyhTjd+9O/HLiJiWLmVOyqDkTfU5w9UEopYsXZukX7pQsWoieM3/XYdT5Q0xMDC4uFejQqQtjRn6p63DyLblPWSf3KuscnJxZtOIn9Wd9/QL1v5K3Zv8fvzNvzkwmTZ1GlSrV2LRhHZ8PGcive/dTrFgxXYf3dknNdCFENiRHpJRl0Tc3R/UGf3/477rN9VMhqPRUeH5WGVtHy9wOUQghxFsSGxtL37592b59OwCzZs1i3Lhxb/T/B1Ew3Lt3j4YNG2JlZcXcuXOpUqUKCQkJHDhwgOHDh3Pt2jXc3d0ZO3YsiYmJGBikfB89duwY9vb2+Pn5aYx37Ngx3N3dNdoOHz6skRwH1N/RFi9ezKxZs9TtiYmJVKtWjY8//ljdNnv2bFauXMm6detwdXXl7Nmz9O/fH0tLS0aMGJHutS1ZsoT+/fujp6c9t9nX15dx48bh6+vL119/nbWblYbevXvzyy+/MGnSJJYtW4aNjQ0XL15k0aJFlC1blo4dO77x2JkZMGAAAQEBXMriJLJRo0axb98+fv75ZywtLfniiy/o3Lkzf//9N5Dyo0Xbtm2xtbXl5MmTBAcH06dPHwwNDfn+++8BMDIyomfPnixZsoTGjRvn2bW9qkBlQJydnRk1ahS9evVKc39gYCC1atV6y1G9uWfhMRqfx3atxe3HLzl++REAPb7/X9L8bkgYXuv98R3rib6eiqTkjH/tetc1atyERo2b6DqMfE/uU9bJvco6fX19ilnb6DqMfG/DujV07tqNjp26ADBp6jT++suP3b/sZODgz3QcnRDiXXL4yhOuBodn2CdZSVL/8w9/3cZEr3CWxo5OSMq8UzruXnzK80fZn+ySEPyUF2VaoW9hQfjvd7N1bMSLOK4cfwyAe68KlK1ine3zCyGEyD8mTJjA9u3bMTQ0xNfXN918kMgCRYGEvJuZnCFDsyxPsBk2bBgqlYrTp09rlPJxdXVlwIABALi7uxMZGcnZs2epV68eAH5+fkyYMIExY8YQGxuLiYkJsbGxBAQE0L9/f41zFCtWDFtb2zTPb2lpiaXl/36I3717Ny9evNAY4+TJk3To0IG2bVNK4JUtW5YtW7Zw+vTpdK/r6dOnHD16lMWLF2vt+/PPP4mJiWH69OmsX7+ekydP0qBBg8xulZbt27ezadMmdu/eTYcOHdTtZcuW5aOPPiI8POPnxZxYsmQJkHKdWUmmh4WF4ePjw+bNm2nWrBkAa9asoWLFipw6dYp69epx8OBBrly5wuHDhylRogTVq1dnxowZjB8/Hi8vL4yMUqp3tG/fnhYtWhATE4OpqWmeXWOqApVMr127NufOnUv3L0+VSpXpKxX5laGBHt3dK7Bk94V0+1iYGRMeHf/eJ9KFELr18MEDOng2xcjYmMpVqjHki5HYlrTTdVj5SkJ8PFevBDFw8BB1m56eHvXqNeDSxfT/nn9nSc10UdAY5v1DeG55GhHH4A1nyfwROJnCFVP+afmx25CcvVfjTQyz9+c46mUcv6+8nK1jNDi0B+DWnuwl01PV6+hIxQYl3/z8Qggh8oVJkyZx4sQJZs+eTfPmzXUdTsGWEA3f6+h72zePwSjzkmuhoaHs378fb2/vNGviW1lZAeDi4oKdnR3Hjh2jXr16REREcP78efbu3cvSpUvx9/fH3d2dkydPEhcXpzUzPTt8fHzw8PCgTJky6rYGDRrwww8/cOPGDVxcXLh48SInTpxgwYIF6Y5z4sQJzMzMqFixYprn6NGjB4aGhvTo0QMfH583SqZv2rSJ8uXLayTSU6lUKo0fCV5XqFChDMfu1asXq1atynZM6Tl37hwJCQl4ePxvgfkKFSpQunRp/P39qVevHv7+/lSpUoUSJf63yL2npyeff/45QUFB1KhRA0jJFycmJhIQEEDTpk1zLcb0FKhk+vz584mLi0t3f7Vq1UhOTs50nLi4OK1xlKREVDosVfBRPSesChmz8fDVNPcXszBhYo8P8d3/z1uOTAgh/qdS5ap84+VN6bJlef70KWt+XMnwQX3YsP1XzGQBILUXL1+QlJSkVc6lWLFi3L17R0dRCSGypEYfcPbIvF8+ERmXiKKAgZ6Kj2t/kG4/RUlm3/9PEu9SqxRGqoy/ML2uSbnsvZEUH5tSy1LPQEWFetlLasf/+y/R/v4Y2NhQ6A2+/JZ0sqR8vbRnmwkhhMj//vvvP4oXLw6AtbU1p0+fTrMshnj33Lp1C0VRqFChQqZ93d3d8fPzY+LEiRw/fhwXFxdsbGxo0qQJfn5+6v0ODg4aiXBISYa//t9UWqWjHz9+zB9//MHmzZs12idMmEB4eDgVKlRAX1+fpKQkvL29+fTTT9ON9/79+5QoUULrvOHh4ezYsQN/f38gJWnduHFjFi9enGmC+3U3b96kfPny2Tom1at119OSXsntNxUSEoKRkZH6B5JUJUqUICQkRN3n1UR66v7UfanMzMywtLTk/v37uRpjegpUMj29VzCya+bMmUybNk2jTd+5FYYurXNl/DfRt2UlDpy9T3BolNa+wqZG7PL6iKsPQvluU4AOohNCiBT1G/6vBplzufJUqlKVrm1bcPTQftp17KLDyES+JjUtRUHS5OsCNTM9lamhPjM7V013f1JyEvs2pPzzlHauWBq/nTrihkb6uPfK/Avxq178fJmQdVsoZNcU+16f51FkQggh8qMjR47QuXNn5s2bx+DBgwEkkZ5bDM1SZojr6txZkJ1qE02bNmXkyJEkJCTg5+ennpHs5ubG6tWrAdRJ9ddt27YtzRnir1u3bh1WVlZadcZTy6ls3rwZV1dXAgMDGTlyJHZ2dvTt2zfNsWJiYjAxMdFq37JlC05OTlSrVg2A6tWrU6ZMGbZt28bAgQMzjfFVOanW4ezs/MbH5gempqZ5usDqqwrU30inT58mKSn9uo1xcXHqRSkyMnHiRMLCwjQ2A6cWuRlqtpS2KUyz6vasPRikta+QqSF7ZnQgIiaeT77bR2JS5jPvhRDibSlc2AL7MmV4+O8DXYeSrxSxKoK+vj7Pnz/XaH/+/DnW1lK/VwghMpIcmTK5RK9w1uq6CyGEeDds3LiR1q1bEx4ezrZt27JUeUBkg0qVUmpFF1sWJ9eUK1cOlUrFtWvXMu3r7u5OVFQUZ86c4dixY7i5uQEpyfSAgABCQ0MJCAhQ1+N+lb29Pc7Ozhrb6xRFwdfXl969e6trc6f6+uuvmTBhAt27d6dKlSr07t2bUaNGMXPmzHTjtba25sWLF1rtPj4+BAUFYWBgoN6uXLmCr6+vuo+FhQVhYWFax758+RJAXb7FxcUlS/cuLYUKFcpwGzp06BuNmx5bW1vi4+PV15DqyZMn6snUtra2PHnyRGt/6r5XhYaGYmPzdtZ2K1DJ9Pr162skJiwsLLhz53+vy798+ZIePXpkOo6xsTEWFhYamy5LvPRuUYn/wmL447RmTcjCpkbsndGR+IQkuk7fS1wOFoASQoi8EB0dxaOH/8qCpK8xNDKiYiVXAk75q9uSk5MJCPCnarUaOoxMR1R6eb8JId4ZyRERAOgVkvJhQgjxPlAUhVmzZtG7d28SEhL45JNP2Ldvn8xIfw8VLVoUT09Pli9fTlSUduWGVxOvTk5O2Nvbs2fPHgIDA9XJ9FKlSlGqVCnmz59PfHz8G9dL//PPP7l161aas8Ojo6O1/vvU19fP8AegGjVqEBISopFQv3z5MmfPnsXPz4/AwED15ufnh7+/vzoxXr58eR4+fKiVWD5//jwmJiaULl0agJ49e3Ljxg1+/fVXrfMripJmQj7Vq+dPa5s+fXq6x76JWrVqYWhoyJEjR9Rt169f58GDB9SvXx9IyQNfvnyZ//77T93n0KFDWFhYUKlSJXXb7du3iY2NVddQz2sFqszL668rpPX6QkFbgFSlgj4tKrLpyFWNhUULmxqx97uOmBob0H/eQSzMjLAwS/kl7GlYDMnv+SKk0dFR/PvgfzNhHz16yPVrV7GwtKSkLISoJvcp6+ReZc2yhXNp2KQptiXtePb0P3xWL0dfTx+PVm10HVq+07tvfyZ/Mx5X18pUrlKVjRvWERMTQ8dOnXUdmhCigIpLTGLQurPcefq/L5cJGby1uPXaVtYGrSVZSUYh42fHsKfRHPgxiJjI+FyJNTnpzZ9Vk6NSapbqF5KZ6UII8a5LSkriyy+/ZOXKlQCMGTOGOXPmSCL9PbZ8+XIaNmxInTp1mD59OlWrViUxMZFDhw6xcuVKrl7931qD7u7urFixAmdnZ43a2m5ubixdulS9UOnrnj9/rlFzG1IWN321DIuPjw9169alcuXKWse3b98eb29vSpcujaurKxcuXGDBggUMGDAg3euqUaMG1tbW/P3337Rr1059jjp16tCkSROt/h9++CE+Pj7MnTsXT09PypcvT48ePfjuu++wtbXl/PnzTJo0ia+++gp9fX0AunXrxq5du+jRoweTJk2iZcuW2NjYcPnyZRYuXMiXX36pVbImVU7LvNy6dYvIyEhCQkKIiYlR12CvVKkSRkZGPHr0iObNm7N+/Xrq1KmDpaUlAwcOZPTo0RQtWhQLCwu+/PJL6tevT7169QBo2bIllSpVonfv3syZM4eQkBAmTZrE8OHDMTY2Vp/7+PHjODo64uTklKNryKoClUzPClUBq8varHppShe3YN3BKxrt1Z1tqFMh5ZWFKz6a9ZbK91/Dg/8i3lqM+dGVoH8YPOB/92X+3FkAtP+oI9O9Z+kqrHxH7lPWyb3Kmqf/PcHrm68JD3uJVZGiVK1ek9VrN1OkSFFdh5bvtGrdhhehoaxYtoRnz55SvkJFVqz+iWLvY5mXAvb/ZiHyq+shERy/+SzNfY422rO4d97cyaPIRxptNqY2mKVRt/TfK6E8fZD7z5dWJbJWI/VVSREpyXS9bC66JYQQomBJTk6ma9eu7N69G5VKxcKFC/nqq690HZbQMUdHR86fP4+3tzdjxowhODgYGxsbatWqpf7RJZW7uzvr169X10tP5ebmxpo1a+jZs2ea5/Dw0F5sfsuWLXTv3h2AsLAwdu7cyeLFi9M8funSpUyePJlhw4bx33//YWdnx5AhQ5gyZUq616Wvr0///v3ZtGkT7dq1Iz4+no0bNzJ+/Pg0+3fp0oX58+fz/fffY2hoyMGDB/nmm2/o0aMHT58+xcHBga+++orRo0erj1GpVGzevJkffvgBX19fvL29MTAwoFy5cvTp0wdPT89048upQYMG8eeff6o/p84Sv3v3LmXLliUhIYHr169r1DVfuHAhenp6dOnShbi4ODw9PVmxYoV6v76+Pnv37uXzzz+nfv36mJub07dvX61Z8lu2bFGvsfA2qJQCNJVbT0+PkJAQ9arOhQsX5uLFizg6OgIpdXPs7OwyrKueHtO2S3I11nfV811f6joEId5LUfFS5ikrCpu8c78R54m3fZtMWy/M83PE/DEqz88hdCc8PBxLS0vCwsKwsLDI9fETYmNZ0rcrACNWrMKw2Ae5fo7ccPHfl3RY/jc2hY3x6VtbY59LicKYGOprtHXd05XrL64zsc5EqtmkLGpV2qI0hY20Z3xf9nvIX1tvUKp8ERp0zr1ZPUXtzDF4La7MPBzxFREHD1JiymSKpvMlWAghxLvhu+++47vvvmPTpk106dJF1+HkWF4/s2RHbGwsd+/excHBIc2FL8XbFxISgqurK+fPn6dMmTK6DuedEBQURLNmzbhx44a6dvybyM6flwKXdbhy5Yr6VQxFUbh27RqRkSmzV549S3umjhBCCCF0SGqaC5GrjPT1qPqBVZb7l7Uoi6u1a5b6mpgbULyMbr/8J0emlnmRmelCCPGu+/bbb/nkk08oV66crkMRIs/Z2tri4+PDgwcPJJmeS4KDg1m/fn2OEunZVeCS6c2bN9eoi55aZ0ilUqEoSoEr8yKEEEK88+T/zUKIbEiKTC3zIjXThRDiXXPmzBm8vLzYtm0bhQoVQqVSSSJdvFfSq1ku3kxaJXvyWoFKpt+9e1fXIQghhBBCCFEgRYfH8+xh2nXR/70a+pajSV+yOpmuXQdeCCFEwbVv3z66detGdHQ0kydPZuHCvC8FKIQQua1AJdPlFQghhBCiAJIyL0LkisTkN1/qSFEUfp55hsgXcRn2yw9veSZHpCT89QvLzHQhhHhX/PTTTwwdOpSkpCRatGjBtGnTdB2SEEK8kQKXTG/WrBnu7u64u7tjb2+v65CEEEIIIYR4K66FhAPgYJ39GduKgjqRXtTOHD197aS5voEelRrZ5SzIXJAUFQWAntRMF0KIAk9RFLy8vJg+fToAffv25ccff8TQ0FDHkQkhxJspUMn0/v374+fnx9atW4mPj8fBwQF3d3d1gt3W1lbXIQohhBDidTIzXYhcce7+CwBqlrbK0TidxtTExDx/JjGUxESU6GhAkulCCFHQJSQkMGTIENasWQPApEmTmD59er54C0oIId5UgUqme3l5ARAXF8fff//Nn3/+iZ+fHxs2bCAhIQEXFxeaNWvG8uXLdRuoEEIIIYQQuex8ajK9TBEdR5J3kv9/VjqAvrnUTBdCiILsv//+448//kBPT48VK1YwZMgQXYckhBA5VqCS6amMjY1p1qwZzZo1A+DFixfMnz+fpUuXsmrVKkmmCyGEEPmJzD4SIseeRcZx73nKjO0apd/dZHpSRMrioypjY1RGRjqORgghRE6UKlWKffv28ejRI9q3b6/rcIQQIlcUyGR6fHw8/v7++Pn54efnR0BAAKVKlaJr1664ubnpOjwhhBBCCCHe2L+h0Sw+cpOouER1W2hUPCjQQd8M//XX0j02UUni1oubxCXF4xjbhNLJDbj7Ip4w03/eRuhZFv/gAc9WrCT5/0u6pEqOTEmm68nio0IIUSBdv36du3fv0qpVKwBq1qxJzZo1dRyVEELkngKVTJ8+fbo6eV6mTBmaNGnCZ599xqZNm7Cz0/1iSUIIIYRIg9RMFyJbtp/9lx3nHmq12ySrcAlTuB36NMPjDSmGIVCIkgC8DE3mJSnHGBjpYWCo+z+TL3/+mbDdu9PdbyjP9kIIUeCcPHmS9u3bExMTg5+fH3Xq1NF1SEIUOPHx8VSqVIn169fToEEDXYfzTli1ahX79u3jt99+y5XxdP8knQ1eXl7cuXOH+fPnc/z4cVatWkWPHj0kkS6EEEIIId4Z8YnJADRytmZGx8rqbWSzcgAYmxng1sMlzc26ZQJ/OWwnqOIRzN0jsGutR5Pu/9vfcXRNDIz0dXl5ACjx8QCYN2yI7dQpmpvXVEotmK/jCIUQQmTHrl27aN68OaGhoVStWhUHBwddhyQKsJCQEL788kscHR0xNjbG3t6e9u3bc+TIEQC6d++ufvsh1f79+1GpVOr1FlN5eXlRunRpAO7du4dKpUpzO3XqFADBwcH07NkTFxcX9PT0GDlypFZ8CQkJTJ8+HScnJ0xMTKhWrRr79+/X6rd8+XLKli2LiYkJdevW5fTp05le+6pVq3BwcEgzkT5kyBD09fX5+eeftfb169ePjh07arX7+fmhUql4+fKlui0+Pp45c+ZQrVo1zMzMsLa2pmHDhqxZs4aEhIRMY3xTly5donHjxpiYmGBvb8+cOXMyPebIkSM0aNCAwoULY2try/jx40lMTNTooygK8+bNw8XFBWNjY0qVKoW3t7d6/4ABAzh//jzHjx/PlesoUDPT//jjD44dO8batWv56quvcHFxoWnTpri5ueHm5oaNjY2uQxRCCCHE6/JZzfSyZcty//59rfZhw4axfPlyYmNjGTNmDFu3biUuLg5PT09WrFhBiRIldBCteJ9VsrOgd70y6s9P7oWz49d/MTIxoLLbB2ke8+/dy1yJ+Ju6tnXp59nhbYX6xkwqVaJIjx66DkMIIUQOLFu2jBEjRqAoCu3bt2fr1q2YmZnpOixRQN27d4+GDRtiZWXF3LlzqVKlCgkJCRw4cIDhw4dz7do13N3dGTt2LImJiRgYpKQ2jx07hr29PX5+fhrjHTt2DHd3d422w4cP4+rqqtFWrFgxAOLi4rCxsWHSpEksXLgwzRgnTZrExo0b+fHHH6lQoQIHDhygU6dOnDx5kho1agCwbds2Ro8ezapVq6hbty6LFi3C09OT69evU7x48TTHVRSFZcuWMX36dK190dHRbN26lXHjxuHr68vHH3+c+c1MQ3x8PJ6enly8eJEZM2bQsGFDLCwsOHXqFPPmzaNGjRpUr179jcbOSHh4OC1btsTDw4NVq1Zx+fJlBgwYgJWVFZ999lmax1y8eJE2bdrw7bffsn79eh49esTQoUNJSkpi3rx56n5fffUVBw8eZN68eVSpUoXQ0FBCQ0PV+42MjOjZsydLliyhcePGOb6WApVM9/T0xNPTE4CIiAiOHz/On3/+yZw5c/j0009xdnbG3d2dZcuW6ThSIYQQQuRXZ86cISkpSf35n3/+oUWLFuoH0lGjRrFv3z5+/vlnLC0t+eKLL+jcuTN///23rkIWQgghhMh3kpOTmThxonp26ZAhQ1i2bJk6uSnyF0VRiEmM0cm5TQ1MUWVxgs2wYcNQqVScPn0ac3NzdburqysDBgwAwN3dncjISM6ePUu9evWAlBnYEyZMYMyYMcTGxmJiYkJsbCwBAQH0799f4xzFihXD1tY2zfOXLVuWxYsXA+Dr65tmnw0bNvDtt9/Spk0bAD7//HMOHz7M/Pnz2bhxIwALFixg8ODB6nOnlhrx9fVlwoQJaY577tw5bt++Tdu2bbX2/fzzz1SqVIkJEyZgZ2fHv//+i729fdo3MQOLFi3ir7/+4uzZs+rEP4CjoyMff/wx8f//9mBu27RpE/Hx8fj6+mJkZISrqyuBgYEsWLAg3WT6tm3bqFq1KlOmTAHA2dmZOXPm0K1bN6ZOnUrhwoW5evUqK1eu5J9//qF8+fIAab4Z0759e1q0aEFMTAympqY5upYC+zdc4cKFadOmDZ6enpw+fZo9e/awYsUKVq5cKcl0IYQQIj/JZzXTX3+TbdasWTg5OeHm5kZYWBg+Pj5s3ryZZs2aAbBmzRoqVqzIqVOn1A/rQuSm6PhEEhIV9ee4/y/z8rqkhKQ02zXGSojOtI8uKUlJJEdGkhwXp+tQhBBC5NCGDRvUiXRvb28mTpyY5YSpePtiEmOou7muTs4d0DMAM8PM31YIDQ1l//79eHt7ayTSU1lZWQHg4uKCnZ0dx44do169ekRERHD+/Hn27t3L0qVL8ff3x93dnZMnTxIXF6c1Mz2n4uLiMDEx0WgzNTXlxIkTQMrs73PnzjFx4kT1fj09PTw8PPD390933OPHj+Pi4kLhNBZi9/HxoVevXlhaWtK6dWvWrl3L5MmTsx37pk2b8PDw0EikpzI0NMTQ0DDN4x48eEClSpUyHPubb77hm2++SXOfv78/TZo0wcjISN3m6enJ7NmzefHiBUWKFNE6Jr37HBsby7lz52jatCm//fYbjo6O7N27l1atWqEoCh4eHsyZM4eiRYuqj6tduzaJiYkEBATQtGnTDK8jMwUumZ6cnMzZs2c5duwYfn5+/P3330RFRfHBBx/QqVOnXP8DIoQQQoj8Ly4ujrjXknPGxsYYGxtneFx8fDwbN25k9OjRqFQqzp07R0JCAh4eHuo+FSpUoHTp0vj7+0syXeS6HeceMm7HRZKVjPs9vBbKr4sCM+yz+9ZuvPy9ci223KYkJnK3Uyfibt7SdShCCCFyQa9evdi3bx/t2rWjT58+ug5HvANu3bqFoihUqFAh077u7u74+fkxceJEdRLaxsaGJk2a4Ofnp97v4OBAmTJlNI5t0KABenqaE34iIyOzHKenpycLFiygSZMmODk5ceTIEX755Rf126/Pnj0jKSlJq0xkiRIluHbtWrrj3r9/P811IW/evMmpU6f45ZdfgJQ/e6NHj2bSpEnZ/gHr5s2bb5RMtrOzIzAwMMM+ryavXxcSEqI1Yzz1/oSEhKSZTPf09GTRokVs2bKFbt26ERISoi6BExwcDMCdO3e4f/8+P//8M+vXrycpKYlRo0bRtWtXjh49qh7LzMwMS0vLNMt9ZleBSqa3bt2akydPEhERgZ2dHe7u7ixcuBB3d3ccHR11HZ4QQggh0vIWZijNnDmTadOmabRNnTpVawGi1+3evZuXL1/Sr18/IOVBzsjISD3rJVWJEiUICQnJxYiFSHH2XmiaiXRTQ33qOxZTf35yL1z9z2WrFNM+ALjw3wX1Pzcq1Sj3gswlSS9faiTSVWZmmNXVzQw5IYQQbyY4OBhra2sMDQ3R19dn27ZtMhu9gDA1MCWgZ4DOzp0VipLJ7IJXNG3alJEjR5KQkICfn586Qezm5sbq1asB1En1123bto2KFStm+VyvW7x4MYMHD6ZChQqoVCqcnJzo379/umVhsiomJkZrJjaklJvx9PTE2toagDZt2jBw4ECOHj1K8+bNs3WO7NzjVxkYGODs7PxGx76pli1bMnfuXIYOHUrv3r0xNjZm8uTJHD9+XP1jSHJyMnFxcaxfvx4XFxcgZRZ/rVq1uH79urr0C6TMao+OzvlbnAUqmW5lZcW8efNo2rQp5cqV03U4QgghhMgnJk6cyOjRozXaMpuVDikPWq1bt05zBogQb9PoFi4Ma+qk/qxSqdDX005OVKhnS5Me5bXaX/VF9S/oV7lfboeYqyr8cxlUKlT6+roORQghRBZdvnyZ1q1b4+HhwZo1a1CpVJJIL0BUKlWWSq3oUrly5VCpVBnO3k7l7u5OVFQUZ86c4dixY3z99ddASjJ9wIABhIaGEhAQwJAhQ7SOtbe3z1Fi2MbGht27dxMbG8vz58+xs7NjwoQJ6om+1tbW6Ovr8+TJE43jnjx5km6t9tTjLl++rNGWlJTEunXrCAkJ0ViPICkpCV9fX3Uy3cLCIs1Z1y9fvkRfX19dNsfFxSVL9/d1OS3zYmtrm+b9SN2XntGjRzNq1CiCg4MpUqQI9+7dY+LEiep7XbJkSQwMDNSJdED9Q8mDBw80kumhoaFaJT/fRP4qYpqJwYMHs3DhQq3XJADCwsJwdXXl+PHjOohMCCGEEOlJ/aKVl5uxsTEWFhYaW2bJ9Pv373P48GEGDRqkbrO1tSU+Pp6XL19q9M3swVeInNLXU2Ggr6fe0kqkA6j0M09a6Ovl8wS1SoXKwEAS6UIIUYAcO3aMRo0a8ejRIwICAnjx4oWuQxLvoKJFi+Lp6cny5cuJiorS2v/qM7qTkxP29vbs2bOHwMBA3NzcAChVqhSlSpVi/vz5xMfH52k5aBMTE0qVKkViYiI7d+6kQ4cOABgZGVGrVi2OHDmi7pucnMyRI0eoX79+uuPVqFGDa9euacwe//3334mIiODChQsEBgaqty1btvDLL7+o70n58uUJCgrSKn15/vx5HBwc1LXQe/bsyeHDh7lw4QKvS0hISPO+w//KvGS0DR06NN1rq1+/Pn/99RcJCQnqtkOHDlG+fPk0S7y8SqVSYWdnh6mpKVu2bMHe3p6aNWsC0LBhQxITE7l9+7a6/40bNwA0yvvcvn2b2NjYNGvFZ1eBSqYvXryYzz77DAsLC619lpaWDBkyhAULFuggMiGEEEIUNGvWrKF48eK0bdtW3VarVi0MDQ01HnyvX7/OgwcPMnzwFUIIIYR4V23ZsgVPT0/Cw8Np1KgRf//9d4a1kYXIieXLl5OUlESdOnXYuXMnN2/e5OrVqyxZskTredzd3Z0VK1bg7OysMfHWzc2NpUuXqhcqfd3z588JCQnR2GJjY9X7U5PDkZGRPH36lMDAQK5cuaLeHxAQwC+//MKdO3c4fvw4rVq1Ijk5mXHjxqn7jB49mh9//JF169Zx9epVPv/8c6Kioujfv3+61+7u7k5kZCRBQUHqNh8fH9q2bUu1atWoXLmyeuvWrRtWVlZs2rQJgE8//RSVSkWfPn04d+4ct27dwtfXl0WLFjFmzBj1eCNHjqRhw4Y0b96c5cuXc/HiRe7cucP27dupV68eN2/eTDO21DIvGW0Z/b3Qs2dPjIyMGDhwIEFBQWzbto3FixdrvF28a9curXr5c+fO5fLlywQFBTFjxgxmzZrFkiVL0P//SRkeHh7UrFmTAQMGcOHCBc6dO8eQIUNo0aKFxmz148eP4+joiJOTEzlVoMq8XLhwgVmzZqW7v2XLlsybN+8tRiSEEEKIzOTH13+Tk5NZs2YNffv21Xhd0tLSkoEDBzJ69GiKFi2KhYUFX375JfXr15fFR0Wuunf5GTeuh3LnRDB1MICr4ZyPT39BpMc3Xqa77/jD49x4cYProddzHFfE0aPEvTKzJzclpzPTSQghRP6kKArz5s1TJwi7du3Khg0b0qzpLERucXR05Pz583h7ezNmzBiCg4OxsbGhVq1arFy5UqOvu7s769ev11pQ083NjTVr1tCzZ880z+Hh4aHVtmXLFrp37w6gMXv53LlzbN68mTJlynDv3j0AYmNjmTRpEnfu3KFQoUK0adOGDRs2aKy79Mknn/D06VOmTJlCSEgI1atXZ//+/WlW20hVrFgxOnXqxKZNm5g5cyZPnjxh3759bN68Wauvnp4enTp1wsfHh+HDh2NlZcXx48eZMGECH330EWFhYTg7O7NgwQIGDhyoPs7Y2JhDhw6xcOFCVq9ezdixYzEzM6NixYqMGDGCypUrpxtfTlhaWnLw4EGGDx9OrVq1sLa2ZsqUKXz22WfqPmFhYVy/rvk8+8cff+Dt7U1cXBzVqlXj119/pXXr1hr34bfffuPLL7+kSZMmmJub07p1a+bPn68xzpYtWxg8eHCuXItKedPK8zpgYmLCP//8k25do1u3blGlShViYmKyPbZp2yU5De+98HzXl7oOQYj3UlR8kq5DKBAKmxSo34h15m3fJvOua/L8HFE70p/hkZaDBw/i6enJ9evXNWYsQMrD8ZgxY9iyZQtxcXF4enqyYsUKKfOiQ+Hh4VhaWhIWFpbmG4o5lRAby5K+XQEYsWIVhsU+yPVzvCrsaQwbp/jDGzyFV2n6AU26/++/2Wcxz2i2vRnKK4ON+3AcvSv1zvbYMRcvcu+T7tkPKptUpqZUuHA+z88jhBAiZyZOnKie0Dhy5Ejmz5+vXvRPpC2vn1myIzY2lrt37+Lg4CA/gBQgly5dokWLFty+fZtChQrpOpx3QlBQEM2aNePGjRtYWlqm2Sc7f14KVNahVKlSGSbTL126RMmSJd9yVEIIIYTIUP6bmE7Lli3TXcnexMSE5cuXs3z58rcclXhfPL75EhSI0oc7+olYmxvTwLkYxoYZ1xA3MNSjWnPNRH9UQhQKCgYqA9o5tcPCyIK2jm3TGSFjz31TfvgyqVQJ49desc1NhRo3yrOxhRBC5J5mzZqxYMECZs2axahRo3QdjhDvhapVqzJ79mzu3r1LlSpVdB3OOyE4OJj169enm0jPrgKVTG/Tpg2TJ0+mVatWWr8SxMTEMHXqVNq1a6ej6IQQQgghhMhcyJ0wAO4Xgv2qBHYPq0N1e6scjWliYMKMhjPe+Pj4Bw+IOHQIALvZszAuVy5H8QghhCiYFEVRl+hr0aIFt27dwt7eXsdRCfF+6devn65DeKekVdYnJwrU+zmTJk0iNDQUFxcX5syZw6+//sqvv/7K7NmzKV++PKGhoXz77be6DlMIIYQQr1CpVHm+CVGQpCbTnxnrOJBXhK5bD8nJmDduLIl0IYR4T929e5fGjRtr1CyWRLoQQmgqUDPTS5QowcmTJ/n888+ZOHGi+vVslUqFp6cny5cvz7CQvxBCCCGEELoUF51A6OOUhTifmQDxuo0HIOnlS17+8gsAxQZkb/0BIYQQ74Zz587Rtm1bnjx5wpAhQ/Dz89N1SEIIkS8VqGQ6QJkyZfj999958eIFt27dQlEUypUrR5EiRXQdmhBCCCHSIDPHxfssPjGZIRvOYnojktIRoK+AGRBhCPciY3M09qPIR/Ta25NRu5JwfBLOrbWebzROckw0SkwMxhUrYlavXo5iEkIIUfDs37+frl27EhUVRdWqVdm8ebOuQxJCiHyrwCXTUxUpUoQPP/xQ12EIIYQQQgiRrushERy7/pQvw0wwUf73w9INVSJJyQqG+irsrEwyGCF9fz/6G+MnYdS/pgAKCS8e5ChW6yFD5McvIYR4z6xZs4bBgweTlJRE8+bN+eWXX7CwsNB1WEIIkW8V2GS6EEIIIQoGSc6J95nC/5cl/P/Pzh3KYlLEmLolTBmup+KDIqYUL/xmyXRFUdTjqkxNKO3r+8Zx6ltYYOzk9MbHCyGEKFgURWHGjBlMnToVgF69euHj44ORkZGOIxNCiPxNkulCCCGEyFOSTBcCVP+f9q5b0xarEma5P76+AWY1auT6uEIIId5NCQkJHDp0CICJEyfi7e0tz2xCCJEFkkwXQgghhBBCCCGEeI8YGRnx66+/8vvvv9OrVy9dhyOEEAWGnq4DEEIIIcQ7TvUWNiHymZjYRA7/eZ9zZ4IpnaCXqw/dYc+DObtvDZGn/HF5pOTiyEIIId5lT548YeXKlerPRYsWlUS6EPlQkyZNZCHgXLR//36qV69OcnJyrownyXQhhBBCCCFy2ZK5AVzfcpvoA8F8EmWMQWrOOxd+/DnXtQ3mY+bQYNYBvtj7/18K9OSxXgghRPpu3LhBgwYNGDZsGD/++KOuwxEiQyEhIXz55Zc4OjpibGyMvb097du358iRIwB0796dVq1aaRyzf/9+VCoVXl5eGu1eXl6ULl0agHv37qFSqdLcTp06BUBwcDA9e/bExcUFPT09Ro4cqRVfQkIC06dPx8nJCRMTE6pVq8b+/fs1+vz111+0b98eOzs7VCoVu3fvztK179mzhydPntC9e3etfTNnzkRfX5+5c+dq7fPy8qJ69epa7anXHBgYqG5TFIUffviBunXrUqhQIaysrKhduzaLFi0iOjo6S3G+iQcPHtC2bVvMzMwoXrw4X3/9NYmJiRkec/78eVq0aIGVlRXFihXjs88+IzIyUqvf2rVrqVq1KiYmJhQvXpzhw4er97Vq1QpDQ0M2bdqUK9chT91CCCGEyFPpPbDm5iZEfpMYngBAlL5CuBGoLA1xqVsCS2vTHI9tGRoLwNNiBjwpYUxiWTuKDRyY43GFEEK8m06dOkWDBg24c+cOjo6ONG3aVNchCZGue/fuUatWLY4ePcrcuXO5fPky+/fvx93dXZ0gdXd35++//9ZIxB47dgx7e3v8/Pw0xjt27Bju7u4abYcPHyY4OFhjq1WrFgBxcXHY2NgwadIkqlWrlmaMkyZNYvXq1SxdupQrV64wdOhQOnXqxIULF9R9oqKiqFatGsuXL8/W9S9ZsoT+/fujl8ZECV9fX8aNG4dvDhadB+jduzcjR46kQ4cOHDt2jMDAQCZPnsyvv/7KwYMHczR2epKSkmjbti3x8fGcPHmSdevWsXbtWqZMmZLuMY8fP8bDwwNnZ2cCAgLYv38/QUFB9OvXT6PfggUL+Pbbb5kwYQJBQUEcPnwYT09PjT79+vVjyZIluXItUjNdCCGEEEKIPGLf1I4eH1fMk7FL//ADZV3r58nYQggh3g2//vorPXr0ICYmhg8//JC9e/dSvHhxXYcldEBRFJSYGJ2cW2VqmuUJMMOGDUOlUnH69GnMzc3V7a6urgwYMABISaZHRkZy9uxZ6tWrB4Cfnx8TJkxgzJgxxMbGYmJiQmxsLAEBAfTv31/jHMWKFcPW1jbN85ctW5bFixcDpJu03rBhA99++y1t2rQB4PPPP+fw4cPMnz+fjRs3AtC6dWtat26dpWtO9fTpU44ePao+/6v+/PNPYmJimD59OuvXr+fkyZM0aNAgW+MDbN++nU2bNrF79246dOigbi9btiwfffQR4eHh2R4zKw4ePMiVK1c4fPgwJUqUoHr16syYMYPx48fj5eWFkZGR1jF79+7F0NCQ5cuXq39cWLVqFVWrVuXWrVs4Ozvz4sULJk2axG+//Ubz5s3Vx1atWlVjrPbt2/PFF19w+/ZtnJyccnQtkkwXQgghRJ6SmeNCCCGEEG/fypUr+eKLL0hOTqZt27Zs27ZNIzkp3i9KTAzXa9bSybnLnz+Hysws036hoaHs378fb2/vNP9btbKyAsDFxQU7OzuOHTtGvXr1iIiI4Pz58+zdu5elS5fi7++Pu7s7J0+eJC4uTmtmek7FxcVhYmKi0WZqasqJEydyNO6JEycwMzOjYkXtiRg+Pj706NEDQ0NDevTogY+Pzxsl0zdt2kT58uU1EumpVCoVlpaW6R5bqFChDMfu1asXq1atSnOfv78/VapUoUSJEuo2T09PPv/8c4KCgqhRo4bWMXFxcRgZGWnM0jc1TXnL88SJEzg7O3Po0CGSk5N59OgRFStWJCIiggYNGjB//nzs7e3Vx5UuXZoSJUpw/PjxHCfTpcyLEEIIIYQQQgghxDvk4sWLDBs2jOTkZAYPHszu3bslkS7yvVu3bqEoChUqVMi0r7u7u7qky/Hjx3FxccHGxoYmTZqo2/38/HBwcKBMmTIaxzZo0IBChQppbNnh6enJggULuHnzJsnJyRw6dIhffvmF4ODgbI3zuvv371OiRAmtEi/h4eHs2LFDvWBwr1692L59e5q1wzNz8+ZNypcv/0bxBQYGZrhNnz493WNDQkI0EumA+nNISEiaxzRr1oyQkBDmzp1LfHw8L168YMKECQDqe33nzh2Sk5P5/vvvWbRoETt27CA0NJQWLVoQHx+vMZ6dnR33799/o2t/lcxM/38vfh2h6xAKhCIffqHrEAqEF2eW6ToE8Y4pbCJ/XYuCS2ami/dFYlIy8w/d4OGLGCzik7DKjdVGX5GcnMz+yf1xiMvVYYUQQryDqlWrxuzZs4mLi2PSpEnyPCZQmZpS/vw5nZ07KxRFybzT/2vatCkjR44kISEBPz8/9VoAbm5urF69GkhJpqc1K33btm1pzv7OqsWLFzN48GAqVKiASqXCycmJ/v3757iWeUxMjNaMd4AtW7bg5OSkruFevXp1ypQpw7Zt2xiYzXVzsnOPX+fs7PzGx74JV1dX1q1bx+jRo5k4cSL6+vqMGDFC4weH5ORkEhISWLJkCS1btgRS7petrS3Hjh3TqJ1uamqaKwusSnZGCCGEEEKIXHDu/gtW+t0GoFuSEaCPuXHuPW7fOHsIh52nAUhSQeGiadf6FEII8X4KCwsjJiZGXQt63LhxOo5I5CcqlSpLpVZ0qVy5cqhUKq5du5ZpX3d3d6Kiojhz5gzHjh3j66+/BlKS6QMGDCA0NJSAgACGDBmiday9vX2OEsM2Njbs3r2b2NhYnj9/jp2dHRMmTMDR0fGNxwSwtrbmxYsXWu0+Pj4EBQVhYPC/58rk5GR8fX3VyXQLCwvCwsK0jn358iWAunyLi4tLlu5vWnJS5sXW1pbTp09rtD158kS9Lz09e/akZ8+ePHnyBHNzc1QqFQsWLFDf65IlSwJQqVIl9TE2NjZYW1vz4MEDjbFCQ0OxsbHJ8BqyQpLpQgghhMhTMhNKvC/ik5IBKF7YGAcTM5JDYnEpUTjXxk+Mi0H///85bv4EipV0yLWxhRBCFGyPHj2iTZs2qFQq/vrrLywsLHQdkhDZVrRoUTw9PVm+fDkjRozQKk308uVLdd10Jycn7O3t2bNnD4GBgbi5uQFQqlQpSpUqxfz584mPj8/1eumvMjExoVSpUiQkJLBz5066deuWo/Fq1KhBSEgIL168oEiRIgBcvnyZs2fP4ufnR9GiRdV9Q0NDadq0KdeuXaNChQqUL1+ehw8f8uTJE41yKufPn8fExITSpUsDKcnp7t278+uvv2rVTVcUhfDw8HTrpgcGBmYYf0Z/79SvXx9vb2/+++8/9SLIhw4dwsLCQiMRnp7Ua/L19cXExIQWLVoA0LBhQwCuX7/OBx98AKTcm2fPnmmU94mNjeX27dtp1mbPLqmZLoQQQgghRC4qam6EnVXK68x6efC0HWqlT602fXN/YCGEEAVSUFAQ9erV49KlS4SEhPDw4UNdhyTEG1u+fDlJSUnUqVOHnTt3cvPmTa5evcqSJUuoX7++Rl93d3dWrFiBs7OzRgLZzc2NpUuXqhcqfd3z588JCQnR2GJjY9X7U2uAR0ZG8vTpUwIDA7ly5Yp6f0BAAL/88gt37tzh+PHjtGrViuTkZI23QSIjI9XjANy9e5fAwECt2dKvqlGjBtbW1vz999/qNh8fH+rUqUOTJk2oXLmyemvSpAkffvghPj4+QEod9/Lly9OjRw9OnjzJnTt32LFjB5MmTeKrr75CXz9lSka3bt345JNP6NGjB99//z1nz57l/v377N27Fw8PD44dO5ZufM7OzhluqUnytLRs2ZJKlSrRu3dvLl68yIEDB5g0aRLDhw/H2NgYgNOnT1OhQgUePXqkPm7ZsmWcP3+eGzdusHz5cr744gtmzpypsRhthw4d+Oqrrzh58iT//PMPffv2pUKFCho/pJw6dQpjY2Ot/4behCTThRBCCJG3VG9hE0IIIYR4D/355580bNiQhw8fUr58eU6dOpWlWZ5C5FeOjo6cP38ed3d3xowZQ+XKlWnRogVHjhxh5cqVGn3d3d2JiIhQ10tP5ebmRkRERLqz0j08PChZsqTGtnv3bvX+GjVqUKNGDc6dO8fmzZupUaMGbdq0Ue+PjY1l0qRJVKpUiU6dOlGqVClOnDihTvACnD17Vj0OwOjRo6lRowZTpkxJ99r19fXp378/mzZtAiA+Pp6NGzfSpUuXNPt36dKF9evXk5CQgIGBAQcPHqR06dL06NGDypUrM3XqVL766itmzJihPkalUrF582YWLFjA7t27cXNzo2rVqnh5edGhQweNGuO5SV9fn71796Kvr0/9+vXp1asXffr00Vi0NDo6muvXr5OQkKBuO336NC1atKBKlSr88MMPrF69mhEjNNe9XL9+PXXr1qVt27a4ublhaGjI/v37MTQ0VPfZsmULn376KWa5UOpIpeSk8vw7JDZR1xEUDLIAadbIAqRCiPzsba9nW6zvljw/x/N1PfL8HEJ3Ul83DQsLy5PX1hNiY1nStysAI1aswrDYB280zvGbT+ntc5oKtoX5nMI8vPaCFgMr4fJh7tQ2/+f4bvQHTyTUSp+Gp/7JlTGFEEIUXNu2baNPnz7Ex8fToEED9uzZQ7FixXQd1nstr59ZsiM2Npa7d+/i4OCQ5qKWIn8KCQnB1dWV8+fPa5QpEW/u2bNnlC9fnrNnz+LgkHaZxOz8eZGZ6UIIIYTIUyqVKs83IYQQQoj3ybp16+jevTvx8fF06tSJw4cPSyJdiHeAra0tPj4+GZaDEdlz7949VqxYkW4iPbtkAVIhhBBCCCGEEEKIAsTd3R07Ozu6dOnCwoUL1fWQhRAFX8eOHXUdwjuldu3a1K5dO9fGk2S6EEIIIfKUzBwXQgghhMi55ORk9P5/ZevSpUtz4cIFbGxs5FlLCCHeIinzIoQQQgghhBBCCJGPhYaG0qxZM3bu3KluK168uCTShRDiLZOZ6UIIIYTIU/IlTwghhBDizd2/f5/WrVtz9epVrl27RuvWrTEzM9N1WEII8V6SmelCCCGEEELkUGRcIltP/6vrMIQQQrxjAgMDqVevHlevXuWDDz7g0KFDkkgXQggdkmS6EEIIIfKW6i1sQujYBv/77LscDICxoT6J8cmAvJkhhBDizR06dIjGjRsTEhJClSpV8Pf3p0qVKroOSwgh3muSTBdCCCGEECKHXsbEq/95fMvyPHsYAUBRO3NdhSSEEKIAW79+PW3atCEyMhJ3d3eOHz/OBx98oOuwhBDivSfJdCGEEELkKZVKleebEPnFoEYOlDM2JjE+GSNTA4raSjJdCCFE9l24cIHExER69OjBH3/8gaWlpa5DEkIIgSTThRBCCCGEyFUhd8IAsHWwQKUnP/YIIYTIvvnz57NhwwY2btyIsbGxrsMRQrwlz58/p3jx4ty7d0/Xobwzunfvzvz583NtPEmmCyGEECJPycx08b4Jvv3/yXQnmUUohBAia6KiovDy8iIuLg4APT09evXqhZ6epG3E+yckJIQvv/wSR0dHjI2Nsbe3p3379hw5cgRISY62atVK45j9+/ejUqnw8vLSaPfy8qJ06dIA3Lt3L93vE6dOnQIgODiYnj174uLigp6eHiNHjtSK78cff6Rx48YUKVKEIkWK4OHhwenTp9X7ExISGD9+PFWqVMHc3Bw7Ozv69OnD48ePM712b29vOnToQNmyZbX2eXp6oq+vz5kzZ7T2NW3aNM1Y165di5WVlUZbeHg43377LRUqVMDExARbW1s8PDz45ZdfUBQl0xjflJ+fHzVr1sTY2BhnZ2fWrl2b6THbt2+nevXqmJmZUaZMGebOnauxv1+/fmn++3R1dVX3mTRpEt7e3oSFheXKdRjkyihCCCGEEOmQZLd436hnpju+eTI9KTKSRyNGkBAcQlRCFC/jXqIfn0TR3ApSCCFEvvHff//Rvn17Tp8+zb///ouPj4+uQxJCZ+7du0fDhg2xsrJi7ty5VKlShYSEBA4cOMDw4cO5du0a7u7ujB07lsTERAwMUlKbx44dw97eHj8/P43xjh07hru7u0bb4cOHNZKtAMWKFQMgLi4OGxsbJk2axMKFC9OM0c/Pjx49etCgQQNMTEyYPXs2LVu2JCgoiFKlShEdHc358+eZPHky1apV48WLF3z11Vd89NFHnD17Nt1rj46OxsfHhwMHDmjte/DgASdPnuSLL77A19eXDz/8MNN7mZaXL1/SqFEjwsLC+O677/jwww8xMDDgzz//ZNy4cTRr1kwr+Z4b7t69S9u2bRk6dCibNm3iyJEjDBo0iJIlS+Lp6ZnmMX/88QeffvopS5cupWXLlly9epXBgwdjamrKF198AcDixYuZNWuW+pjExESqVavGxx9/rG6rXLkyTk5ObNy4keHDh+f4WiSZLoQQQgghRC5RxSYR8TwWlQpKlLV443GiTpwg6qQ/AIaAzSv7Im2kDrsQQrwrbt26RatWrbh9+zZFixZl4MCBug5JvKMURSExPlkn5zYw0svyBJthw4ahUqk4ffo05ub/e+ZxdXVlwIABALi7uxMZGcnZs2epV68ekJLgnjBhAmPGjCE2NhYTExNiY2MJCAigf//+GucoVqwYtra2aZ6/bNmyLF68GABfX980+2zatEnj808//cTOnTs5cuQIffr0wdLSkkOHDmn0WbZsGXXq1OHBgwfqmfKv+/333zE2NlZf06vWrFlDu3bt+Pzzz6lXrx4LFizA1NQ0zXEy8s0333Dv3j1u3LiBnZ2dut3FxYUePXpgYmKS7TGzYtWqVTg4OKjLrVSsWJETJ06wcOHCdJPpGzZsoGPHjgwdOhQAR0dHJk6cyOzZsxk+fDgqlQpLS0uNNSV2797NixcvtP6dt2/fnq1bt0oyXQghhBD5n8xMF+8TgxcJABQtVQgj0zd/1I6/exeAQm5u/FT1GVdDr9HB+SMqFXOlUf3WuRKrEEII3Tp9+jTt2rXj6dOnlC1blv3791O+fHldhyXeUYnxyfzw1Z86Ofdni90wNNbPtF9oaCj79+/H29tbI5GeKnXGtIuLC3Z2dhw7dox69eoRERHB+fPn2bt3L0uXLsXf3x93d3dOnjxJXFyc1sz03BYdHU1CQgJFi6b/DmFYWBgqlSrDWd/Hjx+nVq1aWu2KorBmzRqWL19OhQoVcHZ2ZseOHfTu3TtbcSYnJ7N161Y+/fRTjUR6qkKFCmUYW+vWGT+Drl69mk8//TTNff7+/nh4eGi0eXp6plmaJlVcXBxmZmYabaampjx8+JD79++nWQrHx8cHDw8PypQpo9Fep04dvL29iYuLy/E6FAWu+NayZcvo06cPW7duBVJ+pahUqRIVKlTgm2++ITExUccRCiGEEEKI95XBi3gASuagxAtA/P8vOmVasyYPnS25WlpF0XqNqdHyU8wLS7EXIYQo6Pbu3UvTpk15+vQptWrVwt/fXxLp4r1369YtFEWhQoUKmfZ1d3dXl3Q5fvw4Li4u2NjY0KRJE3W7n58fDg4OWonVBg0aUKhQIY0tJ8aPH4+dnZ1WsjhVbGws48ePp0ePHlhYpP/m4v3799NMch8+fJjo6Gj1DO5evXq9UTmoZ8+e8eLFiyzd39fVrl2bwMDADLePPvoo3eNDQkIoUaKERluJEiUIDw8nJiYmzWM8PT355ZdfOHLkCMnJydy4cUM9sz04OFir/+PHj/njjz8YNGiQ1j47Ozvi4+MJCQnJzmWnqUDNTP/uu++YM2cOLVu2ZNSoUdy/f5+5c+cyatQo9PT0WLhwIYaGhkybNk3XoQohhBAilUxMF++R1JnpOV18NO7uPQCMypYFAnIWlBBCiHwlPDycfv36ERMTQ6tWrfj5559znMwTIjMGRnp8tthNZ+fOiuwsfpm64GZCQgJ+fn40bdoUADc3N1avXg2kJNPTmpW+bds2KlasmOVzZWTWrFls3boVPz+/NEukJCQk0K1bNxRFYeXKlRmOFRMTk+YYvr6+fPLJJ+r68D169ODrr7/m9u3bODk5ZTnWnCwuampqirOz8xsf/yYGDx7M7du3adeuHQkJCVhYWPDVV1/h5eWV5uLM69atw8rKio4dO2rtSy2JEx0dneO4ClQyfe3ataxdu5bOnTtz8eJFatWqxbp169SvEFSoUIFx48ZJMl0IIYQQQrwVTyPiuPssiuCXsegroB/+/8l0xzevl64oirrMi5FDWbibG5EKIYTILywsLNixYwfbtm1jyZIlGBoa6jok8R5QqVRZKrWiS+XKlUOlUnHt2rVM+7q7uxMVFcWZM2c4duwYX3/9NZCSTB8wYAChoaEEBAQwZMgQrWPt7e1zJTE8b948Zs2axeHDh6latarW/tRE+v379zl69GiGs9IBrK2tefHihUZbaGgou3btIiEhQSMZn5SUhK+vL97e3kDK3ythYWFaY758+VJdU9zGxgYrK6ss3d/X5bTMi62tLU+ePNFoe/LkCRYWFunWflepVMyePZvvv/+ekJAQbGxsOHLkCJBSP/1ViqLg6+tL7969MTIy0horNDQUSLkHOVWgkumPHz+mdu3aAFSrVg09PT2qV6+u3l+zZk0eP36so+iEEEIIkRapmS7eVTHxSbRc+CcvolMS6HZJeqiSwbSwIRbW2V8QKlVSaCjJERGgUmFUurQk04UQ4h2QkJDAjRs3cHV1BVJm1abOpBVCpChatCienp4sX76cESNGaNVNf/nypbrmuJOTE/b29uzZs4fAwEDc3FJm3ZcqVYpSpUoxf/584uPj86xe+pw5c/D29ubAgQPqXOWrUhPpN2/e5NixYxQrVizTMWvUqMHGjRs12jZt2sQHH3zA7t27NdoPHjzI/PnzmT59Ovr6+pQvX56DBw9qjXn+/HlcXFwA0NPTo3v37mzYsIGpU6dqlZSJjIzExMREPQP+VallXjLyehmXV9WvX5/ff/9do+3QoUPUr18/wzEB9PX1KVWqFABbtmyhfv36WknxP//8k1u3bqW7iPM///zDBx98gLW1dabny0yBqplua2vLlStXALh58yZJSUnqzwBBQUEUL15cV+EJIYQQQoj3SOC/L3kRnYCRgR6ONubUMk9ZIMnW0TJHPyKlzko3tLNDL41XfYUQQhQsERERtG3blkaNGmnkMIQQ2pYvX05SUhJ16tRh586d3Lx5k6tXr7JkyRKtxKu7uzsrVqzA2dlZI5Hr5ubG0qVL1QuVvu758+eEhIRobLGxser9qTXAIyMjefr0KYGBgRp/dmfPns3kyZPx9fWlbNmy6jEiIyOBlER6165dOXv2LJs2bSIpKUndJz4+Pt1r9/T0JCgoSGN2uo+PD127dqVy5coa28CBA3n27Bn79+8H4PPPP+fGjRuMGDGCS5cucf36dRYsWMCWLVsYM2aMejxvb2/s7e2pW7cu69ev58qVK9y8eRNfX19q1KihvobXpZZ5yWgrXLhwutc2dOhQ7ty5w7hx47h27RorVqxg+/btjBo1St1n2bJlNG/eXP352bNnrFq1imvXrhEYGMhXX33Fzz//zKJFi7TG9/HxoW7dulSuXDnN8x8/fpyWLVumG192FKhk+qeffkqfPn0YPHgwnp6ejBs3jrFjx7Jq1SpWr17N0KFD6dSpk67DFEIIIcQrVCpVnm9C6ML5BylfdFpUKsHRMU1pUzJlYdCc1ktPXXw0pV66EEKIgiw4OJgmTZpw6NAh4uPjefToka5DEiJfc3R05Pz587i7uzNmzBgqV65MixYtOHLkiFbNcXd3dyIiIrTe8nBzcyMiIiLdWekeHh6ULFlSY3t15neNGjWoUaMG586dY/PmzdSoUYM2bdqo969cuZL4+Hi6du2qMca8efMAePToEXv27OHhw4dUr15do8/JkyfTvfYqVapQs2ZNtm/fDsC5c+e4ePEiXbp00epraWlJ8+bN1QuROjo68tdff3Ht2jU8PDyoW7cu27dv5+eff6ZVq1bq44oWLcqpU6fo1asX3333HTVq1KBx48Zs2bKFuXPnqkvC5DYHBwf27dvHoUOHqFatGvPnz+enn35SL6oKKcnz27dvaxy3bt06ateuTcOGDQkKCsLPz486depo9AkLC2Pnzp3pzkqPjY1l9+7dDB48OFeuRaXkpPr8W5acnMysWbPw9/enQYMGTJgwgW3btjFu3Diio6Np3749y5Yt03oNJCtiE/Mg4HdQkQ+/0HUIBcKLM8t0HYIQQqTL5C0Xeftg2O48P8fDFR3z/Bzif5YvX87cuXMJCQmhWrVqLF26VOuh9lWLFi1i5cqVPHjwAGtra7p27crMmTPTXGApLeHh4VhaWhIWFpZprck3kRAby5K+XQEYsWIVhsU+yNJxA9ae4ei1/5jSrhL9G5Zlzfi/iQmPp/PYmpR0tnrjeJ7MnUuojy9FevXCdtK3DDwwkNMhp5nTZA6tHTKuVSmEECL/uHr1Kq1ateLBgwcUL16cffv2pVkOQrw78vqZJTtiY2O5e/cuDg4OWX7mErq3b98+vv76a/755580F9kU2bdy5Up27dqVZhmcVNn581Kgaqbr6enxzTffaLR1796d7t276ygiIYQQQmRGZo6/W7Zt28bo0aNZtWoVdevWZdGiRXh6enL9+vU0y+1t3ryZCRMm4OvrS4MGDbhx4wb9+vVDpVKxYMECHVxB7khOVtQz02uVKUL4s1hiwuPR01dhUyb9V1yzIv7efeD/Fx8VQghRIB0/fpwOHTrw4sULypUrx/79+7UWzBNCiNe1bduWmzdv8ujRI+zt7XUdzjvB0NCQpUuX5tp4BSqZLoQQQgghdGvBggUMHjyY/v37A7Bq1Sr27duHr68vEyZM0Op/8uRJGjZsSM+ePQEoW7YsPXr0ICAgIN1zxMXFERcXp/4cHh6ey1eRczeDI6j6XMESI0IOPuJueEq8NqULY2Con6OxU2umG5Uty2+3f+N0yOkcxyuEEOLtOXnyJC1atCAuLo569erx22+/5cqid0KI98PIkSN1HcI7ZdCgQbk6XoF6X6BKlSrMmDGDf//9V9ehCCGEECKrVG9hE29FfHw8586dw8PDQ92mp6eHh4cH/v7+aR7ToEEDzp07x+nTKQnhO3fu8Pvvv2vUnXzdzJkzsbS0VG/5cVbO6VOPqBtnSIU4fW6decKj6y8BKOVSJEfjKomJxP//s65h2TJMPTlVvc/SKG9qWAohhMhdtWrVon79+nTo0IEjR45IIl0IId4hBWpmelBQEIsXL2batGl4eHgwePBgOnTogIFBgboMIYQQQogC6dmzZyQlJVGiRAmN9hIlSnDt2rU0j+nZsyfPnj2jUaNGKIpCYmIiQ4cO1Srd96qJEycyevRo9efw8PB8l1C/8yQSayDZTJ9GrR0AMDTWx+XDEhkfmImER48gIQGViQkGtrYkJCcAMKHOBOqWrJvTsIUQQuSR5ORkIOVHZmNjY/bs2YOZmRn6+jl7W0kIIUT+UqBmpgNcunSJHTt2YGRkRPfu3bGzs2Ps2LFcvXpV16EJIYQQIg0qlSrPN5F/+fn58f3337NixQrOnz/PL7/8wr59+5gxY0a6xxgbG2NhYaGx5Td3nkYBYF7EmBotSlOjRWkqNymFkWnOJnnE37sHgFGZMqheWXSqjUMb9PUkISOEEPlRXFwcPXv2ZNy4ceq2woULSyJdCCHeQQUumW5gYEDHjh3Zs2cPDx48YNSoUezZs4fKlSvToEEDfH19dR2iEEIIIcQ7ydraGn19fZ48eaLR/uTJE2xtbdM8ZvLkyfTu3ZtBgwZRpUoVOnXqxPfff8/MmTPVs/gKmrDoBILDYgAoZJy7b0jGvVIvXQghRP734sULPD092bZtG0uWLEn3TS0hhBDvhgKVTH995lnJkiWZOHEiN27c4MiRIzg5OTFixAgdRSeEEEKItMjM9HeHkZERtWrV4siRI+q25ORkjhw5Qv369dM8Jjo6Gj09zUfO1Jl6iqLkXbB56Py/L9T/bKifu4/T8XfvAWDkUDZXxxVCCJH7/v33Xxo3bsyff/6JhYUFf/zxBxUqVNB1WEIIIfJQgSo2ntEXrqZNm9K0aVPCw8PfYkRCCCGEEO+X0aNH07dvX2rXrk2dOnVYtGgRUVFR9O/fH4A+ffpQqlQpZs6cCUD79u1ZsGABNWrUoG7duty6dYvJkyfTvn37Avv6+/n7LzLv9IbUZV5kZroQQuRrly5donXr1jx+/Bg7Ozv++OMPqlatquuwhBBC5LEClUzv27cvpqamGfbJjzU1hRBCiPeZzBx/t3zyySc8ffqUKVOmEBISQvXq1dm/f796UdIHDx5ozESfNGkSKpWKSZMm8ejRI2xsbGjfvj3e3t66uoQcO5eHyfSkiJSJIQbFiuXZOYQQQuTM0aNH6dSpE+Hh4bi6uvLHH3/ku4WyhRBC5I0CVeZlzZo1FC5cWNdh5LmtmzfRukUzPqxRhU+7f8zlS5d0HZJO6empmDKsLVf3ehHqv4CgPVOZMLiVVr/Jn7flzkFvQv0XsG/VFziVttFBtPmT/DeVNXKfskbuU9bJvRLvqi+++IL79+8TFxdHQEAAdevWVe/z8/Nj7dq16s8GBgZMnTqVW7duERMTw4MHD1i+fDlWVlZvP/BckJiUTOC/L9/CmeRHKCGEyK9CQ0OJiIjAzc2NEydOSCJdiPfI9evXsbW1JSIiQtehvDPq1avHzp07dR1GlhWoZPrp06dJSkpKd39cXBzbt29/ixHlvv1//M68OTMZMmw4W3/eRfnyFfh8yECeP3+u69B0Zky/Fgzu2phRs36meufvmLTkV0b39WBYD7dX+qR8HvH9Vpr0mUdUTDy/LR+OsVGBevkiT8h/U1kj9ylr5D5lndyr/8mPNdMfPXpEr169KFasGKamplSpUoWzZ8+q9yuKwpQpUyhZsiSmpqZ4eHhw8+bN3LwtooC6FhJBdHwSpoYFs0SNEEKInOvatSt79+7lwIEDBfbHYSHEm5k4cSJffvllmpN9K1SogLGxMSEhIVr7ypYty6JFi7Tavby8qF69ukZbSEgIX375JY6OjhgbG2Nvb0/79u011i3KbUH/x96dh8d0vm8Av2eyL7JISAiyNHZBbRVKJEJiqVqL2praqvZQxE5r30vQ2ilV+xr8yFdiiyAosUQRu4TIQrZJzMzvD+20aRJCM/POSe5Pr3M1854z59w5V0Ymz7znOdeuoVOnTnBxcYFMJssza16uXLmCJk2awNTUFOXLl8fcuXNzbbN9+3ZUqVIFpqam8PDwQEhISI71EydOxLhx46BSqQrjW9E6SRXTPT09cxQhrKyscPfuXc3j5ORkdO/eXUS0QrNpwzp07PwF2nfohI/c3TFxyjSYmppizy7pfEJT2BrWcsOB8Cs4fOoaHjxNxO5jlxF69ibqVXfWbDP4S2/MWXUEB8KuIvqPJ+g3aSPKlLJGO+9aApPrB/5MFQzPU8HwPBUcz5X+SkpKQuPGjWFkZIRDhw7h+vXrWLBgAWxtbTXbzJ07Fz/++CNWrlyJyMhIWFhYwM/PD5mZmQKTkz64+OBNixcXewvBSYiISFeUSiUmTpyIhw8fasZat24NExMTgamISNcePHiAAwcO4Kuvvsq17tSpU8jIyEDnzp2xYcOGDz7GvXv3ULduXfzvf//DvHnzcPXqVRw+fBje3t4YPHjwf0j/dunp6XBzc8Ps2bPh6OhYoOe8fPkSLVu2hLOzM6KiojBv3jxMnToVP//8s2abM2fOoHv37ujbty8uXbqE9u3bo3379oiOjtZs06pVK7x69QqHDh0q9O9LGyRVTP/3DUjzuiHp225Squ+ys7Jw4/o1NPRspBmTy+Vo2LARrvx+SWAysc7+fhfeDSrDvUJpAIBHJSd41nbD/52+DgBwcbJDmVLW+F/kTc1zXqZm4nz0PXxS00VEZL3Bn6mC4XkqGJ6nguO5+heZDpb3MGfOHJQvXx7r1q1DgwYN4OrqipYtW+Kjjz4C8Oa9xOLFizFx4kR8/vnnqFmzJjZu3IgnT55gz549H34eqEi4eD8JxmrAPVV0EiIi0oX09HR06tQJM2bMQNu2bfH69WvRkYg+iFqtRnZmppDlfWp1zZo1w7BhwzBmzBiULFkSjo6OmDp1ao5tHjx4gM8//xyWlpawsrLCF198gfj4eM36v2Z7b9q0CS4uLrC2tka3bt1ytGZRqVSYNWsWXF1dYWZmhlq1amHHjh1vzbZt2zbUqlULTk5OudatWbMGX375JXr16oW1a9cW+Pv9t2+//RYymQznzp1Dp06dUKlSJVSvXh2BgYE4e/bsB+/3XerXr4958+ahW7duBf6gcPPmzcjKysLatWtRvXp1dOvWDcOGDcPChQs12yxZsgT+/v747rvvULVqVXz//feoU6cOli1bptnGwMAArVu3xtatWwv9+9KGItcDoyCXeisUCigUihxjagMT4Z8qJyUnQalUwu5fN5yys7NDbOzdfJ5V9M1fdxRWlqb4ffdEKJVqGBjIMCX4ALYeenM5vqP9m5vOPkvM2a/q2YtXcLAr3jek5c9UwfA8FQzPU8HxXOleXr/bTUzy/t2+b98++Pn5oUuXLggPD4eTkxO+/fZb9O/fHwAQGxuLuLg4+Pr6ap5jbW2NTz75BBEREejWrZt2vxnSa1cfp+CTTEPIU978vBkYFfLcFNWff2zyxr1ERMIlJCTgs88+w9mzZ2FiYoJJkybB0LDIlVGomHitUODHPp2FHHvYhh0wMjUt8PYbNmxAYGAgIiMjERERga+++gqNGzdGixYtoFKpNIX08PBwvH79GoMHD0bXrl0RFham2cedO3ewZ88eHDhwAElJSfjiiy8we/ZszJgxAwAwa9Ys/PLLL1i5ciUqVqyIEydOoGfPnihVqhS8vLzyzHXy5EnUq1cv1/irV6+wfft2REZGokqVKkhJScHJkyfRpEmT9zpPiYmJOHz4MGbMmAELi9xXQb6trdTmzZsxcODAt+7/0KFD753pbSIiItC0aVMYGxtrxvz8/DBnzhwkJSXB1tYWERERCAwMzPE8Pz+/XJOUGjRogNmzZxdaNm0qlr8FZs2ahWnTpuUYmzBpCiZOniomEL1V55Z10K1VfXw1fgOu33mKmpWdMG90Zzx9noLN+yNFxyMionf4kJ7m7yuv3+1TpkzJNYsFAO7evYsVK1YgMDAQ48ePx/nz5zFs2DAYGxujT58+mh6HDg4OOZ7n4OCQZ/9DKl6ylCqYqf/+ma7fxrVQ969KTwcAyM3NC3W/RET0fu7evQt/f3/88ccfsLW1xd69ewu1CEVE+atZsyamTJkCAKhYsSKWLVuG0NBQtGjRAqGhobh69SpiY2M1N//duHEjqlevjvPnz6N+/foA3sw8X79+vaa3ea9evRAaGooZM2ZAoVBg5syZOHbsGDw9PQEAbm5uOHXqFH766ad8i+n379/Ps5i+detWVKxYEdWrVwcAdOvWDWvWrHnvfzNu374NtVqNKlWqvNfzAKBdu3b45JNP3rpNXjPq/4u4uDi4uuZ8L/zX31BxcXGwtbVFXFxcgf6uKlu2LB4+fAiVSgW5XL8bqUiumH79+nXNCVer1bh58yZSU99cZ5uQkFCgfQQFBeX6VERtIL7Xma2NLQwMDHLdnO7Fixewt7cXlEq8mSPaY/66o9h+JAoAcO32E1QoUxLfBbTA5v2RiEt4CQAoXbKE5msAKG1XAldiHgnJrC/4M1UwPE8Fw/NUcDxXupfX7/b8rjhTqVSoV68eZs6cCQD4+OOPER0djZUrV6JPnz5az0pFxyftXFHmI+tC3afqz8uP5ZbsyU5EJMr58+fRtm1bPHv2DM7Ozjh06BCqVq0qOhbRf2JoYoJhG97exkSbx34fNWvWzPG4TJkyePbsGQDgxo0bKF++vKaQDgDVqlWDjY0Nbty4oSmmu7i45LhJ6D/3cfv2baSnp6NFixY5jpOVlYWPP/4431wZGRkwzWOG/dq1a9GzZ0/N4549e8LLywtLly7N80al+fkvratLlCjxXsfSN2ZmZlCpVFAoFDAzMxMd5630u9Sfh+bNm6N27dqoXbs20tPT0bZtW9SuXRsff/xxjsux38bExARWVlY5FtEtXgDAyNgYVatVR+TZCM2YSqVCZGQEatbK/8Vc1JmZGkOlznlHX6VKrfmk6t7jF3j6PAXen1TWrC9hYYr6NVwQeeWeLqPqHf5MFQzPU8HwPBUcz1VOMplM68v7/G4vU6YMqlWrlmOsatWqePDgAQBobrjzz76Lfz0u6M14iD6U6s9JIgYS/mOIiEjK1Go1RowYgWfPnqF27dqIiIhgIZ2KBJlMBiNTUyHL+16pamRklCu7SqXKZ+v338dfk3IPHjyIy5cva5br16+/tW+6vb09kpKScoxdv34dZ8+exZgxY2BoaAhDQ0M0bNgQ6enpOXqAW1lZISUlJdc+k5OTYW39ZnJGxYoVIZPJcPPmzVzbvcvmzZthaWn51uXkyZPvvd+3cXR0zPNvpr/WvW2bf/9dlZiYCAsLC70vpAMSm5keGxsrOoLW9eoTgEnjx6J69Rqo4VETv2zagIyMDLTv0FF0NGFCTlzF2L5+ePg0CdfvPEXtKuUwrKc3Nu75+8YLwVuOY2w/f9x+8Bz3Hr/AlG/b4OnzFOw7/rvA5PqBP1MFw/NUMDxPBcdz9Td9a/3cuHFjxMTE5Bi7desWnJ2dAQCurq5wdHREaGgoateuDeDNneojIyMxaNAgXcelYkSlUECdnQ0AkFtaCk5DRFQ8yWQybNu2DRMmTMCPP/4IK6vifR8uIn1TtWpVPHz4EA8fPtTMTr9+/TqSk5NzTZjJT7Vq1WBiYoIHDx7k29IlLx9//DGuX7+eY2zNmjVo2rQpgoODc4yvW7cOa9as0dyXqXLlyoiKisq1z4sXL6Jy5TeTQ0uWLAk/Pz8EBwdj2LBhufqmJycn59s3XUSbF09PT0yYMAHZ2dmaDy+OHj2KypUrw9bWVrNNaGgoRowYoXne0aNHNe11/hIdHf3WqwL0iaSK6X/9kVuU+bdqjaTERCxf9iMSEp6jcpWqWP7TatgV47YAgXO2Y8q3bbFkfFeUsrXE0+cpWLPjNGb+fEizzYL1x2BuZoJlE7vDpoQZzly+g3aDl0ORxTut82eqYHieCobnqeB4rvTXyJEj0ahRI8ycORNffPEFzp07h59//hk///wzgDd/RI8YMQI//PADKlasCFdXV0yaNAlly5ZF+/btxYYnnTv5x3PMPRyDrGwlasep4JumgoXKQCvH+mtWOvCmZ/qHX+hLRETvQ61WIyIiAo0aNQLwpuC0fv16saGIKE++vr7w8PBAjx49sHjxYrx+/RrffvstvLy88uxnnpcSJUpg9OjRGDlyJFQqFT799FOkpKTg9OnTsLKyyrf1o5+fH/r16welUgkDAwNkZ2dj06ZNmD59OmrUqJFj2379+mHhwoW4du0aqlevjpEjR6JJkyaYMWMGOnbsCKVSiV9//RURERFYvny55nnBwcFo3LgxGjRogOnTp6NmzZp4/fo1jh49ihUrVuDGjRv5fk//pc1LVlaW5oOCrKwsPH78GJcvX4alpSXc3d0BAMuWLcPu3bsRGhoKAPjyyy8xbdo09O3bF2PHjkV0dDSWLFmCRYsWafY7fPhweHl5YcGCBWjTpg22bt2KCxcuaP72+svJkyfRsmXLD86vS5Irpvv4+MDb2xve3t45+iMVJd179ET3Hj3fvWExkZquwHfzd+K7+Tvfut33Kw7i+xUHdZRKWvgzVTA8TwXD81RwPFdv6OIGpO+jfv362L17N4KCgjB9+nS4urpi8eLF6NGjh2abMWPGIC0tDQMGDEBycjI+/fRTHD58OM8eiVS0/Xb+Ia4+ToGVUoZ2r0zxzy6JJewK9zJUTb90CwvIDAygVr/f5cxERPT+srOz8c0332Dt2rX49ddf0a1bN9GRiOgtZDIZ9u7di6FDh6Jp06aQy+Xw9/fH0qVL32s/33//PUqVKoVZs2bh7t27sLGxQZ06dTB+/Ph8n9OqVSsYGhri2LFj8PPzw759+/DixQt06NAh17ZVq1ZF1apVsWbNGixcuBCNGjXCoUOHMH36dCxYsAByuRweHh4IDQ3NUYh3c3PDxYsXMWPGDIwaNQpPnz5FqVKlULduXaxYseK9vsf38eTJkxwzw+fPn4/58+fDy8sLYWFhAN7cq/LOnTuabaytrfF///d/GDx4MOrWrQt7e3tMnjwZAwYM0GzTqFEjbNmyBRMnTsT48eNRsWJF7NmzJ8f3/PjxY5w5cwa//PKL1r6/wiRT/5fu9jo2depUhIWFITIyEllZWXB1dYW3t7emwP5f+phmcgJzgdjWHyI6giQknV8mOgIRUb5MdfxResXvDmv9GH/M89f6MUicly9fwtraGikpKVq53D47MxM/9ukMABi2fCWM7Mpp1g3efBEHrz7F17XLwS7sBWQGMjT8qgrKO1jCvrxloX5YlBF9Dfc6d4ahgwMqhodBpVah1sZaAIATXU/A1tS20I5FRERv+iZ36dIFhw8fhlwux08//YR+/fqJjkUSpu33LO8jMzMTsbGxcHV15YSQQhQcHIx9+/bhyJEjoqMUGWPHjkVSUlKu2eq69D6vF0nNTJ86dSoAQKFQ4PTp0wgPD0dYWBg2bdqE7OxsVKpUCT4+Prn6FBEREZE4ejYxneiDVChpjjS8gIGhHHXql9HKMVSpf85ML8F+6URE2hYXF4c2bdrg4sWLMDc3x2+//Ya2bduKjkVEem7gwIFITk7Gq1ev/lNbFfpb6dKlERgYKDpGgcnfvYn+MTExgY+PD6ZNm4bw8HA8ffoUQUFBePLkCVauXCk6HhERERHRe/urZ7qBBYvpRETaFBMTA09PT1y8eBGlSpXC8ePHWUgnogIxNDTEhAkTWEgvRKNGjYKDg4PoGAUmqZnpf8nKykJERATCwsI0bV+cnJzQuXPn97oLLxEREWmfvvVMJ9JXyldviunyEiVwO+k2UrNT3/EMIiJ6X3FxcWjUqBESExPh7u6OQ4cOaW6uR0RE9C6SKqZPnz5dUzx3dnZG06ZNMWDAAGzevBlly5YVHY+IiIiIihilSne3F/prZvoTdRL678t5IysZ+KEUEVFhcHR0RN++fREeHo4DBw6gVKlSoiMRaZWEbpVIJMz7vE4kVUyfOnUqKlSogAULFqBLly6ws7MTHYmIiIjegRPTScpuPXvTx9zR2hR3tHysv3qmvzR6DQCwNLKEjYkN6jnWg42pjZaPTkRUtCkUCpiYmAAAZs+eDYVCATMzM8GpiLTHwMAAwJvuDvxZJ3q7rKwsAH+/bt5GUsX0Q4cO4fjx41i/fj2GDx+OSpUqoVmzZvDy8oKXlxc/USYiIiKiQpOYloW7z9MAANXLWGu9mK78c2b6azNjAEDnSp0xqt4oLR+ViKhoU6lUGDduHCIjI3HkyBGYmppCLpezuEhFnqGhIczNzfH8+XMYGRlBLpfkbROJtE6lUuH58+cwNzeHoeG7S+WSKqb7+fnBz88PAPDq1SucPHkS4eHhmDt3Lnr06AF3d3d4e3tj2bJlgpMSERHRX+RyTk0nabr0IAkA8FEpC1iZGWn9eKo/e6a/NjfW+rGIiIoDhUKBgIAA/PrrrwDeTNDr0KHDO55FVDTIZDKUKVMGsbGxuH//vug4RHpNLpejQoUKBbrfl6SK6f9UokQJtG7dGn5+fjh37hz27duH5cuXY8WKFSymExEREdF/FnX/TTG9rrOtTo6n0sxM137hnoioqEtOTkbHjh1x/PhxGBoaYvXq1SykU7FjbGyMihUralpYEFHejI2NC3z1huSK6SqVChcuXMDx48cRFhaG06dPIy0tDeXKlUOHDh3g7e0tOiIRERH9A3umk1T9VUz/uIw1Inbf1vrxnsTfhiWA65n3tH4sIqKi7OHDh2jdujWio6NhaWmJnTt3omXLlqJjEQkhl8thamoqOgZRkSGpYnqrVq1w5swZvHr1CmXLloW3tzcWLVoEb29vuLm5iY5HREREREXIrfg3NwQt/UqFmxefAwBMzbXz9jktOw2P4v9AFQD3lM8AyGFlbKWVYxERFWXR0dHw9/fH48ePUaZMGYSEhKB27dqiYxERUREhqWK6jY0N5s+fj2bNmqFixYqi4xAREVEBFKTvHJE+Uqnf/N9A9fdYq288tHKsbGU2zBVvDuhXvQOa16uOtm5ttXIsIqKizMDAAOnp6ahatSoOHToEZ2dn0ZGIiKgIkdStfPv3749FixbBwcEh17qUlBRUr14dJ0+eFJCMiIiIiIo611r2KO2svdniZoo3/29VozO6V+mOEsYltHYsIqKiqmrVqjh69ChOnTrFQjoRERU6SRXTlyxZggEDBsDKKvcfMdbW1hg4cCAWLlwoIBkRERHlRybT/kJUFJj/WUw3sLQQG4SISELUajUWLFiA//3vf5qxunXromTJkgJTERFRUSWpYvqlS5fg5+eX7/qWLVsiKipKh4mIiIiIqChSq9VQ/dXnRUfH+2tmurwEZ6QTERWEUqnE8OHDMXr0aHTo0AFPnjwRHYmIiIo4SfVMf/bsGYyMjPJdb2hoiOfPn+swEREREb0Le6aT1KRnvUabH0/hleK1zo6pzsjQzHKRW3BmOhHRu2RkZKBHjx7YvXs3AGDq1KkoW7as4FRERFTUSWpmupOTE6Kjo/Ndf+XKFZQpU0aHiYiIiIioqLn7PA2xCWkAgHK2ZrAxz38yR6HJytZ8KTMx0f7xiIgk7MWLF/D19cXu3bthbGyM3377DSNHjhQdi4iIigFJFdNbt26NSZMmITMzM9e6jIwMTJkyBW3bthWQjIiIiPIjk8m0vhBpg5mRAcJGN4ORgaTeMhMRFWmxsbFo3Lgxzpw5AxsbGxw9ehRffPGF6FhERFRMSKrNy8SJE7Fr1y5UqlQJQ4YMQeXKlQEAN2/eRHBwMJRKJSZMmCA4JREREREVBTbmRjBkIZ2ISK8sWbIEMTExKF++PA4dOoTq1auLjkRERMWIpIrpDg4OOHPmDAYNGoSgoCCo1W9uCiWTyeDn54fg4GA4ODgITklERET/xInjREREVFjmzp0LpVKJcePGwcnJSXQcIiIqZiRVTAcAZ2dnhISEICkpCbdv34ZarUbFihVha2srOhoRERER0XtTq1TIDDshOgYRkd46duwYvL29YWBgAGNjYyxdulR0JCIiKqYke92qra0t6tevjwYNGrCQTkREpMfYM53o7dIjI5EydSYA4LUcvJyDiOhParUa06dPR4sWLTBy5EjN1elERESiSLaYTkRERERUFCiTkjRfr/GTQybnW3QiotevX2PgwIGYMmUKAMDS0lJwIiIiIgm2eSEiIiJp4SRbooKJriBDaG0W0omIUlNT0bVrV4SEhEAul2PZsmUYNGiQ6FhEREQsphMREZF2sQ0LERERFVR8fDzatm2LCxcuwMzMDL/++is+//xz0bGIiIgAsJhORERERERERHpAqVTC19cX0dHRsLe3x/79+9GwYUPRsYiIiDRYTCciIiKt4sR0orwlbf0Nydu2QZH8QnQUIiK9YGBggO+//x5jxozBwYMHUbFiRdGRiIiIcmAxnYiIiIhIgBdr1iD74UPN4wRroLR5achl7JtORMVLWloaLCwsAADt27dH69atYWxsLDgVERFRbnynTkRERFolk8m0vhBJkUqlBACs85Vj+delUX3OUmxru40/00RUrCxfvhyVK1fG/fv3NWMspBMRkb5iMZ2IiIiISMeyldlIzHjT3iXe1Rqjv9mIpm7NYWdmJzgZEZFuqFQqjBs3DoMHD8bjx4+xYcMG0ZGIiIjeiW1eiIiISKs4yZYoJ5VahQmnJ6CNUgEAGFN/DJytnAWnIiLSnaysLHz99dfYvHkzAGDatGmYNGmS4FRERETvxmI6EREREZEOKFVK3E6+jZ1/7MSJ6yEISHkz7mbjJjYYEZEOpaSkoFOnTggNDYWBgQFWrVqFgIAA0bGIiIgKhMV0IiIi0ir2fyZ6Y/6F+fjlxi8wyVJj5Qrl3yv4GiGiYuLp06fw9/fHlStXYGFhgR07dsDf3190LCIiogJjMZ2IiIiISMuyldnYe2cvAKBkuhwWijfFdHPPhjCpXFlkNCIinbG0tISBgQEcHBwQEhKCOnXqiI5ERET0XlhMJyIiIq3ipFsiIOJpBF5lvYK9mT32eq3FvRWtIbewgPO6daKjERHpTIkSJRASEoKMjAy4urqKjkNERPTeWEyn95J0fpnoCJJQ9buDoiNIxpbBjUVHkISPXWxERyAiov/gcOxhAEBL55YwkBsITkNEpDvbtm3DgwcPMHr0aACAo6Oj4EREREQfjsV0IiIi0ir2TKfiTqFU4H8P/wcA8Hf1BzIFByIi0pGFCxdi1KhRAIA6derAx8dHcCIiIqL/Ri46ABERERFRUXbq8SmkZafBwdwBtUrVEh2HiEjrVCoVRo4cqSmkDx06FF5eXoJTERER/XecmU5ERERaxYnpVNwduXcEANDSpSXkMs5lIaKiLTMzE7169cKOHTsAAPPmzcOoUaN4pRoRERUJLKYTEREREWlJxusMhD0MAwD4u/gLzUJEpG2JiYlo3749Tp48CSMjI2zYsAHdu3cXHYuIiKjQsJhOREREWsWZaFScnXx0EhmvM+Bk6QQPew/RcYiItOrw4cM4efIkrK2tsXv3bnh7e4uOREREVKhYTCciIiIi0pLD9w4DeNPihR8sEVFR9+WXX+Lp06do2bIlPDz4ASIRERU9LKYTERGRVrF+SMVVenY6Tj46CYAtXoio6AoLC0ONGjVgb28PAJqbjhIRERVFLKYTEREREWnBiccnoM7IwNKNcshmdcIN0YGIiArZxo0b0bdvXzRo0ADHjh2DmZmZ6EhERERaJRcdgIiIiIo2mUym9YVIHz169QhOLwCH59l5rjerU0fHiYiICodarcaMGTPQp08fvH79Gs7OzpDLWV4gIqKijzPTiYiIiIi0zNDBAa47d+QYM7CzE5SGiOjDvX79GkOGDMFPP/0EABg7dixmzpzJYjoRERULLKYTERGRVnHmOBEAAzkM/+wnTEQkVWlpaejevTv2798PmUyGpUuXYvDgwaJjERER6QyL6URERERERET0Tv369cP+/fthamqKLVu2oEOHDqIjERER6RSvwyIiIiKtksm0vxBpiyI9GzGRce/9vNdJSSh9PBr1b6m0kIqISIxp06ahcuXKCA0NZSGdiIiKJc5MJyIiIq1imxeSssi9d/H0dgoAwMCw4PNQ4n+YgYoHj6Din49lRkZaSEdEpH3JycmwsbEBAFSqVAnXrl2DgYGB2FBERESCSK6YnpCQgLVr1yIiIgJxcW9mCTk6OqJRo0b46quvUKpUKcEJiYiIiKioSH+Vrfm6tm+FAj/vdeILAMBdR8DYsSw+CRhV6NmIiLTtwIED6NmzJ7Zt24aWLVsCAAvpRERUrEmqzcv58+dRqVIl/Pjjj7C2tkbTpk3RtGlTWFtb48cff0SVKlVw4cIF0TGJiIjoH9jmhYqCpt0qwcHV6r2ft7+BHCeHNoaVX0stpCIi0p6ffvoJn3/+OVJSUrB69WrRcYiIiPSCpIrpQ4cORZcuXfDw4UOsX78ec+bMwZw5c7B+/Xo8ePAAnTt3xtChQ0XHJCIiIj02depUyGSyHEuVKlU06zMzMzF48GDY2dnB0tISnTp1Qnx8vMDEREREuqNWqzFx4kR88803UKlUCAgIwObNm0XHIiIi0guSavPy+++/Y/369Xn2XpXJZBg5ciQ+/vhjAcmIiIgoP/rYM7169eo4duyY5rGh4d9viUaOHImDBw9i+/btsLa2xpAhQ9CxY0ecPn1aRFQiIiKdycrKQv/+/bFx40YAwJQpUzBlyhS9/F1OREQkgqSK6Y6Ojjh37lyO2WP/dO7cOTg4OOg4FREREYmmUCigUChyjJmYmMDExCTP7Q0NDeHo6JhrPCUlBWvWrMGWLVvg4+MDAFi3bh2qVq2Ks2fPomHDhoUfnoiISA9kZmaiXbt2OHr0KAwMDLBy5Ur069dPdCwiIiK9Iqk2L6NHj8aAAQMwfPhw7Nu3D5GRkYiMjMS+ffswfPhwfPPNNxgzZozomERERPQPuuiZPmvWLFhbW+dYZs2alW+mP/74A2XLloWbmxt69OiBBw8eAACioqKQnZ0NX19fzbZVqlRBhQoVEBERofVzRUREJIqJiQnKly8Pc3Nz7Nu3j4V0IiKiPEhqZvrgwYNhb2+PRYsWYfny5VAqlQDe3E28bt26WL9+Pb744gvBKYmIiEjXgoKCEBgYmGMsv1npn3zyCdavX4/KlSvj6dOnmDZtGpo0aYLo6GjExcXB2NgYNjY2OZ7j4OCAuLg4bcUnIiISTiaTYeXKlRg1ahSqVasmOg4REZFeklQxHQC6du2Krl27Ijs7GwkJCQAAe3t7GBkZCU5GREREeZHroM/q21q6/FurVq00X9esWROffPIJnJ2dsW3bNpiZmWkrol7IzMyEqamp6BhERKQnTp06hVWrVmHNmjUwNDSEkZERC+lERERvIak2L/9kZGSEMmXKoEyZMiykExER0QezsbFBpUqVcPv2bTg6OiIrKwvJyck5tomPj8+zx7oUqFQqfP/993BycoKlpSXu3r0LAJg0aRLWrFkjOB0REYmyc+dO+Pr6YuPGjVi8eLHoOERERJIguWL677//jt69e8PNzQ1mZmawsLCAh4cHJk2ahJcvX4qOR0RERP+ii57p/0Vqairu3LmDMmXKoG7dujAyMkJoaKhmfUxMDB48eABPT8//eCbE+OGHH7B+/XrMnTsXxsbGmvEaNWpg9erVApMVPVkPHyLz5k1k3rwJVVq66DhERPlasmQJunTpAoVCgfbt2+Pbb78VHYmIiEgSJFVMP3LkCDw9PZGeno7GjRtDLpfj66+/Rps2bbB161bUqVOH/UyJiIjorUaPHo3w8HDcu3cPZ86cQYcOHWBgYIDu3bvD2toaffv2RWBgII4fP46oqCgEBATA09MTDRs2FB39g2zcuBE///wzevToAQMDA814rVq1cPPmTYHJipbk3Xtwp0VLxLbvgNj2HZB55QoAQK39LkdERAWmUqkwevRojBgxAmq1Gt9++y127NgBc3Nz0dGIiIgkQVI908eNG4eFCxfim2++AQD07t0bw4YNw40bN/D999+jVatWCAoKwrp16wQnJSIior/IdNAz/X08evQI3bt3x4sXL1CqVCl8+umnOHv2LEqVKgUAWLRoEeRyOTp16gSFQgE/Pz8sX75ccOoP9/jxY7i7u+caV6lUyM7OFpCoaMq6cxsAIDMzg4GlJQAg2VKGG+VfwEFkMCKiPykUCvTp0we//fYbAGD27NkYM2aM3v2eJiIi0meSKqbfvHkT/v7+mse+vr64c+cOnj59ijJlymDKlCno1KmTwIRERESk77Zu3frW9aampggODkZwcLCOEmlXtWrVcPLkSTg7O+cY37FjBz7++GNBqYou265d4TBuLABg9dXVSLq4RHAiIqI3bt26hf3798PIyAjr1q1Djx49REciIiKSHEkV052cnBATEwMXFxcAwJ07d6BSqWBnZwcAKFeuHFJTUwUmJCIion+Tc8KbUJMnT0afPn3w+PFjqFQq7Nq1CzExMdi4cSMOHDggOh4REemIh4cHtm3bBlNTUzRv3lx0HCIiIkmSVDG9d+/e6NevHyZMmAATExMsXLgQ7dq109xM6/Lly3B1dRWckoiIiEh/fP7559i/fz+mT58OCwsLTJ48GXXq1MH+/fvRokUL0fGIiEiLrly5gqysLNSrVw8A0KZNG8GJiIiIpE1SxfTx48cjLS0N33//vaaH6ZIlf1866+TkhBUrVghMSERERP/GXqziNWnSBEePHhUdQ3IcM4A7F5+913OuvbiG1WdnAACuJ17XRiwiogIJDQ1Fhw4dYGZmhoiICLi5uYmOREREJHmSKqYbGhpizpw5mDNnTp7rGzRooONERERERPrNzc0N58+f17TF+0tycjLq1KmDu3fvCkqm/zxf/P21sVnB3jZfiL+ArTGXcoxZGlsWZiwionfavHkzAgICkJ2djTp16sDW1lZ0JCIioiJBUsV0IiIikh5OTBfr3r17UCqVucYVCgUeP34sIJF0GKrf/N/DywkffVyqwM8raVoSX1T+AgBgYmCC9u7ttZCOiCg3tVqNOXPmICgoCADQtWtXbNiwASYmJoKTERERFQ1Fqph+48YNtGnThjOsiIiIqNjbt2+f5usjR47A2tpa81ipVCI0NFRzU3d6Ow/vcjA0Nijw9vZm9hhce7AWExER5aZUKjF06FBN69NRo0Zh7ty5kMvlgpMREREVHUWqmJ6VlYX79++LjkFERET/IAOnpovQvn17AG961vfp0yfHOiMjI7i4uGDBggUftO/g4GDMmzcPcXFxqFWrFpYuXfrWdnvJycmYMGECdu3ahcTERDg7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7Nkz9O7dG0+fPoW1tTVq1qyJI0eOoEWLFgCARYsWQS6Xo1OnTlAoFPDz88Py5csFpyYiyltWVhb69u2LX375BQAwffp0TJw4kTchJiIiItICSRXTW7dujUmTJsHf3x+mpqY51mVkZGDKlClo27atoHREREQkBWvWrHnrelNTUwQHByM4OFhHiYiIPszLly/RqVMnHDt2DAYGBli1ahUCAgJExyIiIiIqsiRVTJ84cSJ27dqFSpUqYciQIahcuTIA4ObNmwgODoZSqcSECRMEpyQiIqJ/4txIIqLCp1ar0b59exw/fhwWFhbYuXPnW+8vRURERET/naSK6Q4ODjhz5gwGDRqEoKAgqNVqAIBMJoOfnx+Cg4Ph4OAgOCUREREREZF2yWQyTJ8+Hb169cLOnTtRp04d0ZGIiIiIijxJFdMBwNnZGSEhIUhKSsLt27ehVqtRsWJF2Nraio5GREREeWDbXiKiwpOWlgYLCwsAwKeffoqYmBgYGxsLTkVERERUPEj29u62traoX78+GjRowEI6EREREREVedu2bYOrqyuuXLmiGWMhnYiIiEh3JFtMJyIiImmQyWRaX4iIirqFCxeia9eueP78OVauXCk6DhEREVGxxGI6ERERERGRnlKpVBg5ciRGjRoFABg6dCiWLl0qOBURERFR8SS5nulEREQkLfzknojow2RmZqJXr17YsWMHAGDevHkYNWoUr8ghIiIiEoTFdCIiIiIiIj2TkpKCzz77DCdPnoSxsTE2bNiAbt26iY5FREREVKyxmE5ERERaxRmURETvz8zMDCYmJrC2tsaePXvQrFkz0ZGIiIiIij0W04mIiIiIiPSMsbExdu7ciUePHqFatWqi4xARERER2MaUiIiItEymg4WIqCg4evQogoKCoFarAQBWVlYspBMRERHpEc5MJyIiIiIiEmzjxo3o27cvXr9+jZo1a6J79+6iIxERERHRv7CYTkRERFrFnulERPlTq9WYNWsWJkyYAADo3r07OnbsKDgVEREREeWFxfQ/hcU8Fx1BEppWtBcdQRKaupcSHUEyTo3zFh1BEvyWnhYdQRKODG0sOgIREVGBvX79GkOGDMFPP/0EABg7dixmzpwJuZzdOImIiIj0EYvpREREpFUsCRER5ZaWlobu3btj//79kMlkWLp0KQYPHiw6FhERERG9BYvpRERERER/ei2TI7NiVdExqBiIiIjAgQMHYGpqii1btqBDhw6iIxERERHRO7CYTkRERFrFnukkJVO9+mKAQ1nRMagY8PX1xc8//4xq1aqhUaNGouMQERERUQGwmE5ERERERKQD586dg4ODA5ydnQEA/fr1E5yIiIiIiN4H25gSERGRVsl0sBAR6bsDBw6gWbNm8Pf3R2Jioug4RERERPQBWEwnIiIiIiLSop9++gmff/45MjIy4OLiAmNjY9GRiIiIiOgDsJhOREREWiWTaX8hItJHarUaEydOxDfffAOVSoWAgADs27cPlpaWoqMRERER0Qdgz3QiIiLSKjkbsRBRMZSdnY3+/ftjw4YNAIApU6ZgypQpvCkzERERkYSxmE5ERERERFTIxowZgw0bNsDAwAA//fQT+vbtKzoSEREREf1HbPNCREREWsU2L0RUHI0dOxY1atTAvn37WEgnIiIiKiI4M52IiIiIiKgQJCUlwdbWFgDg6OiIy5cvw8DAQHAqIiIiIiosnJlOREREWiXTwX9ERKKdOnUK7u7u2LRpk2aMhXQiIiKiooXFdCIiIiIiov9g586d8PX1RWJiIlavXg2VSiU6EhERERFpAYvpREREpFXsmU5ERdmSJUvQpUsXKBQKtG/fHocOHYJczj+ziIiIiIoiSb7Le/ToEVJTU3ONZ2dn48SJEwISERERERFRcaJSqTBq1CiMGDECarUa3377LXbs2AFzc3PR0YiIiIhISyRVTH/69CkaNGgAZ2dn2NjYoHfv3jmK6omJifD29haYkIiIiP5NDpnWFyIiXVKpVPjyyy+xcOFCAMDs2bOxbNky9kgnIiIiKuIkVUwfN24c5HI5IiMjcfjwYVy/fh3e3t5ISkrSbKNWqwUmJCIiIiKiok4ul8Pd3R1GRkbYtGkTxo4dCxl7ThEREREVeYaiA7yPY8eOYffu3ahXrx4A4PTp0+jSpQt8fHwQGhoKAHwTS0REpGf4q5mIiqLvv/8eXbt2hYeHh+goRERERKQjkpqZnpKSAltbW81jExMT7Nq1Cy4uLvD29sazZ88EpiMiIiIioqLqypUr6NKlCzIyMgC8mcTDQjoRERFR8SKpYrqbmxuuXLmSY8zQ0BDbt2+Hm5sb2rZtKygZERER5Ucm0/5CRKRNoaGh+PTTT7Fjxw5MnDhRdBwiIiIiEkRSxfRWrVrh559/zjX+V0G9du3aug9FRERERERF1ubNm9GqVSu8evUKXl5emDRpkuhIRERERCSIpHqmz5gxA+np6XmuMzQ0xM6dO/H48WMdpyIiIqK3kYFTx4lIetRqNebMmYOgoCAAQNeuXbFhwwaYmJgITkZEREREokhqZrqhoSGsrKzeut7Z2VmHiYiIiIiIqKhRKpUYMmSIppA+atQobNmyhYV0IiIiomJOUsV0AHj69Cl++eUXhISEICsrK8e6tLQ0TJ8+XVAyIiIiyotcpv2FiKgwPX78GL/99htkMhkWL16M+fPnQy6X3J9ORERERFTIJNXm5fz582jZsiVUKhWys7Ph5OSEPXv2oHr16gCA1NRUTJs2DZMnTxaclIiIiIiIpKpChQo4cOAAHj16hM6dO4uOQ0RERER6QlLTK8aPH48OHTogKSkJ8fHxaNGiBby8vHDp0iXR0YiIiCgfMh38R0T0X929exfHjx/XPG7YsCEL6URERESUg6RmpkdFRSE4OBhyuRwlSpTA8uXLUaFCBTRv3hxHjhxBhQoVREckIiIiIiKJOX/+PNq2bYv09HScOHECH3/8sehIRERERKSHJFVMB4DMzMwcj8eNGwdDQ0O0bNkSa9euFZSKiIiI8iPjxHEi0mMhISHo0qUL0tPTUbt2bTg4OIiORERERER6SlLF9Bo1auDMmTOoWbNmjvHRo0dDpVKhe/fugpIREREREZHUrFmzBgMHDoRSqUSLFi2wY8cOWFlZiY5FRERERHpKUj3Te/fujdOnT+e5bsyYMZg2bRpbvRAREekZ9kwnIn2jVqsxdepU9OvXD0qlEn369MHBgwdZSCciIiKit5JUMb1fv37YtGlTvuvHjh2L2NhYHSYiIiIiIiKp2bRpE6ZNmwYAmDhxItatWwcjIyPBqYiIiIhI30mqzQsRERFJj5wTx4lIz3Tv3h07duxA27ZtMWDAANFxiIiIiEgiilQx/caNG2jTpg3u3r0rOgoRERH9iW1YiEgfJCQkwMbGBoaGhjAyMsLevXsh4x2SiYiIiOg9SKrNy7tkZWXh/v37omMQEREREZEeiYmJQYMGDTBkyBCo1WoAYCGdiIiIiN6bpGamBwYGvnX98+fPdZSEiIiICor1KpIaU6MiNd+k2Dtz5gw+++wzJCYm4tixY0hKSkLJkiVFxyIiIiIiCZJUMX3JkiWoXbs2rKys8lyfmpqq40T/zdGdm/D72XA8e3wfRsYmcK3igc96DYKDU4Vc26rVavz0w2jcuBSJvmNnouYnTQUk1h9RF85j4/o1uH79GhKeP8fCxcvg3dxXdCy9s2Pbr9i1fSuePnkMAHD9yB39BnyLRp8W75+fvPBnKrevGpZHgGfOf4/uJ6aj94ZLAIDPPBzQvHIpVCptAQsTQ7RZfhapCqWIqHpr65bN2LBuDRISnqNS5SoYN34SPGrWFB2LiN7Cu4o9vCqVFh2DCsnu3bvx5ZdfIjMzEw0aNMCBAwdYSCciIiKiDyapYrq7uztGjhyJnj175rn+8uXLqFu3ro5Tfbjb1y6hSauOqOBeBSqlEgc2/4wV00Yi6MdfYGJqlmPbsAPbOLXvHzIyMlCpUhV83qETRo0YKjqO3nJwcMTgYYEoX8EZaqhxcN9ejB4xBJu27sRH7hVFx9Mr/JnK292ENIzaeU3zWKlSa742MZTj3P0knLufhIGfughIp98OHwrB/LmzMHHKNHh41MLmTRswaGBf7D1wGHZ2dqLj6RR/e5GUdK5THmbGBqJjUCEIDg7G0KFDoVar8dlnn+HXX3+FhYWF6FhEREREJGGSuoa1Xr16iIqKyne9TCbT9ECUgkGTF+ITn9YoU8ENTq4V0WPoeCQlxOPhnZgc2z2K/QPH927Fl4ODBCXVP582aYrBw0bAp3kL0VH0WhMvbzRu4oUKzi5wdnbFt0NHwNzcHNFXfxcdTe/wZypvSpUaienZmiUl87Vm3Y5LT7Hl/GNcf/pKYEL9tWnDOnTs/AXad+iEj9zdMXHKNJiammLPrp2ioxV7s2bNQv369VGiRAmULl0a7du3R0xMzt+9mZmZGDx4MOzs7GBpaYlOnTohPj5eUGIiel9Tp07V9EcfOHAgdu3axUI6EREREf1nkiqmL1iwACNGjMh3fa1ataBSqXQXqJBlpKcBAMwt/25jk6XIxMZF09BlQCCsbIvXTEYqXEqlEv93+CAyMtLhUbO26DgkEeVszbCzf338+nVdTPSvhNIljEVHkoTsrCzcuH4NDT0bacbkcjkaNmyEK79fEphMDLlMpvXlfYSHh2Pw4ME4e/Ysjh49iuzsbLRs2RJpaWmabUaOHIn9+/dj+/btCA8Px5MnT9CxY8fCPjVEpCX16tWDgYEBZsyYgRUrVsDQUFIX5BIRERGRnpLUu0pHR8dC2Y9CoYBCocgxlpWlgLGxSaHs/0OoVCrsWvsjXKt4oKyzm2Z899of4Vq5BjwaNBGWjaTt9h+30Ld3d2RlKWBmZo65C5fC7SN30bFIAm7EvcLsI3/gQVIG7CyM8VXD8lj6hQe+2ngZGdnsjf42SclJUCqVudq52NnZITb2rqBURVtev9tNTExgYpL7d/vhw4dzPF6/fj1Kly6NqKgoNG3aFCkpKVizZg22bNkCHx8fAMC6detQtWpVnD17Fg0bNtTeN0JEhaJt27a4efMm3N35noeIiIiICo+kZqafO3cOSmX+BRyFQoFt27a9cz+zZs2CtbV1jmXbqiWFGfW97Vi1EHEP7uKrwGmasavnTuFW9EV0/HqYwGQkdc4uLvjlt11Yu+k3dPqiG6ZNDsLdO7dFxyIJiLyXjLA/XuBuQjrO30/G2D3XYWliCO9KvEqG3o9MB0tev9tnzZpVoHwpKSkAoLkpYVRUFLKzs+Hr+/dNiKtUqYIKFSogIiLig88DEWnPo0eP4Ovrizt37mjGWEgnIiIiosImqWK6p6cnXrx4oXlsZWWFu3f/nuGXnJyM7t27v3M/QUFBSElJybF80X+4VjIXxI5VC3HtwhkMmf4jbOxLa8b/uBqFF3GPMa5XK4zs7IWRnb0AAGvnTcTSSUNExSWJMTIyRvkKzqharToGDwtExUqV8duWTaJjkQSlKpR4lJQBJxuzd29czNna2MLAwCDH7ywAePHiBezt7QWlKtry+t0eFPTue42oVCqMGDECjRs3Ro0aNQAAcXFxMDY2ho2NTY5tHRwcEBcXp434RPQfREdHw9PTE6Ghoejbt6/oOERERERUhEmqzcu/by6a181GC3ID0rwu+zY2VuSztfao1WrsXL0IVyJPYMj0pbBzKJtjvW/Hnmjo+1mOsTkje6NDwFDUqNdYl1GpCFGp1MjKyhIdgyTIzEiOsjamSLzxXHQUvWdkbIyq1aoj8mwEfJq/md2sUqkQGRmBbt17Ck4nwPu1NP8g+bV0eZfBgwcjOjoap06d0kIqItK248ePo0OHDkhJSUHVqlWxYcMG0ZGIiIiIqAiTVDG9IGTveRMykbb/vAAXTx5Dv6BZMDUzx8ukNzMYTc0tYWxiAitbuzxvOmpr75Cr8F7cpKen4eGDB5rHjx8/QszNG7CytkaZMsX73PxT8I8L4dm4CRwdyyI9PQ1HDh3AxQvn8OPyVaKj6R3+TOU2qIkLztxNRPwrBewsjPG1ZwWoVMCxmDfF9JLmRihpYayZqe5mb4H0LCXiXyrwSvFaZHS90KtPACaNH4vq1WughkdN/LJpAzIyMtC+A29iqS+GDBmCAwcO4MSJEyhXrpxm3NHREVlZWUhOTs4xOz0+Pr7Q7t9CRP/dr7/+ij59+iA7OxtNmjTB3r17YWtrKzoWERERERVhRa6YLiWnj+wBACydNDTH+JdDxuMTn9YCEknH9WvR6P91H83jBfNmAwA+a9ce02fMFhVL7yQmvsC0ieOQkPAclpYl4F6pEn5cvgqfePLKhn/jz1RupUoYY3LryrAyNURyRjauPnmJQVuvICXjTaG8XU1HBHhW0Gy/9AsPAMCsI3/g8PVnQjLrE/9WrZGUmIjly35EQsJzVK5SFct/Wg27YtjmRaaLqenvQa1WY+jQodi9ezfCwsLg6uqaY33dunVhZGSE0NBQdOrUCQAQExODBw8ewNPTU0RkIvoHtVqN+fPnY8yYMQCALl26YOPGjTA1NRWcjIiIiIiKOskV069fv67pV6pWq3Hz5k2kpqYCABISEkRGe29Ldr3/JeUf8pyiqF79T3Dp6k3RMfTepKkzREeQDP5M5TY95NZb168/+xDrzz7UURpp6t6jJ7r3KIZtXfTc4MGDsWXLFuzduxclSpTQvK+wtraGmZkZrK2t0bdvXwQGBqJkyZKwsrLC0KFD4enpiYYNGwpOT0RZWVnYvn07AGDEiBFYsGAB5HJJ3QqKiIiIiCRKcsX05s2b5+iL3rZtWwBv2ruo1WpJtXkhIiIqDvTtV/OKFSsAAM2aNcsxvm7dOnz11VcAgEWLFkEul6NTp05QKBTw8/PD8uXLdZyUiPJiYmKCAwcOYO/evejfv7/oOERERERUjEiqmB4bGys6AhEREUlcQW5WbmpqiuDgYAQHB+sgERG9y4sXL7B//37NB16lS5dmIZ2IiIiIdE5S10M6OzsXaCEiIiL9IdPBQroVHBwMFxcXmJqa4pNPPsG5c+fy3XbVqlVo0qQJbG1tYWtrC19f37duT/RvsbGxaNSoEQICArBhwwbRcYiIiIioGJNcMT0gIAAbN27Ew4fs00tERESka7/99hsCAwMxZcoUXLx4EbVq1YKfnx+ePcv7xsNhYWHo3r07jh8/joiICJQvXx4tW7bE48ePdZycpCgqKgqenp64desWypcvj3r16omORERERETFmKSK6QEBAYiNjcXAgQPh4uICd3d39O/fH7/++qvm5mFERESkZzg1vUhZuHAh+vfvj4CAAFSrVg0rV66Eubk51q5dm+f2mzdvxrfffovatWujSpUqWL16NVQqFUJDQ/M9hkKhwMuXL3MsVPwcPnwYXl5eiI+PR82aNREREYHq1auLjkVERERExZikiulTp05FWFgYkpOTcfToUfTo0QO3bt1CQEAAnJycULVqVQwePFh0TCIiIqIiKSsrC1FRUfD19dWMyeVy+Pr6IiIiokD7SE9PR3Z2NkqWLJnvNrNmzYK1tbVmKV++/H/OTtKydu1atG3bFmlpaWjevDlOnDgBJycn0bGIiIiIqJiTVDH9LyYmJvDx8cG0adMQHh6Op0+fIigoCE+ePMHKlStFxyMiIqJ/kOngP9KNhIQEKJVKODg45Bh3cHAo8FWCY8eORdmyZXMU5P8tKCgIKSkpmoXt/YqXy5cvo2/fvlAqlejZsydCQkJgbW0tOhYREREREQxFB/gQWVlZiIiIQFhYGMLCwhAZGQknJyd07twZXl5eouMRERERUR5mz56NrVu3IiwsDKampvluZ2JiAhMTEx0mI31Su3ZtTJ06FZmZmZg5cyZkMn5gRkRERET6QVLF9OnTp2uK587OzmjatCkGDBiAzZs3o2zZsqLjERERUR5YBys67O3tYWBggPj4+Bzj8fHxcHR0fOtz58+fj9mzZ+PYsWOoWbOmNmOSBKWmpiIzMxP29vYAgMmTJ7OITkRERER6R1LF9KlTp6JChQpYsGABunTpAjs7O9GRiIiIiIoNY2Nj1K1bF6GhoWjfvj0AaG4mOmTIkHyfN3fuXMyYMQNHjhxBvXr1dJSWpCI+Ph5t27aFTCbD8ePHYWFhwUI6EREREeklSfVMP3ToELp164b169ejbNmy8PDwwNChQ7Fjxw48f/5cdDwiIiLKg0wHC+lOYGAgVq1ahQ0bNuDGjRsYNGgQ0tLSEBAQAADo3bs3goKCNNvPmTMHkyZNwtq1a+Hi4oK4uDjExcUhNTVV1LdAeuTWrVto1KgRLly4gLt37+Lu3buiIxERERER5UtSM9P9/Pzg5+cHAHj16hVOnjyJ8PBwzJ07Fz169IC7uzu8vb2xbNkywUmJiIiIiqauXbvi+fPnmDx5MuLi4lC7dm0cPnxYc1PSBw8eQC7/e77GihUrkJWVhc6dO+fYz5QpUzB16lRdRic9c/bsWbRt2xYvXryAm5sbDh8+jIoVK4qORURERESUL0kV0/+pRIkSaN26Nfz8/HDu3Dns27cPy5cvx4oVK1hMJyIi0iecOl7kDBkyJN+2LmFhYTke37t3T/uBSHL27duHbt26ISMjA/Xq1cOBAwc0H8gQEREREekryRXTVSoVLly4gOPHjyMsLAynT59GWloaypUrhw4dOsDb21t0RCIiIvoHGavpRPQPW7ZsQa9evaBSqdC6dWts27YNFhYWomMREREREb2TpIrprVq1wpkzZ/Dq1SuULVsW3t7eWLRoEby9veHm5iY6HhERERERvUPDhg1hb2+Pzz//HMuXL4ehoaT+JCEiIiKiYkxS71xtbGwwf/58NGvWjP0UiYiIJELGielUhMSmxGLHrR2iY0iOWq2G7M9/DNzc3HDx4kWULVtWM0ZEREREJAXyd2+iP/r3749Fixbl2U8xJSUF1atXx8mTJwUkIyIiIqLiYNzJcZqvTQ1NBSaRjpSUFLRq1QoHDhzQjDk5ObGQTkRERESSI6li+pIlSzBgwABYWVnlWmdtbY2BAwdi4cKFApIRERFRfmQ6WIh0JUWRAgCoYVcDbdzaCE6j/x4/foymTZviyJEj6NevH9LT00VHIiIiIiL6YJIqpl+6dAl+fn75rm/ZsiWioqJ0mIiIiIiIiqNxn4yDvZm96Bh67dq1a/D09MSVK1fg4OCAkJAQmJubi45FRERERPTBJNUz/dmzZzAyMsp3vaGhIZ4/f67DRERERPROnDpOVOyEh4ejffv2SE5ORuXKlXH48GG4uLiIjkVERERE9J9Iama6k5MToqOj811/5coVlClTRoeJiIiIiIjon7Zt24aWLVsiOTkZjRs3xunTp1lIJyIiIqIiQVLF9NatW2PSpEnIzMzMtS4jIwNTpkxB27ZtBSQjIiKi/Mh08B+RtqnVaow5MQaPUx+LjqL3jh8/jqysLHTs2BFHjx6FnZ2d6EhERERERIVCUm1eJk6ciF27dqFSpUoYMmQIKleuDAC4efMmgoODoVQqMWHCBMEpiYiIiKioeZz6GIdiDwEADGWGKGPBqyHzs3TpUtSpU+QdhyMAANbrSURBVAdff/01DAwMRMchIiIiIio0kiqmOzg44MyZMxg0aBCCgoKgVqsBADKZDH5+fggODoaDg4PglERERPRPMk4cpyJADbXm60OdDqG0eWmBafRLZmYmfvzxR4wcORJGRkYwNDRE//79RcciIiIiIip0kiqmA4CzszNCQkKQlJSE27dvQ61Wo2LFirC1tRUdjYiIiIiKODNDMzhaOIqOoTcSExPRvn17nDx5ErGxsVixYoXoSEREREREWiO5YvpfbG1tUb9+fdExiIiI6B04MZ2oaLp//z5atWqFGzduwNraGl988YXoSEREREREWiXZYjoREREREYlx+fJltGrVCnFxcShXrhxCQkLg4eEhOhYRERERkVbJRQcgIiKiIk6mg4WIdObo0aNo0qQJ4uLi4OHhgYiICBbSiYiIiKhYYDGdiIiIiIgK5OXLl+jatStSU1Ph7e2NkydPoly5cqJjERERERHpBIvpREREpFUyHfxHRLphZWWFLVu2oHfv3jh06BCsra1FRyIiIiIi0hkW04mIiIiIKF+vX7/GH3/8oXns7++PDRs2wMTERGAqIiIiIiLdYzGdiIiItEom0/5CRNqRlpaGjh07olGjRjkK6kRERERExRGL6URERERElMuzZ8/g4+OD/fv3IzU1lcV0IiIiIir2DEUHICIioqKNE8eJpOf27dvw9/fHnTt3ULJkSezfvx+NGjUSHYuIiIiISCgW04mIiIiISOPcuXNo27Ytnj9/DhcXFxw+fBiVK1cWHYuIiIiISDgW0//UrHIp0RGoCDGRcx4mFa4jQxuLjiAJtvWHiI4gCRmXlun2gPwnkUgyIiMj4ePjg/T0dNStWxcHDhyAo6Oj6FhERERERHqBxXQiIiIiIgIA1KxZE7Vq1YK1tTW2b98OS0tL0ZGIiIiIiPQGi+lERESkVTJOTSfSa2q1GgAgk8lgZmaGkJAQWFhYwMjISHAyIiIiIiL9IhcdgIiIiIo2mUz7CxF9mOzsbAQEBGDy5MmaMRsbGxbSiYiIiIjywJnpRERERETF0MuXL9G5c2ccPXoUBgYG6NmzJ280SkRERET0FiymExERkVZx4jiR/nny5AnatGmDy5cvw9zcHNu3b2chnYiIiIjoHVhMJyIiIiIqRm7cuAF/f388ePAApUuXxsGDB1GvXj3RsYiIiIiI9B6L6URERKRdnJpOpDdOnTqFdu3aISkpCRUrVsThw4fh5uYmOhYRERERkSTwBqRERERERMVEbGwskpKS0LBhQ5w5c4aFdCIiIiKi98CZ6URERKRVMk5NJ9IbvXr1grm5OVq1agVzc3PRcYiIiIiIJIUz04mIiIj+n707j4uy6v8//h4QBkQWUWRRFPctd8tcyo1EM9O0LDPFJbXcNUutFDUVrTQtl5Y7t8rbstT6alpqarmXS4uaqWlaCm4priBwfn/0Y24nwAEEBvD19HE9Hs65znWdz3WugTnz4cwZoIBKTk7W5MmTFRMTYyvr1KkTiXQAAAAgC0imAwCAHGWx5PwGILX4+Hg9+eSTeumll/TQQw8pMTHR2SEBAAAA+RrLvAAAAAAFzN9//61HHnlEmzZtkpubm4YNG6ZChRj6AwAAALeDETUAAMhRTBwHcteJEyfUpk0b7du3Tz4+Plq2bJlatmzp7LAAAACAfI9kOgAAAFBA/PTTT2rTpo1OnjypkJAQrV69WjVr1nR2WAAAAECBQDIdAADkLKamA7nCGKO+ffvq5MmTqlatmlavXq3SpUs7OywAAACgwOALSAEAAIACwGKx6OOPP9bjjz+uzZs3k0gHAAAAshnJdAAAkKMsufAvM7799lu1a9dOISEhslgsWrFihd1+Y4zGjh2r4OBgeXp6Kjw8XIcOHcrGHgGyjzFGu3fvtj0uU6aMlixZoqJFizoxKgAAAKBgIpkOAADuKFeuXFGtWrU0e/bsNPe/+uqrevPNN/X2229rx44d8vLyUkREhK5fv57LkQK3lpSUpAEDBqh+/fqp/igEAAAAIPuxZjoAAMhRljy2ZnqbNm3Upk2bNPcZYzRjxgy9/PLLat++vSRp0aJFCgwM1IoVK/TEE0/kZqhwkt8v/K64hDi7stirsU6KJm1Xr17Vk08+qc8//1wWi0V//vmns0MCAAAACjyS6QAAIN+Lj49XfHy8XZnVapXVas3UeY4ePaqYmBiFh4fbynx9fdWgQQNt27aNZPodYPe5vRr3+Zvp7s/sskI54ezZs2rXrp22b98uq9WqDz/8UI8++qizwwIAAAAKPJZ5AQAAOcqSC1t0dLR8fX3ttujo6EzHGhMTI0kKDAy0Kw8MDLTtQ8EWG39GklS4UGGFeoem2p6q9pRT4/v999/VqFEjbd++XUWLFtXatWtJpAMAAAC5hJnpAAAg3xs9erSGDx9uV5bZWenAzR4o84AmNpno7DDsxMTEqGHDhjp9+rRKly6tNWvWqGrVqs4OCwAAALhjMDMdAADkrFyYmm61WuXj42O3ZSWZHhQUJEmKjbVfHzs2Nta2D3CWwMBAPf7446pdu7a2bdtGIh0AAADIZSTTAQAA/r+yZcsqKChI69evt5XFxcVpx44datiwoRMjw50sMTFRkmSxWPTGG2/ou+++U0hIiJOjAgAAAO48LPMCAAByVF74wsabXb58WYcPH7Y9Pnr0qPbu3St/f3+VLl1aQ4cO1cSJE1WxYkWVLVtWY8aMUUhIiDp06OC8oHFHMsZo/Pjx2rp1q1auXCl3d3e5urqqSJEizg4NAAAAuCORTAcAAHeUH374Qc2bN7c9TllrPTIyUgsWLNALL7ygK1euqG/fvrpw4YKaNGmiNWvWyMPDw1kh4w5048YNPfPMM5o3b54kaeXKlerYsaOTowIAAADubCTTAQBAjrLkrYnpatasmYwx6e63WCyaMGGCJkyYkItRAf9z+fJlPfbYY1qzZo1cXFw0Z84cEukAAABAHkAyHQAAAMgjYmNj1bZtW+3atUuFCxfWxx9/rIceesjZYQEAAABQPv4C0u+++05PPfWUGjZsqL/++kuS9MEHH2jz5s1OjgwAANzMkgsbUBAcPHhQDRs21K5duxQQEKANGzaQSAcAAADykHyZTP/ss88UEREhT09P7dmzR/Hx8ZKkixcvavLkyU6ODgAA3MxiyfkNKAiuX7+us2fPqkKFCtq6davuueceZ4cEAAAA4Cb5Mpk+ceJEvf3223rvvffk5uZmK2/cuLF2797txMgAAACArKlVq5bWrFmjrVu3qkKFCs4OBwAAAMC/5Mtk+sGDB3X//fenKvf19dWFCxdyPyAAAHALLPQCpGfOnDl2yxQ2atRIAQEBTowIAAAAQHryZTI9KChIhw8fTlW+efNmlStXzgkRAQAAABmXnJyskSNHasCAAXr44Yd16tQpZ4cEAAAAwIFCzg4gK/r06aMhQ4Zo3rx5slgsOnnypLZt26YRI0ZozJgxzg4PAADchDXNAXvx8fHq1auXFi9eLEl6/vnnFRQU5OSoAAAAADiSL5Ppo0aNUnJyslq2bKmrV6/q/vvvl9Vq1YgRIzRo0CBnhwcAAACk6cKFC+rYsaM2bNigQoUKad68eerWrZuzwwIAAACQAflymReLxaKXXnpJ58+f1y+//KLt27frzJkzeuWVV5wdWrZYsvgjtXmghe6uU0Ndn3hMP//0k7NDyrPoq4yhnzKGfsoY+smei4tFY/u31YGV43R+23Tt+yJKo/q0TlVvzLNt9fvXk3R+23Stenugype+c9ZEZsV05CebY7fm2Ln//PNP3XfffdqwYYO8vb315ZdfkkgHAAAA8pF8mUxP4e7urmrVqumee+5RkSJFnB1Otliz+ku9/mq0+vUfoCVLl6ty5Sp6tl9vnTt3ztmh5Tn0VcbQTxlDP2UM/ZTacz0eUJ9H79OwKUtVu+NEvfzm5xoeGa7+XZreVOefx4MnL9H93V/XlWsJ+r/ZA2R1z5cfEAMKtDPXz0qS3F3ds/3cU6dO1S+//KLg4GB9++23euCBB7K9DQAAAAA5J18m069cuaIxY8aoUaNGqlChgsqVK2e35WcfLJyvjo92VodHOql8hQp6OWq8PDw8tGLZZ84OLc+hrzKGfsoY+ilj6KfU7q1VTis3/aQ1m/fp+KnzWr5ur9Zv/1X1q5ex1RnwZHNNfe8rrdz4s345dFJPj1mk4ABfPdy8lhMjzz0WS85vQHZysbioa9Wu2X7e1157Tb1799a2bdtUu3btbD8/AAAAgJyVL6fEPf3009q0aZO6deum4OBgWQrIu+gbCQk6sH+fevfpZytzcXHRvfc20k8/7nFiZHkPfZUx9FPG0E8ZQz+lbfuPv6t3p8aqULqEDh8/rRqVSqph7XIaNW2ZJCmsZDEFB/jqmx2/2o6Ju3xd3/9yTA1qhmnpV7ucFTqAdExqMknl/cpny7k2b96sRo0aycXFRR4eHvrPf/6TLecFAAAAkPvyZTJ99erVWrVqlRo3bpyl4+Pj4xUfH29XZlytslqt2RFelv194W8lJSWpWLFiduXFihXT0aO/OymqvIm+yhj6KWPop4yhn9L2+vy18inioR+Xv6ykJCNXV4uiZq/UktU/SJKCivtIkk6fv2R33OlzlxRYzCfX43UGC6ua4w5kjNFrr72mkSNH6oUXXtDUqVOdHRIAAACA25Qvl3kpWrSo/P39s3x8dHS0fH197bbXpkZnY4QAgDvFo63q6ok2d6vHiwvV8MmpenrsBxraraW6tmvg7NAAOElSUpIGDx6skSNHSvpnIocxxslRAQAAALhd+XJm+iuvvKKxY8dq4cKFKly4cKaPHz16tIYPH25XZlydOytdkor6FZWrq2uqL/I7d+6cihcv7qSo8ib6KmPop4yhnzKGfkrb5KEd9Pr8tbblWvYdPqnSwf56vucD+uj/dijmbJwkqYS/t+3/klSimLd+OvinU2LOdUxMxx3k2rVr6tq1q5YvXy5JmjZtWqpxJwAAAID8KV/OTJ82bZq++uorBQYGqkaNGqpbt67d5ojVapWPj4/d5uwlXiTJzd1dVatV147t22xlycnJ2rFjm2rWquPEyPIe+ipj6KeMoZ8yhn5Km6eHu5JNsl1ZUrKRi8s/L7HH/jqnU2cuqnmDyrb93l4euvuuMO346Vhuhgogh507d07h4eFavny53N3dtWTJEhLpAAAAQAGSL2emd+jQwdkh5JhukT015sWRql79Lt1Vo6Y+/GChrl27pg6PdHR2aHkOfZUx9FPG0E8ZQz+l9uW3P2tk7widOPW39h85pdpVSmnwU821aMV2W53Zizdo5NOtdfj4GR3765yi+rfVqTMX9cWGH50Yee5hYjruBImJiWrRooV++ukn+fn5acWKFWratKmzwwIAAACQjfJlMj0qKsrZIeSY1m0e1N/nz2vOrDd19uwZVa5SVXPe+Y+K3cFLKKSHvsoY+ilj6KeMoZ9SGz51qaL6P6SZLz6ugKJFdOrMRb3/6RZNfne1rc60BetU2NOqWS93kZ+3p7buPaKHB8xRfEKiEyMHkJ0KFSqk0aNHa+TIkfryyy9VvXp1Z4cEAAAAIJtZTD7+NqRdu3bpwIEDkqTq1aurTp2sLzNwnXwGAOR7Re8e6OwQ8oVre2blanunL93I8TZKeLvleBtwnri4OPn6+urixYvy8fHJ9vPfuH5db0Y+Kklac+9ZDWn/sh4q91CGjo2Pj7dbLvDq1atZ+k4fAACQ/+X0mAWA8+XLNdNPnz6tFi1a6O6779bgwYM1ePBg1atXTy1bttSZM2ecHR4AAADuAPPnz1e1atX0119/2cpIpAMAAAAFV75Mpg8aNEiXLl3Svn37dP78eZ0/f16//PKL4uLiNHjwYGeHBwAAbmLJhX9AbjLGaMKECerVq5d+//13vffee84OCQAAAEAuyJdrpq9Zs0br1q1T1apVbWXVqlXT7Nmz1apVKydGBgAAgIIsMTFR/fv3tyXQR48eXaC/zwcAAADA/+TLZHpycrLc3FKvjerm5qbk5GQnRAQAANLFxHEUEFeuXNHjjz+uVatWycXFRbNmzdKzzz7r7LAAAAAA5JJ8ucxLixYtNGTIEJ08edJW9tdff2nYsGFq2bKlEyMDAABAQXT69Gk1a9ZMq1atkqenp5YtW0YiHQAAALjD5Mtk+qxZsxQXF6ewsDCVL19e5cuXV1hYmOLi4vTWW285OzwAAHATSy5sQE5zd3fXtWvXVLx4cX3zzTdq3769s0MCAAAAkMvy5TIvoaGh2r17t9avX68DBw5IkqpWrarw8HAnRwYAAICCyM/PT6tXr9a1a9dUqVIlZ4cDAAAAwAnyZTJdkr755ht98803On36tJKTk7Vnzx4tXrxYkjRv3jwnRwcAAFJYmDqOfOrzzz/XiRMnNHDgQEn/TOgAAAAAcOfKl8n08ePHa8KECapfv76Cg4Nl4V06AAB5loWFWJAPzZ07VwMHDpQxRjVq1FDTpk2dHRIAAAAAJ8uXyfS3335bCxYsULdu3ZwdCgAAAAoQY4wWvrZQn779qSTp6aefVuPGjZ0cFQAAAIC8IF9+AWlCQoIaNWrk7DAAAEAGWCw5vyF3zZ49W2FhYfLw8FCDBg20c+fOW9ZfunSpqlSpIg8PD9WoUUNffvllLkWaOYlJydq3+IgtkT5+/Hi9++67KlQoX84/AQAAAJDN8mUy/emnn7atjw4AAIDc8/HHH2v48OGKiorS7t27VatWLUVEROj06dNp1t+6dau6dOmi3r17a8+ePerQoYM6dOigX375JZcjv7VrCTf0/nc7FbPrnFxcXTRv3jyNHTuW5QQBAAAA2FiMMcbZQWTWkCFDtGjRItWsWVM1a9aUm5ub3f7p06dn+pzXE7MrOgCAsxS9e6CzQ8gXru2Zlavt/X01KcfbKFrYNcfbwD8aNGigu+++W7Nm/fM8Sk5OVmhoqAYNGqRRo0alqv/444/rypUrWrlypa3s3nvvVe3atfX222+n2UZ8fLzi4+Ntj+Pi4hQaGqqLFy/Kx8cnm69IunH9uro3vVdLdv4oV3cXjXl7rKJ6RmV7OwAAoGCLi4uTr69vjo1ZADhfvvzM6k8//aTatWtLUqpZTcweAgAAyBkJCQnatWuXRo8ebStzcXFReHi4tm3bluYx27Zt0/Dhw+3KIiIitGLFinTbiY6O1vjx47Ml5oyqH1ZKf1+5psutC6trh6652jYAAACA/CFfJtM3bNjg7BAAAEAG8XfuguPs2bNKSkpSYGCgXXlgYKB+/fXXNI+JiYlJs35MTEy67YwePdouAZ8yMz2nFLJa1Wrwc2olKaxWXXkX8c2xtgAAAADkX/kymQ4AAICCy2q1ymq15lp7FotFNRo3z7X2AAAAAORPJNMBAECOsoip6QVF8eLF5erqqtjYWLvy2NhYBQUFpXlMUFBQpuoDAAAAQF7l4uwAAAAAkD+4u7urXr16Wr9+va0sOTlZ69evV8OGDdM8pmHDhnb1JWnt2rXp1gcAAACAvIqZ6QAAIEexZnrBMnz4cEVGRqp+/fq65557NGPGDF25ckU9e/aUJHXv3l0lS5ZUdHS0JGnIkCFq2rSppk2bprZt22rJkiX64Ycf9O677zrzMgAAAAAg00imAwAAIMMef/xxnTlzRmPHjlVMTIxq166tNWvW2L5k9Pjx43Jx+d+HHxs1aqTFixfr5Zdf1osvvqiKFStqxYoVuuuuu5x1CQAAAACQJRZjjHF2EHnB9URnRwAAuF1F7x7o7BDyhWt7ZuVqe5euJ+d4G94erFxXkMXFxcnX11cXL16Uj4+Ps8MBAABIE2MWoODjnScAAAAAAAAAAA6wzAsAAMhZrJkOAAAAACgAmJkOAAAAAAAAAIADzEwHAAA5ysLUdAAAAABAAcDMdAAAAAAAAAAAHGBmOgAAyFEWJqYDAAAAAAoAZqYDAAAAAAAAAOAAM9MBAECOYmI6AAAAAKAgYGY6AAAAAAAAAAAOMDMdAADkLKamAwAAAAAKAGamAwAAAAAAAADgAMl0AACQoyy58C+zZs+erbCwMHl4eKhBgwbauXNnDlw5AAAAAKAgIZkOAADuKB9//LGGDx+uqKgo7d69W7Vq1VJERIROnz7t7NAAAAAAAHkYa6YDAIAcZcmFNdPj4+MVHx9vV2a1WmW1WlPVnT59uvr06aOePXtKkt5++22tWrVK8+bN06hRo3I+WGSaMUaSFBcX5+RIAAAA0pcyVkkZuwAoeEim/38eeawn4uPjFR0drdGjR6eZCMA/6KeMoZ8yjr7KmLzaT9f2zHJ2CHbyaj/lttx4jR03MVrjx4+3K4uKitK4cePsyhISErRr1y6NHj3aVubi4qLw8HBt27Yt5wNFlly6dEmSFBoa6uRIAAAAHLt06ZJ8fX2dHQaAHGAx/LksT4qLi5Ovr68uXrwoHx8fZ4eTZ9FPGUM/ZRx9lTH0U8bQT7knozPTT548qZIlS2rr1q1q2LChrfyFF17Qpk2btGPHjlyJF5mTnJyskydPytvbW5Yc+qhDXFycQkNDdeLECX5e8wjuSd7Efcl7uCd5D/ckb8qN+2KM0aVLlxQSEiIXF1ZWBgqiPDYfGwAAIPPSW9IFBYOLi4tKlSqVK235+PiQ+MhjuCd5E/cl7+Ge5D3ck7wpp+8LM9KBgo0/kwEAgDtG8eLF5erqqtjYWLvy2NhYBQUFOSkqAAAAAEB+QDIdAADcMdzd3VWvXj2tX7/eVpacnKz169fbLfsCAAAAAMC/scxLHmW1WhUVFcVH1h2gnzKGfso4+ipj6KeMoZ/ypuHDhysyMlL169fXPffcoxkzZujKlSvq2bOns0ODE/HzmvdwT/Im7kvewz3Je7gneRP3BUB24AtIAQDAHWfWrFl67bXXFBMTo9q1a+vNN99UgwYNnB0WAAAAACAPI5kOAAAAAAAAAIADrJkOAAAAAAAAAIADJNMBAAAAAAAAAHCAZDoAAAAAAAAAAA6QTAcAAAAAAAAAwAGS6ZkUExOjQYMGqVy5crJarQoNDVW7du20fv16PfHEE2rdurVd/TVr1shisWjcuHF25ePGjVPp0qUlSceOHZPFYklz2759uyTp1KlTevLJJ1WpUiW5uLho6NChqWJ77733dN9996lo0aIqWrSowsPDtXPnTrs6y5YtU6tWrVSsWDFZLBbt3bs32/rGEWf1XY8ePdLcX716dds5k5KSNGbMGJUtW1aenp4qX768XnnlFeXG9/Pm5efUjRs3NGHCBJUvX14eHh6qVauW1qxZk6re7NmzFRYWJg8PDzVo0CDV8y475Pd++vbbb9WuXTuFhITIYrFoxYoV2dY3N8vL/eTod9SNGzc0cuRI1ahRQ15eXgoJCVH37t118uTJ7O0kAHeszL5eLV26VFWqVJGHh4dq1KihL7/8MpcivXNk5p5kZKyL7JHVsd2SJUtksVjUoUOHnA3wDpTZe3LhwgUNGDBAwcHBslqtqlSpEr/Dsllm78mMGTNUuXJleXp6KjQ0VMOGDdP169dzKdqCLyvvtzZu3Ki6devKarWqQoUKWrBgQY7HCSD/I5meCceOHVO9evX0zTff6LXXXtPPP/+sNWvWqHnz5howYICaN2+uLVu2KDEx0XbMhg0bFBoaqo0bN9qda8OGDWrevLld2bp163Tq1Cm7rV69epKk+Ph4BQQE6OWXX1atWrXSjG/jxo3q0qWLNmzYoG3btik0NFStWrXSX3/9Zatz5coVNWnSRFOnTs2mXskYZ/bdzJkz7cpPnDghf39/PfbYY7bjp06dqrlz52rWrFk6cOCApk6dqldffVVvvfVWznWK8v5z6uWXX9Y777yjt956S/v379czzzyjRx55RHv27LHV+fjjjzV8+HBFRUVp9+7dqlWrliIiInT69Ols6qWC0U9XrlxRrVq1NHv27GzqldTyej85+h119epV7d69W2PGjNHu3bu1bNkyHTx4UA8//HA29hKAO1VmX6+2bt2qLl26qHfv3tqzZ486dOigDh066JdffsnlyAuuzN6TjIx1cfuyOrY7duyYRowYofvuuy+XIr1zZPaeJCQk6IEHHtCxY8f06aef6uDBg3rvvfdUsmTJXI684MrsPVm8eLFGjRqlqKgoHThwQO+//74+/vhjvfjii7kcecGV2fdbR48eVdu2bdW8eXPt3btXQ4cO1dNPP62vvvoqhyMFkO8ZZFibNm1MyZIlzeXLl1Pt+/vvv83BgweNJLNt2zZb+T333GNmz55tPDw8zLVr14wxxly7ds1YrVYzf/58Y4wxR48eNZLMnj17MhRH06ZNzZAhQxzWS0xMNN7e3mbhwoWp9mW2zduVV/rOGGOWL19uLBaLOXbsmK2sbdu2plevXnb1OnbsaLp27ZqJq8y8vNIv6T2ngoODzaxZs+zK/t0v99xzjxkwYIDtcVJSkgkJCTHR0dEZajsjCkI/3UySWb58eYbazIy83k//dqvfUSl27txpJJk//vgjQ23nhKZNm5pBgwaZ559/3hQtWtQEBgaaqKgo2/4//vjDPPzww8bLy8t4e3ubxx57zMTExNj2R0VFmVq1aplFixaZMmXKGB8fH/P444+buLg4W52kpCQzefJkExYWZjw8PEzNmjXN0qVLc/MygQIvs69XnTt3Nm3btrUra9CggenXr1+Oxnknud0xREZeR5B5WbkviYmJplGjRuY///mPiYyMNO3bt8+FSO8cmb0nc+fONeXKlTMJCQm5FeIdJ7P3ZMCAAaZFixZ2ZcOHDzeNGzfO0TjvVBl5v/XCCy+Y6tWr25U9/vjjJiIiIgcjA1AQMDM9g86fP681a9ZowIAB8vLySrXfz89PlSpVUkhIiDZs2CBJunTpknbv3q3HHntMYWFh2rZtm6R/ZjrFx8enmvWZ3a5evaobN27I398/R9txJK/13fvvv6/w8HCVKVPGVtaoUSOtX79ev/32myTpxx9/1ObNm9WmTZsst+NIXuuXtMTHx8vDw8OuzNPTU5s3b5b0z6yXXbt2KTw83LbfxcVF4eHhtthuV0Hop9yQH/rp3zLyO+rixYuyWCzy8/PL0VgcWbhwoby8vLRjxw69+uqrmjBhgtauXavk5GS1b99e58+f16ZNm7R27Vr9/vvvevzxx+2OP3LkiFasWKGVK1dq5cqV2rRpk6ZMmWLbHx0drUWLFuntt9/Wvn37NGzYMD311FPatGlTbl8qUCBl5fVq27ZtdvUlKSIiItte3+502TGGyCtj3YIkq/dlwoQJKlGihHr37p0bYd5RsnJPvvjiCzVs2FADBgxQYGCg7rrrLk2ePFlJSUm5FXaBlpV70qhRI+3atcu2FMzvv/+uL7/8Ug8++GCuxIzUeJ0HkFUk0zPo8OHDMsaoSpUqt6zXvHlz23IJ3333nSpVqqSAgADdf//9tvKNGzeqbNmydslc6Z8X2CJFithtt2PkyJEKCQlJ9QKR2/JS3508eVKrV6/W008/bVc+atQoPfHEE6pSpYrc3NxUp04dDR06VF27ds3aRWdAXuqX9ERERGj69Ok6dOiQkpOTtXbtWi1btkynTp2SJJ09e1ZJSUkKDAy0Oy4wMFAxMTGZais9BaGfckN+6Kd/c/Q76vr16xo5cqS6dOkiHx+f22rrdtWsWVNRUVGqWLGiunfvrvr162v9+vVav369fv75Zy1evFj16tVTgwYNtGjRIm3atEnff/+97fjk5GQtWLBAd911l+677z5169ZN69evl/TPH2MmT56sefPmKSIiQuXKlVOPHj301FNP6Z133nHWJQMFSlZer2JiYnL09e1Olx1jiLwy1i1IsnJfNm/erPfff1/vvfdeboR4x8nKPfn999/16aefKikpSV9++aXGjBmjadOmaeLEibkRcoGXlXvy5JNPasKECWrSpInc3NxUvnx5NWvWjGVenCi91/m4uDhdu3bNSVEByA8KOTuA/MJk8IsomzVrpqFDh+rGjRvauHGjmjVrJklq2rSpLSmycePGNGd8fvzxx6patWq2xDtlyhQtWbJEGzduTDVjNrflpb5buHCh/Pz8Un0p0ieffKKPPvpIixcvVvXq1W1rpoWEhCgyMjJD8WdWXuqX9MycOVN9+vRRlSpVZLFYVL58efXs2VPz5s3L8jkzi37KmPzQTzdz9Dvqxo0b6ty5s4wxmjt3bra0eTtq1qxp9zg4OFinT5/WgQMHFBoaqtDQUNu+atWqyc/PTwcOHNDdd98tSQoLC5O3t3eq46V//hBy9epVPfDAA3ZtJCQkqE6dOjl1SQCQr+Wlse6d7NKlS+rWrZvee+89FS9e3Nnh4P9LTk5WiRIl9O6778rV1VX16tXTX3/9pddee01RUVHODu+OtHHjRk2ePFlz5sxRgwYNdPjwYQ0ZMkSvvPKKxowZ4+zwAACZQDI9gypWrCiLxaJff/31lvWaN2+uK1eu6Pvvv9eGDRv0/PPPS/onUdWrVy+dP39eO3bsUL9+/VIdGxoaqgoVKtx2rK+//rqmTJmidevWpUoAOUNe6TtjjObNm6du3brJ3d3dbt/zzz9vm50uSTVq1NAff/yh6OjoHEum55V+uZWAgACtWLFC169f17lz5xQSEqJRo0apXLlykqTixYvL1dVVsbGxdsfFxsYqKCgoy+3erCD0U27ID/2UwtHvqJRE+h9//KFvvvnG6bPSJcnNzc3uscViUXJycrYcf/nyZUnSqlWrUn0xmNVqzUq4AP4lK69XQUFBOfr6dqe7nTFEXhvrFiSZvS9HjhzRsWPH1K5dO1tZyutboUKFdPDgQZUvXz5ngy7gsvKzEhwcLDc3N7m6utrKqlatqpiYGCUkJKR6L4TMyco9GTNmjLp162b7hHSNGjV05coV9e3bVy+99JJcXFg0ILel9zrv4+MjT09PJ0UFID/gN3YG+fv7KyIiQrNnz9aVK1dS7b9w4YIkqXz58goNDdUXX3yhvXv3qmnTppKkkiVLqmTJkpo2bZoSEhJybC3iV199Va+88orWrFmj+vXr50gbmZVX+m7Tpk06fPhwmms5Xr16NdUAxtXVNVPJsszKK/2SER4eHipZsqQSExP12WefqX379pIkd3d31atXz7ZchfTPG6j169erYcOG2dJ2Qein3JBf+snR76iURPqhQ4e0bt06FStWLEfiyC5Vq1bViRMndOLECVvZ/v37deHCBVWrVi1D56hWrZqsVquOHz+uChUq2G03z3gHkHVZeb1q2LChXX1JWrt2bba9vt3psjqGyItj3YIks/elSpUq+vnnn7V3717b9vDDD6t58+bau3cvr2PZICs/K40bN9bhw4ft3sv89ttvCg4OJpGeDbJyT9J7vyll/BOmyF68zgPIMqd87Wk+deTIERMUFGSqVatmPv30U/Pbb7+Z/fv3m5kzZ5oqVarY6nXv3t14e3vblRljTM+ePY23t7epVKmSXfnRo0eNJLNu3Tpz6tQpu+3atWu2env27DF79uwx9erVM08++aTZs2eP2bdvn23/lClTjLu7u/n000/tznHp0iVbnXPnzpk9e/aYVatWGUlmyZIlZs+ePebUqVPZ3V12nN13xhjz1FNPmQYNGqQZX2RkpClZsqRZuXKlOXr0qFm2bJkpXry4eeGFF7KpB9Lm7H5x9Jzavn27+eyzz8yRI0fMt99+a1q0aGHKli1r/v77b1udJUuWGKvVahYsWGD2799v+vbta/z8/ExMTAz9dFM/Xbp0yXYeSWb69Olmz5495o8//rhj+snR76iEhATz8MMPm1KlSpm9e/fa1YmPj8+2fsqspk2bmiFDhtiVtW/f3kRGRprk5GRTu3Ztc99995ldu3aZHTt2mHr16pmmTZva6kZFRZlatWrZHf/GG2+YMmXK2B6/9NJLplixYmbBggXm8OHDZteuXebNN980CxYsyLkLA+4wjl6vunXrZkaNGmWrv2XLFlOoUCHz+uuvmwMHDpioqCjj5uZmfv75Z2ddQoGT2XuSkbEubl9m78u/RUZGmvbt2+dStHeGzN6T48ePG29vbzNw4EBz8OBBs3LlSlOiRAkzceJEZ11CgZPZexIVFWW8vb3Nf//7X/P777+br7/+2pQvX9507tzZWZdQ4Dh6vzVq1CjTrVs3W/3ff//dFC5c2Dz//PPmwIEDZvbs2cbV1dWsWbPGWZcAIJ8gmZ5JJ0+eNAMGDDBlypQx7u7upmTJkubhhx82GzZssNWZP3++kWSeeeYZu2MXLFhgJJl+/frZlackqtLa/vvf/9rqpbX/5mRMmTJl0qwTFRWVKrZb1ckpzuy7CxcuGE9PT/Puu++mGVtcXJwZMmSIKV26tPHw8DDlypUzL730Uq4k8PLyc2rjxo2matWqxmq1mmLFiplu3bqZv/76K9U1vPXWW6Z06dLG3d3d3HPPPWb79u3Z0zk3ye/9tGHDhjTPExkZmW19ZEze7idHv6Nu1c7N8ee2WyXTjTHmjz/+MA8//LDx8vIy3t7e5rHHHrP7Y1JGkunJyclmxowZpnLlysbNzc0EBASYiIgIs2nTphy6KuDOdKvXq6ZNm6b6nfzJJ5+YSpUqGXd3d1O9enWzatWqXI644MvMPcnIWBfZI7M/KzcjmZ4zMntPtm7daho0aGCsVqspV66cmTRpkklMTMzlqAu2zNyTGzdumHHjxpny5csbDw8PExoaavr37283+Qa3x9H7rcjISLsJLynH1K5d27i7u5ty5cqZ+fPn53rcAPIfizF8pggAAAAAAAAAgFthzXQAAAAAAAAAABwgmQ4AAAAAAAAAgAMk0wEAAAAAAAAAcIBkOgAAAAAAAAAADpBMBwAAAAAAAADAAZLpAAAAAAAAAAA4QDIdAAAAAAAAAAAHSKYDAAAAAAAAAOAAyXQAuaJHjx7q0KGD7XGzZs00dOjQXI9j48aNslgsunDhQq63DQAAUJAsWLBAfn5+zg4jyywWi1asWHHLOv8ewwIAgDsbyXTgDtejRw9ZLBZZLBa5u7urQoUKmjBhghITE3O03WXLlumVV17JUF0S4AAAADnj5rHgzdvhw4edHZoWLFhgi8fFxUWlSpVSz549dfr06Ww5/6lTp9SmTRtJ0rFjx2SxWLR37167OjNnztSCBQuypb30jBs3znadrq6uCg0NVd++fXX+/PlMnYfEPwAAOa+QswMA4HytW7fW/PnzFR8fry+//FIDBgyQm5ubRo8ebVcvISFB7u7u2dKmv79/tpwHAAAAtydlLHizgIAAJ0Vjz8fHRwcPHlRycrJ+/PFH9ezZUydPntRXX3112+cOCgpyWMfX1/e228mI6tWra926dUpKStKBAwfUq1cvXbx4UR9//HGutA8AADKGmekAZLVaFRQUpDJlyujZZ59VeHi4vvjiC9vslkmTJikkJESVK1eWJJ04cUKdO3eWn5+f/P391b59ex07dsx2vqSkJA0fPlx+fn4qVqyYXnjhBRlj7Nr89zIv8fHxGjlypEJDQ2W1WlWhQgW9//77OnbsmJo3by5JKlq0qCwWi3r06CFJSk5OVnR0tMqWLStPT0/VqlVLn376qV07X375pSpVqiRPT081b97cLk4AAAD8byx48+bq6qrp06erRo0a8vLyUmhoqPr376/Lly+ne54ff/xRzZs3l7e3t3x8fFSvXj398MMPtv2bN2/WfffdJ09PT4WGhmrw4MG6cuXKLWOzWCwKCgpSSEiI2rRpo8GDB2vdunW6du2akpOTNWHCBJUqVUpWq1W1a9fWmjVrbMcmJCRo4MCBCg4OloeHh8qUKaPo6Gi7c6cs81K2bFlJUp06dWSxWNSsWTNJ9rO93333XYWEhCg5Odkuxvbt26tXr162x59//rnq1q0rDw8PlStXTuPHj3f4qc9ChQopKChIJUuWVHh4uB577DGtXbvWtj8pKUm9e/e2jXsrV66smTNn2vaPGzdOCxcu1Oeff26b5b5x40ZJjsfuAAAg40imA0jF09NTCQkJkqT169fr4MGDWrt2rVauXKkbN24oIiJC3t7e+u6777RlyxYVKVJErVu3th0zbdo0LViwQPPmzdPmzZt1/vx5LV++/JZtdu/eXf/973/15ptv6sCBA3rnnXdUpEgRhYaG6rPPPpMkHTx4UKdOnbK9cYiOjtaiRYv09ttva9++fRo2bJieeuopbdq0SdI/bxw6duyodu3aae/evXr66ac1atSonOo2AACAAsXFxUVvvvmm9u3bp4ULF+qbb77RCy+8kG79rl27qlSpUvr++++1a9cujRo1Sm5ubpKkI0eOqHXr1urUqZN++uknffzxx9q8ebMGDhyYqZg8PT2VnJysxMREzZw5U9OmTdPrr7+un376SREREXr44Yd16NAhSdKbb76pL774Qp988okOHjyojz76SGFhYWmed+fOnZKkdevW6dSpU1q2bFmqOo899pjOnTunDRs22MrOnz+vNWvWqGvXrpKk7777Tt27d9eQIUO0f/9+vfPOO1qwYIEmTZqU4Ws8duyYvvrqK7tPhCYnJ6tUqVJaunSp9u/fr7Fjx+rFF1/UJ598IkkaMWKEOnfurNatW+vUqVM6deqUGjVqlKGxOwAAyAQD4I4WGRlp2rdvb4wxJjk52axdu9ZYrVYzYsQIExkZaQIDA018fLyt/gcffGAqV65skpOTbWXx8fHG09PTfPXVV8YYY4KDg82rr75q23/jxg1TqlQpWzvGGNO0aVMzZMgQY4wxBw8eNJLM2rVr04xxw4YNRpL5+++/bWXXr183hQsXNlu3brWr27t3b9OlSxdjjDGjR4821apVs9s/cuTIVOcCAAC4U0VGRhpXV1fj5eVl2x599NE06y5dutQUK1bM9nj+/PnG19fX9tjb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mMqVK+v1119PNUvGYrFo4MCBWrFihe666y5ZrVZVr15da9assdXp0aOHmjZtKkl67LHHZLFYbLOg0lozPT4+XsOGDVNAQIC8vb318MMP688//0zzuv766y/16tVLgYGBtrbnzZtnVyflPn7yySeaNGmSSpUqJQ8PD7Vs2VKHDx9Odc5b3d8Uv/76qx599FH5+/vLw8ND9evX1xdffJFmjBlVrFgxLVmyRIUKFdKkSZNs5Wmt0RkTE6OePXuqVKlSslqtCg4OVvv27W1rnYeFhWnfvn3atGmT7TmY0ucpz6VNmzapf//+KlGihEqVKmW37+Y101N8/fXXql27tjw8PFStWjUtW7bMbn9669//+5y3ii29n7mlS5eqXr168vT0VPHixfXUU0/pr7/+squT8rvhr7/+UocOHVSkSBEFBARoxIgRObqEEQAg78joWPCHH35QRESEihcvLk9PT5UtW1a9evWS9M/rbkBAgKT/jZ8crVV95MgRlSpVKs0l7EqUKJGqbPXq1brvvvvk5eUlb29vtW3b1m4s6mg8+W/Xrl1TdHS0qlSpotdffz3Nut26ddM999yT7jm+++47PfbYYypdurSsVqtCQ0M1bNgwXbt2za6eozGIdOv+zQpXV1e9+eabqlatmmbNmqWLFy/a9v17zfQbN25o/Pjxqlixojw8PFSsWDE1adLEtkzMrfo2Zcz1+uuva8aMGSpfvrysVqv2799/y++w+f333xURESEvLy+FhIRowoQJdmPm9MY3/z5nXn0fAQBAbsn7f/YH8oEjR45I+ifRmCIxMVERERFq0qSJXn/9ddvyL/369bMtFzN48GAdPXpUs2bN0p49e7Rlyxbbxz/Hjh2riRMn6sEHH9SDDz6o3bt3q1WrVkpISHAYz9q1a/XQQw8pODhYQ4YMUVBQkA4cOKCVK1dqyJAh6tevn06ePJnmx47Tsm/fPt13333y8fHRCy+8IDc3N73zzjtq1qyZNm3apAYNGtjVHzRokIoWLaqoqCgdO3ZMM2bM0MCBA/Xxxx+n28bVq1e1fv163X///SpdurTDmIwxevjhh7Vhwwb17t1btWvX1ldffaXnn39ef/31l9544w27+ps3b9ayZcvUv39/eXt7680331SnTp10/PhxFStWTP369VPJkiU1efJkDR48WHffffctP3799NNP68MPP9STTz6p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Z2Slr99++63CwsLUv39/BQQEqHLlynrnnXeUnp7uqLLzhKwes381b948denShSD9L7LS13r16ikyMtJ6uZJTp07p+++/V+vWrR1Sc16Rld6mpKTccvksb29vfklxj7Zt22bz5yBJLVq0uOvPDjxYDh06pCZNmmjz5s3OLuW+duDAAdWvX19TpkzRK6+8otGjR+vUqVPOLuuBceDAAdWuXVvTpk3TxIkT1bRpUw0fPlwnT56Ui4uLMjIynF3ifeXw4cNq2LChlixZwmXxHOTAgQNq3ry5unfvrueee05169ZVSkqKLBYLM9RzAD0F4EiE6XZcunRJ6enpCggIsBkPCAhQTEzMbV+zZcsWzZs3T3PnznVEiXlSVvpaoUIFzZ8/X998840+//xzZWRkqF69evr1118dUXKekJW+njp1SkuXLlV6erq+//57jR07VtOmTdPbb7/tiJLzjKz09q927typgwcPqnfv3jlVYp6Ulb527dpVEydOVP369a2zCRs1asRlXv5HVnrbokULTZ8+XcePH1dGRobWrl1rvVwRsi4mJua2fw6JiYn6888/nVQVcqOzZ8+qU6dO2rVrl7p27covXHLI2bNn1bJlS3Xp0kUbNmzQvHnztHPnTsXFxTm7tAdCUlKS+vXrpxdffFHr1q3TpUuXNGjQIJ06dUq9evXSL7/8IhcXF8KxbHLu3Dk999xzOn36tIYNG6YVK1YoJSXF2WXd13755Rc9+eSTeuqpp7RkyRLt3r1bf/zxh1555RVJYmb6Pdq5c6cWLFig6dOna+vWrZLELykAOBRheja7cuWKunXrprlz5+qhhx5ydjn3lbCwMHXv3l3Vq1dXw4YNtXz5chUpUkRz5sxxdml5WkZGhooWLap///vfqlWrlp577jmNHj1aH3/8sbNLu6/MmzdPVapU0WOPPebsUvK8DRs26J133tGsWbO0Z88eLV++XN99953eeustZ5eW53344YcqV66cKlasKA8PDw0YMEAvv/wyX7cHHOD69etasmSJKlasqMjISNWuXVvt27cnUM8Bq1evVoUKFfTOO+/Ix8dHbdq0Uc2aNRUVFaXPP/9cGzdudHaJ97Vr164pJiZGjz/+uHx8fCRJw4YN04ABA+Tm5qahQ4fq119/JXDMBunp6frxxx9VpkwZHTp0SM8884x69+6t5cuXE6jnkGvXrmnSpElq3769Jk6cqEqVKqlixYrq06ePTp486ezy8rxly5apZcuW+u677/Tll19qyJAhGjp0qCR+SQHAcdycXUBu99BDD8nV1VWxsbE247GxsQoMDLxl/ZMnT+rMmTNq27atdezm1xTd3Nx07NgxlS1bNmeLzgMy29fbcXd3V40aNXTixImcKDFPykpfg4KC5O7uLldXV+tYaGioYmJilJqaKg8PjxytOa+4l2P26tWrWrx4sSZOnJiTJeZJWenr2LFj1a1bN+ss/ypVqujq1avq27evRo8eTfD7/2Wlt0WKFNHKlSuVnJysy5cvq1ixYho5cqTKlCnjiJLvW4GBgbf9c/D19ZW3t7eTqkJu4+7urmrVqqlMmTKqUqWKli5dqk6dOql9+/ZauXKlwsLCnF3ifcMYo3Pnzmn//v2qVq2aJk2apNWrVys5OVmJiYk6d+6c3n//fXXr1s3Zpd6XvL29FRAQoCNHjtiMd+jQQcnJyZo2bZpWrFihgQMHcn3pe+Tq6qpatWqpaNGiCgoKsk5CunkO1aFDh1su74Z74+XlJU9PT5UrV87m31fVqlXTzJkzlZCQoHz58nGvqiw4dOiQhgwZosmTJ+uVV17R/v37VbduXbVo0cJmPT43AOQ0Egc7PDw8VKtWLZsb3WVkZCgiIuK2/6ipWLGiDhw4oKioKOvj6aefVuPGjRUVFaXg4GBHlp9rZbavt5Oenq4DBw4oKCgop8rMc7LS18cff1wnTpywuTblL7/8oqCgIIL0v7iXY3bJkiVKSUnRiy++mNNl5jlZ6eu1a9duCcxv/mOFr3f+n3s5Zr28vPTwww8rLS1Ny5YtU7t27XK63PtaWFiYzZ+DJK1du5ZwFLd48skn1bFjR0k37nHw1Vdf6fHHH7eZoZ6WlqaIiAhuyJ5Jv//+u/XnkJAQFS1aVJ07d1bnzp01duxYrVixQuvWrdOqVav07LPPauHChYqLi+PvlRxQoEABPfLII/riiy9sbswsSc8//7weeeQRLVy4UBIzTbNDjRo19PTTT1ufz5kzRy+++KJ69+5tc8mXJUuW3PKLX2Sei4uLZsyYoeHDh0v6v3NTV1dXeXl5ydfX1xqk//bbb9wfIBNOnz6toKAgvfLKKzp9+rSefvppdevWzXp50n379knicwOAAxjYtXjxYuPp6WkWLlxoDh8+bPr27Wv8/f1NTEyMMcaYbt26mZEjR97x9T169DDt2rVzULV5R2b7OmHCBPPDDz+YkydPmsjISNOlSxfj5eVlDh065KxdyJUy29dz586ZAgUKmAEDBphjx46ZVatWmaJFi5q3337bWbuQa2X1s6B+/frmueeec3S5eUZm+/rmm2+aAgUKmC+//NKcOnXK/Pjjj6Zs2bLm2WefddYu5FqZ7e327dvNsmXLzMmTJ82mTZtMkyZNTOnSpc0ff/zhpD3Ina5cuWL27t1r9u7daySZ6dOnm71795qzZ88aY4wZOXKk6datm3X9U6dOmXz58pl//vOf5siRIyY8PNy4urqaNWvWOGsXkEskJiaa6Oho6/+TN2VkZFh/Tk5ONh06dDBFixY1mzZtMq+88ooJDQ01sbGxji43zzp69KgpVqyYCQ8Pt46tW7fOfPnll2bs2LGmc+fONutPmjTJVK9e3SQnJzu61PvSpUuXzC+//GKOHz9u4uLijDE3jvFKlSqZ2rVrmxMnTtgc819++aWpUaOGuXLlirNKztP+2u+//v2dnp5u0tLSrM/79u1r8uXLZz777DPTq1cvU7x4cXP+/HknVJz33emzPD093frzTz/9ZEJCQqzPR4wYYZo0aWKuXbvmsDrzqpufD6tWrTJPP/20OXv2rClevLjp27ev9ZjevHmzeeONN8yFCxecWSqABwRh+l366KOPTIkSJYyHh4d57LHHzPbt263LGjZsaHr06HHH1xKm31lm+jpkyBDrugEBAaZ169Zmz549Tqg698vs8frzzz+bOnXqGE9PT1OmTBkzadIkm5Nt/J/M9vbo0aNGkvnxxx8dXGnekpm+Xr9+3YwfP96ULVvWeHl5meDgYNOvXz8C3zvITG83bNhgQkNDjaenpylcuLDp1q0b/yi5jfXr1xtJtzxu9rJHjx6mYcOGt7ymevXqxsPDw5QpU8YsWLDA4XUjdzl48KCpX7++qVKlivH39zfvvvuuNWj8X6mpqaZjx47GYrEYHx8fs2vXLgdXm3ft3bvX5M+f31gsFtOnT59bln/88cembdu2JjU11To2ZMgQ0759e5OUlOTIUu9L+/btM+XKlTOPPfaYKVSokHnqqafM559/bowx5sKFC6Z8+fKmatWqZu3atSYhIcEYY8w//vEP06BBA0LGLLhdv7/66ivr8v8N1F955RVjsVhMgQIFzO7du51Rcp53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XVO+fPns1hIVFaUnnnhC7u7ut9Rw9epVnTx5Ur169VKfPn2s42lpafLz87vrfQGA3Gb27Nn6888/rV/vl6QpU6Zo7ty5mjdvnlxdXW3Wd3d31/Hjx/Xjjz+qcuXKji43T7p06ZIqV66swMBA9erVS0OHDpUkvfjii1q3bp1mzpypGTNmqEiRIvL09NSSJUvUoUMHff7554qMjFSNGjWcvAd5H8e5Y9Fvx6PnOefkyZP6/vvv9c9//lOjR4+WJP33v//VzJkztW3bNr344otq166dVq9erUKFCmn+/PkqV66ck6sGgDsjTAeQaY0bN9bs2bPl4eGhYsWKWa9vd1P+/PltniclJalWrVr64osvbtlWVu907+3tnaXXZcX/hsMWi+VvA/Py5ctry5Ytun79+m2D5ex4/+y+gVpSUpImTJhw2+trenl53VUtf/dnkpSUJEmaO3euzS8vJN3yjxMAyAsuXryookWLaubMmTp//rxatGihn3/+WUuXLtXUqVP15Zdfqnnz5javuXr1qvLnz6+ffvrJSVXnXWFhYUpKStK7776rrVu3qn///mrQoIFefvllDR8+XHv37lXz5s2VlpYmDw8PLV26VAkJCQoMDHR26Xkax7lj0W/Ho+c5KzExUV26dNG5c+fUs2dP63jbtm0lSR988IH+85//aOzYsZoyZYqzygSATOEOPAAyLX/+/AoJCVGJEiVuCdJvp2bNmjp+/LiKFi2qkJAQm4efn5/8/PwUFBSkHTt2WF+TlpamyMjIO26zSpUqysjI0MaNG2+7/ObM+PT09DtuIzQ0VGlpaTbve/nyZR07dkyVKlWyu1930rVrVyUlJd3x5po3bwwaGhqqrVu32izbunXrPb337YSGhtrsoyRt377d5nnNmjV17NixW/58QkJC7vpmbVWrVtXmzZt1/fr1W5YFBASoWLFiOnXq1C3bL126dNZ3DgCc4I8//lDDhg01adIkubi4aOnSpapZs6bKlSunt956S0uWLFHz5s1tfvE6depULV68WOnp6Xf9DSbc8NBDD6ldu3by8/PT5s2bVbx4cX300Ufq16+fnnnmGTVt2lT//Oc/lZGRITc3N2VkZMjb25sg/R5xnDsW/XY8ep7zfH199e9//1v+/v7avHmzDh06ZF3Wtm1bjRgxQqdOndL777+va9eu0VMAeQJhOoAc98ILL1j/Ibx582adPn1aGzZs0KBBg/Trr79KkgYPHqwpU6Zo5cqVOnr0qPr162cNnW+nVKlS6tGjh3r27KmVK1dat/n1119LkkqWLCmLxaJVq1bp999/t86M/qty5cqpXbt26tOnj7Zs2aJ9+/bpxRdf1MMPP6x27dpleX/r1Kmj1157TcOHD9drr72mbdu26ezZs4qIiFDnzp31n//8R5L0z3/+UwsXLtTs2bN1/PhxTZ8+XcuXL9eIESOy/N63M2jQIK1Zs0bvv/++jh8/rn/96182l3iRpHHjxunTTz/VhAkTdOjQIR05ckSLFy/WmDFj7vp9BgwYYJ19snv3bh0/flyfffaZjh07JkmaMGGCJk+erJkzZ+qXX37RgQMHtGDBAk2fPj1b9xcAclpaWppCQ0O1bds2nTp1Su7u7lq6dKm6desmY4wKFiwo6ca3dyRp/Pjxev3111W7dm25urpax3FnsbGxio2NtT7v3bu34uPjNXr0aM2YMUPDhw9XQkKCypcvr5CQEJ04ccJ6+YC7/SUw/h7HuWPRb8ej545Ro0YNLVmyRFevXtXMmTNtAvXWrVvr3Xff1aRJk5QvXz56CiBvcPxl2gHkZX+9AWlmlkdHR5vu3bubhx56yHh6epoyZcqYPn36mISEBGPMjRuODh482Pj6+hp/f38zbNgw07179zvegNQYY/78808zdOhQExQUZDw8PExISIiZP3++dfnEiRNNYGCgsVgspkePHrfdRlxcnOnWrZvx8/Mz3t7epkWLFuaXX36xLl+wYIHNjTqNuXEn+rv5+Pzqq69MgwYNTIECBUz+/PlN1apVzcSJE21uijpr1ixTpkwZ4+7ubsqXL28+/fRTm21IMitWrLAZ+98bjtq7AakxxsybN88UL17ceHt7m7Zt25r333//lv1as2aNqVevnvH29ja+vr7mscceM//+978zVcu+fftM8+bNTb58+UyBAgXME088YU6ePGld/sUXX5jq1asbDw8PU7BgQdOgQQOzfPnyv+0jAORGW7ZsMZ6enub999+3jl27ds20bdvWBAQEWG+KOW7cOOPl5WUiIyOdVWqec/nyZdO0aVMTEhJitm7dapKTk40xxsTGxpp69eqZuXPnWtd9//33zRNPPGEsFoupXbu2SUxMdFbZ9yWOc8ei345Hzx1nz549pmbNmqZ3797m0KFDzi4HALLMYgzfowEAAAD+TkxMjPVGmDdNnjxZ77zzjtatW2e9H0RKSoqeffZZRUVFqWHDhlq2bJk2bdqkWrVqOav0POXy5cs6c+aMPvvsM12/fl1z587V4MGD1a5dO9WvX1/vv/++Dh48qEmTJunhhx+WdOMG2OvWrdNTTz2lihUrOnkP8jaOc8ei345Hz51r7969evXVV1WmTBm9+eabfGYDyJMI0wEAAIC/cenSJVWsWFGBgYHq1auXhg4dKkk6f/68XnrpJQUGBmrGjBnWm2qnpqaqQ4cOWr16tSIjI1WjRg1nlp9nHD58WL169VJAQIBcXV319ddfa86cOZo1a5ZcXFzUp08ftWnTRm3atNGrr76qwYMHW1+bkZHB5V3uEce5Y9Fvx6PnucOuXbv0z3/+U19++aWCgoKcXQ4AZBphOgAAAPA3Ll26pJdffllJSUk6cuSI6tevr/79+6tBgwb68ssvNXz4cH322Wdq3ry50tLS5Obmpj///FMJCQncBPMuHTp0SPXr11e/fv3Up08flShRwhqO7969W998843ee+89denSRd7e3lqyZIm+++471a1b18mV3z84zh2LfjsePc89kpOT5eXl5ewyACBLCNMBAAAAOz755BOtWrVKU6dOVXh4uM6dO6ciRYroww8/VM+ePXXo0CHt3btXLi4uzJLOpLi4OLVr1041a9bUhx9+aB2/GWZJN2aeHzp0SL169VJaWpqioqLUr18/zZgxw7oO7h3HuWPRb8ej5wCAe8XfDAAAAMD/iI2NVWxsrPV57969FR8fr9GjR2vGjBkaPny4EhISVL58eYWEhOjEiRMaPXq0JBG+ZFJMTIyio6PVqVMnZWRkWMdvhuTGGLm4uKhKlSqKiIhQ79691apVK/Xv358g/R5xnDsW/XY8eg4AyG787QAAAAD8RVxcnF544QXVr19fP//8s1JSUiRJX3/9tS5cuKBPPvlEjz/+uBYvXqzBgwdrw4YN+vPPPxUREaErV644ufq8JyoqSmfPntUTTzxhnQ36VxaLRdeuXdP27dtVoEABvfLKK1q2bJlCQ0OdVPH9gePcsei349FzAEBOIEwHAAAA/r/Lly/r9OnTqly5spo3b65GjRppzJgx2rJli4oWLaoOHTpoy5YtunDhgiRp+PDhmjlzpt577z19+umnKlCggJP3IO8pVaqU3NzctHz5ckm3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\n" - }, - "metadata": {} - } - ], - "source": [ - "# Visualization imports\n", - "import seaborn as sns\n", - "\n", - "# Set up the matplotlib figure\n", - "plt.figure(figsize=(15, 12))\n", - "\n", - "# Plot confusion matrix\n", - "plt.subplot(2, 2, 1)\n", - "sns.heatmap(\n", - " confusion_matrix(all_labels, all_preds),\n", - " annot=True,\n", - " fmt='d',\n", - " cmap='Blues',\n", - " xticklabels=dataset.cwe_classes,\n", - " yticklabels=dataset.cwe_classes\n", - ")\n", - "plt.title('Confusion Matrix')\n", - "plt.xlabel('Predicted')\n", - "plt.ylabel('True')\n", - "\n", - "# Plot ROC curves\n", - "plt.subplot(2, 2, 2)\n", - "for i in range(len(dataset.cwe_classes)):\n", - " y_true = (all_labels == i).astype(int)\n", - " y_score = all_probs[:, i]\n", - " fpr, tpr, _ = roc_curve(y_true, y_score)\n", - " auc_score = auc(fpr, tpr)\n", - " plt.plot(fpr, tpr, label=f'{dataset.cwe_classes[i]} (AUC = {auc_score:.2f})')\n", - "\n", - "plt.plot([0, 1], [0, 1], 'k--')\n", - "plt.xlabel('False Positive Rate')\n", - "plt.ylabel('True Positive Rate')\n", - "plt.title('ROC Curves per Class')\n", - "plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')\n", - "\n", - "# Plot prediction confidence distribution\n", - "plt.subplot(2, 2, 3)\n", - "correct_probs = []\n", - "incorrect_probs = []\n", - "for i, (pred, true, probs) in enumerate(zip(all_preds, all_labels, all_probs)):\n", - " max_prob = np.max(probs)\n", - " if pred == true:\n", - " correct_probs.append(max_prob)\n", - " else:\n", - " incorrect_probs.append(max_prob)\n", - "\n", - "plt.hist([correct_probs, incorrect_probs], bins=20, label=['Correct', 'Incorrect'])\n", - "plt.xlabel('Prediction Confidence')\n", - "plt.ylabel('Count')\n", - "plt.title('Prediction Confidence Distribution')\n", - "plt.legend()\n", - "\n", - "# Plot class distribution\n", - "plt.subplot(2, 2, 4)\n", - "sns.countplot(x=all_labels, order=range(len(dataset.cwe_classes)))\n", - "plt.xticks(range(len(dataset.cwe_classes)), dataset.cwe_classes, rotation=45)\n", - "plt.xlabel('CWE Class')\n", - "plt.ylabel('Count')\n", - "plt.title('Test Set Class Distribution')\n", - "\n", - "plt.tight_layout()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "2efba148", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "2efba148", - "outputId": "f7ff3311-a18b-406a-bcb7-6432629d4210" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Analyzing sample predictions...\n", - "\n", - "================================================================================\n", - "Sample Analysis:\n", - "\n", - "True CWE: CWE78\n", - "Predicted CWE: CWE78\n", - "\n", - "Prediction Probabilities:\n", - "CWE121: 0.0010\n", - "CWE78: 0.9985\n", - "CWE190: 0.0003\n", - "CWE191: 0.0001\n", - "CWE122: 0.0001\n", - "none: 0.0001\n", - "\n", - "Code Sample Preview:\n", - "#include \"std_testcase.h\"\n", - "#include \n", - "#ifdef _WIN32\n", - "#define COMMAND_INT_PATH \"%WINDIR%\\\\system32\\\\cmd.exe\"\n", - "#define COMMAND_INT \"cmd.exe\"\n", - "#define COMMAND_ARG1 \"/c\"\n", - "#define COMMAND_ARG2 \"dir \"\n", - "#define COMMAND_ARG3 data\n", - "#else \n", - "#include \n", - "#define COMMAND_INT_PATH \"/bin/sh\"\n", - "#define COMMAND_INT \"sh\"\n", - "#define COMMAND_ARG1 \"-c\"\n", - "#define COMMAND_ARG2 \"ls \"\n", - "#define COMMAND_ARG3 data\n", - "#endif\n", - "#include \n", - "#ifndef OMITBAD\n", - "void CWE78_OS_Command_Injection__char_console_w32spawnl_32_bad()\n", - "{...\n", - "\n", - "================================================================================\n", - "Sample Analysis:\n", - "\n", - "True CWE: CWE121\n", - "Predicted CWE: CWE121\n", - "\n", - "Prediction Probabilities:\n", - "CWE121: 0.9577\n", - "CWE78: 0.0001\n", - "CWE190: 0.0000\n", - "CWE191: 0.0000\n", - "CWE122: 0.0420\n", - "none: 0.0001\n", - "\n", - "Code Sample Preview:\n", - "#include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeof(int64_t));\n", - " printLongLongLine(data[0]);\n", - " }\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(int64_t * data)\n", - "{\n", - " {\n", - " int64_t source[100] = {0}; \n", - " memmove(data, source, 100*sizeof(int64_t));\n", - " printLongLongLine(data[0]);\n", - " }\n", - "}\n", - "#endif\n", - "\n", - "================================================================================\n", - "Sample Analysis:\n", - "\n", - "True CWE: CWE191\n", - "Predicted CWE: CWE191\n", - "\n", - "Prediction Probabilities:\n", - "CWE121: 0.0000\n", - "CWE78: 0.0000\n", - "CWE190: 0.1965\n", - "CWE191: 0.8030\n", - "CWE122: 0.0002\n", - "none: 0.0003\n", - "\n", - "Code Sample Preview:\n", - "#include \"std_testcase.h\"\n", - "typedef struct _CWE191_Integer_Underflow__unsigned_int_rand_postdec_67_structType\n", - "{\n", - " unsigned int structFirst;\n", - "} var;\n", - "#ifndef OMITBAD\n", - "void var(var myStruct)\n", - "{\n", - " unsigned int data = myStruct.structFirst;\n", - " {\n", - " data--;\n", - " unsigned int result = data;\n", - " printUnsignedLine(result);\n", - " }\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(var myStruct)\n", - "{\n", - " unsigned int data = myStruct.structFirst;\n", - " {\n", - " data--;\n", - " unsigned int result = data;\n", - " pri...\n", - "\n", - "================================================================================\n", - "Sample Analysis:\n", - "\n", - "True CWE: CWE121\n", - "Predicted CWE: CWE121\n", - "\n", - "Prediction Probabilities:\n", - "CWE121: 0.8943\n", - "CWE78: 0.0002\n", - "CWE190: 0.0001\n", - "CWE191: 0.0000\n", - "CWE122: 0.1053\n", - "none: 0.0002\n", - "\n", - "Code Sample Preview:\n", - "#include \"std_testcase.h\"\n", - "#include \n", - "#ifndef OMITBAD\n", - "void var(char * dataArray[])\n", - "{\n", - " char * data = dataArray[2];\n", - " {\n", - " char dest[50] = \"\";\n", - " strcpy(dest, data);\n", - " printLine(data);\n", - " }\n", - "}\n", - "#endif \n", - "#ifndef OMITGOOD\n", - "void var(char * dataArray[])\n", - "{\n", - " char * data = dataArray[2];\n", - " {\n", - " char dest[50] = \"\";\n", - " strcpy(dest, data);\n", - " printLine(data);\n", - " }\n", - "}\n", - "#endif\n", - "\n", - "================================================================================\n", - "Sample Analysis:\n", - "\n", - "True CWE: CWE190\n", - "Predicted CWE: CWE190\n", - "\n", - "Prediction Probabilities:\n", - "CWE121: 0.0001\n", - "CWE78: 0.0000\n", - "CWE190: 0.6581\n", - "CWE191: 0.3409\n", - "CWE122: 0.0005\n", - "none: 0.0004\n", - "\n", - "Code Sample Preview:\n", - "#include \"std_testcase.h\"\n", - "#ifndef OMITBAD\n", - "void var()\n", - "{\n", - " unsigned int data;\n", - " data = 0;\n", - " if(globalReturnsTrueOrFalse())\n", - " {\n", - " data = (unsigned int)RAND32();\n", - " }\n", - " else\n", - " {\n", - " data = 2;\n", - " }\n", - " if(globalReturnsTrueOrFalse())\n", - " {\n", - " {\n", - " data++;\n", - " unsigned int result = data;\n", - " printUnsignedLine(result);\n", - " }\n", - " }\n", - " else\n", - " {\n", - " if (data < UINT_MAX)\n", - " {\n", - " data++;\n", - " unsigned int result = data;\n", - " ...\n" - ] - } - ], - "source": [ - "def analyze_sample_predictions(model, test_dataset, test_samples, cwe_classes, n_samples=5):\n", - " \"\"\"Analyze individual sample predictions with attention visualization\"\"\"\n", - " model.eval()\n", - "\n", - " # Get random indices\n", - " indices = np.random.choice(len(test_dataset), n_samples, replace=False)\n", - "\n", - " for idx in indices:\n", - " # Get sample\n", - " sample = test_samples[idx]\n", - " batch = test_dataset[idx]\n", - "\n", - " # Move to device\n", - " inputs = {k: v.unsqueeze(0).to(device) for k, v in batch.items() if k != 'labels'}\n", - " true_label = batch['labels'].item()\n", - "\n", - " # Get prediction\n", - " with torch.no_grad():\n", - " outputs, _ = model(**inputs)\n", - " probs = torch.softmax(outputs, dim=1)[0]\n", - " pred = outputs.argmax(dim=1)[0]\n", - "\n", - " # Print results\n", - " print('\\n' + '='*80)\n", - " print(f'Sample Analysis:\\n')\n", - " print(f'True CWE: {cwe_classes[true_label]}')\n", - " print(f'Predicted CWE: {cwe_classes[pred.item()]}')\n", - " print('\\nPrediction Probabilities:')\n", - " for i, p in enumerate(probs):\n", - " print(f'{cwe_classes[i]}: {p.item():.4f}')\n", - "\n", - " print('\\nCode Sample Preview:')\n", - " print(sample.code[:500] + '...' if len(sample.code) > 500 else sample.code)\n", - "\n", - "# Analyze some sample predictions\n", - "print(\"Analyzing sample predictions...\")\n", - "analyze_sample_predictions(model, test_dataset, test_samples, dataset.cwe_classes)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "cc071a11", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "cc071a11", - "outputId": "52cb4c46-8ae4-48db-9326-39c024540ba6" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Testing model inference...\n", - "\n", - "Prediction Results:\n", - "Predicted CWE: none\n", - "Confidence: 0.9999\n", - "\n", - "All class probabilities:\n", - "CWE121: 0.0000\n", - "CWE78: 0.0000\n", - "CWE190: 0.0000\n", - "CWE191: 0.0000\n", - "CWE122: 0.0000\n", - "none: 0.9999\n" - ] - } - ], - "source": [ - "def predict_vulnerability(model, code: str, tokenizer, cwe_classes):\n", - " \"\"\"Helper function for making predictions on new code samples\"\"\"\n", - " model.eval()\n", - "\n", - " # Preprocess code\n", - " processed_code = CodeSample(code=code, label=0).preprocess().processed_code\n", - "\n", - " # Tokenize\n", - " inputs = tokenizer(\n", - " processed_code,\n", - " truncation=True,\n", - " padding=True,\n", - " max_length=512,\n", - " return_tensors=\"pt\"\n", - " )\n", - "\n", - " # Move to device\n", - " inputs = {k: v.to(device) for k, v in inputs.items()}\n", - "\n", - " # Get prediction\n", - " with torch.no_grad():\n", - " outputs, _ = model(**inputs)\n", - " probs = torch.softmax(outputs, dim=1)[0]\n", - " pred = outputs.argmax(dim=1)[0]\n", - "\n", - " # Format results\n", - " results = {\n", - " 'predicted_cwe': cwe_classes[pred.item()],\n", - " 'confidence': probs[pred].item(),\n", - " 'all_probabilities': {\n", - " cwe: prob.item()\n", - " for cwe, prob in zip(cwe_classes, probs)\n", - " }\n", - " }\n", - "\n", - " return results\n", - "\n", - "# Example usage\n", - "test_code = \"\"\"\n", - "void vulnerable_function(char *input) {\n", - " char buffer[64];\n", - " strcpy(buffer, input); // Potential buffer overflow\n", - "}\n", - "\"\"\"\n", - "\n", - "print(\"Testing model inference...\")\n", - "results = predict_vulnerability(model, test_code, tokenizer, dataset.cwe_classes)\n", - "print(\"\\nPrediction Results:\")\n", - "print(f\"Predicted CWE: {results['predicted_cwe']}\")\n", - "print(f\"Confidence: {results['confidence']:.4f}\")\n", - "print(\"\\nAll class probabilities:\")\n", - "for cwe, prob in results['all_probabilities'].items():\n", - " print(f\"{cwe}: {prob:.4f}\")" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "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.6" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "c7b64c3fa9f14c608308d44721412c77": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_9bb76d5339764a47af0bb87e5c872da6", - "IPY_MODEL_ba9add180c5b4b029a793cfcd54220f1", - "IPY_MODEL_3ebe9bbe311e468fb3a73f01567021c1" - ], - "layout": "IPY_MODEL_d2139ad46e8d47a1b1b49d19366c783c" - } - }, - "9bb76d5339764a47af0bb87e5c872da6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f697c0ee8dc144afb67ea232e3b70447", - "placeholder": "​", - "style": "IPY_MODEL_f997dae644fd4c819e5c54b32e64e7bd", - "value": "tokenizer_config.json: 100%" - } - }, - "ba9add180c5b4b029a793cfcd54220f1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_a0d6ee9e859141d2ab333d7a30ac6938", - "max": 25, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b230ce982ce34a7baf26dbc3ce23cca9", - "value": 25 - } - }, - "3ebe9bbe311e468fb3a73f01567021c1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5a486e95fe0549569168960af69653c6", - "placeholder": "​", - "style": "IPY_MODEL_3ccd660336844bcb9801d23d4e6ee720", - "value": " 25.0/25.0 [00:00<00:00, 1.47kB/s]" - } - }, - "d2139ad46e8d47a1b1b49d19366c783c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f697c0ee8dc144afb67ea232e3b70447": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f997dae644fd4c819e5c54b32e64e7bd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "a0d6ee9e859141d2ab333d7a30ac6938": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b230ce982ce34a7baf26dbc3ce23cca9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "5a486e95fe0549569168960af69653c6": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3ccd660336844bcb9801d23d4e6ee720": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d906e6e37a12471e9f764636d74f137f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_21af9ee830444f0f9814573bcfe8905d", - "IPY_MODEL_d46408f5e26c47739be00319970078a5", - "IPY_MODEL_837dfac7768c4cedab8d2be760bf39d4" - ], - "layout": "IPY_MODEL_049cd15384ea4263bef050235dc184d5" - } - }, - "21af9ee830444f0f9814573bcfe8905d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_343c896a16c84bca95ea5adbf73ef798", - "placeholder": "​", - "style": "IPY_MODEL_fe33264a06414a1794eb03eb336eb988", - "value": "vocab.json: 100%" - } - }, - "d46408f5e26c47739be00319970078a5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2e0a1390bdff442682709960445c3cc9", - "max": 898822, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_7317417c1cd643b187021f11f623578e", - "value": 898822 - } - }, - "837dfac7768c4cedab8d2be760bf39d4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_09ceaecbe73347459cf178154fb2f666", - "placeholder": "​", - "style": "IPY_MODEL_0f9ada970efe45aeb5ca93d6b8bce102", - "value": " 899k/899k [00:00<00:00, 5.89MB/s]" - } - }, - "049cd15384ea4263bef050235dc184d5": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "343c896a16c84bca95ea5adbf73ef798": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "fe33264a06414a1794eb03eb336eb988": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "2e0a1390bdff442682709960445c3cc9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7317417c1cd643b187021f11f623578e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "09ceaecbe73347459cf178154fb2f666": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0f9ada970efe45aeb5ca93d6b8bce102": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c04baa69cb014303b0d84fb84ef2b622": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_cef93a14a6ab4aa783071ed9b57430d7", - "IPY_MODEL_22f21478adb943c59ce194ffc62be791", - "IPY_MODEL_94d941aa461e469090e01f7a334c7355" - ], - "layout": "IPY_MODEL_8be45b59d75b4b589e15b5e834065dd3" - } - }, - "cef93a14a6ab4aa783071ed9b57430d7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_fe4697e826e6464cb3f7fa62059439e2", - "placeholder": "​", - "style": "IPY_MODEL_5c769c14dce141918f8a4564d16915f8", - "value": "merges.txt: 100%" - } - }, - "22f21478adb943c59ce194ffc62be791": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c619d570d57a49af8defa57a7c410a62", - "max": 456318, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_bc233746666a404db843d007ab5500fd", - "value": 456318 - } - }, - "94d941aa461e469090e01f7a334c7355": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7a18b3fa59e64f42ab02ad72a1b69977", - "placeholder": "​", - "style": "IPY_MODEL_100fec0a3f6640f5b56ad16d6431474c", - "value": " 456k/456k [00:00<00:00, 13.7MB/s]" - } - }, - "8be45b59d75b4b589e15b5e834065dd3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "fe4697e826e6464cb3f7fa62059439e2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5c769c14dce141918f8a4564d16915f8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c619d570d57a49af8defa57a7c410a62": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "bc233746666a404db843d007ab5500fd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "7a18b3fa59e64f42ab02ad72a1b69977": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "100fec0a3f6640f5b56ad16d6431474c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "02cf31cc9512449785073c2c1c8c70a9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_f9414aff91714f12985b0d78cc14a70f", - "IPY_MODEL_0c418facf3ac4b0c92bf80f82cbea228", - "IPY_MODEL_97aeb67415a34ea387e8057984cafa74" - ], - "layout": "IPY_MODEL_80e4bf66155b428bb82499790723a14d" - } - }, - "f9414aff91714f12985b0d78cc14a70f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_827a126e8f1d4e5988d1bb7a3d86501d", - "placeholder": "​", - "style": "IPY_MODEL_a1a5a555c8c04fd5b16b9e66838ff877", - "value": "special_tokens_map.json: 100%" - } - }, - "0c418facf3ac4b0c92bf80f82cbea228": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2e5ad845d7434da19d5d048918f2673b", - "max": 150, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d522b283964c44d7ad1eb7fdf88ded3e", - "value": 150 - } - }, - "97aeb67415a34ea387e8057984cafa74": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5c98504ed8364e59a20ccf7695462a08", - "placeholder": "​", - "style": "IPY_MODEL_651631ab8be940808611ae11bae73676", - "value": " 150/150 [00:00<00:00, 11.5kB/s]" - } - }, - "80e4bf66155b428bb82499790723a14d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "827a126e8f1d4e5988d1bb7a3d86501d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a1a5a555c8c04fd5b16b9e66838ff877": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "2e5ad845d7434da19d5d048918f2673b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d522b283964c44d7ad1eb7fdf88ded3e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "5c98504ed8364e59a20ccf7695462a08": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "651631ab8be940808611ae11bae73676": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "8dfdd5a4481c491ab7719142da57b057": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_f90de96505cf4d09bb43221ce79ef1bd", - "IPY_MODEL_2d5ecfe4fe77487e8b254146b53ac10e", - "IPY_MODEL_e9f92c3c75cd4d4aa4e29b57eae2e85c" - ], - "layout": "IPY_MODEL_a646f4abbe234f52b25544f35ba11c2b" - } - }, - "f90de96505cf4d09bb43221ce79ef1bd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_fc163b73cb9c4f248ba08a6a3283c8b0", - "placeholder": "​", - "style": "IPY_MODEL_c762e16539584db7b654b074eb2dcaa5", - "value": "config.json: 100%" - } - }, - "2d5ecfe4fe77487e8b254146b53ac10e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_a12a408485d84077bc9e6ad26d116a45", - "max": 498, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a36fe22e54e340bf938229b7f4759007", - "value": 498 - } - }, - "e9f92c3c75cd4d4aa4e29b57eae2e85c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2f7b3b50f85b4d71aa3cb346c00f43c9", - "placeholder": "​", - "style": "IPY_MODEL_3ede807613af4ecaac6a7d03882ebdd4", - "value": " 498/498 [00:00<00:00, 37.4kB/s]" - } - }, - "a646f4abbe234f52b25544f35ba11c2b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "fc163b73cb9c4f248ba08a6a3283c8b0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c762e16539584db7b654b074eb2dcaa5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "a12a408485d84077bc9e6ad26d116a45": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a36fe22e54e340bf938229b7f4759007": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "2f7b3b50f85b4d71aa3cb346c00f43c9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3ede807613af4ecaac6a7d03882ebdd4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "2ba0026f73bc427696dd0d462c6f47ac": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_df815ffc6ad44aa897aa846faf51bc5c", - "IPY_MODEL_e1cd9d5c12024b4bb5cabb09c0eafeb4", - "IPY_MODEL_dcb38e184be7445c9a51b3cc7156dc1d" - ], - "layout": "IPY_MODEL_2b0bcf64d3234d09a44507e12e964bb2" - } - }, - "df815ffc6ad44aa897aa846faf51bc5c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7a73a857a50f45efbcb0e02b3967740a", - "placeholder": "​", - "style": "IPY_MODEL_c3d9458c3c954b9498de96baf5145949", - "value": "pytorch_model.bin: 100%" - } - }, - "e1cd9d5c12024b4bb5cabb09c0eafeb4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_001bc529df0345789c93d5ab49c384fe", - "max": 498627950, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c735b1d49b6f4020b69a8e287c1b1cfc", - "value": 498627950 - } - }, - "dcb38e184be7445c9a51b3cc7156dc1d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_55a55710766a4d20a2aca86cba455b7f", - "placeholder": "​", - "style": "IPY_MODEL_72f8a4e708c1453088dff9ede2eba33d", - "value": " 499M/499M [00:03<00:00, 88.0MB/s]" - } - }, - "2b0bcf64d3234d09a44507e12e964bb2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7a73a857a50f45efbcb0e02b3967740a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c3d9458c3c954b9498de96baf5145949": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "001bc529df0345789c93d5ab49c384fe": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c735b1d49b6f4020b69a8e287c1b1cfc": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "55a55710766a4d20a2aca86cba455b7f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "72f8a4e708c1453088dff9ede2eba33d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d2faa0d68d0a43e6be2461be2d6b44af": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_5ac41500aa8c4e0586523943c2fba797", - "IPY_MODEL_fc36f0ff495b4a498192622834c211c5", - "IPY_MODEL_a471f003b02c4d4f8b13f217246d0476" - ], - "layout": "IPY_MODEL_1654afba2c1e41f795ee2f429f3f223c" - } - }, - "5ac41500aa8c4e0586523943c2fba797": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_85243a9f9da144e3bcfdf0f9f40d3665", - "placeholder": "​", - "style": "IPY_MODEL_0cd50ac088354737a8745ea93bf7a13d", - "value": "model.safetensors: 100%" - } - }, - "fc36f0ff495b4a498192622834c211c5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_e111110e977b4977be4de14f2fd404a5", - "max": 498604904, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b4e55a974426462682e62a1de67c7123", - "value": 498604904 - } - }, - "a471f003b02c4d4f8b13f217246d0476": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6d71f9eb21314517b3b5f3e5ea96ebf4", - "placeholder": "​", - "style": "IPY_MODEL_205d0b514dde43f6bf3824dc23d8e93b", - "value": " 499M/499M [00:03<00:00, 161MB/s]" - } - }, - "1654afba2c1e41f795ee2f429f3f223c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "85243a9f9da144e3bcfdf0f9f40d3665": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0cd50ac088354737a8745ea93bf7a13d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "e111110e977b4977be4de14f2fd404a5": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b4e55a974426462682e62a1de67c7123": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "6d71f9eb21314517b3b5f3e5ea96ebf4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "205d0b514dde43f6bf3824dc23d8e93b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "52472612bfbc4791871b361f105d0d72": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_3daa754890c54effbb6839d5484b58e2", - "IPY_MODEL_84b778997a0e41ccb1825b38913304c8", - "IPY_MODEL_e8e2f6be9b254cb0a83e0f96aa16b493" - ], - "layout": "IPY_MODEL_f04473aa0c6a413585812dc85a85f634" - } - }, - "3daa754890c54effbb6839d5484b58e2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5f3c91bcda974fd5a2897cb77851156a", - "placeholder": "​", - "style": "IPY_MODEL_df0c7f3ec1d741fb937b110090e6f9ac", - "value": "tf_model.h5: 100%" - } - }, - "84b778997a0e41ccb1825b38913304c8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_04c462b6cb2340e680fee80894a24382", - "max": 498845224, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_2f2c0c9840a0460786ddfdbe15b4c7c4", - "value": 498845224 - } - }, - "e8e2f6be9b254cb0a83e0f96aa16b493": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_a6aed0924b4b4b12b2fa61b95ddedcfc", - "placeholder": "​", - "style": "IPY_MODEL_344dffe43fde4963be6ab59af8671a7f", - "value": " 499M/499M [00:06<00:00, 79.6MB/s]" - } - }, - "f04473aa0c6a413585812dc85a85f634": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5f3c91bcda974fd5a2897cb77851156a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "df0c7f3ec1d741fb937b110090e6f9ac": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "04c462b6cb2340e680fee80894a24382": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "2f2c0c9840a0460786ddfdbe15b4c7c4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "a6aed0924b4b4b12b2fa61b95ddedcfc": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "344dffe43fde4963be6ab59af8671a7f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "b3e044756b16418280eceec32e6172a8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_d752534d9c7447cc876cfb0ecbcb5a7a", - "IPY_MODEL_2c923ae011d547bc9c1c2790b032496b", - "IPY_MODEL_a52f3d8bf2c344f391e79d1ca349691a" - ], - "layout": "IPY_MODEL_05dd34cda5504651ba82ae8a09602a1a" - } - }, - "d752534d9c7447cc876cfb0ecbcb5a7a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_897b0e9cb51146cfba6f9efa4f990c1e", - "placeholder": "​", - "style": "IPY_MODEL_755710e514044bf4a3dd7fd0c8ff080f", - "value": "Processing samples: 100%" - } - }, - "2c923ae011d547bc9c1c2790b032496b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_34ca1dfe1aeb4f1aaaf6676a6eee5045", - "max": 2400, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_61f86231f92645bdbdea8cb35abb5d40", - "value": 2400 - } - }, - "a52f3d8bf2c344f391e79d1ca349691a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_59bbbf8ee5154d9c9f7dc1ed9c0bd72b", - "placeholder": "​", - "style": "IPY_MODEL_0059fa025a994c36bf6b5e126feae1d0", - "value": " 2400/2400 [00:02<00:00, 783.29it/s]" - } - }, - "05dd34cda5504651ba82ae8a09602a1a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "897b0e9cb51146cfba6f9efa4f990c1e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "755710e514044bf4a3dd7fd0c8ff080f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "34ca1dfe1aeb4f1aaaf6676a6eee5045": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "61f86231f92645bdbdea8cb35abb5d40": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "59bbbf8ee5154d9c9f7dc1ed9c0bd72b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0059fa025a994c36bf6b5e126feae1d0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "9c5704c61bb141aab4483012b6ede209": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_7d97773e6db74d73b4c01df03a49c5b7", - "IPY_MODEL_2e32990919f14a08a74d549d74f167cb", - "IPY_MODEL_634a04d4a515492ab9a27dd4dfc60a4b" - ], - "layout": "IPY_MODEL_5f7ba15bc28b4e7cba2041e4b39dd458" - } - }, - "7d97773e6db74d73b4c01df03a49c5b7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6ec6fe079796478eb6590d0d4bf80b2f", - "placeholder": "​", - "style": "IPY_MODEL_c321f7aab5964ca08de4734264d0a9b3", - "value": "Epoch 1/5: 100%" - } - }, - "2e32990919f14a08a74d549d74f167cb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2f6f9bbed8e84aba8d014ec6f3058754", - "max": 480, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_99a967f107e640c98905875a9be4401b", - "value": 480 - } - }, - "634a04d4a515492ab9a27dd4dfc60a4b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_1c3226ae780648a0b5d7341dc229b0d4", - "placeholder": "​", - "style": "IPY_MODEL_bf6f9f9304aa4e218f70df85bc56229a", - "value": " 480/480 [04:48<00:00,  1.66it/s, loss=17.8723]" - } - }, - "5f7ba15bc28b4e7cba2041e4b39dd458": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "6ec6fe079796478eb6590d0d4bf80b2f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c321f7aab5964ca08de4734264d0a9b3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "2f6f9bbed8e84aba8d014ec6f3058754": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "99a967f107e640c98905875a9be4401b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "1c3226ae780648a0b5d7341dc229b0d4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "bf6f9f9304aa4e218f70df85bc56229a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1488099b130441adb88968543cbd750a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_19001a5e3996412c88e22c9a0fd07628", - "IPY_MODEL_31568ca672264dc6a2289770fcc83912", - "IPY_MODEL_82766bb4dfaa403fbc768184240b4421" - ], - "layout": "IPY_MODEL_50f037306151454f826333bf3fa40d39" - } - }, - "19001a5e3996412c88e22c9a0fd07628": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_097e62b4bc3341fbbc2c9dca5f8a01b1", - "placeholder": "​", - "style": "IPY_MODEL_96c99aef2aaf4a7cbbf8bdae505ec50b", - "value": "Epoch 2/5: 100%" - } - }, - "31568ca672264dc6a2289770fcc83912": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6b143cef83c940d0b538885b63d93606", - "max": 480, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b449be2f8a444bb09f9859ee37e1a2a9", - "value": 480 - } - }, - "82766bb4dfaa403fbc768184240b4421": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_ce855bf8bba04507972c368b59d79ac1", - "placeholder": "​", - "style": "IPY_MODEL_6bd0ecd2a6ac45c0a5c9eced91c04ad1", - "value": " 480/480 [04:43<00:00,  1.72it/s, loss=17.5242]" - } - }, - "50f037306151454f826333bf3fa40d39": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "097e62b4bc3341fbbc2c9dca5f8a01b1": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "96c99aef2aaf4a7cbbf8bdae505ec50b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "6b143cef83c940d0b538885b63d93606": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b449be2f8a444bb09f9859ee37e1a2a9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "ce855bf8bba04507972c368b59d79ac1": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "6bd0ecd2a6ac45c0a5c9eced91c04ad1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "87097737e19d4d6a92b80b3f3daead73": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_cee8ee892df7455b99e7c2bbd37f714c", - "IPY_MODEL_ebd544982c1a4989bdc339ef008a1be5", - "IPY_MODEL_bd64e931d52e44469e38fff4c764276a" - ], - "layout": "IPY_MODEL_b0b696917e2f4362a1ea41ba14a7b6a4" - } - }, - "cee8ee892df7455b99e7c2bbd37f714c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c8ee3081fce1416d85bdeaf6da351c67", - "placeholder": "​", - "style": "IPY_MODEL_509795fe9ba643a98da86119039b5f65", - "value": "Epoch 3/5: 100%" - } - }, - "ebd544982c1a4989bdc339ef008a1be5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_84d8bbd6fb934c0cb0d1f10d89d94ba3", - "max": 480, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_1b9a8e7fb66c4b1f8ff692bc1606a2e9", - "value": 480 - } - }, - "bd64e931d52e44469e38fff4c764276a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_ec3c3b2b4328427b999b4316277e141a", - "placeholder": "​", - "style": "IPY_MODEL_d271766834c44e8380a0c6dde0ad7820", - "value": " 480/480 [04:43<00:00,  1.66it/s, loss=17.7612]" - } - }, - "b0b696917e2f4362a1ea41ba14a7b6a4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c8ee3081fce1416d85bdeaf6da351c67": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "509795fe9ba643a98da86119039b5f65": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "84d8bbd6fb934c0cb0d1f10d89d94ba3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1b9a8e7fb66c4b1f8ff692bc1606a2e9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "ec3c3b2b4328427b999b4316277e141a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d271766834c44e8380a0c6dde0ad7820": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "55ea4d7888d54c769d4b70458eec335a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_5cf69cd40e0a487db861d88b73d191bb", - "IPY_MODEL_da122508928344fe8027bcab9f39bb81", - "IPY_MODEL_90bc055389544e0ca740f1fff2d2914e" - ], - "layout": "IPY_MODEL_23c20623ffb844138d8539757e6ec7a9" - } - }, - "5cf69cd40e0a487db861d88b73d191bb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f8d51363887b4f03b7e24cb01360754d", - "placeholder": "​", - "style": "IPY_MODEL_37b05caea71e45d8b9f11b2461aa5da3", - "value": "Epoch 4/5: 100%" - } - }, - "da122508928344fe8027bcab9f39bb81": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_eaf0e391749b4a18aa9121f4b00b5a50", - "max": 480, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d57bb16c7fe44372a77ce398d39478e3", - "value": 480 - } - }, - "90bc055389544e0ca740f1fff2d2914e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7a97592582f24cf9a006f044ce8cf3e6", - "placeholder": "​", - "style": "IPY_MODEL_2fc3325660bb40378a41dbad01936386", - "value": " 480/480 [04:44<00:00,  1.70it/s, loss=17.4659]" - } - }, - "23c20623ffb844138d8539757e6ec7a9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f8d51363887b4f03b7e24cb01360754d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "37b05caea71e45d8b9f11b2461aa5da3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "eaf0e391749b4a18aa9121f4b00b5a50": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d57bb16c7fe44372a77ce398d39478e3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "7a97592582f24cf9a006f044ce8cf3e6": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "2fc3325660bb40378a41dbad01936386": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "b762c25520b645f38613d9e247ae06aa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_7a0d1d445542465b8fe555fb1b9ef562", - "IPY_MODEL_4f10dcb8a5a34a939ad99fcc0a1daab6", - "IPY_MODEL_0756100e8e4e45e3a55b22c180b2fe3c" - ], - "layout": "IPY_MODEL_fe09cd19661e4f908f6976e695d9f297" - } - }, - "7a0d1d445542465b8fe555fb1b9ef562": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c9a307b7114e4067820921844eb7b862", - "placeholder": "​", - "style": "IPY_MODEL_f95d16981a17410e9bd4b18e12475df5", - "value": "Epoch 5/5: 100%" - } - }, - "4f10dcb8a5a34a939ad99fcc0a1daab6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_fa7ac3d8d8e74a8088d269a0bc74babf", - "max": 480, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a97c6d5d371249c4b150128fa4107d61", - "value": 480 - } - }, - "0756100e8e4e45e3a55b22c180b2fe3c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2534a7bccf7f4dfa8e7acbd615e9be6e", - "placeholder": "​", - "style": "IPY_MODEL_c5fab0b8d8b241aeb4e289bef20739ef", - "value": " 480/480 [04:44<00:00,  1.71it/s, loss=17.1572]" - } - }, - "fe09cd19661e4f908f6976e695d9f297": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c9a307b7114e4067820921844eb7b862": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f95d16981a17410e9bd4b18e12475df5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "fa7ac3d8d8e74a8088d269a0bc74babf": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a97c6d5d371249c4b150128fa4107d61": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "2534a7bccf7f4dfa8e7acbd615e9be6e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c5fab0b8d8b241aeb4e289bef20739ef": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1dd7763001494fefac086d1ff755d938": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_551ee3ccd3a54faaacef1990b31d8604", - "IPY_MODEL_c75e02b810f24f1c89e9f200ca03625b", - "IPY_MODEL_da29cb98c9d04203ab68fb7b2fa9a1b3" - ], - "layout": "IPY_MODEL_eec60a22260c41738ea13b37ff80721d" - } - }, - "551ee3ccd3a54faaacef1990b31d8604": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_3036b81f7bb1432f98a386c67b022c61", - "placeholder": "​", - "style": "IPY_MODEL_94aa6aa7c40b4de593a576d05847d455", - "value": "Analyzing predictions: 100%" - } - }, - "c75e02b810f24f1c89e9f200ca03625b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_d63f0b01bd214452ac76c67cbfd0c973", - "max": 120, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_10a40f32ef66474d851aeabc0b1e2919", - "value": 120 - } - }, - "da29cb98c9d04203ab68fb7b2fa9a1b3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_18097ff5b4bb47a3a432a201af41b8ab", - "placeholder": "​", - "style": "IPY_MODEL_1bf578f733084a699567659b5a6c090c", - "value": " 120/120 [00:18<00:00,  6.71it/s]" - } - }, - "eec60a22260c41738ea13b37ff80721d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3036b81f7bb1432f98a386c67b022c61": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "94aa6aa7c40b4de593a576d05847d455": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d63f0b01bd214452ac76c67cbfd0c973": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "10a40f32ef66474d851aeabc0b1e2919": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "18097ff5b4bb47a3a432a201af41b8ab": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1bf578f733084a699567659b5a6c090c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file