diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..0250004482c8087665d4b9e2fdc2bc50a84b82c3 --- /dev/null +++ b/app.py @@ -0,0 +1,178 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import gradio as gr + +import os +import sys +import copy +import shutil +import random +import argparse +import numpy as np + +import imageio + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from torchvision import transforms +from torch.utils.tensorboard import SummaryWriter + +from torch.utils.data import DataLoader + +from core.puzzle_utils import * +from core.networks import * +from core.datasets import * + +from tools.general.io_utils import * +from tools.general.time_utils import * +from tools.general.json_utils import * + +from tools.ai.log_utils import * +from tools.ai.demo_utils import * +from tools.ai.optim_utils import * +from tools.ai.torch_utils import * +from tools.ai.evaluate_utils import * + +from tools.ai.augment_utils import * +from tools.ai.randaugment import * + +parser = argparse.ArgumentParser() + +############################################################################### +# Dataset +############################################################################### +parser.add_argument('--seed', default=2606, type=int) +parser.add_argument('--num_workers', default=4, type=int) +parser.add_argument('--data_dir', default='../VOCtrainval_11-May-2012/', type=str) + +############################################################################### +# Network +############################################################################### +parser.add_argument('--architecture', default='DeepLabv3+', type=str) +parser.add_argument('--backbone', default='resnet50', type=str) +parser.add_argument('--mode', default='fix', type=str) +parser.add_argument('--use_gn', default=True, type=str2bool) + +############################################################################### +# Inference parameters +############################################################################### +parser.add_argument('--tag', default='', type=str) + +parser.add_argument('--domain', default='val', type=str) + +parser.add_argument('--scales', default='0.5,1.0,1.5,2.0', type=str) +parser.add_argument('--iteration', default=10, type=int) + +if __name__ == '__main__': + ################################################################################### + # Arguments + ################################################################################### + args = parser.parse_args() + + model_dir = create_directory('./experiments/models/') + model_path = model_dir + f'DeepLabv3+@ResNeSt-101@Fix@GN.pth' + + if 'train' in args.domain: + args.tag += '@train' + else: + args.tag += '@' + args.domain + + args.tag += '@scale=%s' % args.scales + args.tag += '@iteration=%d' % args.iteration + + set_seed(args.seed) + log_func = lambda string='': print(string) + + ################################################################################### + # Transform, Dataset, DataLoader + ################################################################################### + imagenet_mean = [0.485, 0.456, 0.406] + imagenet_std = [0.229, 0.224, 0.225] + + normalize_fn = Normalize(imagenet_mean, imagenet_std) + + # for mIoU + meta_dic = read_json('./data/VOC_2012.json') + + ################################################################################### + # Network + ################################################################################### + if args.architecture == 'DeepLabv3+': + model = DeepLabv3_Plus(args.backbone, num_classes=meta_dic['classes'] + 1, mode=args.mode, + use_group_norm=args.use_gn) + elif args.architecture == 'Seg_Model': + model = Seg_Model(args.backbone, num_classes=meta_dic['classes'] + 1) + elif args.architecture == 'CSeg_Model': + model = CSeg_Model(args.backbone, num_classes=meta_dic['classes'] + 1) + + model = model.cuda() + model.eval() + + log_func('[i] Architecture is {}'.format(args.architecture)) + log_func('[i] Total Params: %.2fM' % (calculate_parameters(model))) + log_func() + + load_model(model, model_path, parallel=False) + + ################################################################################################# + # Evaluation + ################################################################################################# + eval_timer = Timer() + scales = [float(scale) for scale in args.scales.split(',')] + + model.eval() + eval_timer.tik() + + + def inference(images, image_size): + images = images.cuda() + + logits = model(images) + logits = resize_for_tensors(logits, image_size) + + logits = logits[0] + logits[1].flip(-1) + logits = get_numpy_from_tensor(logits).transpose((1, 2, 0)) + return logits + + + def predict_image(ori_image): + with torch.no_grad(): + ori_w, ori_h = ori_image.size + + cams_list = [] + + for scale in scales: + image = copy.deepcopy(ori_image) + image = image.resize((round(ori_w * scale), round(ori_h * scale)), resample=PIL.Image.BICUBIC) + + image = normalize_fn(image) + image = image.transpose((2, 0, 1)) + + image = torch.from_numpy(image) + flipped_image = image.flip(-1) + + images = torch.stack([image, flipped_image]) + + cams = inference(images, (ori_h, ori_w)) + cams_list.append(cams) + + preds = np.sum(cams_list, axis=0) + preds = F.softmax(torch.from_numpy(preds), dim=-1).numpy() + + if args.iteration > 0: + preds = crf_inference(np.asarray(ori_image), preds.transpose((2, 0, 1)), t=args.iteration) + pred_mask = np.argmax(preds, axis=0) + else: + pred_mask = np.argmax(preds, axis=-1) + + return pred_mask.astype(np.uint8) + + + demo = gr.Interface( + fn=predict_image, + inputs="image", + outputs="image" + ) diff --git a/core/abc_modules.py b/core/abc_modules.py new file mode 100644 index 0000000000000000000000000000000000000000..295f66f3e16564b723576a7c9b9c924b9d85ec72 --- /dev/null +++ b/core/abc_modules.py @@ -0,0 +1,50 @@ + +import math + +import torch +import torch.nn as nn + +from abc import ABC + +class ABC_Model(ABC): + def global_average_pooling_2d(self, x, keepdims=False): + x = torch.mean(x.view(x.size(0), x.size(1), -1), -1) + if keepdims: + x = x.view(x.size(0), x.size(1), 1, 1) + return x + + def initialize(self, modules): + for m in modules: + if isinstance(m, nn.Conv2d): + # n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + # m.weight.data.normal_(0, math.sqrt(2. / n)) + torch.nn.init.kaiming_normal_(m.weight) + + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def get_parameter_groups(self, print_fn=print): + groups = ([], [], [], []) + + for name, value in self.named_parameters(): + # pretrained weights + if 'model' in name: + if 'weight' in name: + # print_fn(f'pretrained weights : {name}') + groups[0].append(value) + else: + # print_fn(f'pretrained bias : {name}') + groups[1].append(value) + + # scracthed weights + else: + if 'weight' in name: + if print_fn is not None: + print_fn(f'scratched weights : {name}') + groups[2].append(value) + else: + if print_fn is not None: + print_fn(f'scratched bias : {name}') + groups[3].append(value) + return groups diff --git a/core/aff_utils.py b/core/aff_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7189dcb715958b7f9b62ac3f0e20ef2bad2382aa --- /dev/null +++ b/core/aff_utils.py @@ -0,0 +1,178 @@ +import torch +import torch.nn.functional as F +import numpy as np + +class PathIndex: + def __init__(self, radius, default_size): + self.radius = radius + self.radius_floor = int(np.ceil(radius) - 1) + + self.search_paths, self.search_dst = self.get_search_paths_dst(self.radius) + self.path_indices, self.src_indices, self.dst_indices = self.get_path_indices(default_size) + + def get_search_paths_dst(self, max_radius=5): + coord_indices_by_length = [[] for _ in range(max_radius * 4)] + + search_dirs = [] + for x in range(1, max_radius): + search_dirs.append((0, x)) + + for y in range(1, max_radius): + for x in range(-max_radius + 1, max_radius): + if x * x + y * y < max_radius ** 2: + search_dirs.append((y, x)) + + for dir in search_dirs: + length_sq = dir[0] ** 2 + dir[1] ** 2 + path_coords = [] + + min_y, max_y = sorted((0, dir[0])) + min_x, max_x = sorted((0, dir[1])) + + for y in range(min_y, max_y + 1): + for x in range(min_x, max_x + 1): + + dist_sq = (dir[0] * x - dir[1] * y) ** 2 / length_sq + + if dist_sq < 1: + path_coords.append([y, x]) + + path_coords.sort(key=lambda x: -abs(x[0]) - abs(x[1])) + path_length = len(path_coords) + + coord_indices_by_length[path_length].append(path_coords) + + path_list_by_length = [np.asarray(v) for v in coord_indices_by_length if v] + path_destinations = np.concatenate([p[:, 0] for p in path_list_by_length], axis=0) + + return path_list_by_length, path_destinations + + def get_path_indices(self, size): + full_indices = np.reshape(np.arange(0, size[0] * size[1], dtype=np.int64), (size[0], size[1])) + + cropped_height = size[0] - self.radius_floor + cropped_width = size[1] - 2 * self.radius_floor + + path_indices = [] + for paths in self.search_paths: + + path_indices_list = [] + for p in paths: + coord_indices_list = [] + + for dy, dx in p: + coord_indices = full_indices[dy:dy + cropped_height, + self.radius_floor + dx:self.radius_floor + dx + cropped_width] + coord_indices = np.reshape(coord_indices, [-1]) + + coord_indices_list.append(coord_indices) + + path_indices_list.append(coord_indices_list) + + path_indices.append(np.array(path_indices_list)) + + src_indices = np.reshape(full_indices[:cropped_height, self.radius_floor:self.radius_floor + cropped_width], -1) + dst_indices = np.concatenate([p[:,0] for p in path_indices], axis=0) + + return path_indices, src_indices, dst_indices + + +def edge_to_affinity(edge, paths_indices): + aff_list = [] + edge = edge.view(edge.size(0), -1) + + for i in range(len(paths_indices)): + if isinstance(paths_indices[i], np.ndarray): + paths_indices[i] = torch.from_numpy(paths_indices[i]) + paths_indices[i] = paths_indices[i].cuda(non_blocking=True) + + for ind in paths_indices: + ind_flat = ind.view(-1) + dist = torch.index_select(edge, dim=-1, index=ind_flat) + dist = dist.view(dist.size(0), ind.size(0), ind.size(1), ind.size(2)) + aff = torch.squeeze(1 - F.max_pool2d(dist, (dist.size(2), 1)), dim=2) + aff_list.append(aff) + aff_cat = torch.cat(aff_list, dim=1) + + return aff_cat + + +def affinity_sparse2dense(affinity_sparse, ind_from, ind_to, n_vertices): + ind_from = torch.from_numpy(ind_from) + ind_to = torch.from_numpy(ind_to) + + affinity_sparse = affinity_sparse.view(-1).cpu() + ind_from = ind_from.repeat(ind_to.size(0)).view(-1) + ind_to = ind_to.view(-1) + + indices = torch.stack([ind_from, ind_to]) + indices_tp = torch.stack([ind_to, ind_from]) + + indices_id = torch.stack([torch.arange(0, n_vertices).long(), torch.arange(0, n_vertices).long()]) + + affinity_dense = torch.sparse.FloatTensor(torch.cat([indices, indices_id, indices_tp], dim=1), + torch.cat([affinity_sparse, torch.ones([n_vertices]), affinity_sparse])).to_dense().cuda() + + return affinity_dense + + +def to_transition_matrix(affinity_dense, beta, times): + scaled_affinity = torch.pow(affinity_dense, beta) + + trans_mat = scaled_affinity / torch.sum(scaled_affinity, dim=0, keepdim=True) + for _ in range(times): + trans_mat = torch.matmul(trans_mat, trans_mat) + + return trans_mat + +def propagate_to_edge(x, edge, radius=5, beta=10, exp_times=8): + height, width = x.shape[-2:] + + hor_padded = width+radius*2 + ver_padded = height+radius + + path_index = PathIndex(radius=radius, default_size=(ver_padded, hor_padded)) + + edge_padded = F.pad(edge, (radius, radius, 0, radius), mode='constant', value=1.0) + sparse_aff = edge_to_affinity(torch.unsqueeze(edge_padded, 0), + path_index.path_indices) + + dense_aff = affinity_sparse2dense(sparse_aff, path_index.src_indices, + path_index.dst_indices, ver_padded * hor_padded) + dense_aff = dense_aff.view(ver_padded, hor_padded, ver_padded, hor_padded) + dense_aff = dense_aff[:-radius, radius:-radius, :-radius, radius:-radius] + dense_aff = dense_aff.reshape(height * width, height * width) + + trans_mat = to_transition_matrix(dense_aff, beta=beta, times=exp_times) + + x = x.view(-1, height, width) * (1 - edge) + + rw = torch.matmul(x.view(-1, height * width), trans_mat) + rw = rw.view(rw.size(0), 1, height, width) + + return rw + +class GetAffinityLabelFromIndices(): + def __init__(self, indices_from, indices_to): + self.indices_from = indices_from + self.indices_to = indices_to + + def __call__(self, segm_map): + segm_map_flat = np.reshape(segm_map, -1) + + segm_label_from = np.expand_dims(segm_map_flat[self.indices_from], axis=0) + segm_label_to = segm_map_flat[self.indices_to] + + valid_label = np.logical_and(np.less(segm_label_from, 21), np.less(segm_label_to, 21)) + + equal_label = np.equal(segm_label_from, segm_label_to) + + pos_affinity_label = np.logical_and(equal_label, valid_label) + + bg_pos_affinity_label = np.logical_and(pos_affinity_label, np.equal(segm_label_from, 0)).astype(np.float32) + fg_pos_affinity_label = np.logical_and(pos_affinity_label, np.greater(segm_label_from, 0)).astype(np.float32) + + neg_affinity_label = np.logical_and(np.logical_not(equal_label), valid_label).astype(np.float32) + + return torch.from_numpy(bg_pos_affinity_label), torch.from_numpy(fg_pos_affinity_label), torch.from_numpy(neg_affinity_label) + diff --git a/core/arch_resnest/resnest.py b/core/arch_resnest/resnest.py new file mode 100644 index 0000000000000000000000000000000000000000..41f2740914cfab7da2c7222234a11545c13f23e1 --- /dev/null +++ b/core/arch_resnest/resnest.py @@ -0,0 +1,71 @@ +##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +## Created by: Hang Zhang +## Email: zhanghang0704@gmail.com +## Copyright (c) 2020 +## +## LICENSE file in the root directory of this source tree +##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +"""ResNeSt models""" + +import torch +from .resnet import ResNet, Bottleneck + +__all__ = ['resnest50', 'resnest101', 'resnest200', 'resnest269'] + +_url_format = 'https://github.com/zhanghang1989/ResNeSt/releases/download/weights_step1/{}-{}.pth' + +_model_sha256 = {name: checksum for checksum, name in [ + ('528c19ca', 'resnest50'), + ('22405ba7', 'resnest101'), + ('75117900', 'resnest200'), + ('0cc87c48', 'resnest269'), + ]} + +def short_hash(name): + if name not in _model_sha256: + raise ValueError('Pretrained model for {name} is not available.'.format(name=name)) + return _model_sha256[name][:8] + +resnest_model_urls = {name: _url_format.format(name, short_hash(name)) for + name in _model_sha256.keys() +} + +def resnest50(pretrained=False, root='~/.encoding/models', **kwargs): + model = ResNet(Bottleneck, [3, 4, 6, 3], + radix=2, groups=1, bottleneck_width=64, + deep_stem=True, stem_width=32, avg_down=True, + avd=True, avd_first=False, **kwargs) + if pretrained: + model.load_state_dict(torch.hub.load_state_dict_from_url( + resnest_model_urls['resnest50'], progress=True, check_hash=True)) + return model + +def resnest101(pretrained=False, root='~/.encoding/models', **kwargs): + model = ResNet(Bottleneck, [3, 4, 23, 3], + radix=2, groups=1, bottleneck_width=64, + deep_stem=True, stem_width=64, avg_down=True, + avd=True, avd_first=False, **kwargs) + if pretrained: + model.load_state_dict(torch.hub.load_state_dict_from_url( + resnest_model_urls['resnest101'], progress=True, check_hash=True)) + return model + +def resnest200(pretrained=False, root='~/.encoding/models', **kwargs): + model = ResNet(Bottleneck, [3, 24, 36, 3], + radix=2, groups=1, bottleneck_width=64, + deep_stem=True, stem_width=64, avg_down=True, + avd=True, avd_first=False, **kwargs) + if pretrained: + model.load_state_dict(torch.hub.load_state_dict_from_url( + resnest_model_urls['resnest200'], progress=True, check_hash=True)) + return model + +def resnest269(pretrained=False, root='~/.encoding/models', **kwargs): + model = ResNet(Bottleneck, [3, 30, 48, 8], + radix=2, groups=1, bottleneck_width=64, + deep_stem=True, stem_width=64, avg_down=True, + avd=True, avd_first=False, **kwargs) + if pretrained: + model.load_state_dict(torch.hub.load_state_dict_from_url( + resnest_model_urls['resnest269'], progress=True, check_hash=True)) + return model diff --git a/core/arch_resnest/resnet.py b/core/arch_resnest/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..643e9285216ecfa2aa6cafd857abc1ab6682bb50 --- /dev/null +++ b/core/arch_resnest/resnet.py @@ -0,0 +1,308 @@ +##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +## Created by: Hang Zhang +## Email: zhanghang0704@gmail.com +## Copyright (c) 2020 +## +## LICENSE file in the root directory of this source tree +##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +"""ResNet variants""" +import math +import torch +import torch.nn as nn + +from .splat import SplAtConv2d + +__all__ = ['ResNet', 'Bottleneck'] + +class DropBlock2D(object): + def __init__(self, *args, **kwargs): + raise NotImplementedError + +class GlobalAvgPool2d(nn.Module): + def __init__(self): + """Global average pooling over the input's spatial dimensions""" + super(GlobalAvgPool2d, self).__init__() + + def forward(self, inputs): + return nn.functional.adaptive_avg_pool2d(inputs, 1).view(inputs.size(0), -1) + +class Bottleneck(nn.Module): + """ResNet Bottleneck + """ + # pylint: disable=unused-argument + expansion = 4 + def __init__(self, inplanes, planes, stride=1, downsample=None, + radix=1, cardinality=1, bottleneck_width=64, + avd=False, avd_first=False, dilation=1, is_first=False, + rectified_conv=False, rectify_avg=False, + norm_layer=None, dropblock_prob=0.0, last_gamma=False): + super(Bottleneck, self).__init__() + group_width = int(planes * (bottleneck_width / 64.)) * cardinality + self.conv1 = nn.Conv2d(inplanes, group_width, kernel_size=1, bias=False) + self.bn1 = norm_layer(group_width) + self.dropblock_prob = dropblock_prob + self.radix = radix + self.avd = avd and (stride > 1 or is_first) + self.avd_first = avd_first + + if self.avd: + self.avd_layer = nn.AvgPool2d(3, stride, padding=1) + stride = 1 + + if dropblock_prob > 0.0: + self.dropblock1 = DropBlock2D(dropblock_prob, 3) + if radix == 1: + self.dropblock2 = DropBlock2D(dropblock_prob, 3) + self.dropblock3 = DropBlock2D(dropblock_prob, 3) + + if radix >= 1: + self.conv2 = SplAtConv2d( + group_width, group_width, kernel_size=3, + stride=stride, padding=dilation, + dilation=dilation, groups=cardinality, bias=False, + radix=radix, rectify=rectified_conv, + rectify_avg=rectify_avg, + norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + elif rectified_conv: + from rfconv import RFConv2d + self.conv2 = RFConv2d( + group_width, group_width, kernel_size=3, stride=stride, + padding=dilation, dilation=dilation, + groups=cardinality, bias=False, + average_mode=rectify_avg) + self.bn2 = norm_layer(group_width) + else: + self.conv2 = nn.Conv2d( + group_width, group_width, kernel_size=3, stride=stride, + padding=dilation, dilation=dilation, + groups=cardinality, bias=False) + self.bn2 = norm_layer(group_width) + + self.conv3 = nn.Conv2d( + group_width, planes * 4, kernel_size=1, bias=False) + self.bn3 = norm_layer(planes*4) + + if last_gamma: + from torch.nn.init import zeros_ + zeros_(self.bn3.weight) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.dilation = dilation + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + if self.dropblock_prob > 0.0: + out = self.dropblock1(out) + out = self.relu(out) + + if self.avd and self.avd_first: + out = self.avd_layer(out) + + out = self.conv2(out) + if self.radix == 0: + out = self.bn2(out) + if self.dropblock_prob > 0.0: + out = self.dropblock2(out) + out = self.relu(out) + + if self.avd and not self.avd_first: + out = self.avd_layer(out) + + out = self.conv3(out) + out = self.bn3(out) + if self.dropblock_prob > 0.0: + out = self.dropblock3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + +class ResNet(nn.Module): + """ResNet Variants + + Parameters + ---------- + block : Block + Class for the residual block. Options are BasicBlockV1, BottleneckV1. + layers : list of int + Numbers of layers in each block + classes : int, default 1000 + Number of classification classes. + dilated : bool, default False + Applying dilation strategy to pretrained ResNet yielding a stride-8 model, + typically used in Semantic Segmentation. + norm_layer : object + Normalization layer used in backbone network (default: :class:`mxnet.gluon.nn.BatchNorm`; + for Synchronized Cross-GPU BachNormalization). + + Reference: + + - He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. + + - Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." + """ + # pylint: disable=unused-variable + def __init__(self, block, layers, radix=1, groups=1, bottleneck_width=64, + num_classes=1000, dilated=False, dilation=1, + deep_stem=False, stem_width=64, avg_down=False, + rectified_conv=False, rectify_avg=False, + avd=False, avd_first=False, + final_drop=0.0, dropblock_prob=0, + last_gamma=False, norm_layer=nn.BatchNorm2d): + self.cardinality = groups + self.bottleneck_width = bottleneck_width + # ResNet-D params + self.inplanes = stem_width*2 if deep_stem else 64 + self.avg_down = avg_down + self.last_gamma = last_gamma + # ResNeSt params + self.radix = radix + self.avd = avd + self.avd_first = avd_first + + super(ResNet, self).__init__() + self.rectified_conv = rectified_conv + self.rectify_avg = rectify_avg + if rectified_conv: + from rfconv import RFConv2d + conv_layer = RFConv2d + else: + conv_layer = nn.Conv2d + conv_kwargs = {'average_mode': rectify_avg} if rectified_conv else {} + if deep_stem: + self.conv1 = nn.Sequential( + conv_layer(3, stem_width, kernel_size=3, stride=2, padding=1, bias=False, **conv_kwargs), + norm_layer(stem_width), + nn.ReLU(inplace=True), + conv_layer(stem_width, stem_width, kernel_size=3, stride=1, padding=1, bias=False, **conv_kwargs), + norm_layer(stem_width), + nn.ReLU(inplace=True), + conv_layer(stem_width, stem_width*2, kernel_size=3, stride=1, padding=1, bias=False, **conv_kwargs), + ) + else: + self.conv1 = conv_layer(3, 64, kernel_size=7, stride=2, padding=3, + bias=False, **conv_kwargs) + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0], norm_layer=norm_layer, is_first=False) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2, norm_layer=norm_layer) + if dilated or dilation == 4: + self.layer3 = self._make_layer(block, 256, layers[2], stride=1, + dilation=2, norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + self.layer4 = self._make_layer(block, 512, layers[3], stride=1, + dilation=4, norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + elif dilation==2: + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + dilation=1, norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + self.layer4 = self._make_layer(block, 512, layers[3], stride=1, + dilation=2, norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + else: + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2, + norm_layer=norm_layer, + dropblock_prob=dropblock_prob) + + self.avgpool = GlobalAvgPool2d() + self.drop = nn.Dropout(final_drop) if final_drop > 0.0 else None + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + elif isinstance(m, norm_layer): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1, dilation=1, norm_layer=None, + dropblock_prob=0.0, is_first=True): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + down_layers = [] + if self.avg_down: + if dilation == 1: + down_layers.append(nn.AvgPool2d(kernel_size=stride, stride=stride, + ceil_mode=True, count_include_pad=False)) + else: + down_layers.append(nn.AvgPool2d(kernel_size=1, stride=1, + ceil_mode=True, count_include_pad=False)) + down_layers.append(nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=1, bias=False)) + else: + down_layers.append(nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False)) + down_layers.append(norm_layer(planes * block.expansion)) + downsample = nn.Sequential(*down_layers) + + layers = [] + if dilation == 1 or dilation == 2: + layers.append(block(self.inplanes, planes, stride, downsample=downsample, + radix=self.radix, cardinality=self.cardinality, + bottleneck_width=self.bottleneck_width, + avd=self.avd, avd_first=self.avd_first, + dilation=1, is_first=is_first, rectified_conv=self.rectified_conv, + rectify_avg=self.rectify_avg, + norm_layer=norm_layer, dropblock_prob=dropblock_prob, + last_gamma=self.last_gamma)) + elif dilation == 4: + layers.append(block(self.inplanes, planes, stride, downsample=downsample, + radix=self.radix, cardinality=self.cardinality, + bottleneck_width=self.bottleneck_width, + avd=self.avd, avd_first=self.avd_first, + dilation=2, is_first=is_first, rectified_conv=self.rectified_conv, + rectify_avg=self.rectify_avg, + norm_layer=norm_layer, dropblock_prob=dropblock_prob, + last_gamma=self.last_gamma)) + else: + raise RuntimeError("=> unknown dilation size: {}".format(dilation)) + + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes, + radix=self.radix, cardinality=self.cardinality, + bottleneck_width=self.bottleneck_width, + avd=self.avd, avd_first=self.avd_first, + dilation=dilation, rectified_conv=self.rectified_conv, + rectify_avg=self.rectify_avg, + norm_layer=norm_layer, dropblock_prob=dropblock_prob, + last_gamma=self.last_gamma)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + # print(x.size()) + + x = self.avgpool(x) + #x = x.view(x.size(0), -1) + x = torch.flatten(x, 1) + if self.drop: + x = self.drop(x) + x = self.fc(x) + + return x diff --git a/core/arch_resnest/splat.py b/core/arch_resnest/splat.py new file mode 100644 index 0000000000000000000000000000000000000000..ed4d1a9396caf0be7ff152b2439c3fbfcc2876e8 --- /dev/null +++ b/core/arch_resnest/splat.py @@ -0,0 +1,99 @@ +"""Split-Attention""" + +import torch +from torch import nn +import torch.nn.functional as F +from torch.nn import Conv2d, Module, Linear, BatchNorm2d, ReLU +from torch.nn.modules.utils import _pair + +__all__ = ['SplAtConv2d'] + +class SplAtConv2d(Module): + """Split-Attention Conv2d + """ + def __init__(self, in_channels, channels, kernel_size, stride=(1, 1), padding=(0, 0), + dilation=(1, 1), groups=1, bias=True, + radix=2, reduction_factor=4, + rectify=False, rectify_avg=False, norm_layer=None, + dropblock_prob=0.0, **kwargs): + super(SplAtConv2d, self).__init__() + padding = _pair(padding) + self.rectify = rectify and (padding[0] > 0 or padding[1] > 0) + self.rectify_avg = rectify_avg + inter_channels = max(in_channels*radix//reduction_factor, 32) + self.radix = radix + self.cardinality = groups + self.channels = channels + self.dropblock_prob = dropblock_prob + if self.rectify: + from rfconv import RFConv2d + self.conv = RFConv2d(in_channels, channels*radix, kernel_size, stride, padding, dilation, + groups=groups*radix, bias=bias, average_mode=rectify_avg, **kwargs) + else: + self.conv = Conv2d(in_channels, channels*radix, kernel_size, stride, padding, dilation, + groups=groups*radix, bias=bias, **kwargs) + self.use_bn = norm_layer is not None + if self.use_bn: + self.bn0 = norm_layer(channels*radix) + self.relu = ReLU(inplace=True) + self.fc1 = Conv2d(channels, inter_channels, 1, groups=self.cardinality) + if self.use_bn: + self.bn1 = norm_layer(inter_channels) + self.fc2 = Conv2d(inter_channels, channels*radix, 1, groups=self.cardinality) + if dropblock_prob > 0.0: + self.dropblock = DropBlock2D(dropblock_prob, 3) + self.rsoftmax = rSoftMax(radix, groups) + + def forward(self, x): + x = self.conv(x) + if self.use_bn: + x = self.bn0(x) + if self.dropblock_prob > 0.0: + x = self.dropblock(x) + x = self.relu(x) + + batch, rchannel = x.shape[:2] + if self.radix > 1: + if torch.__version__ < '1.5': + splited = torch.split(x, int(rchannel//self.radix), dim=1) + else: + splited = torch.split(x, rchannel//self.radix, dim=1) + gap = sum(splited) + else: + gap = x + gap = F.adaptive_avg_pool2d(gap, 1) + gap = self.fc1(gap) + + if self.use_bn: + gap = self.bn1(gap) + gap = self.relu(gap) + + atten = self.fc2(gap) + atten = self.rsoftmax(atten).view(batch, -1, 1, 1) + + if self.radix > 1: + if torch.__version__ < '1.5': + attens = torch.split(atten, int(rchannel//self.radix), dim=1) + else: + attens = torch.split(atten, rchannel//self.radix, dim=1) + out = sum([att*split for (att, split) in zip(attens, splited)]) + else: + out = atten * x + return out.contiguous() + +class rSoftMax(nn.Module): + def __init__(self, radix, cardinality): + super().__init__() + self.radix = radix + self.cardinality = cardinality + + def forward(self, x): + batch = x.size(0) + if self.radix > 1: + x = x.view(batch, self.cardinality, self.radix, -1).transpose(1, 2) + x = F.softmax(x, dim=1) + x = x.reshape(batch, -1) + else: + x = torch.sigmoid(x) + return x + diff --git a/core/arch_resnet/resnet.py b/core/arch_resnet/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..435b9621fd7301d6fc27b0da7e67e39a1926e469 --- /dev/null +++ b/core/arch_resnet/resnet.py @@ -0,0 +1,157 @@ +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.model_zoo as model_zoo + +urls_dic = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + +layers_dic = { + 'resnet18' : [2, 2, 2, 2], + 'resnet34' : [3, 4, 6, 3], + 'resnet50' : [3, 4, 6, 3], + 'resnet101' : [3, 4, 23, 3], + 'resnet152' : [3, 8, 36, 3] +} + +def conv3x3(in_planes: int, out_planes: int, stride: int = 1, groups: int = 1, dilation: int = 1) -> nn.Conv2d: + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=dilation, groups=groups, bias=False, dilation=dilation) + +def conv1x1(in_planes: int, out_planes: int, stride: int = 1) -> nn.Conv2d: + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + +class BasicBlock(nn.Module): + expansion: int = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None, dilation=1, batch_norm_fn=nn.BatchNorm2d): + super(BasicBlock, self).__init__() + + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = batch_norm_fn(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = batch_norm_fn(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None, dilation=1, batch_norm_fn=nn.BatchNorm2d): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = batch_norm_fn(planes) + + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, + padding=dilation, bias=False, dilation=dilation) + self.bn2 = batch_norm_fn(planes) + + self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) + self.bn3 = batch_norm_fn(planes * 4) + + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + self.dilation = dilation + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + +class ResNet(nn.Module): + + def __init__(self, block, layers, strides=(2, 2, 2, 2), dilations=(1, 1, 1, 1), batch_norm_fn=nn.BatchNorm2d): + self.batch_norm_fn = batch_norm_fn + + self.inplanes = 64 + super(ResNet, self).__init__() + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=strides[0], padding=3, + bias=False) + self.bn1 = self.batch_norm_fn(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0], stride=1, dilation=dilations[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=strides[1], dilation=dilations[1]) + self.layer3 = self._make_layer(block, 256, layers[2], stride=strides[2], dilation=dilations[2]) + self.layer4 = self._make_layer(block, 512, layers[3], stride=strides[3], dilation=dilations[3]) + self.inplanes = 1024 + + #self.avgpool = nn.AvgPool2d(7, stride=1) + #self.fc = nn.Linear(512 * block.expansion, 1000) + + def _make_layer(self, block, planes, blocks, stride=1, dilation=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False), + self.batch_norm_fn(planes * block.expansion), + ) + + layers = [block(self.inplanes, planes, stride, downsample, dilation=1, batch_norm_fn=self.batch_norm_fn)] + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes, dilation=dilation, batch_norm_fn=self.batch_norm_fn)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x + diff --git a/core/datasets.py b/core/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..6ff04310d1790f9716e786807405420b8cb83163 --- /dev/null +++ b/core/datasets.py @@ -0,0 +1,239 @@ +import os +import cv2 +import glob +import torch + +import math +import imageio +import numpy as np + +from PIL import Image + +from core.aff_utils import * + +from tools.ai.augment_utils import * +from tools.ai.torch_utils import one_hot_embedding + +from tools.general.xml_utils import read_xml +from tools.general.json_utils import read_json +from tools.dataset.voc_utils import get_color_map_dic + +class Iterator: + def __init__(self, loader): + self.loader = loader + self.init() + + def init(self): + self.iterator = iter(self.loader) + + def get(self): + try: + data = next(self.iterator) + except StopIteration: + self.init() + data = next(self.iterator) + + return data + +class VOC_Dataset(torch.utils.data.Dataset): + def __init__(self, root_dir, domain, with_id=False, with_tags=False, with_mask=False): + self.root_dir = root_dir + + self.image_dir = self.root_dir + 'JPEGImages/' + self.xml_dir = self.root_dir + 'Annotations/' + self.mask_dir = self.root_dir + 'SegmentationClass/' + + self.image_id_list = [image_id.strip() for image_id in open('./data/%s.txt'%domain).readlines()] + + self.with_id = with_id + self.with_tags = with_tags + self.with_mask = with_mask + + def __len__(self): + return len(self.image_id_list) + + def get_image(self, image_id): + image = Image.open(self.image_dir + image_id + '.jpg').convert('RGB') + return image + + def get_mask(self, image_id): + mask_path = self.mask_dir + image_id + '.png' + if os.path.isfile(mask_path): + mask = Image.open(mask_path) + else: + mask = None + return mask + + def get_tags(self, image_id): + _, tags = read_xml(self.xml_dir + image_id + '.xml') + return tags + + def __getitem__(self, index): + image_id = self.image_id_list[index] + + data_list = [self.get_image(image_id)] + + if self.with_id: + data_list.append(image_id) + + if self.with_tags: + data_list.append(self.get_tags(image_id)) + + if self.with_mask: + data_list.append(self.get_mask(image_id)) + + return data_list + +class VOC_Dataset_For_Classification(VOC_Dataset): + def __init__(self, root_dir, domain, transform=None): + super().__init__(root_dir, domain, with_tags=True) + self.transform = transform + + data = read_json('./data/VOC_2012.json') + + self.class_dic = data['class_dic'] + self.classes = data['classes'] + + def __getitem__(self, index): + image, tags = super().__getitem__(index) + + if self.transform is not None: + image = self.transform(image) + + label = one_hot_embedding([self.class_dic[tag] for tag in tags], self.classes) + return image, label + +class VOC_Dataset_For_Segmentation(VOC_Dataset): + def __init__(self, root_dir, domain, transform=None): + super().__init__(root_dir, domain, with_mask=True) + self.transform = transform + + cmap_dic, _, class_names = get_color_map_dic() + self.colors = np.asarray([cmap_dic[class_name] for class_name in class_names]) + + def __getitem__(self, index): + image, mask = super().__getitem__(index) + + if self.transform is not None: + input_dic = {'image':image, 'mask':mask} + output_dic = self.transform(input_dic) + + image = output_dic['image'] + mask = output_dic['mask'] + + return image, mask + +class VOC_Dataset_For_Evaluation(VOC_Dataset): + def __init__(self, root_dir, domain, transform=None): + super().__init__(root_dir, domain, with_id=True, with_mask=True) + self.transform = transform + + cmap_dic, _, class_names = get_color_map_dic() + self.colors = np.asarray([cmap_dic[class_name] for class_name in class_names]) + + def __getitem__(self, index): + image, image_id, mask = super().__getitem__(index) + + if self.transform is not None: + input_dic = {'image':image, 'mask':mask} + output_dic = self.transform(input_dic) + + image = output_dic['image'] + mask = output_dic['mask'] + + return image, image_id, mask + +class VOC_Dataset_For_WSSS(VOC_Dataset): + def __init__(self, root_dir, domain, pred_dir, transform=None): + super().__init__(root_dir, domain, with_id=True) + self.pred_dir = pred_dir + self.transform = transform + + cmap_dic, _, class_names = get_color_map_dic() + self.colors = np.asarray([cmap_dic[class_name] for class_name in class_names]) + + def __getitem__(self, index): + image, image_id = super().__getitem__(index) + mask = Image.open(self.pred_dir + image_id + '.png') + + if self.transform is not None: + input_dic = {'image':image, 'mask':mask} + output_dic = self.transform(input_dic) + + image = output_dic['image'] + mask = output_dic['mask'] + + return image, mask + +class VOC_Dataset_For_Testing_CAM(VOC_Dataset): + def __init__(self, root_dir, domain, transform=None): + super().__init__(root_dir, domain, with_tags=True, with_mask=True) + self.transform = transform + + cmap_dic, _, class_names = get_color_map_dic() + self.colors = np.asarray([cmap_dic[class_name] for class_name in class_names]) + + data = read_json('./data/VOC_2012.json') + + self.class_dic = data['class_dic'] + self.classes = data['classes'] + + def __getitem__(self, index): + image, tags, mask = super().__getitem__(index) + + if self.transform is not None: + input_dic = {'image':image, 'mask':mask} + output_dic = self.transform(input_dic) + + image = output_dic['image'] + mask = output_dic['mask'] + + label = one_hot_embedding([self.class_dic[tag] for tag in tags], self.classes) + return image, label, mask + +class VOC_Dataset_For_Making_CAM(VOC_Dataset): + def __init__(self, root_dir, domain): + super().__init__(root_dir, domain, with_id=True, with_tags=True, with_mask=True) + + cmap_dic, _, class_names = get_color_map_dic() + self.colors = np.asarray([cmap_dic[class_name] for class_name in class_names]) + + data = read_json('./data/VOC_2012.json') + + self.class_names = np.asarray(class_names[1:21]) + self.class_dic = data['class_dic'] + self.classes = data['classes'] + + def __getitem__(self, index): + image, image_id, tags, mask = super().__getitem__(index) + + label = one_hot_embedding([self.class_dic[tag] for tag in tags], self.classes) + return image, image_id, label, mask + +class VOC_Dataset_For_Affinity(VOC_Dataset): + def __init__(self, root_dir, domain, path_index, label_dir, transform=None): + super().__init__(root_dir, domain, with_id=True) + + data = read_json('./data/VOC_2012.json') + + self.class_dic = data['class_dic'] + self.classes = data['classes'] + + self.transform = transform + + self.label_dir = label_dir + self.path_index = path_index + + self.extract_aff_lab_func = GetAffinityLabelFromIndices(self.path_index.src_indices, self.path_index.dst_indices) + + def __getitem__(self, idx): + image, image_id = super().__getitem__(idx) + + label = imageio.imread(self.label_dir + image_id + '.png') + label = Image.fromarray(label) + + output_dic = self.transform({'image':image, 'mask':label}) + image, label = output_dic['image'], output_dic['mask'] + + return image, self.extract_aff_lab_func(label) + diff --git a/core/deeplab_utils.py b/core/deeplab_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..eb75e55ae44d3167cf3e85684cdc16267b156845 --- /dev/null +++ b/core/deeplab_utils.py @@ -0,0 +1,126 @@ +# Copyright (C) 2021 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import torch +import torch.nn as nn +import torch.nn.functional as F + +class ASPPModule(nn.Module): + def __init__(self, inplanes, planes, kernel_size, padding, dilation, norm_fn=None): + super().__init__() + self.atrous_conv = nn.Conv2d(inplanes, planes, kernel_size=kernel_size, stride=1, padding=padding, dilation=dilation, bias=False) + self.bn = norm_fn(planes) + self.relu = nn.ReLU(inplace=True) + + self.initialize([self.atrous_conv, self.bn]) + + def forward(self, x): + x = self.atrous_conv(x) + x = self.bn(x) + return self.relu(x) + + def initialize(self, modules): + for m in modules: + if isinstance(m, nn.Conv2d): + torch.nn.init.kaiming_normal_(m.weight) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + +class ASPP(nn.Module): + def __init__(self, output_stride, norm_fn): + super().__init__() + + inplanes = 2048 + + if output_stride == 16: + dilations = [1, 6, 12, 18] + elif output_stride == 8: + dilations = [1, 12, 24, 36] + + self.aspp1 = ASPPModule(inplanes, 256, 1, padding=0, dilation=dilations[0], norm_fn=norm_fn) + self.aspp2 = ASPPModule(inplanes, 256, 3, padding=dilations[1], dilation=dilations[1], norm_fn=norm_fn) + self.aspp3 = ASPPModule(inplanes, 256, 3, padding=dilations[2], dilation=dilations[2], norm_fn=norm_fn) + self.aspp4 = ASPPModule(inplanes, 256, 3, padding=dilations[3], dilation=dilations[3], norm_fn=norm_fn) + + self.global_avg_pool = nn.Sequential( + nn.AdaptiveAvgPool2d((1, 1)), + nn.Conv2d(inplanes, 256, 1, stride=1, bias=False), + norm_fn(256), + nn.ReLU(inplace=True), + ) + + self.conv1 = nn.Conv2d(1280, 256, 1, bias=False) + self.bn1 = norm_fn(256) + self.relu = nn.ReLU(inplace=True) + self.dropout = nn.Dropout(0.5) + + self.initialize([self.conv1, self.bn1] + list(self.global_avg_pool.modules())) + + def forward(self, x): + x1 = self.aspp1(x) + x2 = self.aspp2(x) + x3 = self.aspp3(x) + x4 = self.aspp4(x) + + x5 = self.global_avg_pool(x) + x5 = F.interpolate(x5, size=x4.size()[2:], mode='bilinear', align_corners=True) + + x = torch.cat((x1, x2, x3, x4, x5), dim=1) + + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.dropout(x) + + return x + + def initialize(self, modules): + for m in modules: + if isinstance(m, nn.Conv2d): + torch.nn.init.kaiming_normal_(m.weight) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + +class Decoder(nn.Module): + def __init__(self, num_classes, low_level_inplanes, norm_fn): + super().__init__() + + self.conv1 = nn.Conv2d(low_level_inplanes, 48, 1, bias=False) + self.bn1 = norm_fn(48) + self.relu = nn.ReLU(inplace=True) + + self.classifier = nn.Sequential( + nn.Conv2d(304, 256, kernel_size=3, stride=1, padding=1, bias=False), + norm_fn(256), + nn.ReLU(inplace=True), + nn.Dropout(0.5), + + nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1, bias=False), + norm_fn(256), + nn.ReLU(inplace=True), + nn.Dropout(0.1), + nn.Conv2d(256, num_classes, kernel_size=1, stride=1) + ) + + self.initialize([self.conv1, self.bn1] + list(self.classifier.modules())) + + def forward(self, x, x_low_level): + x_low_level = self.conv1(x_low_level) + x_low_level = self.bn1(x_low_level) + x_low_level = self.relu(x_low_level) + + x = F.interpolate(x, size=x_low_level.size()[2:], mode='bilinear', align_corners=True) + x = torch.cat((x, x_low_level), dim=1) + x = self.classifier(x) + + return x + + def initialize(self, modules): + for m in modules: + if isinstance(m, nn.Conv2d): + torch.nn.init.kaiming_normal_(m.weight) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() \ No newline at end of file diff --git a/core/networks.py b/core/networks.py new file mode 100644 index 0000000000000000000000000000000000000000..00776d061787aeec25a961328bf39586913d5fa9 --- /dev/null +++ b/core/networks.py @@ -0,0 +1,355 @@ +# Copyright (C) 2021 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from torchvision import models +import torch.utils.model_zoo as model_zoo + +from .arch_resnet import resnet +from .arch_resnest import resnest +from .abc_modules import ABC_Model + +from .deeplab_utils import ASPP, Decoder +from .aff_utils import PathIndex +from .puzzle_utils import tile_features, merge_features + +from tools.ai.torch_utils import resize_for_tensors + +####################################################################### +# Normalization +####################################################################### +from .sync_batchnorm.batchnorm import SynchronizedBatchNorm2d + +class FixedBatchNorm(nn.BatchNorm2d): + def forward(self, x): + return F.batch_norm(x, self.running_mean, self.running_var, self.weight, self.bias, training=False, eps=self.eps) + +def group_norm(features): + return nn.GroupNorm(4, features) +####################################################################### + +class Backbone(nn.Module, ABC_Model): + def __init__(self, model_name, state_path, num_classes=20, mode='fix', segmentation=False): + super().__init__() + + self.mode = mode + + if self.mode == 'fix': + self.norm_fn = FixedBatchNorm + else: + self.norm_fn = nn.BatchNorm2d + + if 'resnet' in model_name: + self.model = resnet.ResNet(resnet.Bottleneck, resnet.layers_dic[model_name], strides=(2, 2, 2, 1), batch_norm_fn=self.norm_fn) + + state_dict = torch.load(state_path) + self.model.load_state_dict(state_dict, strict=False) + else: + if segmentation: + dilation, dilated = 4, True + else: + dilation, dilated = 2, False + + self.model = eval("resnest." + model_name)(pretrained=True, dilated=dilated, dilation=dilation, norm_layer=self.norm_fn) + + del self.model.avgpool + del self.model.fc + + self.stage1 = nn.Sequential(self.model.conv1, + self.model.bn1, + self.model.relu, + self.model.maxpool) + self.stage2 = nn.Sequential(self.model.layer1) + self.stage3 = nn.Sequential(self.model.layer2) + self.stage4 = nn.Sequential(self.model.layer3) + self.stage5 = nn.Sequential(self.model.layer4) + +class Classifier(Backbone): + def __init__(self, model_name, state_path, num_classes=20, mode='fix'): + super().__init__(model_name, state_path, num_classes, mode) + + self.classifier = nn.Conv2d(2048, num_classes, 1, bias=False) + self.num_classes = num_classes + + self.initialize([self.classifier]) + + def forward(self, x, with_cam=False): + x = self.stage1(x) + x = self.stage2(x) + x = self.stage3(x) + x = self.stage4(x) + x = self.stage5(x) + + if with_cam: + features = self.classifier(x) + logits = self.global_average_pooling_2d(features) + return logits, features + else: + x = self.global_average_pooling_2d(x, keepdims=True) + logits = self.classifier(x).view(-1, self.num_classes) + return logits + +class Classifier_For_Positive_Pooling(Backbone): + def __init__(self, model_name, num_classes=20, mode='fix'): + super().__init__(model_name, num_classes, mode) + + self.classifier = nn.Conv2d(2048, num_classes, 1, bias=False) + self.num_classes = num_classes + + self.initialize([self.classifier]) + + def forward(self, x, with_cam=False): + x = self.stage1(x) + x = self.stage2(x) + x = self.stage3(x) + x = self.stage4(x) + x = self.stage5(x) + + if with_cam: + features = self.classifier(x) + logits = self.global_average_pooling_2d(features) + return logits, features + else: + x = self.global_average_pooling_2d(x, keepdims=True) + logits = self.classifier(x).view(-1, self.num_classes) + return logits + +class Classifier_For_Puzzle(Classifier): + def __init__(self, model_name, num_classes=20, mode='fix'): + super().__init__(model_name, num_classes, mode) + + def forward(self, x, num_pieces=1, level=-1): + batch_size = x.size()[0] + + output_dic = {} + layers = [self.stage1, self.stage2, self.stage3, self.stage4, self.stage5, self.classifier] + + for l, layer in enumerate(layers): + l += 1 + if level == l: + x = tile_features(x, num_pieces) + + x = layer(x) + output_dic['stage%d'%l] = x + + output_dic['logits'] = self.global_average_pooling_2d(output_dic['stage6']) + + for l in range(len(layers)): + l += 1 + if l >= level: + output_dic['stage%d'%l] = merge_features(output_dic['stage%d'%l], num_pieces, batch_size) + + if level is not None: + output_dic['merged_logits'] = self.global_average_pooling_2d(output_dic['stage6']) + + return output_dic + +class AffinityNet(Backbone): + def __init__(self, model_name, path_index=None): + super().__init__(model_name, None, 'fix') + + if '50' in model_name: + fc_edge1_features = 64 + else: + fc_edge1_features = 128 + + self.fc_edge1 = nn.Sequential( + nn.Conv2d(fc_edge1_features, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.ReLU(inplace=True), + ) + self.fc_edge2 = nn.Sequential( + nn.Conv2d(256, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.ReLU(inplace=True), + ) + self.fc_edge3 = nn.Sequential( + nn.Conv2d(512, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=2, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge4 = nn.Sequential( + nn.Conv2d(1024, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge5 = nn.Sequential( + nn.Conv2d(2048, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge6 = nn.Conv2d(160, 1, 1, bias=True) + + self.backbone = nn.ModuleList([self.stage1, self.stage2, self.stage3, self.stage4, self.stage5]) + self.edge_layers = nn.ModuleList([self.fc_edge1, self.fc_edge2, self.fc_edge3, self.fc_edge4, self.fc_edge5, self.fc_edge6]) + + if path_index is not None: + self.path_index = path_index + self.n_path_lengths = len(self.path_index.path_indices) + for i, pi in enumerate(self.path_index.path_indices): + self.register_buffer("path_indices_" + str(i), torch.from_numpy(pi)) + + def train(self, mode=True): + super().train(mode) + self.backbone.eval() + + def forward(self, x, with_affinity=False): + x1 = self.stage1(x).detach() + x2 = self.stage2(x1).detach() + x3 = self.stage3(x2).detach() + x4 = self.stage4(x3).detach() + x5 = self.stage5(x4).detach() + + edge1 = self.fc_edge1(x1) + edge2 = self.fc_edge2(x2) + edge3 = self.fc_edge3(x3)[..., :edge2.size(2), :edge2.size(3)] + edge4 = self.fc_edge4(x4)[..., :edge2.size(2), :edge2.size(3)] + edge5 = self.fc_edge5(x5)[..., :edge2.size(2), :edge2.size(3)] + + edge = self.fc_edge6(torch.cat([edge1, edge2, edge3, edge4, edge5], dim=1)) + + if with_affinity: + return edge, self.to_affinity(torch.sigmoid(edge)) + else: + return edge + + def get_edge(self, x, image_size=512, stride=4): + feat_size = (x.size(2)-1)//stride+1, (x.size(3)-1)//stride+1 + + x = F.pad(x, [0, image_size-x.size(3), 0, image_size-x.size(2)]) + edge_out = self.forward(x) + edge_out = edge_out[..., :feat_size[0], :feat_size[1]] + edge_out = torch.sigmoid(edge_out[0]/2 + edge_out[1].flip(-1)/2) + + return edge_out + + """ + aff = self.to_affinity(torch.sigmoid(edge_out)) + pos_aff_loss = (-1) * torch.log(aff + 1e-5) + neg_aff_loss = (-1) * torch.log(1. + 1e-5 - aff) + """ + def to_affinity(self, edge): + aff_list = [] + edge = edge.view(edge.size(0), -1) + + for i in range(self.n_path_lengths): + ind = self._buffers["path_indices_" + str(i)] + ind_flat = ind.view(-1) + dist = torch.index_select(edge, dim=-1, index=ind_flat) + dist = dist.view(dist.size(0), ind.size(0), ind.size(1), ind.size(2)) + aff = torch.squeeze(1 - F.max_pool2d(dist, (dist.size(2), 1)), dim=2) + aff_list.append(aff) + aff_cat = torch.cat(aff_list, dim=1) + return aff_cat + +class DeepLabv3_Plus(Backbone): + def __init__(self, model_name, num_classes=21, mode='fix', use_group_norm=False): + super().__init__(model_name, num_classes, mode, segmentation=False) + + if use_group_norm: + norm_fn_for_extra_modules = group_norm + else: + norm_fn_for_extra_modules = self.norm_fn + + self.aspp = ASPP(output_stride=16, norm_fn=norm_fn_for_extra_modules) + self.decoder = Decoder(num_classes, 256, norm_fn_for_extra_modules) + + def forward(self, x, with_cam=False): + inputs = x + + x = self.stage1(x) + x = self.stage2(x) + x_low_level = x + + x = self.stage3(x) + x = self.stage4(x) + x = self.stage5(x) + + x = self.aspp(x) + x = self.decoder(x, x_low_level) + x = resize_for_tensors(x, inputs.size()[2:], align_corners=True) + + return x + +class Seg_Model(Backbone): + def __init__(self, model_name, num_classes=21): + super().__init__(model_name, num_classes, mode='fix', segmentation=False) + + self.classifier = nn.Conv2d(2048, num_classes, 1, bias=False) + + def forward(self, inputs): + x = self.stage1(inputs) + x = self.stage2(x) + x = self.stage3(x) + x = self.stage4(x) + x = self.stage5(x) + + logits = self.classifier(x) + # logits = resize_for_tensors(logits, inputs.size()[2:], align_corners=False) + + return logits + +class CSeg_Model(Backbone): + def __init__(self, model_name, num_classes=21): + super().__init__(model_name, num_classes, 'fix') + + if '50' in model_name: + fc_edge1_features = 64 + else: + fc_edge1_features = 128 + + self.fc_edge1 = nn.Sequential( + nn.Conv2d(fc_edge1_features, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.ReLU(inplace=True), + ) + self.fc_edge2 = nn.Sequential( + nn.Conv2d(256, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.ReLU(inplace=True), + ) + self.fc_edge3 = nn.Sequential( + nn.Conv2d(512, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=2, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge4 = nn.Sequential( + nn.Conv2d(1024, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge5 = nn.Sequential( + nn.Conv2d(2048, 32, 1, bias=False), + nn.GroupNorm(4, 32), + nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False), + nn.ReLU(inplace=True), + ) + self.fc_edge6 = nn.Conv2d(160, num_classes, 1, bias=True) + + def forward(self, x): + x1 = self.stage1(x) + x2 = self.stage2(x1) + x3 = self.stage3(x2) + x4 = self.stage4(x3) + x5 = self.stage5(x4) + + edge1 = self.fc_edge1(x1) + edge2 = self.fc_edge2(x2) + edge3 = self.fc_edge3(x3)[..., :edge2.size(2), :edge2.size(3)] + edge4 = self.fc_edge4(x4)[..., :edge2.size(2), :edge2.size(3)] + edge5 = self.fc_edge5(x5)[..., :edge2.size(2), :edge2.size(3)] + + logits = self.fc_edge6(torch.cat([edge1, edge2, edge3, edge4, edge5], dim=1)) + # logits = resize_for_tensors(logits, x.size()[2:], align_corners=True) + + return logits diff --git a/core/puzzle_utils.py b/core/puzzle_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0a68e3420c5fcee30bf49fe8e569f73d92716913 --- /dev/null +++ b/core/puzzle_utils.py @@ -0,0 +1,69 @@ +import math + +import torch +import torch.nn.functional as F + +def tile_features(features, num_pieces): + _, _, h, w = features.size() + + num_pieces_per_line = int(math.sqrt(num_pieces)) + + h_per_patch = h // num_pieces_per_line + w_per_patch = w // num_pieces_per_line + + """ + +-----+-----+ + | 1 | 2 | + +-----+-----+ + | 3 | 4 | + +-----+-----+ + + +-----+-----+-----+-----+ + | 1 | 2 | 3 | 4 | + +-----+-----+-----+-----+ + """ + patches = [] + for splitted_features in torch.split(features, h_per_patch, dim=2): + for patch in torch.split(splitted_features, w_per_patch, dim=3): + patches.append(patch) + + return torch.cat(patches, dim=0) + +def merge_features(features, num_pieces, batch_size): + """ + +-----+-----+-----+-----+ + | 1 | 2 | 3 | 4 | + +-----+-----+-----+-----+ + + +-----+-----+ + | 1 | 2 | + +-----+-----+ + | 3 | 4 | + +-----+-----+ + """ + features_list = list(torch.split(features, batch_size)) + num_pieces_per_line = int(math.sqrt(num_pieces)) + + index = 0 + ext_h_list = [] + + for _ in range(num_pieces_per_line): + + ext_w_list = [] + for _ in range(num_pieces_per_line): + ext_w_list.append(features_list[index]) + index += 1 + + ext_h_list.append(torch.cat(ext_w_list, dim=3)) + + features = torch.cat(ext_h_list, dim=2) + return features + +def puzzle_module(x, func_list, num_pieces): + tiled_x = tile_features(x, num_pieces) + + for func in func_list: + tiled_x = func(tiled_x) + + merged_x = merge_features(tiled_x, num_pieces, x.size()[0]) + return merged_x diff --git a/core/sync_batchnorm/__init__.py b/core/sync_batchnorm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4e9cebbdb97b3a242816d3f0f46a25ce0f3f67a3 --- /dev/null +++ b/core/sync_batchnorm/__init__.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File : __init__.py +# Author : Jiayuan Mao +# Email : maojiayuan@gmail.com +# Date : 27/01/2018 +# +# This file is part of Synchronized-BatchNorm-PyTorch. +# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch +# Distributed under MIT License. + +from .batchnorm import SynchronizedBatchNorm1d, SynchronizedBatchNorm2d, SynchronizedBatchNorm3d +from .replicate import DataParallelWithCallback, patch_replication_callback \ No newline at end of file diff --git a/core/sync_batchnorm/batchnorm.py b/core/sync_batchnorm/batchnorm.py new file mode 100644 index 0000000000000000000000000000000000000000..e1bed93cb780bea67b0420eb0964811a80b676c7 --- /dev/null +++ b/core/sync_batchnorm/batchnorm.py @@ -0,0 +1,282 @@ +# -*- coding: utf-8 -*- +# File : batchnorm.py +# Author : Jiayuan Mao +# Email : maojiayuan@gmail.com +# Date : 27/01/2018 +# +# This file is part of Synchronized-BatchNorm-PyTorch. +# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch +# Distributed under MIT License. + +import collections + +import torch +import torch.nn.functional as F + +from torch.nn.modules.batchnorm import _BatchNorm +from torch.nn.parallel._functions import ReduceAddCoalesced, Broadcast + +from .comm import SyncMaster + +__all__ = ['SynchronizedBatchNorm1d', 'SynchronizedBatchNorm2d', 'SynchronizedBatchNorm3d'] + + +def _sum_ft(tensor): + """sum over the first and last dimention""" + return tensor.sum(dim=0).sum(dim=-1) + + +def _unsqueeze_ft(tensor): + """add new dementions at the front and the tail""" + return tensor.unsqueeze(0).unsqueeze(-1) + + +_ChildMessage = collections.namedtuple('_ChildMessage', ['sum', 'ssum', 'sum_size']) +_MasterMessage = collections.namedtuple('_MasterMessage', ['sum', 'inv_std']) + + +class _SynchronizedBatchNorm(_BatchNorm): + def __init__(self, num_features, eps=1e-5, momentum=0.1, affine=True): + super(_SynchronizedBatchNorm, self).__init__(num_features, eps=eps, momentum=momentum, affine=affine) + + self._sync_master = SyncMaster(self._data_parallel_master) + + self._is_parallel = False + self._parallel_id = None + self._slave_pipe = None + + def forward(self, input): + # If it is not parallel computation or is in evaluation mode, use PyTorch's implementation. + if not (self._is_parallel and self.training): + return F.batch_norm( + input, self.running_mean, self.running_var, self.weight, self.bias, + self.training, self.momentum, self.eps) + + # Resize the input to (B, C, -1). + input_shape = input.size() + input = input.view(input.size(0), self.num_features, -1) + + # Compute the sum and square-sum. + sum_size = input.size(0) * input.size(2) + input_sum = _sum_ft(input) + input_ssum = _sum_ft(input ** 2) + + # Reduce-and-broadcast the statistics. + if self._parallel_id == 0: + mean, inv_std = self._sync_master.run_master(_ChildMessage(input_sum, input_ssum, sum_size)) + else: + mean, inv_std = self._slave_pipe.run_slave(_ChildMessage(input_sum, input_ssum, sum_size)) + + # Compute the output. + if self.affine: + # MJY:: Fuse the multiplication for speed. + output = (input - _unsqueeze_ft(mean)) * _unsqueeze_ft(inv_std * self.weight) + _unsqueeze_ft(self.bias) + else: + output = (input - _unsqueeze_ft(mean)) * _unsqueeze_ft(inv_std) + + # Reshape it. + return output.view(input_shape) + + def __data_parallel_replicate__(self, ctx, copy_id): + self._is_parallel = True + self._parallel_id = copy_id + + # parallel_id == 0 means master device. + if self._parallel_id == 0: + ctx.sync_master = self._sync_master + else: + self._slave_pipe = ctx.sync_master.register_slave(copy_id) + + def _data_parallel_master(self, intermediates): + """Reduce the sum and square-sum, compute the statistics, and broadcast it.""" + + # Always using same "device order" makes the ReduceAdd operation faster. + # Thanks to:: Tete Xiao (http://tetexiao.com/) + intermediates = sorted(intermediates, key=lambda i: i[1].sum.get_device()) + + to_reduce = [i[1][:2] for i in intermediates] + to_reduce = [j for i in to_reduce for j in i] # flatten + target_gpus = [i[1].sum.get_device() for i in intermediates] + + sum_size = sum([i[1].sum_size for i in intermediates]) + sum_, ssum = ReduceAddCoalesced.apply(target_gpus[0], 2, *to_reduce) + mean, inv_std = self._compute_mean_std(sum_, ssum, sum_size) + + broadcasted = Broadcast.apply(target_gpus, mean, inv_std) + + outputs = [] + for i, rec in enumerate(intermediates): + outputs.append((rec[0], _MasterMessage(*broadcasted[i * 2:i * 2 + 2]))) + + return outputs + + def _compute_mean_std(self, sum_, ssum, size): + """Compute the mean and standard-deviation with sum and square-sum. This method + also maintains the moving average on the master device.""" + assert size > 1, 'BatchNorm computes unbiased standard-deviation, which requires size > 1.' + mean = sum_ / size + sumvar = ssum - sum_ * mean + unbias_var = sumvar / (size - 1) + bias_var = sumvar / size + + self.running_mean = (1 - self.momentum) * self.running_mean + self.momentum * mean.data + self.running_var = (1 - self.momentum) * self.running_var + self.momentum * unbias_var.data + + return mean, bias_var.clamp(self.eps) ** -0.5 + + +class SynchronizedBatchNorm1d(_SynchronizedBatchNorm): + r"""Applies Synchronized Batch Normalization over a 2d or 3d input that is seen as a + mini-batch. + .. math:: + y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta + This module differs from the built-in PyTorch BatchNorm1d as the mean and + standard-deviation are reduced across all devices during training. + For example, when one uses `nn.DataParallel` to wrap the network during + training, PyTorch's implementation normalize the tensor on each device using + the statistics only on that device, which accelerated the computation and + is also easy to implement, but the statistics might be inaccurate. + Instead, in this synchronized version, the statistics will be computed + over all training samples distributed on multiple devices. + + Note that, for one-GPU or CPU-only case, this module behaves exactly same + as the built-in PyTorch implementation. + The mean and standard-deviation are calculated per-dimension over + the mini-batches and gamma and beta are learnable parameter vectors + of size C (where C is the input size). + During training, this layer keeps a running estimate of its computed mean + and variance. The running sum is kept with a default momentum of 0.1. + During evaluation, this running mean/variance is used for normalization. + Because the BatchNorm is done over the `C` dimension, computing statistics + on `(N, L)` slices, it's common terminology to call this Temporal BatchNorm + Args: + num_features: num_features from an expected input of size + `batch_size x num_features [x width]` + eps: a value added to the denominator for numerical stability. + Default: 1e-5 + momentum: the value used for the running_mean and running_var + computation. Default: 0.1 + affine: a boolean value that when set to ``True``, gives the layer learnable + affine parameters. Default: ``True`` + Shape: + - Input: :math:`(N, C)` or :math:`(N, C, L)` + - Output: :math:`(N, C)` or :math:`(N, C, L)` (same shape as input) + Examples: + >>> # With Learnable Parameters + >>> m = SynchronizedBatchNorm1d(100) + >>> # Without Learnable Parameters + >>> m = SynchronizedBatchNorm1d(100, affine=False) + >>> input = torch.autograd.Variable(torch.randn(20, 100)) + >>> output = m(input) + """ + + def _check_input_dim(self, input): + if input.dim() != 2 and input.dim() != 3: + raise ValueError('expected 2D or 3D input (got {}D input)' + .format(input.dim())) + super(SynchronizedBatchNorm1d, self)._check_input_dim(input) + + +class SynchronizedBatchNorm2d(_SynchronizedBatchNorm): + r"""Applies Batch Normalization over a 4d input that is seen as a mini-batch + of 3d inputs + .. math:: + y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta + This module differs from the built-in PyTorch BatchNorm2d as the mean and + standard-deviation are reduced across all devices during training. + For example, when one uses `nn.DataParallel` to wrap the network during + training, PyTorch's implementation normalize the tensor on each device using + the statistics only on that device, which accelerated the computation and + is also easy to implement, but the statistics might be inaccurate. + Instead, in this synchronized version, the statistics will be computed + over all training samples distributed on multiple devices. + + Note that, for one-GPU or CPU-only case, this module behaves exactly same + as the built-in PyTorch implementation. + The mean and standard-deviation are calculated per-dimension over + the mini-batches and gamma and beta are learnable parameter vectors + of size C (where C is the input size). + During training, this layer keeps a running estimate of its computed mean + and variance. The running sum is kept with a default momentum of 0.1. + During evaluation, this running mean/variance is used for normalization. + Because the BatchNorm is done over the `C` dimension, computing statistics + on `(N, H, W)` slices, it's common terminology to call this Spatial BatchNorm + Args: + num_features: num_features from an expected input of + size batch_size x num_features x height x width + eps: a value added to the denominator for numerical stability. + Default: 1e-5 + momentum: the value used for the running_mean and running_var + computation. Default: 0.1 + affine: a boolean value that when set to ``True``, gives the layer learnable + affine parameters. Default: ``True`` + Shape: + - Input: :math:`(N, C, H, W)` + - Output: :math:`(N, C, H, W)` (same shape as input) + Examples: + >>> # With Learnable Parameters + >>> m = SynchronizedBatchNorm2d(100) + >>> # Without Learnable Parameters + >>> m = SynchronizedBatchNorm2d(100, affine=False) + >>> input = torch.autograd.Variable(torch.randn(20, 100, 35, 45)) + >>> output = m(input) + """ + + def _check_input_dim(self, input): + if input.dim() != 4: + raise ValueError('expected 4D input (got {}D input)' + .format(input.dim())) + super(SynchronizedBatchNorm2d, self)._check_input_dim(input) + + +class SynchronizedBatchNorm3d(_SynchronizedBatchNorm): + r"""Applies Batch Normalization over a 5d input that is seen as a mini-batch + of 4d inputs + .. math:: + y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta + This module differs from the built-in PyTorch BatchNorm3d as the mean and + standard-deviation are reduced across all devices during training. + For example, when one uses `nn.DataParallel` to wrap the network during + training, PyTorch's implementation normalize the tensor on each device using + the statistics only on that device, which accelerated the computation and + is also easy to implement, but the statistics might be inaccurate. + Instead, in this synchronized version, the statistics will be computed + over all training samples distributed on multiple devices. + + Note that, for one-GPU or CPU-only case, this module behaves exactly same + as the built-in PyTorch implementation. + The mean and standard-deviation are calculated per-dimension over + the mini-batches and gamma and beta are learnable parameter vectors + of size C (where C is the input size). + During training, this layer keeps a running estimate of its computed mean + and variance. The running sum is kept with a default momentum of 0.1. + During evaluation, this running mean/variance is used for normalization. + Because the BatchNorm is done over the `C` dimension, computing statistics + on `(N, D, H, W)` slices, it's common terminology to call this Volumetric BatchNorm + or Spatio-temporal BatchNorm + Args: + num_features: num_features from an expected input of + size batch_size x num_features x depth x height x width + eps: a value added to the denominator for numerical stability. + Default: 1e-5 + momentum: the value used for the running_mean and running_var + computation. Default: 0.1 + affine: a boolean value that when set to ``True``, gives the layer learnable + affine parameters. Default: ``True`` + Shape: + - Input: :math:`(N, C, D, H, W)` + - Output: :math:`(N, C, D, H, W)` (same shape as input) + Examples: + >>> # With Learnable Parameters + >>> m = SynchronizedBatchNorm3d(100) + >>> # Without Learnable Parameters + >>> m = SynchronizedBatchNorm3d(100, affine=False) + >>> input = torch.autograd.Variable(torch.randn(20, 100, 35, 45, 10)) + >>> output = m(input) + """ + + def _check_input_dim(self, input): + if input.dim() != 5: + raise ValueError('expected 5D input (got {}D input)' + .format(input.dim())) + super(SynchronizedBatchNorm3d, self)._check_input_dim(input) \ No newline at end of file diff --git a/core/sync_batchnorm/comm.py b/core/sync_batchnorm/comm.py new file mode 100644 index 0000000000000000000000000000000000000000..c94641a4f97d527652764583a848a6f8b47dd6e9 --- /dev/null +++ b/core/sync_batchnorm/comm.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +# File : comm.py +# Author : Jiayuan Mao +# Email : maojiayuan@gmail.com +# Date : 27/01/2018 +# +# This file is part of Synchronized-BatchNorm-PyTorch. +# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch +# Distributed under MIT License. + +import queue +import collections +import threading + +__all__ = ['FutureResult', 'SlavePipe', 'SyncMaster'] + + +class FutureResult(object): + """A thread-safe future implementation. Used only as one-to-one pipe.""" + + def __init__(self): + self._result = None + self._lock = threading.Lock() + self._cond = threading.Condition(self._lock) + + def put(self, result): + with self._lock: + assert self._result is None, 'Previous result has\'t been fetched.' + self._result = result + self._cond.notify() + + def get(self): + with self._lock: + if self._result is None: + self._cond.wait() + + res = self._result + self._result = None + return res + + +_MasterRegistry = collections.namedtuple('MasterRegistry', ['result']) +_SlavePipeBase = collections.namedtuple('_SlavePipeBase', ['identifier', 'queue', 'result']) + + +class SlavePipe(_SlavePipeBase): + """Pipe for master-slave communication.""" + + def run_slave(self, msg): + self.queue.put((self.identifier, msg)) + ret = self.result.get() + self.queue.put(True) + return ret + + +class SyncMaster(object): + """An abstract `SyncMaster` object. + - During the replication, as the data parallel will trigger an callback of each module, all slave devices should + call `register(id)` and obtain an `SlavePipe` to communicate with the master. + - During the forward pass, master device invokes `run_master`, all messages from slave devices will be collected, + and passed to a registered callback. + - After receiving the messages, the master device should gather the information and determine to message passed + back to each slave devices. + """ + + def __init__(self, master_callback): + """ + Args: + master_callback: a callback to be invoked after having collected messages from slave devices. + """ + self._master_callback = master_callback + self._queue = queue.Queue() + self._registry = collections.OrderedDict() + self._activated = False + + def __getstate__(self): + return {'master_callback': self._master_callback} + + def __setstate__(self, state): + self.__init__(state['master_callback']) + + def register_slave(self, identifier): + """ + Register an slave device. + Args: + identifier: an identifier, usually is the device id. + Returns: a `SlavePipe` object which can be used to communicate with the master device. + """ + if self._activated: + assert self._queue.empty(), 'Queue is not clean before next initialization.' + self._activated = False + self._registry.clear() + future = FutureResult() + self._registry[identifier] = _MasterRegistry(future) + return SlavePipe(identifier, self._queue, future) + + def run_master(self, master_msg): + """ + Main entry for the master device in each forward pass. + The messages were first collected from each devices (including the master device), and then + an callback will be invoked to compute the message to be sent back to each devices + (including the master device). + Args: + master_msg: the message that the master want to send to itself. This will be placed as the first + message when calling `master_callback`. For detailed usage, see `_SynchronizedBatchNorm` for an example. + Returns: the message to be sent back to the master device. + """ + self._activated = True + + intermediates = [(0, master_msg)] + for i in range(self.nr_slaves): + intermediates.append(self._queue.get()) + + results = self._master_callback(intermediates) + assert results[0][0] == 0, 'The first result should belongs to the master.' + + for i, res in results: + if i == 0: + continue + self._registry[i].result.put(res) + + for i in range(self.nr_slaves): + assert self._queue.get() is True + + return results[0][1] + + @property + def nr_slaves(self): + return len(self._registry) diff --git a/core/sync_batchnorm/replicate.py b/core/sync_batchnorm/replicate.py new file mode 100644 index 0000000000000000000000000000000000000000..57dda45309f21580c158b4638ae07461b3da07a6 --- /dev/null +++ b/core/sync_batchnorm/replicate.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +# File : replicate.py +# Author : Jiayuan Mao +# Email : maojiayuan@gmail.com +# Date : 27/01/2018 +# +# This file is part of Synchronized-BatchNorm-PyTorch. +# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch +# Distributed under MIT License. + +import functools + +from torch.nn.parallel.data_parallel import DataParallel + +__all__ = [ + 'CallbackContext', + 'execute_replication_callbacks', + 'DataParallelWithCallback', + 'patch_replication_callback' +] + + +class CallbackContext(object): + pass + + +def execute_replication_callbacks(modules): + """ + Execute an replication callback `__data_parallel_replicate__` on each module created by original replication. + The callback will be invoked with arguments `__data_parallel_replicate__(ctx, copy_id)` + Note that, as all modules are isomorphism, we assign each sub-module with a context + (shared among multiple copies of this module on different devices). + Through this context, different copies can share some information. + We guarantee that the callback on the master copy (the first copy) will be called ahead of calling the callback + of any slave copies. + """ + master_copy = modules[0] + nr_modules = len(list(master_copy.modules())) + ctxs = [CallbackContext() for _ in range(nr_modules)] + + for i, module in enumerate(modules): + for j, m in enumerate(module.modules()): + if hasattr(m, '__data_parallel_replicate__'): + m.__data_parallel_replicate__(ctxs[j], i) + + +class DataParallelWithCallback(DataParallel): + """ + Data Parallel with a replication callback. + An replication callback `__data_parallel_replicate__` of each module will be invoked after being created by + original `replicate` function. + The callback will be invoked with arguments `__data_parallel_replicate__(ctx, copy_id)` + Examples: + > sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False) + > sync_bn = DataParallelWithCallback(sync_bn, device_ids=[0, 1]) + # sync_bn.__data_parallel_replicate__ will be invoked. + """ + + def replicate(self, module, device_ids): + modules = super(DataParallelWithCallback, self).replicate(module, device_ids) + execute_replication_callbacks(modules) + return modules + + +def patch_replication_callback(data_parallel): + """ + Monkey-patch an existing `DataParallel` object. Add the replication callback. + Useful when you have customized `DataParallel` implementation. + Examples: + > sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False) + > sync_bn = DataParallel(sync_bn, device_ids=[0, 1]) + > patch_replication_callback(sync_bn) + # this is equivalent to + > sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False) + > sync_bn = DataParallelWithCallback(sync_bn, device_ids=[0, 1]) + """ + + assert isinstance(data_parallel, DataParallel) + + old_replicate = data_parallel.replicate + + @functools.wraps(old_replicate) + def new_replicate(module, device_ids): + modules = old_replicate(module, device_ids) + execute_replication_callbacks(modules) + return modules + + data_parallel.replicate = new_replicate \ No newline at end of file diff --git a/core/sync_batchnorm/unittest.py b/core/sync_batchnorm/unittest.py new file mode 100644 index 0000000000000000000000000000000000000000..57c0ad9fd431439e2ed2dd38a43c800ea126374a --- /dev/null +++ b/core/sync_batchnorm/unittest.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# File : unittest.py +# Author : Jiayuan Mao +# Email : maojiayuan@gmail.com +# Date : 27/01/2018 +# +# This file is part of Synchronized-BatchNorm-PyTorch. +# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch +# Distributed under MIT License. + +import unittest + +import numpy as np +from torch.autograd import Variable + + +def as_numpy(v): + if isinstance(v, Variable): + v = v.data + return v.cpu().numpy() + + +class TorchTestCase(unittest.TestCase): + def assertTensorClose(self, a, b, atol=1e-3, rtol=1e-3): + npa, npb = as_numpy(a), as_numpy(b) + self.assertTrue( + np.allclose(npa, npb, atol=atol), + 'Tensor close check failed\n{}\n{}\nadiff={}, rdiff={}'.format(a, b, np.abs(npa - npb).max(), np.abs((npa - npb) / np.fmax(npa, 1e-5)).max()) + ) diff --git a/data/VOC_2012.json b/data/VOC_2012.json new file mode 100644 index 0000000000000000000000000000000000000000..518bf0d063f0a3beaf6dd5dd8420328a46b79354 --- /dev/null +++ b/data/VOC_2012.json @@ -0,0 +1,198 @@ +{ + "train": { + "aeroplane": 837, + "person": 9734, + "tvmonitor": 790, + "dog": 1418, + "chair": 2794, + "bird": 1128, + "bottle": 1396, + "boat": 940, + "diningtable": 715, + "train": 609, + "motorbike": 689, + "horse": 696, + "cow": 633, + "bicycle": 712, + "car": 2235, + "cat": 1141, + "sofa": 732, + "bus": 569, + "pottedplant": 1024, + "sheep": 931 + }, + "validation": { + "aeroplane": 112, + "train": 93, + "boat": 108, + "bicycle": 103, + "person": 866, + "sheep": 153, + "tvmonitor": 98, + "horse": 104, + "bottle": 163, + "sofa": 106, + "chair": 245, + "cow": 132, + "car": 249, + "pottedplant": 171, + "bus": 116, + "diningtable": 82, + "dog": 150, + "bird": 140, + "cat": 132, + "motorbike": 103 + }, + "classes": 20, + "class_names": [ + "aeroplane", + "bicycle", + "bird", + "boat", + "bottle", + "bus", + "car", + "cat", + "chair", + "cow", + "diningtable", + "dog", + "horse", + "motorbike", + "person", + "pottedplant", + "sheep", + "sofa", + "train", + "tvmonitor" + ], + "class_dic": { + "aeroplane": 0, + "bicycle": 1, + "bird": 2, + "boat": 3, + "bottle": 4, + "bus": 5, + "car": 6, + "cat": 7, + "chair": 8, + "cow": 9, + "diningtable": 10, + "dog": 11, + "horse": 12, + "motorbike": 13, + "person": 14, + "pottedplant": 15, + "sheep": 16, + "sofa": 17, + "train": 18, + "tvmonitor": 19 + }, + "color_dict": { + "background": [ + 0, + 0, + 0 + ], + "aeroplane": [ + 128, + 0, + 0 + ], + "bicycle": [ + 0, + 128, + 0 + ], + "bird": [ + 128, + 128, + 0 + ], + "boat": [ + 0, + 0, + 128 + ], + "bottle": [ + 128, + 0, + 128 + ], + "bus": [ + 0, + 128, + 128 + ], + "car": [ + 128, + 128, + 128 + ], + "cat": [ + 64, + 0, + 0 + ], + "chair": [ + 192, + 0, + 0 + ], + "cow": [ + 64, + 128, + 0 + ], + "diningtable": [ + 192, + 128, + 0 + ], + "dog": [ + 64, + 0, + 128 + ], + "horse": [ + 192, + 0, + 128 + ], + "motorbike": [ + 64, + 128, + 128 + ], + "person": [ + 192, + 128, + 128 + ], + "pottedplant": [ + 0, + 64, + 0 + ], + "sheep": [ + 128, + 64, + 0 + ], + "sofa": [ + 0, + 192, + 0 + ], + "train": [ + 128, + 192, + 0 + ], + "tvmonitor": [ + 0, + 64, + 128 + ] + } +} \ No newline at end of file diff --git a/data/test.txt b/data/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..13cdcca5ea53801860009f04951a51f29db6c15b --- /dev/null +++ b/data/test.txt @@ -0,0 +1,1456 @@ +2008_000006 +2008_000011 +2008_000012 +2008_000018 +2008_000024 +2008_000030 +2008_000031 +2008_000046 +2008_000047 +2008_000048 +2008_000057 +2008_000058 +2008_000068 +2008_000072 +2008_000079 +2008_000081 +2008_000083 +2008_000088 +2008_000094 +2008_000101 +2008_000104 +2008_000106 +2008_000108 +2008_000110 +2008_000111 +2008_000126 +2008_000127 +2008_000129 +2008_000130 +2008_000135 +2008_000150 +2008_000152 +2008_000156 +2008_000159 +2008_000160 +2008_000161 +2008_000166 +2008_000167 +2008_000168 +2008_000169 +2008_000171 +2008_000175 +2008_000178 +2008_000186 +2008_000198 +2008_000206 +2008_000208 +2008_000209 +2008_000211 +2008_000220 +2008_000224 +2008_000230 +2008_000240 +2008_000248 +2008_000249 +2008_000250 +2008_000256 +2008_000279 +2008_000282 +2008_000285 +2008_000286 +2008_000296 +2008_000300 +2008_000322 +2008_000324 +2008_000337 +2008_000366 +2008_000369 +2008_000377 +2008_000384 +2008_000390 +2008_000404 +2008_000411 +2008_000434 +2008_000440 +2008_000460 +2008_000467 +2008_000478 +2008_000485 +2008_000487 +2008_000490 +2008_000503 +2008_000504 +2008_000507 +2008_000513 +2008_000523 +2008_000529 +2008_000556 +2008_000565 +2008_000580 +2008_000590 +2008_000596 +2008_000597 +2008_000600 +2008_000603 +2008_000604 +2008_000612 +2008_000617 +2008_000621 +2008_000627 +2008_000633 +2008_000643 +2008_000644 +2008_000649 +2008_000651 +2008_000664 +2008_000665 +2008_000680 +2008_000681 +2008_000684 +2008_000685 +2008_000688 +2008_000693 +2008_000698 +2008_000707 +2008_000709 +2008_000712 +2008_000747 +2008_000751 +2008_000754 +2008_000762 +2008_000767 +2008_000768 +2008_000773 +2008_000774 +2008_000779 +2008_000797 +2008_000813 +2008_000816 +2008_000846 +2008_000866 +2008_000871 +2008_000872 +2008_000891 +2008_000892 +2008_000894 +2008_000896 +2008_000898 +2008_000909 +2008_000913 +2008_000920 +2008_000933 +2008_000935 +2008_000937 +2008_000938 +2008_000954 +2008_000958 +2008_000963 +2008_000967 +2008_000974 +2008_000986 +2008_000994 +2008_000995 +2008_001008 +2008_001010 +2008_001014 +2008_001016 +2008_001025 +2008_001029 +2008_001037 +2008_001059 +2008_001061 +2008_001072 +2008_001124 +2008_001126 +2008_001131 +2008_001138 +2008_001144 +2008_001151 +2008_001156 +2008_001179 +2008_001181 +2008_001184 +2008_001186 +2008_001197 +2008_001207 +2008_001212 +2008_001233 +2008_001234 +2008_001258 +2008_001268 +2008_001279 +2008_001281 +2008_001288 +2008_001291 +2008_001298 +2008_001309 +2008_001315 +2008_001316 +2008_001319 +2008_001327 +2008_001328 +2008_001332 +2008_001341 +2008_001347 +2008_001355 +2008_001378 +2008_001386 +2008_001400 +2008_001409 +2008_001411 +2008_001416 +2008_001418 +2008_001435 +2008_001459 +2008_001469 +2008_001474 +2008_001477 +2008_001483 +2008_001484 +2008_001485 +2008_001496 +2008_001507 +2008_001511 +2008_001519 +2008_001557 +2008_001567 +2008_001570 +2008_001571 +2008_001572 +2008_001579 +2008_001587 +2008_001608 +2008_001611 +2008_001614 +2008_001621 +2008_001639 +2008_001658 +2008_001678 +2008_001700 +2008_001713 +2008_001720 +2008_001755 +2008_001779 +2008_001785 +2008_001793 +2008_001794 +2008_001803 +2008_001818 +2008_001848 +2008_001855 +2008_001857 +2008_001861 +2008_001875 +2008_001878 +2008_001886 +2008_001897 +2008_001916 +2008_001925 +2008_001949 +2008_001953 +2008_001972 +2008_001999 +2008_002027 +2008_002040 +2008_002057 +2008_002070 +2008_002075 +2008_002095 +2008_002104 +2008_002105 +2008_002106 +2008_002136 +2008_002137 +2008_002147 +2008_002149 +2008_002163 +2008_002173 +2008_002174 +2008_002184 +2008_002186 +2008_002188 +2008_002190 +2008_002203 +2008_002211 +2008_002217 +2008_002228 +2008_002233 +2008_002246 +2008_002257 +2008_002261 +2008_002285 +2008_002287 +2008_002295 +2008_002303 +2008_002306 +2008_002309 +2008_002310 +2008_002318 +2008_002320 +2008_002332 +2008_002337 +2008_002345 +2008_002348 +2008_002352 +2008_002360 +2008_002381 +2008_002387 +2008_002388 +2008_002393 +2008_002406 +2008_002440 +2008_002455 +2008_002460 +2008_002462 +2008_002480 +2008_002518 +2008_002525 +2008_002535 +2008_002544 +2008_002553 +2008_002569 +2008_002572 +2008_002587 +2008_002635 +2008_002655 +2008_002695 +2008_002702 +2008_002706 +2008_002707 +2008_002722 +2008_002745 +2008_002757 +2008_002779 +2008_002805 +2008_002871 +2008_002895 +2008_002905 +2008_002923 +2008_002927 +2008_002939 +2008_002941 +2008_002962 +2008_002975 +2008_003000 +2008_003031 +2008_003038 +2008_003042 +2008_003069 +2008_003070 +2008_003115 +2008_003116 +2008_003130 +2008_003137 +2008_003138 +2008_003139 +2008_003165 +2008_003171 +2008_003176 +2008_003192 +2008_003194 +2008_003195 +2008_003198 +2008_003227 +2008_003247 +2008_003262 +2008_003298 +2008_003299 +2008_003307 +2008_003337 +2008_003353 +2008_003355 +2008_003363 +2008_003383 +2008_003389 +2008_003392 +2008_003399 +2008_003436 +2008_003457 +2008_003465 +2008_003481 +2008_003539 +2008_003548 +2008_003550 +2008_003567 +2008_003568 +2008_003606 +2008_003615 +2008_003654 +2008_003670 +2008_003700 +2008_003705 +2008_003727 +2008_003731 +2008_003734 +2008_003760 +2008_003804 +2008_003807 +2008_003810 +2008_003822 +2008_003833 +2008_003877 +2008_003879 +2008_003895 +2008_003901 +2008_003903 +2008_003911 +2008_003919 +2008_003927 +2008_003937 +2008_003946 +2008_003950 +2008_003955 +2008_003981 +2008_003991 +2008_004009 +2008_004039 +2008_004052 +2008_004063 +2008_004070 +2008_004078 +2008_004104 +2008_004139 +2008_004177 +2008_004181 +2008_004200 +2008_004219 +2008_004236 +2008_004250 +2008_004266 +2008_004299 +2008_004320 +2008_004334 +2008_004343 +2008_004349 +2008_004366 +2008_004386 +2008_004401 +2008_004423 +2008_004448 +2008_004481 +2008_004516 +2008_004536 +2008_004582 +2008_004609 +2008_004638 +2008_004642 +2008_004644 +2008_004669 +2008_004673 +2008_004691 +2008_004693 +2008_004709 +2008_004715 +2008_004757 +2008_004775 +2008_004782 +2008_004785 +2008_004798 +2008_004848 +2008_004861 +2008_004870 +2008_004877 +2008_004884 +2008_004891 +2008_004901 +2008_004919 +2008_005058 +2008_005069 +2008_005086 +2008_005087 +2008_005112 +2008_005113 +2008_005118 +2008_005128 +2008_005129 +2008_005153 +2008_005161 +2008_005162 +2008_005165 +2008_005187 +2008_005227 +2008_005308 +2008_005318 +2008_005320 +2008_005351 +2008_005372 +2008_005383 +2008_005391 +2008_005407 +2008_005420 +2008_005440 +2008_005487 +2008_005493 +2008_005520 +2008_005551 +2008_005556 +2008_005576 +2008_005578 +2008_005594 +2008_005619 +2008_005629 +2008_005644 +2008_005645 +2008_005651 +2008_005661 +2008_005662 +2008_005667 +2008_005694 +2008_005697 +2008_005709 +2008_005710 +2008_005733 +2008_005749 +2008_005753 +2008_005771 +2008_005781 +2008_005793 +2008_005802 +2008_005833 +2008_005844 +2008_005908 +2008_005931 +2008_005952 +2008_006016 +2008_006030 +2008_006033 +2008_006054 +2008_006073 +2008_006091 +2008_006142 +2008_006150 +2008_006206 +2008_006217 +2008_006264 +2008_006283 +2008_006308 +2008_006313 +2008_006333 +2008_006343 +2008_006381 +2008_006391 +2008_006423 +2008_006428 +2008_006440 +2008_006444 +2008_006473 +2008_006505 +2008_006531 +2008_006560 +2008_006571 +2008_006582 +2008_006594 +2008_006601 +2008_006633 +2008_006653 +2008_006678 +2008_006755 +2008_006772 +2008_006788 +2008_006799 +2008_006809 +2008_006838 +2008_006845 +2008_006852 +2008_006894 +2008_006905 +2008_006947 +2008_006983 +2008_007049 +2008_007065 +2008_007068 +2008_007111 +2008_007148 +2008_007159 +2008_007193 +2008_007228 +2008_007235 +2008_007249 +2008_007255 +2008_007268 +2008_007275 +2008_007292 +2008_007299 +2008_007306 +2008_007316 +2008_007400 +2008_007401 +2008_007419 +2008_007437 +2008_007483 +2008_007487 +2008_007520 +2008_007551 +2008_007603 +2008_007616 +2008_007654 +2008_007663 +2008_007708 +2008_007795 +2008_007801 +2008_007859 +2008_007903 +2008_007920 +2008_007926 +2008_008014 +2008_008017 +2008_008060 +2008_008077 +2008_008107 +2008_008108 +2008_008119 +2008_008126 +2008_008133 +2008_008144 +2008_008216 +2008_008244 +2008_008248 +2008_008250 +2008_008260 +2008_008277 +2008_008280 +2008_008290 +2008_008304 +2008_008340 +2008_008371 +2008_008390 +2008_008397 +2008_008409 +2008_008412 +2008_008419 +2008_008454 +2008_008491 +2008_008498 +2008_008565 +2008_008599 +2008_008603 +2008_008631 +2008_008634 +2008_008640 +2008_008646 +2008_008660 +2008_008663 +2008_008664 +2008_008709 +2008_008720 +2008_008747 +2008_008768 +2009_000004 +2009_000019 +2009_000024 +2009_000025 +2009_000053 +2009_000076 +2009_000107 +2009_000110 +2009_000115 +2009_000117 +2009_000175 +2009_000220 +2009_000259 +2009_000275 +2009_000314 +2009_000368 +2009_000373 +2009_000384 +2009_000388 +2009_000423 +2009_000433 +2009_000434 +2009_000458 +2009_000475 +2009_000481 +2009_000495 +2009_000514 +2009_000555 +2009_000556 +2009_000561 +2009_000571 +2009_000581 +2009_000605 +2009_000609 +2009_000644 +2009_000654 +2009_000671 +2009_000733 +2009_000740 +2009_000766 +2009_000775 +2009_000776 +2009_000795 +2009_000850 +2009_000881 +2009_000900 +2009_000914 +2009_000941 +2009_000977 +2009_000984 +2009_000986 +2009_001005 +2009_001015 +2009_001058 +2009_001072 +2009_001087 +2009_001092 +2009_001109 +2009_001114 +2009_001115 +2009_001141 +2009_001174 +2009_001175 +2009_001182 +2009_001222 +2009_001228 +2009_001246 +2009_001262 +2009_001274 +2009_001284 +2009_001297 +2009_001331 +2009_001336 +2009_001337 +2009_001379 +2009_001392 +2009_001451 +2009_001485 +2009_001488 +2009_001497 +2009_001504 +2009_001506 +2009_001573 +2009_001576 +2009_001603 +2009_001613 +2009_001652 +2009_001661 +2009_001668 +2009_001680 +2009_001688 +2009_001697 +2009_001729 +2009_001771 +2009_001785 +2009_001793 +2009_001814 +2009_001866 +2009_001872 +2009_001880 +2009_001883 +2009_001891 +2009_001913 +2009_001938 +2009_001946 +2009_001953 +2009_001969 +2009_001978 +2009_001995 +2009_002007 +2009_002036 +2009_002041 +2009_002049 +2009_002051 +2009_002062 +2009_002063 +2009_002067 +2009_002085 +2009_002092 +2009_002114 +2009_002115 +2009_002142 +2009_002148 +2009_002157 +2009_002181 +2009_002220 +2009_002284 +2009_002287 +2009_002300 +2009_002310 +2009_002315 +2009_002334 +2009_002337 +2009_002354 +2009_002357 +2009_002411 +2009_002426 +2009_002458 +2009_002459 +2009_002461 +2009_002466 +2009_002481 +2009_002483 +2009_002503 +2009_002581 +2009_002583 +2009_002589 +2009_002600 +2009_002601 +2009_002602 +2009_002641 +2009_002646 +2009_002656 +2009_002666 +2009_002720 +2009_002767 +2009_002768 +2009_002794 +2009_002821 +2009_002825 +2009_002839 +2009_002840 +2009_002859 +2009_002860 +2009_002881 +2009_002889 +2009_002892 +2009_002895 +2009_002896 +2009_002900 +2009_002924 +2009_002966 +2009_002973 +2009_002981 +2009_003004 +2009_003021 +2009_003028 +2009_003037 +2009_003038 +2009_003055 +2009_003085 +2009_003100 +2009_003106 +2009_003117 +2009_003139 +2009_003170 +2009_003179 +2009_003184 +2009_003186 +2009_003190 +2009_003221 +2009_003236 +2009_003242 +2009_003244 +2009_003260 +2009_003264 +2009_003274 +2009_003283 +2009_003296 +2009_003332 +2009_003341 +2009_003354 +2009_003370 +2009_003371 +2009_003374 +2009_003391 +2009_003393 +2009_003404 +2009_003405 +2009_003414 +2009_003428 +2009_003470 +2009_003474 +2009_003532 +2009_003536 +2009_003578 +2009_003580 +2009_003620 +2009_003621 +2009_003680 +2009_003699 +2009_003727 +2009_003737 +2009_003780 +2009_003811 +2009_003824 +2009_003831 +2009_003844 +2009_003850 +2009_003851 +2009_003864 +2009_003868 +2009_003869 +2009_003893 +2009_003909 +2009_003924 +2009_003925 +2009_003960 +2009_003979 +2009_003990 +2009_003997 +2009_004006 +2009_004010 +2009_004066 +2009_004077 +2009_004081 +2009_004097 +2009_004098 +2009_004136 +2009_004216 +2009_004220 +2009_004266 +2009_004269 +2009_004286 +2009_004296 +2009_004321 +2009_004342 +2009_004343 +2009_004344 +2009_004385 +2009_004408 +2009_004420 +2009_004441 +2009_004447 +2009_004461 +2009_004467 +2009_004485 +2009_004488 +2009_004516 +2009_004521 +2009_004544 +2009_004596 +2009_004613 +2009_004615 +2009_004618 +2009_004621 +2009_004646 +2009_004659 +2009_004663 +2009_004666 +2009_004691 +2009_004715 +2009_004726 +2009_004753 +2009_004776 +2009_004811 +2009_004814 +2009_004818 +2009_004835 +2009_004863 +2009_004894 +2009_004909 +2009_004928 +2009_004937 +2009_004954 +2009_004966 +2009_004970 +2009_004976 +2009_005004 +2009_005011 +2009_005053 +2009_005072 +2009_005115 +2009_005146 +2009_005151 +2009_005164 +2009_005179 +2009_005224 +2009_005243 +2009_005249 +2009_005252 +2009_005254 +2009_005258 +2009_005264 +2009_005266 +2009_005276 +2009_005290 +2009_005295 +2010_000004 +2010_000005 +2010_000006 +2010_000032 +2010_000062 +2010_000093 +2010_000094 +2010_000161 +2010_000176 +2010_000223 +2010_000226 +2010_000236 +2010_000239 +2010_000287 +2010_000300 +2010_000301 +2010_000328 +2010_000378 +2010_000405 +2010_000407 +2010_000472 +2010_000479 +2010_000491 +2010_000533 +2010_000535 +2010_000542 +2010_000554 +2010_000580 +2010_000594 +2010_000596 +2010_000599 +2010_000606 +2010_000615 +2010_000654 +2010_000659 +2010_000693 +2010_000698 +2010_000730 +2010_000734 +2010_000741 +2010_000755 +2010_000768 +2010_000794 +2010_000813 +2010_000817 +2010_000834 +2010_000839 +2010_000848 +2010_000881 +2010_000888 +2010_000900 +2010_000903 +2010_000924 +2010_000946 +2010_000953 +2010_000957 +2010_000967 +2010_000992 +2010_000998 +2010_001053 +2010_001067 +2010_001114 +2010_001132 +2010_001138 +2010_001169 +2010_001171 +2010_001228 +2010_001260 +2010_001268 +2010_001280 +2010_001298 +2010_001302 +2010_001308 +2010_001324 +2010_001332 +2010_001335 +2010_001345 +2010_001346 +2010_001349 +2010_001373 +2010_001381 +2010_001392 +2010_001396 +2010_001420 +2010_001500 +2010_001506 +2010_001521 +2010_001532 +2010_001558 +2010_001598 +2010_001611 +2010_001631 +2010_001639 +2010_001651 +2010_001663 +2010_001664 +2010_001728 +2010_001778 +2010_001861 +2010_001874 +2010_001900 +2010_001905 +2010_001969 +2010_002008 +2010_002014 +2010_002049 +2010_002052 +2010_002091 +2010_002115 +2010_002119 +2010_002134 +2010_002156 +2010_002160 +2010_002186 +2010_002210 +2010_002241 +2010_002252 +2010_002258 +2010_002262 +2010_002273 +2010_002290 +2010_002292 +2010_002347 +2010_002358 +2010_002360 +2010_002367 +2010_002416 +2010_002451 +2010_002481 +2010_002490 +2010_002495 +2010_002588 +2010_002607 +2010_002609 +2010_002610 +2010_002641 +2010_002685 +2010_002699 +2010_002719 +2010_002735 +2010_002751 +2010_002804 +2010_002835 +2010_002852 +2010_002885 +2010_002889 +2010_002904 +2010_002908 +2010_002916 +2010_002974 +2010_002977 +2010_003005 +2010_003021 +2010_003030 +2010_003038 +2010_003046 +2010_003052 +2010_003089 +2010_003110 +2010_003118 +2010_003171 +2010_003217 +2010_003221 +2010_003228 +2010_003243 +2010_003271 +2010_003295 +2010_003306 +2010_003324 +2010_003363 +2010_003382 +2010_003388 +2010_003389 +2010_003392 +2010_003430 +2010_003442 +2010_003459 +2010_003485 +2010_003486 +2010_003500 +2010_003523 +2010_003542 +2010_003552 +2010_003570 +2010_003572 +2010_003586 +2010_003615 +2010_003623 +2010_003657 +2010_003666 +2010_003705 +2010_003710 +2010_003720 +2010_003733 +2010_003750 +2010_003767 +2010_003802 +2010_003809 +2010_003830 +2010_003832 +2010_003836 +2010_003838 +2010_003850 +2010_003867 +2010_003882 +2010_003909 +2010_003922 +2010_003923 +2010_003978 +2010_003989 +2010_003990 +2010_004000 +2010_004003 +2010_004068 +2010_004076 +2010_004117 +2010_004136 +2010_004142 +2010_004195 +2010_004200 +2010_004202 +2010_004232 +2010_004261 +2010_004266 +2010_004273 +2010_004305 +2010_004403 +2010_004433 +2010_004434 +2010_004435 +2010_004438 +2010_004442 +2010_004473 +2010_004482 +2010_004487 +2010_004489 +2010_004512 +2010_004525 +2010_004527 +2010_004532 +2010_004566 +2010_004568 +2010_004579 +2010_004611 +2010_004641 +2010_004688 +2010_004699 +2010_004702 +2010_004716 +2010_004754 +2010_004767 +2010_004776 +2010_004811 +2010_004837 +2010_004839 +2010_004845 +2010_004860 +2010_004867 +2010_004881 +2010_004939 +2010_005001 +2010_005047 +2010_005051 +2010_005091 +2010_005095 +2010_005125 +2010_005140 +2010_005177 +2010_005178 +2010_005194 +2010_005197 +2010_005200 +2010_005205 +2010_005212 +2010_005248 +2010_005294 +2010_005298 +2010_005313 +2010_005324 +2010_005328 +2010_005329 +2010_005380 +2010_005404 +2010_005407 +2010_005411 +2010_005423 +2010_005499 +2010_005509 +2010_005510 +2010_005544 +2010_005549 +2010_005590 +2010_005639 +2010_005699 +2010_005704 +2010_005707 +2010_005711 +2010_005726 +2010_005741 +2010_005765 +2010_005790 +2010_005792 +2010_005797 +2010_005812 +2010_005850 +2010_005861 +2010_005869 +2010_005908 +2010_005915 +2010_005946 +2010_005965 +2010_006044 +2010_006047 +2010_006052 +2010_006081 +2011_000001 +2011_000013 +2011_000014 +2011_000020 +2011_000032 +2011_000042 +2011_000063 +2011_000115 +2011_000120 +2011_000240 +2011_000244 +2011_000254 +2011_000261 +2011_000262 +2011_000271 +2011_000274 +2011_000306 +2011_000311 +2011_000316 +2011_000328 +2011_000351 +2011_000352 +2011_000406 +2011_000414 +2011_000448 +2011_000451 +2011_000470 +2011_000473 +2011_000515 +2011_000537 +2011_000576 +2011_000603 +2011_000616 +2011_000636 +2011_000639 +2011_000654 +2011_000660 +2011_000664 +2011_000667 +2011_000670 +2011_000676 +2011_000721 +2011_000723 +2011_000762 +2011_000766 +2011_000786 +2011_000802 +2011_000810 +2011_000821 +2011_000841 +2011_000844 +2011_000846 +2011_000869 +2011_000890 +2011_000915 +2011_000924 +2011_000937 +2011_000939 +2011_000952 +2011_000968 +2011_000974 +2011_001037 +2011_001072 +2011_001085 +2011_001089 +2011_001090 +2011_001099 +2011_001104 +2011_001112 +2011_001120 +2011_001132 +2011_001151 +2011_001194 +2011_001258 +2011_001274 +2011_001314 +2011_001317 +2011_001321 +2011_001379 +2011_001425 +2011_001431 +2011_001443 +2011_001446 +2011_001452 +2011_001454 +2011_001477 +2011_001509 +2011_001512 +2011_001515 +2011_001528 +2011_001554 +2011_001561 +2011_001580 +2011_001587 +2011_001623 +2011_001648 +2011_001651 +2011_001654 +2011_001684 +2011_001696 +2011_001697 +2011_001760 +2011_001761 +2011_001798 +2011_001807 +2011_001851 +2011_001852 +2011_001853 +2011_001888 +2011_001940 +2011_002014 +2011_002028 +2011_002056 +2011_002061 +2011_002068 +2011_002076 +2011_002090 +2011_002095 +2011_002104 +2011_002136 +2011_002138 +2011_002151 +2011_002153 +2011_002155 +2011_002197 +2011_002198 +2011_002243 +2011_002250 +2011_002257 +2011_002262 +2011_002264 +2011_002296 +2011_002314 +2011_002331 +2011_002333 +2011_002411 +2011_002417 +2011_002425 +2011_002437 +2011_002444 +2011_002445 +2011_002449 +2011_002468 +2011_002469 +2011_002473 +2011_002508 +2011_002523 +2011_002534 +2011_002557 +2011_002564 +2011_002572 +2011_002597 +2011_002622 +2011_002632 +2011_002635 +2011_002643 +2011_002653 +2011_002667 +2011_002681 +2011_002707 +2011_002736 +2011_002759 +2011_002783 +2011_002792 +2011_002799 +2011_002824 +2011_002835 +2011_002866 +2011_002876 +2011_002888 +2011_002894 +2011_002903 +2011_002905 +2011_002986 +2011_003045 +2011_003064 +2011_003070 +2011_003083 +2011_003093 +2011_003096 +2011_003102 +2011_003156 +2011_003170 +2011_003178 +2011_003231 diff --git a/data/train.txt b/data/train.txt new file mode 100644 index 0000000000000000000000000000000000000000..27b367a060e6b970291d823366805e1f73c5a895 --- /dev/null +++ b/data/train.txt @@ -0,0 +1,1464 @@ +2007_000032 +2007_000039 +2007_000063 +2007_000068 +2007_000121 +2007_000170 +2007_000241 +2007_000243 +2007_000250 +2007_000256 +2007_000333 +2007_000363 +2007_000364 +2007_000392 +2007_000480 +2007_000504 +2007_000515 +2007_000528 +2007_000549 +2007_000584 +2007_000645 +2007_000648 +2007_000713 +2007_000720 +2007_000733 +2007_000738 +2007_000768 +2007_000793 +2007_000822 +2007_000836 +2007_000876 +2007_000904 +2007_001027 +2007_001073 +2007_001149 +2007_001185 +2007_001225 +2007_001340 +2007_001397 +2007_001416 +2007_001420 +2007_001439 +2007_001487 +2007_001595 +2007_001602 +2007_001609 +2007_001698 +2007_001704 +2007_001709 +2007_001724 +2007_001764 +2007_001825 +2007_001834 +2007_001857 +2007_001872 +2007_001901 +2007_001917 +2007_001960 +2007_002024 +2007_002055 +2007_002088 +2007_002099 +2007_002105 +2007_002107 +2007_002120 +2007_002142 +2007_002198 +2007_002212 +2007_002216 +2007_002227 +2007_002234 +2007_002273 +2007_002281 +2007_002293 +2007_002361 +2007_002368 +2007_002370 +2007_002403 +2007_002462 +2007_002488 +2007_002545 +2007_002611 +2007_002639 +2007_002668 +2007_002669 +2007_002760 +2007_002789 +2007_002845 +2007_002895 +2007_002896 +2007_002914 +2007_002953 +2007_002954 +2007_002967 +2007_003000 +2007_003118 +2007_003178 +2007_003189 +2007_003190 +2007_003191 +2007_003205 +2007_003207 +2007_003251 +2007_003267 +2007_003286 +2007_003330 +2007_003431 +2007_003451 +2007_003525 +2007_003529 +2007_003541 +2007_003565 +2007_003580 +2007_003593 +2007_003604 +2007_003668 +2007_003715 +2007_003778 +2007_003788 +2007_003815 +2007_003876 +2007_003889 +2007_003910 +2007_004003 +2007_004009 +2007_004065 +2007_004081 +2007_004166 +2007_004289 +2007_004291 +2007_004328 +2007_004423 +2007_004459 +2007_004476 +2007_004481 +2007_004500 +2007_004537 +2007_004627 +2007_004663 +2007_004705 +2007_004707 +2007_004768 +2007_004769 +2007_004810 +2007_004830 +2007_004841 +2007_004948 +2007_004951 +2007_004988 +2007_004998 +2007_005043 +2007_005064 +2007_005086 +2007_005124 +2007_005130 +2007_005144 +2007_005210 +2007_005212 +2007_005227 +2007_005248 +2007_005262 +2007_005264 +2007_005266 +2007_005273 +2007_005314 +2007_005360 +2007_005368 +2007_005430 +2007_005647 +2007_005688 +2007_005702 +2007_005790 +2007_005797 +2007_005859 +2007_005878 +2007_005902 +2007_005951 +2007_005988 +2007_005989 +2007_006004 +2007_006066 +2007_006134 +2007_006136 +2007_006151 +2007_006212 +2007_006232 +2007_006254 +2007_006281 +2007_006303 +2007_006317 +2007_006400 +2007_006409 +2007_006445 +2007_006477 +2007_006483 +2007_006490 +2007_006530 +2007_006581 +2007_006585 +2007_006605 +2007_006615 +2007_006641 +2007_006660 +2007_006661 +2007_006673 +2007_006699 +2007_006704 +2007_006803 +2007_006832 +2007_006865 +2007_006899 +2007_006900 +2007_006944 +2007_007003 +2007_007021 +2007_007048 +2007_007098 +2007_007154 +2007_007230 +2007_007250 +2007_007355 +2007_007387 +2007_007398 +2007_007415 +2007_007432 +2007_007447 +2007_007480 +2007_007481 +2007_007523 +2007_007530 +2007_007585 +2007_007591 +2007_007621 +2007_007649 +2007_007698 +2007_007726 +2007_007772 +2007_007773 +2007_007783 +2007_007878 +2007_007890 +2007_007891 +2007_007902 +2007_007908 +2007_007930 +2007_007947 +2007_007948 +2007_008043 +2007_008072 +2007_008085 +2007_008140 +2007_008142 +2007_008203 +2007_008218 +2007_008219 +2007_008307 +2007_008403 +2007_008407 +2007_008468 +2007_008526 +2007_008571 +2007_008575 +2007_008714 +2007_008764 +2007_008778 +2007_008801 +2007_008821 +2007_008927 +2007_008932 +2007_008945 +2007_008948 +2007_008994 +2007_009030 +2007_009052 +2007_009082 +2007_009139 +2007_009209 +2007_009216 +2007_009295 +2007_009322 +2007_009327 +2007_009348 +2007_009422 +2007_009435 +2007_009436 +2007_009464 +2007_009527 +2007_009533 +2007_009550 +2007_009554 +2007_009580 +2007_009594 +2007_009597 +2007_009605 +2007_009607 +2007_009618 +2007_009630 +2007_009649 +2007_009665 +2007_009709 +2007_009724 +2007_009759 +2007_009779 +2007_009788 +2007_009807 +2007_009832 +2007_009889 +2007_009899 +2007_009901 +2007_009947 +2007_009950 +2008_000015 +2008_000019 +2008_000028 +2008_000033 +2008_000074 +2008_000089 +2008_000103 +2008_000105 +2008_000131 +2008_000144 +2008_000162 +2008_000187 +2008_000188 +2008_000197 +2008_000207 +2008_000217 +2008_000226 +2008_000235 +2008_000238 +2008_000259 +2008_000273 +2008_000284 +2008_000287 +2008_000289 +2008_000290 +2008_000309 +2008_000316 +2008_000336 +2008_000348 +2008_000361 +2008_000365 +2008_000399 +2008_000400 +2008_000415 +2008_000422 +2008_000436 +2008_000470 +2008_000491 +2008_000495 +2008_000505 +2008_000515 +2008_000540 +2008_000544 +2008_000567 +2008_000578 +2008_000584 +2008_000588 +2008_000595 +2008_000626 +2008_000645 +2008_000676 +2008_000696 +2008_000711 +2008_000716 +2008_000733 +2008_000760 +2008_000764 +2008_000778 +2008_000785 +2008_000832 +2008_000841 +2008_000860 +2008_000861 +2008_000870 +2008_000923 +2008_001030 +2008_001056 +2008_001106 +2008_001112 +2008_001118 +2008_001119 +2008_001137 +2008_001159 +2008_001169 +2008_001188 +2008_001203 +2008_001208 +2008_001215 +2008_001235 +2008_001245 +2008_001263 +2008_001274 +2008_001358 +2008_001375 +2008_001387 +2008_001399 +2008_001402 +2008_001408 +2008_001413 +2008_001462 +2008_001467 +2008_001479 +2008_001498 +2008_001510 +2008_001523 +2008_001566 +2008_001592 +2008_001601 +2008_001610 +2008_001632 +2008_001643 +2008_001691 +2008_001716 +2008_001719 +2008_001741 +2008_001761 +2008_001787 +2008_001829 +2008_001876 +2008_001882 +2008_001896 +2008_001926 +2008_001997 +2008_002032 +2008_002064 +2008_002066 +2008_002067 +2008_002073 +2008_002079 +2008_002080 +2008_002123 +2008_002160 +2008_002175 +2008_002177 +2008_002182 +2008_002200 +2008_002210 +2008_002215 +2008_002218 +2008_002221 +2008_002247 +2008_002248 +2008_002255 +2008_002258 +2008_002288 +2008_002338 +2008_002411 +2008_002425 +2008_002471 +2008_002473 +2008_002551 +2008_002641 +2008_002650 +2008_002697 +2008_002704 +2008_002710 +2008_002719 +2008_002749 +2008_002762 +2008_002772 +2008_002834 +2008_002868 +2008_002885 +2008_002894 +2008_002960 +2008_002970 +2008_002972 +2008_002993 +2008_003060 +2008_003065 +2008_003068 +2008_003083 +2008_003087 +2008_003094 +2008_003101 +2008_003168 +2008_003180 +2008_003196 +2008_003200 +2008_003208 +2008_003252 +2008_003329 +2008_003362 +2008_003373 +2008_003381 +2008_003415 +2008_003429 +2008_003480 +2008_003500 +2008_003523 +2008_003562 +2008_003585 +2008_003665 +2008_003691 +2008_003701 +2008_003703 +2008_003729 +2008_003769 +2008_003774 +2008_003779 +2008_003814 +2008_003913 +2008_003939 +2008_003947 +2008_003986 +2008_003998 +2008_004014 +2008_004026 +2008_004055 +2008_004080 +2008_004097 +2008_004112 +2008_004259 +2008_004321 +2008_004358 +2008_004365 +2008_004416 +2008_004430 +2008_004441 +2008_004547 +2008_004551 +2008_004583 +2008_004588 +2008_004607 +2008_004663 +2008_004750 +2008_004776 +2008_004822 +2008_004838 +2008_004841 +2008_004869 +2008_004892 +2008_004911 +2008_004914 +2008_004946 +2008_004983 +2008_005006 +2008_005074 +2008_005196 +2008_005214 +2008_005231 +2008_005266 +2008_005294 +2008_005300 +2008_005321 +2008_005342 +2008_005345 +2008_005367 +2008_005375 +2008_005512 +2008_005541 +2008_005600 +2008_005650 +2008_005668 +2008_005678 +2008_005679 +2008_005698 +2008_005706 +2008_005713 +2008_005714 +2008_005716 +2008_005747 +2008_005770 +2008_005839 +2008_005843 +2008_005845 +2008_005874 +2008_005926 +2008_005938 +2008_005945 +2008_005953 +2008_006032 +2008_006065 +2008_006070 +2008_006140 +2008_006182 +2008_006213 +2008_006215 +2008_006221 +2008_006289 +2008_006339 +2008_006345 +2008_006349 +2008_006353 +2008_006389 +2008_006434 +2008_006481 +2008_006482 +2008_006490 +2008_006509 +2008_006558 +2008_006655 +2008_006748 +2008_006751 +2008_006843 +2008_006873 +2008_006877 +2008_006908 +2008_006920 +2008_007011 +2008_007012 +2008_007090 +2008_007142 +2008_007165 +2008_007201 +2008_007239 +2008_007242 +2008_007245 +2008_007313 +2008_007355 +2008_007357 +2008_007375 +2008_007428 +2008_007433 +2008_007472 +2008_007581 +2008_007691 +2008_007759 +2008_007858 +2008_007998 +2008_008106 +2008_008193 +2008_008263 +2008_008323 +2008_008324 +2008_008343 +2008_008462 +2008_008476 +2008_008511 +2008_008521 +2008_008525 +2008_008541 +2008_008545 +2008_008550 +2008_008770 +2008_008773 +2009_000006 +2009_000015 +2009_000028 +2009_000029 +2009_000073 +2009_000100 +2009_000103 +2009_000133 +2009_000161 +2009_000176 +2009_000177 +2009_000250 +2009_000285 +2009_000347 +2009_000385 +2009_000400 +2009_000405 +2009_000408 +2009_000409 +2009_000420 +2009_000444 +2009_000454 +2009_000503 +2009_000505 +2009_000532 +2009_000535 +2009_000544 +2009_000553 +2009_000562 +2009_000603 +2009_000626 +2009_000635 +2009_000655 +2009_000662 +2009_000684 +2009_000690 +2009_000709 +2009_000720 +2009_000744 +2009_000746 +2009_000774 +2009_000801 +2009_000887 +2009_000894 +2009_000895 +2009_000906 +2009_000938 +2009_000987 +2009_000996 +2009_001002 +2009_001019 +2009_001027 +2009_001036 +2009_001070 +2009_001085 +2009_001095 +2009_001096 +2009_001100 +2009_001104 +2009_001117 +2009_001124 +2009_001137 +2009_001140 +2009_001145 +2009_001146 +2009_001163 +2009_001177 +2009_001197 +2009_001203 +2009_001205 +2009_001251 +2009_001253 +2009_001264 +2009_001268 +2009_001270 +2009_001283 +2009_001306 +2009_001311 +2009_001339 +2009_001359 +2009_001385 +2009_001388 +2009_001390 +2009_001403 +2009_001422 +2009_001443 +2009_001444 +2009_001481 +2009_001502 +2009_001514 +2009_001516 +2009_001544 +2009_001615 +2009_001625 +2009_001636 +2009_001640 +2009_001651 +2009_001664 +2009_001690 +2009_001693 +2009_001724 +2009_001735 +2009_001744 +2009_001755 +2009_001782 +2009_001783 +2009_001802 +2009_001828 +2009_001868 +2009_001871 +2009_001885 +2009_001888 +2009_001894 +2009_001898 +2009_001922 +2009_001937 +2009_001961 +2009_001964 +2009_001972 +2009_002010 +2009_002019 +2009_002052 +2009_002060 +2009_002072 +2009_002083 +2009_002117 +2009_002153 +2009_002204 +2009_002216 +2009_002229 +2009_002245 +2009_002262 +2009_002264 +2009_002281 +2009_002285 +2009_002314 +2009_002343 +2009_002362 +2009_002387 +2009_002409 +2009_002416 +2009_002419 +2009_002422 +2009_002423 +2009_002425 +2009_002448 +2009_002460 +2009_002472 +2009_002519 +2009_002530 +2009_002543 +2009_002567 +2009_002586 +2009_002588 +2009_002599 +2009_002613 +2009_002626 +2009_002628 +2009_002662 +2009_002674 +2009_002713 +2009_002715 +2009_002734 +2009_002763 +2009_002789 +2009_002820 +2009_002844 +2009_002845 +2009_002849 +2009_002862 +2009_002872 +2009_002885 +2009_002897 +2009_002912 +2009_002914 +2009_002917 +2009_002932 +2009_002972 +2009_002984 +2009_002988 +2009_002993 +2009_003006 +2009_003007 +2009_003012 +2009_003034 +2009_003035 +2009_003039 +2009_003053 +2009_003054 +2009_003075 +2009_003087 +2009_003088 +2009_003090 +2009_003142 +2009_003146 +2009_003147 +2009_003164 +2009_003172 +2009_003200 +2009_003249 +2009_003317 +2009_003340 +2009_003345 +2009_003353 +2009_003361 +2009_003369 +2009_003455 +2009_003461 +2009_003468 +2009_003497 +2009_003519 +2009_003522 +2009_003539 +2009_003555 +2009_003613 +2009_003636 +2009_003646 +2009_003660 +2009_003690 +2009_003697 +2009_003711 +2009_003734 +2009_003736 +2009_003757 +2009_003768 +2009_003783 +2009_003799 +2009_003815 +2009_003820 +2009_003825 +2009_003860 +2009_003865 +2009_003921 +2009_003922 +2009_003933 +2009_003961 +2009_003975 +2009_004091 +2009_004095 +2009_004105 +2009_004117 +2009_004171 +2009_004178 +2009_004180 +2009_004186 +2009_004191 +2009_004212 +2009_004213 +2009_004228 +2009_004249 +2009_004264 +2009_004278 +2009_004301 +2009_004316 +2009_004317 +2009_004327 +2009_004328 +2009_004334 +2009_004336 +2009_004368 +2009_004374 +2009_004409 +2009_004417 +2009_004425 +2009_004426 +2009_004434 +2009_004446 +2009_004464 +2009_004479 +2009_004519 +2009_004539 +2009_004561 +2009_004620 +2009_004626 +2009_004643 +2009_004656 +2009_004661 +2009_004674 +2009_004705 +2009_004790 +2009_004805 +2009_004829 +2009_004887 +2009_004888 +2009_004890 +2009_004901 +2009_004904 +2009_004919 +2009_004939 +2009_004980 +2009_004990 +2009_005000 +2009_005016 +2009_005031 +2009_005037 +2009_005055 +2009_005056 +2009_005069 +2009_005084 +2009_005085 +2009_005107 +2009_005118 +2009_005120 +2009_005128 +2009_005130 +2009_005141 +2009_005145 +2009_005160 +2009_005177 +2009_005194 +2009_005234 +2009_005236 +2009_005247 +2009_005269 +2009_005287 +2010_000002 +2010_000043 +2010_000063 +2010_000075 +2010_000076 +2010_000114 +2010_000117 +2010_000131 +2010_000132 +2010_000148 +2010_000187 +2010_000189 +2010_000195 +2010_000269 +2010_000285 +2010_000371 +2010_000392 +2010_000404 +2010_000436 +2010_000437 +2010_000466 +2010_000469 +2010_000492 +2010_000498 +2010_000503 +2010_000519 +2010_000567 +2010_000588 +2010_000632 +2010_000661 +2010_000675 +2010_000685 +2010_000746 +2010_000748 +2010_000772 +2010_000787 +2010_000810 +2010_000815 +2010_000847 +2010_000855 +2010_000885 +2010_000887 +2010_000978 +2010_000986 +2010_001043 +2010_001120 +2010_001131 +2010_001154 +2010_001160 +2010_001177 +2010_001183 +2010_001184 +2010_001195 +2010_001245 +2010_001247 +2010_001261 +2010_001273 +2010_001279 +2010_001282 +2010_001329 +2010_001347 +2010_001374 +2010_001386 +2010_001399 +2010_001413 +2010_001418 +2010_001422 +2010_001457 +2010_001514 +2010_001515 +2010_001561 +2010_001562 +2010_001576 +2010_001590 +2010_001595 +2010_001618 +2010_001619 +2010_001630 +2010_001660 +2010_001676 +2010_001706 +2010_001732 +2010_001748 +2010_001807 +2010_001842 +2010_001849 +2010_001850 +2010_001852 +2010_001860 +2010_001922 +2010_001923 +2010_001933 +2010_001939 +2010_001944 +2010_002018 +2010_002020 +2010_002032 +2010_002039 +2010_002047 +2010_002054 +2010_002055 +2010_002070 +2010_002097 +2010_002107 +2010_002139 +2010_002154 +2010_002166 +2010_002203 +2010_002218 +2010_002236 +2010_002254 +2010_002286 +2010_002338 +2010_002363 +2010_002379 +2010_002382 +2010_002387 +2010_002413 +2010_002418 +2010_002440 +2010_002455 +2010_002457 +2010_002499 +2010_002527 +2010_002532 +2010_002551 +2010_002556 +2010_002570 +2010_002573 +2010_002625 +2010_002659 +2010_002697 +2010_002720 +2010_002733 +2010_002750 +2010_002778 +2010_002786 +2010_002794 +2010_002811 +2010_002815 +2010_002838 +2010_002856 +2010_002870 +2010_002892 +2010_002907 +2010_002935 +2010_002937 +2010_002938 +2010_002962 +2010_002973 +2010_003010 +2010_003017 +2010_003062 +2010_003088 +2010_003093 +2010_003097 +2010_003114 +2010_003119 +2010_003153 +2010_003157 +2010_003170 +2010_003174 +2010_003203 +2010_003230 +2010_003250 +2010_003252 +2010_003269 +2010_003274 +2010_003342 +2010_003345 +2010_003380 +2010_003383 +2010_003384 +2010_003529 +2010_003534 +2010_003599 +2010_003634 +2010_003651 +2010_003665 +2010_003670 +2010_003680 +2010_003696 +2010_003717 +2010_003737 +2010_003798 +2010_003799 +2010_003884 +2010_003887 +2010_003894 +2010_003899 +2010_003911 +2010_003925 +2010_003950 +2010_003954 +2010_003958 +2010_003974 +2010_004005 +2010_004025 +2010_004060 +2010_004069 +2010_004071 +2010_004072 +2010_004074 +2010_004109 +2010_004119 +2010_004144 +2010_004154 +2010_004171 +2010_004180 +2010_004186 +2010_004210 +2010_004222 +2010_004258 +2010_004283 +2010_004288 +2010_004289 +2010_004306 +2010_004361 +2010_004363 +2010_004365 +2010_004370 +2010_004429 +2010_004450 +2010_004478 +2010_004481 +2010_004493 +2010_004499 +2010_004540 +2010_004560 +2010_004577 +2010_004598 +2010_004616 +2010_004620 +2010_004625 +2010_004669 +2010_004683 +2010_004694 +2010_004704 +2010_004721 +2010_004760 +2010_004766 +2010_004773 +2010_004805 +2010_004808 +2010_004900 +2010_004916 +2010_004933 +2010_004938 +2010_004948 +2010_004960 +2010_004963 +2010_005016 +2010_005028 +2010_005055 +2010_005064 +2010_005098 +2010_005106 +2010_005111 +2010_005119 +2010_005128 +2010_005129 +2010_005198 +2010_005202 +2010_005217 +2010_005223 +2010_005232 +2010_005277 +2010_005317 +2010_005318 +2010_005419 +2010_005429 +2010_005450 +2010_005457 +2010_005468 +2010_005471 +2010_005494 +2010_005500 +2010_005505 +2010_005506 +2010_005513 +2010_005519 +2010_005522 +2010_005596 +2010_005627 +2010_005643 +2010_005652 +2010_005663 +2010_005669 +2010_005678 +2010_005700 +2010_005721 +2010_005723 +2010_005725 +2010_005734 +2010_005744 +2010_005746 +2010_005755 +2010_005758 +2010_005775 +2010_005791 +2010_005796 +2010_005800 +2010_005805 +2010_005810 +2010_005820 +2010_005830 +2010_005835 +2010_005836 +2010_005876 +2010_005891 +2010_005898 +2010_005919 +2010_005927 +2010_005932 +2010_005951 +2010_005952 +2010_005978 +2010_005982 +2010_006009 +2011_000003 +2011_000006 +2011_000025 +2011_000027 +2011_000068 +2011_000069 +2011_000105 +2011_000108 +2011_000116 +2011_000122 +2011_000145 +2011_000149 +2011_000152 +2011_000182 +2011_000197 +2011_000208 +2011_000216 +2011_000219 +2011_000221 +2011_000222 +2011_000228 +2011_000243 +2011_000252 +2011_000258 +2011_000268 +2011_000277 +2011_000278 +2011_000293 +2011_000345 +2011_000359 +2011_000379 +2011_000382 +2011_000400 +2011_000428 +2011_000449 +2011_000453 +2011_000457 +2011_000468 +2011_000469 +2011_000513 +2011_000542 +2011_000550 +2011_000551 +2011_000556 +2011_000573 +2011_000577 +2011_000589 +2011_000594 +2011_000637 +2011_000641 +2011_000642 +2011_000646 +2011_000651 +2011_000652 +2011_000713 +2011_000758 +2011_000768 +2011_000771 +2011_000790 +2011_000793 +2011_000834 +2011_000840 +2011_000882 +2011_000893 +2011_000895 +2011_000920 +2011_000934 +2011_000944 +2011_000973 +2011_000982 +2011_000997 +2011_000999 +2011_001004 +2011_001015 +2011_001027 +2011_001133 +2011_001135 +2011_001139 +2011_001166 +2011_001175 +2011_001198 +2011_001211 +2011_001259 +2011_001270 +2011_001336 +2011_001400 +2011_001402 +2011_001411 +2011_001412 +2011_001432 +2011_001463 +2011_001475 +2011_001479 +2011_001519 +2011_001536 +2011_001542 +2011_001571 +2011_001621 +2011_001622 +2011_001632 +2011_001652 +2011_001653 +2011_001695 +2011_001710 +2011_001730 +2011_001753 +2011_001754 +2011_001764 +2011_001765 +2011_001790 +2011_001810 +2011_001855 +2011_001866 +2011_001875 +2011_001895 +2011_001902 +2011_001904 +2011_001922 +2011_001924 +2011_001928 +2011_001959 +2011_001967 +2011_001972 +2011_001974 +2011_001991 +2011_002027 +2011_002050 +2011_002107 +2011_002111 +2011_002114 +2011_002119 +2011_002134 +2011_002135 +2011_002149 +2011_002222 +2011_002224 +2011_002227 +2011_002246 +2011_002291 +2011_002300 +2011_002303 +2011_002335 +2011_002341 +2011_002350 +2011_002381 +2011_002385 +2011_002389 +2011_002398 +2011_002410 +2011_002447 +2011_002457 +2011_002464 +2011_002488 +2011_002503 +2011_002504 +2011_002511 +2011_002528 +2011_002553 +2011_002559 +2011_002561 +2011_002585 +2011_002590 +2011_002652 +2011_002656 +2011_002709 +2011_002715 +2011_002717 +2011_002752 +2011_002767 +2011_002770 +2011_002834 +2011_002851 +2011_002872 +2011_002873 +2011_002920 +2011_002932 +2011_002935 +2011_002947 +2011_002953 +2011_002956 +2011_003025 +2011_003038 +2011_003057 +2011_003066 +2011_003078 +2011_003121 +2011_003141 +2011_003151 +2011_003184 +2011_003216 +2011_003238 +2011_003246 +2011_003255 diff --git a/data/train_aug.txt b/data/train_aug.txt new file mode 100644 index 0000000000000000000000000000000000000000..234fe1f9457f2c7a5c64616c1f609a52e5c6851c --- /dev/null +++ b/data/train_aug.txt @@ -0,0 +1,10582 @@ +2007_000032 +2007_000039 +2007_000063 +2007_000068 +2007_000121 +2007_000170 +2007_000241 +2007_000243 +2007_000250 +2007_000256 +2007_000333 +2007_000363 +2007_000364 +2007_000392 +2007_000480 +2007_000504 +2007_000515 +2007_000528 +2007_000549 +2007_000584 +2007_000645 +2007_000648 +2007_000713 +2007_000720 +2007_000733 +2007_000738 +2007_000768 +2007_000793 +2007_000822 +2007_000836 +2007_000876 +2007_000904 +2007_001027 +2007_001073 +2007_001149 +2007_001185 +2007_001225 +2007_001340 +2007_001397 +2007_001416 +2007_001420 +2007_001439 +2007_001487 +2007_001595 +2007_001602 +2007_001609 +2007_001698 +2007_001704 +2007_001709 +2007_001724 +2007_001764 +2007_001825 +2007_001834 +2007_001857 +2007_001872 +2007_001901 +2007_001917 +2007_001960 +2007_002024 +2007_002055 +2007_002088 +2007_002099 +2007_002105 +2007_002107 +2007_002120 +2007_002142 +2007_002198 +2007_002212 +2007_002216 +2007_002227 +2007_002234 +2007_002273 +2007_002281 +2007_002293 +2007_002361 +2007_002368 +2007_002370 +2007_002403 +2007_002462 +2007_002488 +2007_002545 +2007_002611 +2007_002639 +2007_002668 +2007_002669 +2007_002760 +2007_002789 +2007_002845 +2007_002895 +2007_002896 +2007_002914 +2007_002953 +2007_002954 +2007_002967 +2007_003000 +2007_003118 +2007_003178 +2007_003189 +2007_003190 +2007_003191 +2007_003205 +2007_003207 +2007_003251 +2007_003267 +2007_003286 +2007_003330 +2007_003431 +2007_003451 +2007_003525 +2007_003529 +2007_003541 +2007_003565 +2007_003580 +2007_003593 +2007_003604 +2007_003668 +2007_003715 +2007_003778 +2007_003788 +2007_003815 +2007_003876 +2007_003889 +2007_003910 +2007_004003 +2007_004009 +2007_004065 +2007_004081 +2007_004166 +2007_004289 +2007_004291 +2007_004328 +2007_004423 +2007_004459 +2007_004476 +2007_004481 +2007_004500 +2007_004537 +2007_004627 +2007_004663 +2007_004705 +2007_004707 +2007_004768 +2007_004769 +2007_004810 +2007_004830 +2007_004841 +2007_004948 +2007_004951 +2007_004988 +2007_004998 +2007_005043 +2007_005064 +2007_005086 +2007_005124 +2007_005130 +2007_005144 +2007_005210 +2007_005212 +2007_005227 +2007_005248 +2007_005262 +2007_005264 +2007_005266 +2007_005273 +2007_005314 +2007_005360 +2007_005368 +2007_005430 +2007_005647 +2007_005688 +2007_005702 +2007_005790 +2007_005797 +2007_005859 +2007_005878 +2007_005902 +2007_005951 +2007_005988 +2007_005989 +2007_006004 +2007_006066 +2007_006134 +2007_006136 +2007_006151 +2007_006212 +2007_006232 +2007_006254 +2007_006281 +2007_006303 +2007_006317 +2007_006400 +2007_006409 +2007_006445 +2007_006477 +2007_006483 +2007_006490 +2007_006530 +2007_006581 +2007_006585 +2007_006605 +2007_006615 +2007_006641 +2007_006660 +2007_006661 +2007_006673 +2007_006699 +2007_006704 +2007_006803 +2007_006832 +2007_006865 +2007_006899 +2007_006900 +2007_006944 +2007_007003 +2007_007021 +2007_007048 +2007_007098 +2007_007154 +2007_007230 +2007_007250 +2007_007355 +2007_007387 +2007_007398 +2007_007415 +2007_007432 +2007_007447 +2007_007480 +2007_007481 +2007_007523 +2007_007530 +2007_007585 +2007_007591 +2007_007621 +2007_007649 +2007_007698 +2007_007726 +2007_007772 +2007_007773 +2007_007783 +2007_007878 +2007_007890 +2007_007891 +2007_007902 +2007_007908 +2007_007930 +2007_007947 +2007_007948 +2007_008043 +2007_008072 +2007_008085 +2007_008140 +2007_008142 +2007_008203 +2007_008218 +2007_008219 +2007_008307 +2007_008403 +2007_008407 +2007_008468 +2007_008526 +2007_008571 +2007_008575 +2007_008714 +2007_008764 +2007_008778 +2007_008801 +2007_008821 +2007_008927 +2007_008932 +2007_008945 +2007_008948 +2007_008994 +2007_009030 +2007_009052 +2007_009082 +2007_009139 +2007_009209 +2007_009216 +2007_009295 +2007_009322 +2007_009327 +2007_009348 +2007_009422 +2007_009435 +2007_009436 +2007_009464 +2007_009527 +2007_009533 +2007_009550 +2007_009554 +2007_009580 +2007_009594 +2007_009597 +2007_009605 +2007_009607 +2007_009618 +2007_009630 +2007_009649 +2007_009665 +2007_009709 +2007_009724 +2007_009759 +2007_009779 +2007_009788 +2007_009807 +2007_009832 +2007_009889 +2007_009899 +2007_009901 +2007_009947 +2007_009950 +2008_000002 +2008_000003 +2008_000007 +2008_000008 +2008_000015 +2008_000019 +2008_000023 +2008_000026 +2008_000027 +2008_000028 +2008_000032 +2008_000033 +2008_000034 +2008_000036 +2008_000041 +2008_000042 +2008_000043 +2008_000045 +2008_000050 +2008_000051 +2008_000052 +2008_000053 +2008_000054 +2008_000056 +2008_000059 +2008_000060 +2008_000062 +2008_000064 +2008_000066 +2008_000067 +2008_000070 +2008_000074 +2008_000076 +2008_000078 +2008_000082 +2008_000084 +2008_000085 +2008_000089 +2008_000090 +2008_000093 +2008_000095 +2008_000096 +2008_000097 +2008_000099 +2008_000103 +2008_000105 +2008_000109 +2008_000112 +2008_000115 +2008_000116 +2008_000119 +2008_000128 +2008_000131 +2008_000132 +2008_000133 +2008_000134 +2008_000138 +2008_000140 +2008_000141 +2008_000142 +2008_000143 +2008_000144 +2008_000145 +2008_000148 +2008_000154 +2008_000162 +2008_000163 +2008_000174 +2008_000176 +2008_000177 +2008_000181 +2008_000183 +2008_000185 +2008_000187 +2008_000188 +2008_000189 +2008_000190 +2008_000191 +2008_000192 +2008_000194 +2008_000195 +2008_000196 +2008_000197 +2008_000199 +2008_000202 +2008_000203 +2008_000204 +2008_000207 +2008_000217 +2008_000219 +2008_000222 +2008_000226 +2008_000227 +2008_000235 +2008_000236 +2008_000237 +2008_000238 +2008_000243 +2008_000244 +2008_000246 +2008_000251 +2008_000252 +2008_000253 +2008_000255 +2008_000257 +2008_000259 +2008_000260 +2008_000261 +2008_000262 +2008_000264 +2008_000266 +2008_000268 +2008_000272 +2008_000273 +2008_000274 +2008_000275 +2008_000277 +2008_000278 +2008_000281 +2008_000283 +2008_000284 +2008_000287 +2008_000289 +2008_000290 +2008_000291 +2008_000297 +2008_000298 +2008_000304 +2008_000305 +2008_000306 +2008_000307 +2008_000309 +2008_000311 +2008_000313 +2008_000315 +2008_000316 +2008_000318 +2008_000321 +2008_000328 +2008_000330 +2008_000335 +2008_000336 +2008_000338 +2008_000339 +2008_000340 +2008_000342 +2008_000343 +2008_000346 +2008_000348 +2008_000350 +2008_000354 +2008_000356 +2008_000358 +2008_000361 +2008_000364 +2008_000365 +2008_000367 +2008_000371 +2008_000373 +2008_000376 +2008_000378 +2008_000380 +2008_000381 +2008_000382 +2008_000383 +2008_000392 +2008_000393 +2008_000397 +2008_000398 +2008_000399 +2008_000400 +2008_000403 +2008_000405 +2008_000406 +2008_000407 +2008_000408 +2008_000413 +2008_000414 +2008_000415 +2008_000416 +2008_000418 +2008_000419 +2008_000421 +2008_000422 +2008_000423 +2008_000424 +2008_000426 +2008_000428 +2008_000432 +2008_000435 +2008_000436 +2008_000437 +2008_000442 +2008_000443 +2008_000445 +2008_000446 +2008_000447 +2008_000448 +2008_000452 +2008_000455 +2008_000457 +2008_000461 +2008_000465 +2008_000470 +2008_000471 +2008_000472 +2008_000473 +2008_000475 +2008_000480 +2008_000481 +2008_000488 +2008_000489 +2008_000491 +2008_000492 +2008_000493 +2008_000495 +2008_000496 +2008_000498 +2008_000499 +2008_000502 +2008_000505 +2008_000511 +2008_000512 +2008_000514 +2008_000515 +2008_000516 +2008_000522 +2008_000527 +2008_000531 +2008_000532 +2008_000535 +2008_000536 +2008_000540 +2008_000541 +2008_000544 +2008_000545 +2008_000547 +2008_000548 +2008_000552 +2008_000553 +2008_000558 +2008_000559 +2008_000561 +2008_000562 +2008_000563 +2008_000564 +2008_000566 +2008_000567 +2008_000568 +2008_000569 +2008_000572 +2008_000578 +2008_000579 +2008_000581 +2008_000583 +2008_000584 +2008_000585 +2008_000588 +2008_000595 +2008_000599 +2008_000605 +2008_000607 +2008_000609 +2008_000613 +2008_000614 +2008_000615 +2008_000619 +2008_000620 +2008_000622 +2008_000623 +2008_000626 +2008_000628 +2008_000629 +2008_000634 +2008_000636 +2008_000640 +2008_000641 +2008_000645 +2008_000646 +2008_000647 +2008_000648 +2008_000650 +2008_000652 +2008_000655 +2008_000656 +2008_000659 +2008_000660 +2008_000669 +2008_000670 +2008_000672 +2008_000674 +2008_000676 +2008_000677 +2008_000678 +2008_000683 +2008_000689 +2008_000690 +2008_000691 +2008_000694 +2008_000695 +2008_000696 +2008_000697 +2008_000699 +2008_000703 +2008_000704 +2008_000705 +2008_000706 +2008_000711 +2008_000714 +2008_000716 +2008_000719 +2008_000721 +2008_000723 +2008_000724 +2008_000726 +2008_000727 +2008_000729 +2008_000732 +2008_000733 +2008_000734 +2008_000737 +2008_000740 +2008_000742 +2008_000745 +2008_000748 +2008_000753 +2008_000756 +2008_000758 +2008_000760 +2008_000761 +2008_000764 +2008_000769 +2008_000775 +2008_000776 +2008_000777 +2008_000778 +2008_000780 +2008_000783 +2008_000785 +2008_000787 +2008_000788 +2008_000790 +2008_000792 +2008_000793 +2008_000796 +2008_000798 +2008_000801 +2008_000803 +2008_000804 +2008_000806 +2008_000808 +2008_000814 +2008_000815 +2008_000817 +2008_000824 +2008_000825 +2008_000828 +2008_000829 +2008_000832 +2008_000833 +2008_000834 +2008_000835 +2008_000837 +2008_000839 +2008_000841 +2008_000842 +2008_000844 +2008_000847 +2008_000851 +2008_000854 +2008_000857 +2008_000858 +2008_000860 +2008_000861 +2008_000864 +2008_000867 +2008_000868 +2008_000870 +2008_000873 +2008_000875 +2008_000876 +2008_000878 +2008_000880 +2008_000881 +2008_000883 +2008_000884 +2008_000885 +2008_000887 +2008_000897 +2008_000899 +2008_000901 +2008_000902 +2008_000904 +2008_000905 +2008_000908 +2008_000910 +2008_000912 +2008_000914 +2008_000915 +2008_000916 +2008_000917 +2008_000922 +2008_000923 +2008_000924 +2008_000928 +2008_000931 +2008_000934 +2008_000936 +2008_000939 +2008_000940 +2008_000941 +2008_000942 +2008_000944 +2008_000950 +2008_000952 +2008_000953 +2008_000956 +2008_000957 +2008_000959 +2008_000960 +2008_000964 +2008_000965 +2008_000970 +2008_000971 +2008_000972 +2008_000973 +2008_000976 +2008_000979 +2008_000981 +2008_000982 +2008_000984 +2008_000985 +2008_000987 +2008_000993 +2008_000999 +2008_001004 +2008_001007 +2008_001009 +2008_001012 +2008_001018 +2008_001020 +2008_001021 +2008_001022 +2008_001023 +2008_001024 +2008_001026 +2008_001030 +2008_001031 +2008_001034 +2008_001035 +2008_001036 +2008_001039 +2008_001041 +2008_001042 +2008_001046 +2008_001047 +2008_001048 +2008_001052 +2008_001054 +2008_001055 +2008_001056 +2008_001057 +2008_001060 +2008_001062 +2008_001063 +2008_001066 +2008_001068 +2008_001071 +2008_001073 +2008_001075 +2008_001077 +2008_001080 +2008_001081 +2008_001083 +2008_001089 +2008_001090 +2008_001092 +2008_001098 +2008_001099 +2008_001104 +2008_001105 +2008_001106 +2008_001111 +2008_001112 +2008_001113 +2008_001114 +2008_001115 +2008_001118 +2008_001119 +2008_001120 +2008_001121 +2008_001122 +2008_001130 +2008_001133 +2008_001134 +2008_001136 +2008_001137 +2008_001139 +2008_001140 +2008_001142 +2008_001143 +2008_001147 +2008_001154 +2008_001155 +2008_001158 +2008_001159 +2008_001160 +2008_001161 +2008_001164 +2008_001166 +2008_001167 +2008_001168 +2008_001169 +2008_001171 +2008_001177 +2008_001182 +2008_001183 +2008_001185 +2008_001188 +2008_001189 +2008_001190 +2008_001192 +2008_001194 +2008_001196 +2008_001199 +2008_001202 +2008_001203 +2008_001205 +2008_001206 +2008_001208 +2008_001210 +2008_001215 +2008_001218 +2008_001219 +2008_001220 +2008_001221 +2008_001223 +2008_001225 +2008_001226 +2008_001227 +2008_001230 +2008_001235 +2008_001236 +2008_001238 +2008_001241 +2008_001245 +2008_001248 +2008_001255 +2008_001257 +2008_001262 +2008_001263 +2008_001264 +2008_001267 +2008_001271 +2008_001272 +2008_001274 +2008_001275 +2008_001278 +2008_001284 +2008_001285 +2008_001290 +2008_001294 +2008_001296 +2008_001299 +2008_001301 +2008_001302 +2008_001304 +2008_001306 +2008_001307 +2008_001310 +2008_001312 +2008_001314 +2008_001318 +2008_001320 +2008_001322 +2008_001325 +2008_001329 +2008_001333 +2008_001334 +2008_001335 +2008_001336 +2008_001338 +2008_001340 +2008_001344 +2008_001346 +2008_001349 +2008_001350 +2008_001351 +2008_001353 +2008_001356 +2008_001357 +2008_001358 +2008_001359 +2008_001366 +2008_001367 +2008_001369 +2008_001373 +2008_001374 +2008_001375 +2008_001376 +2008_001380 +2008_001382 +2008_001383 +2008_001385 +2008_001387 +2008_001388 +2008_001389 +2008_001390 +2008_001391 +2008_001395 +2008_001399 +2008_001401 +2008_001402 +2008_001405 +2008_001406 +2008_001408 +2008_001410 +2008_001413 +2008_001414 +2008_001415 +2008_001419 +2008_001420 +2008_001427 +2008_001428 +2008_001429 +2008_001430 +2008_001431 +2008_001432 +2008_001434 +2008_001436 +2008_001437 +2008_001440 +2008_001444 +2008_001445 +2008_001446 +2008_001448 +2008_001451 +2008_001454 +2008_001455 +2008_001456 +2008_001460 +2008_001461 +2008_001462 +2008_001464 +2008_001466 +2008_001467 +2008_001468 +2008_001470 +2008_001475 +2008_001479 +2008_001481 +2008_001482 +2008_001486 +2008_001488 +2008_001493 +2008_001494 +2008_001495 +2008_001498 +2008_001500 +2008_001501 +2008_001503 +2008_001510 +2008_001516 +2008_001520 +2008_001522 +2008_001523 +2008_001525 +2008_001527 +2008_001529 +2008_001533 +2008_001534 +2008_001536 +2008_001538 +2008_001539 +2008_001540 +2008_001541 +2008_001542 +2008_001543 +2008_001544 +2008_001549 +2008_001550 +2008_001551 +2008_001553 +2008_001563 +2008_001564 +2008_001566 +2008_001574 +2008_001575 +2008_001576 +2008_001577 +2008_001582 +2008_001586 +2008_001589 +2008_001590 +2008_001591 +2008_001592 +2008_001593 +2008_001594 +2008_001596 +2008_001598 +2008_001601 +2008_001602 +2008_001605 +2008_001607 +2008_001609 +2008_001610 +2008_001613 +2008_001615 +2008_001617 +2008_001619 +2008_001620 +2008_001622 +2008_001624 +2008_001625 +2008_001626 +2008_001631 +2008_001632 +2008_001636 +2008_001638 +2008_001641 +2008_001643 +2008_001645 +2008_001648 +2008_001649 +2008_001652 +2008_001653 +2008_001655 +2008_001659 +2008_001660 +2008_001661 +2008_001663 +2008_001666 +2008_001667 +2008_001668 +2008_001669 +2008_001670 +2008_001673 +2008_001676 +2008_001679 +2008_001680 +2008_001681 +2008_001690 +2008_001691 +2008_001692 +2008_001694 +2008_001697 +2008_001699 +2008_001702 +2008_001704 +2008_001706 +2008_001708 +2008_001709 +2008_001710 +2008_001712 +2008_001716 +2008_001717 +2008_001719 +2008_001722 +2008_001723 +2008_001724 +2008_001727 +2008_001729 +2008_001730 +2008_001731 +2008_001735 +2008_001736 +2008_001737 +2008_001741 +2008_001742 +2008_001744 +2008_001745 +2008_001746 +2008_001750 +2008_001751 +2008_001757 +2008_001758 +2008_001761 +2008_001763 +2008_001764 +2008_001765 +2008_001769 +2008_001770 +2008_001772 +2008_001773 +2008_001774 +2008_001775 +2008_001781 +2008_001782 +2008_001783 +2008_001784 +2008_001787 +2008_001789 +2008_001791 +2008_001792 +2008_001797 +2008_001801 +2008_001802 +2008_001805 +2008_001806 +2008_001808 +2008_001809 +2008_001810 +2008_001811 +2008_001812 +2008_001813 +2008_001814 +2008_001815 +2008_001816 +2008_001820 +2008_001823 +2008_001825 +2008_001829 +2008_001830 +2008_001832 +2008_001834 +2008_001836 +2008_001837 +2008_001838 +2008_001841 +2008_001842 +2008_001843 +2008_001845 +2008_001849 +2008_001850 +2008_001852 +2008_001854 +2008_001856 +2008_001858 +2008_001860 +2008_001862 +2008_001863 +2008_001865 +2008_001866 +2008_001867 +2008_001869 +2008_001871 +2008_001872 +2008_001876 +2008_001880 +2008_001881 +2008_001882 +2008_001888 +2008_001894 +2008_001896 +2008_001899 +2008_001903 +2008_001905 +2008_001907 +2008_001908 +2008_001909 +2008_001910 +2008_001911 +2008_001914 +2008_001919 +2008_001920 +2008_001921 +2008_001926 +2008_001928 +2008_001929 +2008_001930 +2008_001932 +2008_001934 +2008_001937 +2008_001941 +2008_001945 +2008_001946 +2008_001947 +2008_001951 +2008_001955 +2008_001956 +2008_001957 +2008_001958 +2008_001961 +2008_001965 +2008_001967 +2008_001969 +2008_001970 +2008_001977 +2008_001978 +2008_001979 +2008_001980 +2008_001982 +2008_001985 +2008_001986 +2008_001987 +2008_001989 +2008_001997 +2008_001998 +2008_002000 +2008_002001 +2008_002002 +2008_002003 +2008_002004 +2008_002005 +2008_002007 +2008_002009 +2008_002011 +2008_002013 +2008_002017 +2008_002021 +2008_002023 +2008_002026 +2008_002031 +2008_002032 +2008_002033 +2008_002035 +2008_002036 +2008_002037 +2008_002039 +2008_002042 +2008_002045 +2008_002046 +2008_002047 +2008_002052 +2008_002056 +2008_002058 +2008_002061 +2008_002062 +2008_002064 +2008_002066 +2008_002067 +2008_002069 +2008_002071 +2008_002073 +2008_002079 +2008_002080 +2008_002082 +2008_002084 +2008_002086 +2008_002088 +2008_002092 +2008_002093 +2008_002094 +2008_002096 +2008_002098 +2008_002099 +2008_002103 +2008_002107 +2008_002112 +2008_002113 +2008_002114 +2008_002115 +2008_002116 +2008_002117 +2008_002118 +2008_002119 +2008_002123 +2008_002124 +2008_002129 +2008_002131 +2008_002132 +2008_002138 +2008_002140 +2008_002144 +2008_002145 +2008_002146 +2008_002148 +2008_002150 +2008_002151 +2008_002153 +2008_002155 +2008_002156 +2008_002158 +2008_002160 +2008_002162 +2008_002167 +2008_002169 +2008_002172 +2008_002175 +2008_002176 +2008_002177 +2008_002179 +2008_002181 +2008_002182 +2008_002185 +2008_002191 +2008_002193 +2008_002194 +2008_002195 +2008_002197 +2008_002198 +2008_002199 +2008_002200 +2008_002201 +2008_002202 +2008_002204 +2008_002206 +2008_002207 +2008_002208 +2008_002209 +2008_002210 +2008_002215 +2008_002218 +2008_002220 +2008_002221 +2008_002222 +2008_002223 +2008_002225 +2008_002227 +2008_002229 +2008_002231 +2008_002234 +2008_002236 +2008_002243 +2008_002244 +2008_002247 +2008_002248 +2008_002250 +2008_002251 +2008_002255 +2008_002258 +2008_002259 +2008_002262 +2008_002267 +2008_002270 +2008_002272 +2008_002278 +2008_002279 +2008_002280 +2008_002281 +2008_002283 +2008_002288 +2008_002292 +2008_002293 +2008_002294 +2008_002296 +2008_002298 +2008_002299 +2008_002304 +2008_002305 +2008_002307 +2008_002311 +2008_002312 +2008_002314 +2008_002317 +2008_002321 +2008_002322 +2008_002324 +2008_002325 +2008_002327 +2008_002328 +2008_002329 +2008_002330 +2008_002331 +2008_002335 +2008_002338 +2008_002340 +2008_002343 +2008_002344 +2008_002347 +2008_002349 +2008_002350 +2008_002356 +2008_002357 +2008_002359 +2008_002361 +2008_002362 +2008_002365 +2008_002366 +2008_002368 +2008_002369 +2008_002370 +2008_002372 +2008_002374 +2008_002377 +2008_002378 +2008_002384 +2008_002389 +2008_002395 +2008_002399 +2008_002401 +2008_002403 +2008_002404 +2008_002405 +2008_002408 +2008_002410 +2008_002411 +2008_002412 +2008_002414 +2008_002418 +2008_002419 +2008_002422 +2008_002424 +2008_002425 +2008_002428 +2008_002430 +2008_002434 +2008_002436 +2008_002437 +2008_002438 +2008_002439 +2008_002441 +2008_002442 +2008_002444 +2008_002445 +2008_002446 +2008_002448 +2008_002451 +2008_002452 +2008_002454 +2008_002456 +2008_002457 +2008_002458 +2008_002459 +2008_002461 +2008_002465 +2008_002466 +2008_002470 +2008_002471 +2008_002473 +2008_002477 +2008_002481 +2008_002482 +2008_002483 +2008_002484 +2008_002485 +2008_002487 +2008_002491 +2008_002494 +2008_002499 +2008_002501 +2008_002502 +2008_002506 +2008_002508 +2008_002509 +2008_002510 +2008_002512 +2008_002514 +2008_002515 +2008_002523 +2008_002524 +2008_002526 +2008_002527 +2008_002533 +2008_002540 +2008_002541 +2008_002542 +2008_002543 +2008_002547 +2008_002549 +2008_002551 +2008_002555 +2008_002558 +2008_002562 +2008_002564 +2008_002566 +2008_002567 +2008_002568 +2008_002574 +2008_002575 +2008_002576 +2008_002578 +2008_002579 +2008_002583 +2008_002584 +2008_002589 +2008_002590 +2008_002597 +2008_002598 +2008_002599 +2008_002601 +2008_002603 +2008_002606 +2008_002610 +2008_002612 +2008_002613 +2008_002616 +2008_002621 +2008_002622 +2008_002624 +2008_002625 +2008_002631 +2008_002634 +2008_002638 +2008_002639 +2008_002640 +2008_002641 +2008_002643 +2008_002645 +2008_002647 +2008_002649 +2008_002650 +2008_002652 +2008_002653 +2008_002662 +2008_002665 +2008_002666 +2008_002668 +2008_002670 +2008_002672 +2008_002673 +2008_002674 +2008_002675 +2008_002676 +2008_002677 +2008_002678 +2008_002679 +2008_002682 +2008_002684 +2008_002686 +2008_002687 +2008_002696 +2008_002697 +2008_002698 +2008_002700 +2008_002701 +2008_002704 +2008_002705 +2008_002709 +2008_002710 +2008_002712 +2008_002714 +2008_002715 +2008_002716 +2008_002718 +2008_002719 +2008_002720 +2008_002725 +2008_002728 +2008_002730 +2008_002732 +2008_002733 +2008_002735 +2008_002736 +2008_002738 +2008_002741 +2008_002746 +2008_002749 +2008_002750 +2008_002751 +2008_002752 +2008_002753 +2008_002756 +2008_002758 +2008_002760 +2008_002762 +2008_002766 +2008_002767 +2008_002768 +2008_002772 +2008_002773 +2008_002774 +2008_002776 +2008_002783 +2008_002784 +2008_002787 +2008_002789 +2008_002791 +2008_002792 +2008_002793 +2008_002794 +2008_002795 +2008_002801 +2008_002804 +2008_002806 +2008_002808 +2008_002809 +2008_002811 +2008_002813 +2008_002814 +2008_002817 +2008_002820 +2008_002823 +2008_002826 +2008_002829 +2008_002830 +2008_002831 +2008_002834 +2008_002838 +2008_002842 +2008_002843 +2008_002845 +2008_002847 +2008_002848 +2008_002850 +2008_002852 +2008_002854 +2008_002856 +2008_002857 +2008_002860 +2008_002866 +2008_002868 +2008_002869 +2008_002870 +2008_002872 +2008_002873 +2008_002875 +2008_002876 +2008_002879 +2008_002880 +2008_002882 +2008_002883 +2008_002885 +2008_002887 +2008_002890 +2008_002891 +2008_002892 +2008_002894 +2008_002897 +2008_002899 +2008_002903 +2008_002906 +2008_002908 +2008_002909 +2008_002910 +2008_002913 +2008_002916 +2008_002917 +2008_002920 +2008_002922 +2008_002926 +2008_002930 +2008_002931 +2008_002932 +2008_002943 +2008_002946 +2008_002947 +2008_002948 +2008_002951 +2008_002954 +2008_002955 +2008_002956 +2008_002957 +2008_002960 +2008_002961 +2008_002965 +2008_002966 +2008_002968 +2008_002970 +2008_002971 +2008_002972 +2008_002973 +2008_002977 +2008_002983 +2008_002984 +2008_002985 +2008_002988 +2008_002992 +2008_002993 +2008_002997 +2008_002999 +2008_003001 +2008_003005 +2008_003008 +2008_003013 +2008_003015 +2008_003017 +2008_003018 +2008_003020 +2008_003021 +2008_003022 +2008_003023 +2008_003025 +2008_003030 +2008_003039 +2008_003041 +2008_003043 +2008_003045 +2008_003048 +2008_003049 +2008_003051 +2008_003052 +2008_003053 +2008_003055 +2008_003056 +2008_003057 +2008_003059 +2008_003060 +2008_003061 +2008_003062 +2008_003063 +2008_003065 +2008_003067 +2008_003068 +2008_003072 +2008_003073 +2008_003075 +2008_003079 +2008_003081 +2008_003082 +2008_003083 +2008_003087 +2008_003088 +2008_003089 +2008_003090 +2008_003093 +2008_003094 +2008_003095 +2008_003099 +2008_003100 +2008_003101 +2008_003104 +2008_003106 +2008_003107 +2008_003112 +2008_003114 +2008_003120 +2008_003122 +2008_003127 +2008_003128 +2008_003132 +2008_003133 +2008_003134 +2008_003136 +2008_003140 +2008_003143 +2008_003144 +2008_003146 +2008_003147 +2008_003151 +2008_003152 +2008_003154 +2008_003157 +2008_003160 +2008_003161 +2008_003167 +2008_003168 +2008_003170 +2008_003178 +2008_003180 +2008_003181 +2008_003182 +2008_003186 +2008_003187 +2008_003189 +2008_003191 +2008_003193 +2008_003196 +2008_003200 +2008_003202 +2008_003203 +2008_003205 +2008_003208 +2008_003209 +2008_003211 +2008_003213 +2008_003220 +2008_003222 +2008_003224 +2008_003225 +2008_003228 +2008_003231 +2008_003232 +2008_003239 +2008_003242 +2008_003244 +2008_003245 +2008_003248 +2008_003249 +2008_003251 +2008_003252 +2008_003255 +2008_003256 +2008_003261 +2008_003263 +2008_003264 +2008_003265 +2008_003266 +2008_003269 +2008_003271 +2008_003272 +2008_003275 +2008_003276 +2008_003277 +2008_003278 +2008_003280 +2008_003283 +2008_003286 +2008_003287 +2008_003288 +2008_003289 +2008_003290 +2008_003291 +2008_003295 +2008_003297 +2008_003300 +2008_003302 +2008_003303 +2008_003304 +2008_003305 +2008_003311 +2008_003313 +2008_003316 +2008_003318 +2008_003320 +2008_003321 +2008_003323 +2008_003326 +2008_003329 +2008_003331 +2008_003334 +2008_003335 +2008_003336 +2008_003338 +2008_003342 +2008_003343 +2008_003344 +2008_003347 +2008_003348 +2008_003350 +2008_003351 +2008_003359 +2008_003360 +2008_003361 +2008_003362 +2008_003373 +2008_003374 +2008_003378 +2008_003380 +2008_003381 +2008_003382 +2008_003384 +2008_003386 +2008_003393 +2008_003394 +2008_003395 +2008_003402 +2008_003405 +2008_003406 +2008_003407 +2008_003409 +2008_003414 +2008_003415 +2008_003417 +2008_003418 +2008_003420 +2008_003423 +2008_003424 +2008_003426 +2008_003429 +2008_003430 +2008_003432 +2008_003433 +2008_003434 +2008_003435 +2008_003437 +2008_003439 +2008_003442 +2008_003443 +2008_003447 +2008_003448 +2008_003449 +2008_003452 +2008_003453 +2008_003458 +2008_003462 +2008_003463 +2008_003464 +2008_003466 +2008_003467 +2008_003469 +2008_003472 +2008_003475 +2008_003478 +2008_003479 +2008_003480 +2008_003482 +2008_003483 +2008_003484 +2008_003485 +2008_003488 +2008_003489 +2008_003493 +2008_003496 +2008_003497 +2008_003498 +2008_003500 +2008_003501 +2008_003504 +2008_003507 +2008_003510 +2008_003514 +2008_003515 +2008_003519 +2008_003520 +2008_003521 +2008_003522 +2008_003523 +2008_003524 +2008_003526 +2008_003531 +2008_003533 +2008_003534 +2008_003542 +2008_003544 +2008_003545 +2008_003547 +2008_003552 +2008_003557 +2008_003559 +2008_003560 +2008_003562 +2008_003565 +2008_003571 +2008_003572 +2008_003575 +2008_003578 +2008_003579 +2008_003580 +2008_003582 +2008_003585 +2008_003587 +2008_003589 +2008_003590 +2008_003591 +2008_003592 +2008_003593 +2008_003596 +2008_003598 +2008_003604 +2008_003607 +2008_003608 +2008_003609 +2008_003610 +2008_003611 +2008_003613 +2008_003617 +2008_003618 +2008_003619 +2008_003622 +2008_003624 +2008_003626 +2008_003629 +2008_003635 +2008_003636 +2008_003637 +2008_003638 +2008_003645 +2008_003647 +2008_003650 +2008_003652 +2008_003653 +2008_003655 +2008_003658 +2008_003659 +2008_003662 +2008_003665 +2008_003667 +2008_003671 +2008_003672 +2008_003673 +2008_003674 +2008_003675 +2008_003677 +2008_003680 +2008_003681 +2008_003682 +2008_003683 +2008_003684 +2008_003685 +2008_003688 +2008_003689 +2008_003691 +2008_003694 +2008_003697 +2008_003701 +2008_003703 +2008_003704 +2008_003706 +2008_003707 +2008_003712 +2008_003718 +2008_003719 +2008_003720 +2008_003721 +2008_003722 +2008_003726 +2008_003729 +2008_003732 +2008_003737 +2008_003743 +2008_003744 +2008_003745 +2008_003746 +2008_003748 +2008_003749 +2008_003753 +2008_003754 +2008_003755 +2008_003756 +2008_003761 +2008_003762 +2008_003763 +2008_003764 +2008_003766 +2008_003767 +2008_003768 +2008_003769 +2008_003772 +2008_003773 +2008_003774 +2008_003775 +2008_003776 +2008_003779 +2008_003780 +2008_003781 +2008_003788 +2008_003789 +2008_003791 +2008_003793 +2008_003794 +2008_003796 +2008_003799 +2008_003800 +2008_003801 +2008_003802 +2008_003805 +2008_003811 +2008_003812 +2008_003813 +2008_003814 +2008_003815 +2008_003819 +2008_003820 +2008_003825 +2008_003826 +2008_003827 +2008_003829 +2008_003830 +2008_003831 +2008_003835 +2008_003838 +2008_003840 +2008_003841 +2008_003843 +2008_003844 +2008_003847 +2008_003849 +2008_003852 +2008_003854 +2008_003860 +2008_003864 +2008_003866 +2008_003868 +2008_003870 +2008_003871 +2008_003873 +2008_003881 +2008_003882 +2008_003883 +2008_003884 +2008_003888 +2008_003891 +2008_003892 +2008_003894 +2008_003904 +2008_003905 +2008_003908 +2008_003913 +2008_003914 +2008_003915 +2008_003916 +2008_003920 +2008_003921 +2008_003922 +2008_003924 +2008_003925 +2008_003929 +2008_003932 +2008_003933 +2008_003939 +2008_003940 +2008_003941 +2008_003942 +2008_003943 +2008_003944 +2008_003945 +2008_003947 +2008_003948 +2008_003951 +2008_003956 +2008_003958 +2008_003962 +2008_003965 +2008_003967 +2008_003969 +2008_003970 +2008_003971 +2008_003974 +2008_003975 +2008_003978 +2008_003983 +2008_003984 +2008_003985 +2008_003986 +2008_003988 +2008_003992 +2008_003995 +2008_003996 +2008_003997 +2008_003998 +2008_004002 +2008_004003 +2008_004004 +2008_004006 +2008_004007 +2008_004008 +2008_004014 +2008_004015 +2008_004016 +2008_004017 +2008_004018 +2008_004020 +2008_004021 +2008_004022 +2008_004024 +2008_004026 +2008_004027 +2008_004030 +2008_004036 +2008_004037 +2008_004040 +2008_004042 +2008_004044 +2008_004045 +2008_004046 +2008_004048 +2008_004053 +2008_004054 +2008_004055 +2008_004056 +2008_004058 +2008_004064 +2008_004066 +2008_004071 +2008_004074 +2008_004075 +2008_004076 +2008_004077 +2008_004080 +2008_004081 +2008_004084 +2008_004087 +2008_004088 +2008_004090 +2008_004092 +2008_004093 +2008_004097 +2008_004100 +2008_004102 +2008_004103 +2008_004105 +2008_004106 +2008_004110 +2008_004112 +2008_004113 +2008_004119 +2008_004120 +2008_004121 +2008_004122 +2008_004123 +2008_004124 +2008_004125 +2008_004126 +2008_004127 +2008_004130 +2008_004134 +2008_004135 +2008_004137 +2008_004138 +2008_004142 +2008_004145 +2008_004147 +2008_004148 +2008_004155 +2008_004161 +2008_004163 +2008_004165 +2008_004166 +2008_004171 +2008_004174 +2008_004176 +2008_004178 +2008_004182 +2008_004188 +2008_004189 +2008_004190 +2008_004195 +2008_004196 +2008_004198 +2008_004201 +2008_004203 +2008_004205 +2008_004208 +2008_004213 +2008_004214 +2008_004216 +2008_004217 +2008_004218 +2008_004221 +2008_004224 +2008_004230 +2008_004231 +2008_004232 +2008_004234 +2008_004235 +2008_004239 +2008_004242 +2008_004243 +2008_004245 +2008_004246 +2008_004247 +2008_004251 +2008_004257 +2008_004258 +2008_004259 +2008_004263 +2008_004265 +2008_004269 +2008_004270 +2008_004271 +2008_004273 +2008_004274 +2008_004276 +2008_004278 +2008_004280 +2008_004284 +2008_004287 +2008_004288 +2008_004289 +2008_004290 +2008_004291 +2008_004292 +2008_004293 +2008_004296 +2008_004297 +2008_004301 +2008_004303 +2008_004306 +2008_004307 +2008_004308 +2008_004312 +2008_004313 +2008_004314 +2008_004317 +2008_004318 +2008_004319 +2008_004321 +2008_004324 +2008_004325 +2008_004326 +2008_004327 +2008_004328 +2008_004330 +2008_004333 +2008_004342 +2008_004344 +2008_004347 +2008_004348 +2008_004353 +2008_004354 +2008_004357 +2008_004358 +2008_004361 +2008_004362 +2008_004365 +2008_004371 +2008_004372 +2008_004374 +2008_004378 +2008_004380 +2008_004384 +2008_004385 +2008_004387 +2008_004389 +2008_004391 +2008_004394 +2008_004398 +2008_004402 +2008_004403 +2008_004406 +2008_004408 +2008_004410 +2008_004411 +2008_004412 +2008_004414 +2008_004416 +2008_004417 +2008_004418 +2008_004419 +2008_004422 +2008_004425 +2008_004426 +2008_004427 +2008_004428 +2008_004430 +2008_004431 +2008_004435 +2008_004436 +2008_004438 +2008_004439 +2008_004441 +2008_004443 +2008_004445 +2008_004450 +2008_004452 +2008_004455 +2008_004457 +2008_004458 +2008_004459 +2008_004460 +2008_004462 +2008_004464 +2008_004469 +2008_004470 +2008_004471 +2008_004476 +2008_004478 +2008_004479 +2008_004480 +2008_004482 +2008_004487 +2008_004488 +2008_004490 +2008_004492 +2008_004493 +2008_004497 +2008_004498 +2008_004499 +2008_004501 +2008_004502 +2008_004504 +2008_004505 +2008_004506 +2008_004510 +2008_004512 +2008_004513 +2008_004515 +2008_004519 +2008_004520 +2008_004522 +2008_004525 +2008_004526 +2008_004528 +2008_004532 +2008_004533 +2008_004534 +2008_004538 +2008_004539 +2008_004540 +2008_004541 +2008_004544 +2008_004545 +2008_004546 +2008_004547 +2008_004549 +2008_004550 +2008_004551 +2008_004553 +2008_004554 +2008_004559 +2008_004564 +2008_004567 +2008_004568 +2008_004570 +2008_004574 +2008_004579 +2008_004581 +2008_004583 +2008_004584 +2008_004585 +2008_004588 +2008_004589 +2008_004590 +2008_004592 +2008_004593 +2008_004599 +2008_004602 +2008_004603 +2008_004605 +2008_004606 +2008_004607 +2008_004611 +2008_004613 +2008_004614 +2008_004615 +2008_004616 +2008_004617 +2008_004619 +2008_004620 +2008_004629 +2008_004630 +2008_004631 +2008_004632 +2008_004633 +2008_004634 +2008_004635 +2008_004636 +2008_004640 +2008_004646 +2008_004647 +2008_004648 +2008_004649 +2008_004653 +2008_004661 +2008_004662 +2008_004663 +2008_004665 +2008_004666 +2008_004667 +2008_004668 +2008_004670 +2008_004671 +2008_004672 +2008_004677 +2008_004678 +2008_004679 +2008_004684 +2008_004688 +2008_004689 +2008_004690 +2008_004692 +2008_004695 +2008_004696 +2008_004697 +2008_004702 +2008_004703 +2008_004706 +2008_004707 +2008_004711 +2008_004713 +2008_004718 +2008_004719 +2008_004720 +2008_004722 +2008_004725 +2008_004726 +2008_004729 +2008_004730 +2008_004732 +2008_004736 +2008_004739 +2008_004740 +2008_004742 +2008_004745 +2008_004749 +2008_004750 +2008_004752 +2008_004756 +2008_004760 +2008_004763 +2008_004764 +2008_004766 +2008_004767 +2008_004768 +2008_004770 +2008_004771 +2008_004774 +2008_004776 +2008_004777 +2008_004778 +2008_004781 +2008_004783 +2008_004784 +2008_004786 +2008_004794 +2008_004795 +2008_004797 +2008_004802 +2008_004804 +2008_004805 +2008_004807 +2008_004808 +2008_004812 +2008_004814 +2008_004819 +2008_004821 +2008_004822 +2008_004825 +2008_004827 +2008_004832 +2008_004833 +2008_004834 +2008_004837 +2008_004838 +2008_004841 +2008_004844 +2008_004845 +2008_004847 +2008_004849 +2008_004850 +2008_004851 +2008_004852 +2008_004856 +2008_004858 +2008_004862 +2008_004866 +2008_004868 +2008_004869 +2008_004872 +2008_004873 +2008_004874 +2008_004875 +2008_004876 +2008_004881 +2008_004885 +2008_004887 +2008_004892 +2008_004893 +2008_004894 +2008_004896 +2008_004898 +2008_004899 +2008_004900 +2008_004904 +2008_004907 +2008_004908 +2008_004911 +2008_004914 +2008_004917 +2008_004920 +2008_004921 +2008_004923 +2008_004926 +2008_004930 +2008_004931 +2008_004933 +2008_004934 +2008_004935 +2008_004937 +2008_004938 +2008_004940 +2008_004942 +2008_004945 +2008_004946 +2008_004948 +2008_004950 +2008_004955 +2008_004961 +2008_004964 +2008_004966 +2008_004967 +2008_004968 +2008_004969 +2008_004970 +2008_004973 +2008_004974 +2008_004975 +2008_004976 +2008_004977 +2008_004979 +2008_004981 +2008_004982 +2008_004983 +2008_004984 +2008_004985 +2008_004990 +2008_004991 +2008_004998 +2008_005000 +2008_005001 +2008_005003 +2008_005006 +2008_005008 +2008_005010 +2008_005013 +2008_005015 +2008_005016 +2008_005023 +2008_005032 +2008_005033 +2008_005035 +2008_005036 +2008_005037 +2008_005040 +2008_005042 +2008_005043 +2008_005045 +2008_005046 +2008_005051 +2008_005054 +2008_005055 +2008_005057 +2008_005061 +2008_005063 +2008_005064 +2008_005065 +2008_005066 +2008_005068 +2008_005070 +2008_005071 +2008_005072 +2008_005074 +2008_005078 +2008_005080 +2008_005081 +2008_005082 +2008_005084 +2008_005085 +2008_005088 +2008_005090 +2008_005092 +2008_005094 +2008_005096 +2008_005098 +2008_005101 +2008_005107 +2008_005108 +2008_005109 +2008_005110 +2008_005111 +2008_005114 +2008_005115 +2008_005117 +2008_005123 +2008_005127 +2008_005132 +2008_005133 +2008_005134 +2008_005136 +2008_005137 +2008_005139 +2008_005140 +2008_005146 +2008_005147 +2008_005150 +2008_005151 +2008_005156 +2008_005159 +2008_005160 +2008_005166 +2008_005167 +2008_005168 +2008_005171 +2008_005174 +2008_005178 +2008_005181 +2008_005182 +2008_005185 +2008_005186 +2008_005190 +2008_005191 +2008_005193 +2008_005194 +2008_005196 +2008_005201 +2008_005204 +2008_005205 +2008_005208 +2008_005209 +2008_005213 +2008_005214 +2008_005215 +2008_005216 +2008_005218 +2008_005220 +2008_005221 +2008_005231 +2008_005233 +2008_005234 +2008_005235 +2008_005236 +2008_005240 +2008_005243 +2008_005244 +2008_005247 +2008_005248 +2008_005250 +2008_005251 +2008_005252 +2008_005253 +2008_005255 +2008_005257 +2008_005260 +2008_005261 +2008_005266 +2008_005269 +2008_005270 +2008_005271 +2008_005272 +2008_005276 +2008_005277 +2008_005279 +2008_005281 +2008_005282 +2008_005283 +2008_005288 +2008_005294 +2008_005295 +2008_005296 +2008_005297 +2008_005300 +2008_005303 +2008_005304 +2008_005309 +2008_005310 +2008_005313 +2008_005315 +2008_005316 +2008_005319 +2008_005321 +2008_005323 +2008_005324 +2008_005325 +2008_005327 +2008_005329 +2008_005331 +2008_005333 +2008_005335 +2008_005336 +2008_005337 +2008_005342 +2008_005345 +2008_005346 +2008_005347 +2008_005348 +2008_005349 +2008_005350 +2008_005354 +2008_005356 +2008_005357 +2008_005359 +2008_005360 +2008_005361 +2008_005362 +2008_005363 +2008_005365 +2008_005367 +2008_005369 +2008_005373 +2008_005374 +2008_005375 +2008_005376 +2008_005378 +2008_005379 +2008_005380 +2008_005382 +2008_005386 +2008_005393 +2008_005395 +2008_005396 +2008_005400 +2008_005404 +2008_005405 +2008_005406 +2008_005408 +2008_005412 +2008_005414 +2008_005415 +2008_005417 +2008_005421 +2008_005423 +2008_005427 +2008_005429 +2008_005431 +2008_005436 +2008_005443 +2008_005444 +2008_005446 +2008_005447 +2008_005449 +2008_005451 +2008_005455 +2008_005456 +2008_005460 +2008_005463 +2008_005465 +2008_005467 +2008_005469 +2008_005472 +2008_005473 +2008_005477 +2008_005480 +2008_005484 +2008_005485 +2008_005490 +2008_005491 +2008_005494 +2008_005496 +2008_005498 +2008_005500 +2008_005501 +2008_005502 +2008_005504 +2008_005505 +2008_005507 +2008_005510 +2008_005511 +2008_005512 +2008_005514 +2008_005517 +2008_005519 +2008_005521 +2008_005522 +2008_005523 +2008_005526 +2008_005527 +2008_005530 +2008_005531 +2008_005534 +2008_005536 +2008_005538 +2008_005541 +2008_005548 +2008_005549 +2008_005550 +2008_005552 +2008_005553 +2008_005558 +2008_005560 +2008_005561 +2008_005563 +2008_005564 +2008_005566 +2008_005567 +2008_005569 +2008_005570 +2008_005572 +2008_005573 +2008_005574 +2008_005582 +2008_005584 +2008_005588 +2008_005589 +2008_005591 +2008_005593 +2008_005599 +2008_005600 +2008_005601 +2008_005603 +2008_005608 +2008_005609 +2008_005610 +2008_005611 +2008_005612 +2008_005614 +2008_005616 +2008_005618 +2008_005623 +2008_005625 +2008_005626 +2008_005627 +2008_005631 +2008_005634 +2008_005635 +2008_005636 +2008_005638 +2008_005639 +2008_005641 +2008_005643 +2008_005646 +2008_005649 +2008_005650 +2008_005652 +2008_005653 +2008_005656 +2008_005657 +2008_005660 +2008_005663 +2008_005664 +2008_005668 +2008_005673 +2008_005675 +2008_005677 +2008_005678 +2008_005679 +2008_005681 +2008_005682 +2008_005683 +2008_005685 +2008_005686 +2008_005687 +2008_005695 +2008_005698 +2008_005699 +2008_005701 +2008_005702 +2008_005703 +2008_005705 +2008_005706 +2008_005707 +2008_005713 +2008_005714 +2008_005716 +2008_005719 +2008_005720 +2008_005721 +2008_005724 +2008_005726 +2008_005728 +2008_005732 +2008_005734 +2008_005735 +2008_005736 +2008_005737 +2008_005739 +2008_005742 +2008_005747 +2008_005748 +2008_005750 +2008_005752 +2008_005757 +2008_005758 +2008_005761 +2008_005763 +2008_005764 +2008_005767 +2008_005768 +2008_005770 +2008_005774 +2008_005777 +2008_005779 +2008_005780 +2008_005788 +2008_005790 +2008_005791 +2008_005792 +2008_005794 +2008_005796 +2008_005798 +2008_005800 +2008_005801 +2008_005803 +2008_005805 +2008_005808 +2008_005810 +2008_005816 +2008_005817 +2008_005818 +2008_005821 +2008_005822 +2008_005823 +2008_005825 +2008_005831 +2008_005832 +2008_005834 +2008_005838 +2008_005839 +2008_005843 +2008_005845 +2008_005846 +2008_005847 +2008_005848 +2008_005850 +2008_005853 +2008_005855 +2008_005856 +2008_005857 +2008_005860 +2008_005863 +2008_005865 +2008_005867 +2008_005869 +2008_005871 +2008_005873 +2008_005874 +2008_005875 +2008_005877 +2008_005878 +2008_005881 +2008_005882 +2008_005883 +2008_005884 +2008_005889 +2008_005890 +2008_005891 +2008_005893 +2008_005897 +2008_005898 +2008_005902 +2008_005903 +2008_005907 +2008_005914 +2008_005916 +2008_005918 +2008_005921 +2008_005923 +2008_005924 +2008_005926 +2008_005928 +2008_005929 +2008_005933 +2008_005934 +2008_005935 +2008_005936 +2008_005937 +2008_005938 +2008_005939 +2008_005943 +2008_005945 +2008_005953 +2008_005954 +2008_005956 +2008_005957 +2008_005959 +2008_005960 +2008_005962 +2008_005964 +2008_005967 +2008_005968 +2008_005970 +2008_005972 +2008_005975 +2008_005976 +2008_005977 +2008_005978 +2008_005979 +2008_005980 +2008_005982 +2008_005984 +2008_005987 +2008_005989 +2008_005991 +2008_005997 +2008_006000 +2008_006002 +2008_006004 +2008_006007 +2008_006010 +2008_006014 +2008_006017 +2008_006020 +2008_006021 +2008_006024 +2008_006027 +2008_006028 +2008_006031 +2008_006032 +2008_006037 +2008_006038 +2008_006039 +2008_006041 +2008_006042 +2008_006045 +2008_006046 +2008_006047 +2008_006049 +2008_006050 +2008_006052 +2008_006058 +2008_006059 +2008_006062 +2008_006064 +2008_006065 +2008_006067 +2008_006068 +2008_006070 +2008_006071 +2008_006072 +2008_006074 +2008_006076 +2008_006078 +2008_006081 +2008_006082 +2008_006085 +2008_006087 +2008_006088 +2008_006090 +2008_006092 +2008_006094 +2008_006096 +2008_006099 +2008_006100 +2008_006102 +2008_006104 +2008_006109 +2008_006111 +2008_006112 +2008_006113 +2008_006117 +2008_006119 +2008_006120 +2008_006121 +2008_006124 +2008_006128 +2008_006129 +2008_006133 +2008_006135 +2008_006136 +2008_006140 +2008_006144 +2008_006145 +2008_006147 +2008_006148 +2008_006151 +2008_006152 +2008_006154 +2008_006158 +2008_006163 +2008_006164 +2008_006166 +2008_006169 +2008_006170 +2008_006175 +2008_006178 +2008_006179 +2008_006181 +2008_006182 +2008_006185 +2008_006186 +2008_006188 +2008_006190 +2008_006192 +2008_006194 +2008_006195 +2008_006200 +2008_006203 +2008_006205 +2008_006207 +2008_006210 +2008_006211 +2008_006213 +2008_006215 +2008_006218 +2008_006220 +2008_006221 +2008_006222 +2008_006224 +2008_006225 +2008_006227 +2008_006232 +2008_006233 +2008_006234 +2008_006235 +2008_006239 +2008_006240 +2008_006242 +2008_006244 +2008_006249 +2008_006250 +2008_006253 +2008_006256 +2008_006257 +2008_006258 +2008_006262 +2008_006265 +2008_006267 +2008_006269 +2008_006271 +2008_006272 +2008_006273 +2008_006276 +2008_006280 +2008_006281 +2008_006282 +2008_006285 +2008_006288 +2008_006289 +2008_006290 +2008_006294 +2008_006295 +2008_006298 +2008_006300 +2008_006303 +2008_006307 +2008_006310 +2008_006311 +2008_006315 +2008_006316 +2008_006317 +2008_006320 +2008_006323 +2008_006329 +2008_006330 +2008_006331 +2008_006335 +2008_006336 +2008_006337 +2008_006339 +2008_006345 +2008_006347 +2008_006349 +2008_006350 +2008_006351 +2008_006353 +2008_006355 +2008_006356 +2008_006359 +2008_006361 +2008_006362 +2008_006364 +2008_006365 +2008_006366 +2008_006368 +2008_006369 +2008_006370 +2008_006373 +2008_006376 +2008_006377 +2008_006382 +2008_006384 +2008_006386 +2008_006387 +2008_006389 +2008_006390 +2008_006392 +2008_006394 +2008_006397 +2008_006400 +2008_006401 +2008_006403 +2008_006404 +2008_006407 +2008_006409 +2008_006410 +2008_006416 +2008_006417 +2008_006419 +2008_006421 +2008_006424 +2008_006425 +2008_006427 +2008_006429 +2008_006430 +2008_006432 +2008_006433 +2008_006434 +2008_006436 +2008_006438 +2008_006441 +2008_006447 +2008_006448 +2008_006449 +2008_006452 +2008_006458 +2008_006461 +2008_006462 +2008_006463 +2008_006467 +2008_006470 +2008_006474 +2008_006475 +2008_006477 +2008_006481 +2008_006482 +2008_006483 +2008_006487 +2008_006488 +2008_006489 +2008_006490 +2008_006491 +2008_006496 +2008_006497 +2008_006500 +2008_006502 +2008_006503 +2008_006509 +2008_006511 +2008_006512 +2008_006517 +2008_006519 +2008_006520 +2008_006522 +2008_006524 +2008_006530 +2008_006534 +2008_006538 +2008_006543 +2008_006546 +2008_006547 +2008_006548 +2008_006549 +2008_006558 +2008_006561 +2008_006562 +2008_006564 +2008_006566 +2008_006567 +2008_006568 +2008_006570 +2008_006576 +2008_006578 +2008_006579 +2008_006585 +2008_006586 +2008_006587 +2008_006588 +2008_006591 +2008_006598 +2008_006599 +2008_006600 +2008_006602 +2008_006604 +2008_006605 +2008_006606 +2008_006609 +2008_006610 +2008_006611 +2008_006613 +2008_006614 +2008_006616 +2008_006617 +2008_006619 +2008_006621 +2008_006623 +2008_006624 +2008_006625 +2008_006626 +2008_006629 +2008_006631 +2008_006634 +2008_006635 +2008_006637 +2008_006638 +2008_006641 +2008_006642 +2008_006645 +2008_006646 +2008_006649 +2008_006650 +2008_006654 +2008_006655 +2008_006656 +2008_006657 +2008_006660 +2008_006662 +2008_006663 +2008_006665 +2008_006667 +2008_006668 +2008_006671 +2008_006677 +2008_006682 +2008_006684 +2008_006686 +2008_006690 +2008_006691 +2008_006692 +2008_006694 +2008_006696 +2008_006701 +2008_006705 +2008_006708 +2008_006710 +2008_006712 +2008_006714 +2008_006715 +2008_006716 +2008_006717 +2008_006718 +2008_006719 +2008_006724 +2008_006728 +2008_006730 +2008_006731 +2008_006732 +2008_006733 +2008_006737 +2008_006743 +2008_006746 +2008_006747 +2008_006748 +2008_006750 +2008_006751 +2008_006753 +2008_006758 +2008_006761 +2008_006762 +2008_006764 +2008_006765 +2008_006767 +2008_006773 +2008_006774 +2008_006776 +2008_006777 +2008_006778 +2008_006779 +2008_006781 +2008_006785 +2008_006792 +2008_006793 +2008_006796 +2008_006797 +2008_006798 +2008_006800 +2008_006802 +2008_006807 +2008_006808 +2008_006810 +2008_006811 +2008_006813 +2008_006815 +2008_006816 +2008_006817 +2008_006818 +2008_006819 +2008_006820 +2008_006824 +2008_006825 +2008_006827 +2008_006828 +2008_006831 +2008_006832 +2008_006833 +2008_006834 +2008_006837 +2008_006839 +2008_006841 +2008_006843 +2008_006844 +2008_006847 +2008_006849 +2008_006855 +2008_006857 +2008_006863 +2008_006864 +2008_006865 +2008_006868 +2008_006870 +2008_006872 +2008_006873 +2008_006877 +2008_006879 +2008_006880 +2008_006881 +2008_006882 +2008_006885 +2008_006889 +2008_006890 +2008_006892 +2008_006896 +2008_006898 +2008_006900 +2008_006902 +2008_006903 +2008_006904 +2008_006907 +2008_006908 +2008_006909 +2008_006910 +2008_006912 +2008_006919 +2008_006920 +2008_006921 +2008_006923 +2008_006924 +2008_006925 +2008_006926 +2008_006933 +2008_006936 +2008_006939 +2008_006941 +2008_006944 +2008_006946 +2008_006948 +2008_006949 +2008_006950 +2008_006951 +2008_006952 +2008_006953 +2008_006954 +2008_006956 +2008_006959 +2008_006960 +2008_006961 +2008_006962 +2008_006965 +2008_006967 +2008_006968 +2008_006969 +2008_006973 +2008_006979 +2008_006980 +2008_006987 +2008_006989 +2008_006991 +2008_006992 +2008_006997 +2008_006998 +2008_006999 +2008_007003 +2008_007004 +2008_007006 +2008_007009 +2008_007010 +2008_007011 +2008_007012 +2008_007014 +2008_007019 +2008_007021 +2008_007022 +2008_007026 +2008_007028 +2008_007030 +2008_007032 +2008_007034 +2008_007038 +2008_007039 +2008_007042 +2008_007043 +2008_007045 +2008_007050 +2008_007054 +2008_007056 +2008_007057 +2008_007058 +2008_007059 +2008_007060 +2008_007061 +2008_007064 +2008_007067 +2008_007069 +2008_007070 +2008_007073 +2008_007075 +2008_007076 +2008_007081 +2008_007082 +2008_007084 +2008_007085 +2008_007086 +2008_007090 +2008_007091 +2008_007095 +2008_007097 +2008_007098 +2008_007101 +2008_007103 +2008_007105 +2008_007106 +2008_007108 +2008_007112 +2008_007114 +2008_007115 +2008_007118 +2008_007119 +2008_007124 +2008_007129 +2008_007130 +2008_007131 +2008_007133 +2008_007134 +2008_007138 +2008_007142 +2008_007145 +2008_007146 +2008_007147 +2008_007151 +2008_007156 +2008_007161 +2008_007163 +2008_007164 +2008_007165 +2008_007166 +2008_007167 +2008_007168 +2008_007169 +2008_007171 +2008_007176 +2008_007179 +2008_007181 +2008_007182 +2008_007184 +2008_007185 +2008_007187 +2008_007188 +2008_007189 +2008_007190 +2008_007195 +2008_007196 +2008_007197 +2008_007201 +2008_007205 +2008_007207 +2008_007208 +2008_007211 +2008_007214 +2008_007216 +2008_007217 +2008_007218 +2008_007221 +2008_007222 +2008_007223 +2008_007225 +2008_007226 +2008_007227 +2008_007229 +2008_007231 +2008_007236 +2008_007237 +2008_007239 +2008_007241 +2008_007242 +2008_007245 +2008_007246 +2008_007247 +2008_007250 +2008_007252 +2008_007254 +2008_007256 +2008_007260 +2008_007261 +2008_007264 +2008_007265 +2008_007266 +2008_007274 +2008_007277 +2008_007279 +2008_007280 +2008_007281 +2008_007282 +2008_007285 +2008_007286 +2008_007287 +2008_007289 +2008_007291 +2008_007293 +2008_007295 +2008_007298 +2008_007305 +2008_007307 +2008_007311 +2008_007312 +2008_007313 +2008_007314 +2008_007317 +2008_007319 +2008_007320 +2008_007321 +2008_007323 +2008_007324 +2008_007325 +2008_007327 +2008_007332 +2008_007334 +2008_007335 +2008_007336 +2008_007339 +2008_007344 +2008_007346 +2008_007348 +2008_007352 +2008_007353 +2008_007355 +2008_007356 +2008_007357 +2008_007358 +2008_007361 +2008_007363 +2008_007364 +2008_007374 +2008_007375 +2008_007382 +2008_007383 +2008_007384 +2008_007388 +2008_007389 +2008_007390 +2008_007393 +2008_007394 +2008_007397 +2008_007398 +2008_007403 +2008_007404 +2008_007409 +2008_007410 +2008_007415 +2008_007417 +2008_007421 +2008_007423 +2008_007424 +2008_007425 +2008_007428 +2008_007430 +2008_007431 +2008_007432 +2008_007433 +2008_007434 +2008_007435 +2008_007438 +2008_007441 +2008_007442 +2008_007443 +2008_007444 +2008_007446 +2008_007448 +2008_007452 +2008_007455 +2008_007456 +2008_007458 +2008_007459 +2008_007461 +2008_007465 +2008_007466 +2008_007469 +2008_007470 +2008_007471 +2008_007472 +2008_007473 +2008_007476 +2008_007477 +2008_007478 +2008_007480 +2008_007485 +2008_007486 +2008_007488 +2008_007491 +2008_007494 +2008_007496 +2008_007500 +2008_007501 +2008_007504 +2008_007509 +2008_007510 +2008_007511 +2008_007514 +2008_007515 +2008_007519 +2008_007521 +2008_007524 +2008_007525 +2008_007528 +2008_007529 +2008_007531 +2008_007533 +2008_007534 +2008_007536 +2008_007537 +2008_007538 +2008_007544 +2008_007546 +2008_007556 +2008_007558 +2008_007559 +2008_007561 +2008_007565 +2008_007567 +2008_007573 +2008_007574 +2008_007576 +2008_007579 +2008_007581 +2008_007583 +2008_007584 +2008_007585 +2008_007586 +2008_007587 +2008_007588 +2008_007589 +2008_007591 +2008_007593 +2008_007594 +2008_007595 +2008_007597 +2008_007599 +2008_007604 +2008_007608 +2008_007610 +2008_007611 +2008_007612 +2008_007613 +2008_007617 +2008_007618 +2008_007621 +2008_007623 +2008_007625 +2008_007629 +2008_007630 +2008_007632 +2008_007635 +2008_007640 +2008_007641 +2008_007643 +2008_007646 +2008_007648 +2008_007649 +2008_007653 +2008_007656 +2008_007660 +2008_007661 +2008_007662 +2008_007664 +2008_007665 +2008_007666 +2008_007668 +2008_007669 +2008_007673 +2008_007676 +2008_007682 +2008_007683 +2008_007685 +2008_007688 +2008_007690 +2008_007691 +2008_007692 +2008_007693 +2008_007694 +2008_007696 +2008_007697 +2008_007698 +2008_007701 +2008_007702 +2008_007704 +2008_007706 +2008_007709 +2008_007710 +2008_007714 +2008_007716 +2008_007717 +2008_007719 +2008_007724 +2008_007726 +2008_007729 +2008_007730 +2008_007733 +2008_007735 +2008_007736 +2008_007739 +2008_007741 +2008_007742 +2008_007745 +2008_007746 +2008_007748 +2008_007749 +2008_007750 +2008_007752 +2008_007755 +2008_007757 +2008_007758 +2008_007759 +2008_007760 +2008_007761 +2008_007764 +2008_007766 +2008_007768 +2008_007770 +2008_007777 +2008_007779 +2008_007780 +2008_007781 +2008_007786 +2008_007787 +2008_007788 +2008_007789 +2008_007791 +2008_007793 +2008_007794 +2008_007798 +2008_007805 +2008_007806 +2008_007812 +2008_007816 +2008_007817 +2008_007819 +2008_007823 +2008_007825 +2008_007827 +2008_007829 +2008_007831 +2008_007833 +2008_007835 +2008_007837 +2008_007839 +2008_007840 +2008_007841 +2008_007842 +2008_007843 +2008_007848 +2008_007850 +2008_007852 +2008_007853 +2008_007854 +2008_007855 +2008_007858 +2008_007861 +2008_007864 +2008_007869 +2008_007870 +2008_007871 +2008_007872 +2008_007873 +2008_007875 +2008_007877 +2008_007879 +2008_007882 +2008_007883 +2008_007884 +2008_007887 +2008_007888 +2008_007890 +2008_007891 +2008_007893 +2008_007895 +2008_007897 +2008_007902 +2008_007904 +2008_007907 +2008_007909 +2008_007912 +2008_007913 +2008_007914 +2008_007915 +2008_007916 +2008_007917 +2008_007918 +2008_007922 +2008_007923 +2008_007928 +2008_007931 +2008_007932 +2008_007933 +2008_007935 +2008_007936 +2008_007937 +2008_007938 +2008_007940 +2008_007941 +2008_007942 +2008_007947 +2008_007948 +2008_007949 +2008_007950 +2008_007953 +2008_007954 +2008_007955 +2008_007962 +2008_007964 +2008_007966 +2008_007969 +2008_007970 +2008_007973 +2008_007975 +2008_007977 +2008_007981 +2008_007985 +2008_007986 +2008_007987 +2008_007988 +2008_007989 +2008_007990 +2008_007993 +2008_007997 +2008_007998 +2008_007999 +2008_008001 +2008_008002 +2008_008004 +2008_008007 +2008_008011 +2008_008012 +2008_008018 +2008_008020 +2008_008021 +2008_008022 +2008_008024 +2008_008025 +2008_008028 +2008_008029 +2008_008031 +2008_008034 +2008_008037 +2008_008040 +2008_008043 +2008_008044 +2008_008048 +2008_008052 +2008_008055 +2008_008057 +2008_008058 +2008_008064 +2008_008066 +2008_008069 +2008_008070 +2008_008072 +2008_008073 +2008_008074 +2008_008075 +2008_008080 +2008_008083 +2008_008084 +2008_008086 +2008_008091 +2008_008093 +2008_008095 +2008_008096 +2008_008097 +2008_008098 +2008_008105 +2008_008106 +2008_008109 +2008_008112 +2008_008113 +2008_008115 +2008_008116 +2008_008120 +2008_008121 +2008_008122 +2008_008123 +2008_008125 +2008_008130 +2008_008132 +2008_008134 +2008_008141 +2008_008145 +2008_008146 +2008_008147 +2008_008148 +2008_008150 +2008_008152 +2008_008154 +2008_008155 +2008_008162 +2008_008166 +2008_008169 +2008_008170 +2008_008175 +2008_008176 +2008_008177 +2008_008179 +2008_008180 +2008_008184 +2008_008185 +2008_008190 +2008_008191 +2008_008192 +2008_008193 +2008_008194 +2008_008197 +2008_008199 +2008_008200 +2008_008203 +2008_008206 +2008_008208 +2008_008210 +2008_008211 +2008_008212 +2008_008215 +2008_008217 +2008_008218 +2008_008220 +2008_008223 +2008_008224 +2008_008227 +2008_008229 +2008_008231 +2008_008232 +2008_008233 +2008_008234 +2008_008235 +2008_008237 +2008_008241 +2008_008242 +2008_008246 +2008_008254 +2008_008257 +2008_008262 +2008_008263 +2008_008266 +2008_008269 +2008_008271 +2008_008272 +2008_008274 +2008_008275 +2008_008276 +2008_008279 +2008_008281 +2008_008284 +2008_008287 +2008_008288 +2008_008292 +2008_008294 +2008_008297 +2008_008300 +2008_008302 +2008_008307 +2008_008309 +2008_008310 +2008_008313 +2008_008314 +2008_008315 +2008_008318 +2008_008319 +2008_008320 +2008_008321 +2008_008322 +2008_008323 +2008_008324 +2008_008325 +2008_008330 +2008_008331 +2008_008336 +2008_008337 +2008_008338 +2008_008341 +2008_008342 +2008_008343 +2008_008344 +2008_008345 +2008_008346 +2008_008347 +2008_008354 +2008_008356 +2008_008357 +2008_008359 +2008_008363 +2008_008364 +2008_008365 +2008_008366 +2008_008368 +2008_008370 +2008_008373 +2008_008376 +2008_008377 +2008_008379 +2008_008380 +2008_008382 +2008_008384 +2008_008387 +2008_008388 +2008_008395 +2008_008402 +2008_008403 +2008_008404 +2008_008406 +2008_008410 +2008_008411 +2008_008416 +2008_008423 +2008_008428 +2008_008429 +2008_008431 +2008_008432 +2008_008433 +2008_008435 +2008_008437 +2008_008439 +2008_008440 +2008_008443 +2008_008444 +2008_008446 +2008_008447 +2008_008450 +2008_008453 +2008_008455 +2008_008461 +2008_008462 +2008_008464 +2008_008466 +2008_008467 +2008_008470 +2008_008474 +2008_008476 +2008_008479 +2008_008480 +2008_008482 +2008_008487 +2008_008488 +2008_008490 +2008_008496 +2008_008497 +2008_008500 +2008_008501 +2008_008506 +2008_008507 +2008_008508 +2008_008511 +2008_008512 +2008_008517 +2008_008519 +2008_008521 +2008_008522 +2008_008524 +2008_008525 +2008_008526 +2008_008527 +2008_008528 +2008_008530 +2008_008531 +2008_008533 +2008_008536 +2008_008537 +2008_008538 +2008_008541 +2008_008544 +2008_008545 +2008_008546 +2008_008547 +2008_008549 +2008_008550 +2008_008552 +2008_008554 +2008_008560 +2008_008564 +2008_008567 +2008_008570 +2008_008572 +2008_008574 +2008_008578 +2008_008579 +2008_008583 +2008_008585 +2008_008588 +2008_008589 +2008_008590 +2008_008591 +2008_008593 +2008_008595 +2008_008598 +2008_008600 +2008_008601 +2008_008606 +2008_008607 +2008_008608 +2008_008611 +2008_008613 +2008_008615 +2008_008616 +2008_008617 +2008_008618 +2008_008619 +2008_008621 +2008_008622 +2008_008623 +2008_008624 +2008_008628 +2008_008632 +2008_008635 +2008_008636 +2008_008637 +2008_008641 +2008_008642 +2008_008649 +2008_008652 +2008_008654 +2008_008658 +2008_008659 +2008_008662 +2008_008665 +2008_008666 +2008_008668 +2008_008671 +2008_008673 +2008_008674 +2008_008675 +2008_008676 +2008_008679 +2008_008681 +2008_008683 +2008_008684 +2008_008685 +2008_008689 +2008_008690 +2008_008691 +2008_008694 +2008_008695 +2008_008696 +2008_008697 +2008_008700 +2008_008701 +2008_008705 +2008_008706 +2008_008707 +2008_008708 +2008_008713 +2008_008714 +2008_008717 +2008_008718 +2008_008719 +2008_008724 +2008_008725 +2008_008726 +2008_008732 +2008_008735 +2008_008739 +2008_008744 +2008_008745 +2008_008748 +2008_008749 +2008_008751 +2008_008753 +2008_008755 +2008_008757 +2008_008765 +2008_008767 +2008_008770 +2008_008772 +2008_008773 +2009_000001 +2009_000002 +2009_000006 +2009_000009 +2009_000010 +2009_000011 +2009_000014 +2009_000015 +2009_000016 +2009_000017 +2009_000021 +2009_000026 +2009_000027 +2009_000028 +2009_000029 +2009_000030 +2009_000035 +2009_000040 +2009_000041 +2009_000042 +2009_000045 +2009_000051 +2009_000052 +2009_000054 +2009_000055 +2009_000056 +2009_000058 +2009_000059 +2009_000060 +2009_000063 +2009_000066 +2009_000067 +2009_000068 +2009_000072 +2009_000073 +2009_000078 +2009_000082 +2009_000084 +2009_000085 +2009_000088 +2009_000089 +2009_000090 +2009_000091 +2009_000093 +2009_000097 +2009_000100 +2009_000102 +2009_000103 +2009_000104 +2009_000105 +2009_000109 +2009_000119 +2009_000120 +2009_000122 +2009_000124 +2009_000128 +2009_000130 +2009_000131 +2009_000132 +2009_000133 +2009_000135 +2009_000137 +2009_000140 +2009_000141 +2009_000142 +2009_000145 +2009_000146 +2009_000150 +2009_000151 +2009_000157 +2009_000158 +2009_000159 +2009_000160 +2009_000161 +2009_000164 +2009_000165 +2009_000168 +2009_000169 +2009_000171 +2009_000176 +2009_000177 +2009_000181 +2009_000182 +2009_000183 +2009_000184 +2009_000188 +2009_000189 +2009_000192 +2009_000195 +2009_000197 +2009_000198 +2009_000199 +2009_000203 +2009_000206 +2009_000209 +2009_000212 +2009_000214 +2009_000216 +2009_000217 +2009_000218 +2009_000223 +2009_000225 +2009_000227 +2009_000229 +2009_000232 +2009_000233 +2009_000237 +2009_000239 +2009_000244 +2009_000247 +2009_000248 +2009_000249 +2009_000250 +2009_000251 +2009_000253 +2009_000254 +2009_000257 +2009_000260 +2009_000268 +2009_000276 +2009_000277 +2009_000280 +2009_000282 +2009_000283 +2009_000284 +2009_000285 +2009_000286 +2009_000287 +2009_000288 +2009_000289 +2009_000290 +2009_000291 +2009_000293 +2009_000297 +2009_000298 +2009_000300 +2009_000303 +2009_000304 +2009_000305 +2009_000308 +2009_000312 +2009_000316 +2009_000317 +2009_000320 +2009_000321 +2009_000322 +2009_000327 +2009_000328 +2009_000330 +2009_000336 +2009_000337 +2009_000339 +2009_000340 +2009_000341 +2009_000342 +2009_000343 +2009_000344 +2009_000347 +2009_000350 +2009_000356 +2009_000366 +2009_000367 +2009_000370 +2009_000375 +2009_000377 +2009_000378 +2009_000379 +2009_000385 +2009_000389 +2009_000390 +2009_000393 +2009_000397 +2009_000398 +2009_000399 +2009_000400 +2009_000402 +2009_000405 +2009_000408 +2009_000409 +2009_000410 +2009_000411 +2009_000414 +2009_000416 +2009_000417 +2009_000419 +2009_000420 +2009_000422 +2009_000430 +2009_000435 +2009_000438 +2009_000439 +2009_000443 +2009_000444 +2009_000445 +2009_000449 +2009_000452 +2009_000453 +2009_000454 +2009_000456 +2009_000461 +2009_000463 +2009_000464 +2009_000466 +2009_000471 +2009_000472 +2009_000474 +2009_000476 +2009_000477 +2009_000483 +2009_000486 +2009_000491 +2009_000493 +2009_000494 +2009_000496 +2009_000499 +2009_000500 +2009_000501 +2009_000502 +2009_000503 +2009_000504 +2009_000505 +2009_000511 +2009_000512 +2009_000513 +2009_000515 +2009_000516 +2009_000519 +2009_000522 +2009_000525 +2009_000526 +2009_000527 +2009_000529 +2009_000532 +2009_000535 +2009_000536 +2009_000539 +2009_000542 +2009_000544 +2009_000545 +2009_000546 +2009_000547 +2009_000549 +2009_000550 +2009_000552 +2009_000553 +2009_000557 +2009_000558 +2009_000559 +2009_000560 +2009_000562 +2009_000563 +2009_000565 +2009_000566 +2009_000567 +2009_000568 +2009_000574 +2009_000575 +2009_000576 +2009_000577 +2009_000579 +2009_000585 +2009_000586 +2009_000590 +2009_000591 +2009_000592 +2009_000593 +2009_000595 +2009_000597 +2009_000599 +2009_000600 +2009_000602 +2009_000603 +2009_000604 +2009_000606 +2009_000611 +2009_000614 +2009_000615 +2009_000617 +2009_000624 +2009_000625 +2009_000626 +2009_000629 +2009_000631 +2009_000632 +2009_000634 +2009_000635 +2009_000636 +2009_000637 +2009_000638 +2009_000642 +2009_000647 +2009_000648 +2009_000651 +2009_000653 +2009_000655 +2009_000658 +2009_000661 +2009_000662 +2009_000663 +2009_000670 +2009_000672 +2009_000674 +2009_000676 +2009_000677 +2009_000679 +2009_000681 +2009_000683 +2009_000684 +2009_000686 +2009_000689 +2009_000690 +2009_000691 +2009_000692 +2009_000694 +2009_000695 +2009_000696 +2009_000702 +2009_000708 +2009_000709 +2009_000718 +2009_000719 +2009_000720 +2009_000722 +2009_000724 +2009_000725 +2009_000726 +2009_000734 +2009_000737 +2009_000741 +2009_000742 +2009_000744 +2009_000745 +2009_000746 +2009_000748 +2009_000750 +2009_000752 +2009_000755 +2009_000756 +2009_000757 +2009_000758 +2009_000759 +2009_000760 +2009_000762 +2009_000763 +2009_000768 +2009_000770 +2009_000774 +2009_000777 +2009_000778 +2009_000779 +2009_000782 +2009_000783 +2009_000789 +2009_000790 +2009_000791 +2009_000793 +2009_000794 +2009_000796 +2009_000797 +2009_000801 +2009_000804 +2009_000805 +2009_000811 +2009_000812 +2009_000815 +2009_000816 +2009_000817 +2009_000820 +2009_000821 +2009_000823 +2009_000824 +2009_000829 +2009_000830 +2009_000831 +2009_000833 +2009_000834 +2009_000837 +2009_000843 +2009_000846 +2009_000848 +2009_000849 +2009_000851 +2009_000852 +2009_000854 +2009_000856 +2009_000858 +2009_000862 +2009_000865 +2009_000867 +2009_000869 +2009_000871 +2009_000874 +2009_000882 +2009_000886 +2009_000887 +2009_000889 +2009_000890 +2009_000894 +2009_000895 +2009_000896 +2009_000897 +2009_000898 +2009_000899 +2009_000901 +2009_000902 +2009_000904 +2009_000906 +2009_000909 +2009_000910 +2009_000915 +2009_000920 +2009_000923 +2009_000925 +2009_000926 +2009_000927 +2009_000928 +2009_000930 +2009_000932 +2009_000934 +2009_000937 +2009_000938 +2009_000939 +2009_000945 +2009_000948 +2009_000953 +2009_000954 +2009_000955 +2009_000958 +2009_000960 +2009_000961 +2009_000962 +2009_000966 +2009_000967 +2009_000969 +2009_000970 +2009_000971 +2009_000973 +2009_000974 +2009_000975 +2009_000979 +2009_000980 +2009_000981 +2009_000985 +2009_000987 +2009_000990 +2009_000992 +2009_000995 +2009_000996 +2009_001000 +2009_001002 +2009_001006 +2009_001007 +2009_001009 +2009_001011 +2009_001012 +2009_001013 +2009_001016 +2009_001019 +2009_001021 +2009_001024 +2009_001026 +2009_001027 +2009_001028 +2009_001030 +2009_001036 +2009_001037 +2009_001038 +2009_001040 +2009_001042 +2009_001044 +2009_001052 +2009_001054 +2009_001055 +2009_001056 +2009_001057 +2009_001059 +2009_001061 +2009_001069 +2009_001070 +2009_001075 +2009_001078 +2009_001079 +2009_001081 +2009_001083 +2009_001084 +2009_001085 +2009_001090 +2009_001091 +2009_001094 +2009_001095 +2009_001096 +2009_001097 +2009_001098 +2009_001100 +2009_001102 +2009_001103 +2009_001104 +2009_001105 +2009_001106 +2009_001107 +2009_001110 +2009_001111 +2009_001113 +2009_001117 +2009_001118 +2009_001120 +2009_001121 +2009_001124 +2009_001126 +2009_001128 +2009_001129 +2009_001133 +2009_001134 +2009_001135 +2009_001137 +2009_001138 +2009_001139 +2009_001140 +2009_001145 +2009_001146 +2009_001147 +2009_001148 +2009_001151 +2009_001152 +2009_001153 +2009_001154 +2009_001155 +2009_001159 +2009_001163 +2009_001164 +2009_001166 +2009_001172 +2009_001177 +2009_001180 +2009_001181 +2009_001184 +2009_001188 +2009_001190 +2009_001192 +2009_001195 +2009_001196 +2009_001197 +2009_001198 +2009_001199 +2009_001201 +2009_001203 +2009_001205 +2009_001206 +2009_001207 +2009_001208 +2009_001212 +2009_001216 +2009_001217 +2009_001221 +2009_001224 +2009_001225 +2009_001227 +2009_001229 +2009_001230 +2009_001236 +2009_001237 +2009_001238 +2009_001241 +2009_001242 +2009_001243 +2009_001245 +2009_001249 +2009_001251 +2009_001252 +2009_001253 +2009_001254 +2009_001257 +2009_001259 +2009_001260 +2009_001263 +2009_001264 +2009_001266 +2009_001268 +2009_001270 +2009_001271 +2009_001279 +2009_001282 +2009_001283 +2009_001285 +2009_001286 +2009_001288 +2009_001289 +2009_001291 +2009_001301 +2009_001303 +2009_001305 +2009_001306 +2009_001308 +2009_001309 +2009_001311 +2009_001312 +2009_001313 +2009_001316 +2009_001319 +2009_001320 +2009_001321 +2009_001322 +2009_001323 +2009_001326 +2009_001327 +2009_001328 +2009_001329 +2009_001339 +2009_001343 +2009_001344 +2009_001345 +2009_001348 +2009_001349 +2009_001350 +2009_001354 +2009_001355 +2009_001357 +2009_001359 +2009_001360 +2009_001361 +2009_001364 +2009_001366 +2009_001367 +2009_001368 +2009_001369 +2009_001370 +2009_001371 +2009_001372 +2009_001374 +2009_001375 +2009_001376 +2009_001384 +2009_001385 +2009_001387 +2009_001388 +2009_001389 +2009_001390 +2009_001393 +2009_001395 +2009_001397 +2009_001398 +2009_001403 +2009_001406 +2009_001407 +2009_001409 +2009_001412 +2009_001413 +2009_001414 +2009_001417 +2009_001419 +2009_001422 +2009_001424 +2009_001426 +2009_001427 +2009_001431 +2009_001434 +2009_001435 +2009_001437 +2009_001440 +2009_001443 +2009_001444 +2009_001446 +2009_001447 +2009_001448 +2009_001449 +2009_001450 +2009_001452 +2009_001453 +2009_001456 +2009_001457 +2009_001462 +2009_001463 +2009_001466 +2009_001468 +2009_001470 +2009_001472 +2009_001474 +2009_001475 +2009_001476 +2009_001479 +2009_001480 +2009_001481 +2009_001484 +2009_001490 +2009_001493 +2009_001494 +2009_001498 +2009_001500 +2009_001501 +2009_001502 +2009_001507 +2009_001508 +2009_001509 +2009_001514 +2009_001516 +2009_001517 +2009_001518 +2009_001519 +2009_001521 +2009_001522 +2009_001526 +2009_001534 +2009_001537 +2009_001538 +2009_001539 +2009_001541 +2009_001542 +2009_001544 +2009_001546 +2009_001549 +2009_001550 +2009_001553 +2009_001554 +2009_001555 +2009_001558 +2009_001562 +2009_001566 +2009_001567 +2009_001568 +2009_001570 +2009_001575 +2009_001577 +2009_001581 +2009_001585 +2009_001587 +2009_001589 +2009_001590 +2009_001591 +2009_001593 +2009_001594 +2009_001595 +2009_001598 +2009_001602 +2009_001605 +2009_001606 +2009_001608 +2009_001611 +2009_001612 +2009_001614 +2009_001615 +2009_001617 +2009_001618 +2009_001621 +2009_001623 +2009_001625 +2009_001627 +2009_001631 +2009_001633 +2009_001635 +2009_001636 +2009_001638 +2009_001640 +2009_001642 +2009_001643 +2009_001645 +2009_001646 +2009_001648 +2009_001651 +2009_001653 +2009_001657 +2009_001660 +2009_001664 +2009_001667 +2009_001670 +2009_001671 +2009_001673 +2009_001674 +2009_001675 +2009_001676 +2009_001677 +2009_001678 +2009_001682 +2009_001689 +2009_001690 +2009_001693 +2009_001695 +2009_001696 +2009_001699 +2009_001704 +2009_001705 +2009_001706 +2009_001707 +2009_001709 +2009_001713 +2009_001715 +2009_001719 +2009_001720 +2009_001723 +2009_001724 +2009_001732 +2009_001733 +2009_001734 +2009_001735 +2009_001738 +2009_001740 +2009_001741 +2009_001743 +2009_001744 +2009_001746 +2009_001747 +2009_001749 +2009_001750 +2009_001751 +2009_001752 +2009_001754 +2009_001755 +2009_001758 +2009_001759 +2009_001764 +2009_001767 +2009_001770 +2009_001774 +2009_001778 +2009_001779 +2009_001780 +2009_001781 +2009_001782 +2009_001783 +2009_001784 +2009_001792 +2009_001794 +2009_001798 +2009_001799 +2009_001800 +2009_001801 +2009_001802 +2009_001805 +2009_001806 +2009_001807 +2009_001809 +2009_001810 +2009_001811 +2009_001812 +2009_001817 +2009_001820 +2009_001822 +2009_001823 +2009_001825 +2009_001826 +2009_001827 +2009_001828 +2009_001830 +2009_001831 +2009_001833 +2009_001835 +2009_001837 +2009_001839 +2009_001840 +2009_001846 +2009_001847 +2009_001848 +2009_001852 +2009_001853 +2009_001856 +2009_001858 +2009_001861 +2009_001864 +2009_001865 +2009_001867 +2009_001868 +2009_001869 +2009_001871 +2009_001873 +2009_001874 +2009_001875 +2009_001881 +2009_001884 +2009_001885 +2009_001888 +2009_001890 +2009_001894 +2009_001897 +2009_001898 +2009_001902 +2009_001904 +2009_001905 +2009_001906 +2009_001907 +2009_001908 +2009_001909 +2009_001910 +2009_001911 +2009_001916 +2009_001917 +2009_001922 +2009_001926 +2009_001927 +2009_001929 +2009_001931 +2009_001933 +2009_001934 +2009_001937 +2009_001940 +2009_001945 +2009_001948 +2009_001949 +2009_001952 +2009_001959 +2009_001960 +2009_001961 +2009_001962 +2009_001964 +2009_001965 +2009_001967 +2009_001971 +2009_001972 +2009_001973 +2009_001975 +2009_001976 +2009_001977 +2009_001979 +2009_001980 +2009_001984 +2009_001988 +2009_001990 +2009_001994 +2009_001997 +2009_001999 +2009_002000 +2009_002001 +2009_002002 +2009_002003 +2009_002008 +2009_002009 +2009_002010 +2009_002011 +2009_002019 +2009_002024 +2009_002031 +2009_002037 +2009_002039 +2009_002040 +2009_002044 +2009_002046 +2009_002052 +2009_002053 +2009_002054 +2009_002055 +2009_002056 +2009_002057 +2009_002058 +2009_002060 +2009_002061 +2009_002064 +2009_002066 +2009_002072 +2009_002073 +2009_002077 +2009_002078 +2009_002083 +2009_002086 +2009_002087 +2009_002088 +2009_002089 +2009_002093 +2009_002096 +2009_002098 +2009_002099 +2009_002103 +2009_002104 +2009_002105 +2009_002107 +2009_002110 +2009_002111 +2009_002112 +2009_002116 +2009_002117 +2009_002118 +2009_002119 +2009_002120 +2009_002123 +2009_002126 +2009_002127 +2009_002128 +2009_002129 +2009_002131 +2009_002133 +2009_002136 +2009_002137 +2009_002139 +2009_002141 +2009_002144 +2009_002145 +2009_002146 +2009_002147 +2009_002149 +2009_002151 +2009_002152 +2009_002153 +2009_002169 +2009_002173 +2009_002175 +2009_002176 +2009_002177 +2009_002180 +2009_002182 +2009_002191 +2009_002192 +2009_002193 +2009_002194 +2009_002197 +2009_002198 +2009_002199 +2009_002203 +2009_002204 +2009_002205 +2009_002208 +2009_002211 +2009_002212 +2009_002214 +2009_002215 +2009_002216 +2009_002219 +2009_002222 +2009_002225 +2009_002226 +2009_002228 +2009_002229 +2009_002230 +2009_002231 +2009_002232 +2009_002235 +2009_002236 +2009_002240 +2009_002242 +2009_002245 +2009_002252 +2009_002253 +2009_002254 +2009_002256 +2009_002257 +2009_002258 +2009_002259 +2009_002262 +2009_002264 +2009_002267 +2009_002271 +2009_002272 +2009_002273 +2009_002274 +2009_002281 +2009_002282 +2009_002285 +2009_002286 +2009_002289 +2009_002297 +2009_002298 +2009_002299 +2009_002301 +2009_002302 +2009_002305 +2009_002306 +2009_002308 +2009_002311 +2009_002312 +2009_002314 +2009_002319 +2009_002324 +2009_002325 +2009_002326 +2009_002328 +2009_002331 +2009_002333 +2009_002335 +2009_002338 +2009_002339 +2009_002343 +2009_002348 +2009_002349 +2009_002350 +2009_002352 +2009_002358 +2009_002360 +2009_002362 +2009_002363 +2009_002370 +2009_002371 +2009_002373 +2009_002374 +2009_002376 +2009_002377 +2009_002380 +2009_002381 +2009_002386 +2009_002387 +2009_002388 +2009_002391 +2009_002393 +2009_002397 +2009_002398 +2009_002399 +2009_002400 +2009_002401 +2009_002404 +2009_002406 +2009_002407 +2009_002408 +2009_002409 +2009_002414 +2009_002416 +2009_002419 +2009_002420 +2009_002422 +2009_002423 +2009_002424 +2009_002425 +2009_002429 +2009_002431 +2009_002432 +2009_002433 +2009_002434 +2009_002436 +2009_002438 +2009_002439 +2009_002441 +2009_002443 +2009_002444 +2009_002448 +2009_002449 +2009_002452 +2009_002453 +2009_002456 +2009_002457 +2009_002460 +2009_002464 +2009_002465 +2009_002470 +2009_002471 +2009_002472 +2009_002474 +2009_002475 +2009_002476 +2009_002477 +2009_002488 +2009_002499 +2009_002500 +2009_002504 +2009_002505 +2009_002506 +2009_002510 +2009_002512 +2009_002514 +2009_002515 +2009_002517 +2009_002518 +2009_002519 +2009_002522 +2009_002523 +2009_002524 +2009_002525 +2009_002530 +2009_002531 +2009_002532 +2009_002536 +2009_002537 +2009_002542 +2009_002543 +2009_002546 +2009_002552 +2009_002553 +2009_002556 +2009_002557 +2009_002558 +2009_002559 +2009_002561 +2009_002563 +2009_002565 +2009_002566 +2009_002567 +2009_002569 +2009_002570 +2009_002577 +2009_002579 +2009_002580 +2009_002585 +2009_002586 +2009_002588 +2009_002592 +2009_002595 +2009_002597 +2009_002599 +2009_002605 +2009_002607 +2009_002608 +2009_002609 +2009_002611 +2009_002612 +2009_002613 +2009_002614 +2009_002615 +2009_002616 +2009_002620 +2009_002621 +2009_002624 +2009_002625 +2009_002626 +2009_002628 +2009_002629 +2009_002632 +2009_002634 +2009_002645 +2009_002648 +2009_002652 +2009_002662 +2009_002663 +2009_002665 +2009_002667 +2009_002668 +2009_002669 +2009_002670 +2009_002671 +2009_002672 +2009_002673 +2009_002674 +2009_002675 +2009_002676 +2009_002681 +2009_002683 +2009_002684 +2009_002685 +2009_002687 +2009_002688 +2009_002689 +2009_002695 +2009_002697 +2009_002698 +2009_002703 +2009_002704 +2009_002705 +2009_002708 +2009_002710 +2009_002711 +2009_002712 +2009_002713 +2009_002714 +2009_002715 +2009_002717 +2009_002719 +2009_002725 +2009_002728 +2009_002733 +2009_002734 +2009_002739 +2009_002741 +2009_002743 +2009_002744 +2009_002746 +2009_002750 +2009_002752 +2009_002754 +2009_002755 +2009_002758 +2009_002759 +2009_002762 +2009_002763 +2009_002764 +2009_002765 +2009_002770 +2009_002772 +2009_002774 +2009_002777 +2009_002778 +2009_002779 +2009_002780 +2009_002784 +2009_002785 +2009_002789 +2009_002790 +2009_002791 +2009_002792 +2009_002798 +2009_002799 +2009_002800 +2009_002803 +2009_002806 +2009_002807 +2009_002809 +2009_002813 +2009_002814 +2009_002816 +2009_002817 +2009_002820 +2009_002824 +2009_002827 +2009_002830 +2009_002831 +2009_002833 +2009_002835 +2009_002836 +2009_002837 +2009_002838 +2009_002841 +2009_002842 +2009_002843 +2009_002844 +2009_002845 +2009_002847 +2009_002849 +2009_002850 +2009_002851 +2009_002853 +2009_002855 +2009_002862 +2009_002865 +2009_002867 +2009_002869 +2009_002872 +2009_002876 +2009_002877 +2009_002879 +2009_002882 +2009_002883 +2009_002885 +2009_002890 +2009_002893 +2009_002894 +2009_002897 +2009_002898 +2009_002901 +2009_002902 +2009_002908 +2009_002910 +2009_002912 +2009_002914 +2009_002917 +2009_002918 +2009_002920 +2009_002921 +2009_002925 +2009_002932 +2009_002933 +2009_002935 +2009_002937 +2009_002938 +2009_002940 +2009_002941 +2009_002946 +2009_002947 +2009_002952 +2009_002954 +2009_002955 +2009_002957 +2009_002958 +2009_002960 +2009_002961 +2009_002962 +2009_002967 +2009_002970 +2009_002971 +2009_002972 +2009_002976 +2009_002977 +2009_002978 +2009_002980 +2009_002983 +2009_002984 +2009_002985 +2009_002986 +2009_002988 +2009_002993 +2009_002995 +2009_002998 +2009_002999 +2009_003000 +2009_003002 +2009_003006 +2009_003007 +2009_003010 +2009_003012 +2009_003013 +2009_003018 +2009_003019 +2009_003020 +2009_003022 +2009_003023 +2009_003031 +2009_003032 +2009_003033 +2009_003034 +2009_003035 +2009_003039 +2009_003042 +2009_003044 +2009_003052 +2009_003053 +2009_003054 +2009_003056 +2009_003058 +2009_003064 +2009_003066 +2009_003067 +2009_003068 +2009_003070 +2009_003074 +2009_003075 +2009_003076 +2009_003077 +2009_003078 +2009_003082 +2009_003083 +2009_003087 +2009_003088 +2009_003089 +2009_003090 +2009_003091 +2009_003093 +2009_003095 +2009_003097 +2009_003098 +2009_003107 +2009_003108 +2009_003109 +2009_003110 +2009_003114 +2009_003115 +2009_003116 +2009_003118 +2009_003122 +2009_003125 +2009_003126 +2009_003127 +2009_003128 +2009_003129 +2009_003130 +2009_003132 +2009_003136 +2009_003138 +2009_003140 +2009_003142 +2009_003143 +2009_003144 +2009_003146 +2009_003147 +2009_003150 +2009_003151 +2009_003153 +2009_003154 +2009_003155 +2009_003156 +2009_003157 +2009_003164 +2009_003165 +2009_003166 +2009_003168 +2009_003172 +2009_003173 +2009_003175 +2009_003183 +2009_003185 +2009_003187 +2009_003189 +2009_003191 +2009_003194 +2009_003198 +2009_003199 +2009_003200 +2009_003201 +2009_003204 +2009_003208 +2009_003209 +2009_003212 +2009_003214 +2009_003218 +2009_003219 +2009_003222 +2009_003225 +2009_003229 +2009_003230 +2009_003232 +2009_003233 +2009_003234 +2009_003238 +2009_003247 +2009_003249 +2009_003251 +2009_003253 +2009_003254 +2009_003255 +2009_003257 +2009_003259 +2009_003261 +2009_003262 +2009_003265 +2009_003266 +2009_003267 +2009_003271 +2009_003272 +2009_003276 +2009_003277 +2009_003278 +2009_003282 +2009_003284 +2009_003285 +2009_003288 +2009_003290 +2009_003294 +2009_003297 +2009_003300 +2009_003301 +2009_003305 +2009_003309 +2009_003310 +2009_003312 +2009_003315 +2009_003316 +2009_003317 +2009_003320 +2009_003326 +2009_003333 +2009_003338 +2009_003340 +2009_003345 +2009_003346 +2009_003347 +2009_003348 +2009_003349 +2009_003350 +2009_003351 +2009_003352 +2009_003353 +2009_003360 +2009_003361 +2009_003363 +2009_003365 +2009_003367 +2009_003369 +2009_003372 +2009_003373 +2009_003375 +2009_003376 +2009_003377 +2009_003379 +2009_003380 +2009_003381 +2009_003383 +2009_003384 +2009_003385 +2009_003386 +2009_003394 +2009_003395 +2009_003396 +2009_003399 +2009_003400 +2009_003402 +2009_003407 +2009_003409 +2009_003411 +2009_003415 +2009_003416 +2009_003417 +2009_003419 +2009_003422 +2009_003425 +2009_003430 +2009_003431 +2009_003436 +2009_003440 +2009_003441 +2009_003443 +2009_003445 +2009_003446 +2009_003447 +2009_003453 +2009_003454 +2009_003455 +2009_003456 +2009_003457 +2009_003458 +2009_003459 +2009_003460 +2009_003461 +2009_003462 +2009_003467 +2009_003468 +2009_003469 +2009_003476 +2009_003482 +2009_003487 +2009_003488 +2009_003489 +2009_003490 +2009_003491 +2009_003492 +2009_003497 +2009_003499 +2009_003500 +2009_003508 +2009_003509 +2009_003510 +2009_003511 +2009_003513 +2009_003519 +2009_003520 +2009_003521 +2009_003522 +2009_003524 +2009_003528 +2009_003530 +2009_003531 +2009_003533 +2009_003534 +2009_003537 +2009_003538 +2009_003539 +2009_003540 +2009_003541 +2009_003543 +2009_003544 +2009_003545 +2009_003546 +2009_003554 +2009_003555 +2009_003560 +2009_003562 +2009_003563 +2009_003565 +2009_003566 +2009_003571 +2009_003572 +2009_003577 +2009_003581 +2009_003583 +2009_003588 +2009_003592 +2009_003594 +2009_003598 +2009_003600 +2009_003601 +2009_003605 +2009_003606 +2009_003608 +2009_003609 +2009_003612 +2009_003613 +2009_003614 +2009_003618 +2009_003624 +2009_003626 +2009_003627 +2009_003629 +2009_003633 +2009_003634 +2009_003635 +2009_003636 +2009_003638 +2009_003639 +2009_003642 +2009_003644 +2009_003646 +2009_003647 +2009_003650 +2009_003652 +2009_003654 +2009_003655 +2009_003656 +2009_003657 +2009_003660 +2009_003663 +2009_003664 +2009_003667 +2009_003668 +2009_003669 +2009_003671 +2009_003677 +2009_003679 +2009_003683 +2009_003685 +2009_003686 +2009_003688 +2009_003689 +2009_003690 +2009_003694 +2009_003695 +2009_003697 +2009_003698 +2009_003702 +2009_003704 +2009_003705 +2009_003708 +2009_003709 +2009_003710 +2009_003711 +2009_003713 +2009_003714 +2009_003717 +2009_003718 +2009_003720 +2009_003722 +2009_003725 +2009_003732 +2009_003734 +2009_003735 +2009_003736 +2009_003738 +2009_003739 +2009_003743 +2009_003747 +2009_003751 +2009_003752 +2009_003753 +2009_003757 +2009_003758 +2009_003759 +2009_003760 +2009_003765 +2009_003768 +2009_003775 +2009_003776 +2009_003781 +2009_003783 +2009_003784 +2009_003785 +2009_003786 +2009_003790 +2009_003793 +2009_003795 +2009_003799 +2009_003800 +2009_003801 +2009_003802 +2009_003808 +2009_003813 +2009_003814 +2009_003815 +2009_003816 +2009_003818 +2009_003819 +2009_003820 +2009_003821 +2009_003822 +2009_003825 +2009_003827 +2009_003829 +2009_003832 +2009_003835 +2009_003836 +2009_003837 +2009_003838 +2009_003840 +2009_003843 +2009_003846 +2009_003847 +2009_003848 +2009_003852 +2009_003855 +2009_003860 +2009_003863 +2009_003865 +2009_003867 +2009_003870 +2009_003873 +2009_003874 +2009_003879 +2009_003883 +2009_003884 +2009_003888 +2009_003892 +2009_003896 +2009_003897 +2009_003899 +2009_003900 +2009_003901 +2009_003902 +2009_003905 +2009_003908 +2009_003911 +2009_003912 +2009_003913 +2009_003914 +2009_003916 +2009_003920 +2009_003921 +2009_003922 +2009_003929 +2009_003933 +2009_003936 +2009_003942 +2009_003944 +2009_003947 +2009_003950 +2009_003951 +2009_003955 +2009_003956 +2009_003958 +2009_003961 +2009_003962 +2009_003965 +2009_003966 +2009_003969 +2009_003973 +2009_003974 +2009_003975 +2009_003976 +2009_003977 +2009_003982 +2009_003985 +2009_003986 +2009_003992 +2009_003993 +2009_003994 +2009_003995 +2009_004001 +2009_004002 +2009_004004 +2009_004005 +2009_004007 +2009_004012 +2009_004016 +2009_004018 +2009_004019 +2009_004020 +2009_004022 +2009_004023 +2009_004025 +2009_004031 +2009_004032 +2009_004034 +2009_004037 +2009_004038 +2009_004040 +2009_004042 +2009_004044 +2009_004050 +2009_004051 +2009_004052 +2009_004055 +2009_004058 +2009_004062 +2009_004069 +2009_004073 +2009_004074 +2009_004075 +2009_004076 +2009_004078 +2009_004082 +2009_004083 +2009_004085 +2009_004088 +2009_004091 +2009_004092 +2009_004093 +2009_004094 +2009_004095 +2009_004096 +2009_004100 +2009_004102 +2009_004103 +2009_004105 +2009_004108 +2009_004109 +2009_004111 +2009_004112 +2009_004113 +2009_004117 +2009_004118 +2009_004121 +2009_004122 +2009_004124 +2009_004126 +2009_004128 +2009_004129 +2009_004131 +2009_004133 +2009_004134 +2009_004138 +2009_004139 +2009_004141 +2009_004142 +2009_004148 +2009_004150 +2009_004152 +2009_004154 +2009_004157 +2009_004159 +2009_004161 +2009_004162 +2009_004163 +2009_004164 +2009_004165 +2009_004166 +2009_004168 +2009_004169 +2009_004170 +2009_004171 +2009_004174 +2009_004175 +2009_004176 +2009_004177 +2009_004178 +2009_004179 +2009_004180 +2009_004181 +2009_004183 +2009_004186 +2009_004187 +2009_004188 +2009_004191 +2009_004193 +2009_004197 +2009_004199 +2009_004200 +2009_004201 +2009_004202 +2009_004203 +2009_004205 +2009_004207 +2009_004210 +2009_004211 +2009_004212 +2009_004213 +2009_004218 +2009_004222 +2009_004224 +2009_004225 +2009_004227 +2009_004228 +2009_004229 +2009_004231 +2009_004232 +2009_004233 +2009_004234 +2009_004241 +2009_004243 +2009_004244 +2009_004249 +2009_004258 +2009_004261 +2009_004262 +2009_004263 +2009_004264 +2009_004271 +2009_004272 +2009_004273 +2009_004274 +2009_004276 +2009_004277 +2009_004278 +2009_004279 +2009_004283 +2009_004284 +2009_004285 +2009_004289 +2009_004290 +2009_004291 +2009_004295 +2009_004300 +2009_004301 +2009_004303 +2009_004307 +2009_004308 +2009_004309 +2009_004312 +2009_004315 +2009_004316 +2009_004317 +2009_004319 +2009_004322 +2009_004323 +2009_004327 +2009_004328 +2009_004329 +2009_004332 +2009_004334 +2009_004336 +2009_004338 +2009_004340 +2009_004341 +2009_004346 +2009_004347 +2009_004350 +2009_004351 +2009_004357 +2009_004358 +2009_004359 +2009_004361 +2009_004364 +2009_004366 +2009_004368 +2009_004369 +2009_004370 +2009_004371 +2009_004374 +2009_004375 +2009_004377 +2009_004382 +2009_004383 +2009_004390 +2009_004392 +2009_004394 +2009_004397 +2009_004399 +2009_004403 +2009_004404 +2009_004406 +2009_004409 +2009_004410 +2009_004411 +2009_004414 +2009_004417 +2009_004419 +2009_004424 +2009_004425 +2009_004426 +2009_004429 +2009_004432 +2009_004434 +2009_004435 +2009_004436 +2009_004438 +2009_004440 +2009_004442 +2009_004444 +2009_004445 +2009_004446 +2009_004448 +2009_004449 +2009_004451 +2009_004452 +2009_004453 +2009_004454 +2009_004456 +2009_004457 +2009_004464 +2009_004465 +2009_004468 +2009_004471 +2009_004475 +2009_004477 +2009_004478 +2009_004479 +2009_004483 +2009_004486 +2009_004492 +2009_004499 +2009_004501 +2009_004502 +2009_004503 +2009_004508 +2009_004511 +2009_004513 +2009_004514 +2009_004518 +2009_004519 +2009_004524 +2009_004525 +2009_004527 +2009_004529 +2009_004530 +2009_004532 +2009_004535 +2009_004536 +2009_004537 +2009_004539 +2009_004542 +2009_004543 +2009_004545 +2009_004547 +2009_004548 +2009_004551 +2009_004552 +2009_004554 +2009_004556 +2009_004557 +2009_004559 +2009_004560 +2009_004561 +2009_004562 +2009_004565 +2009_004567 +2009_004570 +2009_004571 +2009_004572 +2009_004580 +2009_004582 +2009_004587 +2009_004588 +2009_004593 +2009_004598 +2009_004601 +2009_004606 +2009_004607 +2009_004614 +2009_004616 +2009_004619 +2009_004620 +2009_004623 +2009_004624 +2009_004625 +2009_004626 +2009_004628 +2009_004629 +2009_004630 +2009_004631 +2009_004634 +2009_004639 +2009_004642 +2009_004643 +2009_004645 +2009_004647 +2009_004648 +2009_004651 +2009_004652 +2009_004655 +2009_004656 +2009_004661 +2009_004662 +2009_004664 +2009_004667 +2009_004669 +2009_004670 +2009_004671 +2009_004674 +2009_004677 +2009_004679 +2009_004681 +2009_004683 +2009_004684 +2009_004686 +2009_004688 +2009_004694 +2009_004697 +2009_004701 +2009_004705 +2009_004706 +2009_004708 +2009_004709 +2009_004710 +2009_004713 +2009_004716 +2009_004718 +2009_004719 +2009_004720 +2009_004723 +2009_004728 +2009_004731 +2009_004734 +2009_004737 +2009_004744 +2009_004745 +2009_004746 +2009_004749 +2009_004754 +2009_004756 +2009_004758 +2009_004759 +2009_004760 +2009_004761 +2009_004763 +2009_004764 +2009_004765 +2009_004766 +2009_004768 +2009_004769 +2009_004771 +2009_004772 +2009_004779 +2009_004780 +2009_004781 +2009_004782 +2009_004784 +2009_004786 +2009_004787 +2009_004790 +2009_004794 +2009_004796 +2009_004797 +2009_004798 +2009_004804 +2009_004805 +2009_004806 +2009_004812 +2009_004813 +2009_004815 +2009_004817 +2009_004822 +2009_004823 +2009_004824 +2009_004828 +2009_004829 +2009_004830 +2009_004831 +2009_004834 +2009_004836 +2009_004839 +2009_004841 +2009_004845 +2009_004846 +2009_004847 +2009_004849 +2009_004855 +2009_004856 +2009_004857 +2009_004858 +2009_004865 +2009_004868 +2009_004869 +2009_004871 +2009_004872 +2009_004874 +2009_004876 +2009_004877 +2009_004880 +2009_004885 +2009_004887 +2009_004888 +2009_004889 +2009_004890 +2009_004897 +2009_004898 +2009_004899 +2009_004901 +2009_004902 +2009_004903 +2009_004904 +2009_004905 +2009_004907 +2009_004913 +2009_004914 +2009_004917 +2009_004919 +2009_004921 +2009_004922 +2009_004926 +2009_004929 +2009_004930 +2009_004933 +2009_004934 +2009_004939 +2009_004940 +2009_004943 +2009_004944 +2009_004945 +2009_004946 +2009_004947 +2009_004953 +2009_004956 +2009_004958 +2009_004959 +2009_004961 +2009_004962 +2009_004965 +2009_004971 +2009_004974 +2009_004975 +2009_004977 +2009_004979 +2009_004980 +2009_004982 +2009_004983 +2009_004984 +2009_004986 +2009_004988 +2009_004990 +2009_004996 +2009_004999 +2009_005000 +2009_005001 +2009_005005 +2009_005006 +2009_005008 +2009_005015 +2009_005016 +2009_005019 +2009_005024 +2009_005025 +2009_005030 +2009_005031 +2009_005033 +2009_005035 +2009_005036 +2009_005037 +2009_005040 +2009_005042 +2009_005044 +2009_005045 +2009_005051 +2009_005055 +2009_005056 +2009_005057 +2009_005060 +2009_005061 +2009_005062 +2009_005064 +2009_005068 +2009_005069 +2009_005070 +2009_005073 +2009_005075 +2009_005076 +2009_005080 +2009_005081 +2009_005082 +2009_005083 +2009_005084 +2009_005085 +2009_005086 +2009_005094 +2009_005095 +2009_005098 +2009_005102 +2009_005103 +2009_005104 +2009_005107 +2009_005111 +2009_005114 +2009_005118 +2009_005119 +2009_005120 +2009_005126 +2009_005127 +2009_005128 +2009_005130 +2009_005131 +2009_005133 +2009_005140 +2009_005141 +2009_005142 +2009_005144 +2009_005145 +2009_005147 +2009_005149 +2009_005150 +2009_005152 +2009_005153 +2009_005154 +2009_005155 +2009_005160 +2009_005161 +2009_005162 +2009_005163 +2009_005165 +2009_005168 +2009_005170 +2009_005171 +2009_005172 +2009_005177 +2009_005178 +2009_005181 +2009_005183 +2009_005185 +2009_005191 +2009_005193 +2009_005194 +2009_005198 +2009_005201 +2009_005202 +2009_005203 +2009_005204 +2009_005205 +2009_005210 +2009_005211 +2009_005215 +2009_005216 +2009_005218 +2009_005221 +2009_005222 +2009_005225 +2009_005229 +2009_005232 +2009_005234 +2009_005236 +2009_005239 +2009_005240 +2009_005242 +2009_005246 +2009_005247 +2009_005251 +2009_005256 +2009_005257 +2009_005263 +2009_005265 +2009_005267 +2009_005268 +2009_005269 +2009_005272 +2009_005278 +2009_005279 +2009_005282 +2009_005286 +2009_005287 +2009_005288 +2009_005292 +2009_005293 +2009_005294 +2009_005299 +2009_005300 +2009_005303 +2009_005307 +2009_005308 +2009_005309 +2009_005310 +2009_005311 +2010_000001 +2010_000002 +2010_000009 +2010_000014 +2010_000015 +2010_000018 +2010_000023 +2010_000024 +2010_000026 +2010_000027 +2010_000031 +2010_000033 +2010_000035 +2010_000036 +2010_000043 +2010_000045 +2010_000048 +2010_000050 +2010_000052 +2010_000053 +2010_000054 +2010_000055 +2010_000056 +2010_000061 +2010_000063 +2010_000067 +2010_000069 +2010_000071 +2010_000072 +2010_000073 +2010_000074 +2010_000075 +2010_000076 +2010_000079 +2010_000080 +2010_000082 +2010_000085 +2010_000088 +2010_000089 +2010_000090 +2010_000091 +2010_000095 +2010_000097 +2010_000098 +2010_000099 +2010_000103 +2010_000109 +2010_000111 +2010_000113 +2010_000114 +2010_000117 +2010_000118 +2010_000120 +2010_000124 +2010_000127 +2010_000131 +2010_000132 +2010_000133 +2010_000136 +2010_000137 +2010_000138 +2010_000139 +2010_000140 +2010_000141 +2010_000145 +2010_000148 +2010_000151 +2010_000152 +2010_000157 +2010_000162 +2010_000165 +2010_000169 +2010_000170 +2010_000172 +2010_000175 +2010_000177 +2010_000178 +2010_000182 +2010_000183 +2010_000184 +2010_000187 +2010_000189 +2010_000190 +2010_000194 +2010_000195 +2010_000196 +2010_000197 +2010_000198 +2010_000199 +2010_000202 +2010_000203 +2010_000204 +2010_000209 +2010_000211 +2010_000213 +2010_000218 +2010_000222 +2010_000224 +2010_000227 +2010_000229 +2010_000233 +2010_000234 +2010_000244 +2010_000245 +2010_000246 +2010_000247 +2010_000248 +2010_000249 +2010_000250 +2010_000254 +2010_000255 +2010_000260 +2010_000261 +2010_000262 +2010_000263 +2010_000264 +2010_000266 +2010_000269 +2010_000270 +2010_000273 +2010_000276 +2010_000279 +2010_000283 +2010_000285 +2010_000286 +2010_000291 +2010_000293 +2010_000295 +2010_000296 +2010_000299 +2010_000302 +2010_000303 +2010_000307 +2010_000308 +2010_000310 +2010_000312 +2010_000313 +2010_000317 +2010_000320 +2010_000321 +2010_000323 +2010_000324 +2010_000325 +2010_000327 +2010_000329 +2010_000336 +2010_000337 +2010_000344 +2010_000347 +2010_000352 +2010_000356 +2010_000358 +2010_000361 +2010_000362 +2010_000370 +2010_000371 +2010_000374 +2010_000375 +2010_000376 +2010_000377 +2010_000379 +2010_000381 +2010_000382 +2010_000384 +2010_000386 +2010_000388 +2010_000389 +2010_000390 +2010_000392 +2010_000393 +2010_000394 +2010_000395 +2010_000399 +2010_000401 +2010_000404 +2010_000406 +2010_000409 +2010_000413 +2010_000415 +2010_000418 +2010_000419 +2010_000420 +2010_000431 +2010_000432 +2010_000433 +2010_000435 +2010_000436 +2010_000437 +2010_000439 +2010_000442 +2010_000444 +2010_000446 +2010_000447 +2010_000448 +2010_000449 +2010_000453 +2010_000456 +2010_000458 +2010_000459 +2010_000461 +2010_000462 +2010_000463 +2010_000465 +2010_000466 +2010_000468 +2010_000469 +2010_000470 +2010_000473 +2010_000474 +2010_000475 +2010_000477 +2010_000480 +2010_000483 +2010_000484 +2010_000485 +2010_000488 +2010_000490 +2010_000492 +2010_000493 +2010_000495 +2010_000497 +2010_000498 +2010_000500 +2010_000503 +2010_000506 +2010_000508 +2010_000510 +2010_000511 +2010_000513 +2010_000515 +2010_000519 +2010_000522 +2010_000524 +2010_000526 +2010_000527 +2010_000534 +2010_000536 +2010_000537 +2010_000538 +2010_000541 +2010_000545 +2010_000547 +2010_000548 +2010_000549 +2010_000553 +2010_000556 +2010_000557 +2010_000561 +2010_000562 +2010_000564 +2010_000567 +2010_000568 +2010_000571 +2010_000574 +2010_000576 +2010_000577 +2010_000578 +2010_000581 +2010_000582 +2010_000583 +2010_000586 +2010_000588 +2010_000590 +2010_000591 +2010_000601 +2010_000602 +2010_000603 +2010_000604 +2010_000608 +2010_000613 +2010_000616 +2010_000617 +2010_000621 +2010_000624 +2010_000626 +2010_000630 +2010_000632 +2010_000633 +2010_000635 +2010_000641 +2010_000644 +2010_000645 +2010_000646 +2010_000647 +2010_000648 +2010_000651 +2010_000655 +2010_000658 +2010_000661 +2010_000664 +2010_000665 +2010_000667 +2010_000669 +2010_000671 +2010_000674 +2010_000675 +2010_000678 +2010_000681 +2010_000685 +2010_000687 +2010_000688 +2010_000689 +2010_000691 +2010_000692 +2010_000694 +2010_000695 +2010_000697 +2010_000702 +2010_000705 +2010_000707 +2010_000710 +2010_000711 +2010_000712 +2010_000715 +2010_000716 +2010_000717 +2010_000721 +2010_000722 +2010_000723 +2010_000726 +2010_000727 +2010_000729 +2010_000731 +2010_000735 +2010_000737 +2010_000739 +2010_000740 +2010_000743 +2010_000744 +2010_000746 +2010_000747 +2010_000748 +2010_000749 +2010_000754 +2010_000759 +2010_000760 +2010_000761 +2010_000765 +2010_000769 +2010_000770 +2010_000771 +2010_000772 +2010_000773 +2010_000778 +2010_000782 +2010_000785 +2010_000786 +2010_000787 +2010_000791 +2010_000792 +2010_000797 +2010_000799 +2010_000800 +2010_000802 +2010_000803 +2010_000805 +2010_000806 +2010_000807 +2010_000808 +2010_000810 +2010_000811 +2010_000815 +2010_000821 +2010_000822 +2010_000828 +2010_000829 +2010_000830 +2010_000831 +2010_000837 +2010_000838 +2010_000842 +2010_000846 +2010_000847 +2010_000849 +2010_000855 +2010_000860 +2010_000862 +2010_000863 +2010_000865 +2010_000866 +2010_000870 +2010_000871 +2010_000872 +2010_000875 +2010_000876 +2010_000879 +2010_000883 +2010_000885 +2010_000887 +2010_000889 +2010_000891 +2010_000893 +2010_000897 +2010_000898 +2010_000899 +2010_000908 +2010_000910 +2010_000912 +2010_000914 +2010_000915 +2010_000920 +2010_000922 +2010_000923 +2010_000926 +2010_000927 +2010_000928 +2010_000931 +2010_000938 +2010_000942 +2010_000944 +2010_000945 +2010_000947 +2010_000948 +2010_000954 +2010_000955 +2010_000956 +2010_000959 +2010_000968 +2010_000970 +2010_000971 +2010_000973 +2010_000974 +2010_000975 +2010_000978 +2010_000979 +2010_000981 +2010_000983 +2010_000984 +2010_000986 +2010_000989 +2010_000991 +2010_000993 +2010_000994 +2010_000995 +2010_000996 +2010_001002 +2010_001006 +2010_001008 +2010_001009 +2010_001012 +2010_001013 +2010_001021 +2010_001023 +2010_001025 +2010_001030 +2010_001032 +2010_001039 +2010_001042 +2010_001043 +2010_001044 +2010_001049 +2010_001051 +2010_001052 +2010_001054 +2010_001057 +2010_001063 +2010_001066 +2010_001074 +2010_001076 +2010_001077 +2010_001080 +2010_001082 +2010_001085 +2010_001087 +2010_001089 +2010_001092 +2010_001094 +2010_001098 +2010_001099 +2010_001100 +2010_001103 +2010_001105 +2010_001106 +2010_001107 +2010_001109 +2010_001110 +2010_001111 +2010_001112 +2010_001113 +2010_001117 +2010_001118 +2010_001119 +2010_001120 +2010_001121 +2010_001123 +2010_001125 +2010_001126 +2010_001127 +2010_001130 +2010_001131 +2010_001134 +2010_001139 +2010_001140 +2010_001142 +2010_001143 +2010_001148 +2010_001152 +2010_001154 +2010_001158 +2010_001159 +2010_001160 +2010_001163 +2010_001164 +2010_001172 +2010_001175 +2010_001177 +2010_001179 +2010_001181 +2010_001183 +2010_001184 +2010_001185 +2010_001188 +2010_001189 +2010_001192 +2010_001193 +2010_001195 +2010_001199 +2010_001201 +2010_001204 +2010_001205 +2010_001210 +2010_001211 +2010_001212 +2010_001214 +2010_001215 +2010_001216 +2010_001218 +2010_001219 +2010_001220 +2010_001224 +2010_001225 +2010_001229 +2010_001234 +2010_001237 +2010_001240 +2010_001241 +2010_001242 +2010_001245 +2010_001247 +2010_001250 +2010_001253 +2010_001254 +2010_001257 +2010_001261 +2010_001263 +2010_001270 +2010_001271 +2010_001272 +2010_001273 +2010_001274 +2010_001275 +2010_001277 +2010_001279 +2010_001282 +2010_001286 +2010_001287 +2010_001288 +2010_001289 +2010_001291 +2010_001293 +2010_001294 +2010_001301 +2010_001305 +2010_001310 +2010_001311 +2010_001312 +2010_001315 +2010_001317 +2010_001320 +2010_001321 +2010_001325 +2010_001326 +2010_001328 +2010_001329 +2010_001333 +2010_001337 +2010_001338 +2010_001339 +2010_001343 +2010_001344 +2010_001347 +2010_001355 +2010_001356 +2010_001357 +2010_001360 +2010_001361 +2010_001363 +2010_001364 +2010_001366 +2010_001370 +2010_001372 +2010_001374 +2010_001382 +2010_001383 +2010_001385 +2010_001386 +2010_001390 +2010_001394 +2010_001395 +2010_001397 +2010_001399 +2010_001401 +2010_001402 +2010_001405 +2010_001406 +2010_001407 +2010_001408 +2010_001410 +2010_001411 +2010_001412 +2010_001413 +2010_001417 +2010_001418 +2010_001421 +2010_001422 +2010_001425 +2010_001426 +2010_001430 +2010_001431 +2010_001432 +2010_001433 +2010_001434 +2010_001435 +2010_001441 +2010_001449 +2010_001450 +2010_001452 +2010_001453 +2010_001455 +2010_001456 +2010_001457 +2010_001458 +2010_001461 +2010_001463 +2010_001464 +2010_001465 +2010_001468 +2010_001472 +2010_001473 +2010_001478 +2010_001479 +2010_001480 +2010_001481 +2010_001486 +2010_001487 +2010_001497 +2010_001499 +2010_001501 +2010_001502 +2010_001503 +2010_001505 +2010_001511 +2010_001514 +2010_001515 +2010_001516 +2010_001518 +2010_001520 +2010_001525 +2010_001528 +2010_001529 +2010_001533 +2010_001535 +2010_001536 +2010_001537 +2010_001539 +2010_001540 +2010_001543 +2010_001544 +2010_001547 +2010_001548 +2010_001550 +2010_001551 +2010_001552 +2010_001555 +2010_001560 +2010_001561 +2010_001562 +2010_001569 +2010_001571 +2010_001572 +2010_001574 +2010_001576 +2010_001580 +2010_001583 +2010_001584 +2010_001586 +2010_001587 +2010_001590 +2010_001592 +2010_001594 +2010_001595 +2010_001596 +2010_001599 +2010_001601 +2010_001602 +2010_001603 +2010_001606 +2010_001607 +2010_001608 +2010_001614 +2010_001618 +2010_001619 +2010_001625 +2010_001626 +2010_001630 +2010_001633 +2010_001635 +2010_001636 +2010_001637 +2010_001638 +2010_001640 +2010_001644 +2010_001645 +2010_001647 +2010_001649 +2010_001650 +2010_001652 +2010_001659 +2010_001660 +2010_001665 +2010_001668 +2010_001669 +2010_001671 +2010_001674 +2010_001675 +2010_001676 +2010_001679 +2010_001680 +2010_001682 +2010_001685 +2010_001687 +2010_001689 +2010_001690 +2010_001694 +2010_001697 +2010_001698 +2010_001700 +2010_001705 +2010_001706 +2010_001709 +2010_001710 +2010_001712 +2010_001715 +2010_001717 +2010_001718 +2010_001719 +2010_001720 +2010_001726 +2010_001729 +2010_001731 +2010_001732 +2010_001737 +2010_001739 +2010_001743 +2010_001744 +2010_001746 +2010_001747 +2010_001748 +2010_001749 +2010_001753 +2010_001754 +2010_001756 +2010_001757 +2010_001759 +2010_001760 +2010_001762 +2010_001763 +2010_001771 +2010_001776 +2010_001777 +2010_001780 +2010_001783 +2010_001784 +2010_001785 +2010_001787 +2010_001788 +2010_001794 +2010_001795 +2010_001796 +2010_001797 +2010_001801 +2010_001803 +2010_001806 +2010_001807 +2010_001808 +2010_001810 +2010_001814 +2010_001817 +2010_001819 +2010_001821 +2010_001823 +2010_001827 +2010_001828 +2010_001829 +2010_001837 +2010_001838 +2010_001841 +2010_001842 +2010_001843 +2010_001845 +2010_001846 +2010_001849 +2010_001850 +2010_001852 +2010_001853 +2010_001856 +2010_001857 +2010_001858 +2010_001860 +2010_001863 +2010_001864 +2010_001868 +2010_001869 +2010_001870 +2010_001877 +2010_001881 +2010_001884 +2010_001885 +2010_001891 +2010_001892 +2010_001893 +2010_001896 +2010_001899 +2010_001904 +2010_001907 +2010_001911 +2010_001916 +2010_001918 +2010_001919 +2010_001921 +2010_001922 +2010_001923 +2010_001924 +2010_001927 +2010_001929 +2010_001931 +2010_001933 +2010_001934 +2010_001937 +2010_001938 +2010_001939 +2010_001940 +2010_001941 +2010_001944 +2010_001948 +2010_001950 +2010_001954 +2010_001957 +2010_001960 +2010_001967 +2010_001968 +2010_001970 +2010_001973 +2010_001974 +2010_001976 +2010_001978 +2010_001979 +2010_001980 +2010_001981 +2010_001982 +2010_001986 +2010_001987 +2010_001988 +2010_001992 +2010_001993 +2010_001994 +2010_001998 +2010_002000 +2010_002002 +2010_002005 +2010_002006 +2010_002015 +2010_002018 +2010_002019 +2010_002020 +2010_002022 +2010_002023 +2010_002026 +2010_002029 +2010_002032 +2010_002037 +2010_002039 +2010_002040 +2010_002041 +2010_002042 +2010_002044 +2010_002045 +2010_002046 +2010_002047 +2010_002048 +2010_002050 +2010_002054 +2010_002055 +2010_002057 +2010_002058 +2010_002060 +2010_002065 +2010_002067 +2010_002068 +2010_002070 +2010_002073 +2010_002080 +2010_002085 +2010_002086 +2010_002089 +2010_002094 +2010_002095 +2010_002096 +2010_002097 +2010_002098 +2010_002100 +2010_002102 +2010_002104 +2010_002105 +2010_002107 +2010_002113 +2010_002117 +2010_002118 +2010_002121 +2010_002124 +2010_002127 +2010_002128 +2010_002129 +2010_002130 +2010_002132 +2010_002133 +2010_002136 +2010_002138 +2010_002139 +2010_002143 +2010_002149 +2010_002152 +2010_002154 +2010_002166 +2010_002167 +2010_002168 +2010_002172 +2010_002175 +2010_002176 +2010_002177 +2010_002179 +2010_002180 +2010_002181 +2010_002182 +2010_002183 +2010_002185 +2010_002187 +2010_002191 +2010_002192 +2010_002193 +2010_002194 +2010_002195 +2010_002199 +2010_002203 +2010_002204 +2010_002207 +2010_002208 +2010_002211 +2010_002213 +2010_002215 +2010_002216 +2010_002218 +2010_002219 +2010_002220 +2010_002221 +2010_002223 +2010_002224 +2010_002226 +2010_002227 +2010_002229 +2010_002236 +2010_002242 +2010_002243 +2010_002244 +2010_002245 +2010_002247 +2010_002248 +2010_002254 +2010_002255 +2010_002261 +2010_002263 +2010_002269 +2010_002274 +2010_002276 +2010_002278 +2010_002279 +2010_002283 +2010_002286 +2010_002287 +2010_002289 +2010_002294 +2010_002295 +2010_002299 +2010_002301 +2010_002303 +2010_002307 +2010_002309 +2010_002312 +2010_002313 +2010_002315 +2010_002316 +2010_002318 +2010_002319 +2010_002320 +2010_002321 +2010_002326 +2010_002327 +2010_002332 +2010_002333 +2010_002337 +2010_002338 +2010_002340 +2010_002346 +2010_002349 +2010_002353 +2010_002354 +2010_002356 +2010_002357 +2010_002363 +2010_002364 +2010_002365 +2010_002366 +2010_002368 +2010_002369 +2010_002370 +2010_002371 +2010_002373 +2010_002374 +2010_002378 +2010_002379 +2010_002382 +2010_002383 +2010_002387 +2010_002388 +2010_002391 +2010_002392 +2010_002393 +2010_002398 +2010_002399 +2010_002400 +2010_002402 +2010_002405 +2010_002406 +2010_002408 +2010_002409 +2010_002410 +2010_002413 +2010_002418 +2010_002420 +2010_002424 +2010_002425 +2010_002427 +2010_002429 +2010_002431 +2010_002435 +2010_002436 +2010_002438 +2010_002439 +2010_002440 +2010_002445 +2010_002446 +2010_002448 +2010_002449 +2010_002452 +2010_002455 +2010_002456 +2010_002457 +2010_002458 +2010_002459 +2010_002460 +2010_002461 +2010_002462 +2010_002468 +2010_002469 +2010_002472 +2010_002475 +2010_002479 +2010_002482 +2010_002484 +2010_002485 +2010_002487 +2010_002492 +2010_002496 +2010_002497 +2010_002498 +2010_002499 +2010_002501 +2010_002504 +2010_002507 +2010_002509 +2010_002510 +2010_002513 +2010_002516 +2010_002518 +2010_002520 +2010_002526 +2010_002527 +2010_002529 +2010_002532 +2010_002533 +2010_002534 +2010_002537 +2010_002539 +2010_002542 +2010_002543 +2010_002547 +2010_002551 +2010_002552 +2010_002553 +2010_002556 +2010_002561 +2010_002562 +2010_002565 +2010_002567 +2010_002569 +2010_002570 +2010_002573 +2010_002575 +2010_002577 +2010_002578 +2010_002579 +2010_002580 +2010_002582 +2010_002583 +2010_002586 +2010_002587 +2010_002589 +2010_002592 +2010_002594 +2010_002597 +2010_002598 +2010_002601 +2010_002602 +2010_002603 +2010_002605 +2010_002614 +2010_002615 +2010_002616 +2010_002618 +2010_002620 +2010_002621 +2010_002624 +2010_002625 +2010_002626 +2010_002628 +2010_002629 +2010_002631 +2010_002632 +2010_002638 +2010_002639 +2010_002642 +2010_002644 +2010_002645 +2010_002647 +2010_002652 +2010_002653 +2010_002654 +2010_002656 +2010_002659 +2010_002660 +2010_002661 +2010_002662 +2010_002665 +2010_002666 +2010_002667 +2010_002668 +2010_002674 +2010_002675 +2010_002676 +2010_002678 +2010_002679 +2010_002684 +2010_002686 +2010_002688 +2010_002692 +2010_002695 +2010_002696 +2010_002697 +2010_002702 +2010_002704 +2010_002705 +2010_002708 +2010_002710 +2010_002713 +2010_002714 +2010_002716 +2010_002720 +2010_002721 +2010_002722 +2010_002723 +2010_002725 +2010_002728 +2010_002729 +2010_002733 +2010_002734 +2010_002736 +2010_002737 +2010_002740 +2010_002741 +2010_002742 +2010_002746 +2010_002747 +2010_002750 +2010_002752 +2010_002754 +2010_002758 +2010_002759 +2010_002760 +2010_002767 +2010_002770 +2010_002771 +2010_002772 +2010_002774 +2010_002775 +2010_002778 +2010_002779 +2010_002780 +2010_002781 +2010_002783 +2010_002786 +2010_002789 +2010_002790 +2010_002791 +2010_002793 +2010_002794 +2010_002797 +2010_002801 +2010_002803 +2010_002805 +2010_002807 +2010_002808 +2010_002811 +2010_002813 +2010_002814 +2010_002815 +2010_002816 +2010_002817 +2010_002820 +2010_002821 +2010_002822 +2010_002824 +2010_002827 +2010_002830 +2010_002831 +2010_002834 +2010_002838 +2010_002839 +2010_002840 +2010_002841 +2010_002843 +2010_002844 +2010_002845 +2010_002851 +2010_002853 +2010_002854 +2010_002855 +2010_002856 +2010_002857 +2010_002858 +2010_002860 +2010_002864 +2010_002865 +2010_002870 +2010_002871 +2010_002873 +2010_002876 +2010_002877 +2010_002879 +2010_002880 +2010_002881 +2010_002884 +2010_002887 +2010_002891 +2010_002892 +2010_002896 +2010_002899 +2010_002901 +2010_002903 +2010_002905 +2010_002907 +2010_002909 +2010_002914 +2010_002915 +2010_002917 +2010_002924 +2010_002927 +2010_002930 +2010_002931 +2010_002935 +2010_002937 +2010_002938 +2010_002940 +2010_002941 +2010_002946 +2010_002947 +2010_002948 +2010_002954 +2010_002955 +2010_002956 +2010_002958 +2010_002960 +2010_002962 +2010_002965 +2010_002972 +2010_002973 +2010_002976 +2010_002978 +2010_002979 +2010_002980 +2010_002982 +2010_002985 +2010_002987 +2010_002990 +2010_002991 +2010_002993 +2010_002995 +2010_003002 +2010_003003 +2010_003007 +2010_003010 +2010_003011 +2010_003013 +2010_003015 +2010_003016 +2010_003017 +2010_003019 +2010_003024 +2010_003025 +2010_003027 +2010_003028 +2010_003032 +2010_003034 +2010_003035 +2010_003037 +2010_003040 +2010_003043 +2010_003044 +2010_003047 +2010_003050 +2010_003051 +2010_003053 +2010_003054 +2010_003055 +2010_003056 +2010_003057 +2010_003062 +2010_003067 +2010_003071 +2010_003072 +2010_003074 +2010_003077 +2010_003078 +2010_003081 +2010_003082 +2010_003084 +2010_003086 +2010_003088 +2010_003091 +2010_003092 +2010_003093 +2010_003094 +2010_003097 +2010_003098 +2010_003101 +2010_003102 +2010_003103 +2010_003106 +2010_003107 +2010_003108 +2010_003112 +2010_003114 +2010_003115 +2010_003117 +2010_003119 +2010_003120 +2010_003122 +2010_003129 +2010_003133 +2010_003135 +2010_003137 +2010_003138 +2010_003139 +2010_003143 +2010_003146 +2010_003147 +2010_003148 +2010_003149 +2010_003151 +2010_003153 +2010_003154 +2010_003156 +2010_003157 +2010_003159 +2010_003160 +2010_003162 +2010_003169 +2010_003170 +2010_003173 +2010_003174 +2010_003176 +2010_003179 +2010_003185 +2010_003186 +2010_003190 +2010_003191 +2010_003192 +2010_003197 +2010_003199 +2010_003200 +2010_003201 +2010_003203 +2010_003204 +2010_003206 +2010_003212 +2010_003214 +2010_003218 +2010_003219 +2010_003220 +2010_003222 +2010_003223 +2010_003227 +2010_003230 +2010_003232 +2010_003233 +2010_003236 +2010_003238 +2010_003240 +2010_003241 +2010_003244 +2010_003248 +2010_003249 +2010_003250 +2010_003251 +2010_003252 +2010_003253 +2010_003255 +2010_003256 +2010_003257 +2010_003259 +2010_003260 +2010_003263 +2010_003264 +2010_003269 +2010_003270 +2010_003274 +2010_003278 +2010_003279 +2010_003280 +2010_003283 +2010_003285 +2010_003287 +2010_003290 +2010_003291 +2010_003297 +2010_003299 +2010_003300 +2010_003301 +2010_003303 +2010_003304 +2010_003305 +2010_003309 +2010_003314 +2010_003316 +2010_003321 +2010_003326 +2010_003329 +2010_003331 +2010_003332 +2010_003333 +2010_003335 +2010_003337 +2010_003341 +2010_003342 +2010_003343 +2010_003344 +2010_003345 +2010_003350 +2010_003351 +2010_003353 +2010_003355 +2010_003358 +2010_003361 +2010_003366 +2010_003367 +2010_003368 +2010_003370 +2010_003371 +2010_003372 +2010_003374 +2010_003375 +2010_003376 +2010_003379 +2010_003380 +2010_003383 +2010_003384 +2010_003385 +2010_003390 +2010_003391 +2010_003395 +2010_003397 +2010_003398 +2010_003400 +2010_003401 +2010_003405 +2010_003406 +2010_003411 +2010_003415 +2010_003419 +2010_003421 +2010_003427 +2010_003429 +2010_003432 +2010_003435 +2010_003436 +2010_003437 +2010_003439 +2010_003450 +2010_003451 +2010_003458 +2010_003461 +2010_003465 +2010_003467 +2010_003469 +2010_003470 +2010_003474 +2010_003477 +2010_003478 +2010_003479 +2010_003481 +2010_003482 +2010_003483 +2010_003488 +2010_003490 +2010_003491 +2010_003493 +2010_003496 +2010_003497 +2010_003503 +2010_003507 +2010_003508 +2010_003509 +2010_003512 +2010_003513 +2010_003520 +2010_003522 +2010_003526 +2010_003527 +2010_003529 +2010_003534 +2010_003535 +2010_003537 +2010_003538 +2010_003539 +2010_003540 +2010_003546 +2010_003549 +2010_003551 +2010_003554 +2010_003556 +2010_003559 +2010_003560 +2010_003561 +2010_003562 +2010_003563 +2010_003567 +2010_003568 +2010_003569 +2010_003573 +2010_003574 +2010_003576 +2010_003579 +2010_003582 +2010_003585 +2010_003588 +2010_003592 +2010_003594 +2010_003598 +2010_003599 +2010_003601 +2010_003603 +2010_003604 +2010_003605 +2010_003608 +2010_003609 +2010_003610 +2010_003612 +2010_003613 +2010_003618 +2010_003625 +2010_003628 +2010_003629 +2010_003630 +2010_003632 +2010_003634 +2010_003635 +2010_003640 +2010_003641 +2010_003643 +2010_003644 +2010_003645 +2010_003648 +2010_003649 +2010_003651 +2010_003653 +2010_003655 +2010_003656 +2010_003659 +2010_003664 +2010_003665 +2010_003667 +2010_003670 +2010_003671 +2010_003672 +2010_003673 +2010_003674 +2010_003677 +2010_003679 +2010_003680 +2010_003686 +2010_003687 +2010_003688 +2010_003689 +2010_003690 +2010_003695 +2010_003696 +2010_003701 +2010_003703 +2010_003709 +2010_003714 +2010_003717 +2010_003719 +2010_003721 +2010_003723 +2010_003724 +2010_003725 +2010_003728 +2010_003729 +2010_003730 +2010_003731 +2010_003734 +2010_003735 +2010_003736 +2010_003737 +2010_003742 +2010_003743 +2010_003744 +2010_003745 +2010_003747 +2010_003752 +2010_003754 +2010_003755 +2010_003757 +2010_003761 +2010_003762 +2010_003770 +2010_003773 +2010_003774 +2010_003779 +2010_003784 +2010_003788 +2010_003789 +2010_003791 +2010_003792 +2010_003798 +2010_003799 +2010_003800 +2010_003801 +2010_003804 +2010_003805 +2010_003806 +2010_003807 +2010_003811 +2010_003815 +2010_003816 +2010_003818 +2010_003821 +2010_003822 +2010_003823 +2010_003825 +2010_003826 +2010_003828 +2010_003837 +2010_003844 +2010_003845 +2010_003847 +2010_003848 +2010_003852 +2010_003855 +2010_003856 +2010_003857 +2010_003859 +2010_003860 +2010_003861 +2010_003863 +2010_003864 +2010_003865 +2010_003871 +2010_003874 +2010_003875 +2010_003877 +2010_003878 +2010_003879 +2010_003884 +2010_003887 +2010_003890 +2010_003891 +2010_003892 +2010_003893 +2010_003894 +2010_003897 +2010_003898 +2010_003899 +2010_003900 +2010_003906 +2010_003910 +2010_003911 +2010_003914 +2010_003919 +2010_003920 +2010_003925 +2010_003928 +2010_003929 +2010_003931 +2010_003933 +2010_003936 +2010_003937 +2010_003938 +2010_003939 +2010_003942 +2010_003943 +2010_003944 +2010_003945 +2010_003949 +2010_003950 +2010_003954 +2010_003955 +2010_003957 +2010_003958 +2010_003961 +2010_003966 +2010_003970 +2010_003974 +2010_003976 +2010_003980 +2010_003981 +2010_003982 +2010_003983 +2010_003987 +2010_003988 +2010_003994 +2010_003995 +2010_003996 +2010_003999 +2010_004002 +2010_004005 +2010_004006 +2010_004007 +2010_004008 +2010_004009 +2010_004014 +2010_004017 +2010_004021 +2010_004023 +2010_004025 +2010_004026 +2010_004027 +2010_004028 +2010_004029 +2010_004030 +2010_004031 +2010_004033 +2010_004036 +2010_004037 +2010_004043 +2010_004045 +2010_004048 +2010_004050 +2010_004052 +2010_004053 +2010_004054 +2010_004059 +2010_004060 +2010_004061 +2010_004062 +2010_004064 +2010_004065 +2010_004066 +2010_004067 +2010_004069 +2010_004071 +2010_004072 +2010_004073 +2010_004074 +2010_004075 +2010_004081 +2010_004084 +2010_004088 +2010_004089 +2010_004092 +2010_004094 +2010_004095 +2010_004096 +2010_004102 +2010_004105 +2010_004107 +2010_004108 +2010_004109 +2010_004111 +2010_004116 +2010_004118 +2010_004119 +2010_004121 +2010_004123 +2010_004124 +2010_004125 +2010_004129 +2010_004130 +2010_004133 +2010_004137 +2010_004138 +2010_004139 +2010_004140 +2010_004141 +2010_004143 +2010_004144 +2010_004145 +2010_004148 +2010_004154 +2010_004157 +2010_004160 +2010_004161 +2010_004162 +2010_004163 +2010_004168 +2010_004171 +2010_004172 +2010_004173 +2010_004175 +2010_004178 +2010_004179 +2010_004180 +2010_004182 +2010_004184 +2010_004186 +2010_004187 +2010_004188 +2010_004191 +2010_004193 +2010_004197 +2010_004198 +2010_004201 +2010_004204 +2010_004207 +2010_004209 +2010_004210 +2010_004211 +2010_004216 +2010_004222 +2010_004223 +2010_004224 +2010_004225 +2010_004227 +2010_004228 +2010_004229 +2010_004230 +2010_004231 +2010_004238 +2010_004239 +2010_004242 +2010_004244 +2010_004247 +2010_004248 +2010_004249 +2010_004252 +2010_004253 +2010_004254 +2010_004256 +2010_004257 +2010_004258 +2010_004259 +2010_004263 +2010_004264 +2010_004271 +2010_004275 +2010_004276 +2010_004278 +2010_004279 +2010_004280 +2010_004282 +2010_004283 +2010_004286 +2010_004288 +2010_004289 +2010_004290 +2010_004291 +2010_004295 +2010_004296 +2010_004297 +2010_004301 +2010_004304 +2010_004306 +2010_004307 +2010_004311 +2010_004312 +2010_004313 +2010_004318 +2010_004325 +2010_004327 +2010_004332 +2010_004333 +2010_004335 +2010_004336 +2010_004339 +2010_004341 +2010_004344 +2010_004345 +2010_004346 +2010_004349 +2010_004350 +2010_004351 +2010_004352 +2010_004357 +2010_004358 +2010_004360 +2010_004361 +2010_004362 +2010_004363 +2010_004365 +2010_004366 +2010_004367 +2010_004368 +2010_004370 +2010_004371 +2010_004373 +2010_004374 +2010_004380 +2010_004385 +2010_004387 +2010_004390 +2010_004391 +2010_004400 +2010_004402 +2010_004404 +2010_004409 +2010_004412 +2010_004415 +2010_004417 +2010_004420 +2010_004422 +2010_004425 +2010_004428 +2010_004429 +2010_004431 +2010_004436 +2010_004439 +2010_004441 +2010_004445 +2010_004447 +2010_004448 +2010_004450 +2010_004451 +2010_004455 +2010_004456 +2010_004457 +2010_004459 +2010_004460 +2010_004461 +2010_004466 +2010_004467 +2010_004469 +2010_004475 +2010_004476 +2010_004477 +2010_004478 +2010_004481 +2010_004483 +2010_004484 +2010_004486 +2010_004488 +2010_004491 +2010_004492 +2010_004493 +2010_004499 +2010_004501 +2010_004503 +2010_004505 +2010_004506 +2010_004509 +2010_004511 +2010_004514 +2010_004515 +2010_004517 +2010_004518 +2010_004521 +2010_004523 +2010_004533 +2010_004536 +2010_004537 +2010_004540 +2010_004542 +2010_004545 +2010_004546 +2010_004553 +2010_004554 +2010_004557 +2010_004558 +2010_004560 +2010_004561 +2010_004567 +2010_004569 +2010_004570 +2010_004573 +2010_004575 +2010_004576 +2010_004577 +2010_004581 +2010_004584 +2010_004585 +2010_004586 +2010_004588 +2010_004591 +2010_004592 +2010_004594 +2010_004596 +2010_004597 +2010_004598 +2010_004601 +2010_004604 +2010_004609 +2010_004616 +2010_004618 +2010_004620 +2010_004621 +2010_004624 +2010_004625 +2010_004627 +2010_004629 +2010_004631 +2010_004634 +2010_004637 +2010_004638 +2010_004642 +2010_004646 +2010_004654 +2010_004655 +2010_004656 +2010_004657 +2010_004659 +2010_004660 +2010_004661 +2010_004665 +2010_004666 +2010_004667 +2010_004669 +2010_004672 +2010_004676 +2010_004677 +2010_004679 +2010_004680 +2010_004681 +2010_004683 +2010_004686 +2010_004690 +2010_004691 +2010_004692 +2010_004694 +2010_004696 +2010_004698 +2010_004703 +2010_004704 +2010_004708 +2010_004710 +2010_004712 +2010_004714 +2010_004717 +2010_004721 +2010_004722 +2010_004726 +2010_004728 +2010_004729 +2010_004730 +2010_004733 +2010_004735 +2010_004738 +2010_004741 +2010_004743 +2010_004747 +2010_004748 +2010_004749 +2010_004750 +2010_004751 +2010_004753 +2010_004756 +2010_004760 +2010_004765 +2010_004766 +2010_004768 +2010_004770 +2010_004773 +2010_004775 +2010_004777 +2010_004778 +2010_004779 +2010_004782 +2010_004785 +2010_004786 +2010_004791 +2010_004792 +2010_004793 +2010_004797 +2010_004804 +2010_004805 +2010_004806 +2010_004807 +2010_004808 +2010_004809 +2010_004812 +2010_004813 +2010_004816 +2010_004817 +2010_004821 +2010_004822 +2010_004824 +2010_004826 +2010_004829 +2010_004830 +2010_004832 +2010_004836 +2010_004838 +2010_004841 +2010_004844 +2010_004847 +2010_004848 +2010_004849 +2010_004852 +2010_004854 +2010_004855 +2010_004865 +2010_004866 +2010_004868 +2010_004871 +2010_004874 +2010_004877 +2010_004878 +2010_004879 +2010_004888 +2010_004889 +2010_004890 +2010_004891 +2010_004894 +2010_004896 +2010_004900 +2010_004901 +2010_004903 +2010_004906 +2010_004908 +2010_004909 +2010_004910 +2010_004913 +2010_004916 +2010_004917 +2010_004918 +2010_004919 +2010_004921 +2010_004922 +2010_004928 +2010_004930 +2010_004931 +2010_004933 +2010_004937 +2010_004938 +2010_004942 +2010_004943 +2010_004944 +2010_004945 +2010_004948 +2010_004950 +2010_004952 +2010_004953 +2010_004954 +2010_004957 +2010_004959 +2010_004960 +2010_004962 +2010_004963 +2010_004966 +2010_004967 +2010_004968 +2010_004970 +2010_004971 +2010_004973 +2010_004974 +2010_004982 +2010_004983 +2010_004987 +2010_004989 +2010_004991 +2010_004992 +2010_004995 +2010_004997 +2010_004998 +2010_005000 +2010_005002 +2010_005005 +2010_005006 +2010_005008 +2010_005011 +2010_005016 +2010_005017 +2010_005018 +2010_005019 +2010_005022 +2010_005023 +2010_005026 +2010_005028 +2010_005031 +2010_005033 +2010_005035 +2010_005041 +2010_005042 +2010_005044 +2010_005048 +2010_005049 +2010_005052 +2010_005053 +2010_005054 +2010_005055 +2010_005059 +2010_005060 +2010_005061 +2010_005062 +2010_005064 +2010_005066 +2010_005068 +2010_005071 +2010_005072 +2010_005075 +2010_005079 +2010_005080 +2010_005082 +2010_005083 +2010_005087 +2010_005090 +2010_005093 +2010_005094 +2010_005096 +2010_005098 +2010_005099 +2010_005100 +2010_005101 +2010_005106 +2010_005107 +2010_005109 +2010_005110 +2010_005111 +2010_005115 +2010_005116 +2010_005119 +2010_005120 +2010_005123 +2010_005127 +2010_005128 +2010_005129 +2010_005130 +2010_005133 +2010_005134 +2010_005136 +2010_005138 +2010_005141 +2010_005143 +2010_005147 +2010_005148 +2010_005149 +2010_005152 +2010_005155 +2010_005158 +2010_005161 +2010_005164 +2010_005167 +2010_005169 +2010_005170 +2010_005182 +2010_005183 +2010_005184 +2010_005185 +2010_005188 +2010_005190 +2010_005192 +2010_005193 +2010_005198 +2010_005199 +2010_005201 +2010_005202 +2010_005208 +2010_005211 +2010_005213 +2010_005215 +2010_005216 +2010_005217 +2010_005222 +2010_005223 +2010_005224 +2010_005226 +2010_005229 +2010_005230 +2010_005232 +2010_005236 +2010_005238 +2010_005239 +2010_005242 +2010_005243 +2010_005246 +2010_005250 +2010_005253 +2010_005257 +2010_005258 +2010_005260 +2010_005261 +2010_005264 +2010_005266 +2010_005268 +2010_005270 +2010_005272 +2010_005273 +2010_005274 +2010_005275 +2010_005276 +2010_005277 +2010_005279 +2010_005285 +2010_005287 +2010_005292 +2010_005293 +2010_005297 +2010_005299 +2010_005301 +2010_005303 +2010_005306 +2010_005308 +2010_005309 +2010_005310 +2010_005312 +2010_005314 +2010_005317 +2010_005318 +2010_005320 +2010_005323 +2010_005327 +2010_005330 +2010_005331 +2010_005332 +2010_005338 +2010_005340 +2010_005345 +2010_005346 +2010_005349 +2010_005350 +2010_005352 +2010_005359 +2010_005361 +2010_005364 +2010_005365 +2010_005369 +2010_005371 +2010_005372 +2010_005374 +2010_005375 +2010_005376 +2010_005377 +2010_005379 +2010_005382 +2010_005384 +2010_005385 +2010_005386 +2010_005388 +2010_005389 +2010_005391 +2010_005393 +2010_005394 +2010_005398 +2010_005403 +2010_005405 +2010_005406 +2010_005408 +2010_005409 +2010_005410 +2010_005414 +2010_005415 +2010_005416 +2010_005417 +2010_005419 +2010_005424 +2010_005425 +2010_005426 +2010_005429 +2010_005434 +2010_005437 +2010_005441 +2010_005442 +2010_005450 +2010_005452 +2010_005455 +2010_005456 +2010_005457 +2010_005458 +2010_005462 +2010_005463 +2010_005466 +2010_005467 +2010_005468 +2010_005471 +2010_005472 +2010_005474 +2010_005475 +2010_005480 +2010_005482 +2010_005483 +2010_005484 +2010_005489 +2010_005491 +2010_005492 +2010_005493 +2010_005494 +2010_005497 +2010_005498 +2010_005500 +2010_005502 +2010_005505 +2010_005506 +2010_005511 +2010_005512 +2010_005513 +2010_005514 +2010_005515 +2010_005516 +2010_005518 +2010_005519 +2010_005522 +2010_005527 +2010_005532 +2010_005535 +2010_005536 +2010_005538 +2010_005540 +2010_005542 +2010_005543 +2010_005546 +2010_005548 +2010_005551 +2010_005556 +2010_005557 +2010_005559 +2010_005561 +2010_005562 +2010_005565 +2010_005566 +2010_005567 +2010_005570 +2010_005571 +2010_005572 +2010_005573 +2010_005576 +2010_005578 +2010_005584 +2010_005585 +2010_005586 +2010_005587 +2010_005588 +2010_005591 +2010_005592 +2010_005593 +2010_005594 +2010_005595 +2010_005596 +2010_005597 +2010_005601 +2010_005603 +2010_005604 +2010_005608 +2010_005610 +2010_005612 +2010_005614 +2010_005615 +2010_005619 +2010_005620 +2010_005625 +2010_005627 +2010_005628 +2010_005629 +2010_005632 +2010_005635 +2010_005636 +2010_005637 +2010_005640 +2010_005643 +2010_005646 +2010_005647 +2010_005651 +2010_005652 +2010_005654 +2010_005657 +2010_005658 +2010_005663 +2010_005665 +2010_005666 +2010_005668 +2010_005669 +2010_005670 +2010_005671 +2010_005672 +2010_005676 +2010_005678 +2010_005681 +2010_005683 +2010_005684 +2010_005688 +2010_005692 +2010_005696 +2010_005697 +2010_005700 +2010_005712 +2010_005715 +2010_005716 +2010_005721 +2010_005723 +2010_005725 +2010_005731 +2010_005732 +2010_005733 +2010_005734 +2010_005735 +2010_005736 +2010_005738 +2010_005740 +2010_005744 +2010_005746 +2010_005747 +2010_005748 +2010_005750 +2010_005752 +2010_005753 +2010_005755 +2010_005756 +2010_005758 +2010_005761 +2010_005763 +2010_005764 +2010_005767 +2010_005768 +2010_005770 +2010_005775 +2010_005776 +2010_005777 +2010_005780 +2010_005782 +2010_005784 +2010_005785 +2010_005791 +2010_005794 +2010_005796 +2010_005800 +2010_005804 +2010_005805 +2010_005806 +2010_005807 +2010_005810 +2010_005815 +2010_005816 +2010_005817 +2010_005820 +2010_005821 +2010_005823 +2010_005824 +2010_005825 +2010_005826 +2010_005827 +2010_005830 +2010_005833 +2010_005835 +2010_005836 +2010_005837 +2010_005838 +2010_005840 +2010_005841 +2010_005843 +2010_005845 +2010_005847 +2010_005848 +2010_005849 +2010_005853 +2010_005855 +2010_005865 +2010_005867 +2010_005868 +2010_005870 +2010_005874 +2010_005875 +2010_005876 +2010_005882 +2010_005883 +2010_005884 +2010_005885 +2010_005886 +2010_005891 +2010_005892 +2010_005894 +2010_005896 +2010_005897 +2010_005898 +2010_005901 +2010_005903 +2010_005904 +2010_005906 +2010_005907 +2010_005909 +2010_005914 +2010_005919 +2010_005921 +2010_005927 +2010_005928 +2010_005929 +2010_005930 +2010_005932 +2010_005934 +2010_005935 +2010_005936 +2010_005937 +2010_005938 +2010_005942 +2010_005943 +2010_005948 +2010_005949 +2010_005951 +2010_005952 +2010_005953 +2010_005954 +2010_005958 +2010_005959 +2010_005960 +2010_005967 +2010_005968 +2010_005972 +2010_005973 +2010_005974 +2010_005975 +2010_005976 +2010_005978 +2010_005980 +2010_005981 +2010_005982 +2010_005984 +2010_005985 +2010_005986 +2010_005987 +2010_005993 +2010_005995 +2010_005996 +2010_005997 +2010_005998 +2010_006000 +2010_006004 +2010_006009 +2010_006010 +2010_006011 +2010_006012 +2010_006015 +2010_006021 +2010_006023 +2010_006025 +2010_006028 +2010_006031 +2010_006032 +2010_006033 +2010_006035 +2010_006037 +2010_006040 +2010_006041 +2010_006042 +2010_006050 +2010_006051 +2010_006056 +2010_006057 +2010_006058 +2010_006061 +2010_006062 +2010_006063 +2010_006066 +2010_006067 +2010_006073 +2010_006076 +2010_006078 +2010_006079 +2010_006082 +2010_006084 +2010_006086 +2011_000002 +2011_000003 +2011_000006 +2011_000007 +2011_000009 +2011_000010 +2011_000012 +2011_000016 +2011_000017 +2011_000022 +2011_000025 +2011_000027 +2011_000030 +2011_000034 +2011_000036 +2011_000037 +2011_000038 +2011_000041 +2011_000043 +2011_000044 +2011_000048 +2011_000052 +2011_000053 +2011_000057 +2011_000058 +2011_000060 +2011_000061 +2011_000065 +2011_000068 +2011_000069 +2011_000071 +2011_000072 +2011_000076 +2011_000077 +2011_000082 +2011_000083 +2011_000084 +2011_000086 +2011_000087 +2011_000090 +2011_000094 +2011_000095 +2011_000096 +2011_000098 +2011_000102 +2011_000103 +2011_000105 +2011_000108 +2011_000109 +2011_000114 +2011_000116 +2011_000122 +2011_000124 +2011_000128 +2011_000129 +2011_000130 +2011_000137 +2011_000138 +2011_000142 +2011_000145 +2011_000146 +2011_000147 +2011_000149 +2011_000152 +2011_000161 +2011_000162 +2011_000163 +2011_000165 +2011_000166 +2011_000176 +2011_000180 +2011_000181 +2011_000182 +2011_000192 +2011_000194 +2011_000195 +2011_000196 +2011_000197 +2011_000202 +2011_000206 +2011_000208 +2011_000210 +2011_000213 +2011_000214 +2011_000216 +2011_000219 +2011_000220 +2011_000221 +2011_000222 +2011_000224 +2011_000228 +2011_000229 +2011_000232 +2011_000233 +2011_000241 +2011_000243 +2011_000246 +2011_000249 +2011_000250 +2011_000252 +2011_000253 +2011_000257 +2011_000258 +2011_000267 +2011_000268 +2011_000269 +2011_000273 +2011_000276 +2011_000277 +2011_000278 +2011_000282 +2011_000285 +2011_000286 +2011_000288 +2011_000290 +2011_000293 +2011_000297 +2011_000299 +2011_000304 +2011_000305 +2011_000307 +2011_000309 +2011_000314 +2011_000315 +2011_000317 +2011_000319 +2011_000320 +2011_000321 +2011_000322 +2011_000324 +2011_000329 +2011_000332 +2011_000342 +2011_000343 +2011_000344 +2011_000345 +2011_000346 +2011_000347 +2011_000359 +2011_000361 +2011_000362 +2011_000364 +2011_000369 +2011_000370 +2011_000374 +2011_000375 +2011_000376 +2011_000379 +2011_000382 +2011_000383 +2011_000386 +2011_000388 +2011_000391 +2011_000392 +2011_000397 +2011_000398 +2011_000399 +2011_000400 +2011_000404 +2011_000408 +2011_000413 +2011_000416 +2011_000418 +2011_000420 +2011_000426 +2011_000427 +2011_000428 +2011_000432 +2011_000434 +2011_000442 +2011_000444 +2011_000445 +2011_000449 +2011_000450 +2011_000453 +2011_000454 +2011_000457 +2011_000465 +2011_000468 +2011_000469 +2011_000471 +2011_000474 +2011_000475 +2011_000477 +2011_000485 +2011_000487 +2011_000491 +2011_000492 +2011_000494 +2011_000496 +2011_000498 +2011_000499 +2011_000502 +2011_000505 +2011_000509 +2011_000511 +2011_000513 +2011_000514 +2011_000518 +2011_000519 +2011_000520 +2011_000530 +2011_000531 +2011_000534 +2011_000538 +2011_000541 +2011_000542 +2011_000550 +2011_000551 +2011_000554 +2011_000556 +2011_000557 +2011_000558 +2011_000559 +2011_000560 +2011_000565 +2011_000567 +2011_000569 +2011_000572 +2011_000573 +2011_000575 +2011_000577 +2011_000578 +2011_000579 +2011_000586 +2011_000589 +2011_000592 +2011_000594 +2011_000596 +2011_000600 +2011_000608 +2011_000609 +2011_000612 +2011_000622 +2011_000627 +2011_000628 +2011_000629 +2011_000630 +2011_000631 +2011_000634 +2011_000637 +2011_000641 +2011_000642 +2011_000646 +2011_000651 +2011_000652 +2011_000655 +2011_000656 +2011_000657 +2011_000666 +2011_000673 +2011_000675 +2011_000679 +2011_000682 +2011_000683 +2011_000684 +2011_000685 +2011_000688 +2011_000689 +2011_000690 +2011_000692 +2011_000698 +2011_000701 +2011_000703 +2011_000704 +2011_000709 +2011_000711 +2011_000713 +2011_000718 +2011_000724 +2011_000725 +2011_000731 +2011_000734 +2011_000743 +2011_000744 +2011_000745 +2011_000748 +2011_000749 +2011_000753 +2011_000755 +2011_000758 +2011_000759 +2011_000763 +2011_000765 +2011_000767 +2011_000768 +2011_000769 +2011_000770 +2011_000771 +2011_000772 +2011_000774 +2011_000778 +2011_000784 +2011_000785 +2011_000788 +2011_000790 +2011_000791 +2011_000793 +2011_000800 +2011_000804 +2011_000806 +2011_000815 +2011_000819 +2011_000820 +2011_000823 +2011_000824 +2011_000827 +2011_000828 +2011_000829 +2011_000831 +2011_000834 +2011_000837 +2011_000839 +2011_000840 +2011_000845 +2011_000847 +2011_000848 +2011_000850 +2011_000851 +2011_000853 +2011_000855 +2011_000858 +2011_000859 +2011_000872 +2011_000875 +2011_000882 +2011_000885 +2011_000887 +2011_000893 +2011_000895 +2011_000897 +2011_000898 +2011_000899 +2011_000901 +2011_000908 +2011_000909 +2011_000917 +2011_000919 +2011_000920 +2011_000922 +2011_000927 +2011_000930 +2011_000932 +2011_000933 +2011_000934 +2011_000940 +2011_000944 +2011_000947 +2011_000950 +2011_000951 +2011_000954 +2011_000957 +2011_000961 +2011_000965 +2011_000973 +2011_000975 +2011_000977 +2011_000979 +2011_000981 +2011_000982 +2011_000983 +2011_000986 +2011_000987 +2011_000990 +2011_000991 +2011_000996 +2011_000997 +2011_000999 +2011_001001 +2011_001004 +2011_001008 +2011_001009 +2011_001010 +2011_001011 +2011_001015 +2011_001016 +2011_001019 +2011_001022 +2011_001023 +2011_001025 +2011_001027 +2011_001028 +2011_001029 +2011_001030 +2011_001031 +2011_001032 +2011_001033 +2011_001034 +2011_001036 +2011_001040 +2011_001044 +2011_001052 +2011_001054 +2011_001055 +2011_001056 +2011_001058 +2011_001062 +2011_001066 +2011_001073 +2011_001079 +2011_001080 +2011_001081 +2011_001084 +2011_001086 +2011_001091 +2011_001093 +2011_001097 +2011_001100 +2011_001105 +2011_001106 +2011_001107 +2011_001111 +2011_001116 +2011_001117 +2011_001123 +2011_001124 +2011_001126 +2011_001127 +2011_001128 +2011_001133 +2011_001134 +2011_001135 +2011_001136 +2011_001137 +2011_001138 +2011_001139 +2011_001144 +2011_001146 +2011_001149 +2011_001150 +2011_001152 +2011_001153 +2011_001158 +2011_001160 +2011_001163 +2011_001166 +2011_001167 +2011_001168 +2011_001169 +2011_001173 +2011_001175 +2011_001176 +2011_001188 +2011_001189 +2011_001192 +2011_001193 +2011_001198 +2011_001201 +2011_001203 +2011_001208 +2011_001211 +2011_001213 +2011_001215 +2011_001216 +2011_001217 +2011_001220 +2011_001221 +2011_001223 +2011_001226 +2011_001227 +2011_001229 +2011_001238 +2011_001240 +2011_001245 +2011_001246 +2011_001251 +2011_001252 +2011_001253 +2011_001254 +2011_001255 +2011_001257 +2011_001259 +2011_001260 +2011_001261 +2011_001264 +2011_001266 +2011_001270 +2011_001271 +2011_001272 +2011_001277 +2011_001282 +2011_001283 +2011_001284 +2011_001285 +2011_001286 +2011_001288 +2011_001290 +2011_001295 +2011_001302 +2011_001304 +2011_001305 +2011_001310 +2011_001311 +2011_001315 +2011_001318 +2011_001319 +2011_001320 +2011_001323 +2011_001326 +2011_001327 +2011_001329 +2011_001330 +2011_001333 +2011_001335 +2011_001336 +2011_001337 +2011_001354 +2011_001355 +2011_001357 +2011_001360 +2011_001366 +2011_001369 +2011_001370 +2011_001373 +2011_001375 +2011_001381 +2011_001382 +2011_001384 +2011_001387 +2011_001388 +2011_001389 +2011_001390 +2011_001394 +2011_001399 +2011_001400 +2011_001402 +2011_001404 +2011_001406 +2011_001411 +2011_001412 +2011_001414 +2011_001422 +2011_001424 +2011_001432 +2011_001440 +2011_001441 +2011_001449 +2011_001451 +2011_001455 +2011_001456 +2011_001463 +2011_001464 +2011_001466 +2011_001467 +2011_001471 +2011_001475 +2011_001476 +2011_001479 +2011_001480 +2011_001498 +2011_001501 +2011_001503 +2011_001505 +2011_001507 +2011_001508 +2011_001510 +2011_001514 +2011_001518 +2011_001519 +2011_001521 +2011_001524 +2011_001525 +2011_001526 +2011_001531 +2011_001535 +2011_001536 +2011_001537 +2011_001538 +2011_001541 +2011_001542 +2011_001544 +2011_001547 +2011_001549 +2011_001557 +2011_001558 +2011_001560 +2011_001566 +2011_001568 +2011_001571 +2011_001572 +2011_001573 +2011_001582 +2011_001586 +2011_001591 +2011_001592 +2011_001596 +2011_001599 +2011_001600 +2011_001602 +2011_001605 +2011_001606 +2011_001608 +2011_001611 +2011_001612 +2011_001616 +2011_001618 +2011_001620 +2011_001621 +2011_001622 +2011_001625 +2011_001628 +2011_001629 +2011_001632 +2011_001641 +2011_001643 +2011_001647 +2011_001649 +2011_001650 +2011_001652 +2011_001653 +2011_001655 +2011_001656 +2011_001662 +2011_001663 +2011_001666 +2011_001671 +2011_001673 +2011_001678 +2011_001679 +2011_001689 +2011_001691 +2011_001693 +2011_001694 +2011_001695 +2011_001698 +2011_001699 +2011_001700 +2011_001705 +2011_001707 +2011_001710 +2011_001712 +2011_001715 +2011_001716 +2011_001719 +2011_001720 +2011_001727 +2011_001730 +2011_001732 +2011_001733 +2011_001739 +2011_001740 +2011_001741 +2011_001747 +2011_001751 +2011_001753 +2011_001754 +2011_001755 +2011_001757 +2011_001764 +2011_001765 +2011_001766 +2011_001769 +2011_001771 +2011_001776 +2011_001779 +2011_001785 +2011_001789 +2011_001790 +2011_001791 +2011_001796 +2011_001799 +2011_001800 +2011_001801 +2011_001805 +2011_001806 +2011_001810 +2011_001811 +2011_001815 +2011_001819 +2011_001820 +2011_001822 +2011_001824 +2011_001825 +2011_001826 +2011_001827 +2011_001833 +2011_001834 +2011_001837 +2011_001840 +2011_001841 +2011_001842 +2011_001845 +2011_001847 +2011_001854 +2011_001855 +2011_001856 +2011_001858 +2011_001866 +2011_001870 +2011_001871 +2011_001872 +2011_001873 +2011_001875 +2011_001876 +2011_001877 +2011_001884 +2011_001885 +2011_001886 +2011_001889 +2011_001891 +2011_001893 +2011_001895 +2011_001896 +2011_001900 +2011_001901 +2011_001902 +2011_001904 +2011_001906 +2011_001911 +2011_001914 +2011_001919 +2011_001920 +2011_001922 +2011_001924 +2011_001926 +2011_001927 +2011_001928 +2011_001929 +2011_001930 +2011_001932 +2011_001937 +2011_001938 +2011_001941 +2011_001942 +2011_001944 +2011_001945 +2011_001946 +2011_001949 +2011_001950 +2011_001951 +2011_001952 +2011_001956 +2011_001959 +2011_001961 +2011_001962 +2011_001964 +2011_001966 +2011_001967 +2011_001971 +2011_001972 +2011_001974 +2011_001975 +2011_001977 +2011_001980 +2011_001982 +2011_001986 +2011_001987 +2011_001989 +2011_001991 +2011_002003 +2011_002004 +2011_002005 +2011_002006 +2011_002012 +2011_002016 +2011_002018 +2011_002019 +2011_002021 +2011_002022 +2011_002027 +2011_002031 +2011_002033 +2011_002034 +2011_002036 +2011_002038 +2011_002039 +2011_002042 +2011_002044 +2011_002045 +2011_002046 +2011_002047 +2011_002049 +2011_002050 +2011_002053 +2011_002055 +2011_002062 +2011_002063 +2011_002073 +2011_002074 +2011_002079 +2011_002085 +2011_002088 +2011_002091 +2011_002093 +2011_002096 +2011_002097 +2011_002100 +2011_002102 +2011_002105 +2011_002106 +2011_002107 +2011_002108 +2011_002109 +2011_002111 +2011_002113 +2011_002114 +2011_002116 +2011_002119 +2011_002128 +2011_002131 +2011_002132 +2011_002134 +2011_002135 +2011_002137 +2011_002142 +2011_002143 +2011_002144 +2011_002147 +2011_002148 +2011_002149 +2011_002154 +2011_002158 +2011_002159 +2011_002160 +2011_002163 +2011_002167 +2011_002169 +2011_002173 +2011_002174 +2011_002177 +2011_002179 +2011_002184 +2011_002185 +2011_002186 +2011_002189 +2011_002192 +2011_002193 +2011_002211 +2011_002215 +2011_002218 +2011_002221 +2011_002222 +2011_002224 +2011_002227 +2011_002228 +2011_002230 +2011_002234 +2011_002236 +2011_002237 +2011_002239 +2011_002241 +2011_002245 +2011_002246 +2011_002248 +2011_002251 +2011_002252 +2011_002253 +2011_002260 +2011_002265 +2011_002268 +2011_002269 +2011_002270 +2011_002272 +2011_002273 +2011_002276 +2011_002278 +2011_002280 +2011_002281 +2011_002284 +2011_002291 +2011_002292 +2011_002294 +2011_002300 +2011_002301 +2011_002303 +2011_002312 +2011_002318 +2011_002324 +2011_002325 +2011_002330 +2011_002335 +2011_002341 +2011_002346 +2011_002347 +2011_002348 +2011_002350 +2011_002357 +2011_002359 +2011_002365 +2011_002366 +2011_002380 +2011_002381 +2011_002384 +2011_002385 +2011_002386 +2011_002387 +2011_002388 +2011_002389 +2011_002393 +2011_002394 +2011_002395 +2011_002396 +2011_002397 +2011_002398 +2011_002402 +2011_002406 +2011_002407 +2011_002409 +2011_002410 +2011_002413 +2011_002414 +2011_002418 +2011_002420 +2011_002421 +2011_002422 +2011_002429 +2011_002433 +2011_002435 +2011_002436 +2011_002443 +2011_002447 +2011_002448 +2011_002455 +2011_002457 +2011_002458 +2011_002459 +2011_002460 +2011_002461 +2011_002462 +2011_002463 +2011_002464 +2011_002470 +2011_002474 +2011_002476 +2011_002479 +2011_002482 +2011_002484 +2011_002488 +2011_002490 +2011_002491 +2011_002492 +2011_002494 +2011_002495 +2011_002503 +2011_002504 +2011_002505 +2011_002507 +2011_002511 +2011_002514 +2011_002516 +2011_002519 +2011_002520 +2011_002526 +2011_002528 +2011_002531 +2011_002533 +2011_002536 +2011_002542 +2011_002543 +2011_002551 +2011_002552 +2011_002553 +2011_002554 +2011_002555 +2011_002556 +2011_002558 +2011_002559 +2011_002560 +2011_002561 +2011_002566 +2011_002567 +2011_002568 +2011_002571 +2011_002579 +2011_002582 +2011_002583 +2011_002584 +2011_002585 +2011_002588 +2011_002590 +2011_002594 +2011_002598 +2011_002605 +2011_002606 +2011_002609 +2011_002610 +2011_002612 +2011_002614 +2011_002616 +2011_002617 +2011_002618 +2011_002620 +2011_002624 +2011_002629 +2011_002631 +2011_002636 +2011_002638 +2011_002639 +2011_002640 +2011_002649 +2011_002650 +2011_002652 +2011_002656 +2011_002657 +2011_002658 +2011_002661 +2011_002664 +2011_002673 +2011_002674 +2011_002676 +2011_002677 +2011_002678 +2011_002687 +2011_002694 +2011_002697 +2011_002699 +2011_002706 +2011_002709 +2011_002714 +2011_002715 +2011_002717 +2011_002719 +2011_002724 +2011_002725 +2011_002726 +2011_002738 +2011_002740 +2011_002742 +2011_002748 +2011_002750 +2011_002751 +2011_002752 +2011_002756 +2011_002760 +2011_002765 +2011_002767 +2011_002770 +2011_002772 +2011_002775 +2011_002776 +2011_002779 +2011_002780 +2011_002782 +2011_002784 +2011_002786 +2011_002790 +2011_002795 +2011_002796 +2011_002798 +2011_002802 +2011_002803 +2011_002805 +2011_002808 +2011_002810 +2011_002811 +2011_002814 +2011_002817 +2011_002818 +2011_002821 +2011_002823 +2011_002826 +2011_002830 +2011_002831 +2011_002833 +2011_002834 +2011_002838 +2011_002841 +2011_002842 +2011_002851 +2011_002852 +2011_002854 +2011_002864 +2011_002867 +2011_002868 +2011_002870 +2011_002871 +2011_002872 +2011_002873 +2011_002880 +2011_002881 +2011_002883 +2011_002884 +2011_002887 +2011_002889 +2011_002890 +2011_002897 +2011_002900 +2011_002908 +2011_002911 +2011_002912 +2011_002913 +2011_002916 +2011_002917 +2011_002920 +2011_002921 +2011_002924 +2011_002925 +2011_002927 +2011_002930 +2011_002932 +2011_002933 +2011_002935 +2011_002937 +2011_002940 +2011_002942 +2011_002943 +2011_002944 +2011_002947 +2011_002949 +2011_002953 +2011_002956 +2011_002958 +2011_002962 +2011_002965 +2011_002966 +2011_002967 +2011_002969 +2011_002970 +2011_002971 +2011_002974 +2011_002978 +2011_002979 +2011_002983 +2011_002985 +2011_002987 +2011_002988 +2011_002992 +2011_002994 +2011_002999 +2011_003002 +2011_003005 +2011_003010 +2011_003012 +2011_003013 +2011_003016 +2011_003020 +2011_003023 +2011_003025 +2011_003027 +2011_003028 +2011_003029 +2011_003034 +2011_003038 +2011_003039 +2011_003041 +2011_003043 +2011_003044 +2011_003047 +2011_003048 +2011_003049 +2011_003050 +2011_003054 +2011_003057 +2011_003059 +2011_003063 +2011_003065 +2011_003066 +2011_003073 +2011_003074 +2011_003076 +2011_003078 +2011_003079 +2011_003081 +2011_003086 +2011_003089 +2011_003091 +2011_003097 +2011_003109 +2011_003111 +2011_003115 +2011_003121 +2011_003124 +2011_003132 +2011_003134 +2011_003138 +2011_003141 +2011_003148 +2011_003149 +2011_003150 +2011_003151 +2011_003152 +2011_003154 +2011_003158 +2011_003159 +2011_003162 +2011_003163 +2011_003166 +2011_003167 +2011_003168 +2011_003169 +2011_003171 +2011_003176 +2011_003177 +2011_003183 +2011_003184 +2011_003185 +2011_003187 +2011_003188 +2011_003192 +2011_003194 +2011_003201 +2011_003211 +2011_003212 +2011_003213 +2011_003216 +2011_003220 +2011_003223 +2011_003228 +2011_003230 +2011_003232 +2011_003236 +2011_003238 +2011_003242 +2011_003244 +2011_003246 +2011_003247 +2011_003253 +2011_003254 +2011_003255 +2011_003259 +2011_003260 +2011_003261 +2011_003262 +2011_003269 +2011_003274 +2011_003275 +2011_003276 diff --git a/data/val.txt b/data/val.txt new file mode 100644 index 0000000000000000000000000000000000000000..80c3dee9eaa1e8d2a7696690ef8606198b126f19 --- /dev/null +++ b/data/val.txt @@ -0,0 +1,1449 @@ +2007_000033 +2007_000042 +2007_000061 +2007_000123 +2007_000129 +2007_000175 +2007_000187 +2007_000323 +2007_000332 +2007_000346 +2007_000452 +2007_000464 +2007_000491 +2007_000529 +2007_000559 +2007_000572 +2007_000629 +2007_000636 +2007_000661 +2007_000663 +2007_000676 +2007_000727 +2007_000762 +2007_000783 +2007_000799 +2007_000804 +2007_000830 +2007_000837 +2007_000847 +2007_000862 +2007_000925 +2007_000999 +2007_001154 +2007_001175 +2007_001239 +2007_001284 +2007_001288 +2007_001289 +2007_001299 +2007_001311 +2007_001321 +2007_001377 +2007_001408 +2007_001423 +2007_001430 +2007_001457 +2007_001458 +2007_001526 +2007_001568 +2007_001585 +2007_001586 +2007_001587 +2007_001594 +2007_001630 +2007_001677 +2007_001678 +2007_001717 +2007_001733 +2007_001761 +2007_001763 +2007_001774 +2007_001884 +2007_001955 +2007_002046 +2007_002094 +2007_002119 +2007_002132 +2007_002260 +2007_002266 +2007_002268 +2007_002284 +2007_002376 +2007_002378 +2007_002387 +2007_002400 +2007_002412 +2007_002426 +2007_002427 +2007_002445 +2007_002470 +2007_002539 +2007_002565 +2007_002597 +2007_002618 +2007_002619 +2007_002624 +2007_002643 +2007_002648 +2007_002719 +2007_002728 +2007_002823 +2007_002824 +2007_002852 +2007_002903 +2007_003011 +2007_003020 +2007_003022 +2007_003051 +2007_003088 +2007_003101 +2007_003106 +2007_003110 +2007_003131 +2007_003134 +2007_003137 +2007_003143 +2007_003169 +2007_003188 +2007_003194 +2007_003195 +2007_003201 +2007_003349 +2007_003367 +2007_003373 +2007_003499 +2007_003503 +2007_003506 +2007_003530 +2007_003571 +2007_003587 +2007_003611 +2007_003621 +2007_003682 +2007_003711 +2007_003714 +2007_003742 +2007_003786 +2007_003841 +2007_003848 +2007_003861 +2007_003872 +2007_003917 +2007_003957 +2007_003991 +2007_004033 +2007_004052 +2007_004112 +2007_004121 +2007_004143 +2007_004189 +2007_004190 +2007_004193 +2007_004241 +2007_004275 +2007_004281 +2007_004380 +2007_004392 +2007_004405 +2007_004468 +2007_004483 +2007_004510 +2007_004538 +2007_004558 +2007_004644 +2007_004649 +2007_004712 +2007_004722 +2007_004856 +2007_004866 +2007_004902 +2007_004969 +2007_005058 +2007_005074 +2007_005107 +2007_005114 +2007_005149 +2007_005173 +2007_005281 +2007_005294 +2007_005296 +2007_005304 +2007_005331 +2007_005354 +2007_005358 +2007_005428 +2007_005460 +2007_005469 +2007_005509 +2007_005547 +2007_005600 +2007_005608 +2007_005626 +2007_005689 +2007_005696 +2007_005705 +2007_005759 +2007_005803 +2007_005813 +2007_005828 +2007_005844 +2007_005845 +2007_005857 +2007_005911 +2007_005915 +2007_005978 +2007_006028 +2007_006035 +2007_006046 +2007_006076 +2007_006086 +2007_006117 +2007_006171 +2007_006241 +2007_006260 +2007_006277 +2007_006348 +2007_006364 +2007_006373 +2007_006444 +2007_006449 +2007_006549 +2007_006553 +2007_006560 +2007_006647 +2007_006678 +2007_006680 +2007_006698 +2007_006761 +2007_006802 +2007_006837 +2007_006841 +2007_006864 +2007_006866 +2007_006946 +2007_007007 +2007_007084 +2007_007109 +2007_007130 +2007_007165 +2007_007168 +2007_007195 +2007_007196 +2007_007203 +2007_007211 +2007_007235 +2007_007341 +2007_007414 +2007_007417 +2007_007470 +2007_007477 +2007_007493 +2007_007498 +2007_007524 +2007_007534 +2007_007624 +2007_007651 +2007_007688 +2007_007748 +2007_007795 +2007_007810 +2007_007815 +2007_007818 +2007_007836 +2007_007849 +2007_007881 +2007_007996 +2007_008051 +2007_008084 +2007_008106 +2007_008110 +2007_008204 +2007_008222 +2007_008256 +2007_008260 +2007_008339 +2007_008374 +2007_008415 +2007_008430 +2007_008543 +2007_008547 +2007_008596 +2007_008645 +2007_008670 +2007_008708 +2007_008722 +2007_008747 +2007_008802 +2007_008815 +2007_008897 +2007_008944 +2007_008964 +2007_008973 +2007_008980 +2007_009015 +2007_009068 +2007_009084 +2007_009088 +2007_009096 +2007_009221 +2007_009245 +2007_009251 +2007_009252 +2007_009258 +2007_009320 +2007_009323 +2007_009331 +2007_009346 +2007_009392 +2007_009413 +2007_009419 +2007_009446 +2007_009458 +2007_009521 +2007_009562 +2007_009592 +2007_009654 +2007_009655 +2007_009684 +2007_009687 +2007_009691 +2007_009706 +2007_009750 +2007_009756 +2007_009764 +2007_009794 +2007_009817 +2007_009841 +2007_009897 +2007_009911 +2007_009923 +2007_009938 +2008_000009 +2008_000016 +2008_000073 +2008_000075 +2008_000080 +2008_000107 +2008_000120 +2008_000123 +2008_000149 +2008_000182 +2008_000213 +2008_000215 +2008_000223 +2008_000233 +2008_000234 +2008_000239 +2008_000254 +2008_000270 +2008_000271 +2008_000345 +2008_000359 +2008_000391 +2008_000401 +2008_000464 +2008_000469 +2008_000474 +2008_000501 +2008_000510 +2008_000533 +2008_000573 +2008_000589 +2008_000602 +2008_000630 +2008_000657 +2008_000661 +2008_000662 +2008_000666 +2008_000673 +2008_000700 +2008_000725 +2008_000731 +2008_000763 +2008_000765 +2008_000782 +2008_000795 +2008_000811 +2008_000848 +2008_000853 +2008_000863 +2008_000911 +2008_000919 +2008_000943 +2008_000992 +2008_001013 +2008_001028 +2008_001040 +2008_001070 +2008_001074 +2008_001076 +2008_001078 +2008_001135 +2008_001150 +2008_001170 +2008_001231 +2008_001249 +2008_001260 +2008_001283 +2008_001308 +2008_001379 +2008_001404 +2008_001433 +2008_001439 +2008_001478 +2008_001491 +2008_001504 +2008_001513 +2008_001514 +2008_001531 +2008_001546 +2008_001547 +2008_001580 +2008_001629 +2008_001640 +2008_001682 +2008_001688 +2008_001715 +2008_001821 +2008_001874 +2008_001885 +2008_001895 +2008_001966 +2008_001971 +2008_001992 +2008_002043 +2008_002152 +2008_002205 +2008_002212 +2008_002239 +2008_002240 +2008_002241 +2008_002269 +2008_002273 +2008_002358 +2008_002379 +2008_002383 +2008_002429 +2008_002464 +2008_002467 +2008_002492 +2008_002495 +2008_002504 +2008_002521 +2008_002536 +2008_002588 +2008_002623 +2008_002680 +2008_002681 +2008_002775 +2008_002778 +2008_002835 +2008_002859 +2008_002864 +2008_002900 +2008_002904 +2008_002929 +2008_002936 +2008_002942 +2008_002958 +2008_003003 +2008_003026 +2008_003034 +2008_003076 +2008_003105 +2008_003108 +2008_003110 +2008_003135 +2008_003141 +2008_003155 +2008_003210 +2008_003238 +2008_003270 +2008_003330 +2008_003333 +2008_003369 +2008_003379 +2008_003451 +2008_003461 +2008_003477 +2008_003492 +2008_003499 +2008_003511 +2008_003546 +2008_003576 +2008_003577 +2008_003676 +2008_003709 +2008_003733 +2008_003777 +2008_003782 +2008_003821 +2008_003846 +2008_003856 +2008_003858 +2008_003874 +2008_003876 +2008_003885 +2008_003886 +2008_003926 +2008_003976 +2008_004069 +2008_004101 +2008_004140 +2008_004172 +2008_004175 +2008_004212 +2008_004279 +2008_004339 +2008_004345 +2008_004363 +2008_004367 +2008_004396 +2008_004399 +2008_004453 +2008_004477 +2008_004552 +2008_004562 +2008_004575 +2008_004610 +2008_004612 +2008_004621 +2008_004624 +2008_004654 +2008_004659 +2008_004687 +2008_004701 +2008_004704 +2008_004705 +2008_004754 +2008_004758 +2008_004854 +2008_004910 +2008_004995 +2008_005049 +2008_005089 +2008_005097 +2008_005105 +2008_005145 +2008_005197 +2008_005217 +2008_005242 +2008_005245 +2008_005254 +2008_005262 +2008_005338 +2008_005398 +2008_005399 +2008_005422 +2008_005439 +2008_005445 +2008_005525 +2008_005544 +2008_005628 +2008_005633 +2008_005637 +2008_005642 +2008_005676 +2008_005680 +2008_005691 +2008_005727 +2008_005738 +2008_005812 +2008_005904 +2008_005915 +2008_006008 +2008_006036 +2008_006055 +2008_006063 +2008_006108 +2008_006130 +2008_006143 +2008_006159 +2008_006216 +2008_006219 +2008_006229 +2008_006254 +2008_006275 +2008_006325 +2008_006327 +2008_006341 +2008_006408 +2008_006480 +2008_006523 +2008_006526 +2008_006528 +2008_006553 +2008_006554 +2008_006703 +2008_006722 +2008_006752 +2008_006784 +2008_006835 +2008_006874 +2008_006981 +2008_006986 +2008_007025 +2008_007031 +2008_007048 +2008_007120 +2008_007123 +2008_007143 +2008_007194 +2008_007219 +2008_007273 +2008_007350 +2008_007378 +2008_007392 +2008_007402 +2008_007497 +2008_007498 +2008_007507 +2008_007513 +2008_007527 +2008_007548 +2008_007596 +2008_007677 +2008_007737 +2008_007797 +2008_007804 +2008_007811 +2008_007814 +2008_007828 +2008_007836 +2008_007945 +2008_007994 +2008_008051 +2008_008103 +2008_008127 +2008_008221 +2008_008252 +2008_008268 +2008_008296 +2008_008301 +2008_008335 +2008_008362 +2008_008392 +2008_008393 +2008_008421 +2008_008434 +2008_008469 +2008_008629 +2008_008682 +2008_008711 +2008_008746 +2009_000012 +2009_000013 +2009_000022 +2009_000032 +2009_000037 +2009_000039 +2009_000074 +2009_000080 +2009_000087 +2009_000096 +2009_000121 +2009_000136 +2009_000149 +2009_000156 +2009_000201 +2009_000205 +2009_000219 +2009_000242 +2009_000309 +2009_000318 +2009_000335 +2009_000351 +2009_000354 +2009_000387 +2009_000391 +2009_000412 +2009_000418 +2009_000421 +2009_000426 +2009_000440 +2009_000446 +2009_000455 +2009_000457 +2009_000469 +2009_000487 +2009_000488 +2009_000523 +2009_000573 +2009_000619 +2009_000628 +2009_000641 +2009_000664 +2009_000675 +2009_000704 +2009_000705 +2009_000712 +2009_000716 +2009_000723 +2009_000727 +2009_000730 +2009_000731 +2009_000732 +2009_000771 +2009_000825 +2009_000828 +2009_000839 +2009_000840 +2009_000845 +2009_000879 +2009_000892 +2009_000919 +2009_000924 +2009_000931 +2009_000935 +2009_000964 +2009_000989 +2009_000991 +2009_000998 +2009_001008 +2009_001082 +2009_001108 +2009_001160 +2009_001215 +2009_001240 +2009_001255 +2009_001278 +2009_001299 +2009_001300 +2009_001314 +2009_001332 +2009_001333 +2009_001363 +2009_001391 +2009_001411 +2009_001433 +2009_001505 +2009_001535 +2009_001536 +2009_001565 +2009_001607 +2009_001644 +2009_001663 +2009_001683 +2009_001684 +2009_001687 +2009_001718 +2009_001731 +2009_001765 +2009_001768 +2009_001775 +2009_001804 +2009_001816 +2009_001818 +2009_001850 +2009_001851 +2009_001854 +2009_001941 +2009_001991 +2009_002012 +2009_002035 +2009_002042 +2009_002082 +2009_002094 +2009_002097 +2009_002122 +2009_002150 +2009_002155 +2009_002164 +2009_002165 +2009_002171 +2009_002185 +2009_002202 +2009_002221 +2009_002238 +2009_002239 +2009_002265 +2009_002268 +2009_002291 +2009_002295 +2009_002317 +2009_002320 +2009_002346 +2009_002366 +2009_002372 +2009_002382 +2009_002390 +2009_002415 +2009_002445 +2009_002487 +2009_002521 +2009_002527 +2009_002535 +2009_002539 +2009_002549 +2009_002562 +2009_002568 +2009_002571 +2009_002573 +2009_002584 +2009_002591 +2009_002594 +2009_002604 +2009_002618 +2009_002635 +2009_002638 +2009_002649 +2009_002651 +2009_002727 +2009_002732 +2009_002749 +2009_002753 +2009_002771 +2009_002808 +2009_002856 +2009_002887 +2009_002888 +2009_002928 +2009_002936 +2009_002975 +2009_002982 +2009_002990 +2009_003003 +2009_003005 +2009_003043 +2009_003059 +2009_003063 +2009_003065 +2009_003071 +2009_003080 +2009_003105 +2009_003123 +2009_003193 +2009_003196 +2009_003217 +2009_003224 +2009_003241 +2009_003269 +2009_003273 +2009_003299 +2009_003304 +2009_003311 +2009_003323 +2009_003343 +2009_003378 +2009_003387 +2009_003406 +2009_003433 +2009_003450 +2009_003466 +2009_003481 +2009_003494 +2009_003498 +2009_003504 +2009_003507 +2009_003517 +2009_003523 +2009_003542 +2009_003549 +2009_003551 +2009_003564 +2009_003569 +2009_003576 +2009_003589 +2009_003607 +2009_003640 +2009_003666 +2009_003696 +2009_003703 +2009_003707 +2009_003756 +2009_003771 +2009_003773 +2009_003804 +2009_003806 +2009_003810 +2009_003849 +2009_003857 +2009_003858 +2009_003895 +2009_003903 +2009_003904 +2009_003928 +2009_003938 +2009_003971 +2009_003991 +2009_004021 +2009_004033 +2009_004043 +2009_004070 +2009_004072 +2009_004084 +2009_004099 +2009_004125 +2009_004140 +2009_004217 +2009_004221 +2009_004247 +2009_004248 +2009_004255 +2009_004298 +2009_004324 +2009_004455 +2009_004494 +2009_004497 +2009_004504 +2009_004507 +2009_004509 +2009_004540 +2009_004568 +2009_004579 +2009_004581 +2009_004590 +2009_004592 +2009_004594 +2009_004635 +2009_004653 +2009_004687 +2009_004721 +2009_004730 +2009_004732 +2009_004738 +2009_004748 +2009_004789 +2009_004799 +2009_004801 +2009_004848 +2009_004859 +2009_004867 +2009_004882 +2009_004886 +2009_004895 +2009_004942 +2009_004969 +2009_004987 +2009_004993 +2009_004994 +2009_005038 +2009_005078 +2009_005087 +2009_005089 +2009_005137 +2009_005148 +2009_005156 +2009_005158 +2009_005189 +2009_005190 +2009_005217 +2009_005219 +2009_005220 +2009_005231 +2009_005260 +2009_005262 +2009_005302 +2010_000003 +2010_000038 +2010_000065 +2010_000083 +2010_000084 +2010_000087 +2010_000110 +2010_000159 +2010_000160 +2010_000163 +2010_000174 +2010_000216 +2010_000238 +2010_000241 +2010_000256 +2010_000272 +2010_000284 +2010_000309 +2010_000318 +2010_000330 +2010_000335 +2010_000342 +2010_000372 +2010_000422 +2010_000426 +2010_000427 +2010_000502 +2010_000530 +2010_000552 +2010_000559 +2010_000572 +2010_000573 +2010_000622 +2010_000628 +2010_000639 +2010_000666 +2010_000679 +2010_000682 +2010_000683 +2010_000724 +2010_000738 +2010_000764 +2010_000788 +2010_000814 +2010_000836 +2010_000874 +2010_000904 +2010_000906 +2010_000907 +2010_000918 +2010_000929 +2010_000941 +2010_000952 +2010_000961 +2010_001000 +2010_001010 +2010_001011 +2010_001016 +2010_001017 +2010_001024 +2010_001036 +2010_001061 +2010_001069 +2010_001070 +2010_001079 +2010_001104 +2010_001124 +2010_001149 +2010_001151 +2010_001174 +2010_001206 +2010_001246 +2010_001251 +2010_001256 +2010_001264 +2010_001292 +2010_001313 +2010_001327 +2010_001331 +2010_001351 +2010_001367 +2010_001376 +2010_001403 +2010_001448 +2010_001451 +2010_001522 +2010_001534 +2010_001553 +2010_001557 +2010_001563 +2010_001577 +2010_001579 +2010_001646 +2010_001656 +2010_001692 +2010_001699 +2010_001734 +2010_001752 +2010_001767 +2010_001768 +2010_001773 +2010_001820 +2010_001830 +2010_001851 +2010_001908 +2010_001913 +2010_001951 +2010_001956 +2010_001962 +2010_001966 +2010_001995 +2010_002017 +2010_002025 +2010_002030 +2010_002106 +2010_002137 +2010_002142 +2010_002146 +2010_002147 +2010_002150 +2010_002161 +2010_002200 +2010_002228 +2010_002232 +2010_002251 +2010_002271 +2010_002305 +2010_002310 +2010_002336 +2010_002348 +2010_002361 +2010_002390 +2010_002396 +2010_002422 +2010_002450 +2010_002480 +2010_002512 +2010_002531 +2010_002536 +2010_002538 +2010_002546 +2010_002623 +2010_002682 +2010_002691 +2010_002693 +2010_002701 +2010_002763 +2010_002792 +2010_002868 +2010_002900 +2010_002902 +2010_002921 +2010_002929 +2010_002939 +2010_002988 +2010_003014 +2010_003060 +2010_003123 +2010_003127 +2010_003132 +2010_003168 +2010_003183 +2010_003187 +2010_003207 +2010_003231 +2010_003239 +2010_003275 +2010_003276 +2010_003293 +2010_003302 +2010_003325 +2010_003362 +2010_003365 +2010_003381 +2010_003402 +2010_003409 +2010_003418 +2010_003446 +2010_003453 +2010_003468 +2010_003473 +2010_003495 +2010_003506 +2010_003514 +2010_003531 +2010_003532 +2010_003541 +2010_003547 +2010_003597 +2010_003675 +2010_003708 +2010_003716 +2010_003746 +2010_003758 +2010_003764 +2010_003768 +2010_003771 +2010_003772 +2010_003781 +2010_003813 +2010_003820 +2010_003854 +2010_003912 +2010_003915 +2010_003947 +2010_003956 +2010_003971 +2010_004041 +2010_004042 +2010_004056 +2010_004063 +2010_004104 +2010_004120 +2010_004149 +2010_004165 +2010_004208 +2010_004219 +2010_004226 +2010_004314 +2010_004320 +2010_004322 +2010_004337 +2010_004348 +2010_004355 +2010_004369 +2010_004382 +2010_004419 +2010_004432 +2010_004472 +2010_004479 +2010_004519 +2010_004520 +2010_004529 +2010_004543 +2010_004550 +2010_004551 +2010_004556 +2010_004559 +2010_004628 +2010_004635 +2010_004662 +2010_004697 +2010_004757 +2010_004763 +2010_004772 +2010_004783 +2010_004789 +2010_004795 +2010_004815 +2010_004825 +2010_004828 +2010_004856 +2010_004857 +2010_004861 +2010_004941 +2010_004946 +2010_004951 +2010_004980 +2010_004994 +2010_005013 +2010_005021 +2010_005046 +2010_005063 +2010_005108 +2010_005118 +2010_005159 +2010_005160 +2010_005166 +2010_005174 +2010_005180 +2010_005187 +2010_005206 +2010_005245 +2010_005252 +2010_005284 +2010_005305 +2010_005344 +2010_005353 +2010_005366 +2010_005401 +2010_005421 +2010_005428 +2010_005432 +2010_005433 +2010_005496 +2010_005501 +2010_005508 +2010_005531 +2010_005534 +2010_005575 +2010_005582 +2010_005606 +2010_005626 +2010_005644 +2010_005664 +2010_005705 +2010_005706 +2010_005709 +2010_005718 +2010_005719 +2010_005727 +2010_005762 +2010_005788 +2010_005860 +2010_005871 +2010_005877 +2010_005888 +2010_005899 +2010_005922 +2010_005991 +2010_005992 +2010_006026 +2010_006034 +2010_006054 +2010_006070 +2011_000045 +2011_000051 +2011_000054 +2011_000066 +2011_000070 +2011_000112 +2011_000173 +2011_000178 +2011_000185 +2011_000226 +2011_000234 +2011_000238 +2011_000239 +2011_000248 +2011_000283 +2011_000291 +2011_000310 +2011_000312 +2011_000338 +2011_000396 +2011_000412 +2011_000419 +2011_000435 +2011_000436 +2011_000438 +2011_000455 +2011_000456 +2011_000479 +2011_000481 +2011_000482 +2011_000503 +2011_000512 +2011_000521 +2011_000526 +2011_000536 +2011_000548 +2011_000566 +2011_000585 +2011_000598 +2011_000607 +2011_000618 +2011_000638 +2011_000658 +2011_000661 +2011_000669 +2011_000747 +2011_000780 +2011_000789 +2011_000807 +2011_000809 +2011_000813 +2011_000830 +2011_000843 +2011_000874 +2011_000888 +2011_000900 +2011_000912 +2011_000953 +2011_000969 +2011_001005 +2011_001014 +2011_001020 +2011_001047 +2011_001060 +2011_001064 +2011_001069 +2011_001071 +2011_001082 +2011_001110 +2011_001114 +2011_001159 +2011_001161 +2011_001190 +2011_001232 +2011_001263 +2011_001276 +2011_001281 +2011_001287 +2011_001292 +2011_001313 +2011_001341 +2011_001346 +2011_001350 +2011_001407 +2011_001416 +2011_001421 +2011_001434 +2011_001447 +2011_001489 +2011_001529 +2011_001530 +2011_001534 +2011_001546 +2011_001567 +2011_001589 +2011_001597 +2011_001601 +2011_001607 +2011_001613 +2011_001614 +2011_001619 +2011_001624 +2011_001642 +2011_001665 +2011_001669 +2011_001674 +2011_001708 +2011_001713 +2011_001714 +2011_001722 +2011_001726 +2011_001745 +2011_001748 +2011_001775 +2011_001782 +2011_001793 +2011_001794 +2011_001812 +2011_001862 +2011_001863 +2011_001868 +2011_001880 +2011_001910 +2011_001984 +2011_001988 +2011_002002 +2011_002040 +2011_002041 +2011_002064 +2011_002075 +2011_002098 +2011_002110 +2011_002121 +2011_002124 +2011_002150 +2011_002156 +2011_002178 +2011_002200 +2011_002223 +2011_002244 +2011_002247 +2011_002279 +2011_002295 +2011_002298 +2011_002308 +2011_002317 +2011_002322 +2011_002327 +2011_002343 +2011_002358 +2011_002371 +2011_002379 +2011_002391 +2011_002498 +2011_002509 +2011_002515 +2011_002532 +2011_002535 +2011_002548 +2011_002575 +2011_002578 +2011_002589 +2011_002592 +2011_002623 +2011_002641 +2011_002644 +2011_002662 +2011_002675 +2011_002685 +2011_002713 +2011_002730 +2011_002754 +2011_002812 +2011_002863 +2011_002879 +2011_002885 +2011_002929 +2011_002951 +2011_002975 +2011_002993 +2011_002997 +2011_003003 +2011_003011 +2011_003019 +2011_003030 +2011_003055 +2011_003085 +2011_003103 +2011_003114 +2011_003145 +2011_003146 +2011_003182 +2011_003197 +2011_003205 +2011_003240 +2011_003256 +2011_003271 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a829eee38fb37d98bbc59f8a148c651a8500bc9e Binary files /dev/null and b/requirements.txt differ diff --git a/res/figure_1/fig_1_a.png b/res/figure_1/fig_1_a.png new file mode 100644 index 0000000000000000000000000000000000000000..527f247062933bfc5056f6e3d6e661ecc7a2c6b0 Binary files /dev/null and b/res/figure_1/fig_1_a.png differ diff --git a/res/figure_1/fig_1_b.png b/res/figure_1/fig_1_b.png new file mode 100644 index 0000000000000000000000000000000000000000..59edefa619539aa3f3ca6baf47f91165f2acbdf4 Binary files /dev/null and b/res/figure_1/fig_1_b.png differ diff --git a/res/figure_1/fig_1_c.png b/res/figure_1/fig_1_c.png new file mode 100644 index 0000000000000000000000000000000000000000..9fadcd41298f0b8c93eb87b95346ac2c09f33d56 Binary files /dev/null and b/res/figure_1/fig_1_c.png differ diff --git a/res/figure_2.PNG b/res/figure_2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..46462bb8aea7ac2609d8d1c6c98f50e73b6132ea Binary files /dev/null and b/res/figure_2.PNG differ diff --git a/res/figure_2/original.png b/res/figure_2/original.png new file mode 100644 index 0000000000000000000000000000000000000000..ef901f6e9a090cdc8bd473bbc48718a087193ce3 Binary files /dev/null and b/res/figure_2/original.png differ diff --git a/res/figure_3/figure_3_a.png b/res/figure_3/figure_3_a.png new file mode 100644 index 0000000000000000000000000000000000000000..b264319d716770a00f2e73f526c6de0cc20938c0 Binary files /dev/null and b/res/figure_3/figure_3_a.png differ diff --git a/res/figure_3/figure_3_b.png b/res/figure_3/figure_3_b.png new file mode 100644 index 0000000000000000000000000000000000000000..9bfd25ee6eca2a45c2a9a6555f465beb599d7128 Binary files /dev/null and b/res/figure_3/figure_3_b.png differ diff --git a/res/figure_3/figure_3_c.png b/res/figure_3/figure_3_c.png new file mode 100644 index 0000000000000000000000000000000000000000..1f869ee48d6f97b9b29a214dc49270e6bd35eed7 Binary files /dev/null and b/res/figure_3/figure_3_c.png differ diff --git a/res/figure_3/figure_3_d.png b/res/figure_3/figure_3_d.png new file mode 100644 index 0000000000000000000000000000000000000000..946a61842791c7d56650f96ab4cdc75403aee14c Binary files /dev/null and b/res/figure_3/figure_3_d.png differ diff --git a/res/figure_4/2007_000123.png b/res/figure_4/2007_000123.png new file mode 100644 index 0000000000000000000000000000000000000000..ffdbc7221e94e1d97a1417831e92459086c22111 Binary files /dev/null and b/res/figure_4/2007_000123.png differ diff --git a/res/figure_4/2007_000123_gt.png b/res/figure_4/2007_000123_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..e85b260b078788776c321577ab611af3f1ab3968 Binary files /dev/null and b/res/figure_4/2007_000123_gt.png differ diff --git a/res/figure_4/2007_000123_pred.png b/res/figure_4/2007_000123_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..047c5cf87cec03d41b52b6b1be054524174f016d Binary files /dev/null and b/res/figure_4/2007_000123_pred.png differ diff --git a/res/figure_4/2007_000175.png b/res/figure_4/2007_000175.png new file mode 100644 index 0000000000000000000000000000000000000000..32c9aba7d71670fd4f4d032c2ad609b4d369c8e9 Binary files /dev/null and b/res/figure_4/2007_000175.png differ diff --git a/res/figure_4/2007_000175_gt.png b/res/figure_4/2007_000175_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfdd8da949b934bceeefd3a0d0769f85ba68912 Binary files /dev/null and b/res/figure_4/2007_000175_gt.png differ diff --git a/res/figure_4/2007_000175_pred.png b/res/figure_4/2007_000175_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b35c91db2c8c641e870374c005cb273da4b1fa Binary files /dev/null and b/res/figure_4/2007_000175_pred.png differ diff --git a/res/figure_4/2007_000762.png b/res/figure_4/2007_000762.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9acf4e9b029b6104ea850fa09e2ab4b69b93c0 Binary files /dev/null and b/res/figure_4/2007_000762.png differ diff --git a/res/figure_4/2007_000762_gt.png b/res/figure_4/2007_000762_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..9678b9e8b3a371295626adc10142d620f6b2f5e0 Binary files /dev/null and b/res/figure_4/2007_000762_gt.png differ diff --git a/res/figure_4/2007_000762_pred.png b/res/figure_4/2007_000762_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..db595ba8fb856a569f203cf8e61ce6541bf92733 Binary files /dev/null and b/res/figure_4/2007_000762_pred.png differ diff --git a/res/figure_4/2007_000799.png b/res/figure_4/2007_000799.png new file mode 100644 index 0000000000000000000000000000000000000000..cce2b44a667533e99b83cf188d61b5872e2c2902 Binary files /dev/null and b/res/figure_4/2007_000799.png differ diff --git a/res/figure_4/2007_000799_gt.png b/res/figure_4/2007_000799_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..718b31987870d5f68b54c8d9e536b194203e5fc5 Binary files /dev/null and b/res/figure_4/2007_000799_gt.png differ diff --git a/res/figure_4/2007_000799_pred.png b/res/figure_4/2007_000799_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4225a443addc7ea79ea394e33186e0224d5a57 Binary files /dev/null and b/res/figure_4/2007_000799_pred.png differ diff --git a/res/figure_4/2007_000999.png b/res/figure_4/2007_000999.png new file mode 100644 index 0000000000000000000000000000000000000000..6977261cd3b4d2bdf2327ae92de8e1f02d489c48 Binary files /dev/null and b/res/figure_4/2007_000999.png differ diff --git a/res/figure_4/2007_000999_gt.png b/res/figure_4/2007_000999_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8f8da5bb8de454e3de9cb9a5b43c0bd84694c7 Binary files /dev/null and b/res/figure_4/2007_000999_gt.png differ diff --git a/res/figure_4/2007_000999_pred.png b/res/figure_4/2007_000999_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb75f7793ae91be845fcc6c8b1298b83f89f5d9 Binary files /dev/null and b/res/figure_4/2007_000999_pred.png differ diff --git a/res/figure_4/2007_001239.png b/res/figure_4/2007_001239.png new file mode 100644 index 0000000000000000000000000000000000000000..fd18a33871f7136d558f9aa5cde57ebeedd80893 Binary files /dev/null and b/res/figure_4/2007_001239.png differ diff --git a/res/figure_4/2007_001239_gt.png b/res/figure_4/2007_001239_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..5d876224cddc6f762ad9b2bba634150fb14135f6 Binary files /dev/null and b/res/figure_4/2007_001239_gt.png differ diff --git a/res/figure_4/2007_001239_pred.png b/res/figure_4/2007_001239_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..e7648804d117e5c57ef3e25e9f36f91fe4e14485 Binary files /dev/null and b/res/figure_4/2007_001239_pred.png differ diff --git a/res/figure_4/2007_001284.png b/res/figure_4/2007_001284.png new file mode 100644 index 0000000000000000000000000000000000000000..ea93b574e32f0b2f4b2bc50fd784f4ea0ff0b423 Binary files /dev/null and b/res/figure_4/2007_001284.png differ diff --git a/res/figure_4/2007_001284_gt.png b/res/figure_4/2007_001284_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..f93d43e2f3031517843ec5aeee7d1c90d7a53963 Binary files /dev/null and b/res/figure_4/2007_001284_gt.png differ diff --git a/res/figure_4/2007_001284_pred.png b/res/figure_4/2007_001284_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..fb681b0b8280242bbd9105b97ba6a028ef0d5fc6 Binary files /dev/null and b/res/figure_4/2007_001284_pred.png differ diff --git a/res/figure_4/2007_001288.png b/res/figure_4/2007_001288.png new file mode 100644 index 0000000000000000000000000000000000000000..f35d9b7615546110aa00902f43c55960398b5c5b Binary files /dev/null and b/res/figure_4/2007_001288.png differ diff --git a/res/figure_4/2007_001288_gt.png b/res/figure_4/2007_001288_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..6bba026ae3551fba4d0949b4d56492a36bf4db58 Binary files /dev/null and b/res/figure_4/2007_001288_gt.png differ diff --git a/res/figure_4/2007_001288_pred.png b/res/figure_4/2007_001288_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc227e2b3ef150313905ef25254bb047f2b2b67 Binary files /dev/null and b/res/figure_4/2007_001288_pred.png differ diff --git a/res/figure_4/2007_001526.png b/res/figure_4/2007_001526.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa7b7145a2eea7cfa638f1e0c5ffe54e4360d09 Binary files /dev/null and b/res/figure_4/2007_001526.png differ diff --git a/res/figure_4/2007_001526_gt.png b/res/figure_4/2007_001526_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..21bffe868913d314580d9638c6a9dafd5c630d85 Binary files /dev/null and b/res/figure_4/2007_001526_gt.png differ diff --git a/res/figure_4/2007_001526_pred.png b/res/figure_4/2007_001526_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..65c323bc97e798457bcb3ed8f5ceb0e22028d9bb Binary files /dev/null and b/res/figure_4/2007_001526_pred.png differ diff --git a/res/figure_4/2007_001763.png b/res/figure_4/2007_001763.png new file mode 100644 index 0000000000000000000000000000000000000000..daac067a4097f62ff47d00d304110b5bac452991 Binary files /dev/null and b/res/figure_4/2007_001763.png differ diff --git a/res/figure_4/2007_001763_gt.png b/res/figure_4/2007_001763_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..07a96286fb5b0ccdc42d704abc94b56e9f37d768 Binary files /dev/null and b/res/figure_4/2007_001763_gt.png differ diff --git a/res/figure_4/2007_001763_pred.png b/res/figure_4/2007_001763_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..84fcba5c72351cfc45f8c5b9e0200710a4aa80c6 Binary files /dev/null and b/res/figure_4/2007_001763_pred.png differ diff --git a/res/figure_4/2007_002284.png b/res/figure_4/2007_002284.png new file mode 100644 index 0000000000000000000000000000000000000000..29b218e64dea54efc1e97e6856373bc411eff2e4 Binary files /dev/null and b/res/figure_4/2007_002284.png differ diff --git a/res/figure_4/2007_002284_gt.png b/res/figure_4/2007_002284_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..3622122bb61fbaa05656d509f6cac05f13f7b6e5 Binary files /dev/null and b/res/figure_4/2007_002284_gt.png differ diff --git a/res/figure_4/2007_002284_pred.png b/res/figure_4/2007_002284_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6ac4220d5c6ee4aa75a6d1428a3e3a5e7c195e Binary files /dev/null and b/res/figure_4/2007_002284_pred.png differ diff --git a/res/figure_4/2007_002618.png b/res/figure_4/2007_002618.png new file mode 100644 index 0000000000000000000000000000000000000000..febf29061cc64a2a761a071b360f05803d8f0bea Binary files /dev/null and b/res/figure_4/2007_002618.png differ diff --git a/res/figure_4/2007_002618_gt.png b/res/figure_4/2007_002618_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..5ccc4fa92b529ed903b893fbcfbb7a61b36d628e Binary files /dev/null and b/res/figure_4/2007_002618_gt.png differ diff --git a/res/figure_4/2007_002618_pred.png b/res/figure_4/2007_002618_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..595e9d3803c178ee6be51a7bd7a4a259dcf3059e Binary files /dev/null and b/res/figure_4/2007_002618_pred.png differ diff --git a/res/figure_4/2007_002624.png b/res/figure_4/2007_002624.png new file mode 100644 index 0000000000000000000000000000000000000000..cb83ff663b72b758e2647d7c54658bf1346da389 Binary files /dev/null and b/res/figure_4/2007_002624.png differ diff --git a/res/figure_4/2007_002624_gt.png b/res/figure_4/2007_002624_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..e29791da2f4fe23293aeef17a91bf63c5283b4b7 Binary files /dev/null and b/res/figure_4/2007_002624_gt.png differ diff --git a/res/figure_4/2007_002624_pred.png b/res/figure_4/2007_002624_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..15ffba78da1f5ca8e7fe6c4102bbd6c40d7872c8 Binary files /dev/null and b/res/figure_4/2007_002624_pred.png differ diff --git a/res/figure_4/2007_002728.png b/res/figure_4/2007_002728.png new file mode 100644 index 0000000000000000000000000000000000000000..1b80ec4345d245ee404b20a78bf22f8b93226ad9 Binary files /dev/null and b/res/figure_4/2007_002728.png differ diff --git a/res/figure_4/2007_002728_gt.png b/res/figure_4/2007_002728_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..eadb92d6f5f46d2cc479844f97c56b6e06003cf3 Binary files /dev/null and b/res/figure_4/2007_002728_gt.png differ diff --git a/res/figure_4/2007_002728_pred.png b/res/figure_4/2007_002728_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..bb26938a90d8185f8653da77d84b4d280f23f1ce Binary files /dev/null and b/res/figure_4/2007_002728_pred.png differ diff --git a/res/figure_4/2007_003742.png b/res/figure_4/2007_003742.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3662d89531d529f706ffe47446d0241d865716 Binary files /dev/null and b/res/figure_4/2007_003742.png differ diff --git a/res/figure_4/2007_003742_gt.png b/res/figure_4/2007_003742_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..f98b3134aae5c397da03901be0fd6ff3974e5fab Binary files /dev/null and b/res/figure_4/2007_003742_gt.png differ diff --git a/res/figure_4/2007_003742_pred.png b/res/figure_4/2007_003742_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb81a7fc99e8cb68417ea5303efbd2780bbfc6d Binary files /dev/null and b/res/figure_4/2007_003742_pred.png differ diff --git a/res/figure_4/2007_004902.png b/res/figure_4/2007_004902.png new file mode 100644 index 0000000000000000000000000000000000000000..b8cf3a6367073f23dd841cd1460e022210352475 Binary files /dev/null and b/res/figure_4/2007_004902.png differ diff --git a/res/figure_4/2007_004902_gt.png b/res/figure_4/2007_004902_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..d805392f8759bc30eac9504443bcd20df2f84231 Binary files /dev/null and b/res/figure_4/2007_004902_gt.png differ diff --git a/res/figure_4/2007_004902_pred.png b/res/figure_4/2007_004902_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..acfc60087001641c2261bfdff2c10f8a08b0ea22 Binary files /dev/null and b/res/figure_4/2007_004902_pred.png differ diff --git a/res/figure_4/2007_005460.png b/res/figure_4/2007_005460.png new file mode 100644 index 0000000000000000000000000000000000000000..e0cd149083f13df1057ebd197f4c80e7c64f214f Binary files /dev/null and b/res/figure_4/2007_005460.png differ diff --git a/res/figure_4/2007_005460_gt.png b/res/figure_4/2007_005460_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..d7091ee8c030b7a69aec3a443fdac4556b6700bb Binary files /dev/null and b/res/figure_4/2007_005460_gt.png differ diff --git a/res/figure_4/2007_005460_pred.png b/res/figure_4/2007_005460_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..6d6aec05aa154f00961387d4c045b264782170bb Binary files /dev/null and b/res/figure_4/2007_005460_pred.png differ diff --git a/res/figure_4/2007_005845.png b/res/figure_4/2007_005845.png new file mode 100644 index 0000000000000000000000000000000000000000..c652b5d32979f46bc4bccf05e945e037bb119500 Binary files /dev/null and b/res/figure_4/2007_005845.png differ diff --git a/res/figure_4/2007_005845_gt.png b/res/figure_4/2007_005845_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..486ec39abb5cfbb61216e810e3073a0d4e05fc10 Binary files /dev/null and b/res/figure_4/2007_005845_gt.png differ diff --git a/res/figure_4/2007_005845_pred.png b/res/figure_4/2007_005845_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..828f933f092a0c146ddc04e30f03a7ef64c5e02d Binary files /dev/null and b/res/figure_4/2007_005845_pred.png differ diff --git a/res/figure_4/2007_006680.png b/res/figure_4/2007_006680.png new file mode 100644 index 0000000000000000000000000000000000000000..94909e219b80aca3171818135f292e76b56f9a37 Binary files /dev/null and b/res/figure_4/2007_006680.png differ diff --git a/res/figure_4/2007_006680_gt.png b/res/figure_4/2007_006680_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..b14eb5516719d062a5d711f0220678bc3b46e7f2 Binary files /dev/null and b/res/figure_4/2007_006680_gt.png differ diff --git a/res/figure_4/2007_006680_pred.png b/res/figure_4/2007_006680_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb5d60682c51bdce3b26ea67c5addfaeabfd9e1 Binary files /dev/null and b/res/figure_4/2007_006680_pred.png differ diff --git a/res/figure_4/2007_006946.png b/res/figure_4/2007_006946.png new file mode 100644 index 0000000000000000000000000000000000000000..9c23c58a31ef8637021d298fd821aaee817c23a9 Binary files /dev/null and b/res/figure_4/2007_006946.png differ diff --git a/res/figure_4/2007_006946_gt.png b/res/figure_4/2007_006946_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc73bbbd8ef3a9c0c13a085eace5ca411006acf Binary files /dev/null and b/res/figure_4/2007_006946_gt.png differ diff --git a/res/figure_4/2007_006946_pred.png b/res/figure_4/2007_006946_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..db280edfa4c6c1eac2034e404c415ea2f4797dee Binary files /dev/null and b/res/figure_4/2007_006946_pred.png differ diff --git a/res/figure_4/2007_007109.png b/res/figure_4/2007_007109.png new file mode 100644 index 0000000000000000000000000000000000000000..68dbb7268193af7ef98bb7ca8878602feb67647f Binary files /dev/null and b/res/figure_4/2007_007109.png differ diff --git a/res/figure_4/2007_007109_gt.png b/res/figure_4/2007_007109_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..67677030bb246701d59a9bf7fccac7e09f7e8868 Binary files /dev/null and b/res/figure_4/2007_007109_gt.png differ diff --git a/res/figure_4/2007_007109_pred.png b/res/figure_4/2007_007109_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..0d950988b2814bc02ff564c7c7bfa0f670ba901b Binary files /dev/null and b/res/figure_4/2007_007109_pred.png differ diff --git a/res/figure_4/2007_007524.png b/res/figure_4/2007_007524.png new file mode 100644 index 0000000000000000000000000000000000000000..6fdf9581b14aed4ff530673ff8a4e35f7b5c983e Binary files /dev/null and b/res/figure_4/2007_007524.png differ diff --git a/res/figure_4/2007_007524_gt.png b/res/figure_4/2007_007524_gt.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cf7dc26cfb52b6d297464b66bc565d9965aaee Binary files /dev/null and b/res/figure_4/2007_007524_gt.png differ diff --git a/res/figure_4/2007_007524_pred.png b/res/figure_4/2007_007524_pred.png new file mode 100644 index 0000000000000000000000000000000000000000..c0537825b810052889d20080ad2b450f899296c6 Binary files /dev/null and b/res/figure_4/2007_007524_pred.png differ diff --git a/res/presentation/baseline/1.png b/res/presentation/baseline/1.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4588ba47dbc51d99a827d6ce53dd2664f08874 Binary files /dev/null and b/res/presentation/baseline/1.png differ diff --git a/res/presentation/baseline/10.png b/res/presentation/baseline/10.png new file mode 100644 index 0000000000000000000000000000000000000000..32b1d784690c16232a541cfafd471e1bb012db3d Binary files /dev/null and b/res/presentation/baseline/10.png differ diff --git a/res/presentation/baseline/11.png b/res/presentation/baseline/11.png new file mode 100644 index 0000000000000000000000000000000000000000..447853f444232bd39e20d472edf895e392a1a694 Binary files /dev/null and b/res/presentation/baseline/11.png differ diff --git a/res/presentation/baseline/12.png b/res/presentation/baseline/12.png new file mode 100644 index 0000000000000000000000000000000000000000..ab417dffb8aca1b65dae137f6f526ecfa0995d89 Binary files /dev/null and b/res/presentation/baseline/12.png differ diff --git a/res/presentation/baseline/13.png b/res/presentation/baseline/13.png new file mode 100644 index 0000000000000000000000000000000000000000..fba16129d0cf0a22a06f6c54499eda7e8bd0c812 Binary files /dev/null and b/res/presentation/baseline/13.png differ diff --git a/res/presentation/baseline/14.png b/res/presentation/baseline/14.png new file mode 100644 index 0000000000000000000000000000000000000000..a3babf48f96c0d9d67b3082ec33fd9a202e8dbab Binary files /dev/null and b/res/presentation/baseline/14.png differ diff --git a/res/presentation/baseline/15.png b/res/presentation/baseline/15.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6512b43c9db24df54f063acc12f52b8995fcee Binary files /dev/null and b/res/presentation/baseline/15.png differ diff --git a/res/presentation/baseline/16.png b/res/presentation/baseline/16.png new file mode 100644 index 0000000000000000000000000000000000000000..88259a1a1088861b91bcc74ada69a5c97e81c47f Binary files /dev/null and b/res/presentation/baseline/16.png differ diff --git a/res/presentation/baseline/2.png b/res/presentation/baseline/2.png new file mode 100644 index 0000000000000000000000000000000000000000..7df5dad0cd5b20a3140744d73830c928cc3d163a Binary files /dev/null and b/res/presentation/baseline/2.png differ diff --git a/res/presentation/baseline/3.png b/res/presentation/baseline/3.png new file mode 100644 index 0000000000000000000000000000000000000000..f07e1fc6fd94b7e7e7004d0f33e53273efa8aa2e Binary files /dev/null and b/res/presentation/baseline/3.png differ diff --git a/res/presentation/baseline/4.png b/res/presentation/baseline/4.png new file mode 100644 index 0000000000000000000000000000000000000000..59d24e909531aa49e978abfb7cdcf60962b19476 Binary files /dev/null and b/res/presentation/baseline/4.png differ diff --git a/res/presentation/baseline/5.png b/res/presentation/baseline/5.png new file mode 100644 index 0000000000000000000000000000000000000000..05b99155e98308a177759684a30d468b94b5d808 Binary files /dev/null and b/res/presentation/baseline/5.png differ diff --git a/res/presentation/baseline/6.png b/res/presentation/baseline/6.png new file mode 100644 index 0000000000000000000000000000000000000000..6f92cc32a342a522f3c991c00782e6a9a7fb77bd Binary files /dev/null and b/res/presentation/baseline/6.png differ diff --git a/res/presentation/baseline/7.png b/res/presentation/baseline/7.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf530a7ae62f800d2d1f1ceb603354be4e627f8 Binary files /dev/null and b/res/presentation/baseline/7.png differ diff --git a/res/presentation/baseline/8.png b/res/presentation/baseline/8.png new file mode 100644 index 0000000000000000000000000000000000000000..5b63269b2f78f49e7232440620c981a5e3883d79 Binary files /dev/null and b/res/presentation/baseline/8.png differ diff --git a/res/presentation/baseline/9.png b/res/presentation/baseline/9.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba459c12ee4bc0b51315191ffc284575ac567ba Binary files /dev/null and b/res/presentation/baseline/9.png differ diff --git a/res/presentation/gt/1.png b/res/presentation/gt/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a16c863f061f0146315f8c0ef1abd363cf9ae1f Binary files /dev/null and b/res/presentation/gt/1.png differ diff --git a/res/presentation/gt/10.png b/res/presentation/gt/10.png new file mode 100644 index 0000000000000000000000000000000000000000..360612e0b3ea58686aa17ed6e7a9115fd41a9442 Binary files /dev/null and b/res/presentation/gt/10.png differ diff --git a/res/presentation/gt/11.png b/res/presentation/gt/11.png new file mode 100644 index 0000000000000000000000000000000000000000..ba64a981b0b7e283cfdc118c3feb286a18f890c6 Binary files /dev/null and b/res/presentation/gt/11.png differ diff --git a/res/presentation/gt/12.png b/res/presentation/gt/12.png new file mode 100644 index 0000000000000000000000000000000000000000..1823b95cd52dbd56ca6ef922d11e838c2b4a8fe3 Binary files /dev/null and b/res/presentation/gt/12.png differ diff --git a/res/presentation/gt/13.png b/res/presentation/gt/13.png new file mode 100644 index 0000000000000000000000000000000000000000..1085ecca4ec36e97ad511b5ee61d07188a767577 Binary files /dev/null and b/res/presentation/gt/13.png differ diff --git a/res/presentation/gt/14.png b/res/presentation/gt/14.png new file mode 100644 index 0000000000000000000000000000000000000000..4f813dc91110bc69014b00cd1ddcf663fa63a410 Binary files /dev/null and b/res/presentation/gt/14.png differ diff --git a/res/presentation/gt/15.png b/res/presentation/gt/15.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9a637b5c327987bd40324434d3be72c9e86b31 Binary files /dev/null and b/res/presentation/gt/15.png differ diff --git a/res/presentation/gt/16.png b/res/presentation/gt/16.png new file mode 100644 index 0000000000000000000000000000000000000000..5e58ecc06df1c6199c84df6b0eecc7caab8e5d9f Binary files /dev/null and b/res/presentation/gt/16.png differ diff --git a/res/presentation/gt/2.png b/res/presentation/gt/2.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3f58f9c392aec56bb47997fec27d1b59af3596 Binary files /dev/null and b/res/presentation/gt/2.png differ diff --git a/res/presentation/gt/3.png b/res/presentation/gt/3.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2fcb7d217a599feea7b01e65792af92dee5764 Binary files /dev/null and b/res/presentation/gt/3.png differ diff --git a/res/presentation/gt/4.png b/res/presentation/gt/4.png new file mode 100644 index 0000000000000000000000000000000000000000..83eff465a695d92738fbed09c21ede544feeefad Binary files /dev/null and b/res/presentation/gt/4.png differ diff --git a/res/presentation/gt/5.png b/res/presentation/gt/5.png new file mode 100644 index 0000000000000000000000000000000000000000..eed64b37e3c15a7ea583ada839d423d2e32dbf56 Binary files /dev/null and b/res/presentation/gt/5.png differ diff --git a/res/presentation/gt/6.png b/res/presentation/gt/6.png new file mode 100644 index 0000000000000000000000000000000000000000..f646e2d0048275c2a9d7f10186a1415734f29c2b Binary files /dev/null and b/res/presentation/gt/6.png differ diff --git a/res/presentation/gt/7.png b/res/presentation/gt/7.png new file mode 100644 index 0000000000000000000000000000000000000000..938ad4a69964ac97798917ceefa4f4a30c4d9e3d Binary files /dev/null and b/res/presentation/gt/7.png differ diff --git a/res/presentation/gt/8.png b/res/presentation/gt/8.png new file mode 100644 index 0000000000000000000000000000000000000000..3755bf097464bafdd45e6e344bebed38ecc00c23 Binary files /dev/null and b/res/presentation/gt/8.png differ diff --git a/res/presentation/gt/9.png b/res/presentation/gt/9.png new file mode 100644 index 0000000000000000000000000000000000000000..23a4c18622bf90982886fb11e2de250d59d4105c Binary files /dev/null and b/res/presentation/gt/9.png differ diff --git a/res/presentation/image/1.png b/res/presentation/image/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec412b3be3d92a45a6573855102a2f23d51d3dbe Binary files /dev/null and b/res/presentation/image/1.png differ diff --git a/res/presentation/image/10.png b/res/presentation/image/10.png new file mode 100644 index 0000000000000000000000000000000000000000..b480000b4358bc7a91ed986b1d4996e8dfbadecb Binary files /dev/null and b/res/presentation/image/10.png differ diff --git a/res/presentation/image/11.png b/res/presentation/image/11.png new file mode 100644 index 0000000000000000000000000000000000000000..f8167179c192db955a25bfc1392e66bb371ad30e Binary files /dev/null and b/res/presentation/image/11.png differ diff --git a/res/presentation/image/12.png b/res/presentation/image/12.png new file mode 100644 index 0000000000000000000000000000000000000000..a641e8e78483dbcbd25cb9a8a291ea38e24fa01a Binary files /dev/null and b/res/presentation/image/12.png differ diff --git a/res/presentation/image/13.png b/res/presentation/image/13.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d843e5ab437864fb69ee68f01a84f0ff12b6ff Binary files /dev/null and b/res/presentation/image/13.png differ diff --git a/res/presentation/image/14.png b/res/presentation/image/14.png new file mode 100644 index 0000000000000000000000000000000000000000..26c34c024c92f6ff7775eccca1dd8e4dc92905aa Binary files /dev/null and b/res/presentation/image/14.png differ diff --git a/res/presentation/image/15.png b/res/presentation/image/15.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae0d6e9209a925f594ba2476df58d317588baa4 Binary files /dev/null and b/res/presentation/image/15.png differ diff --git a/res/presentation/image/16.png b/res/presentation/image/16.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0905c2072f32af7aa921ad01f19c72dcd0ef48 Binary files /dev/null and b/res/presentation/image/16.png differ diff --git a/res/presentation/image/2.png b/res/presentation/image/2.png new file mode 100644 index 0000000000000000000000000000000000000000..139597018df686232da6fbf99b19749a7d8601e1 Binary files /dev/null and b/res/presentation/image/2.png differ diff --git a/res/presentation/image/3.png b/res/presentation/image/3.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7cd964f80f144db57ea833cf08ebca67512f62 Binary files /dev/null and b/res/presentation/image/3.png differ diff --git a/res/presentation/image/4.png b/res/presentation/image/4.png new file mode 100644 index 0000000000000000000000000000000000000000..32545f49316929f712bd6ec945d5450e6a2c0756 Binary files /dev/null and b/res/presentation/image/4.png differ diff --git a/res/presentation/image/5.png b/res/presentation/image/5.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a83d4fb42d1e9fa7b20ac409d86bd6d0bbd49 Binary files /dev/null and b/res/presentation/image/5.png differ diff --git a/res/presentation/image/6.png b/res/presentation/image/6.png new file mode 100644 index 0000000000000000000000000000000000000000..67eb811c41b762fdb4eac7037af649ae9ccc97d6 Binary files /dev/null and b/res/presentation/image/6.png differ diff --git a/res/presentation/image/7.png b/res/presentation/image/7.png new file mode 100644 index 0000000000000000000000000000000000000000..98fa91d9451e47ef530c4f5efd6a8197dfc518a4 Binary files /dev/null and b/res/presentation/image/7.png differ diff --git a/res/presentation/image/8.png b/res/presentation/image/8.png new file mode 100644 index 0000000000000000000000000000000000000000..310d2902fcfd380e3cd8ed74b86301a525d989aa Binary files /dev/null and b/res/presentation/image/8.png differ diff --git a/res/presentation/image/9.png b/res/presentation/image/9.png new file mode 100644 index 0000000000000000000000000000000000000000..121386d17482b710f7c792b5d902140884f3c475 Binary files /dev/null and b/res/presentation/image/9.png differ diff --git a/res/presentation/puzzle-cam/1.png b/res/presentation/puzzle-cam/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c610ea0a647a0af21700b1b0883d6c9857568d8 Binary files /dev/null and b/res/presentation/puzzle-cam/1.png differ diff --git a/res/presentation/puzzle-cam/10.png b/res/presentation/puzzle-cam/10.png new file mode 100644 index 0000000000000000000000000000000000000000..0f66a65dd57d006b8373ad94bd878af6f50fc53e Binary files /dev/null and b/res/presentation/puzzle-cam/10.png differ diff --git a/res/presentation/puzzle-cam/11.png b/res/presentation/puzzle-cam/11.png new file mode 100644 index 0000000000000000000000000000000000000000..4f3f1dacc8e61a80b4db2f8eda785c1136269c2d Binary files /dev/null and b/res/presentation/puzzle-cam/11.png differ diff --git a/res/presentation/puzzle-cam/12.png b/res/presentation/puzzle-cam/12.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf42ea09304747f7188d2229bb73960b15c7a1e Binary files /dev/null and b/res/presentation/puzzle-cam/12.png differ diff --git a/res/presentation/puzzle-cam/13.png b/res/presentation/puzzle-cam/13.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6b9850a7d8d1fab0d09ac3fe6efa28324acdfb Binary files /dev/null and b/res/presentation/puzzle-cam/13.png differ diff --git a/res/presentation/puzzle-cam/14.png b/res/presentation/puzzle-cam/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3f66be083432ea9058c9fabdb9d9af4e8457c9d4 Binary files /dev/null and b/res/presentation/puzzle-cam/14.png differ diff --git a/res/presentation/puzzle-cam/15.png b/res/presentation/puzzle-cam/15.png new file mode 100644 index 0000000000000000000000000000000000000000..589e5baeb485bd4fa3330d77c00107c6ce79c9a0 Binary files /dev/null and b/res/presentation/puzzle-cam/15.png differ diff --git a/res/presentation/puzzle-cam/16.png b/res/presentation/puzzle-cam/16.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba74a08b2c3c40248cdebac747b210efa701e9a Binary files /dev/null and b/res/presentation/puzzle-cam/16.png differ diff --git a/res/presentation/puzzle-cam/2.png b/res/presentation/puzzle-cam/2.png new file mode 100644 index 0000000000000000000000000000000000000000..74f8120415297e929e6f40d00fec5958c65d9612 Binary files /dev/null and b/res/presentation/puzzle-cam/2.png differ diff --git a/res/presentation/puzzle-cam/3.png b/res/presentation/puzzle-cam/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3d23ecc41013c4689092b9c36bb02d3e04f3a7be Binary files /dev/null and b/res/presentation/puzzle-cam/3.png differ diff --git a/res/presentation/puzzle-cam/4.png b/res/presentation/puzzle-cam/4.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf7989aa212f7907862285d70479f7a6203a830 Binary files /dev/null and b/res/presentation/puzzle-cam/4.png differ diff --git a/res/presentation/puzzle-cam/5.png b/res/presentation/puzzle-cam/5.png new file mode 100644 index 0000000000000000000000000000000000000000..69e585edec022c0f78a95d34f583844fbdb3db60 Binary files /dev/null and b/res/presentation/puzzle-cam/5.png differ diff --git a/res/presentation/puzzle-cam/6.png b/res/presentation/puzzle-cam/6.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a40034b5ef911d9c0a72447c50517ca18ce884 Binary files /dev/null and b/res/presentation/puzzle-cam/6.png differ diff --git a/res/presentation/puzzle-cam/7.png b/res/presentation/puzzle-cam/7.png new file mode 100644 index 0000000000000000000000000000000000000000..9632649b7b6a5a0391d373f0860b5f4ea30ab511 Binary files /dev/null and b/res/presentation/puzzle-cam/7.png differ diff --git a/res/presentation/puzzle-cam/8.png b/res/presentation/puzzle-cam/8.png new file mode 100644 index 0000000000000000000000000000000000000000..a41f05c087ecf3b582dbccf41ccac84a954d6424 Binary files /dev/null and b/res/presentation/puzzle-cam/8.png differ diff --git a/res/presentation/puzzle-cam/9.png b/res/presentation/puzzle-cam/9.png new file mode 100644 index 0000000000000000000000000000000000000000..514b8bc75c0bff0ced2138330ea816c57386a2d4 Binary files /dev/null and b/res/presentation/puzzle-cam/9.png differ diff --git a/res/results.PNG b/res/results.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7121a5acf3088825b08cf2bd9aeb82e040b9fc6e Binary files /dev/null and b/res/results.PNG differ diff --git a/tools/ai/augment_utils.py b/tools/ai/augment_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c8aaeee9e7912d3798bac3004e54bcd01465e7d2 --- /dev/null +++ b/tools/ai/augment_utils.py @@ -0,0 +1,268 @@ +import cv2 +import random +import numpy as np + +from PIL import Image + +def convert_OpenCV_to_PIL(image): + return Image.fromarray(image[..., ::-1]) + +def convert_PIL_to_OpenCV(image): + return np.asarray(image)[..., ::-1] + +class RandomResize: + def __init__(self, min_image_size, max_image_size): + self.min_image_size = min_image_size + self.max_image_size = max_image_size + + self.modes = [Image.BICUBIC, Image.NEAREST] + + def __call__(self, image, mode=Image.BICUBIC): + rand_image_size = random.randint(self.min_image_size, self.max_image_size) + + w, h = image.size + if w < h: + scale = rand_image_size / h + else: + scale = rand_image_size / w + + size = (int(round(w*scale)), int(round(h*scale))) + if size[0] == w and size[1] == h: + return image + + return image.resize(size, mode) + +class RandomResize_For_Segmentation: + def __init__(self, min_image_size, max_image_size): + self.min_image_size = min_image_size + self.max_image_size = max_image_size + + self.modes = [Image.BICUBIC, Image.NEAREST] + + def __call__(self, data): + image, mask = data['image'], data['mask'] + + rand_image_size = random.randint(self.min_image_size, self.max_image_size) + + w, h = image.size + if w < h: + scale = rand_image_size / h + else: + scale = rand_image_size / w + + size = (int(round(w*scale)), int(round(h*scale))) + if size[0] == w and size[1] == h: + pass + else: + data['image'] = image.resize(size, Image.BICUBIC) + data['mask'] = mask.resize(size, Image.NEAREST) + + return data + +class RandomHorizontalFlip: + def __init__(self): + pass + + def __call__(self, image): + if bool(random.getrandbits(1)): + return image.transpose(Image.FLIP_LEFT_RIGHT) + return image + +class RandomHorizontalFlip_For_Segmentation: + def __init__(self): + pass + + def __call__(self, data): + image, mask = data['image'], data['mask'] + + if bool(random.getrandbits(1)): + data['image'] = image.transpose(Image.FLIP_LEFT_RIGHT) + data['mask'] = mask.transpose(Image.FLIP_LEFT_RIGHT) + + return data + +class Normalize: + def __init__(self, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)): + self.mean = mean + self.std = std + + def __call__(self, image): + image = np.asarray(image) + norm_image = np.empty_like(image, np.float32) + + norm_image[..., 0] = (image[..., 0] / 255. - self.mean[0]) / self.std[0] + norm_image[..., 1] = (image[..., 1] / 255. - self.mean[1]) / self.std[1] + norm_image[..., 2] = (image[..., 2] / 255. - self.mean[2]) / self.std[2] + + return norm_image + +class Normalize_For_Segmentation: + def __init__(self, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)): + self.mean = mean + self.std = std + + def __call__(self, data): + image, mask = data['image'], data['mask'] + + image = np.asarray(image, dtype=np.float32) + mask = np.asarray(mask, dtype=np.int64) + + norm_image = np.empty_like(image, np.float32) + + norm_image[..., 0] = (image[..., 0] / 255. - self.mean[0]) / self.std[0] + norm_image[..., 1] = (image[..., 1] / 255. - self.mean[1]) / self.std[1] + norm_image[..., 2] = (image[..., 2] / 255. - self.mean[2]) / self.std[2] + + data['image'] = norm_image + data['mask'] = mask + + return data + +class Top_Left_Crop: + def __init__(self, crop_size, channels=3): + self.bg_value = 0 + self.crop_size = crop_size + self.crop_shape = (self.crop_size, self.crop_size, channels) + + def __call__(self, image): + h, w, c = image.shape + + ch = min(self.crop_size, h) + cw = min(self.crop_size, w) + + cropped_image = np.ones(self.crop_shape, image.dtype) * self.bg_value + cropped_image[:ch, :cw] = image[:ch, :cw] + + return cropped_image + +class Top_Left_Crop_For_Segmentation: + def __init__(self, crop_size, channels=3): + self.bg_value = 0 + self.crop_size = crop_size + self.crop_shape = (self.crop_size, self.crop_size, channels) + self.crop_shape_for_mask = (self.crop_size, self.crop_size) + + def __call__(self, data): + image, mask = data['image'], data['mask'] + + h, w, c = image.shape + + ch = min(self.crop_size, h) + cw = min(self.crop_size, w) + + cropped_image = np.ones(self.crop_shape, image.dtype) * self.bg_value + cropped_image[:ch, :cw] = image[:ch, :cw] + + cropped_mask = np.ones(self.crop_shape_for_mask, mask.dtype) * 255 + cropped_mask[:ch, :cw] = mask[:ch, :cw] + + data['image'] = cropped_image + data['mask'] = cropped_mask + + return data + +class RandomCrop: + def __init__(self, crop_size, channels=3, with_bbox=False): + self.bg_value = 0 + self.with_bbox = with_bbox + self.crop_size = crop_size + self.crop_shape = (self.crop_size, self.crop_size, channels) + + def get_random_crop_box(self, image): + h, w, c = image.shape + + ch = min(self.crop_size, h) + cw = min(self.crop_size, w) + + w_space = w - self.crop_size + h_space = h - self.crop_size + + if w_space > 0: + cont_left = 0 + img_left = random.randrange(w_space + 1) + else: + cont_left = random.randrange(-w_space + 1) + img_left = 0 + + if h_space > 0: + cont_top = 0 + img_top = random.randrange(h_space + 1) + else: + cont_top = random.randrange(-h_space + 1) + img_top = 0 + + dst_bbox = { + 'xmin' : cont_left, 'ymin' : cont_top, + 'xmax' : cont_left+cw, 'ymax' : cont_top+ch + } + src_bbox = { + 'xmin' : img_left, 'ymin' : img_top, + 'xmax' : img_left+cw, 'ymax' : img_top+ch + } + + return dst_bbox, src_bbox + + def __call__(self, image, bbox_dic=None): + if bbox_dic is None: + dst_bbox, src_bbox = self.get_random_crop_box(image) + else: + dst_bbox, src_bbox = bbox_dic['dst_bbox'], bbox_dic['src_bbox'] + + cropped_image = np.ones(self.crop_shape, image.dtype) * self.bg_value + cropped_image[dst_bbox['ymin']:dst_bbox['ymax'], dst_bbox['xmin']:dst_bbox['xmax']] = \ + image[src_bbox['ymin']:src_bbox['ymax'], src_bbox['xmin']:src_bbox['xmax']] + + if self.with_bbox: + return cropped_image, {'dst_bbox':dst_bbox, 'src_bbox':src_bbox} + else: + return cropped_image + +class RandomCrop_For_Segmentation(RandomCrop): + def __init__(self, crop_size): + super().__init__(crop_size) + + self.crop_shape_for_mask = (self.crop_size, self.crop_size) + + def __call__(self, data): + image, mask = data['image'], data['mask'] + + dst_bbox, src_bbox = self.get_random_crop_box(image) + + cropped_image = np.ones(self.crop_shape, image.dtype) * self.bg_value + cropped_image[dst_bbox['ymin']:dst_bbox['ymax'], dst_bbox['xmin']:dst_bbox['xmax']] = \ + image[src_bbox['ymin']:src_bbox['ymax'], src_bbox['xmin']:src_bbox['xmax']] + + cropped_mask = np.ones(self.crop_shape_for_mask, mask.dtype) * 255 + cropped_mask[dst_bbox['ymin']:dst_bbox['ymax'], dst_bbox['xmin']:dst_bbox['xmax']] = \ + mask[src_bbox['ymin']:src_bbox['ymax'], src_bbox['xmin']:src_bbox['xmax']] + + data['image'] = cropped_image + data['mask'] = cropped_mask + + return data + +class Transpose: + def __init__(self): + pass + + def __call__(self, image): + return image.transpose((2, 0, 1)) + +class Transpose_For_Segmentation: + def __init__(self): + pass + + def __call__(self, data): + # h, w, c -> c, h, w + data['image'] = data['image'].transpose((2, 0, 1)) + return data + +class Resize_For_Mask: + def __init__(self, size): + self.size = (size, size) + + def __call__(self, data): + mask = Image.fromarray(data['mask'].astype(np.uint8)) + mask = mask.resize(self.size, Image.NEAREST) + data['mask'] = np.asarray(mask, dtype=np.uint64) + return data diff --git a/tools/ai/demo_utils.py b/tools/ai/demo_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..3bc4fe040150350660211ea1da40585236266efb --- /dev/null +++ b/tools/ai/demo_utils.py @@ -0,0 +1,111 @@ +import cv2 +import random +import numpy as np + +from PIL import Image + +def get_strided_size(orig_size, stride): + return ((orig_size[0]-1)//stride+1, (orig_size[1]-1)//stride+1) + +def get_strided_up_size(orig_size, stride): + strided_size = get_strided_size(orig_size, stride) + return strided_size[0]*stride, strided_size[1]*stride + +def imshow(image, delay=0, mode='RGB', title='show'): + if mode == 'RGB': + demo_image = image[..., ::-1] + else: + demo_image = image + + cv2.imshow(title, demo_image) + if delay >= 0: + cv2.waitKey(delay) + +def transpose(image): + return image.transpose((1, 2, 0)) + +def denormalize(image, mean=None, std=None, dtype=np.uint8, tp=True): + if tp: + image = transpose(image) + + if mean is not None: + image = (image * std) + mean + + if dtype == np.uint8: + image *= 255. + return image.astype(np.uint8) + else: + return image + +def colormap(cam, shape=None, mode=cv2.COLORMAP_JET): + if shape is not None: + h, w, c = shape + cam = cv2.resize(cam, (w, h)) + cam = cv2.applyColorMap(cam, mode) + return cam + +def decode_from_colormap(data, colors): + ignore = (data == 255).astype(np.int32) + + mask = 1 - ignore + data *= mask + + h, w = data.shape + image = colors[data.reshape((h * w))].reshape((h, w, 3)) + + ignore = np.concatenate([ignore[..., np.newaxis], ignore[..., np.newaxis], ignore[..., np.newaxis]], axis=-1) + image[ignore.astype(np.bool)] = 255 + return image + +def normalize(cam, epsilon=1e-5): + cam = np.maximum(cam, 0) + max_value = np.max(cam, axis=(0, 1), keepdims=True) + return np.maximum(cam - epsilon, 0) / (max_value + epsilon) + +def crf_inference(img, probs, t=10, scale_factor=1, labels=21): + import pydensecrf.densecrf as dcrf + from pydensecrf.utils import unary_from_softmax + + h, w = img.shape[:2] + n_labels = labels + + d = dcrf.DenseCRF2D(w, h, n_labels) + + unary = unary_from_softmax(probs) + unary = np.ascontiguousarray(unary) + + d.setUnaryEnergy(unary) + d.addPairwiseGaussian(sxy=3/scale_factor, compat=3) + d.addPairwiseBilateral(sxy=80/scale_factor, srgb=13, rgbim=np.copy(img), compat=10) + Q = d.inference(t) + + return np.array(Q).reshape((n_labels, h, w)) + +def crf_with_alpha(ori_image, cams, alpha): + # h, w, c -> c, h, w + # cams = cams.transpose((2, 0, 1)) + + bg_score = np.power(1 - np.max(cams, axis=0, keepdims=True), alpha) + bgcam_score = np.concatenate((bg_score, cams), axis=0) + + cams_with_crf = crf_inference(ori_image, bgcam_score, labels=bgcam_score.shape[0]) + # return cams_with_crf.transpose((1, 2, 0)) + return cams_with_crf + +def crf_inference_label(img, labels, t=10, n_labels=21, gt_prob=0.7): + import pydensecrf.densecrf as dcrf + from pydensecrf.utils import unary_from_labels + + h, w = img.shape[:2] + + d = dcrf.DenseCRF2D(w, h, n_labels) + + unary = unary_from_labels(labels, n_labels, gt_prob=gt_prob, zero_unsure=False) + + d.setUnaryEnergy(unary) + d.addPairwiseGaussian(sxy=3, compat=3) + d.addPairwiseBilateral(sxy=50, srgb=5, rgbim=np.ascontiguousarray(np.copy(img)), compat=10) + + q = d.inference(t) + + return np.argmax(np.array(q).reshape((n_labels, h, w)), axis=0) \ No newline at end of file diff --git a/tools/ai/evaluate_utils.py b/tools/ai/evaluate_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..f1b6fe307a73a6a698b30e965e47887f83a749df --- /dev/null +++ b/tools/ai/evaluate_utils.py @@ -0,0 +1,145 @@ +import numpy as np + +from tools.general.json_utils import read_json + +def calculate_for_tags(pred_tags, gt_tags): + """This function calculates precision, recall, and f1-score using tags. + + Args: + pred_tags: + The type of variable is list. + The type of each element is string. + + gt_tags: + The type of variable is list. + the type of each element is string. + + Returns: + precision: + pass + + recall: + pass + + f1-score: + pass + """ + if len(pred_tags) == 0 and len(gt_tags) == 0: + return 100, 100, 100 + elif len(pred_tags) == 0 or len(gt_tags) == 0: + return 0, 0, 0 + + pred_tags = np.asarray(pred_tags) + gt_tags = np.asarray(gt_tags) + + precision = pred_tags[:, np.newaxis] == gt_tags[np.newaxis, :] + recall = gt_tags[:, np.newaxis] == pred_tags[np.newaxis, :] + + precision = np.sum(precision) / len(precision) * 100 + recall = np.sum(recall) / len(recall) * 100 + + if precision == 0 and recall == 0: + f1_score = 0 + else: + f1_score = 2 * ((precision * recall) / (precision + recall)) + + return precision, recall, f1_score + +def calculate_mIoU(pred_mask, gt_mask): + """This function is to calculate precision, recall, and f1-score using tags. + + Args: + pred_mask: + The type of variable is numpy array. + + gt_mask: + The type of variable is numpy array. + + Returns: + miou: + miou is meanIU. + """ + inter = np.logical_and(pred_mask, gt_mask) + union = np.logical_or(pred_mask, gt_mask) + + epsilon = 1e-5 + miou = (np.sum(inter) + epsilon) / (np.sum(union) + epsilon) + return miou * 100 + +class Calculator_For_mIoU: + def __init__(self, json_path): + data = read_json(json_path) + self.class_names = ['background'] + data['class_names'] + self.classes = len(self.class_names) + + self.clear() + + def get_data(self, pred_mask, gt_mask): + obj_mask = gt_mask<255 + correct_mask = (pred_mask==gt_mask) * obj_mask + + P_list, T_list, TP_list = [], [], [] + for i in range(self.classes): + P_list.append(np.sum((pred_mask==i)*obj_mask)) + T_list.append(np.sum((gt_mask==i)*obj_mask)) + TP_list.append(np.sum((gt_mask==i)*correct_mask)) + + return (P_list, T_list, TP_list) + + def add_using_data(self, data): + P_list, T_list, TP_list = data + for i in range(self.classes): + self.P[i] += P_list[i] + self.T[i] += T_list[i] + self.TP[i] += TP_list[i] + + def add(self, pred_mask, gt_mask): + obj_mask = gt_mask<255 + correct_mask = (pred_mask==gt_mask) * obj_mask + + for i in range(self.classes): + self.P[i] += np.sum((pred_mask==i)*obj_mask) + self.T[i] += np.sum((gt_mask==i)*obj_mask) + self.TP[i] += np.sum((gt_mask==i)*correct_mask) + + def get(self, detail=False, clear=True): + IoU_dic = {} + IoU_list = [] + + FP_list = [] # over activation + FN_list = [] # under activation + + for i in range(self.classes): + IoU = self.TP[i]/(self.T[i]+self.P[i]-self.TP[i]+1e-10) * 100 + FP = (self.P[i]-self.TP[i])/(self.T[i] + self.P[i] - self.TP[i] + 1e-10) + FN = (self.T[i]-self.TP[i])/(self.T[i] + self.P[i] - self.TP[i] + 1e-10) + + IoU_dic[self.class_names[i]] = IoU + + IoU_list.append(IoU) + FP_list.append(FP) + FN_list.append(FN) + + mIoU = np.mean(np.asarray(IoU_list)) + mIoU_foreground = np.mean(np.asarray(IoU_list)[1:]) + + FP = np.mean(np.asarray(FP_list)) + FN = np.mean(np.asarray(FN_list)) + + if clear: + self.clear() + + if detail: + return mIoU, mIoU_foreground, IoU_dic, FP, FN + else: + return mIoU, mIoU_foreground + + def clear(self): + self.TP = [] + self.P = [] + self.T = [] + + for _ in range(self.classes): + self.TP.append(0) + self.P.append(0) + self.T.append(0) \ No newline at end of file diff --git a/tools/ai/log_utils.py b/tools/ai/log_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ff0d811064d7c4c892f4d8ee977a11bb84d6d967 --- /dev/null +++ b/tools/ai/log_utils.py @@ -0,0 +1,50 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import numpy as np +from tools.general.txt_utils import add_txt + +def log_print(message, path): + """This function shows message and saves message. + + Args: + pred_tags: + The type of variable is list. + The type of each element is string. + + gt_tags: + The type of variable is list. + the type of each element is string. + """ + print(message) + add_txt(path, message) + +class Logger: + def __init__(self): + pass + +class Average_Meter: + def __init__(self, keys): + self.keys = keys + self.clear() + + def add(self, dic): + for key, value in dic.items(): + self.data_dic[key].append(value) + + def get(self, keys=None, clear=False): + if keys is None: + keys = self.keys + + dataset = [float(np.mean(self.data_dic[key])) for key in keys] + if clear: + self.clear() + + if len(dataset) == 1: + dataset = dataset[0] + + return dataset + + def clear(self): + self.data_dic = {key : [] for key in self.keys} + diff --git a/tools/ai/optim_utils.py b/tools/ai/optim_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9700275db01e5517e4918b14acfd66077d48ce10 --- /dev/null +++ b/tools/ai/optim_utils.py @@ -0,0 +1,23 @@ +import torch +from .torch_utils import * + +class PolyOptimizer(torch.optim.SGD): + def __init__(self, params, lr, weight_decay, max_step, momentum=0.9, nesterov=False): + super().__init__(params, lr, weight_decay, nesterov=nesterov) + + self.global_step = 0 + self.max_step = max_step + self.momentum = momentum + + self.__initial_lr = [group['lr'] for group in self.param_groups] + + def step(self, closure=None): + if self.global_step < self.max_step: + lr_mult = (1 - self.global_step / self.max_step) ** self.momentum + + for i in range(len(self.param_groups)): + self.param_groups[i]['lr'] = self.__initial_lr[i] * lr_mult + + super().step(closure) + + self.global_step += 1 diff --git a/tools/ai/randaugment.py b/tools/ai/randaugment.py new file mode 100644 index 0000000000000000000000000000000000000000..3a63275f0a890e987020c317da362101fa0300fc --- /dev/null +++ b/tools/ai/randaugment.py @@ -0,0 +1,225 @@ +# code in this file is adpated from +# https://github.com/ildoonet/pytorch-randaugment/blob/master/RandAugment/augmentations.py +# https://github.com/google-research/fixmatch/blob/master/third_party/auto_augment/augmentations.py +# https://github.com/google-research/fixmatch/blob/master/libml/ctaugment.py +import logging +import random + +import numpy as np +import PIL +import PIL.ImageOps +import PIL.ImageEnhance +import PIL.ImageDraw +from PIL import Image + +logger = logging.getLogger(__name__) + +PARAMETER_MAX = 10 + + +def AutoContrast(img, **kwarg): + return PIL.ImageOps.autocontrast(img) + + +def Brightness(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + return PIL.ImageEnhance.Brightness(img).enhance(v) + + +def Color(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + return PIL.ImageEnhance.Color(img).enhance(v) + + +def Contrast(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + return PIL.ImageEnhance.Contrast(img).enhance(v) + + +def Cutout(img, v, max_v, bias=0): + if v == 0: + return img + v = _float_parameter(v, max_v) + bias + v = int(v * min(img.size)) + return CutoutAbs(img, v) + + +def CutoutAbs(img, v, **kwarg): + w, h = img.size + x0 = np.random.uniform(0, w) + y0 = np.random.uniform(0, h) + x0 = int(max(0, x0 - v / 2.)) + y0 = int(max(0, y0 - v / 2.)) + x1 = int(min(w, x0 + v)) + y1 = int(min(h, y0 + v)) + xy = (x0, y0, x1, y1) + + # gray + # color = (127, 127, 127) + + # black + color = (0, 0, 0) + + img = img.copy() + PIL.ImageDraw.Draw(img).rectangle(xy, color) + return img + + +def Equalize(img, **kwarg): + return PIL.ImageOps.equalize(img) + + +def Identity(img, **kwarg): + return img + + +def Invert(img, **kwarg): + return PIL.ImageOps.invert(img) + + +def Posterize(img, v, max_v, bias=0): + v = _int_parameter(v, max_v) + bias + return PIL.ImageOps.posterize(img, v) + + +def Rotate(img, v, max_v, bias=0): + v = _int_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + return img.rotate(v) + + +def Sharpness(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + return PIL.ImageEnhance.Sharpness(img).enhance(v) + + +def ShearX(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + return img.transform(img.size, PIL.Image.AFFINE, (1, v, 0, 0, 1, 0)) + + +def ShearY(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + return img.transform(img.size, PIL.Image.AFFINE, (1, 0, 0, v, 1, 0)) + + +def Solarize(img, v, max_v, bias=0): + v = _int_parameter(v, max_v) + bias + return PIL.ImageOps.solarize(img, 256 - v) + + +def SolarizeAdd(img, v, max_v, bias=0, threshold=128): + v = _int_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + img_np = np.array(img).astype(np.int) + img_np = img_np + v + img_np = np.clip(img_np, 0, 255) + img_np = img_np.astype(np.uint8) + img = Image.fromarray(img_np) + return PIL.ImageOps.solarize(img, threshold) + + +def TranslateX(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + v = int(v * img.size[0]) + return img.transform(img.size, PIL.Image.AFFINE, (1, 0, v, 0, 1, 0)) + + +def TranslateY(img, v, max_v, bias=0): + v = _float_parameter(v, max_v) + bias + if random.random() < 0.5: + v = -v + v = int(v * img.size[1]) + return img.transform(img.size, PIL.Image.AFFINE, (1, 0, 0, 0, 1, v)) + + +def _float_parameter(v, max_v): + return float(v) * max_v / PARAMETER_MAX + + +def _int_parameter(v, max_v): + return int(v * max_v / PARAMETER_MAX) + + +def fixmatch_augment_pool(): + # FixMatch paper + augs = [(AutoContrast, None, None), + (Brightness, 0.9, 0.05), + (Color, 0.9, 0.05), + (Contrast, 0.9, 0.05), + (Equalize, None, None), + (Identity, None, None), + (Posterize, 4, 4), + (Rotate, 30, 0), + (Sharpness, 0.9, 0.05), + (ShearX, 0.3, 0), + (ShearY, 0.3, 0), + (Solarize, 256, 0), + (TranslateX, 0.3, 0), + (TranslateY, 0.3, 0)] + return augs + + +def my_augment_pool(): + # Test + augs = [(AutoContrast, None, None), + (Brightness, 1.8, 0.1), + (Color, 1.8, 0.1), + (Contrast, 1.8, 0.1), + (Cutout, 0.2, 0), + (Equalize, None, None), + (Invert, None, None), + (Posterize, 4, 4), + (Rotate, 30, 0), + (Sharpness, 1.8, 0.1), + (ShearX, 0.3, 0), + (ShearY, 0.3, 0), + (Solarize, 256, 0), + (SolarizeAdd, 110, 0), + (TranslateX, 0.45, 0), + (TranslateY, 0.45, 0)] + return augs + + +class RandAugmentPC(object): + def __init__(self, n, m): + assert n >= 1 + assert 1 <= m <= 10 + self.n = n + self.m = m + self.augment_pool = my_augment_pool() + + def __call__(self, img): + ops = random.choices(self.augment_pool, k=self.n) + for op, max_v, bias in ops: + prob = np.random.uniform(0.2, 0.8) + if random.random() + prob >= 1: + img = op(img, v=self.m, max_v=max_v, bias=bias) + img = CutoutAbs(img, int(32*0.5)) + return img + + +class RandAugmentMC(object): + def __init__(self, n, m): + assert n >= 1 + assert 1 <= m <= 10 + self.n = n + self.m = m + self.augment_pool = fixmatch_augment_pool() + + def __call__(self, img): + ops = random.choices(self.augment_pool, k=self.n) + for op, max_v, bias in ops: + v = np.random.randint(1, self.m) + if random.random() < 0.5: + img = op(img, v=v, max_v=max_v, bias=bias) + img = CutoutAbs(img, int(32*0.5)) + return img diff --git a/tools/ai/torch_utils.py b/tools/ai/torch_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9380b94a18c25d74b80e6228f3ddcfd1362ba171 --- /dev/null +++ b/tools/ai/torch_utils.py @@ -0,0 +1,123 @@ +import cv2 +import math +import torch +import random +import numpy as np + +import torch.nn.functional as F + +from torch.optim.lr_scheduler import LambdaLR + +def set_seed(seed): + random.seed(seed) + np.random.seed(seed) + + torch.manual_seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + +def rotation(x, k): + return torch.rot90(x, k, (1, 2)) + +def interleave(x, size): + s = list(x.shape) + return x.reshape([-1, size] + s[1:]).transpose(0, 1).reshape([-1] + s[1:]) + +def de_interleave(x, size): + s = list(x.shape) + return x.reshape([size, -1] + s[1:]).transpose(0, 1).reshape([-1] + s[1:]) + +def resize_for_tensors(tensors, size, mode='bilinear', align_corners=False): + return F.interpolate(tensors, size, mode=mode, align_corners=align_corners) + +def L1_Loss(A_tensors, B_tensors): + return torch.abs(A_tensors - B_tensors) + +def L2_Loss(A_tensors, B_tensors): + return torch.pow(A_tensors - B_tensors, 2) + +# ratio = 0.2, top=20% +def Online_Hard_Example_Mining(values, ratio=0.2): + b, c, h, w = values.size() + return torch.topk(values.reshape(b, -1), k=int(c * h * w * ratio), dim=-1)[0] + +def shannon_entropy_loss(logits, activation=torch.sigmoid, epsilon=1e-5): + v = activation(logits) + return -torch.sum(v * torch.log(v+epsilon), dim=1).mean() + +def make_cam(x, epsilon=1e-5): + # relu(x) = max(x, 0) + x = F.relu(x) + + b, c, h, w = x.size() + + flat_x = x.view(b, c, (h * w)) + max_value = flat_x.max(axis=-1)[0].view((b, c, 1, 1)) + + return F.relu(x - epsilon) / (max_value + epsilon) + +def one_hot_embedding(label, classes): + """Embedding labels to one-hot form. + + Args: + labels: (int) class labels. + num_classes: (int) number of classes. + + Returns: + (tensor) encoded labels, sized [N, #classes]. + """ + + vector = np.zeros((classes), dtype = np.float32) + if len(label) > 0: + vector[label] = 1. + return vector + +def calculate_parameters(model): + return sum(param.numel() for param in model.parameters())/1000000.0 + +def get_learning_rate_from_optimizer(optimizer): + return optimizer.param_groups[0]['lr'] + +def get_numpy_from_tensor(tensor): + return tensor.cpu().detach().numpy() + +def load_model(model, model_path, parallel=False): + if parallel: + model.module.load_state_dict(torch.load(model_path)) + else: + model.load_state_dict(torch.load(model_path)) + +def save_model(model, model_path, parallel=False): + if parallel: + torch.save(model.module.state_dict(), model_path) + else: + torch.save(model.state_dict(), model_path) + +def transfer_model(pretrained_model, model): + pretrained_dict = pretrained_model.state_dict() + model_dict = model.state_dict() + + pretrained_dict = {k:v for k, v in pretrained_dict.items() if k in model_dict} + + model_dict.update(pretrained_dict) + model.load_state_dict(model_dict) + +def get_learning_rate(optimizer): + lr=[] + for param_group in optimizer.param_groups: + lr +=[ param_group['lr'] ] + return lr + +def get_cosine_schedule_with_warmup(optimizer, + warmup_iteration, + max_iteration, + cycles=7./16. + ): + def _lr_lambda(current_iteration): + if current_iteration < warmup_iteration: + return float(current_iteration) / float(max(1, warmup_iteration)) + + no_progress = float(current_iteration - warmup_iteration) / float(max(1, max_iteration - warmup_iteration)) + return max(0., math.cos(math.pi * cycles * no_progress)) + + return LambdaLR(optimizer, _lr_lambda, -1) \ No newline at end of file diff --git a/tools/dataset/voc_utils.py b/tools/dataset/voc_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..257841f44ea9995a9801554b0f3666b9f44dc694 --- /dev/null +++ b/tools/dataset/voc_utils.py @@ -0,0 +1,43 @@ +import numpy as np + +def color_map(N = 256): + def bitget(byteval, idx): + return ((byteval & (1 << idx)) != 0) + + cmap = np.zeros((N, 3), dtype = np.uint8) + for i in range(N): + r = g = b = 0 + c = i + for j in range(8): + r = r | (bitget(c, 0) << 7-j) + g = g | (bitget(c, 1) << 7-j) + b = b | (bitget(c, 2) << 7-j) + c = c >> 3 + + cmap[i] = np.array([b, g, r]) + + return cmap + +def get_color_map_dic(): + labels = ['background', + 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', + 'bus', 'car', 'cat', 'chair', 'cow', + 'diningtable', 'dog', 'horse', 'motorbike', 'person', + 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor', 'void'] + + # n_classes = 21 + n_classes = len(labels) + + h = 20 + w = 500 + + color_index_list = [index for index in range(n_classes)] + + cmap = color_map() + cmap_dic = {label : cmap[color_index] for label, color_index in zip(labels, range(n_classes))} + cmap_image = np.empty((h * len(labels), w, 3), dtype = np.uint8) + + for color_index in color_index_list: + cmap_image[color_index * h : (color_index + 1) * h, :] = cmap[color_index] + + return cmap_dic, cmap_image, labels diff --git a/tools/general/io_utils.py b/tools/general/io_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..676cafce82e96baf7501b2ced710d5ce5706ce89 --- /dev/null +++ b/tools/general/io_utils.py @@ -0,0 +1,24 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import os +import random +import argparse + +import numpy as np + +def create_directory(path): + if not os.path.isdir(path): + os.makedirs(path) + return path + +def str2bool(v): + if isinstance(v, bool): + return v + if v.lower() in ('yes', 'true', 't', 'y', '1'): + return True + elif v.lower() in ('no', 'false', 'f', 'n', '0'): + return False + else: + raise argparse.ArgumentTypeError('Boolean value expected.') + diff --git a/tools/general/json_utils.py b/tools/general/json_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..85cd1c64e611bbd4b1d160f7f952d53787ead051 --- /dev/null +++ b/tools/general/json_utils.py @@ -0,0 +1,14 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import json + +def read_json(filepath): + with open(filepath, 'r') as f: + data = json.load(f) + return data + +def write_json(filepath, data): + with open(filepath, 'w') as f: + json.dump(data, f, indent = '\t') + diff --git a/tools/general/pickle_utils.py b/tools/general/pickle_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fb783d27d62b86b133f9b90c4424dd2694496e54 --- /dev/null +++ b/tools/general/pickle_utils.py @@ -0,0 +1,11 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import pickle + +def dump_pickle(path, data): + pickle.dump(data, open(path, 'wb')) + +def load_pickle(path): + return pickle.load(open(path, 'rb')) + diff --git a/tools/general/time_utils.py b/tools/general/time_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2857f81ff13d026a7311c79baed76bee22f199a5 --- /dev/null +++ b/tools/general/time_utils.py @@ -0,0 +1,32 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import time + +def get_today(): + now = time.localtime() + s = "%04d-%02d-%02d-%02dh%02dm%02ds" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) + return s + +class Timer: + def __init__(self): + self.start_time = 0.0 + self.end_time = 0.0 + + self.tik() + + def tik(self): + self.start_time = time.time() + + def tok(self, ms = False, clear=False): + self.end_time = time.time() + + if ms: + duration = int((self.end_time - self.start_time) * 1000) + else: + duration = int(self.end_time - self.start_time) + + if clear: + self.tik() + + return duration \ No newline at end of file diff --git a/tools/general/txt_utils.py b/tools/general/txt_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0d17125cedde488604629d9b6fe10791f365808a --- /dev/null +++ b/tools/general/txt_utils.py @@ -0,0 +1,15 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +def read_txt(path): + with open(path, 'r') as f: + return [line.strip() for line in f.readlines()] + +def write_txt(path, data_list): + with open(path, 'w') as f: + for data in data_list: + f.write(data + '\n') + +def add_txt(path, string): + with open(path, 'a+') as f: + f.write(string + '\n') \ No newline at end of file diff --git a/tools/general/xml_utils.py b/tools/general/xml_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..61b946adc95c33b61649323bbf0e631c0b499466 --- /dev/null +++ b/tools/general/xml_utils.py @@ -0,0 +1,32 @@ +# Copyright (C) 2020 * Ltd. All rights reserved. +# author : Sanghyeon Jo + +import xml.etree.ElementTree as ET + +def read_xml(xml_path): + tree = ET.parse(xml_path) + root = tree.getroot() + + size = root.find('size') + image_width = int(size.find('width').text) + image_height = int(size.find('height').text) + + bboxes = [] + classes = [] + + for obj in root.findall('object'): + label = obj.find('name').text + bbox = obj.find('bndbox') + + bbox_xmin = max(min(int(bbox.find('xmin').text.split('.')[0]), image_width - 1), 0) + bbox_ymin = max(min(int(bbox.find('ymin').text.split('.')[0]), image_height - 1), 0) + bbox_xmax = max(min(int(bbox.find('xmax').text.split('.')[0]), image_width - 1), 0) + bbox_ymax = max(min(int(bbox.find('ymax').text.split('.')[0]), image_height - 1), 0) + + if (bbox_xmax - bbox_xmin) == 0 or (bbox_ymax - bbox_ymin) == 0: + continue + + bboxes.append([bbox_xmin, bbox_ymin, bbox_xmax, bbox_ymax]) + classes.append(label) + + return bboxes, classes