├── __init__.py ├── LICENSE ├── README.md ├── train.py ├── inference.py ├── datasets_novel.py ├── model.py ├── trainer.py ├── train_tokenizer.py ├── minbpe.py └── improved_chinese_tokenizer.model /__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 ZHUO ZHANG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 代码说明 2 | 3 | `/embedding_from_scratch/` 是我录制的视频课《训练自己的embedding模型》对应的代码部分。 4 | 5 | 这个目录的教学内容实现了: 6 | - 准备《三体》小说作为数据集 7 | - 从零训练了一个中文BPE的 Tokenizer 分词器 8 | - 从零训练了一个BERT模型(即中文 Embedding 模型,并使用了上面的分词器) 9 | - 根据训练的BERT模型,试验了几种不同的向量生成方法 10 | 11 | ### 代码结构 12 | 13 | - No.1 `train_tokenier.py` 训练分词器的代码 14 | - No.2 `minbpe.py` Karpathy的Tokenizer训练代码(不需要改动) 15 | - No.3 `train.py` 调用BERT模型训练的主程序 16 | - `model.py` 定义BERT模型架构 17 | - `datasets_novel.py` 预处理小说数据集及准备DataLoader 18 | - `trainer.py` 定义Optimizer、Loss、训练循环等 19 | - No.4 `inference.py` 测试BERT模型生成的词向量 20 | 21 | 22 | ### 关于Embedding模型 23 | 24 | Embedding模型是自然语言处理的基础,它是将文本数据转换为计算机能够理解的数字数据的一种方式。在深度学习中,Embedding模型通常是一个神经网络模型,它的输入是文本数据,输出是文本数据的向量表示。这个向量表示可以用于文本分类、文本相似度计算、文本生成等任务。 25 | 26 | BERT是Google在2018年提出的一种Embedding模型,它是目前最先进的自然语言处理模型之一。BERT模型的特点是:预训练(Pre-training)和微调(Fine-tuning)两阶段。预训练阶段是在大规模文本数据上进行的,目的是学习文本数据的语言模型。微调阶段是在特定任务上进行的,目的是将BERT模型应用到具体的自然语言处理任务中。 27 | 28 | 现如今的大部分Embedding模型都是基于BERT模型的改进版本,比如RoBERTa、ALBERT、XLNet等。这些模型在BERT的基础上,通过改进模型架构、训练策略、数据处理等方面,进一步提升了自然语言处理的性能。 29 | 30 | 近期大家使用较多的OpenAI-text-embedding,Nomic-text-embedding,这些模型都是类BERT的架构并且改进版本(如Nomic增加了RoPE旋转位置编码),训练数据集更丰富,得到更好的效果。 31 | 32 | 所以说,简单理解为: 33 | 34 | ** Embedding模型 = BERT模型 + 改进 ** 35 | 36 | 而BERT又是一个Encoder-Only的Transformer架构。所以对于我们学完GPT-2之后,再学BERT,会发现两者有很多相似之处。。 37 | 38 | -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | from minbpe import BPETokenizer 2 | from model import * 3 | from trainer import * 4 | from datasets_novel import * 5 | 6 | if torch.cuda.is_available(): 7 | torch.cuda.empty_cache() 8 | 9 | BASE_DIR = Path(__file__).resolve().parent 10 | CHECKPOINT_DIR = BASE_DIR.joinpath('data/bert_checkpoints') 11 | timestamp = datetime.utcnow().timestamp() 12 | LOG_DIR = BASE_DIR.joinpath(f'data/logs/bert_experiment_{timestamp}') 13 | 14 | # 我们自己的分词器 15 | tokenizer = BPETokenizer() 16 | tokenizer.load("improved_chinese_tokenizer.model") 17 | 18 | # 模型参数 19 | batch_size = 4 20 | vocab_size = len(tokenizer.vocab) 21 | d_model = 768 22 | n_heads = 12 23 | head_size = d_model // n_heads 24 | n_layers = 12 25 | context_length = 512 26 | dropout = 0.1 27 | num_epochs = 2 28 | device = torch.device("cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")) 29 | # padding_idx = tokenizer.encode("[PAD]", allowed_special="all")[0] 30 | 31 | bert_model = BERTModel( 32 | vocab_size, 33 | d_model, 34 | n_heads, 35 | head_size, 36 | context_length, 37 | n_layers, 38 | dropout, 39 | device, 40 | ) 41 | 42 | novel_model = NovelModel(bert_model, vocab_size).to(device) 43 | 44 | # 通过PyTorch的DataLoader加载训练数据,定义在datasets_novel.py 45 | dataset = NovelDataset(mask_prob=0.3, max_n=5) 46 | 47 | trainer = BertTrainer( 48 | model=novel_model, 49 | dataset=dataset, 50 | log_dir=LOG_DIR, 51 | checkpoint_dir=CHECKPOINT_DIR, 52 | print_progress_every=20, 53 | print_accuracy_every=200, 54 | batch_size=batch_size, 55 | learning_rate=3e-4, 56 | epochs=num_epochs 57 | ) 58 | 59 | trainer.print_summary() 60 | trainer() 61 | 62 | 63 | -------------------------------------------------------------------------------- /inference.py: -------------------------------------------------------------------------------- 1 | from minbpe import BPETokenizer 2 | from model import * 3 | from trainer import * 4 | # from datasets_novel import * 5 | 6 | if torch.cuda.is_available(): 7 | torch.cuda.empty_cache() 8 | 9 | BASE_DIR = Path(__file__).resolve().parent 10 | CHECKPOINT_DIR = BASE_DIR.joinpath('data/bert_checkpoints') 11 | 12 | # 使用我们自己训练的分词器 13 | tokenizer = BPETokenizer() 14 | tokenizer.load("improved_chinese_tokenizer.model") 15 | 16 | 17 | # 模型参数 18 | vocab_size = len(tokenizer.vocab) 19 | d_model = 768 20 | n_heads = 12 21 | head_size = d_model // n_heads 22 | n_layers = 12 23 | context_length = 512 24 | dropout = 0.1 25 | device = torch.device("cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")) 26 | 27 | # 加载训练好的模型 28 | bert_model = BERTModel( 29 | vocab_size, 30 | d_model, 31 | n_heads, 32 | head_size, 33 | context_length, 34 | n_layers, 35 | dropout, 36 | device, 37 | ) 38 | 39 | model = NovelModel(bert_model, vocab_size).to(device) 40 | checkpoint = torch.load(CHECKPOINT_DIR.joinpath('bert_epoch1_step-1_1721348407.pt'), map_location=device) 41 | # print(f"This model was trained for {checkpoint['epoch']} epochs") 42 | # print(f"The final training loss was {checkpoint['loss']}") 43 | # print(model) 44 | model.load_state_dict(checkpoint['model_state_dict']) 45 | model.eval() 46 | 47 | # 通过词嵌入矩阵层获取词向量 48 | word_embeddings = model.bert.embedding.token_embedding.weight.data 49 | 50 | def get_word_vector(text, tokenizer, word_embeddings): 51 | token_indices = tokenizer.encode(text) 52 | embeddings = word_embeddings[token_indices] 53 | mean_pooled_embedding = torch.mean(embeddings, dim=0) 54 | 55 | return mean_pooled_embedding 56 | 57 | def get_sentence_vector_with_cls(sentence, tokenizer, model): 58 | """可选方法:使用[CLS]标记的输出作为句子向量。原BERT的下游任务实现之一。""" 59 | # 对句子进行编码 60 | input_ids = tokenizer.encode(sentence) 61 | input_ids = torch.tensor([input_ids]).to(device) 62 | 63 | # 通过模型获取输出 64 | with torch.no_grad(): 65 | outputs = model.bert(input_ids) 66 | 67 | # 使用[CLS]标记的输出作为句子向量 68 | sentence_vector = outputs[0, 0, :] 69 | return sentence_vector 70 | 71 | def get_sentence_vector(sentence, tokenizer, model): 72 | # 对句子进行编码 73 | input_ids = tokenizer.encode(sentence) 74 | input_ids = torch.tensor([input_ids]).to(device) 75 | 76 | # 通过模型获取输出 77 | with torch.no_grad(): 78 | outputs = model.bert(input_ids) 79 | 80 | # 使用平均池化 Mean-pooling 81 | sentence_vector = outputs.mean(dim=1) # 对所有词向量取平均 82 | return sentence_vector.squeeze(0) # 移除批次维度 83 | 84 | # 或者使用最大池化 Max-pooling 85 | # sentence_vector = outputs.max(dim=1)[0] # 取每个维度的最大值 86 | # return sentence_vector.squeeze(0) 87 | 88 | 89 | def cosine_similarity(v1, v2): 90 | return F.cosine_similarity(v1.unsqueeze(0), v2.unsqueeze(0), dim=1).item() 91 | 92 | # 对比【1】通过词嵌入矩阵计算相似度 93 | word1 = "低维展开的智子" 94 | word2 = "宇宙的黑暗森林状态" 95 | vector1 = get_word_vector(word1, tokenizer, word_embeddings) 96 | vector2 = get_word_vector(word2, tokenizer, word_embeddings) 97 | similarity = cosine_similarity(vector1, vector2) 98 | print(f"Embedding Layer Similarity: '{word1}' and '{word2}' is: {similarity:.4f}") 99 | 100 | # 对比【2】通过transformer最后一层的输出计算相似度 101 | sentence1 = "低维展开的智子" 102 | sentence2 = "宇宙的黑暗森林状态" 103 | # sentence2 = "时间简史主要讲了什么?" 104 | vector1 = get_sentence_vector(sentence1, tokenizer, model) 105 | vector2 = get_sentence_vector(sentence2, tokenizer, model) 106 | similarity = cosine_similarity(vector1, vector2) 107 | print(f"\"{sentence1}\" vs \"{sentence2}\" \n Transformer Layer Similarity: {similarity:.4f}") 108 | 109 | 110 | -------------------------------------------------------------------------------- /datasets_novel.py: -------------------------------------------------------------------------------- 1 | """ 2 | 原始的 BERT 使用了 BooksCorpus(8 亿词)和英文维基百科(25 亿词)进行预训练。 3 | 我们这个演示学习,使用《三体》全文作为训练数据,以及自己的中文tokenizer一起,来训练一个 BERT 模型。 4 | """ 5 | import torch 6 | from torch.utils.data import Dataset, DataLoader 7 | import numpy as np 8 | import random 9 | import sys 10 | import os 11 | import random 12 | from collections import Counter 13 | from minbpe import BPETokenizer 14 | 15 | 16 | # 加载我们训练的中文分词器 17 | tokenizer = BPETokenizer() 18 | tokenizer.load("improved_chinese_tokenizer.model") 19 | vocab_size = len(tokenizer.vocab) 20 | context_length = 64 21 | 22 | corpus_files = [ 23 | 'three_body_utf8.txt', 24 | # '三体.txt', 25 | # '科幻小说.txt', 26 | # '人类简史.txt', 27 | # '天龙八部.txt', 28 | # '盗墓笔记.txt', 29 | # '经济学原理.txt', 30 | # '莫言中短篇小说散文选.txt', 31 | # '货币战争.txt', 32 | # '货币战争升级版.txt', 33 | # '马云如是说.txt' 34 | ] 35 | # 加载corpus_files中的文本 36 | text = "" 37 | for file in corpus_files: 38 | text += open(file, "r", encoding="utf-8").read() 39 | 40 | text = text.replace("\u3000", "").replace("\n", "") 41 | 42 | 43 | class NovelDataset(Dataset): 44 | def __init__(self, mask_prob=0.15, max_n=5): 45 | self.tokenizer = tokenizer 46 | self.sentences = self._split_into_sentences(text) 47 | self.context_length = context_length 48 | self.mask_prob = mask_prob # n-gram mask probability 49 | self.max_n = max_n # maximum n-gram mask length 50 | 51 | def _split_into_sentences(self, text): 52 | # 使用多种标点符号分割,并过滤空句子 53 | seps = ["。", "!", "?", "…"] 54 | sentences = [] 55 | current = "" 56 | for char in text: 57 | current += char 58 | if char in seps: 59 | if current.strip(): 60 | sentences.append(current.strip()) 61 | current = "" 62 | if current.strip(): # 处理最后一个句子 63 | sentences.append(current.strip()) 64 | return sentences 65 | 66 | def _mask_tokens(self, tokens): 67 | masked_tokens = [] 68 | token_targets = [] 69 | inverse_token_mask = [] 70 | for token in tokens: 71 | if random.random() < self.mask_prob: 72 | r = random.random() 73 | if r < 0.8: # 80% 的情况 74 | masked_tokens.append(self.tokenizer.encode("[MASK]", allowed_special="all")[0]) 75 | elif r < 0.9: # 10% 的情况 76 | masked_tokens.append(token) 77 | else: # 10% 的情况 78 | masked_tokens.append(random.randint(0, len(self.tokenizer.vocab) - 1)) 79 | inverse_token_mask.append(1) # Masked 80 | token_targets.append(token) # Original token 81 | else: 82 | masked_tokens.append(token) 83 | inverse_token_mask.append(0) # Not masked 84 | token_targets.append(-100) # 使用 -100 表示不计算损失 85 | return masked_tokens, token_targets, inverse_token_mask 86 | 87 | def _mask_tokens_n_gram(self, tokens): 88 | masked_tokens = tokens.copy() 89 | token_targets = [-100] * len(tokens) # 初始化为 -100 pytorch 的 CrossEntropyLoss 计算损失时会忽略 -100 90 | inverse_token_mask = [0] * len(tokens) # 初始化为 0 91 | 92 | mask_indices = n_gram_mask(tokens, self.mask_prob, self.max_n) 93 | 94 | for idx in mask_indices: 95 | r = random.random() 96 | if r < 0.8: # 80% 的情况 97 | masked_tokens[idx] = self.tokenizer.encode("[MASK]", allowed_special="all")[0] 98 | elif r < 0.9: # 10% 的情况 99 | masked_tokens[idx] = tokens[idx] 100 | else: # 10% 的情况 101 | masked_tokens[idx] = random.randint(0, len(self.tokenizer.vocab) - 1) 102 | 103 | inverse_token_mask[idx] = 1 # Masked 掩码token 104 | token_targets[idx] = tokens[idx] # 原始token 105 | 106 | return masked_tokens, token_targets, inverse_token_mask 107 | 108 | def __len__(self): 109 | return len(self.sentences) - 1 110 | 111 | def __getitem__(self, idx): 112 | random.seed(idx) 113 | sentence_a = self.sentences[idx] 114 | if random.random() > 0.5: 115 | sentence_b = self.sentences[idx + 1] 116 | is_next = 1 # 下一个句子是连续的 117 | else: 118 | random_idx = random.randint(0, len(self.sentences) - 1) 119 | sentence_b = self.sentences[random_idx] 120 | is_next = 0 # 随机选择的句子作为下一个句子 121 | 122 | tokens_a = self.tokenizer.encode(sentence_a) 123 | tokens_b = self.tokenizer.encode(sentence_b) 124 | 125 | tokens_a, token_targets_a, inverse_token_mask_a = self._mask_tokens_n_gram(tokens_a) 126 | tokens_b, token_targets_b, inverse_token_mask_b = self._mask_tokens_n_gram(tokens_b) 127 | 128 | # 合并并截断序列 129 | input_ids = [self.tokenizer.encode("[CLS]", allowed_special="all")[0]] + tokens_a + \ 130 | [self.tokenizer.encode("[SEP]", allowed_special="all")[0]] + tokens_b + \ 131 | [self.tokenizer.encode("[SEP]", allowed_special="all")[0]] 132 | 133 | token_targets = [-100] + token_targets_a + [-100] + token_targets_b + [-100] 134 | inverse_token_mask = [0] + inverse_token_mask_a + [0] + inverse_token_mask_b + [0] 135 | token_type_ids = [0] * (len(tokens_a) + 2) + [1] * (len(tokens_b) + 1) 136 | 137 | # 截断序列 138 | if len(input_ids) > self.context_length: 139 | input_ids = input_ids[:self.context_length] 140 | token_targets = token_targets[:self.context_length] 141 | inverse_token_mask = inverse_token_mask[:self.context_length] 142 | token_type_ids = token_type_ids[:self.context_length] 143 | 144 | # 计算需要的填充长度 145 | padding_length = self.context_length - len(input_ids) 146 | 147 | # 填充 148 | if padding_length > 0: 149 | input_ids += [self.tokenizer.encode("[PAD]", allowed_special="all")[0]] * padding_length 150 | token_targets += [-100] * padding_length 151 | inverse_token_mask += [0] * padding_length 152 | token_type_ids += [0] * padding_length 153 | 154 | # 创建 attention mask 155 | attention_mask = [1] * len(input_ids) 156 | 157 | return { 158 | "input_ids": torch.tensor(input_ids, dtype=torch.long), 159 | "attention_mask": torch.tensor(attention_mask, dtype=torch.long), 160 | "token_type_ids": torch.tensor(token_type_ids, dtype=torch.long), 161 | "token_targets": torch.tensor(token_targets, dtype=torch.long), 162 | "inverse_token_mask": torch.tensor(inverse_token_mask, dtype=torch.long), 163 | "nsp_target": torch.tensor(is_next, dtype=torch.long) 164 | } 165 | 166 | 167 | def n_gram_mask(tokens, mask_prob=0.15, max_n=5): 168 | num_tokens = len(tokens) 169 | num_to_mask = int(num_tokens * mask_prob) 170 | masked_tokens = tokens.copy() 171 | mask_indices = set() 172 | 173 | while len(mask_indices) < num_to_mask: 174 | start = random.randint(0, num_tokens - 1) 175 | if start in mask_indices: 176 | continue 177 | 178 | n = random.randint(1, min(max_n, num_tokens - start)) 179 | for i in range(start, min(start + n, num_tokens)): 180 | if len(mask_indices) < num_to_mask: 181 | mask_indices.add(i) 182 | else: 183 | break 184 | 185 | return list(mask_indices) 186 | -------------------------------------------------------------------------------- /model.py: -------------------------------------------------------------------------------- 1 | """ 2 | Embedding向量模型约等于BERT。 3 | 从Transformer模型的角度来看,BERT是一个Encoder-only的Transformer架构。 4 | 而我们所需要的Embedding向量就是Bert架构的最后一层Transformer Block的输出。 5 | 并且,它是一个Bi-directional Encoder的架构(即没有attention mask,但是有特殊标记mask)。 6 | 关于特殊标记: 7 | 主打 [CLS]、[MUSK] 和 [SEP] 来在切分的句子中添加特殊的标记,以使模型能够学习到词与词的关系,以及句子的边界。 8 | """ 9 | 10 | import torch 11 | import torch.nn as nn 12 | from torch.nn import functional as F 13 | import math 14 | 15 | 16 | class EmbeddingLayer(nn.Module): 17 | """ 18 | BERT Embedding 层有三种属性: 19 | 1. Token Embedding : 类似GPT中的输入样本文字部分 20 | 2. Positional Embedding : 通过正余弦添加位置信息 21 | 3. Segment Embedding : 样本对顺序的标注,用于区分两个句子。如:“0”代表第一个句子,“1”代表“0”接下来的下一个句子。 22 | 将所有三个embedding做加法,得到最终给transformer encoder层的输入。 23 | """ 24 | 25 | def __init__(self, d_model, device, vocab_size, context_length): 26 | super().__init__() 27 | self.d_model = d_model 28 | self.vocab_size = vocab_size 29 | self.context_length = context_length 30 | self.device = device 31 | self.token_embedding = nn.Embedding(self.vocab_size, self.d_model).to(self.device) 32 | self.segment_embedding = nn.Embedding(2, self.d_model).to(self.device) 33 | self.position_embedding = nn.Parameter(self.create_position_encoding().to(self.device), requires_grad=False) 34 | self.layer_norm = nn.LayerNorm(self.d_model) 35 | 36 | def create_position_encoding(self): 37 | position_encoding = torch.zeros(self.context_length, self.d_model) 38 | position = torch.arange(0, self.context_length, dtype=torch.float).unsqueeze(1) 39 | div_term = torch.exp(torch.arange(0, self.d_model, 2).float() * (-math.log(10000.0) / self.d_model)) 40 | position_encoding[:, 0::2] = torch.sin(position * div_term) 41 | position_encoding[:, 1::2] = torch.cos(position * div_term) 42 | return position_encoding 43 | 44 | def forward(self, idx): 45 | idx = idx.to(self.device) 46 | 47 | sentence_size = idx.size(-1) 48 | segment_tensor = torch.zeros_like(idx).to(self.device) 49 | segment_tensor[:, sentence_size // 2 + 1:] = 1 50 | position_embedding = self.position_embedding[:idx.size(1), :] 51 | 52 | x = self.token_embedding(idx) + self.segment_embedding(segment_tensor) + position_embedding 53 | 54 | return self.layer_norm(x) 55 | 56 | 57 | # Define feed forward network | 定义前馈网络 58 | class FeedForwardNetwork(nn.Module): 59 | def __init__(self, d_model, dropout): 60 | super().__init__() 61 | self.d_model = d_model 62 | self.dropout = dropout 63 | self.ffn = nn.Sequential( 64 | nn.Linear(self.d_model, self.d_model * 4), 65 | nn.ReLU(), 66 | nn.Linear(self.d_model * 4, self.d_model), 67 | nn.Dropout(self.dropout) 68 | ) 69 | 70 | def forward(self, x): 71 | return self.ffn(x) 72 | 73 | 74 | # Define Scaled Dot Product Attention | 定义单头注意力 75 | class Attention(nn.Module): 76 | def __init__(self, d_model, head_size, context_length, dropout): 77 | super().__init__() 78 | self.d_model = d_model 79 | self.head_size = head_size 80 | self.context_length = context_length 81 | self.dropout = dropout 82 | self.Wq = nn.Linear(self.d_model, self.head_size, bias=False) 83 | self.Wk = nn.Linear(self.d_model, self.head_size, bias=False) 84 | self.Wv = nn.Linear(self.d_model, self.head_size, bias=False) 85 | self.dropout = nn.Dropout(self.dropout) 86 | 87 | def forward(self, x): 88 | q = self.Wq(x) 89 | k = self.Wk(x) 90 | v = self.Wv(x) 91 | 92 | weights = (q @ k.transpose(-2, -1)) / math.sqrt(self.head_size) 93 | weights = F.softmax(weights, dim=-1) 94 | weights = self.dropout(weights) 95 | 96 | output = weights @ v 97 | 98 | return output 99 | 100 | # Define Multi-head Attention | 定义多头注意力 101 | class MultiHeadAttention(nn.Module): 102 | def __init__(self, d_model, num_heads, head_size, context_length, dropout): 103 | super().__init__() 104 | self.d_model = d_model 105 | self.num_heads = num_heads 106 | self.head_size = head_size 107 | self.context_length = context_length 108 | self.dropout = dropout 109 | self.heads = nn.ModuleList( 110 | [Attention(self.d_model, self.head_size, self.context_length, self.dropout) for _ in range(self.num_heads)]) 111 | self.projection_layer = nn.Linear(self.d_model, self.d_model) 112 | self.dropout = nn.Dropout(self.dropout) 113 | 114 | def forward(self, x): 115 | head_outputs = [head(x) for head in self.heads] 116 | head_outputs = torch.cat(head_outputs, dim=-1) 117 | out = self.dropout(self.projection_layer(head_outputs)) 118 | return out 119 | 120 | # Define Transformer Block | 定义Transformer块 121 | class TransformerBlock(nn.Module): 122 | def __init__(self, d_model, num_heads, head_size, context_length, dropout): 123 | super().__init__() 124 | self.ln1 = nn.LayerNorm(d_model) 125 | self.ln2 = nn.LayerNorm(d_model) 126 | self.mha = MultiHeadAttention(d_model, num_heads, head_size, context_length, dropout) 127 | self.ffn = FeedForwardNetwork(d_model, dropout) 128 | 129 | def forward(self, x): 130 | x = x + self.mha(self.ln1(x)) 131 | x = x + self.ffn(self.ln2(x)) 132 | return x 133 | 134 | class BERTModel(nn.Module): 135 | def __init__(self, vocab_size, d_model, num_heads, head_size, context_length, num_blocks, dropout, device): 136 | super().__init__() 137 | self.d_model = d_model 138 | self.num_heads = num_heads 139 | self.head_size = head_size 140 | self.context_length = context_length 141 | self.num_blocks = num_blocks 142 | self.device = device 143 | self.embedding = EmbeddingLayer(self.d_model, self.device, vocab_size, self.context_length) 144 | self.transformer_blocks = nn.Sequential(*( 145 | [TransformerBlock(self.d_model, self.num_heads, self.head_size, self.context_length, dropout) for _ in 146 | range(self.num_blocks)] + 147 | [nn.LayerNorm(self.d_model)] 148 | )) 149 | 150 | def forward(self, idx): 151 | x = self.embedding(idx) 152 | for block in self.transformer_blocks: 153 | x = block(x) 154 | return x 155 | 156 | class NextSentencePrediction(torch.nn.Module): 157 | """ 158 | BERT架构实现目的之一:NSP任务 159 | 即判断两个句子是否是连续的。 160 | 主要用于句子级别的分类任务。 161 | """ 162 | def __init__(self, hidden): 163 | super().__init__() 164 | self.linear = torch.nn.Linear(hidden, 2) 165 | """ 166 | 如果损失函数使用的 nn.NLLLoss 的化,这里需要 LogSoftmax 167 | 如果损失函数使用的 nn.CrossEntropyLoss 的化,这里不需要 LogSoftmax,因为 nn.CrossEntropyLoss 函数内部做了 168 | """ 169 | # self.softmax = torch.nn.LogSoftmax(dim=-1) 170 | 171 | def forward(self, x): 172 | x = self.linear(x[:, 0]) # NSP任务只返回第一个token的值,即 [CLS] token 173 | # x = self.softmax(x) 174 | return x 175 | 176 | class MaskedLanguageModel(torch.nn.Module): 177 | """ 178 | BERT架构实现目的之二:MLM任务 179 | 即从被mask的输入序列中预测原始token。 180 | 主要用于单词级别的分类任务。 181 | """ 182 | def __init__(self, hidden, vocab_size, *args, **kwargs): 183 | super().__init__(*args, **kwargs) 184 | self.linear = torch.nn.Linear(hidden, vocab_size) 185 | """ 186 | 如果损失函数使用的 nn.NLLLoss 的化,这里需要 LogSoftmax 187 | 如果损失函数使用的 nn.CrossEntropyLoss 的化,这里不需要 LogSoftmax,因为 nn.CrossEntropyLoss 函数内部做了 188 | """ 189 | # self.softmax = torch.nn.LogSoftmax(dim=-1) 190 | 191 | def forward(self, x): 192 | x = self.linear(x) # MLM任务返回所有token的值 193 | # x = self.softmax(x) 194 | return x 195 | 196 | 197 | class NovelModel(torch.nn.Module): 198 | """ 199 | NovelModel 是我们自定义的最终模型 200 | [ BERT Base + Next Sentence Prediction + Masked Language Modeling ] 201 | """ 202 | def __init__(self, bert: BERTModel, vocab_size): 203 | super().__init__() 204 | self.bert = bert 205 | self.next_sentence_p = NextSentencePrediction(self.bert.d_model) 206 | self.mask_lm = MaskedLanguageModel(self.bert.d_model, vocab_size) 207 | 208 | def forward(self, x): 209 | x = self.bert(x) 210 | """模型输出的是两个预测值:一个是被mask掩码掉的token的预测,一个是下一句预测""" 211 | return self.mask_lm(x), self.next_sentence_p(x) 212 | -------------------------------------------------------------------------------- /trainer.py: -------------------------------------------------------------------------------- 1 | """ 2 | trainer部分代码修改自: https://github.com/coaxsoft/pytorch_bert/blob/master/bert/trainer.py 3 | """ 4 | from model import * 5 | from datasets_novel import * 6 | import time 7 | from datetime import datetime 8 | from pathlib import Path 9 | from torch import nn 10 | from torch.utils.data import DataLoader 11 | from torch.utils.tensorboard import SummaryWriter 12 | from torch.optim.lr_scheduler import LambdaLR 13 | from torch.optim import AdamW 14 | from minbpe import BPETokenizer 15 | 16 | tokenizer = BPETokenizer() 17 | 18 | device = torch.device("cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")) 19 | 20 | 21 | def lr_warmup_schedule(optimizer, num_warmup_steps, num_training_steps, last_epoch=-1): 22 | """ 定义一个pytorch提供的动态学习率方法 """ 23 | def lr_lambda(current_step: int): 24 | if current_step < num_warmup_steps: 25 | return float(current_step) / float(max(1, num_warmup_steps)) 26 | return max( 27 | 0.0, float(num_training_steps - current_step) / float(max(1, num_training_steps - num_warmup_steps)) 28 | ) 29 | 30 | return LambdaLR(optimizer, lr_lambda, last_epoch) 31 | 32 | 33 | def percentage(batch_size: int, max_index: int, current_index: int): 34 | """Calculate epoch progress percentage 35 | 36 | Args: 37 | batch_size: batch size 38 | max_index: max index in epoch 39 | current_index: current index 40 | 41 | Returns: 42 | Passed percentage of dataset 43 | """ 44 | batched_max = max_index // batch_size 45 | return round(current_index / batched_max * 100, 2) 46 | 47 | 48 | class BertTrainer: 49 | 50 | def __init__(self, 51 | model: BERTModel, 52 | dataset, 53 | log_dir: Path, 54 | checkpoint_dir: Path = None, 55 | print_progress_every: int = 10, 56 | print_accuracy_every: int = 50, 57 | batch_size: int = 4, 58 | learning_rate: float = 1e-4, 59 | epochs: int = 5, 60 | ): 61 | self.model = model 62 | self.dataset = dataset 63 | self.batch_size = batch_size 64 | self.epochs = epochs 65 | self.current_epoch = 0 66 | 67 | self.loader = DataLoader(self.dataset, batch_size=self.batch_size, shuffle=True) 68 | 69 | self.writer = SummaryWriter(str(log_dir)) 70 | self.checkpoint_dir = checkpoint_dir 71 | 72 | # self.nsp_criterion = nn.BCEWithLogitsLoss().to(device) # BCEWithLogitsLoss 适用于二分类问题 73 | self.nsp_criterion = nn.CrossEntropyLoss().to(device) # CrossEntropyLoss 适用于多分类问题 74 | # self.mlm_criterion = nn.NLLLoss(ignore_index=0).to(device) # NLLLoss 适用于多分类问题 75 | self.mlm_criterion = nn.CrossEntropyLoss(ignore_index=-100, reduction='mean').to(device) 76 | self.optimizer = AdamW(model.parameters(), lr=learning_rate, weight_decay=0.01) 77 | num_training_steps = len(self.loader) * epochs 78 | num_warmup_steps = num_training_steps * 0.05 # 整体训练步数的前5%用于warmup学习率 79 | self.scheduler = lr_warmup_schedule(self.optimizer, num_warmup_steps, num_training_steps) 80 | self._splitter_size = 30 # 打印Log时分隔符长度 81 | self._ds_len = len(self.dataset) 82 | self._batched_len = self._ds_len // self.batch_size 83 | self._print_every = print_progress_every 84 | self._accuracy_every = print_accuracy_every 85 | 86 | def __call__(self): 87 | for self.current_epoch in range(self.current_epoch, self.epochs): 88 | loss = self.train() 89 | self.save_checkpoint(self.current_epoch, step=-1, loss=loss) 90 | 91 | def train(self): 92 | print(f"Begin epoch {self.current_epoch}") 93 | self.model.train() 94 | prev = time.time() 95 | average_nsp_loss = 0 96 | average_mlm_loss = 0 97 | for i, value in enumerate(self.loader): 98 | index = i + 1 99 | input_ids = value["input_ids"].to(device) 100 | # 注意:这里的vocab_size是我们自己训练的tokenizer的vocab_size,而不是预训练BERT的vocab_size 101 | assert torch.all(input_ids < vocab_size), f"Input ids contain values >= vocab size ({vocab_size})" 102 | inverse_token_mask = value["inverse_token_mask"].to(device).bool() 103 | token_target = value["token_targets"].to(device) 104 | nsp_target = value["nsp_target"].to(device) 105 | 106 | self.optimizer.zero_grad() 107 | 108 | token, nsp = self.model(input_ids) 109 | token = token.masked_fill(inverse_token_mask.unsqueeze(-1), 0) 110 | 111 | # 计算 MLM 损失 112 | batch_size, seq_len = token_target.shape 113 | token = token.transpose(1, 2).contiguous().view(batch_size * seq_len, -1) 114 | token_target = token_target.view(-1) 115 | mask = token_target != -100 116 | loss_mlm = self.mlm_criterion(token[mask], token_target[mask]) 117 | 118 | # 计算 NSP 损失 119 | loss_nsp = self.nsp_criterion(nsp, nsp_target) 120 | 121 | # 总损失 122 | loss = loss_mlm + loss_nsp 123 | average_nsp_loss += loss_nsp 124 | average_mlm_loss += loss_mlm 125 | # print(f"MLM Loss: {loss_mlm.item()}") # 打印mlm损失 debug 126 | # print(f"Token predictions: {token.argmax(-1)[:5, :10]}") # 打印前5个样本的前10个token的预测 127 | # print(f"Token targets: {token_target[:5, :10]}") # 打印对应的目标值 128 | 129 | loss.backward() 130 | nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=1.0) # 梯度裁剪,以防止梯度爆炸。可有可无。 131 | self.optimizer.step() 132 | self.scheduler.step() # 更新学习率 133 | 134 | if index % self._print_every == 0: 135 | elapsed = time.gmtime(time.time() - prev) 136 | s = self.training_summary(elapsed, index, average_nsp_loss, average_mlm_loss, lr=self.optimizer.param_groups[0]['lr']) 137 | 138 | print(s) 139 | 140 | average_nsp_loss = 0 141 | average_mlm_loss = 0 142 | 143 | return loss 144 | 145 | def print_summary(self): 146 | """辅助函数,打印模型训练的一些基本信息""" 147 | ds_len = len(self.dataset) 148 | print("Model Summary\n") 149 | print('=' * self._splitter_size) 150 | print(f"Device: {device}") 151 | print(f"Training dataset len: {ds_len}") 152 | print(f"Batch size: {self.batch_size}") 153 | print(f"Batched dataset len: {self._batched_len}") 154 | print('=' * self._splitter_size) 155 | print() 156 | 157 | def training_summary(self, elapsed, index, average_nsp_loss, average_mlm_loss, lr): 158 | """辅助函数,打印训练进度""" 159 | passed = percentage(self.batch_size, self._ds_len, index) 160 | global_step = self.current_epoch * len(self.loader) + index 161 | 162 | print_nsp_loss = average_nsp_loss / self._print_every 163 | print_mlm_loss = average_mlm_loss / self._print_every 164 | 165 | s = f"{time.strftime('%H:%M:%S', elapsed)}" 166 | s += f" | Epoch {self.current_epoch + 1} | {index} / {self._batched_len} ({passed}%) | " \ 167 | f"NSP loss {print_nsp_loss:6.2f} | MLM loss {print_mlm_loss:6.2f} " \ 168 | f"| Learning Rate {lr:.6f}" 169 | 170 | self.writer.add_scalar("NSP loss", print_nsp_loss, global_step=global_step) 171 | self.writer.add_scalar("MLM loss", print_mlm_loss, global_step=global_step) 172 | self.writer.add_scalar("Learning Rate", lr, global_step=global_step) 173 | 174 | return s 175 | 176 | def save_checkpoint(self, epoch, step, loss): 177 | """ 训练过程中保存模型检查点 checkpoint """ 178 | if not self.checkpoint_dir: 179 | return 180 | 181 | prev = time.time() 182 | name = f"bert_epoch{epoch}_step{step}_{datetime.utcnow().timestamp():.0f}.pt" 183 | 184 | self.checkpoint_dir.mkdir(parents=True, exist_ok=True) 185 | torch.save({ 186 | 'epoch': epoch, 187 | 'model_state_dict': self.model.state_dict(), 188 | 'optimizer_state_dict': self.optimizer.state_dict(), 189 | 'loss': loss, 190 | }, self.checkpoint_dir.joinpath(name)) 191 | 192 | print() 193 | print('=' * self._splitter_size) 194 | print(f"Model saved as '{name}' for {time.time() - prev:.2f}s") 195 | print('=' * self._splitter_size) 196 | print() 197 | 198 | def load_checkpoint(self, path: Path): 199 | print('=' * self._splitter_size) 200 | print(f"Restoring model {path}") 201 | checkpoint = torch.load(path) 202 | self.current_epoch = checkpoint['epoch'] 203 | self.model.load_state_dict(checkpoint['model_state_dict']) 204 | self.optimizer.load_state_dict(checkpoint['optimizer_state_dict']) 205 | print("Model is restored.") 206 | print('=' * self._splitter_size) 207 | -------------------------------------------------------------------------------- /train_tokenizer.py: -------------------------------------------------------------------------------- 1 | """ 2 | 这个纯手撕(+GPT)优化后的tokenizer版本包含以下改进: 3 | 4 | - 使用多进程处理批次,利用多核 CPU。 5 | - 限制了全局统计信息的大小,防止在大语料上训练时内存使用过大。 6 | - 使用heap堆来优化合并操作,提高大数据集的处理效率。 7 | - 单批处理大小增加到了 10MB。 8 | 9 | 注意,由于使用了多进程,没有对代码进行额外的错误处理,有些电脑可能出现的并发问题。 10 | """ 11 | """训练语料用了中文维基百科:https://dumps.wikimedia.org/zhwiki/20240301/""" 12 | import threading 13 | from queue import Queue 14 | import time 15 | import re 16 | import os 17 | from collections import Counter 18 | from minbpe import BPETokenizer, get_stats, merge 19 | 20 | """这个正则表达式匹配单个中文字符、匹配连续的字母、数字或下划线、标点符号等,更适合中文""" 21 | GPT4_SPLIT_PATTERN_CN = r"""[\u4e00-\u9fff]+|[\u3000-\u303f\uff00-\uffef]+|[^\u4e00-\u9fff\s]+""" 22 | 23 | class CustomTokenizer(BPETokenizer): 24 | def __init__(self, pattern=None, max_stats=1000000): 25 | if pattern is None: 26 | pattern = GPT4_SPLIT_PATTERN_CN 27 | super().__init__(pattern) 28 | self.chinese_char_pattern = re.compile(r'[\u4e00-\u9fff]') 29 | self.global_stats = Counter() 30 | self.compiled_pattern = re.compile(pattern) 31 | self.special_tokens = {} 32 | self.vocab_reverse = {} 33 | self.max_stats = max_stats 34 | self.lock = threading.Lock() 35 | 36 | def preprocess_chinese(self, text): 37 | def split_chinese(match): 38 | return ' '.join(match.group(0)) 39 | 40 | return self.chinese_char_pattern.sub(split_chinese, text) 41 | 42 | def train_on_batch(self, batch_text, vocab_size, verbose=False, min_frequency=2): 43 | preprocessed_text = self.preprocess_chinese(batch_text) 44 | text_chunks = re.findall(self.compiled_pattern, preprocessed_text) 45 | ids = [list(ch.encode("utf-8")) for ch in text_chunks] 46 | 47 | with self.lock: 48 | # 更新全局统计信息 49 | for chunk_ids in ids: 50 | self.global_stats.update(get_stats(chunk_ids)) 51 | 52 | # 限制统计信息的大小 53 | if len(self.global_stats) > self.max_stats: 54 | self.global_stats = Counter(dict(self.global_stats.most_common(self.max_stats))) 55 | 56 | # 执行合并操作 57 | while len(self.vocab) < vocab_size: 58 | if not self.global_stats: 59 | break 60 | pair = max(self.global_stats, key=self.global_stats.get) 61 | if self.global_stats[pair] < min_frequency: 62 | break # 如果最频繁的对出现次数低于阈值,停止合并 63 | if pair in self.merges: 64 | del self.global_stats[pair] 65 | continue # 跳过已经合并过的对 66 | idx = len(self.vocab) 67 | self.merges[pair] = idx 68 | self.vocab[idx] = self.vocab[pair[0]] + self.vocab[pair[1]] 69 | 70 | if verbose: 71 | print( 72 | f"merge {len(self.vocab) - 256}/{vocab_size - 256}: {pair} -> {idx} ({self.vocab[idx]}) had {self.global_stats[pair]} occurrences") 73 | 74 | # 更新全局统计信息 75 | self.update_stats(pair, idx) 76 | 77 | self.vocab_reverse = {v: k for k, v in self.vocab.items()} 78 | 79 | def update_stats(self, pair, new_id): 80 | stats = self.global_stats 81 | first, second = pair 82 | new_pair = (first, new_id) 83 | i = 0 84 | while i < len(stats): 85 | if stats[i] == first and i < len(stats) - 1 and stats[i + 1] == second: 86 | stats[new_pair] += stats[pair] 87 | stats[pair] = 0 88 | i += 2 89 | else: 90 | i += 1 91 | 92 | def encode(self, text, allowed_special=None): 93 | if allowed_special is True: 94 | allowed_special = set(self.special_tokens.keys()) 95 | elif allowed_special is False: 96 | allowed_special = set() 97 | elif allowed_special is None: 98 | allowed_special = set() 99 | 100 | preprocessed_text = self.preprocess_chinese(text) 101 | tokens = re.findall(self.compiled_pattern, preprocessed_text) 102 | encoded = [] 103 | for token in tokens: 104 | if token in self.special_tokens and token in allowed_special: 105 | encoded.append(self.special_tokens[token]) 106 | else: 107 | # 使用 BPE 编码 108 | token_bytes = list(token.encode('utf-8')) 109 | while len(token_bytes) > 1: 110 | for i in range(len(token_bytes) - 1, 0, -1): 111 | pair = (token_bytes[i - 1], token_bytes[i]) 112 | if pair in self.merges: 113 | token_bytes = token_bytes[:i - 1] + [self.merges[pair]] + token_bytes[i + 1:] 114 | break 115 | else: 116 | break 117 | encoded.extend(token_bytes) 118 | return encoded 119 | 120 | def decode(self, ids): 121 | text = super().decode(ids) 122 | return re.sub(r'(\s)(?=[\u4e00-\u9fff])', '', text) 123 | 124 | def register_special_tokens(self, special_tokens): 125 | with self.lock: 126 | self.special_tokens = special_tokens 127 | for token, id in special_tokens.items(): 128 | self.vocab[id] = token.encode('utf-8') 129 | self.vocab_reverse[token] = id 130 | 131 | def load_corpus_in_batches(file_paths, batch_size=1_000_000): # 默认批次大小为1MB 132 | for file_path in file_paths: 133 | with open(file_path, 'r', encoding='utf-8') as f: 134 | batch = [] 135 | for line in f: 136 | batch.append(line) 137 | if sum(len(s) for s in batch) >= batch_size: 138 | yield ''.join(batch) 139 | batch = [] 140 | if batch: 141 | yield ''.join(batch) 142 | 143 | def evaluate_tokenizer(tokenizer, test_text): 144 | encoded = tokenizer.encode(test_text) 145 | decoded = tokenizer.decode(encoded) 146 | compression_ratio = len(encoded) / len(test_text) 147 | return { 148 | 'original_length': len(test_text), 149 | 'encoded_length': len(encoded), 150 | 'compression_ratio': compression_ratio, 151 | 'roundtrip_accuracy': test_text == decoded 152 | } 153 | 154 | def worker(queue, tokenizer, vocab_size, min_frequency): 155 | while True: 156 | batch = queue.get() 157 | if batch is None: 158 | break 159 | tokenizer.train_on_batch(batch, vocab_size, verbose=False, min_frequency=min_frequency) 160 | queue.task_done() 161 | 162 | def train_tokenizer(corpus_files, vocab_size=10256, num_threads=None, batch_size=1_000_000, min_frequency=3): 163 | tokenizer = CustomTokenizer() 164 | 165 | t0 = time.time() 166 | 167 | # 计算总文件大小以估算进度 168 | total_size = sum(os.path.getsize(f) for f in corpus_files) 169 | processed_size = 0 170 | 171 | # 创建一个队列和线程池 172 | queue = Queue(maxsize=20) # 限制队列大小,防止内存占用过大 173 | if num_threads is None: 174 | num_threads = min(os.cpu_count(), 32) # 使用CPU核心最多多少个 175 | threads = [] 176 | 177 | # 启动工作线程 178 | for _ in range(num_threads): 179 | t = threading.Thread(target=worker, args=(queue, tokenizer, vocab_size, min_frequency)) 180 | t.start() 181 | threads.append(t) 182 | 183 | # 读取数据并放入队列 184 | for i, batch in enumerate(load_corpus_in_batches(corpus_files, batch_size)): 185 | queue.put(batch) 186 | 187 | # 更新处理大小和进度 188 | batch_size = len(batch.encode('utf-8')) 189 | processed_size += batch_size 190 | progress = processed_size / total_size * 100 191 | 192 | print(f"已提交批次 {i + 1}") 193 | print(f"已处理: {progress:.2f}% | 当前辞典表大小: {len(tokenizer.vocab)}") 194 | print(f"已处理: {processed_size / 1_000_000:.2f} MB,预估共 {total_size / 1_000_000:.2f} MB。") 195 | print(f"本批次大小: {batch_size / 1_000_000:.2f} MB") 196 | print("-" * 50) 197 | 198 | # 等待所有任务完成 199 | queue.join() 200 | 201 | # 停止工作线程 202 | for _ in range(num_threads): 203 | queue.put(None) 204 | for t in threads: 205 | t.join() 206 | 207 | # 最后再训练一次,确保所有数据都被处理 208 | tokenizer.train_on_batch("", vocab_size, verbose=True, min_frequency=min_frequency) 209 | 210 | t1 = time.time() 211 | 212 | print(f"训练耗时 {t1 - t0:.2f} 秒") 213 | print(f"最终辞典表大小 {len(tokenizer.vocab)}") 214 | 215 | return tokenizer 216 | 217 | def main(): 218 | corpus_files = ['../three_body_utf8.txt', '../scifi.txt'] 219 | tokenizer = train_tokenizer(corpus_files, num_threads=os.cpu_count()) 220 | 221 | special_tokens = { 222 | "[CLS]": len(tokenizer.vocab), 223 | "[PAD]": len(tokenizer.vocab) + 1, 224 | "[SEP]": len(tokenizer.vocab) + 2, 225 | "[MASK]": len(tokenizer.vocab) + 3, 226 | "[UNK]": len(tokenizer.vocab) + 4, 227 | } 228 | tokenizer.register_special_tokens(special_tokens) 229 | 230 | print(f"\nTesting [PAD] special token encode: {tokenizer.encode('[PAD]', allowed_special=True)}") 231 | print(f"Testing [UNK] special token encode: {tokenizer.encode('[UNK]', allowed_special=True)}") 232 | 233 | test_text = "这是一个测试" 234 | encoded = tokenizer.encode(test_text, allowed_special=True) 235 | print(f"Testing normal text: '{test_text}'") 236 | print(f"Encoded: {encoded}") 237 | print(f"Decoded: {tokenizer.decode(encoded)}") 238 | 239 | tokenizer.save("improved_chinese_tokenizer") 240 | 241 | # 加载模型并测试 242 | tokenizer.load("improved_chinese_tokenizer.model") 243 | 244 | test_texts = [ 245 | "今天天气真好!", 246 | "三体是一部科幻小说。逻辑是执剑人,也是第二部的主人公。", 247 | "The quick brown fox jumps over the lazy dog.", 248 | "这是一个中英文混合的句子 with some English words." 249 | ] 250 | 251 | for test_text in test_texts: 252 | print(f"\nTesting: {test_text}") 253 | result = evaluate_tokenizer(tokenizer, test_text) 254 | print(f"Original length: {result['original_length']}") 255 | print(f"Encoded length: {result['encoded_length']}") 256 | print(f"Compression ratio: {result['compression_ratio']:.2f}") 257 | print(f"Roundtrip accuracy: {result['roundtrip_accuracy']}") 258 | 259 | if __name__ == "__main__": 260 | main() -------------------------------------------------------------------------------- /minbpe.py: -------------------------------------------------------------------------------- 1 | """ 2 | 以下代码复制于 https://github.com/karpathy/minbpe 3 | 我简化了以下,放在一个文件里方便演示。 4 | 5 | Minimal (byte-level) Byte Pair Encoding tokenizer. 6 | 7 | Algorithmically follows along the GPT tokenizer: 8 | https://github.com/openai/gpt-2/blob/master/src/encoder.py 9 | 10 | Unlike BasicTokenizer: 11 | - RegexTokenizer handles an optional regex splitting pattern. 12 | - RegexTokenizer handles optional special tokens. 13 | """ 14 | import regex as re 15 | import unicodedata 16 | 17 | # ----------------------------------------------------------------------------- 18 | # a few helper functions useful for both BasicTokenizer and RegexTokenizer 19 | 20 | def get_stats(ids, counts=None): 21 | """ 22 | Given a list of integers, return a dictionary of counts of consecutive pairs 23 | Example: [1, 2, 3, 1, 2] -> {(1, 2): 2, (2, 3): 1, (3, 1): 1} 24 | Optionally allows to update an existing dictionary of counts 25 | """ 26 | counts = {} if counts is None else counts 27 | for pair in zip(ids, ids[1:]): # iterate consecutive elements 28 | counts[pair] = counts.get(pair, 0) + 1 29 | return counts 30 | 31 | 32 | def merge(ids, pair, idx): 33 | """ 34 | In the list of integers (ids), replace all consecutive occurrences 35 | of pair with the new integer token idx 36 | Example: ids=[1, 2, 3, 1, 2], pair=(1, 2), idx=4 -> [4, 3, 4] 37 | """ 38 | newids = [] 39 | i = 0 40 | while i < len(ids): 41 | # if not at the very last position AND the pair matches, replace it 42 | if ids[i] == pair[0] and i < len(ids) - 1 and ids[i+1] == pair[1]: 43 | newids.append(idx) 44 | i += 2 45 | else: 46 | newids.append(ids[i]) 47 | i += 1 48 | return newids 49 | 50 | 51 | # first two helper functions... 52 | def replace_control_characters(s: str) -> str: 53 | # we don't want to print control characters 54 | # which distort the output (e.g. \n or much worse) 55 | # https://stackoverflow.com/questions/4324790/removing-control-characters-from-a-string-in-python/19016117#19016117 56 | # http://www.unicode.org/reports/tr44/#GC_Values_Table 57 | chars = [] 58 | for ch in s: 59 | if unicodedata.category(ch)[0] != "C": 60 | chars.append(ch) # this character is ok 61 | else: 62 | chars.append(f"\\u{ord(ch):04x}") # escape 63 | return "".join(chars) 64 | 65 | 66 | def render_token(t: bytes) -> str: 67 | # pretty print a token, escaping control characters 68 | s = t.decode('utf-8', errors='replace') 69 | s = replace_control_characters(s) 70 | return s 71 | 72 | # ----------------------------------------------------------------------------- 73 | # the base Tokenizer class 74 | 75 | class Tokenizer: 76 | """Base class for Tokenizers""" 77 | 78 | def __init__(self): 79 | # default: vocab size of 256 (all bytes), no merges, no patterns 80 | self.merges = {} # (int, int) -> int 81 | self.pattern = "" # str 82 | self.special_tokens = {} # str -> int, e.g. {'<|endoftext|>': 100257} 83 | self.vocab = self._build_vocab() # int -> bytes 84 | 85 | def train(self, text, vocab_size, verbose=False): 86 | # Tokenizer can train a vocabulary of size vocab_size from text 87 | raise NotImplementedError 88 | 89 | def encode(self, text): 90 | # Tokenizer can encode a string into a list of integers 91 | # 定义在RegexTokenizer类中 92 | raise NotImplementedError 93 | 94 | def decode(self, ids): 95 | # Tokenizer can decode a list of integers into a string 96 | # 定义在RegexTokenizer类中 97 | raise NotImplementedError 98 | 99 | def _build_vocab(self): 100 | # vocab is simply and deterministically derived from merges 101 | vocab = {idx: bytes([idx]) for idx in range(256)} 102 | for (p0, p1), idx in self.merges.items(): 103 | vocab[idx] = vocab[p0] + vocab[p1] 104 | for special, idx in self.special_tokens.items(): 105 | vocab[idx] = special.encode("utf-8") 106 | return vocab 107 | 108 | def save(self, file_prefix): 109 | """ 110 | Saves two files: file_prefix.vocab and file_prefix.model 111 | This is inspired (but not equivalent to!) sentencepiece's model saving: 112 | - model file is the critical one, intended for load() 113 | - vocab file is just a pretty printed version for human inspection only 114 | """ 115 | # write the model: to be used in load() later 116 | model_file = file_prefix + ".model" 117 | with open(model_file, 'w') as f: 118 | # write the version, pattern and merges, that's all that's needed 119 | f.write("minbpe v1\n") 120 | f.write(f"{self.pattern}\n") 121 | # write the special tokens, first the number of them, then each one 122 | f.write(f"{len(self.special_tokens)}\n") 123 | for special, idx in self.special_tokens.items(): 124 | f.write(f"{special} {idx}\n") 125 | # the merges dict 126 | for idx1, idx2 in self.merges: 127 | f.write(f"{idx1} {idx2}\n") 128 | # write the vocab: for the human to look at 129 | vocab_file = file_prefix + ".vocab" 130 | inverted_merges = {idx: pair for pair, idx in self.merges.items()} 131 | with open(vocab_file, "w", encoding="utf-8") as f: 132 | for idx, token in self.vocab.items(): 133 | # note: many tokens may be partial utf-8 sequences 134 | # and cannot be decoded into valid strings. Here we're using 135 | # errors='replace' to replace them with the replacement char �. 136 | # this also means that we couldn't possibly use .vocab in load() 137 | # because decoding in this way is a lossy operation! 138 | s = render_token(token) 139 | # find the children of this token, if any 140 | if idx in inverted_merges: 141 | # if this token has children, render it nicely as a merge 142 | idx0, idx1 = inverted_merges[idx] 143 | s0 = render_token(self.vocab[idx0]) 144 | s1 = render_token(self.vocab[idx1]) 145 | f.write(f"[{s0}][{s1}] -> [{s}] {idx}\n") 146 | else: 147 | # otherwise this is leaf token, just print it 148 | # (this should just be the first 256 tokens, the bytes) 149 | f.write(f"[{s}] {idx}\n") 150 | 151 | def load(self, model_file): 152 | """Inverse of save() but only for the model file""" 153 | assert model_file.endswith(".model") 154 | # read the model file 155 | merges = {} 156 | special_tokens = {} 157 | idx = 256 158 | with open(model_file, 'r', encoding="utf-8") as f: 159 | # read the version 160 | version = f.readline().strip() 161 | assert version == "minbpe v1" 162 | # read the pattern 163 | self.pattern = f.readline().strip() 164 | # read the special tokens 165 | num_special = int(f.readline().strip()) 166 | for _ in range(num_special): 167 | special, special_idx = f.readline().strip().split() 168 | special_tokens[special] = int(special_idx) 169 | # read the merges 170 | for line in f: 171 | idx1, idx2 = map(int, line.split()) 172 | merges[(idx1, idx2)] = idx 173 | idx += 1 174 | self.merges = merges 175 | self.special_tokens = special_tokens 176 | self.vocab = self._build_vocab() 177 | 178 | # the main GPT text split patterns, see 179 | # https://github.com/openai/tiktoken/blob/main/tiktoken_ext/openai_public.py 180 | GPT4_SPLIT_PATTERN = r"""'(?i:[sdmt]|ll|ve|re)|[^\r\n\p{L}\p{N}]?+\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]++[\r\n]*|\s*[\r\n]|\s+(?!\S)|\s+""" 181 | 182 | 183 | class BPETokenizer(Tokenizer): 184 | 185 | def __init__(self, pattern=None): 186 | """ 187 | - pattern: optional string to override the default (GPT-4 split pattern) 188 | - special_tokens: str -> int dictionary of special tokens 189 | example: {'<|endoftext|>': 100257} 190 | """ 191 | super().__init__() 192 | self.pattern = GPT4_SPLIT_PATTERN if pattern is None else pattern 193 | self.compiled_pattern = re.compile(self.pattern) 194 | self.special_tokens = {} 195 | self.inverse_special_tokens = {} 196 | 197 | def train(self, text, vocab_size, verbose=False): 198 | assert vocab_size >= 256 199 | num_merges = vocab_size - 256 200 | 201 | # split the text up into text chunks 202 | text_chunks = re.findall(self.compiled_pattern, text) 203 | 204 | # input text preprocessing 205 | ids = [list(ch.encode("utf-8")) for ch in text_chunks] 206 | 207 | # iteratively merge the most common pairs to create new tokens 208 | merges = {} # (int, int) -> int 209 | vocab = {idx: bytes([idx]) for idx in range(256)} # idx -> bytes 210 | for i in range(num_merges): 211 | # count the number of times every consecutive pair appears 212 | stats = {} 213 | for chunk_ids in ids: 214 | # passing in stats will update it in place, adding up counts 215 | get_stats(chunk_ids, stats) 216 | # find the pair with the highest count 217 | pair = max(stats, key=stats.get) 218 | # mint a new token: assign it the next available id 219 | idx = 256 + i 220 | # replace all occurrences of pair in ids with idx 221 | ids = [merge(chunk_ids, pair, idx) for chunk_ids in ids] 222 | # save the merge 223 | merges[pair] = idx 224 | vocab[idx] = vocab[pair[0]] + vocab[pair[1]] 225 | # prints 226 | if verbose: 227 | print(f"merge {i+1}/{num_merges}: {pair} -> {idx} ({vocab[idx]}) had {stats[pair]} occurrences") 228 | 229 | # save class variables 230 | self.merges = merges # used in encode() 231 | self.vocab = vocab # used in decode() 232 | 233 | def register_special_tokens(self, special_tokens): 234 | # special_tokens is a dictionary of str -> int 235 | # example: {"<|endoftext|>": 100257} 236 | self.special_tokens = special_tokens 237 | self.inverse_special_tokens = {v: k for k, v in special_tokens.items()} 238 | 239 | def decode(self, ids): 240 | # given ids (list of integers), return Python string 241 | part_bytes = [] 242 | for idx in ids: 243 | if idx in self.vocab: 244 | part_bytes.append(self.vocab[idx]) 245 | elif idx in self.inverse_special_tokens: 246 | part_bytes.append(self.inverse_special_tokens[idx].encode("utf-8")) 247 | else: 248 | raise ValueError(f"invalid token id: {idx}") 249 | text_bytes = b"".join(part_bytes) 250 | text = text_bytes.decode("utf-8", errors="replace") 251 | return text 252 | 253 | def _encode_chunk(self, text_bytes): 254 | # return the token ids 255 | # let's begin. first, convert all bytes to integers in range 0..255 256 | ids = list(text_bytes) 257 | while len(ids) >= 2: 258 | # find the pair with the lowest merge index 259 | stats = get_stats(ids) 260 | pair = min(stats, key=lambda p: self.merges.get(p, float("inf"))) 261 | # subtle: if there are no more merges available, the key will 262 | # result in an inf for every single pair, and the min will be 263 | # just the first pair in the list, arbitrarily 264 | # we can detect this terminating case by a membership check 265 | if pair not in self.merges: 266 | break # nothing else can be merged anymore 267 | # otherwise let's merge the best pair (lowest merge index) 268 | idx = self.merges[pair] 269 | ids = merge(ids, pair, idx) 270 | return ids 271 | 272 | def encode_ordinary(self, text): 273 | """Encoding that ignores any special tokens.""" 274 | # split text into chunks of text by categories defined in regex pattern 275 | text_chunks = re.findall(self.compiled_pattern, text) 276 | # all chunks of text are encoded separately, then results are joined 277 | ids = [] 278 | for chunk in text_chunks: 279 | chunk_bytes = chunk.encode("utf-8") # raw bytes 280 | chunk_ids = self._encode_chunk(chunk_bytes) 281 | ids.extend(chunk_ids) 282 | return ids 283 | 284 | def encode(self, text, allowed_special="none_raise"): 285 | """ 286 | Unlike encode_ordinary, this function handles special tokens. 287 | allowed_special: can be "all"|"none"|"none_raise" or a custom set of special tokens 288 | if none_raise, then an error is raised if any special token is encountered in text 289 | this is the default tiktoken behavior right now as well 290 | any other behavior is either annoying, or a major footgun 291 | """ 292 | # decode the user desire w.r.t. handling of special tokens 293 | special = None 294 | if allowed_special == "all": 295 | special = self.special_tokens 296 | elif allowed_special == "none": 297 | special = {} 298 | elif allowed_special == "none_raise": 299 | special = {} 300 | assert all(token not in text for token in self.special_tokens) 301 | elif isinstance(allowed_special, set): 302 | special = {k: v for k, v in self.special_tokens.items() if k in allowed_special} 303 | else: 304 | raise ValueError(f"allowed_special={allowed_special} not understood") 305 | if not special: 306 | # shortcut: if no special tokens, just use the ordinary encoding 307 | return self.encode_ordinary(text) 308 | # otherwise, we have to be careful with potential special tokens in text 309 | # we handle special tokens by splitting the text 310 | # based on the occurrence of any exact match with any of the special tokens 311 | # we can use re.split for this. note that surrounding the pattern with () 312 | # makes it into a capturing group, so the special tokens will be included 313 | special_pattern = "(" + "|".join(re.escape(k) for k in special) + ")" 314 | special_chunks = re.split(special_pattern, text) 315 | # now all the special characters are separated from the rest of the text 316 | # all chunks of text are encoded separately, then results are joined 317 | ids = [] 318 | for part in special_chunks: 319 | if part in special: 320 | # this is a special token, encode it separately as a special case 321 | ids.append(special[part]) 322 | else: 323 | # this is an ordinary sequence, encode it normally 324 | ids.extend(self.encode_ordinary(part)) 325 | return ids -------------------------------------------------------------------------------- /improved_chinese_tokenizer.model: -------------------------------------------------------------------------------- 1 | minbpe v1 2 | [\u4e00-\u9fff]+|[\u3000-\u303f\uff00-\uffef]+|[^\u4e00-\u9fff\s]+ 3 | 5 4 | [CLS] 7356 5 | [PAD] 7357 6 | [SEP] 7358 7 | [MASK] 7359 8 | [UNK] 7360 9 | 228 184 10 | 239 188 11 | 227 128 12 | 188 140 13 | 231 154 14 | 154 132 15 | 228 186 16 | 128 128 17 | 226 128 18 | 228 187 19 | 128 130 20 | 232 191 21 | 229 164 22 | 229 143 23 | 230 152 24 | 184 128 25 | 229 156 26 | 230 156 27 | 228 189 28 | 128 227 29 | 229 136 30 | 152 175 31 | 186 134 32 | 229 144 33 | 229 174 34 | 128 157 35 | 230 136 36 | 132 229 37 | 156 168 38 | 128 156 39 | 232 175 40 | 229 176 41 | 228 185 42 | 229 133 43 | 191 153 44 | 128 228 45 | 184 141 46 | 230 157 47 | 170 230 48 | 132 230 49 | 128 229 50 | 230 151 51 | 229 173 52 | 230 150 53 | 231 156 54 | 156 137 55 | 184 170 56 | 229 165 57 | 229 135 58 | 229 190 59 | 187 150 60 | 176 229 61 | 136 145 62 | 136 176 63 | 168 229 64 | 141 229 65 | 231 187 66 | 132 231 67 | 231 148 68 | 131 189 69 | 170 229 70 | 139 229 71 | 184 138 72 | 132 228 73 | 233 130 74 | 134 229 75 | 164 167 76 | 130 163 77 | 230 137 78 | 184 173 79 | 145 229 80 | 229 141 81 | 232 174 82 | 186 186 83 | 230 183 84 | 231 157 85 | 229 134 86 | 230 178 87 | 229 138 88 | 229 183 89 | 231 142 90 | 230 177 91 | 175 228 92 | 231 186 93 | 175 229 94 | 157 128 95 | 189 160 96 | 175 180 97 | 157 165 98 | 128 230 99 | 233 135 100 | 156 176 101 | 229 185 102 | 229 175 103 | 188 154 104 | 135 186 105 | 232 167 106 | 229 188 107 | 177 170 108 | 232 131 109 | 186 231 110 | 229 155 111 | 233 151 112 | 135 230 113 | 156 139 114 | 137 228 115 | 228 188 116 | 186 229 117 | 232 181 118 | 132 232 119 | 183 188 120 | 168 230 121 | 153 228 122 | 182 229 123 | 233 131 124 | 176 228 125 | 150 135 126 | 161 230 127 | 141 230 128 | 151 182 129 | 231 155 130 | 159 229 131 | 134 228 132 | 229 142 133 | 231 167 134 | 136 229 135 | 182 230 136 | 137 229 137 | 187 172 138 | 188 159 139 | 189 229 140 | 165 185 141 | 135 229 142 | 230 128 143 | 128 231 144 | 230 131 145 | 176 177 146 | 185 229 147 | 230 149 148 | 165 229 149 | 141 231 150 | 129 229 151 | 232 128 152 | 140 229 153 | 230 180 154 | 140 230 155 | 142 229 156 | 153 230 157 | 186 230 158 | 230 160 159 | 184 139 160 | 229 184 161 | 180 229 162 | 167 229 163 | 233 157 164 | 229 145 165 | 159 230 166 | 132 233 167 | 229 146 168 | 186 228 169 | 187 229 170 | 231 159 171 | 230 138 172 | 229 186 173 | 144 142 174 | 175 230 175 | 178 161 176 | 232 135 177 | 145 231 178 | 176 231 179 | 173 166 180 | 230 173 181 | 229 191 182 | 164 169 183 | 230 132 184 | 146 140 185 | 231 144 186 | 143 229 187 | 153 229 188 | 150 231 189 | 145 228 190 | 185 136 191 | 190 136 192 | 142 176 193 | 185 231 194 | 134 232 195 | 160 229 196 | 128 129 197 | 141 232 198 | 151 229 199 | 189 230 200 | 191 135 201 | 185 159 202 | 163 228 203 | 182 228 204 | 233 149 205 | 232 161 206 | 233 129 207 | 229 189 208 | 233 128 209 | 175 185 210 | 168 228 211 | 162 229 212 | 168 231 213 | 172 229 214 | 163 229 215 | 189 147 216 | 231 169 217 | 171 229 218 | 175 231 219 | 230 142 220 | 134 230 221 | 175 232 222 | 137 141 223 | 231 132 224 | 142 230 225 | 143 145 226 | 154 229 227 | 128 232 228 | 177 229 229 | 128 166 230 | 167 231 231 | 139 230 232 | 176 232 233 | 181 183 234 | 140 231 235 | 189 134 236 | 179 229 237 | 176 230 238 | 233 152 239 | 143 230 240 | 145 230 241 | 159 231 242 | 232 189 243 | 139 228 244 | 232 190 245 | 177 230 246 | 135 140 247 | 150 229 248 | 155 229 249 | 150 228 250 | 190 229 251 | 173 144 252 | 230 158 253 | 142 187 254 | 166 129 255 | 165 231 256 | 144 229 257 | 138 229 258 | 232 166 259 | 168 232 260 | 140 228 261 | 152 229 262 | 135 170 263 | 231 137 264 | 229 137 265 | 173 231 266 | 166 229 267 | 129 231 268 | 233 162 269 | 184 186 270 | 139 231 271 | 230 181 272 | 170 231 273 | 143 175 274 | 185 230 275 | 173 229 276 | 132 182 277 | 190 151 278 | 134 231 279 | 142 228 280 | 230 179 281 | 186 155 282 | 179 231 283 | 153 231 284 | 230 139 285 | 143 182 286 | 129 147 287 | 157 162 288 | 230 175 289 | 131 179 290 | 191 229 291 | 172 228 292 | 229 163 293 | 141 228 294 | 187 231 295 | 149 191 296 | 180 231 297 | 155 180 298 | 136 144 299 | 159 165 300 | 188 129 301 | 231 129 302 | 137 230 303 | 165 228 304 | 158 229 305 | 152 230 306 | 187 165 307 | 138 231 308 | 160 228 309 | 169 229 310 | 229 177 311 | 161 229 312 | 231 172 313 | 183 177 314 | 160 230 315 | 231 171 316 | 191 152 317 | 189 231 318 | 187 228 319 | 231 130 320 | 180 129 321 | 230 184 322 | 174 229 323 | 145 232 324 | 231 149 325 | 165 230 326 | 169 231 327 | 180 228 328 | 188 229 329 | 230 148 330 | 165 232 331 | 230 172 332 | 170 233 333 | 183 230 334 | 133 229 335 | 143 170 336 | 143 228 337 | 137 231 338 | 187 128 339 | 156 128 340 | 164 154 341 | 138 168 342 | 184 137 343 | 230 140 344 | 156 186 345 | 129 228 346 | 188 231 347 | 186 142 348 | 168 233 349 | 160 183 350 | 152 142 351 | 129 230 352 | 161 140 353 | 233 154 354 | 152 159 355 | 184 229 356 | 150 230 357 | 135 231 358 | 136 230 359 | 142 231 360 | 160 231 361 | 229 147 362 | 144 131 363 | 188 128 364 | 148 231 365 | 165 233 366 | 148 159 367 | 144 140 368 | 177 231 369 | 180 230 370 | 148 168 371 | 231 131 372 | 164 180 373 | 167 141 374 | 165 189 375 | 178 229 376 | 176 143 377 | 187 142 378 | 182 231 379 | 176 233 380 | 183 229 381 | 159 232 382 | 131 229 383 | 229 131 384 | 163 230 385 | 156 159 386 | 174 158 387 | 231 160 388 | 233 187 389 | 191 155 390 | 131 143 391 | 147 229 392 | 170 228 393 | 178 231 394 | 229 140 395 | 132 143 396 | 138 230 397 | 229 128 398 | 174 131 399 | 229 159 400 | 184 184 401 | 176 134 402 | 151 180 403 | 166 226 404 | 228 191 405 | 144 230 406 | 185 180 407 | 155 228 408 | 144 134 409 | 164 170 410 | 185 228 411 | 232 186 412 | 136 231 413 | 133 137 414 | 229 166 415 | 230 176 416 | 230 153 417 | 159 228 418 | 143 178 419 | 230 129 420 | 191 231 421 | 136 134 422 | 190 231 423 | 172 161 424 | 172 231 425 | 128 233 426 | 184 164 427 | 186 139 428 | 137 232 429 | 161 231 430 | 229 129 431 | 184 230 432 | 151 174 433 | 151 230 434 | 170 232 435 | 149 140 436 | 130 185 437 | 186 162 438 | 143 232 439 | 184 142 440 | 143 231 441 | 164 228 442 | 160 232 443 | 231 153 444 | 171 230 445 | 180 232 446 | 182 233 447 | 229 157 448 | 231 168 449 | 233 153 450 | 181 176 451 | 150 185 452 | 174 161 453 | 187 230 454 | 167 145 455 | 186 232 456 | 133 182 457 | 147 231 458 | 183 178 459 | 169 230 460 | 189 228 461 | 132 191 462 | 149 176 463 | 129 232 464 | 230 155 465 | 166 231 466 | 169 186 467 | 179 230 468 | 183 231 469 | 148 229 470 | 179 228 471 | 163 231 472 | 156 188 473 | 231 179 474 | 232 176 475 | 162 231 476 | 175 157 477 | 232 162 478 | 231 174 479 | 164 150 480 | 154 230 481 | 163 176 482 | 186 171 483 | 177 232 484 | 130 230 485 | 172 230 486 | 132 159 487 | 188 160 488 | 130 229 489 | 186 148 490 | 189 156 491 | 144 145 492 | 152 179 493 | 131 228 494 | 229 132 495 | 151 160 496 | 149 229 497 | 140 232 498 | 232 183 499 | 161 228 500 | 144 228 501 | 154 228 502 | 154 231 503 | 233 155 504 | 131 231 505 | 138 155 506 | 176 132 507 | 188 228 508 | 133 230 509 | 153 189 510 | 167 230 511 | 131 168 512 | 128 133 513 | 191 131 514 | 177 228 515 | 189 232 516 | 156 229 517 | 186 167 518 | 164 229 519 | 231 173 520 | 128 140 521 | 178 230 522 | 183 228 523 | 135 228 524 | 191 230 525 | 188 230 526 | 191 228 527 | 154 232 528 | 136 228 529 | 174 154 530 | 171 231 531 | 143 136 532 | 229 178 533 | 173 163 534 | 233 163 535 | 171 228 536 | 185 139 537 | 185 232 538 | 131 230 539 | 147 230 540 | 144 231 541 | 135 160 542 | 128 146 543 | 151 231 544 | 162 171 545 | 174 182 546 | 144 141 547 | 155 232 548 | 183 165 549 | 166 230 550 | 128 149 551 | 179 187 552 | 155 184 553 | 232 132 554 | 158 231 555 | 172 232 556 | 150 232 557 | 166 130 558 | 143 152 559 | 144 167 560 | 152 231 561 | 137 169 562 | 191 233 563 | 184 150 564 | 232 137 565 | 173 151 566 | 230 145 567 | 156 232 568 | 174 135 569 | 166 228 570 | 134 233 571 | 166 232 572 | 144 232 573 | 187 232 574 | 233 161 575 | 172 172 576 | 158 230 577 | 181 229 578 | 174 153 579 | 147 228 580 | 155 230 581 | 187 143 582 | 187 145 583 | 233 171 584 | 136 232 585 | 155 231 586 | 190 185 587 | 144 172 588 | 188 232 589 | 142 165 590 | 232 182 591 | 229 167 592 | 155 174 593 | 137 233 594 | 138 228 595 | 179 232 596 | 232 180 597 | 169 228 598 | 146 229 599 | 159 186 600 | 231 161 601 | 148 230 602 | 156 230 603 | 171 152 604 | 186 166 605 | 190 228 606 | 173 230 607 | 156 172 608 | 142 232 609 | 148 181 610 | 231 177 611 | 230 130 612 | 137 128 613 | 137 139 614 | 138 138 615 | 157 168 616 | 186 191 617 | 151 228 618 | 186 233 619 | 159 173 620 | 139 232 621 | 191 232 622 | 191 161 623 | 138 232 624 | 137 178 625 | 157 230 626 | 174 164 627 | 174 231 628 | 135 141 629 | 174 233 630 | 143 141 631 | 156 231 632 | 155 158 633 | 184 228 634 | 137 135 635 | 191 156 636 | 133 231 637 | 231 164 638 | 141 171 639 | 168 139 640 | 191 171 641 | 175 233 642 | 156 228 643 | 231 189 644 | 142 139 645 | 136 171 646 | 167 137 647 | 134 133 648 | 175 134 649 | 162 230 650 | 160 148 651 | 164 230 652 | 231 178 653 | 189 191 654 | 135 143 655 | 186 170 656 | 233 156 657 | 230 154 658 | 180 233 659 | 140 233 660 | 233 170 661 | 130 231 662 | 153 232 663 | 174 230 664 | 169 182 665 | 153 233 666 | 137 147 667 | 141 233 668 | 189 233 669 | 173 228 670 | 129 175 671 | 148 232 672 | 141 129 673 | 151 168 674 | 231 170 675 | 155 189 676 | 157 229 677 | 178 184 678 | 152 228 679 | 184 187 680 | 231 188 681 | 231 165 682 | 145 233 683 | 230 161 684 | 188 155 685 | 136 233 686 | 158 233 687 | 152 190 688 | 156 175 689 | 129 171 690 | 178 228 691 | 175 148 692 | 174 169 693 | 134 155 694 | 164 132 695 | 232 136 696 | 149 153 697 | 167 233 698 | 153 168 699 | 162 152 700 | 167 163 701 | 146 232 702 | 144 151 703 | 178 232 704 | 159 179 705 | 185 233 706 | 135 232 707 | 166 187 708 | 182 232 709 | 230 143 710 | 149 231 711 | 231 136 712 | 133 228 713 | 157 161 714 | 133 165 715 | 174 186 716 | 181 139 717 | 161 232 718 | 232 165 719 | 165 191 720 | 158 156 721 | 157 144 722 | 139 233 723 | 140 135 724 | 146 231 725 | 184 156 726 | 133 131 727 | 191 144 728 | 189 141 729 | 231 190 730 | 138 233 731 | 157 231 732 | 162 228 733 | 133 179 734 | 133 232 735 | 174 140 736 | 138 160 737 | 176 148 738 | 129 154 739 | 229 162 740 | 187 182 741 | 150 233 742 | 142 233 743 | 229 153 744 | 162 232 745 | 140 150 746 | 187 141 747 | 189 172 748 | 163 233 749 | 229 187 750 | 174 228 751 | 171 139 752 | 131 133 753 | 134 141 754 | 135 233 755 | 230 159 756 | 183 232 757 | 143 176 758 | 151 165 759 | 155 190 760 | 136 182 761 | 164 156 762 | 187 163 763 | 189 149 764 | 142 137 765 | 148 190 766 | 154 143 767 | 176 180 768 | 189 187 769 | 188 233 770 | 131 140 771 | 167 129 772 | 187 187 773 | 230 182 774 | 156 155 775 | 230 141 776 | 167 130 777 | 188 186 778 | 155 233 779 | 187 147 780 | 129 233 781 | 144 233 782 | 173 232 783 | 233 146 784 | 163 232 785 | 161 174 786 | 183 168 787 | 231 180 788 | 143 163 789 | 139 141 790 | 229 149 791 | 133 233 792 | 180 187 793 | 184 231 794 | 136 154 795 | 146 230 796 | 232 177 797 | 133 168 798 | 184 133 799 | 187 186 800 | 185 178 801 | 155 160 802 | 184 232 803 | 185 182 804 | 187 159 805 | 232 130 806 | 153 175 807 | 174 151 808 | 170 140 809 | 179 149 810 | 177 130 811 | 184 136 812 | 145 168 813 | 136 152 814 | 165 158 815 | 158 232 816 | 165 179 817 | 185 179 818 | 231 138 819 | 188 188 820 | 231 166 821 | 178 190 822 | 171 232 823 | 136 135 824 | 161 168 825 | 164 186 826 | 148 228 827 | 128 187 828 | 185 177 829 | 162 151 830 | 230 174 831 | 175 165 832 | 189 162 833 | 155 155 834 | 172 233 835 | 138 128 836 | 147 232 837 | 133 183 838 | 185 166 839 | 189 177 840 | 181 232 841 | 155 183 842 | 149 156 843 | 133 181 844 | 152 232 845 | 177 187 846 | 191 158 847 | 229 158 848 | 130 168 849 | 230 144 850 | 169 232 851 | 226 150 852 | 150 161 853 | 133 136 854 | 163 158 855 | 175 129 856 | 167 139 857 | 131 232 858 | 167 228 859 | 173 233 860 | 137 190 861 | 149 228 862 | 187 153 863 | 232 129 864 | 189 166 865 | 184 166 866 | 145 189 867 | 154 190 868 | 173 148 869 | 228 190 870 | 151 233 871 | 128 153 872 | 128 154 873 | 164 141 874 | 187 132 875 | 175 149 876 | 187 164 877 | 135 179 878 | 49 49 879 | 170 129 880 | 128 167 881 | 233 148 882 | 149 230 883 | 148 177 884 | 133 167 885 | 177 177 886 | 176 129 887 | 160 233 888 | 176 145 889 | 143 183 890 | 164 231 891 | 141 183 892 | 186 178 893 | 186 140 894 | 145 138 895 | 178 153 896 | 173 152 897 | 131 167 898 | 230 187 899 | 134 183 900 | 230 168 901 | 172 145 902 | 230 165 903 | 179 162 904 | 128 159 905 | 149 226 906 | 167 132 907 | 154 151 908 | 177 161 909 | 233 147 910 | 144 136 911 | 149 180 912 | 230 188 913 | 141 138 914 | 145 162 915 | 189 174 916 | 179 176 917 | 128 138 918 | 173 187 919 | 188 143 920 | 150 176 921 | 151 232 922 | 180 158 923 | 231 133 924 | 148 191 925 | 232 141 926 | 142 159 927 | 190 230 928 | 190 190 929 | 191 145 930 | 173 137 931 | 130 228 932 | 141 149 933 | 185 142 934 | 232 144 935 | 139 191 936 | 232 143 937 | 128 139 938 | 158 228 939 | 164 232 940 | 229 150 941 | 183 233 942 | 174 190 943 | 174 129 944 | 232 139 945 | 175 141 946 | 163 142 947 | 187 173 948 | 137 185 949 | 158 139 950 | 174 137 951 | 134 153 952 | 173 169 953 | 173 165 954 | 156 233 955 | 187 233 956 | 135 145 957 | 175 143 958 | 186 149 959 | 232 138 960 | 156 136 961 | 146 228 962 | 128 142 963 | 233 166 964 | 144 189 965 | 157 232 966 | 143 233 967 | 181 129 968 | 174 184 969 | 168 161 970 | 157 228 971 | 233 169 972 | 161 128 973 | 136 172 974 | 190 232 975 | 190 174 976 | 145 152 977 | 48 48 978 | 174 232 979 | 181 230 980 | 143 166 981 | 129 156 982 | 131 138 983 | 187 170 984 | 167 146 985 | 143 144 986 | 232 163 987 | 178 137 988 | 187 152 989 | 190 139 990 | 149 138 991 | 230 163 992 | 232 153 993 | 158 132 994 | 136 143 995 | 231 139 996 | 165 135 997 | 148 179 998 | 171 153 999 | 171 233 1000 | 138 159 1001 | 231 134 1002 | 142 169 1003 | 138 182 1004 | 184 144 1005 | 229 161 1006 | 157 153 1007 | 129 146 1008 | 147 233 1009 | 143 151 1010 | 233 159 1011 | 147 141 1012 | 187 191 1013 | 189 155 1014 | 145 135 1015 | 175 146 1016 | 155 162 1017 | 175 188 1018 | 128 143 1019 | 179 233 1020 | 185 187 1021 | 128 144 1022 | 154 174 1023 | 134 172 1024 | 177 179 1025 | 174 176 1026 | 167 232 1027 | 148 182 1028 | 182 133 1029 | 149 232 1030 | 167 134 1031 | 163 171 1032 | 190 144 1033 | 174 185 1034 | 136 187 1035 | 173 164 1036 | 154 233 1037 | 150 175 1038 | 155 145 1039 | 230 133 1040 | 179 168 1041 | 188 149 1042 | 177 233 1043 | 151 170 1044 | 131 159 1045 | 131 233 1046 | 141 174 1047 | 136 157 1048 | 131 182 1049 | 130 232 1050 | 142 134 1051 | 159 233 1052 | 233 173 1053 | 49 57 1054 | 181 231 1055 | 191 151 1056 | 232 173 1057 | 189 143 1058 | 176 131 1059 | 183 175 1060 | 133 180 1061 | 189 142 1062 | 185 133 1063 | 132 177 1064 | 141 135 1065 | 190 233 1066 | 230 162 1067 | 229 148 1068 | 184 130 1069 | 159 142 1070 | 187 134 1071 | 164 177 1072 | 149 165 1073 | 160 185 1074 | 134 176 1075 | 175 137 1076 | 191 157 1077 | 186 174 1078 | 136 146 1079 | 135 187 1080 | 190 142 1081 | 143 140 1082 | 129 181 1083 | 130 137 1084 | 166 233 1085 | 169 191 1086 | 128 152 1087 | 152 233 1088 | 184 165 1089 | 160 129 1090 | 148 175 1091 | 232 142 1092 | 147 129 1093 | 164 159 1094 | 150 153 1095 | 148 233 1096 | 167 166 1097 | 168 128 1098 | 163 133 1099 | 149 233 1100 | 145 134 1101 | 160 145 1102 | 191 189 1103 | 167 148 1104 | 147 178 1105 | 157 169 1106 | 136 153 1107 | 129 173 1108 | 160 135 1109 | 142 168 1110 | 188 130 1111 | 133 172 1112 | 142 135 1113 | 143 130 1114 | 147 170 1115 | 162 233 1116 | 136 191 1117 | 184 129 1118 | 130 233 1119 | 150 173 1120 | 175 187 1121 | 164 233 1122 | 185 137 1123 | 231 150 1124 | 161 233 1125 | 137 175 1126 | 129 148 1127 | 231 191 1128 | 230 185 1129 | 161 182 1130 | 190 164 1131 | 161 148 1132 | 161 226 1133 | 128 188 1134 | 157 233 1135 | 142 146 1136 | 184 147 1137 | 173 162 1138 | 146 233 1139 | 148 187 1140 | 161 185 1141 | 230 186 1142 | 182 138 1143 | 136 150 1144 | 187 180 1145 | 187 136 1146 | 157 151 1147 | 182 136 1148 | 144 158 1149 | 186 164 1150 | 138 165 1151 | 143 165 1152 | 231 143 1153 | 128 145 1154 | 136 169 1155 | 157 155 1156 | 144 132 1157 | 187 161 1158 | 187 138 1159 | 191 133 1160 | 183 159 1161 | 232 168 1162 | 231 151 1163 | 151 169 1164 | 174 128 1165 | 158 151 1166 | 184 154 1167 | 233 133 1168 | 128 170 1169 | 132 184 1170 | 175 183 1171 | 147 166 1172 | 165 188 1173 | 178 233 1174 | 164 190 1175 | 157 130 1176 | 229 152 1177 | 170 151 1178 | 174 191 1179 | 143 173 1180 | 178 144 1181 | 171 159 1182 | 131 129 1183 | 180 162 1184 | 162 134 1185 | 131 173 1186 | 161 163 1187 | 151 129 1188 | 166 150 1189 | 164 135 1190 | 229 160 1191 | 229 179 1192 | 179 138 1193 | 230 146 1194 | 231 145 1195 | 156 150 1196 | 153 190 1197 | 145 179 1198 | 162 166 1199 | 184 135 1200 | 133 171 1201 | 50 48 1202 | 181 228 1203 | 156 141 1204 | 178 151 1205 | 186 179 1206 | 169 172 1207 | 184 131 1208 | 153 154 1209 | 187 157 1210 | 177 149 1211 | 135 180 1212 | 158 129 1213 | 149 133 1214 | 190 133 1215 | 174 181 1216 | 141 161 1217 | 134 181 1218 | 138 172 1219 | 180 168 1220 | 174 174 1221 | 140 129 1222 | 145 158 1223 | 229 168 1224 | 152 180 1225 | 180 167 1226 | 134 178 1227 | 162 132 1228 | 160 180 1229 | 134 146 1230 | 174 178 1231 | 136 177 1232 | 185 189 1233 | 171 160 1234 | 143 171 1235 | 146 159 1236 | 148 183 1237 | 152 181 1238 | 58 49 1239 | 187 167 1240 | 188 147 1241 | 233 184 1242 | 129 144 1243 | 233 134 1244 | 161 136 1245 | 175 159 1246 | 184 148 1247 | 189 145 1248 | 149 163 1249 | 130 175 1250 | 184 157 1251 | 129 135 1252 | 176 136 1253 | 179 161 1254 | 163 174 1255 | 141 180 1256 | 141 142 1257 | 174 152 1258 | 189 170 1259 | 158 182 1260 | 191 187 1261 | 128 160 1262 | 185 150 1263 | 58 51 1264 | 49 56 1265 | 162 168 1266 | 163 179 1267 | 142 162 1268 | 232 133 1269 | 153 133 1270 | 135 134 1271 | 140 186 1272 | 169 233 1273 | 155 134 1274 | 187 189 1275 | 190 191 1276 | 145 188 1277 | 154 144 1278 | 156 157 1279 | 153 162 1280 | 138 149 1281 | 136 180 1282 | 159 144 1283 | 162 145 1284 | 140 133 1285 | 160 184 1286 | 232 146 1287 | 128 131 1288 | 138 177 1289 | 133 173 1290 | 136 155 1291 | 184 189 1292 | 183 157 1293 | 142 136 1294 | 141 136 1295 | 132 145 1296 | 178 129 1297 | 174 177 1298 | 145 132 1299 | 134 179 1300 | 158 170 1301 | 181 184 1302 | 173 143 1303 | 186 163 1304 | 156 170 1305 | 186 137 1306 | 130 172 1307 | 186 143 1308 | 134 159 1309 | 140 165 1310 | 190 128 1311 | 139 130 1312 | 139 137 1313 | 176 189 1314 | 178 191 1315 | 155 170 1316 | 186 144 1317 | 167 187 1318 | 188 171 1319 | 187 139 1320 | 184 180 1321 | 153 164 1322 | 174 162 1323 | 186 183 1324 | 143 138 1325 | 180 163 1326 | 186 145 1327 | 231 135 1328 | 135 131 1329 | 185 149 1330 | 141 176 1331 | 186 184 1332 | 187 133 1333 | 168 179 1334 | 172 148 1335 | 129 49 1336 | 137 176 1337 | 148 154 1338 | 49 48 1339 | 143 150 1340 | 131 187 1341 | 142 171 1342 | 163 129 1343 | 231 175 1344 | 181 132 1345 | 184 190 1346 | 142 154 1347 | 165 151 1348 | 184 233 1349 | 138 189 1350 | 187 135 1351 | 180 159 1352 | 128 165 1353 | 165 154 1354 | 184 174 1355 | 138 158 1356 | 175 173 1357 | 151 133 1358 | 138 170 1359 | 172 188 1360 | 133 133 1361 | 155 186 1362 | 181 171 1363 | 133 134 1364 | 157 160 1365 | 160 188 1366 | 183 174 1367 | 184 140 1368 | 150 145 1369 | 230 147 1370 | 129 182 1371 | 141 137 1372 | 184 169 1373 | 143 164 1374 | 176 162 1375 | 149 143 1376 | 231 140 1377 | 129 191 1378 | 173 145 1379 | 138 130 1380 | 178 187 1381 | 136 164 1382 | 129 239 1383 | 148 185 1384 | 227 131 1385 | 144 166 1386 | 176 184 1387 | 155 178 1388 | 141 179 1389 | 131 136 1390 | 162 131 1391 | 191 183 1392 | 142 140 1393 | 177 133 1394 | 160 161 1395 | 139 177 1396 | 233 177 1397 | 177 188 1398 | 182 163 1399 | 146 177 1400 | 230 135 1401 | 233 186 1402 | 159 239 1403 | 230 166 1404 | 186 175 1405 | 187 176 1406 | 191 174 1407 | 168 129 1408 | 151 151 1409 | 167 152 1410 | 140 137 1411 | 139 166 1412 | 157 190 1413 | 154 130 1414 | 191 176 1415 | 229 151 1416 | 157 131 1417 | 191 185 1418 | 138 175 1419 | 177 143 1420 | 140 151 1421 | 157 159 1422 | 157 158 1423 | 183 183 1424 | 232 140 1425 | 186 187 1426 | 135 142 1427 | 231 162 1428 | 156 178 1429 | 230 191 1430 | 191 128 1431 | 173 190 1432 | 190 132 1433 | 231 158 1434 | 132 154 1435 | 135 138 1436 | 233 172 1437 | 233 165 1438 | 58 50 1439 | 166 134 1440 | 148 153 1441 | 232 134 1442 | 152 182 1443 | 149 136 1444 | 174 179 1445 | 157 146 1446 | 183 145 1447 | 146 153 1448 | 175 130 1449 | 144 179 1450 | 178 179 1451 | 153 174 1452 | 189 189 1453 | 155 150 1454 | 142 175 1455 | 138 161 1456 | 142 133 1457 | 157 191 1458 | 160 134 1459 | 152 165 1460 | 230 189 1461 | 154 150 1462 | 162 153 1463 | 187 149 1464 | 142 167 1465 | 180 190 1466 | 158 157 1467 | 155 175 1468 | 153 141 1469 | 55 58 1470 | 162 133 1471 | 49 58 1472 | 49 55 1473 | 150 151 1474 | 150 138 1475 | 189 175 1476 | 57 54 1477 | 188 185 1478 | 153 183 1479 | 128 137 1480 | 185 191 1481 | 147 182 1482 | 171 175 1483 | 181 147 1484 | 150 132 1485 | 177 158 1486 | 189 169 1487 | 190 131 1488 | 188 152 1489 | 133 139 1490 | 144 184 1491 | 175 175 1492 | 181 174 1493 | 139 159 1494 | 183 179 1495 | 139 143 1496 | 154 148 1497 | 152 155 1498 | 183 161 1499 | 146 158 1500 | 229 139 1501 | 165 173 1502 | 58 48 1503 | 140 187 1504 | 184 178 1505 | 138 164 1506 | 152 143 1507 | 233 188 1508 | 188 177 1509 | 132 176 1510 | 184 163 1511 | 177 128 1512 | 232 185 1513 | 153 144 1514 | 174 168 1515 | 137 167 1516 | 190 183 1517 | 157 166 1518 | 137 148 1519 | 141 162 1520 | 136 170 1521 | 162 141 1522 | 140 130 1523 | 141 146 1524 | 153 132 1525 | 150 157 1526 | 185 184 1527 | 156 135 1528 | 146 187 1529 | 159 159 1530 | 134 156 1531 | 188 169 1532 | 53 58 1533 | 161 187 1534 | 186 138 1535 | 129 141 1536 | 144 175 1537 | 189 144 1538 | 167 175 1539 | 133 162 1540 | 166 185 1541 | 189 153 1542 | 129 176 1543 | 186 158 1544 | 134 132 1545 | 182 179 1546 | 173 140 1547 | 165 150 1548 | 233 178 1549 | 157 226 1550 | 188 150 1551 | 187 148 1552 | 176 186 1553 | 232 145 1554 | 139 155 1555 | 129 140 1556 | 152 168 1557 | 164 171 1558 | 132 166 1559 | 131 145 1560 | 167 176 1561 | 188 145 1562 | 146 162 1563 | 232 155 1564 | 161 186 1565 | 181 233 1566 | 129 151 1567 | 166 153 1568 | 130 174 1569 | 157 135 1570 | 130 161 1571 | 172 162 1572 | 131 130 1573 | 163 128 1574 | 157 143 1575 | 153 182 1576 | 231 152 1577 | 165 139 1578 | 155 153 1579 | 233 189 1580 | 175 190 1581 | 168 191 1582 | 140 163 1583 | 153 186 1584 | 141 154 1585 | 131 156 1586 | 186 161 1587 | 152 148 1588 | 226 133 1589 | 143 185 1590 | 185 144 1591 | 129 143 1592 | 155 152 1593 | 183 180 1594 | 229 130 1595 | 157 175 1596 | 181 182 1597 | 155 168 1598 | 139 172 1599 | 232 184 1600 | 143 161 1601 | 229 180 1602 | 174 189 1603 | 186 173 1604 | 142 152 1605 | 183 166 1606 | 143 179 1607 | 152 147 1608 | 133 176 1609 | 151 139 1610 | 142 177 1611 | 155 148 1612 | 180 185 1613 | 180 175 1614 | 133 141 1615 | 172 166 1616 | 147 156 1617 | 189 176 1618 | 136 158 1619 | 51 75 1620 | 163 152 1621 | 154 135 1622 | 135 146 1623 | 138 150 1624 | 130 159 1625 | 41 239 1626 | 177 134 1627 | 141 131 1628 | 165 136 1629 | 141 160 1630 | 177 139 1631 | 145 151 1632 | 130 187 1633 | 161 190 1634 | 174 175 1635 | 190 155 1636 | 164 174 1637 | 165 182 1638 | 138 147 1639 | 153 170 1640 | 154 156 1641 | 176 150 1642 | 138 169 1643 | 232 148 1644 | 129 165 1645 | 140 131 1646 | 158 144 1647 | 231 147 1648 | 129 190 1649 | 232 147 1650 | 57 58 1651 | 151 143 1652 | 153 145 1653 | 189 152 1654 | 153 169 1655 | 157 129 1656 | 174 171 1657 | 161 181 1658 | 190 147 1659 | 186 146 1660 | 232 151 1661 | 161 169 1662 | 50 50 1663 | 186 154 1664 | 152 178 1665 | 160 130 1666 | 175 186 1667 | 144 156 1668 | 188 189 1669 | 156 171 1670 | 133 190 1671 | 231 163 1672 | 157 239 1673 | 175 161 1674 | 143 139 1675 | 174 139 1676 | 57 57 1677 | 175 135 1678 | 137 136 1679 | 187 154 1680 | 137 155 1681 | 164 188 1682 | 131 161 1683 | 145 136 1684 | 181 155 1685 | 166 136 1686 | 134 187 1687 | 161 172 1688 | 136 186 1689 | 135 130 1690 | 154 180 1691 | 133 184 1692 | 135 137 1693 | 151 183 1694 | 156 160 1695 | 151 155 1696 | 161 166 1697 | 141 167 1698 | 232 150 1699 | 152 191 1700 | 185 176 1701 | 177 151 1702 | 170 145 1703 | 180 151 1704 | 52 58 1705 | 56 55 1706 | 162 164 1707 | 182 178 1708 | 176 152 1709 | 49 51 1710 | 140 134 1711 | 174 136 1712 | 153 187 1713 | 130 184 1714 | 129 188 1715 | 162 158 1716 | 55 53 1717 | 232 154 1718 | 152 160 1719 | 144 171 1720 | 131 184 1721 | 232 156 1722 | 188 142 1723 | 139 165 1724 | 191 181 1725 | 188 144 1726 | 147 165 1727 | 178 173 1728 | 159 177 1729 | 178 185 1730 | 175 145 1731 | 137 142 1732 | 137 145 1733 | 172 178 1734 | 141 177 1735 | 190 157 1736 | 161 145 1737 | 188 165 1738 | 139 169 1739 | 151 162 1740 | 139 239 1741 | 136 151 1742 | 164 185 1743 | 138 191 1744 | 177 189 1745 | 136 128 1746 | 188 184 1747 | 162 176 1748 | 128 141 1749 | 186 159 1750 | 151 173 1751 | 143 160 1752 | 169 185 1753 | 143 184 1754 | 230 164 1755 | 137 191 1756 | 133 146 1757 | 131 166 1758 | 143 143 1759 | 172 167 1760 | 129 174 1761 | 147 157 1762 | 48 58 1763 | 135 173 1764 | 163 181 1765 | 155 135 1766 | 182 140 1767 | 153 140 1768 | 157 154 1769 | 138 179 1770 | 139 133 1771 | 138 146 1772 | 73 68 1773 | 148 137 1774 | 166 143 1775 | 185 157 1776 | 165 165 1777 | 138 132 1778 | 148 174 1779 | 138 171 1780 | 148 129 1781 | 157 227 1782 | 171 158 1783 | 143 146 1784 | 155 173 1785 | 148 128 1786 | 142 166 1787 | 150 156 1788 | 181 145 1789 | 133 177 1790 | 190 134 1791 | 162 139 1792 | 149 162 1793 | 130 170 1794 | 183 185 1795 | 159 148 1796 | 184 162 1797 | 176 183 1798 | 175 158 1799 | 147 136 1800 | 140 174 1801 | 155 191 1802 | 140 128 1803 | 41 227 1804 | 180 181 1805 | 161 165 1806 | 138 154 1807 | 135 157 1808 | 169 177 1809 | 49 50 1810 | 56 58 1811 | 137 163 1812 | 153 176 1813 | 54 226 1814 | 168 141 1815 | 183 131 1816 | 152 166 1817 | 149 135 1818 | 156 134 1819 | 50 49 1820 | 151 166 1821 | 159 180 1822 | 165 148 1823 | 178 169 1824 | 134 138 1825 | 148 178 1826 | 186 147 1827 | 147 173 1828 | 135 135 1829 | 181 158 1830 | 180 139 1831 | 188 164 1832 | 130 178 1833 | 153 171 1834 | 186 153 1835 | 139 150 1836 | 139 227 1837 | 173 150 1838 | 188 170 1839 | 172 163 1840 | 176 139 1841 | 51 227 1842 | 141 143 1843 | 141 163 1844 | 187 183 1845 | 233 190 1846 | 176 168 1847 | 128 148 1848 | 168 170 1849 | 133 174 1850 | 229 171 1851 | 132 137 1852 | 161 158 1853 | 188 153 1854 | 142 143 1855 | 137 173 1856 | 154 153 1857 | 144 147 1858 | 138 185 1859 | 155 176 1860 | 137 152 1861 | 152 187 1862 | 158 172 1863 | 147 128 1864 | 129 170 1865 | 145 184 1866 | 190 158 1867 | 179 165 1868 | 188 157 1869 | 182 137 1870 | 128 150 1871 | 184 161 1872 | 163 159 1873 | 58 53 1874 | 51 55 1875 | 171 150 1876 | 50 55 1877 | 153 149 1878 | 188 180 1879 | 157 145 1880 | 175 140 1881 | 185 160 1882 | 186 129 1883 | 129 162 1884 | 181 170 1885 | 177 135 1886 | 191 188 1887 | 128 190 1888 | 148 189 1889 | 151 167 1890 | 149 170 1891 | 232 158 1892 | 158 141 1893 | 146 184 1894 | 186 172 1895 | 189 168 1896 | 140 156 1897 | 165 160 1898 | 140 175 1899 | 50 46 1900 | 130 173 1901 | 184 159 1902 | 151 161 1903 | 133 142 1904 | 149 145 1905 | 49 52 1906 | 177 137 1907 | 176 188 1908 | 75 66 1909 | 50 227 1910 | 142 183 1911 | 133 161 1912 | 178 156 1913 | 231 185 1914 | 185 129 1915 | 190 153 1916 | 175 171 1917 | 168 154 1918 | 152 133 1919 | 175 154 1920 | 178 140 1921 | 151 175 1922 | 167 147 1923 | 144 144 1924 | 182 159 1925 | 147 133 1926 | 139 190 1927 | 186 160 1928 | 187 156 1929 | 131 171 1930 | 154 177 1931 | 129 183 1932 | 168 152 1933 | 128 179 1934 | 149 166 1935 | 134 143 1936 | 139 160 1937 | 185 152 1938 | 137 130 1939 | 150 189 1940 | 176 138 1941 | 149 172 1942 | 181 143 1943 | 158 175 1944 | 141 175 1945 | 186 156 1946 | 151 187 1947 | 162 150 1948 | 180 160 1949 | 153 136 1950 | 172 168 1951 | 180 178 1952 | 181 133 1953 | 165 162 1954 | 139 173 1955 | 170 132 1956 | 58 52 1957 | 51 51 1958 | 51 50 1959 | 49 53 1960 | 54 58 1961 | 51 49 1962 | 185 143 1963 | 56 54 1964 | 139 168 1965 | 174 163 1966 | 139 164 1967 | 146 149 1968 | 55 52 1969 | 48 56 1970 | 188 151 1971 | 138 178 1972 | 232 164 1973 | 163 185 1974 | 133 189 1975 | 167 172 1976 | 152 140 1977 | 130 189 1978 | 156 161 1979 | 131 155 1980 | 170 168 1981 | 190 178 1982 | 144 185 1983 | 161 183 1984 | 191 142 1985 | 183 140 1986 | 144 173 1987 | 188 131 1988 | 191 134 1989 | 174 138 1990 | 186 131 1991 | 77 65 1992 | 50 54 1993 | 139 146 1994 | 137 172 1995 | 145 167 1996 | 147 168 1997 | 57 55 1998 | 180 166 1999 | 187 131 2000 | 142 132 2001 | 140 185 2002 | 190 166 2003 | 51 46 2004 | 52 46 2005 | 40 49 2006 | 40 50 2007 | 50 41 2008 | 145 169 2009 | 49 227 2010 | 178 167 2011 | 148 176 2012 | 148 164 2013 | 141 151 2014 | 156 129 2015 | 136 138 2016 | 174 143 2017 | 186 151 2018 | 185 188 2019 | 134 140 2020 | 190 145 2021 | 188 148 2022 | 153 134 2023 | 232 178 2024 | 130 154 2025 | 150 183 2026 | 171 140 2027 | 137 140 2028 | 139 188 2029 | 150 178 2030 | 160 141 2031 | 189 151 2032 | 140 164 2033 | 175 155 2034 | 188 141 2035 | 161 151 2036 | 139 151 2037 | 137 186 2038 | 151 135 2039 | 153 180 2040 | 136 185 2041 | 190 159 2042 | 175 184 2043 | 153 239 2044 | 184 160 2045 | 191 148 2046 | 180 161 2047 | 232 160 2048 | 134 137 2049 | 229 169 2050 | 178 146 2051 | 152 130 2052 | 230 169 2053 | 50 56 2054 | 48 57 2055 | 49 54 2056 | 51 53 2057 | 146 148 2058 | 229 154 2059 | 154 147 2060 | 149 178 2061 | 165 183 2062 | 130 166 2063 | 139 134 2064 | 51 52 2065 | 191 169 2066 | 142 170 2067 | 179 170 2068 | 167 159 2069 | 128 184 2070 | 189 146 2071 | 185 140 2072 | 56 53 2073 | 157 142 2074 | 48 49 2075 | 48 239 2076 | 146 136 2077 | 160 140 2078 | 119 119 2079 | 167 136 2080 | 159 131 2081 | 156 184 2082 | 139 148 2083 | 153 188 2084 | 174 173 2085 | 144 186 2086 | 145 128 2087 | 187 179 2088 | 154 167 2089 | 161 149 2090 | 183 171 2091 | 134 168 2092 | 131 128 2093 | 159 139 2094 | 156 151 2095 | 143 156 2096 | 176 154 2097 | 146 145 2098 | 180 169 2099 | 67 79 2100 | 79 66 2101 | 66 69 2102 | 48 46 2103 | 187 188 2104 | 161 189 2105 | 176 190 2106 | 176 142 2107 | 161 171 2108 | 180 171 2109 | 156 166 2110 | 154 227 2111 | 75 72 2112 | 138 157 2113 | 49 46 2114 | 49 41 2115 | 56 48 2116 | 66 41 2117 | 48 94 2118 | 169 176 2119 | 143 155 2120 | 185 146 2121 | 157 185 2122 | 152 153 2123 | 144 159 2124 | 175 151 2125 | 177 141 2126 | 48 54 2127 | 140 227 2128 | 232 170 2129 | 182 181 2130 | 183 167 2131 | 149 134 2132 | 155 146 2133 | 132 164 2134 | 144 181 2135 | 130 128 2136 | 138 163 2137 | 144 138 2138 | 140 182 2139 | 164 149 2140 | 156 181 2141 | 188 166 2142 | 229 170 2143 | 170 146 2144 | 171 165 2145 | 173 130 2146 | 190 170 2147 | 167 128 2148 | 146 154 2149 | 232 157 2150 | 147 135 2151 | 132 163 2152 | 164 133 2153 | 130 160 2154 | 153 227 2155 | 130 226 2156 | 160 162 2157 | 180 173 2158 | 139 153 2159 | 157 134 2160 | 133 140 2161 | 139 156 2162 | 137 179 2163 | 155 166 2164 | 161 161 2165 | 157 182 2166 | 48 227 2167 | 48 55 2168 | 57 56 2169 | 51 58 2170 | 57 52 2171 | 53 48 2172 | 55 227 2173 | 188 175 2174 | 175 166 2175 | 53 227 2176 | 160 151 2177 | 54 227 2178 | 140 155 2179 | 185 161 2180 | 137 171 2181 | 137 138 2182 | 149 184 2183 | 128 151 2184 | 175 132 2185 | 180 180 2186 | 187 175 2187 | 52 227 2188 | 143 137 2189 | 154 138 2190 | 132 134 2191 | 177 145 2192 | 152 188 2193 | 181 164 2194 | 141 159 2195 | 138 181 2196 | 180 174 2197 | 186 132 2198 | 190 138 2199 | 155 185 2200 | 133 191 2201 | 177 164 2202 | 155 182 2203 | 165 143 2204 | 184 176 2205 | 233 158 2206 | 173 153 2207 | 69 88 2208 | 88 73 2209 | 73 84 2210 | 176 167 2211 | 175 174 2212 | 177 176 2213 | 80 108 2214 | 108 97 2215 | 97 110 2216 | 110 99 2217 | 99 107 2218 | 46 55 2219 | 55 50 2220 | 131 172 2221 | 54 54 2222 | 161 191 2223 | 186 136 2224 | 190 146 2225 | 167 191 2226 | 133 144 2227 | 178 159 2228 | 146 188 2229 | 148 169 2230 | 54 57 2231 | 146 164 2232 | 182 130 2233 | 155 143 2234 | 137 182 2235 | 181 142 2236 | 185 162 2237 | 51 48 2238 | 50 53 2239 | 162 156 2240 | 180 188 2241 | 134 165 2242 | 156 163 2243 | 154 129 2244 | 177 129 2245 | 151 178 2246 | 133 185 2247 | 131 134 2248 | 239 189 2249 | 189 158 2250 | 72 57 2251 | 131 169 2252 | 189 154 2253 | 161 49 2254 | 40 51 2255 | 40 52 2256 | 46 53 2257 | 133 160 2258 | 134 160 2259 | 139 175 2260 | 163 168 2261 | 140 145 2262 | 188 136 2263 | 161 227 2264 | 170 137 2265 | 151 147 2266 | 156 226 2267 | 177 159 2268 | 144 137 2269 | 140 168 2270 | 145 181 2271 | 147 188 2272 | 179 158 2273 | 144 177 2274 | 173 170 2275 | 98 101 2276 | 145 147 2277 | 158 131 2278 | 156 190 2279 | 163 154 2280 | 179 153 2281 | 132 150 2282 | 162 136 2283 | 162 159 2284 | 168 135 2285 | 174 156 2286 | 155 179 2287 | 48 52 2288 | 168 159 2289 | 140 171 2290 | 147 145 2291 | 129 163 2292 | 177 165 2293 | 148 144 2294 | 128 189 2295 | 148 145 2296 | 139 158 2297 | 162 175 2298 | 132 190 2299 | 170 154 2300 | 146 130 2301 | 165 157 2302 | 191 132 2303 | 140 161 2304 | 182 161 2305 | 153 131 2306 | 52 57 2307 | 52 48 2308 | 56 239 2309 | 49 239 2310 | 57 226 2311 | 57 239 2312 | 141 147 2313 | 132 138 2314 | 169 179 2315 | 51 57 2316 | 50 52 2317 | 52 226 2318 | 133 129 2319 | 145 163 2320 | 187 158 2321 | 48 51 2322 | 53 57 2323 | 57 227 2324 | 180 146 2325 | 188 137 2326 | 141 184 2327 | 159 147 2328 | 48 50 2329 | 159 175 2330 | 191 167 2331 | 136 184 2332 | 138 162 2333 | 150 143 2334 | 151 149 2335 | 72 80 2336 | 54 50 2337 | 169 180 2338 | 130 186 2339 | 181 150 2340 | 146 172 2341 | 184 152 2342 | 49 226 2343 | 233 185 2344 | 187 146 2345 | 187 129 2346 | 131 175 2347 | 145 182 2348 | 131 154 2349 | 160 150 2350 | 158 146 2351 | 174 157 2352 | 162 140 2353 | 177 136 2354 | 147 131 2355 | 188 132 2356 | 191 140 2357 | 104 116 2358 | 116 116 2359 | 119 46 2360 | 116 47 2361 | 155 133 2362 | 67 58 2363 | 58 62 2364 | 62 226 2365 | 160 143 2366 | 168 177 2367 | 146 165 2368 | 140 153 2369 | 146 157 2370 | 137 170 2371 | 162 160 2372 | 188 167 2373 | 162 142 2374 | 183 139 2375 | 178 174 2376 | 184 167 2377 | 134 148 2378 | 139 142 2379 | 232 152 2380 | 152 145 2381 | 143 135 2382 | 191 141 2383 | 185 147 2384 | 141 166 2385 | 154 134 2386 | 180 138 2387 | 182 166 2388 | 163 184 2389 | 150 167 2390 | 151 185 2391 | 133 148 2392 | 176 174 2393 | 180 165 2394 | 188 176 2395 | 160 139 2396 | 156 156 2397 | 146 170 2398 | 142 185 2399 | 163 149 2400 | 147 186 2401 | 161 134 2402 | 177 171 2403 | 189 173 2404 | 183 152 2405 | 87 77 2406 | 65 80 2407 | 54 75 2408 | 48 75 2409 | 181 140 2410 | 129 139 2411 | 54 55 2412 | 171 169 2413 | 173 146 2414 | 146 146 2415 | 180 135 2416 | 149 190 2417 | 155 136 2418 | 67 80 2419 | 80 85 2420 | 180 170 2421 | 184 151 2422 | 191 143 2423 | 130 148 2424 | 131 164 2425 | 140 159 2426 | 138 151 2427 | 172 186 2428 | 190 169 2429 | 57 50 2430 | 158 174 2431 | 128 134 2432 | 190 137 2433 | 147 146 2434 | 171 173 2435 | 186 182 2436 | 130 162 2437 | 135 132 2438 | 190 189 2439 | 158 166 2440 | 167 131 2441 | 173 135 2442 | 148 133 2443 | 73 78 2444 | 232 149 2445 | 169 187 2446 | 158 149 2447 | 170 157 2448 | 137 181 2449 | 138 152 2450 | 57 49 2451 | 164 165 2452 | 146 175 2453 | 163 130 2454 | 146 189 2455 | 163 137 2456 | 149 158 2457 | 136 183 2458 | 130 141 2459 | 191 136 2460 | 156 130 2461 | 52 55 2462 | 66 78 2463 | 78 50 2464 | 55 70 2465 | 151 146 2466 | 130 164 2467 | 135 161 2468 | 51 54 2469 | 184 177 2470 | 131 131 2471 | 181 134 2472 | 184 185 2473 | 179 155 2474 | 147 174 2475 | 161 131 2476 | 190 129 2477 | 170 183 2478 | 171 133 2479 | 130 188 2480 | 163 139 2481 | 160 181 2482 | 156 158 2483 | 186 181 2484 | 143 168 2485 | 180 150 2486 | 46 49 2487 | 138 145 2488 | 176 166 2489 | 181 162 2490 | 182 139 2491 | 79 90 2492 | 90 77 2493 | 54 48 2494 | 52 50 2495 | 53 46 2496 | 51 41 2497 | 56 51 2498 | 46 52 2499 | 52 75 2500 | 46 54 2501 | 55 46 2502 | 159 155 2503 | 83 69 2504 | 69 84 2505 | 84 73 2506 | 129 226 2507 | 94 49 2508 | 169 132 2509 | 166 132 2510 | 133 138 2511 | 151 164 2512 | 140 160 2513 | 147 160 2514 | 147 172 2515 | 187 169 2516 | 159 162 2517 | 169 134 2518 | 188 138 2519 | 155 188 2520 | 134 175 2521 | 144 180 2522 | 164 144 2523 | 230 167 2524 | 153 155 2525 | 167 189 2526 | 140 132 2527 | 177 175 2528 | 140 142 2529 | 190 181 2530 | 129 168 2531 | 169 183 2532 | 55 57 2533 | 188 134 2534 | 135 163 2535 | 144 168 2536 | 230 134 2537 | 133 187 2538 | 136 131 2539 | 148 165 2540 | 156 149 2541 | 159 132 2542 | 131 158 2543 | 160 170 2544 | 190 161 2545 | 129 169 2546 | 155 138 2547 | 156 169 2548 | 46 48 2549 | 186 185 2550 | 170 164 2551 | 135 164 2552 | 151 184 2553 | 184 155 2554 | 191 160 2555 | 136 160 2556 | 129 138 2557 | 178 188 2558 | 134 142 2559 | 152 136 2560 | 154 128 2561 | 168 131 2562 | 130 132 2563 | 153 139 2564 | 191 159 2565 | 158 130 2566 | 151 186 2567 | 158 160 2568 | 181 180 2569 | 162 173 2570 | 143 172 2571 | 137 153 2572 | 189 188 2573 | 160 149 2574 | 141 130 2575 | 130 169 2576 | 180 155 2577 | 176 147 2578 | 48 226 2579 | 141 145 2580 | 142 160 2581 | 162 147 2582 | 190 167 2583 | 142 130 2584 | 231 176 2585 | 135 149 2586 | 144 129 2587 | 230 190 2588 | 146 139 2589 | 159 174 2590 | 183 170 2591 | 142 191 2592 | 148 139 2593 | 177 138 2594 | 191 129 2595 | 146 167 2596 | 132 136 2597 | 179 173 2598 | 182 129 2599 | 178 171 2600 | 136 140 2601 | 146 174 2602 | 150 187 2603 | 141 150 2604 | 166 146 2605 | 179 132 2606 | 182 155 2607 | 50 239 2608 | 190 168 2609 | 161 176 2610 | 155 149 2611 | 155 151 2612 | 165 137 2613 | 187 181 2614 | 157 73 2615 | 129 134 2616 | 65 65 2617 | 167 164 2618 | 166 135 2619 | 148 147 2620 | 134 190 2621 | 156 57 2622 | 149 188 2623 | 159 169 2624 | 189 179 2625 | 173 167 2626 | 67 73 2627 | 73 65 2628 | 157 170 2629 | 190 176 2630 | 150 152 2631 | 150 130 2632 | 136 159 2633 | 175 162 2634 | 140 170 2635 | 177 160 2636 | 149 131 2637 | 156 180 2638 | 157 176 2639 | 159 156 2640 | 139 135 2641 | 184 171 2642 | 172 190 2643 | 181 169 2644 | 179 188 2645 | 170 130 2646 | 150 169 2647 | 148 162 2648 | 153 172 2649 | 178 155 2650 | 164 143 2651 | 175 181 2652 | 169 154 2653 | 184 143 2654 | 158 142 2655 | 149 183 2656 | 150 134 2657 | 177 185 2658 | 146 150 2659 | 149 161 2660 | 135 182 2661 | 139 179 2662 | 136 136 2663 | 146 173 2664 | 157 163 2665 | 176 163 2666 | 141 144 2667 | 173 149 2668 | 158 154 2669 | 136 189 2670 | 170 179 2671 | 178 177 2672 | 130 149 2673 | 167 144 2674 | 134 136 2675 | 191 146 2676 | 170 184 2677 | 156 49 2678 | 156 152 2679 | 135 185 2680 | 156 55 2681 | 55 226 2682 | 183 154 2683 | 139 147 2684 | 139 152 2685 | 147 190 2686 | 176 133 2687 | 233 137 2688 | 137 180 2689 | 169 137 2690 | 185 141 2691 | 52 52 2692 | 158 165 2693 | 150 190 2694 | 133 145 2695 | 108 46 2696 | 104 114 2697 | 114 101 2698 | 101 101 2699 | 111 100 2700 | 100 121 2701 | 128 161 2702 | 190 152 2703 | 174 180 2704 | 144 187 2705 | 149 182 2706 | 56 57 2707 | 182 168 2708 | 175 163 2709 | 191 177 2710 | 85 239 2711 | 171 185 2712 | 176 156 2713 | 170 131 2714 | 137 150 2715 | 178 170 2716 | 163 146 2717 | 78 84 2718 | 134 157 2719 | 176 191 2720 | 163 164 2721 | 176 155 2722 | 152 177 2723 | 158 173 2724 | 150 188 2725 | 140 189 2726 | 135 191 2727 | 134 151 2728 | 176 164 2729 | 231 146 2730 | 146 131 2731 | 161 141 2732 | 164 182 2733 | 179 163 2734 | 182 180 2735 | 133 132 2736 | 165 184 2737 | 145 144 2738 | 159 227 2739 | 165 180 2740 | 154 182 2741 | 155 139 2742 | 134 149 2743 | 162 167 2744 | 184 175 2745 | 55 54 2746 | 176 157 2747 | 54 56 2748 | 130 131 2749 | 162 157 2750 | 189 178 2751 | 148 136 2752 | 112 111 2753 | 143 153 2754 | 131 142 2755 | 150 159 2756 | 191 162 2757 | 131 181 2758 | 135 175 2759 | 130 227 2760 | 156 227 2761 | 135 165 2762 | 184 145 2763 | 176 144 2764 | 177 144 2765 | 189 167 2766 | 141 158 2767 | 134 164 2768 | 128 191 2769 | 71 227 2770 | 178 152 2771 | 158 140 2772 | 145 148 2773 | 152 167 2774 | 171 129 2775 | 146 169 2776 | 170 165 2777 | 158 171 2778 | 135 128 2779 | 156 143 2780 | 148 132 2781 | 168 160 2782 | 158 169 2783 | 184 134 2784 | 152 134 2785 | 173 133 2786 | 173 157 2787 | 159 185 2788 | 162 169 2789 | 175 177 2790 | 157 189 2791 | 160 169 2792 | 137 162 2793 | 141 181 2794 | 191 170 2795 | 143 180 2796 | 147 137 2797 | 80 68 2798 | 68 67 2799 | 84 79 2800 | 131 160 2801 | 153 147 2802 | 78 77 2803 | 77 68 2804 | 150 144 2805 | 139 131 2806 | 145 161 2807 | 136 141 2808 | 159 191 2809 | 144 188 2810 | 157 137 2811 | 147 142 2812 | 180 157 2813 | 148 156 2814 | 188 187 2815 | 160 136 2816 | 143 148 2817 | 188 158 2818 | 155 159 2819 | 158 179 2820 | 128 168 2821 | 165 176 2822 | 133 149 2823 | 154 226 2824 | 183 190 2825 | 152 129 2826 | 137 129 2827 | 169 190 2828 | 155 132 2829 | 159 166 2830 | 139 144 2831 | 233 164 2832 | 176 137 2833 | 157 136 2834 | 174 170 2835 | 76 79 2836 | 173 188 2837 | 170 150 2838 | 168 142 2839 | 150 165 2840 | 165 177 2841 | 153 150 2842 | 162 179 2843 | 145 176 2844 | 138 129 2845 | 147 132 2846 | 166 165 2847 | 146 137 2848 | 144 164 2849 | 173 129 2850 | 145 172 2851 | 143 189 2852 | 133 188 2853 | 174 165 2854 | 134 128 2855 | 179 159 2856 | 145 149 2857 | 185 132 2858 | 179 179 2859 | 146 144 2860 | 133 154 2861 | 153 146 2862 | 148 184 2863 | 233 132 2864 | 132 153 2865 | 176 172 2866 | 150 147 2867 | 144 130 2868 | 46 50 2869 | 183 158 2870 | 78 65 2871 | 65 83 2872 | 83 65 2873 | 158 167 2874 | 130 133 2875 | 184 183 2876 | 185 148 2877 | 45 49 2878 | 148 148 2879 | 167 184 2880 | 79 71 2881 | 139 183 2882 | 136 174 2883 | 178 130 2884 | 155 128 2885 | 181 154 2886 | 182 184 2887 | 67 84 2888 | 53 51 2889 | 146 147 2890 | 145 156 2891 | 170 188 2892 | 138 188 2893 | 160 176 2894 | 151 137 2895 | 133 164 2896 | 152 169 2897 | 229 181 2898 | 182 175 2899 | 156 147 2900 | 179 137 2901 | 160 164 2902 | 54 49 2903 | 153 142 2904 | 156 50 2905 | 165 174 2906 | 139 132 2907 | 172 160 2908 | 131 149 2909 | 158 186 2910 | 160 147 2911 | 169 135 2912 | 161 133 2913 | 191 186 2914 | 178 165 2915 | 152 171 2916 | 157 180 2917 | 50 57 2918 | 140 191 2919 | 136 142 2920 | 141 187 2921 | 157 157 2922 | 128 175 2923 | 162 181 2924 | 128 155 2925 | 189 180 2926 | 179 189 2927 | 132 129 2928 | 170 159 2929 | 186 177 2930 | 167 133 2931 | 140 226 2932 | 152 128 2933 | 67 40 2934 | 131 185 2935 | 41 226 2936 | 79 239 2937 | 154 183 2938 | 182 190 2939 | 156 78 2940 | 80 79 2941 | 79 76 2942 | 165 168 2943 | 147 163 2944 | 146 168 2945 | 153 166 2946 | 148 171 2947 | 142 144 2948 | 189 185 2949 | 137 137 2950 | 142 142 2951 | 182 169 2952 | 158 155 2953 | 130 139 2954 | 176 135 2955 | 181 160 2956 | 132 167 2957 | 128 162 2958 | 188 190 2959 | 71 73 2960 | 73 67 2961 | 67 239 2962 | 147 184 2963 | 165 132 2964 | 131 153 2965 | 169 161 2966 | 186 189 2967 | 156 79 2968 | 150 131 2969 | 169 138 2970 | 168 156 2971 | 147 151 2972 | 150 164 2973 | 137 165 2974 | 69 49 2975 | 195 151 2976 | 190 156 2977 | 142 128 2978 | 171 137 2979 | 164 130 2980 | 157 141 2981 | 149 128 2982 | 130 140 2983 | 144 165 2984 | 154 188 2985 | 53 69 2986 | 48 53 2987 | 183 141 2988 | 182 147 2989 | 182 149 2990 | 156 146 2991 | 97 114 2992 | 180 184 2993 | 150 137 2994 | 153 148 2995 | 147 183 2996 | 162 129 2997 | 163 144 2998 | 231 128 2999 | 154 145 3000 | 230 170 3001 | 156 187 3002 | 175 133 3003 | 167 140 3004 | 170 161 3005 | 142 155 3006 | 191 175 3007 | 190 177 3008 | 146 128 3009 | 145 159 3010 | 55 74 3011 | 74 51 3012 | 51 88 3013 | 88 49 3014 | 174 133 3015 | 149 141 3016 | 135 184 3017 | 151 195 3018 | 130 157 3019 | 56 226 3020 | 156 67 3021 | 168 188 3022 | 156 183 3023 | 173 139 3024 | 99 104 3025 | 153 161 3026 | 153 185 3027 | 190 165 3028 | 169 152 3029 | 157 40 3030 | 167 155 3031 | 149 144 3032 | 157 172 3033 | 146 166 3034 | 178 148 3035 | 84 78 3036 | 139 167 3037 | 185 174 3038 | 175 191 3039 | 139 162 3040 | 185 155 3041 | 57 46 3042 | 130 191 3043 | 180 189 3044 | 191 130 3045 | 166 168 3046 | 155 142 3047 | 183 133 3048 | 191 138 3049 | 101 114 3050 | 156 80 3051 | 187 137 3052 | 157 156 3053 | 163 141 3054 | 134 189 3055 | 138 166 3056 | 144 143 3057 | 159 167 3058 | 185 131 3059 | 128 174 3060 | 153 151 3061 | 159 160 3062 | 170 172 3063 | 174 160 3064 | 130 150 3065 | 52 74 3066 | 74 50 3067 | 50 69 3068 | 148 135 3069 | 150 171 3070 | 186 133 3071 | 168 147 3072 | 104 97 3073 | 114 103 3074 | 103 101 3075 | 101 227 3076 | 181 181 3077 | 233 145 3078 | 145 171 3079 | 73 76 3080 | 76 69 3081 | 75 73 3082 | 76 76 3083 | 69 82 3084 | 78 72 3085 | 72 53 3086 | 53 53 3087 | 53 56 3088 | 56 74 3089 | 191 184 3090 | 181 148 3091 | 164 173 3092 | 153 181 3093 | 54 52 3094 | 156 182 3095 | 163 183 3096 | 82 53 3097 | 130 171 3098 | 164 184 3099 | 84 82 3100 | 172 155 3101 | 56 49 3102 | 166 180 3103 | 157 173 3104 | 159 226 3105 | 159 143 3106 | 146 179 3107 | 188 173 3108 | 69 77 3109 | 77 57 3110 | 133 170 3111 | 233 179 3112 | 153 226 3113 | 109 101 3114 | 121 46 3115 | 111 109 3116 | 170 135 3117 | 183 181 3118 | 111 110 3119 | 168 187 3120 | 54 51 3121 | 54 53 3122 | 66 227 3123 | 129 129 3124 | 170 156 3125 | 229 172 3126 | 137 188 3127 | 186 152 3128 | 130 147 3129 | 184 191 3130 | 164 129 3131 | 130 165 3132 | 164 183 3133 | 99 101 3134 | 152 173 3135 | 158 187 3136 | 129 179 3137 | 184 149 3138 | 139 186 3139 | 170 144 3140 | 184 181 3141 | 162 148 3142 | 173 185 3143 | 143 188 3144 | 118 101 3145 | 146 134 3146 | 187 151 3147 | 154 163 3148 | 168 189 3149 | 130 142 3150 | 132 144 3151 | 169 153 3152 | 190 141 3153 | 101 99 3154 | 156 69 3155 | 151 150 3156 | 180 186 3157 | 136 179 3158 | 163 147 3159 | 97 108 3160 | 101 109 3161 | 58 57 3162 | 82 51 3163 | 183 128 3164 | 128 182 3165 | 168 163 3166 | 80 73 3167 | 144 155 3168 | 57 48 3169 | 170 147 3170 | 68 88 3171 | 88 51 3172 | 42 42 3173 | 162 227 3174 | 163 186 3175 | 166 147 3176 | 52 53 3177 | 130 180 3178 | 149 50 3179 | 42 227 3180 | 41 42 3181 | 46 46 3182 | 185 172 3183 | 173 132 3184 | 144 169 3185 | 165 130 3186 | 157 65 3187 | 148 172 3188 | 183 164 3189 | 190 163 3190 | 52 49 3191 | 68 239 3192 | 129 149 3193 | 50 51 3194 | 146 171 3195 | 179 150 3196 | 147 144 3197 | 132 149 3198 | 151 189 3199 | 163 153 3200 | 55 48 3201 | 175 138 3202 | 54 239 3203 | 65 239 3204 | 68 227 3205 | 167 169 3206 | 51 56 3207 | 149 148 3208 | 156 191 3209 | 157 150 3210 | 145 155 3211 | 55 55 3212 | 162 135 3213 | 56 52 3214 | 166 174 3215 | 162 146 3216 | 137 174 3217 | 79 40 3218 | 40 80 3219 | 67 41 3220 | 152 164 3221 | 160 133 3222 | 162 138 3223 | 141 134 3224 | 156 148 3225 | 179 190 3226 | 65 227 3227 | 131 176 3228 | 148 161 3229 | 133 128 3230 | 139 185 3231 | 160 190 3232 | 161 157 3233 | 51 239 3234 | 144 133 3235 | 150 154 3236 | 71 239 3237 | 139 139 3238 | 181 135 3239 | 174 141 3240 | 152 170 3241 | 93 227 3242 | 133 186 3243 | 158 176 3244 | 176 175 3245 | 146 190 3246 | 130 239 3247 | 153 156 3248 | 176 141 3249 | 175 147 3250 | 164 146 3251 | 190 179 3252 | 186 168 3253 | 178 131 3254 | 142 178 3255 | 129 51 3256 | 129 53 3257 | 129 55 3258 | 65 46 3259 | 46 73 3260 | 73 46 3261 | 130 138 3262 | 156 185 3263 | 83 73 3264 | 183 153 3265 | 129 50 3266 | 129 52 3267 | 181 138 3268 | 101 116 3269 | 171 147 3270 | 157 147 3271 | 148 152 3272 | 158 152 3273 | 133 158 3274 | 137 189 3275 | 116 101 3276 | 129 130 3277 | 57 53 3278 | 157 171 3279 | 155 154 3280 | 171 187 3281 | 138 136 3282 | 73 77 3283 | 55 239 3284 | 56 56 3285 | 53 54 3286 | 101 115 3287 | 141 156 3288 | 159 151 3289 | 158 159 3290 | 156 51 3291 | 226 132 3292 | 132 131 3293 | 160 189 3294 | 132 146 3295 | 185 158 3296 | 133 156 3297 | 56 46 3298 | 156 48 3299 | 139 180 3300 | 139 161 3301 | 140 172 3302 | 165 159 3303 | 142 149 3304 | 157 80 3305 | 175 136 3306 | 129 153 3307 | 129 57 3308 | 129 56 3309 | 74 227 3310 | 52 51 3311 | 134 139 3312 | 46 51 3313 | 187 168 3314 | 82 101 3315 | 97 116 3316 | 152 184 3317 | 115 101 3318 | 149 155 3319 | 163 177 3320 | 138 137 3321 | 178 166 3322 | 52 37 3323 | 48 37 3324 | 37 239 3325 | 80 101 3326 | 114 105 3327 | 105 109 3328 | 165 129 3329 | 140 184 3330 | 146 132 3331 | 164 155 3332 | 150 179 3333 | 34 239 3334 | 167 168 3335 | 165 149 3336 | 155 156 3337 | 140 149 3338 | 182 164 3339 | 144 174 3340 | 54 46 3341 | 93 239 3342 | 55 56 3343 | 148 160 3344 | 169 170 3345 | 156 173 3346 | 156 65 3347 | 142 186 3348 | 179 141 3349 | 174 150 3350 | 177 191 3351 | 101 98 3352 | 147 134 3353 | 129 227 3354 | 186 169 3355 | 162 130 3356 | 142 158 3357 | 136 181 3358 | 159 181 3359 | 130 190 3360 | 136 148 3361 | 183 162 3362 | 162 190 3363 | 174 134 3364 | 169 151 3365 | 49 71 3366 | 101 110 3367 | 110 108 3368 | 108 121 3369 | 46 40 3370 | 161 152 3371 | 67 227 3372 | 185 190 3373 | 65 91 3374 | 152 144 3375 | 149 137 3376 | 160 186 3377 | 151 156 3378 | 161 144 3379 | 180 164 3380 | 173 189 3381 | 56 50 3382 | 140 53 3383 | 140 50 3384 | 73 99 3385 | 97 121 3386 | 87 97 3387 | 174 148 3388 | 51 71 3389 | 143 174 3390 | 130 134 3391 | 165 181 3392 | 163 145 3393 | 140 65 3394 | 166 49 3395 | 175 144 3396 | 49 75 3397 | 73 239 3398 | 144 128 3399 | 174 188 3400 | 79 75 3401 | 119 97 3402 | 131 180 3403 | 146 155 3404 | 93 226 3405 | 173 155 3406 | 165 145 3407 | 149 130 3408 | 56 227 3409 | 162 162 3410 | 53 71 3411 | 121 239 3412 | 169 188 3413 | 131 174 3414 | 150 139 3415 | 46 239 3416 | 129 142 3417 | 159 130 3418 | 156 54 3419 | 131 139 3420 | 148 226 3421 | 188 161 3422 | 161 239 3423 | 194 183 3424 | 145 239 3425 | 188 146 3426 | 144 239 3427 | 146 239 3428 | 188 163 3429 | 140 239 3430 | 163 239 3431 | 169 239 3432 | 141 191 3433 | 164 239 3434 | 188 174 3435 | 174 239 3436 | 147 169 3437 | 175 178 3438 | 158 133 3439 | 191 191 3440 | 180 142 3441 | 137 239 3442 | 148 239 3443 | 140 190 3444 | 189 163 3445 | 131 150 3446 | 147 239 3447 | 148 134 3448 | 181 156 3449 | 151 148 3450 | 144 148 3451 | 226 145 3452 | 155 239 3453 | 152 239 3454 | 183 239 3455 | 175 167 3456 | 156 189 3457 | 148 188 3458 | 146 176 3459 | 130 153 3460 | 151 138 3461 | 141 133 3462 | 178 147 3463 | 132 130 3464 | 159 171 3465 | 144 190 3466 | 133 163 3467 | 155 226 3468 | 145 160 3469 | 178 168 3470 | 150 148 3471 | 188 178 3472 | 147 191 3473 | 128 186 3474 | 150 170 3475 | 187 160 3476 | 142 239 3477 | 136 239 3478 | 191 150 3479 | 189 133 3480 | 133 239 3481 | 141 186 3482 | 174 155 3483 | 186 135 3484 | 101 226 3485 | 163 148 3486 | 170 152 3487 | 149 164 3488 | 149 150 3489 | 152 185 3490 | 131 186 3491 | 146 156 3492 | 160 227 3493 | 185 173 3494 | 180 177 3495 | 175 153 3496 | 162 180 3497 | 177 155 3498 | 144 157 3499 | 139 163 3500 | 190 148 3501 | 150 181 3502 | 158 183 3503 | 186 176 3504 | 142 189 3505 | 154 142 3506 | 157 183 3507 | 188 156 3508 | 176 169 3509 | 172 137 3510 | 152 152 3511 | 174 183 3512 | 175 139 3513 | 147 130 3514 | 154 175 3515 | 190 171 3516 | 183 187 3517 | 129 172 3518 | 144 160 3519 | 149 174 3520 | 191 165 3521 | 154 133 3522 | 190 150 3523 | 160 137 3524 | 153 143 3525 | 148 227 3526 | 137 227 3527 | 150 239 3528 | 149 239 3529 | 151 239 3530 | 151 130 3531 | 154 141 3532 | 130 146 3533 | 179 133 3534 | 145 187 3535 | 68 78 3536 | 163 194 3537 | 189 186 3538 | 131 152 3539 | 177 169 3540 | 154 239 3541 | 155 144 3542 | 140 169 3543 | 147 167 3544 | 173 156 3545 | 143 191 3546 | 135 166 3547 | 139 136 3548 | 144 162 3549 | 146 181 3550 | 148 167 3551 | 182 148 3552 | 156 239 3553 | 98 121 3554 | 121 101 3555 | 189 130 3556 | 131 157 3557 | 187 155 3558 | 141 239 3559 | 188 179 3560 | 188 162 3561 | 149 173 3562 | 166 239 3563 | 170 163 3564 | 162 239 3565 | 153 177 3566 | 110 100 3567 | 167 239 3568 | 158 162 3569 | 148 131 3570 | 185 153 3571 | 160 239 3572 | 112 101 3573 | 100 101 3574 | 165 178 3575 | 114 239 3576 | 179 166 3577 | 135 188 3578 | 137 131 3579 | 135 155 3580 | 179 140 3581 | 140 141 3582 | 188 182 3583 | 179 239 3584 | 111 114 3585 | 110 101 3586 | 80 82 3587 | 82 73 3588 | 168 182 3589 | 166 148 3590 | 105 99 3591 | 133 166 3592 | 139 189 3593 | 143 169 3594 | 147 189 3595 | 140 154 3596 | 166 189 3597 | 159 182 3598 | 176 149 3599 | 187 184 3600 | 114 121 3601 | 109 98 3602 | 108 111 3603 | 162 128 3604 | 191 173 3605 | 166 169 3606 | 138 156 3607 | 105 111 3608 | 138 183 3609 | 140 157 3610 | 166 227 3611 | 161 130 3612 | 140 180 3613 | 140 178 3614 | 154 152 3615 | 170 141 3616 | 156 132 3617 | 147 159 3618 | 153 153 3619 | 143 239 3620 | 146 135 3621 | 188 183 3622 | 171 163 3623 | 131 188 3624 | 136 227 3625 | 131 132 3626 | 183 142 3627 | 140 144 3628 | 169 175 3629 | 176 176 3630 | 152 226 3631 | 137 146 3632 | 83 112 3633 | 145 131 3634 | 155 140 3635 | 177 162 3636 | 188 172 3637 | 176 140 3638 | 146 191 3639 | 144 149 3640 | 165 142 3641 | 232 169 3642 | 138 173 3643 | 194 176 3644 | 170 138 3645 | 163 182 3646 | 164 142 3647 | 229 182 3648 | 182 153 3649 | 179 139 3650 | 190 135 3651 | 172 131 3652 | 143 128 3653 | 129 152 3654 | 169 173 3655 | 52 54 3656 | 185 138 3657 | 141 182 3658 | 131 183 3659 | 183 132 3660 | 130 152 3661 | 114 115 3662 | 162 154 3663 | 187 162 3664 | 172 136 3665 | 181 166 3666 | 136 129 3667 | 176 153 3668 | 154 136 3669 | 170 191 3670 | 148 173 3671 | 177 154 3672 | 78 111 3673 | 181 144 3674 | 132 175 3675 | 133 157 3676 | 162 177 3677 | 101 239 3678 | 178 143 3679 | 176 239 3680 | 180 183 3681 | 145 178 3682 | 191 149 3683 | 162 137 3684 | 158 239 3685 | 157 138 3686 | 181 152 3687 | 188 133 3688 | 131 239 3689 | 150 174 3690 | 170 178 3691 | 142 179 3692 | 136 133 3693 | 132 147 3694 | 179 181 3695 | 185 171 3696 | 53 55 3697 | 116 226 3698 | 65 226 3699 | 148 52 3700 | 184 153 3701 | 173 239 3702 | 178 141 3703 | 137 161 3704 | 189 148 3705 | 151 163 3706 | 189 129 3707 | 181 179 3708 | 186 165 3709 | 189 137 3710 | 167 138 3711 | 189 136 3712 | 189 131 3713 | 166 158 3714 | 231 181 3715 | 105 110 3716 | 77 121 3717 | 115 115 3718 | 185 145 3719 | 165 194 3720 | 155 165 3721 | 189 139 3722 | 134 239 3723 | 121 98 3724 | 98 108 3725 | 108 101 3726 | 115 105 3727 | 110 103 3728 | 147 226 3729 | 172 134 3730 | 189 138 3731 | 138 239 3732 | 189 132 3733 | 132 239 3734 | 189 135 3735 | 189 140 3736 | 122 116 3737 | 140 51 3738 | 103 239 3739 | 180 239 3740 | 116 111 3741 | 140 49 3742 | 98 111 3743 | 160 142 3744 | 129 187 3745 | 154 149 3746 | 177 178 3747 | 132 160 3748 | 135 139 3749 | 190 143 3750 | 178 239 3751 | 183 134 3752 | 148 146 3753 | 149 129 3754 | 134 167 3755 | 97 107 3756 | 177 140 3757 | 111 117 3758 | 141 226 3759 | 149 227 3760 | 135 239 3761 | 189 150 3762 | 107 112 3763 | 164 175 3764 | 142 180 3765 | 134 186 3766 | 182 132 3767 | 185 154 3768 | 146 186 3769 | 156 177 3770 | 172 239 3771 | 179 227 3772 | 188 168 3773 | 168 239 3774 | 188 181 3775 | 181 239 3776 | 170 176 3777 | 145 177 3778 | 182 239 3779 | 180 172 3780 | 132 161 3781 | 144 170 3782 | 129 164 3783 | 145 142 3784 | 110 111 3785 | 52 239 3786 | 135 189 3787 | 78 71 3788 | 110 227 3789 | 146 163 3790 | 66 239 3791 | 52 56 3792 | 99 97 3793 | 117 115 3794 | 114 111 3795 | 115 116 3796 | 97 239 3797 | 135 136 3798 | 55 51 3799 | 183 186 3800 | 156 142 3801 | 155 157 3802 | 152 137 3803 | 128 158 3804 | 175 128 3805 | 176 173 3806 | 158 137 3807 | 135 181 3808 | 151 171 3809 | 145 164 3810 | 163 227 3811 | 143 132 3812 | 147 227 3813 | 109 105 3814 | 97 118 3815 | 118 105 3816 | 101 97 3817 | 121 110 3818 | 147 162 3819 | 65 108 3820 | 111 101 3821 | 136 168 3822 | 151 172 3823 | 149 168 3824 | 141 139 3825 | 97 109 3826 | 101 100 3827 | 117 105 3828 | 105 115 3829 | 171 166 3830 | 175 239 3831 | 170 134 3832 | 171 239 3833 | 134 182 3834 | 166 133 3835 | 232 159 3836 | 181 131 3837 | 188 135 3838 | 173 181 3839 | 53 239 3840 | 185 169 3841 | 128 169 3842 | 150 226 3843 | 128 183 3844 | 134 135 3845 | 185 130 3846 | 169 227 3847 | 151 227 3848 | 116 114 3849 | 145 165 3850 | 145 166 3851 | 171 227 3852 | 45 45 3853 | 168 133 3854 | 190 160 3855 | 130 130 3856 | 166 139 3857 | 152 227 3858 | 185 164 3859 | 171 191 3860 | 170 139 3861 | 146 133 3862 | 139 174 3863 | 139 176 3864 | 158 163 3865 | 148 140 3866 | 153 152 3867 | 140 167 3868 | 187 130 3869 | 151 157 3870 | 142 184 3871 | 182 142 3872 | 154 164 3873 | 146 178 3874 | 178 136 3875 | 168 169 3876 | 173 172 3877 | 165 239 3878 | 155 177 3879 | 133 151 3880 | 115 111 3881 | 108 105 3882 | 67 104 3883 | 149 149 3884 | 142 174 3885 | 105 97 3886 | 168 180 3887 | 142 172 3888 | 110 105 3889 | 153 128 3890 | 165 128 3891 | 172 147 3892 | 117 114 3893 | 150 155 3894 | 145 183 3895 | 182 174 3896 | 133 227 3897 | 144 161 3898 | 135 190 3899 | 173 147 3900 | 149 175 3901 | 189 164 3902 | 45 239 3903 | 50 226 3904 | 188 139 3905 | 152 163 3906 | 139 140 3907 | 145 227 3908 | 166 156 3909 | 129 155 3910 | 140 136 3911 | 151 177 3912 | 190 140 3913 | 133 169 3914 | 70 239 3915 | 151 176 3916 | 147 176 3917 | 65 77 3918 | 148 163 3919 | 165 170 3920 | 145 185 3921 | 150 128 3922 | 178 150 3923 | 146 142 3924 | 140 181 3925 | 186 157 3926 | 151 158 3927 | 169 128 3928 | 144 227 3929 | 146 227 3930 | 183 194 3931 | 145 146 3932 | 134 152 3933 | 161 178 3934 | 151 181 3935 | 231 141 3936 | 179 194 3937 | 191 166 3938 | 162 143 3939 | 133 147 3940 | 130 135 3941 | 170 136 3942 | 170 149 3943 | 169 194 3944 | 176 178 3945 | 143 177 3946 | 156 77 3947 | 166 190 3948 | 169 174 3949 | 176 146 3950 | 139 184 3951 | 164 227 3952 | 175 169 3953 | 144 226 3954 | 77 111 3955 | 149 132 3956 | 151 132 3957 | 161 160 3958 | 150 177 3959 | 138 187 3960 | 184 239 3961 | 164 176 3962 | 182 157 3963 | 191 179 3964 | 147 158 3965 | 111 116 3966 | 99 111 3967 | 103 97 3968 | 116 108 3969 | 139 154 3970 | 83 99 3971 | 65 103 3972 | 177 142 3973 | 139 226 3974 | 168 194 3975 | 114 117 3976 | 156 165 3977 | 173 159 3978 | 100 227 3979 | 105 107 3980 | 107 117 3981 | 83 101 3982 | 176 181 3983 | 168 132 3984 | 180 227 3985 | 160 173 3986 | 190 149 3987 | 145 129 3988 | 150 129 3989 | 159 153 3990 | 144 139 3991 | 115 98 3992 | 98 105 3993 | 115 112 3994 | 149 167 3995 | 115 99 3996 | 109 112 3997 | 115 227 3998 | 187 239 3999 | 148 143 4000 | 176 159 4001 | 147 140 4002 | 77 67 4003 | 154 185 4004 | 83 77 4005 | 136 190 4006 | 83 80 4007 | 67 97 4008 | 186 130 4009 | 82 84 4010 | 111 102 4011 | 109 97 4012 | 114 97 4013 | 129 184 4014 | 171 194 4015 | 178 194 4016 | 150 227 4017 | 157 179 4018 | 179 151 4019 | 151 179 4020 | 115 239 4021 | 167 194 4022 | 75 239 4023 | 169 144 4024 | 116 104 4025 | 104 117 4026 | 115 104 4027 | 110 116 4028 | 117 110 4029 | 179 131 4030 | 145 154 4031 | 173 128 4032 | 111 115 4033 | 115 97 4034 | 116 100 4035 | 190 175 4036 | 117 101 4037 | 154 140 4038 | 97 115 4039 | 115 100 4040 | 111 108 4041 | 108 103 4042 | 116 105 4043 | 135 156 4044 | 111 98 4045 | 110 239 4046 | 156 154 4047 | 134 130 4048 | 190 154 4049 | 156 73 4050 | 111 105 4051 | 112 116 4052 | 189 157 4053 | 156 131 4054 | 110 97 4055 | 108 116 4056 | 160 226 4057 | 129 131 4058 | 143 181 4059 | 66 117 4060 | 178 178 4061 | 134 169 4062 | 187 144 4063 | 111 239 4064 | 154 191 4065 | 147 149 4066 | 159 145 4067 | 181 157 4068 | 187 178 4069 | 100 117 4070 | 101 105 4071 | 117 239 4072 | 80 104 4073 | 104 111 4074 | 108 239 4075 | 117 108 4076 | 90 90 4077 | 180 226 4078 | 85 82 4079 | 102 102 4080 | 176 194 4081 | 53 49 4082 | 46 110 4083 | 76 73 4084 | 83 239 4085 | 84 104 4086 | 77 239 4087 | 161 194 4088 | 151 226 4089 | 179 226 4090 | 69 46 4091 | 100 100 4092 | 116 122 4093 | 155 141 4094 | 145 226 4095 | 142 147 4096 | 159 128 4097 | 179 160 4098 | 167 156 4099 | 101 111 4100 | 180 191 4101 | 181 130 4102 | 71 83 4103 | 97 100 4104 | 101 119 4105 | 119 101 4106 | 110 115 4107 | 156 83 4108 | 83 104 4109 | 117 116 4110 | 114 108 4111 | 116 239 4112 | 177 182 4113 | 115 102 4114 | 240 169 4115 | 135 226 4116 | 166 178 4117 | 141 190 4118 | 95 95 4119 | 129 186 4120 | 166 138 4121 | 74 101 4122 | 146 226 4123 | 175 160 4124 | 156 162 4125 | 115 117 4126 | 166 167 4127 | 147 177 4128 | 165 227 4129 | 171 186 4130 | 158 158 4131 | 99 105 4132 | 156 95 4133 | 161 146 4134 | 170 194 4135 | 166 137 4136 | 191 168 4137 | 170 128 4138 | 167 151 4139 | 157 140 4140 | 154 170 4141 | 104 101 4142 | 136 162 4143 | 105 122 4144 | 186 190 4145 | 138 184 4146 | 175 168 4147 | 138 153 4148 | 172 139 4149 | 141 141 4150 | 134 162 4151 | 141 168 4152 | 178 172 4153 | 148 166 4154 | 183 155 4155 | 151 141 4156 | 142 163 4157 | 184 158 4158 | 187 140 4159 | 183 151 4160 | 179 177 4161 | 68 79 4162 | 65 78 4163 | 170 155 4164 | 181 173 4165 | 191 164 4166 | 169 226 4167 | 170 166 4168 | 146 143 4169 | 165 155 4170 | 165 163 4171 | 148 151 4172 | 159 163 4173 | 84 65 4174 | 69 75 4175 | 159 154 4176 | 185 239 4177 | 164 147 4178 | 167 165 4179 | 84 69 4180 | 82 79 4181 | 79 84 4182 | 69 67 4183 | 67 72 4184 | 53 226 4185 | 66 85 4186 | 85 83 4187 | 69 76 4188 | 78 79 4189 | 153 158 4190 | 143 226 4191 | 183 182 4192 | 72 73 4193 | 191 154 4194 | 108 115 4195 | 156 66 4196 | 79 226 4197 | 172 183 4198 | 101 108 4199 | 111 118 4200 | 183 150 4201 | 183 135 4202 | 166 194 4203 | 131 227 4204 | 77 97 4205 | 155 164 4206 | 45 226 4207 | 183 226 4208 | 97 103 4209 | 111 99 4210 | 103 111 4211 | 128 181 4212 | 162 194 4213 | 83 84 4214 | 141 188 4215 | 79 83 4216 | 80 239 4217 | 66 77 4218 | 166 128 4219 | 69 83 4220 | 82 69 4221 | 173 226 4222 | 173 227 4223 | 53 52 4224 | 77 83 4225 | 186 150 4226 | 78 67 4227 | 226 148 4228 | 128 226 4229 | 156 138 4230 | 190 172 4231 | 135 176 4232 | 206 181 4233 | 161 167 4234 | 141 164 4235 | 165 186 4236 | 162 144 4237 | 147 148 4238 | 149 157 4239 | 187 171 4240 | 121 114 4241 | 159 146 4242 | 151 142 4243 | 185 156 4244 | 45 206 4245 | 181 226 4246 | 173 134 4247 | 126 226 4248 | 124 124 4249 | 45 46 4250 | 46 95 4251 | 126 126 4252 | 35 35 4253 | 126 45 4254 | 95 46 4255 | 46 45 4256 | 45 126 4257 | 124 95 4258 | 44 126 4259 | 126 46 4260 | 95 124 4261 | 92 95 4262 | 95 47 4263 | 44 45 4264 | 92 47 4265 | 96 45 4266 | 126 124 4267 | 45 34 4268 | 92 124 4269 | 124 126 4270 | 47 126 4271 | 34 45 4272 | 124 92 4273 | 51 94 4274 | 94 51 4275 | 124 45 4276 | 45 95 4277 | 95 45 4278 | 47 92 4279 | 46 226 4280 | 47 96 4281 | 45 39 4282 | 124 96 4283 | 45 62 4284 | 126 92 4285 | 47 124 4286 | 95 44 4287 | 92 44 4288 | 46 47 4289 | 47 47 4290 | 94 50 4291 | 63 226 4292 | 178 154 4293 | 48 39 4294 | 65 66 4295 | 65 39 4296 | 43 43 4297 | 34 34 4298 | 67 65 4299 | 69 239 4300 | 33 226 4301 | 47 95 4302 | 92 126 4303 | 68 39 4304 | 69 39 4305 | 39 239 4306 | 95 126 4307 | 124 60 4308 | 60 45 4309 | 124 44 4310 | 96 46 4311 | 96 92 4312 | 126 47 4313 | 66 68 4314 | 45 124 4315 | 39 39 4316 | 142 52 4317 | 126 35 4318 | 46 60 4319 | 79 227 4320 | 156 56 4321 | 185 226 4322 | 107 101 4323 | 76 97 4324 | 109 83 4325 | 83 116 4326 | 101 107 4327 | 65 69 4328 | 101 77 4329 | 76 65 4330 | 136 49 4331 | 136 50 4332 | 96 126 4333 | 39 40 4334 | 94 239 4335 | 39 69 4336 | 67 39 4337 | 62 124 4338 | 62 58 4339 | 39 45 4340 | 45 92 4341 | 124 65 4342 | 44 39 4343 | 124 47 4344 | 47 44 4345 | 44 43 4346 | 95 67 4347 | 43 45 4348 | 65 124 4349 | 124 66 4350 | 67 66 4351 | 92 92 4352 | 35 45 4353 | 60 46 4354 | 46 62 4355 | 124 34 4356 | 60 126 4357 | 42 124 4358 | 46 124 4359 | 35 124 4360 | 124 35 4361 | 178 181 4362 | 173 176 4363 | 140 52 4364 | 161 188 4365 | 159 190 4366 | 161 147 4367 | 140 54 4368 | 140 56 4369 | 206 178 4370 | 172 158 4371 | 111 112 4372 | 126 84 4373 | 46 96 4374 | 35 42 4375 | 42 46 4376 | 96 42 4377 | 42 35 4378 | 147 147 4379 | 130 176 4380 | 175 189 4381 | 97 117 4382 | 161 129 4383 | 118 97 4384 | 157 181 4385 | 105 114 4386 | 117 103 4387 | 100 111 4388 | 111 119 4389 | 174 167 4390 | 189 183 4391 | 159 134 4392 | 107 116 4393 | 116 117 4394 | 117 98 4395 | 98 227 4396 | 172 180 4397 | 152 150 4398 | 159 158 4399 | 166 183 4400 | 183 172 4401 | 151 152 4402 | 226 151 4403 | 155 137 4404 | 98 239 4405 | 99 117 4406 | 70 66 4407 | 66 73 4408 | 109 111 4409 | 97 101 4410 | 68 97 4411 | 115 226 4412 | 100 105 4413 | 101 45 4414 | 166 68 4415 | 77 101 4416 | 79 78 4417 | 68 65 4418 | 45 100 4419 | 45 99 4420 | 97 99 4421 | 55 49 4422 | 110 110 4423 | 105 108 4424 | 140 109 4425 | 104 227 4426 | 71 101 4427 | 156 68 4428 | 77 79 4429 | 78 73 4430 | 146 180 4431 | 168 145 4432 | 115 109 4433 | 178 145 4434 | 67 85 4435 | 80 97 4436 | 108 71 4437 | 105 45 4438 | 105 105 4439 | 108 45 4440 | 65 110 4441 | 100 97 4442 | 226 152 4443 | 175 182 4444 | 140 177 4445 | 173 154 4446 | 134 226 4447 | 184 168 4448 | 142 150 4449 | 108 108 4450 | 102 111 4451 | 131 177 4452 | 189 182 4453 | 69 226 4454 | 101 102 4455 | 148 45 4456 | 97 226 4457 | 114 116 4458 | 76 111 4459 | 68 69 4460 | 183 67 4461 | 177 186 4462 | 101 112 4463 | 68 101 4464 | 173 177 4465 | 112 112 4466 | 98 114 4467 | 112 108 4468 | 145 153 4469 | 156 72 4470 | 76 101 4471 | 72 101 4472 | 138 68 4473 | 80 69 4474 | 69 78 4475 | 73 73 4476 | 130 177 4477 | 191 190 4478 | 78 83 4479 | 129 185 4480 | 147 150 4481 | 85 75 4482 | 75 77 4483 | 53 45 4484 | 147 164 4485 | 47 239 4486 | 170 143 4487 | 137 226 4488 | 146 185 4489 | 138 174 4490 | 165 226 4491 | 181 167 4492 | 151 145 4493 | 189 184 4494 | 132 226 4495 | 172 194 4496 | 156 76 4497 | 45 51 4498 | 80 45 4499 | 178 189 4500 | 185 128 4501 | 146 160 4502 | 177 239 4503 | 81 68 4504 | 67 226 4505 | 148 57 4506 | 51 226 4507 | 111 226 4508 | 164 226 4509 | 169 149 4510 | 168 134 4511 | 75 226 4512 | 116 97 4513 | 135 167 4514 | 112 114 4515 | 101 68 4516 | 114 226 4517 | 112 104 4518 | 112 105 4519 | 206 177 4520 | 97 112 4521 | 105 226 4522 | 178 164 4523 | 164 194 4524 | 155 171 4525 | 155 181 4526 | 103 105 4527 | 227 150 4528 | 102 101 4529 | 163 190 4530 | 226 136 4531 | 161 137 4532 | 163 165 4533 | 108 117 4534 | 101 120 4535 | 101 117 4536 | 156 70 4537 | 114 109 4538 | 179 175 4539 | 175 152 4540 | 105 101 4541 | 154 139 4542 | 163 160 4543 | 105 100 4544 | 108 102 4545 | 112 97 4546 | 68 105 4547 | 180 194 4548 | 102 108 4549 | 187 174 4550 | 133 226 4551 | 151 144 4552 | 154 178 4553 | 175 179 4554 | 167 227 4555 | 77 105 4556 | 107 239 4557 | 160 165 4558 | 171 130 4559 | 115 83 4560 | 150 163 4561 | 143 129 4562 | 66 111 4563 | 72 69 4564 | 161 162 4565 | 142 188 4566 | 174 146 4567 | 65 82 4568 | 84 85 4569 | 65 76 4570 | 85 65 4571 | 84 83 4572 | 69 65 4573 | 65 68 4574 | 48 44 4575 | 84 84 4576 | 84 239 4577 | 44 48 4578 | 84 72 4579 | 82 83 4580 | 73 83 4581 | 65 84 4582 | 68 82 4583 | 82 65 4584 | 78 85 4585 | 80 83 4586 | 76 83 4587 | 80 84 4588 | 82 71 4589 | 104 105 4590 | 69 68 4591 | 89 83 4592 | 114 114 4593 | 68 85 4594 | 79 85 4595 | 166 170 4596 | 65 85 4597 | 172 226 4598 | 78 69 4599 | 65 70 4600 | 66 67 4601 | 67 68 4602 | 156 84 4603 | 67 67 4604 | 105 112 4605 | 152 84 4606 | 114 227 4607 | 69 70 4608 | 121 83 4609 | 65 73 4610 | 113 117 4611 | 79 77 4612 | 77 73 4613 | 114 110 4614 | 143 49 4615 | 110 109 4616 | 116 121 4617 | 104 226 4618 | 76 105 4619 | 185 135 4620 | 180 148 4621 | 87 65 4622 | 83 72 4623 | 86 97 4624 | 137 166 4625 | 110 226 4626 | 105 116 4627 | 130 136 4628 | 76 117 4629 | 117 99 4630 | 156 174 4631 | 78 239 4632 | 105 118 4633 | 73 82 4634 | 84 89 4635 | 89 65 4636 | 78 78 4637 | 65 87 4638 | 87 68 4639 | 72 82 4640 | 79 65 4641 | 76 70 4642 | 70 65 4643 | 73 70 4644 | 70 89 4645 | 89 76 4646 | 82 72 4647 | 72 65 4648 | 66 89 4649 | 76 84 4650 | 71 69 4651 | 66 76 4652 | 80 65 4653 | 82 78 4654 | 136 68 4655 | 82 111 4656 | 240 168 4657 | 170 239 4658 | 98 117 4659 | 110 98 4660 | 159 172 4661 | 98 98 4662 | 155 227 4663 | 97 98 4664 | 174 149 4665 | 140 158 4666 | 117 117 4667 | 98 97 4668 | 140 98 4669 | 84 97 4670 | 107 104 4671 | 79 80 4672 | 82 97 4673 | 111 97 4674 | 176 226 4675 | 76 226 4676 | 141 107 4677 | 76 239 4678 | 100 107 4679 | 71 226 4680 | 164 161 4681 | 104 109 4682 | 105 239 4683 | 149 187 4684 | 97 106 4685 | 108 98 4686 | 97 105 4687 | 148 107 4688 | 68 71 4689 | 156 82 4690 | 82 67 4691 | 67 83 4692 | 152 146 4693 | 148 51 4694 | 176 227 4695 | 181 163 4696 | 176 128 4697 | 134 185 4698 | 82 194 4699 | 148 49 4700 | 71 194 4701 | 183 82 4702 | 183 88 4703 | 88 226 4704 | 57 51 4705 | 156 71 4706 | 87 87 4707 | 63 227 4708 | 52 41 4709 | 68 41 4710 | 111 111 4711 | 111 107 4712 | 186 239 4713 | 45 50 4714 | 190 184 4715 | 79 68 4716 | 78 68 4717 | 72 79 4718 | 154 49 4719 | 173 141 4720 | 179 156 4721 | 148 50 4722 | 87 239 4723 | 142 99 4724 | 90 227 4725 | 152 71 4726 | 166 34 4727 | 158 168 4728 | 166 155 4729 | 56 37 4730 | 85 84 4731 | 71 85 4732 | 77 194 4733 | 47 98 4734 | 46 99 4735 | 111 103 4736 | 140 48 4737 | 116 112 4738 | 112 58 4739 | 58 47 4740 | 109 46 4741 | 46 104 4742 | 116 109 4743 | 80 226 4744 | 156 52 4745 | 97 46 4746 | 103 226 4747 | 66 226 4748 | 177 184 4749 | 166 131 4750 | 152 161 4751 | 117 109 4752 | 101 118 4753 | 103 46 4754 | 46 115 4755 | 99 110 4756 | 110 47 4757 | 47 115 4758 | 115 47 4759 | 103 95 4760 | 95 54 4761 | 53 99 4762 | 99 55 4763 | 56 98 4764 | 98 99 4765 | 99 48 4766 | 109 108 4767 | 189 171 4768 | 168 165 4769 | 157 186 4770 | 148 53 4771 | 73 226 4772 | 128 239 4773 | 105 102 4774 | 157 33 4775 | 141 227 4776 | 105 120 4777 | 157 164 4778 | 83 226 4779 | 153 33 4780 | 183 189 4781 | 47 119 4782 | 109 239 4783 | 166 80 4784 | 147 155 4785 | 91 49 4786 | 53 50 4787 | 158 145 4788 | 103 117 4789 | 107 114 4790 | 175 131 4791 | 67 108 4792 | 176 151 4793 | 120 226 4794 | 114 74 4795 | 99 116 4796 | 99 108 4797 | 106 101 4798 | 153 63 4799 | 67 43 4800 | 168 178 4801 | 140 57 4802 | 141 51 4803 | 88 239 4804 | 51 76 4805 | 51 66 4806 | 156 53 4807 | 148 56 4808 | 83 68 4809 | 160 157 4810 | 73 227 4811 | 66 83 4812 | 68 73 4813 | 141 50 4814 | 168 148 4815 | 137 156 4816 | 168 138 4817 | 73 66 4818 | 138 227 4819 | 175 172 4820 | 46 56 4821 | 121 111 4822 | 114 99 4823 | 119 105 4824 | 80 54 4825 | 69 61 4826 | 61 77 4827 | 67 50 4828 | 33 65 4829 | 143 159 4830 | 150 150 4831 | 175 226 4832 | 149 179 4833 | 182 145 4834 | 190 130 4835 | 167 178 4836 | 65 114 4837 | 65 115 4838 | 136 226 4839 | 130 155 4840 | 164 191 4841 | 163 172 4842 | 152 149 4843 | 63 63 4844 | 63 239 4845 | 114 118 4846 | 137 144 4847 | 140 83 4848 | 144 182 4849 | 108 100 4850 | 160 128 4851 | 105 98 4852 | 152 65 4853 | 100 239 4854 | 104 108 4855 | 153 135 4856 | 233 143 4857 | 155 130 4858 | 137 159 4859 | 158 135 4860 | 166 45 4861 | 148 130 4862 | 49 103 4863 | 46 57 4864 | 67 69 4865 | 73 69 4866 | 48 41 4867 | 86 99 4868 | 99 239 4869 | 65 67 4870 | 77 69 4871 | 83 85 4872 | 156 87 4873 | 183 65 4874 | 65 194 4875 | 83 67 4876 | 71 76 4877 | 79 70 4878 | 153 45 4879 | 167 167 4880 | 67 194 4881 | 173 183 4882 | 49 47 4883 | 70 76 4884 | 56 41 4885 | 139 40 4886 | 128 132 4887 | 54 41 4888 | 57 86 4889 | 70 84 4890 | 84 76 4891 | 206 179 4892 | 79 118 4893 | 121 115 4894 | 83 121 4895 | 89 239 4896 | 178 182 4897 | 181 161 4898 | 184 172 4899 | 115 45 4900 | 151 159 4901 | 82 70 4902 | 157 188 4903 | 70 79 4904 | 85 70 4905 | 149 171 4906 | 183 84 4907 | 163 138 4908 | 52 33 4909 | 184 179 4910 | 161 153 4911 | 136 156 4912 | 89 111 4913 | 169 162 4914 | 176 170 4915 | 187 190 4916 | 155 129 4917 | 66 97 4918 | 121 226 4919 | 87 101 4920 | 105 103 4921 | 71 105 4922 | 116 115 4923 | 175 176 4924 | 77 226 4925 | 111 121 4926 | 121 97 4927 | 87 104 4928 | 183 76 4929 | 183 71 4930 | 166 149 4931 | 80 114 4932 | 171 161 4933 | 101 103 4934 | 183 169 4935 | 167 185 4936 | 179 148 4937 | 99 121 4938 | 132 172 4939 | 157 89 4940 | 183 87 4941 | 67 111 4942 | 146 151 4943 | 170 190 4944 | 147 179 4945 | 66 108 4946 | 99 114 4947 | 156 81 4948 | 183 66 4949 | 183 69 4950 | 147 161 4951 | 183 68 4952 | 183 83 4953 | 71 97 4954 | 88 88 4955 | 156 75 4956 | 167 154 4957 | 156 74 4958 | 83 97 4959 | 117 107 4960 | 69 115 4961 | 69 110 4962 | 65 99 4963 | 103 115 4964 | 66 101 4965 | 77 87 4966 | 114 100 4967 | 187 166 4968 | 160 167 4969 | 99 99 4970 | 84 114 4971 | 102 105 4972 | 160 158 4973 | 103 114 4974 | 74 226 4975 | 68 117 4976 | 183 77 4977 | 183 72 4978 | 72 111 4979 | 81 226 4980 | 86 74 4981 | 157 86 4982 | 71 65 4983 | 157 67 4984 | 156 86 4985 | 176 185 4986 | 157 82 4987 | 50 37 4988 | 151 140 4989 | 153 178 4990 | 171 148 4991 | 85 80 4992 | 97 111 4993 | 163 226 4994 | 74 239 4995 | 166 173 4996 | 129 82 4997 | 69 79 4998 | 53 37 4999 | 87 105 5000 | 78 97 5001 | 103 227 5002 | 119 239 5003 | 66 105 5004 | 79 67 5005 | 117 111 5006 | 153 179 5007 | 157 77 5008 | 53 41 5009 | 79 86 5010 | 167 142 5011 | 73 86 5012 | 157 69 5013 | 55 45 5014 | 45 57 5015 | 146 195 5016 | 43 239 5017 | 86 73 5018 | 72 194 5019 | 47 52 5020 | 77 88 5021 | 153 195 5022 | 55 41 5023 | 151 50 5024 | 121 108 5025 | 111 104 5026 | 109 117 5027 | 74 97 5028 | 141 52 5029 | 83 76 5030 | 174 194 5031 | 107 226 5032 | 97 97 5033 | 71 117 5034 | 130 49 5035 | 48 194 5036 | 40 104 5037 | 46 103 5038 | 114 46 5039 | 109 47 5040 | 47 97 5041 | 101 47 5042 | 47 57 5043 | 47 41 5044 | 51 47 5045 | 40 74 5046 | 41 49 5047 | 74 111 5048 | 73 80 5049 | 88 84 5050 | 135 174 5051 | 65 71 5052 | 47 49 5053 | 149 195 5054 | 103 103 5055 | 153 104 5056 | 77 117 5057 | 183 78 5058 | 87 194 5059 | 67 76 5060 | 117 97 5061 | 153 121 5062 | 78 194 5063 | 104 104 5064 | 48 45 5065 | 89 226 5066 | 107 110 5067 | 156 89 5068 | 98 115 5069 | 105 117 5070 | 166 98 5071 | 164 153 5072 | 170 160 5073 | 101 104 5074 | 107 97 5075 | 108 226 5076 | 89 97 5077 | 140 99 5078 | 157 174 5079 | 140 148 5080 | 67 101 5081 | 103 104 5082 | 138 139 5083 | 45 48 5084 | 183 80 5085 | 80 194 5086 | 156 153 5087 | 85 67 5088 | 67 116 5089 | 65 113 5090 | 121 121 5091 | 108 104 5092 | 140 143 5093 | 167 179 5094 | 167 171 5095 | 182 167 5096 | 178 157 5097 | 130 183 5098 | 129 189 5099 | 177 153 5100 | 181 153 5101 | 70 105 5102 | 139 145 5103 | 181 146 5104 | 139 171 5105 | 122 227 5106 | 141 173 5107 | 83 79 5108 | 83 83 5109 | 110 121 5110 | 153 57 5111 | 77 95 5112 | 95 40 5113 | 169 167 5114 | 179 184 5115 | 150 140 5116 | 130 156 5117 | 188 191 5118 | 154 189 5119 | 51 79 5120 | 185 186 5121 | 165 175 5122 | 173 186 5123 | 182 191 5124 | 90 79 5125 | 77 227 5126 | 142 226 5127 | 166 65 5128 | 103 108 5129 | 101 46 5130 | 104 63 5131 | 160 194 5132 | 128 163 5133 | 87 111 5134 | 34 226 5135 | 109 121 5136 | 179 147 5137 | 34 87 5138 | 73 39 5139 | 39 109 5140 | 82 74 5141 | 74 52 5142 | 72 76 5143 | 207 134 5144 | 65 45 5145 | 48 82 5146 | 43 226 5147 | 51 37 5148 | 45 73 5149 | 140 68 5150 | 51 69 5151 | 69 43 5152 | 130 48 5153 | 82 43 5154 | 37 227 5155 | 57 37 5156 | 177 168 5157 | 89 45 5158 | 86 45 5159 | 130 54 5160 | 45 66 5161 | 56 71 5162 | 66 79 5163 | 166 53 5164 | 66 84 5165 | 45 54 5166 | 114 107 5167 | 98 226 5168 | 77 49 5169 | 82 49 5170 | 166 57 5171 | 157 178 5172 | 150 54 5173 | 54 97 5174 | 90 57 5175 | 90 49 5176 | 37 226 5177 | 71 56 5178 | 48 43 5179 | 129 54 5180 | 163 134 5181 | 99 226 5182 | 73 110 5183 | 140 79 5184 | 46 227 5185 | 45 68 5186 | 69 97 5187 | 104 239 5188 | 160 131 5189 | 45 87 5190 | 114 45 5191 | 100 114 5192 | 80 76 5193 | 154 48 5194 | 77 45 5195 | 68 45 5196 | 68 111 5197 | 152 77 5198 | 117 112 5199 | 112 115 5200 | 102 239 5201 | 80 117 5202 | 97 102 5203 | 102 97 5204 | 80 227 5205 | 128 178 5206 | 45 83 5207 | 154 50 5208 | 72 105 5209 | 104 102 5210 | 116 99 5211 | 136 73 5212 | 154 52 5213 | 88 101 5214 | 86 105 5215 | 114 98 5216 | 75 117 5217 | 105 93 5218 | 108 119 5219 | 76 194 5220 | 160 154 5221 | 142 50 5222 | 119 111 5223 | 144 146 5224 | 177 180 5225 | 107 227 5226 | 129 67 5227 | 45 55 5228 | 71 66 5229 | 70 70 5230 | 233 138 5231 | 69 194 5232 | 163 180 5233 | 45 52 5234 | 65 117 5235 | 107 46 5236 | 102 226 5237 | 33 227 5238 | 79 102 5239 | 177 157 5240 | 135 148 5241 | 63 41 5242 | 141 148 5243 | 141 68 5244 | 75 69 5245 | 78 90 5246 | 91 105 5247 | 166 91 5248 | 91 47 5249 | 47 105 5250 | 100 46 5251 | 46 111 5252 | 69 109 5253 | 179 157 5254 | 82 239 5255 | 160 163 5256 | 105 113 5257 | 113 105 5258 | 156 35 5259 | 164 189 5260 | 136 149 5261 | 152 75 5262 | 90 226 5263 | 83 227 5264 | 156 90 5265 | 71 80 5266 | 146 141 5267 | 84 45 5268 | 65 75 5269 | 45 56 5270 | 40 53 5271 | 146 183 5272 | 84 227 5273 | 152 66 5274 | 132 171 5275 | 79 46 5276 | 72 72 5277 | 72 52 5278 | 72 83 5279 | 77 84 5280 | 57 65 5281 | 75 45 5282 | 84 226 5283 | 50 71 5284 | 227 130 5285 | 148 67 5286 | 48 67 5287 | 83 70 5288 | 70 97 5289 | 171 226 5290 | 65 54 5291 | 158 49 5292 | 114 194 5293 | 148 65 5294 | 81 239 5295 | 157 108 5296 | 95 62 5297 | 119 110 5298 | 140 100 5299 | 110 114 5300 | 101 95 5301 | 62 116 5302 | 156 45 5303 | 69 73 5304 | 62 68 5305 | 115 108 5306 | 46 116 5307 | 65 50 5308 | 50 45 5309 | 156 108 5310 | 159 170 5311 | 62 239 5312 | 45 69 5313 | 69 74 5314 | 73 79 5315 | 108 99 5316 | 49 37 5317 | 166 52 5318 | 80 105 5319 | 157 76 5320 | 157 45 5321 | 62 108 5322 | 154 88 5323 | 65 86 5324 | 157 70 5325 | 73 72 5326 | 69 48 5327 | 55 90 5328 | 90 45 5329 | 49 45 5330 | 77 80 5331 | 154 53 5332 | 34 46 5333 | 166 108 5334 | 157 41 5335 | 76 46 5336 | 44 226 5337 | 140 108 5338 | 80 55 5339 | 154 51 5340 | 46 34 5341 | 157 44 5342 | 49 79 5343 | 48 69 5344 | 122 104 5345 | 39 46 5346 | 74 46 5347 | 69 45 5348 | 97 45 5349 | 56 45 5350 | 179 171 5351 | 189 161 5352 | 74 73 5353 | 159 108 5354 | 45 90 5355 | 148 34 5356 | 173 131 5357 | 107 121 5358 | 142 56 5359 | 166 141 5360 | 33 34 5361 | 145 186 5362 | 40 226 5363 | 157 34 5364 | 83 109 5365 | 168 137 5366 | 180 140 5367 | 149 181 5368 | 84 105 5369 | 48 77 5370 | 66 66 5371 | 147 153 5372 | 151 190 5373 | 174 166 5374 | 129 158 5375 | 130 145 5376 | 101 41 5377 | 142 51 5378 | 161 142 5379 | 40 83 5380 | 233 142 5381 | 176 182 5382 | 156 179 5383 | 159 141 5384 | 66 121 5385 | 145 175 5386 | 183 191 5387 | 166 126 5388 | 134 145 5389 | 137 187 5390 | 58 34 5391 | 162 155 5392 | 63 34 5393 | 141 165 5394 | 130 179 5395 | 34 39 5396 | 39 227 5397 | 166 46 5398 | 44 34 5399 | 34 227 5400 | 132 142 5401 | 174 147 5402 | 166 144 5403 | 169 189 5404 | 145 190 5405 | 171 189 5406 | 183 184 5407 | 152 57 5408 | 142 190 5409 | 168 183 5410 | 145 150 5411 | 130 34 5412 | 58 226 5413 | 164 148 5414 | 158 147 5415 | 68 75 5416 | 75 49 5417 | 70 53 5418 | 69 69 5419 | 87 69 5420 | 69 112 5421 | 129 88 5422 | 68 226 5423 | 128 173 5424 | 148 68 5425 | 40 65 5426 | 52 45 5427 | 68 80 5428 | 57 41 5429 | 142 49 5430 | 81 227 5431 | 142 67 5432 | 100 226 5433 | 73 115 5434 | 100 109 5435 | 179 144 5436 | 86 111 5437 | 156 97 5438 | 154 168 5439 | 148 73 5440 | 143 167 5441 | 84 194 5442 | 159 189 5443 | 142 53 5444 | 137 157 5445 | 164 164 5446 | 120 111 5447 | 49 194 5448 | 40 72 5449 | 77 51 5450 | 72 68 5451 | 130 181 5452 | 66 114 5453 | 85 45 5454 | 148 116 5455 | 51 68 5456 | 166 50 5457 | 157 63 5458 | 107 105 5459 | 158 53 5460 | 148 80 5461 | 226 146 5462 | 227 132 5463 | 175 156 5464 | 181 175 5465 | 180 176 5466 | 133 178 5467 | 227 129 5468 | 79 79 5469 | 157 46 5470 | 172 164 5471 | 178 134 5472 | 147 181 5473 | 67 46 5474 | 100 98 5475 | 138 82 5476 | 49 65 5477 | 66 65 5478 | 142 55 5479 | 142 54 5480 | 158 50 5481 | 49 43 5482 | 78 66 5483 | 70 87 5484 | 169 136 5485 | 79 87 5486 | 166 179 5487 | 48 126 5488 | 48 88 5489 | 158 54 5490 | 155 161 5491 | 168 185 5492 | 88 45 5493 | 183 75 5494 | 70 111 5495 | 75 194 5496 | 48 195 5497 | 100 115 5498 | 114 112 5499 | 151 53 5500 | 74 194 5501 | 85 110 5502 | 69 120 5503 | 83 111 5504 | 120 239 5505 | 70 49 5506 | 70 108 5507 | 183 137 5508 | 71 111 5509 | 72 48 5510 | 68 81 5511 | 153 51 5512 | 54 65 5513 | 80 72 5514 | 148 83 5515 | 87 73 5516 | 133 175 5517 | 108 77 5518 | 69 80 5519 | 78 227 5520 | 153 116 5521 | 56 195 5522 | 148 66 5523 | 148 48 5524 | 117 226 5525 | 67 49 5526 | 129 69 5527 | 56 103 5528 | 103 116 5529 | 48 65 5530 | 151 49 5531 | 56 65 5532 | 76 115 5533 | 115 61 5534 | 61 50 5535 | 140 89 5536 | 50 58 5537 | 85 78 5538 | 61 49 5539 | 49 44 5540 | 83 61 5541 | 97 104 5542 | 73 45 5543 | 81 97 5544 | 140 97 5545 | 72 97 5546 | 45 81 5547 | 140 77 5548 | 112 239 5549 | 83 105 5550 | 44 52 5551 | 75 97 5552 | 55 44 5553 | 45 72 5554 | 109 227 5555 | 140 78 5556 | 100 116 5557 | 75 65 5558 | 112 226 5559 | 79 110 5560 | 106 97 5561 | 101 83 5562 | 140 104 5563 | 97 113 5564 | 47 53 5565 | 65 89 5566 | 117 104 5567 | 73 81 5568 | 101 121 5569 | 45 77 5570 | 54 45 5571 | 72 117 5572 | 44 51 5573 | 61 57 5574 | 61 53 5575 | 113 97 5576 | 140 72 5577 | 140 75 5578 | 97 65 5579 | 97 227 5580 | 49 66 5581 | 90 80 5582 | 117 113 5583 | 78 105 5584 | 117 100 5585 | 167 226 5586 | 74 117 5587 | 117 227 5588 | 153 97 5589 | 97 119 5590 | 140 66 5591 | 111 72 5592 | 110 117 5593 | 100 84 5594 | 148 186 5595 | 107 45 5596 | 74 65 5597 | 226 153 5598 | 82 80 5599 | 75 52 5600 | 153 130 5601 | 80 71 5602 | 69 227 5603 | 110 79 5604 | 72 74 5605 | 55 37 5606 | 111 106 5607 | 70 57 5608 | 61 51 5609 | 86 79 5610 | 67 52 5611 | 173 194 5612 | 84 86 5613 | 82 89 5614 | 65 109 5615 | 116 107 5616 | 47 55 5617 | 86 65 5618 | 55 47 5619 | 84 115 5620 | 101 67 5621 | 181 227 5622 | 145 145 5623 | 172 153 5624 | 43 53 5625 | 178 226 5626 | 88 89 5627 | 140 55 5628 | 38 110 5629 | 89 81 5630 | 143 51 5631 | 143 98 5632 | 153 159 5633 | 131 165 5634 | 161 180 5635 | 76 77 5636 | 143 53 5637 | 143 67 5638 | 101 38 5639 | 85 88 5640 | 71 50 5641 | 112 117 5642 | 155 108 5643 | 157 66 5644 | 108 107 5645 | 107 111 5646 | 77 85 5647 | 140 162 5648 | 139 178 5649 | 166 54 5650 | 159 34 5651 | 166 55 5652 | 72 88 5653 | 88 71 5654 | 226 134 5655 | 168 175 5656 | 185 167 5657 | 178 183 5658 | 184 182 5659 | 169 145 5660 | 148 54 5661 | 110 45 5662 | 185 181 5663 | 172 171 5664 | 108 41 5665 | 70 227 5666 | 40 68 5667 | 109 109 5668 | 88 227 5669 | 110 41 5670 | 114 41 5671 | 39 34 5672 | 41 33 5673 | 102 45 5674 | 129 34 5675 | 107 108 5676 | 140 34 5677 | 154 184 5678 | 68 68 5679 | 77 77 5680 | 87 83 5681 | 75 227 5682 | 173 179 5683 | 71 77 5684 | 82 87 5685 | 87 54 5686 | 83 114 5687 | 114 68 5688 | 68 116 5689 | 87 79 5690 | 42 239 5691 | 83 38 5692 | 38 83 5693 | 160 160 5694 | 112 109 5695 | 90 84 5696 | 84 70 5697 | 136 71 5698 | 157 78 5699 | 40 54 5700 | 183 49 5701 | 183 50 5702 | 111 120 5703 | 148 76 5704 | 53 114 5705 | 153 163 5706 | 190 173 5707 | 152 174 5708 | 168 136 5709 | 135 172 5710 | 152 141 5711 | 165 172 5712 | 178 160 5713 | 151 136 5714 | 166 163 5715 | 166 186 5716 | 138 190 5717 | 170 167 5718 | 152 151 5719 | 143 157 5720 | 181 136 5721 | 34 49 5722 | 77 50 5723 | 80 67 5724 | 34 51 5725 | 77 54 5726 | 52 34 5727 | 34 50 5728 | 72 71 5729 | 37 46 5730 | 189 159 5731 | 172 159 5732 | 169 184 5733 | 189 128 5734 | 174 132 5735 | 138 148 5736 | 136 173 5737 | 39 226 5738 | 183 85 5739 | 50 44 5740 | 65 74 5741 | 184 188 5742 | 44 227 5743 | 140 101 5744 | 69 108 5745 | 97 122 5746 | 122 101 5747 | 111 227 5748 | 160 40 5749 | 105 227 5750 | 69 117 5751 | 102 114 5752 | 114 102 5753 | 81 117 5754 | 65 116 5755 | 90 101 5756 | 101 63 5757 | 100 113 5758 | 108 118 5759 | 165 147 5760 | 163 167 5761 | 140 111 5762 | 182 226 5763 | 153 44 5764 | 140 113 5765 | 110 104 5766 | 226 138 5767 | 65 44 5768 | 70 69 5769 | 45 116 5770 | 67 114 5771 | 152 115 5772 | 116 227 5773 | 130 115 5774 | 109 40 5775 | 68 44 5776 | 111 40 5777 | 179 143 5778 | 115 46 5779 | 80 111 5780 | 115 110 5781 | 33 239 5782 | 61 48 5783 | 68 77 5784 | 68 70 5785 | 71 114 5786 | 65 119 5787 | 110 107 5788 | 70 114 5789 | 104 110 5790 | 79 100 5791 | 79 114 5792 | 120 112 5793 | 119 115 5794 | 153 115 5795 | 109 115 5796 | 83 107 5797 | 99 115 5798 | 84 111 5799 | 104 121 5800 | 80 46 5801 | 75 110 5802 | 103 121 5803 | 84 101 5804 | 119 114 5805 | 155 49 5806 | 109 110 5807 | 83 117 5808 | 79 99 5809 | 48 71 5810 | 101 122 5811 | 110 106 5812 | 119 108 5813 | 83 110 5814 | 168 226 5815 | 177 163 5816 | 46 80 5817 | 76 45 5818 | 136 65 5819 | 100 108 5820 | 142 65 5821 | 107 115 5822 | 71 72 5823 | 83 45 5824 | 115 121 5825 | 65 98 5826 | 82 105 5827 | 65 112 5828 | 75 105 5829 | 71 108 5830 | 122 105 5831 | 72 122 5832 | 157 49 5833 | 136 84 5834 | 97 120 5835 | 108 109 5836 | 45 119 5837 | 97 49 5838 | 70 101 5839 | 71 104 5840 | 87 46 5841 | 65 100 5842 | 154 65 5843 | 79 108 5844 | 145 191 5845 | 72 121 5846 | 100 118 5847 | 79 116 5848 | 79 109 5849 | 128 136 5850 | 110 102 5851 | 77 99 5852 | 70 117 5853 | 44 49 5854 | 40 84 5855 | 100 104 5856 | 118 111 5857 | 100 44 5858 | 101 44 5859 | 152 108 5860 | 148 75 5861 | 40 67 5862 | 118 117 5863 | 78 55 5864 | 68 114 5865 | 105 80 5866 | 105 104 5867 | 121 227 5868 | 207 128 5869 | 142 115 5870 | 83 119 5871 | 45 84 5872 | 109 226 5873 | 110 44 5874 | 115 44 5875 | 104 44 5876 | 84 77 5877 | 45 82 5878 | 103 110 5879 | 140 117 5880 | 117 120 5881 | 119 104 5882 | 147 175 5883 | 117 118 5884 | 109 116 5885 | 120 116 5886 | 40 69 5887 | 116 41 5888 | 104 41 5889 | 104 45 5890 | 122 226 5891 | 178 149 5892 | 106 117 5893 | 115 84 5894 | 110 69 5895 | 120 117 5896 | 69 71 5897 | 102 116 5898 | 120 105 5899 | 114 83 5900 | 153 137 5901 | 120 99 5902 | 100 65 5903 | 85 76 5904 | 79 117 5905 | 159 87 5906 | 35 110 5907 | 116 72 5908 | 97 78 5909 | 120 115 5910 | 140 67 5911 | 67 117 5912 | 101 48 5913 | 73 116 5914 | 142 69 5915 | 67 105 5916 | 75 111 5917 | 108 57 5918 | 35 50 5919 | 78 45 5920 | 108 56 5921 | 76 66 5922 | 46 84 5923 | 74 80 5924 | 72 45 5925 | 73 71 5926 | 84 88 5927 | 45 65 5928 | 66 45 5929 | 72 77 5930 | 45 67 5931 | 167 173 5932 | 82 45 5933 | 67 45 5934 | 71 46 5935 | 87 45 5936 | 55 59 5937 | 71 45 5938 | 108 84 5939 | 106 226 5940 | 101 70 5941 | 101 76 5942 | 50 79 5943 | 75 101 5944 | 115 77 5945 | 116 46 5946 | 102 115 5947 | 100 103 5948 | 101 113 5949 | 101 84 5950 | 45 71 5951 | 176 165 5952 | 86 227 5953 | 168 151 5954 | 149 154 5955 | 166 51 5956 | 75 71 5957 | 83 75 5958 | 151 188 5959 | 79 48 5960 | 99 46 5961 | 97 44 5962 | 44 73 5963 | 186 227 5964 | 208 170 5965 | 68 52 5966 | 48 47 5967 | 84 80 5968 | 146 161 5969 | 206 166 5970 | 166 145 5971 | 48 79 5972 | 52 68 5973 | 172 149 5974 | 138 141 5975 | 70 82 5976 | 90 69 5977 | 45 89 5978 | 111 122 5979 | 152 172 5980 | 100 99 5981 | 156 109 5982 | 207 136 5983 | 34 70 5984 | 68 194 5985 | 140 206 5986 | 143 52 5987 | 97 73 5988 | 152 162 5989 | 147 180 5990 | 135 171 5991 | 49 99 5992 | 108 112 5993 | 61 239 5994 | 83 78 5995 | 46 67 5996 | 68 83 5997 | 52 195 5998 | 170 171 5999 | 40 70 6000 | 153 98 6001 | 77 82 6002 | 57 45 6003 | 33 49 6004 | 86 69 6005 | 79 82 6006 | 70 73 6007 | 85 68 6008 | 76 89 6009 | 82 85 6010 | 87 78 6011 | 85 69 6012 | 77 66 6013 | 76 85 6014 | 72 84 6015 | 76 68 6016 | 71 82 6017 | 85 66 6018 | 79 88 6019 | 89 71 6020 | 69 86 6021 | 78 86 6022 | 80 80 6023 | 89 79 6024 | 82 77 6025 | 87 84 6026 | 78 76 6027 | 76 80 6028 | 71 70 6029 | 120 45 6030 | 45 121 6031 | 115 33 6032 | 81 69 6033 | 82 68 6034 | 77 90 6035 | 70 55 6036 | 82 66 6037 | 74 69 6038 | 69 85 6039 | 120 227 6040 | 88 67 6041 | 83 89 6042 | 75 85 6043 | 82 226 6044 | 79 73 6045 | 67 75 6046 | 75 83 6047 | 90 88 6048 | 68 89 6049 | 74 82 6050 | 67 77 6051 | 69 90 6052 | 66 80 6053 | 79 72 6054 | 83 87 6055 | 75 84 6056 | 74 68 6057 | 73 85 6058 | 80 87 6059 | 76 57 6060 | 72 46 6061 | 73 109 6062 | 115 194 6063 | 69 99 6064 | 116 194 6065 | 85 71 6066 | 78 82 6067 | 109 33 6068 | 89 88 6069 | 89 78 6070 | 85 77 6071 | 90 83 6072 | 83 74 6073 | 89 69 6074 | 57 66 6075 | 56 67 6076 | 72 81 6077 | 101 86 6078 | 126 239 6079 | 136 103 6080 | 177 156 6081 | 137 168 6082 | 148 69 6083 | 129 48 6084 | 128 135 6085 | 135 227 6086 | 45 227 6087 | 163 162 6088 | 161 164 6089 | 116 44 6090 | 104 103 6091 | 156 107 6092 | 156 85 6093 | 129 66 6094 | 101 39 6095 | 166 63 6096 | 80 78 6097 | 166 48 6098 | 72 226 6099 | 61 109 6100 | 109 99 6101 | 99 50 6102 | 39 114 6103 | 129 68 6104 | 143 227 6105 | 44 46 6106 | 46 41 6107 | 143 158 6108 | 132 162 6109 | 108 227 6110 | 142 138 6111 | 115 114 6112 | 136 116 6113 | 114 66 6114 | 104 99 6115 | 107 99 6116 | 91 239 6117 | 165 166 6118 | 45 53 6119 | 159 100 6120 | 82 110 6121 | 145 93 6122 | 146 93 6123 | 147 93 6124 | 148 93 6125 | 77 56 6126 | 158 136 6127 | 157 71 6128 | 90 82 6129 | 77 55 6130 | 72 239 6131 | 75 78 6132 | 183 86 6133 | 151 51 6134 | 40 71 6135 | 152 87 6136 | 130 167 6137 | 114 119 6138 | 78 75 6139 | 72 227 6140 | 141 55 6141 | 50 47 6142 | 47 51 6143 | 53 194 6144 | 84 49 6145 | 148 84 6146 | 166 39 6147 | 158 181 6148 | 141 57 6149 | 206 182 6150 | 151 45 6151 | 162 226 6152 | 175 194 6153 | 186 226 6154 | 140 115 6155 | 100 110 6156 | 95 239 6157 | 73 75 6158 | 71 89 6159 | 121 116 6160 | 102 117 6161 | 122 239 6162 | 65 90 6163 | 45 102 6164 | 70 104 6165 | 101 106 6166 | 121 100 6167 | 83 108 6168 | 39 65 6169 | 101 42 6170 | 49 93 6171 | 56 66 6172 | 82 86 6173 | 77 76 6174 | 98 100 6175 | 116 98 6176 | 175 227 6177 | 184 226 6178 | 110 119 6179 | 110 122 6180 | 69 66 6181 | 103 109 6182 | 112 107 6183 | 45 85 6184 | 108 110 6185 | 115 119 6186 | 111 49 6187 | 45 101 6188 | 117 102 6189 | 121 109 6190 | 114 44 6191 | 122 117 6192 | 112 121 6193 | 87 114 6194 | 82 75 6195 | 73 88 6196 | 67 78 6197 | 72 85 6198 | 116 74 6199 | 70 83 6200 | 48 109 6201 | 108 106 6202 | 86 101 6203 | 80 70 6204 | 50 93 6205 | 162 188 6206 | 51 93 6207 | 52 93 6208 | 115 80 6209 | 158 191 6210 | 155 169 6211 | 91 50 6212 | 91 51 6213 | 91 52 6214 | 91 53 6215 | 53 93 6216 | 91 54 6217 | 54 93 6218 | 91 55 6219 | 55 93 6220 | 91 56 6221 | 56 93 6222 | 91 57 6223 | 57 93 6224 | 48 93 6225 | 208 190 6226 | 208 162 6227 | 208 161 6228 | 161 208 6229 | 156 208 6230 | 190 208 6231 | 84 57 6232 | 84 50 6233 | 162 209 6234 | 209 132 6235 | 208 145 6236 | 208 187 6237 | 190 239 6238 | 141 208 6239 | 208 186 6240 | 186 208 6241 | 85 51 6242 | 58 55 6243 | 157 53 6244 | 138 50 6245 | 67 74 6246 | 157 48 6247 | 131 162 6248 | 148 55 6249 | 183 51 6250 | 52 194 6251 | 55 194 6252 | 152 52 6253 | 157 194 6254 | 152 49 6255 | 65 72 6256 | 77 46 6257 | 80 121 6258 | 108 48 6259 | 71 79 6260 | 152 51 6261 | 88 52 6262 | 52 89 6263 | 89 54 6264 | 71 68 6265 | 75 89 6266 | 75 79 6267 | 70 85 6268 | 74 79 6269 | 79 89 6270 | 34 83 6271 | 34 79 6272 | 63 33 6273 | 65 40 6274 | 68 40 6275 | 40 78 6276 | 65 41 6277 | 72 41 6278 | 68 34 6279 | 69 95 6280 | 95 81 6281 | 81 85 6282 | 85 79 6283 | 40 79 6284 | 79 104 6285 | 134 144 6286 | 84 33 6287 | 68 76 6288 | 34 86 6289 | 34 40 6290 | 76 51 6291 | 48 83 6292 | 85 86 6293 | 80 53 6294 | 72 34 6295 | 33 70 6296 | 132 128 6297 | 34 74 6298 | 140 74 6299 | 67 82 6300 | 34 76 6301 | 130 74 6302 | 82 82 6303 | 82 40 6304 | 69 89 6305 | 69 40 6306 | 164 138 6307 | 142 80 6308 | 142 73 6309 | 40 87 6310 | 148 33 6311 | 166 40 6312 | 90 239 6313 | 110 113 6314 | 66 50 6315 | 51 45 6316 | 143 50 6317 | 40 77 6318 | 66 82 6319 | 98 46 6320 | 83 66 6321 | 45 111 6322 | 103 45 6323 | 34 90 6324 | 121 41 6325 | 115 41 6326 | 158 128 6327 | 67 51 6328 | 51 73 6329 | 52 65 6330 | 195 172 6331 | 106 105 6332 | 195 173 6333 | 157 51 6334 | 132 141 6335 | 74 85 6336 | 78 46 6337 | 206 187 6338 | 129 110 6339 | 148 82 6340 | 72 90 6341 | 70 50 6342 | 70 195 6343 | 195 169 6344 | 141 56 6345 | 142 57 6346 | 66 53 6347 | 105 46 6348 | 154 79 6349 | 46 105 6350 | 156 99 6351 | 103 112 6352 | 183 70 6353 | 70 194 6354 | 83 194 6355 | 86 194 6356 | 156 113 6357 | 100 45 6358 | 40 66 6359 | 156 116 6360 | 106 111 6361 | 86 239 6362 | 72 70 6363 | 99 103 6364 | 143 70 6365 | 78 70 6366 | 78 226 6367 | 50 68 6368 | 89 101 6369 | 116 110 6370 | 88 76 6371 | 156 88 6372 | 156 115 6373 | 148 88 6374 | 152 158 6375 | 84 67 6376 | 156 98 6377 | 161 132 6378 | 73 64 6379 | 64 104 6380 | 63 98 6381 | 114 62 6382 | 88 80 6383 | 185 151 6384 | 66 52 6385 | 43 50 6386 | 80 52 6387 | 175 142 6388 | 176 161 6389 | 156 144 6390 | 226 137 6391 | 166 70 6392 | 233 141 6393 | 141 170 6394 | 206 184 6395 | 152 139 6396 | 165 167 6397 | 196 129 6398 | 140 166 6399 | 39 51 6400 | 51 39 6401 | 39 50 6402 | 39 52 6403 | 53 39 6404 | 226 149 6405 | 39 53 6406 | 39 48 6407 | 57 39 6408 | 46 208 6409 | 39 49 6410 | 49 39 6411 | 52 39 6412 | 208 148 6413 | 82 227 6414 | 110 63 6415 | 84 87 6416 | 55 39 6417 | 69 72 6418 | 56 39 6419 | 176 52 6420 | 70 71 6421 | 136 57 6422 | 136 56 6423 | 136 51 6424 | 136 54 6425 | 54 37 6426 | 57 195 6427 | 54 195 6428 | 82 88 6429 | 166 83 6430 | 87 66 6431 | 65 48 6432 | 89 227 6433 | 129 70 6434 | 70 51 6435 | 145 50 6436 | 86 82 6437 | 50 39 6438 | 78 80 6439 | 57 194 6440 | 176 49 6441 | 176 48 6442 | 83 48 6443 | 143 133 6444 | 83 46 6445 | 65 52 6446 | 65 49 6447 | 176 53 6448 | 65 51 6449 | 87 226 6450 | 68 48 6451 | 129 75 6452 | 87 80 6453 | 121 112 6454 | 148 71 6455 | 140 103 6456 | 83 50 6457 | 69 87 6458 | 176 50 6459 | 54 39 6460 | 136 52 6461 | 85 46 6462 | 46 83 6463 | 46 65 6464 | 53 74 6465 | 83 57 6466 | 136 55 6467 | 140 121 6468 | 129 78 6469 | 154 169 6470 | 46 74 6471 | 158 226 6472 | 82 55 6473 | 71 90 6474 | 56 79 6475 | 75 76 6476 | 101 72 6477 | 79 115 6478 | 137 143 6479 | 140 116 6480 | 78 121 6481 | 112 98 6482 | 82 117 6483 | 139 66 6484 | 108 76 6485 | 46 70 6486 | 53 44 6487 | 182 52 6488 | 182 49 6489 | 68 50 6490 | 50 67 6491 | 182 48 6492 | 86 50 6493 | 80 50 6494 | 122 111 6495 | 61 226 6496 | 174 226 6497 | 44 65 6498 | 153 66 6499 | 152 76 6500 | 48 105 6501 | 165 171 6502 | 77 71 6503 | 186 141 6504 | 111 59 6505 | 82 76 6506 | 157 74 6507 | 68 46 6508 | 66 44 6509 | 68 87 6510 | 39 115 6511 | 49 84 6512 | 85 73 6513 | 84 117 6514 | 40 82 6515 | 122 97 6516 | 66 46 6517 | 44 74 6518 | 168 181 6519 | 129 80 6520 | 76 227 6521 | 118 239 6522 | 100 41 6523 | 69 100 6524 | 129 76 6525 | 170 227 6526 | 162 163 6527 | 181 159 6528 | 83 49 6529 | 43 49 6530 | 129 180 6531 | 195 183 6532 | 173 174 6533 | 110 43 6534 | 81 81 6535 | 184 227 6536 | 142 77 6537 | 140 76 6538 | 140 84 6539 | 172 151 6540 | 185 227 6541 | 170 226 6542 | 76 53 6543 | 121 117 6544 | 120 106 6545 | 118 118 6546 | 89 90 6547 | 102 104 6548 | 119 121 6549 | 113 113 6550 | 86 226 6551 | 114 84 6552 | 95 53 6553 | 140 90 6554 | 48 95 6555 | 169 166 6556 | 173 136 6557 | 33 73 6558 | 152 154 6559 | 41 44 6560 | 156 100 6561 | 59 226 6562 | 47 50 6563 | 51 98 6564 | 47 56 6565 | 82 46 6566 | 46 87 6567 | 119 107 6568 | 46 68 6569 | 53 47 6570 | 46 72 6571 | 49 98 6572 | 56 97 6573 | 50 88 6574 | 50 61 6575 | 49 88 6576 | 51 44 6577 | 46 71 6578 | 138 176 6579 | 46 77 6580 | 110 39 6581 | 49 97 6582 | 50 98 6583 | 99 113 6584 | 101 73 6585 | 189 227 6586 | 153 40 6587 | 136 99 6588 | 136 100 6589 | 183 79 6590 | 45 114 6591 | 137 50 6592 | 78 40 6593 | 45 112 6594 | 70 46 6595 | 39 116 6596 | 66 194 6597 | 50 97 6598 | 51 97 6599 | 46 82 6600 | 47 54 6601 | 137 51 6602 | 51 61 6603 | 164 139 6604 | 46 75 6605 | 84 46 6606 | 48 61 6607 | 110 118 6608 | 61 45 6609 | 136 115 6610 | 75 46 6611 | 73 107 6612 | 121 45 6613 | 156 103 6614 | 45 115 6615 | 121 44 6616 | 57 47 6617 | 116 45 6618 | 46 76 6619 | 75 114 6620 | 46 66 6621 | 120 97 6622 | 139 50 6623 | 45 98 6624 | 43 54 6625 | 137 43 6626 | 46 122 6627 | 115 68 6628 | 137 160 6629 | 141 49 6630 | 172 143 6631 | 40 73 6632 | 151 52 6633 | 90 70 6634 | 84 119 6635 | 144 150 6636 | 70 54 6637 | 83 71 6638 | 107 79 6639 | 147 152 6640 | 160 152 6641 | 147 154 6642 | 141 71 6643 | 95 111 6644 | 57 44 6645 | 78 101 6646 | 85 227 6647 | 46 101 6648 | 88 82 6649 | 58 54 6650 | 69 52 6651 | 54 68 6652 | 77 52 6653 | 53 66 6654 | 65 53 6655 | 85 226 6656 | 130 55 6657 | 130 53 6658 | 69 50 6659 | 79 56 6660 | 166 69 6661 | 115 50 6662 | 148 77 6663 | 83 82 6664 | 45 74 6665 | 74 75 6666 | 40 227 6667 | 130 129 6668 | 70 226 6669 | 133 150 6670 | 158 51 6671 | 105 121 6672 | 62 227 6673 | 128 177 6674 | 166 33 6675 | 52 69 6676 | 97 39 6677 | 69 116 6678 | 97 41 6679 | 71 51 6680 | 86 88 6681 | 53 86 6682 | 65 79 6683 | 140 86 6684 | 191 239 6685 | 84 51 6686 | 152 67 6687 | 50 194 6688 | 157 50 6689 | 34 54 6690 | 58 227 6691 | 159 152 6692 | 141 140 6693 | 163 163 6694 | 48 80 6695 | 46 79 6696 | 71 71 6697 | 183 74 6698 | 101 50 6699 | 80 86 6700 | 157 55 6701 | 66 57 6702 | 170 158 6703 | 61 61 6704 | 141 54 6705 | 157 52 6706 | 126 56 6707 | 40 55 6708 | 142 72 6709 | 142 83 6710 | 52 82 6711 | 38 35 6712 | 35 49 6713 | 51 59 6714 | 156 101 6715 | 156 111 6716 | 156 105 6717 | 76 121 6718 | 100 76 6719 | 104 65 6720 | 115 69 6721 | 101 80 6722 | 178 227 6723 | 101 66 6724 | 156 117 6725 | 149 45 6726 | 110 77 6727 | 141 76 6728 | 141 83 6729 | 156 106 6730 | 156 206 6731 | 141 65 6732 | 175 164 6733 | 88 90 6734 | 120 102 6735 | 50 43 6736 | 102 50 6737 | 186 180 6738 | 102 54 6739 | 77 89 6740 | 100 52 6741 | 102 55 6742 | 126 40 6743 | 153 129 6744 | 147 138 6745 | 157 61 6746 | 140 69 6747 | 162 97 6748 | 171 145 6749 | 129 40 6750 | 40 40 6751 | 50 94 6752 | 42 50 6753 | 49 42 6754 | 42 49 6755 | 48 42 6756 | 80 49 6757 | 45 110 6758 | 94 48 6759 | 49 61 6760 | 94 54 6761 | 55 42 6762 | 42 57 6763 | 94 53 6764 | 94 52 6765 | 61 52 6766 | 52 61 6767 | 53 61 6768 | 61 54 6769 | 57 94 6770 | 56 94 6771 | 49 94 6772 | 54 42 6773 | 61 56 6774 | 54 44 6775 | 44 53 6776 | 56 61 6777 | 53 42 6778 | 54 61 6779 | 94 57 6780 | 94 56 6781 | 94 55 6782 | 51 42 6783 | 142 86 6784 | 129 145 6785 | 168 190 6786 | 189 190 6787 | 65 88 6788 | 166 164 6789 | 54 206 6790 | 47 109 6791 | 71 84 6792 | 47 80 6793 | 183 227 6794 | 76 40 6795 | 140 87 6796 | 147 139 6797 | 179 128 6798 | 141 128 6799 | 141 169 6800 | 81 105 6801 | 159 138 6802 | 185 163 6803 | 166 142 6804 | 142 109 6805 | 152 109 6806 | 130 71 6807 | 141 53 6808 | 117 121 6809 | 83 53 6810 | 172 184 6811 | 149 49 6812 | 158 56 6813 | 40 56 6814 | 40 57 6815 | 96 96 6816 | 143 142 6817 | 42 51 6818 | 166 62 6819 | 126 69 6820 | 157 91 6821 | 142 227 6822 | 78 117 6823 | 77 114 6824 | 65 104 6825 | 119 227 6826 | 79 119 6827 | 68 86 6828 | 86 68 6829 | 72 109 6830 | 91 65 6831 | 55 75 6832 | 79 105 6833 | 148 87 6834 | 108 195 6835 | 111 39 6836 | 77 115 6837 | 130 79 6838 | 85 109 6839 | 195 179 6840 | 179 110 6841 | 115 86 6842 | 67 71 6843 | 152 156 6844 | 70 52 6845 | 89 194 6846 | 231 182 6847 | 89 68 6848 | 72 89 6849 | 54 194 6850 | 157 109 6851 | 33 41 6852 | 76 48 6853 | 89 89 6854 | 96 239 6855 | 96 226 6856 | 86 84 6857 | 84 66 6858 | 54 126 6859 | 65 95 6860 | 44 78 6861 | 66 51 6862 | 45 76 6863 | 97 194 6864 | 89 77 6865 | 95 226 6866 | 107 33 6867 | 152 101 6868 | 73 89 6869 | 122 45 6870 | 45 118 6871 | 73 40 6872 | 140 73 6873 | 52 110 6874 | 73 57 6875 | 86 80 6876 | 33 76 6877 | 95 51 6878 | 49 110 6879 | 54 110 6880 | 178 139 6881 | 206 169 6882 | 80 66 6883 | 82 48 6884 | 166 171 6885 | 53 109 6886 | 73 114 6887 | 65 47 6888 | 161 98 6889 | 87 227 6890 | 90 65 6891 | 136 130 6892 | 136 66 6893 | 178 135 6894 | 86 86 6895 | 121 106 6896 | 113 102 6897 | 106 115 6898 | 117 122 6899 | 105 106 6900 | 122 122 6901 | 120 104 6902 | 109 118 6903 | 106 104 6904 | 102 100 6905 | 118 107 6906 | 121 61 6907 | 113 115 6908 | 166 115 6909 | 104 112 6910 | 121 107 6911 | 121 102 6912 | 97 61 6913 | 110 61 6914 | 99 227 6915 | 115 103 6916 | 108 114 6917 | 121 103 6918 | 120 103 6919 | 103 122 6920 | 100 112 6921 | 104 113 6922 | 103 99 6923 | 118 100 6924 | 122 103 6925 | 118 106 6926 | 104 61 6927 | 105 61 6928 | 153 117 6929 | 112 100 6930 | 142 121 6931 | 118 102 6932 | 107 102 6933 | 140 110 6934 | 102 103 6935 | 113 107 6936 | 104 98 6937 | 100 61 6938 | 106 100 6939 | 122 118 6940 | 166 117 6941 | 118 116 6942 | 140 112 6943 | 120 61 6944 | 98 61 6945 | 109 102 6946 | 122 109 6947 | 140 118 6948 | 120 121 6949 | 118 121 6950 | 112 113 6951 | 114 61 6952 | 109 104 6953 | 100 122 6954 | 122 120 6955 | 122 113 6956 | 104 120 6957 | 103 107 6958 | 114 120 6959 | 117 106 6960 | 104 100 6961 | 106 121 6962 | 112 122 6963 | 166 112 6964 | 166 106 6965 | 111 61 6966 | 99 61 6967 | 112 61 6968 | 113 61 6969 | 101 61 6970 | 116 61 6971 | 117 61 6972 | 118 61 6973 | 108 61 6974 | 122 61 6975 | 103 118 6976 | 106 239 6977 | 61 97 6978 | 73 34 6979 | 41 34 6980 | 34 55 6981 | 59 34 6982 | 45 109 6983 | 126 51 6984 | 67 126 6985 | 160 146 6986 | 42 226 6987 | 130 70 6988 | 115 107 6989 | 40 34 6990 | 65 81 6991 | 100 119 6992 | 116 119 6993 | 142 145 6994 | 148 111 6995 | 112 227 6996 | 108 68 6997 | 110 46 6998 | 114 104 6999 | 70 77 7000 | 136 69 7001 | 117 39 7002 | 84 74 7003 | 101 33 7004 | 65 105 7005 | 73 49 7006 | 136 87 7007 | 136 83 7008 | 136 34 7009 | 64 84 7010 | 110 95 7011 | 101 58 7012 | 95 99 7013 | 95 109 7014 | 48 64 7015 | 116 95 7016 | 116 50 7017 | 51 64 7018 | 142 85 7019 | 142 82 7020 | 57 64 7021 | 101 49 7022 | 104 50 7023 | 53 64 7024 | 140 119 7025 | 58 82 7026 | 103 50 7027 | 49 64 7028 | 54 64 7029 | 110 50 7030 | 136 67 7031 | 40 75 7032 | 158 189 7033 | 63 50 7034 | 58 239 7035 | 116 40 7036 | 156 119 7037 | 103 49 7038 | 98 102 7039 | 80 77 7040 | 136 76 7041 | 136 77 7042 | 153 34 7043 | 179 146 7044 | 143 119 7045 | 134 154 7046 | 118 115 7047 | 148 180 7048 | 108 40 7049 | 111 46 7050 | 85 72 7051 | 84 48 7052 | 46 112 7053 | 118 46 7054 | 68 55 7055 | 152 138 7056 | 80 41 7057 | 143 107 7058 | 137 158 7059 | 180 132 7060 | 54 101 7061 | 44 54 7062 | 145 139 7063 | 56 47 7064 | 209 135 7065 | 44 55 7066 | 178 45 7067 | 135 209 7068 | 176 160 7069 | 209 136 7070 | 136 45 7071 | 153 114 7072 | 69 114 7073 | 132 209 7074 | 209 142 7075 | 142 157 7076 | 176 187 7077 | 90 117 7078 | 140 122 7079 | 98 118 7080 | 67 95 7081 | 157 93 7082 | 80 51 7083 | 137 57 7084 | 130 75 7085 | 68 74 7086 | 102 119 7087 | 72 75 7088 | 165 152 7089 | 46 121 7090 | 104 46 7091 | 55 33 7092 | 170 169 7093 | 46 44 7094 | 154 34 7095 | 59 41 7096 | 41 41 7097 | 139 194 7098 | 34 44 7099 | 46 59 7100 | 68 53 7101 | 53 67 7102 | 141 116 7103 | 82 56 7104 | 141 66 7105 | 140 138 7106 | 182 186 7107 | 182 170 7108 | 56 194 7109 | --------------------------------------------------------------------------------